Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin - Version 3.2.2

Version Description

  • Show link slug instead of full URL in list
  • PHP 8.0 support
  • Pro: Fix keywords being replaced in scripts
Download this release

Release Info

Developer cartpauj
Plugin Icon 128x128 Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin
Version 3.2.2
Comparing to
See all releases

Code changes from version 3.2.1 to 3.2.2

Files changed (69) hide show
  1. .distignore +18 -0
  2. .github/workflows/main.yml +17 -0
  3. .gitignore +2 -0
  4. .phpcs.xml.dist +49 -0
  5. .travis.yml +67 -0
  6. .wordpress-org/banner-1544x500.png +0 -0
  7. .wordpress-org/banner-772x250.png +0 -0
  8. .wordpress-org/icon-128x128.png +0 -0
  9. .wordpress-org/icon-256x256.png +0 -0
  10. README +5 -0
  11. app/controllers/PrliOptionsController.php +1 -1
  12. app/helpers/PrliLinksHelper.php +1 -1
  13. app/models/PrliLink.php +1 -1
  14. app/views/admin/onboarding/update.php +0 -146
  15. i18n/pretty-link.pot +2868 -2868
  16. images/not_tracking.png +0 -0
  17. images/update-3-0.png +0 -0
  18. images/update-all-new-link-listing.png +0 -0
  19. images/update-categories-tags.png +0 -0
  20. images/update-gutenberg-editor.png +0 -0
  21. images/update-new-link-editor-1.png +0 -0
  22. images/update-new-link-editor-2.png +0 -0
  23. js/admin_shared.js +1 -1
  24. package-lock.json +12767 -0
  25. package.json +37 -0
  26. phpunit.xml.dist +15 -0
  27. pretty-link.php +2 -2
  28. pro/README +0 -0
  29. pro/app/controllers/PlpAppController.php +179 -0
  30. pro/app/controllers/PlpDbController.php +282 -0
  31. pro/app/controllers/PlpImportExportController.php +378 -0
  32. pro/app/controllers/PlpKeywordsController.php +513 -0
  33. pro/app/controllers/PlpLinkCategoriesController.php +43 -0
  34. pro/app/controllers/PlpLinkTagsController.php +50 -0
  35. pro/app/controllers/PlpLinksController.php +892 -0
  36. pro/app/controllers/PlpOptionsController.php +249 -0
  37. pro/app/controllers/PlpPostsController.php +259 -0
  38. pro/app/controllers/PlpPrettyBarController.php +127 -0
  39. pro/app/controllers/PlpPublicLinksController.php +154 -0
  40. pro/app/controllers/PlpReportsController.php +344 -0
  41. pro/app/controllers/PlpSocialButtonsController.php +71 -0
  42. pro/app/controllers/PlpToolsController.php +18 -0
  43. pro/app/controllers/PlpTwitterController.php +22 -0
  44. pro/app/controllers/index.php +2 -0
  45. pro/app/helpers/PlpLinksHelper.php +36 -0
  46. pro/app/helpers/PlpOptionsHelper.php +36 -0
  47. pro/app/helpers/PlpPostsHelper.php +84 -0
  48. pro/app/helpers/PlpPrettyBarHelper.php +65 -0
  49. pro/app/helpers/PlpPublicLinksHelper.php +19 -0
  50. pro/app/helpers/PlpSocialButtonsHelper.php +65 -0
  51. pro/app/helpers/PlpTwitterHelper.php +26 -0
  52. pro/app/helpers/index.php +2 -0
  53. pro/app/index.php +2 -0
  54. pro/app/models/PlpKeyword.php +724 -0
  55. pro/app/models/PlpLinkRotation.php +186 -0
  56. pro/app/models/PlpOptions.php +407 -0
  57. pro/app/models/PlpPostOptions.php +79 -0
  58. pro/app/models/PlpReport.php +497 -0
  59. pro/app/models/PlpUrlReplacement.php +409 -0
  60. pro/app/models/PlpUtils.php +276 -0
  61. pro/app/models/index.php +2 -0
  62. pro/app/views/import-export/form.php +52 -0
  63. pro/app/views/import-export/import-error.php +11 -0
  64. pro/app/views/import-export/import.php +51 -0
  65. pro/app/views/import-export/index.php +2 -0
  66. pro/app/views/index.php +2 -0
  67. pro/app/views/links/bulk-edit.php +31 -0
  68. pro/app/views/links/cloaked-redirect.php +22 -0
  69. pro/app/views/links/form.php +250 -0
.distignore ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .gitignore
2
+ .distignore
3
+ /pro
4
+ /assets
5
+ /tests
6
+ /node_modules
7
+ ^test.*
8
+ ^phpunit.*
9
+ ^README
10
+ ^script/.*
11
+ ^script
12
+ ^composer.json
13
+ ^phpcs.ruleset.xml
14
+ ^\.travis.yml
15
+ ^\.phpcs.xml.dist
16
+ ^webpack.config.js
17
+ ^package.*
18
+ ^phpunit.*
.github/workflows/main.yml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Deploy to WordPress.org
2
+ on:
3
+ push:
4
+ tags:
5
+ - "*"
6
+ jobs:
7
+ tag:
8
+ name: New tag
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@master
12
+ - name: WordPress Plugin Deploy
13
+ uses: 10up/action-wordpress-plugin-deploy@stable
14
+ env:
15
+ SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
16
+ SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
17
+ SLUG: pretty-link # optional, remove if GitHub repo name matches SVN slug, including capitalization
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
1
+ script/
2
+ node_modules/
.phpcs.xml.dist ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <ruleset name="WordPress Coding Standards based custom ruleset for your plugin">
3
+ <description>Generally-applicable sniffs for WordPress plugins.</description>
4
+
5
+ <!-- What to scan -->
6
+ <file>.</file>
7
+ <exclude-pattern>/vendor/</exclude-pattern>
8
+ <exclude-pattern>/node_modules/</exclude-pattern>
9
+
10
+ <!-- How to scan -->
11
+ <!-- Usage instructions: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage -->
12
+ <!-- Annotated ruleset: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml -->
13
+ <arg value="sp"/> <!-- Show sniff and progress -->
14
+ <arg name="basepath" value="./"/><!-- Strip the file paths down to the relevant bit -->
15
+ <arg name="colors"/>
16
+ <arg name="extensions" value="php"/>
17
+ <arg name="parallel" value="8"/><!-- Enables parallel processing when available for faster results. -->
18
+
19
+ <!-- Rules: Check PHP version compatibility -->
20
+ <!-- https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions -->
21
+ <config name="testVersion" value="5.3-"/>
22
+ <!-- https://github.com/PHPCompatibility/PHPCompatibilityWP -->
23
+ <rule ref="PHPCompatibilityWP"/>
24
+
25
+ <!-- Rules: WordPress Coding Standards -->
26
+ <!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards -->
27
+ <!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/wiki/Customizable-sniff-properties -->
28
+ <config name="minimum_supported_wp_version" value="4.6"/>
29
+ <rule ref="WordPress">
30
+ <exclude name="WordPress.VIP"/>
31
+ </rule>
32
+ <rule ref="WordPress.NamingConventions.PrefixAllGlobals">
33
+ <properties>
34
+ <!-- Value: replace the function, class, and variable prefixes used. Separate multiple prefixes with a comma. -->
35
+ <property name="prefixes" type="array" value="my-plugin"/>
36
+ </properties>
37
+ </rule>
38
+ <rule ref="WordPress.WP.I18n">
39
+ <properties>
40
+ <!-- Value: replace the text domain used. -->
41
+ <property name="text_domain" type="array" value="my-plugin"/>
42
+ </properties>
43
+ </rule>
44
+ <rule ref="WordPress.WhiteSpace.ControlStructureSpacing">
45
+ <properties>
46
+ <property name="blank_line_check" value="true"/>
47
+ </properties>
48
+ </rule>
49
+ </ruleset>
.travis.yml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ sudo: false
2
+ dist: trusty
3
+
4
+ language: php
5
+
6
+ notifications:
7
+ email:
8
+ on_success: never
9
+ on_failure: change
10
+
11
+ branches:
12
+ only:
13
+ - master
14
+
15
+ cache:
16
+ directories:
17
+ - $HOME/.composer/cache
18
+
19
+ matrix:
20
+ include:
21
+ - php: 7.2
22
+ env: WP_VERSION=latest
23
+ - php: 7.1
24
+ env: WP_VERSION=latest
25
+ - php: 7.0
26
+ env: WP_VERSION=latest
27
+ - php: 5.6
28
+ env: WP_VERSION=4.9
29
+ - php: 5.6
30
+ env: WP_VERSION=latest
31
+ - php: 5.6
32
+ env: WP_VERSION=trunk
33
+ - php: 5.6
34
+ env: WP_TRAVISCI=phpcs
35
+ - php: 5.3
36
+ env: WP_VERSION=latest
37
+ dist: precise
38
+
39
+ before_script:
40
+ - export PATH="$HOME/.composer/vendor/bin:$PATH"
41
+ - |
42
+ if [ -f ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini ]; then
43
+ phpenv config-rm xdebug.ini
44
+ else
45
+ echo "xdebug.ini does not exist"
46
+ fi
47
+ - |
48
+ if [[ ! -z "$WP_VERSION" ]] ; then
49
+ bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION
50
+ composer global require "phpunit/phpunit=4.8.*|5.7.*"
51
+ fi
52
+ - |
53
+ if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then
54
+ composer global require wp-coding-standards/wpcs
55
+ phpcs --config-set installed_paths $HOME/.composer/vendor/wp-coding-standards/wpcs
56
+ fi
57
+
58
+ script:
59
+ - |
60
+ if [[ ! -z "$WP_VERSION" ]] ; then
61
+ phpunit
62
+ WP_MULTISITE=1 phpunit
63
+ fi
64
+ - |
65
+ if [[ "$WP_TRAVISCI" == "phpcs" ]] ; then
66
+ phpcs
67
+ fi
.wordpress-org/banner-1544x500.png ADDED
Binary file
.wordpress-org/banner-772x250.png ADDED
Binary file
.wordpress-org/icon-128x128.png ADDED
Binary file
.wordpress-org/icon-256x256.png ADDED
Binary file
README ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ To install i18n pre-commit hook issue this command:
2
+
3
+ ```
4
+ ln -s ../../script/mki18n .git/hooks/pre-commit
5
+ ```
app/controllers/PrliOptionsController.php CHANGED
@@ -68,7 +68,7 @@ class PrliOptionsController extends PrliBaseController {
68
  return $update_message;
69
  }
70
 
71
- private function validate($errors=array(), $params) {
72
  extract( $this->opt_fields );
73
 
74
  // Validate This
68
  return $update_message;
69
  }
70
 
71
+ private function validate($errors, $params) {
72
  extract( $this->opt_fields );
73
 
74
  // Validate This
app/helpers/PrliLinksHelper.php CHANGED
@@ -128,7 +128,7 @@ class PrliLinksHelper {
128
  style="width: 65%;"
129
  onclick='this.select();'
130
  onfocus='this.select();'
131
- value="<?php echo esc_attr($pretty_link_url); ?>" />
132
  <span class="list-clipboard prli-clipboard">
133
  <i class="pl-icon-clipboard pl-list-icon icon-clipboardjs"
134
  data-clipboard-text="<?php echo esc_url($pretty_link_url); ?>"></i>
128
  style="width: 65%;"
129
  onclick='this.select();'
130
  onfocus='this.select();'
131
+ value="/<?php echo esc_attr( $link->slug ); ?>" />
132
  <span class="list-clipboard prli-clipboard">
133
  <i class="pl-icon-clipboard pl-list-icon icon-clipboardjs"
134
  data-clipboard-text="<?php echo esc_url($pretty_link_url); ?>"></i>
app/models/PrliLink.php CHANGED
@@ -200,7 +200,7 @@ class PrliLink {
200
  return $this->get_one_by( 'id', $id, $return_type, $include_stats, $exclude_disabled );
201
  }
202
 
203
- public function get_one_by( $field='id', $val, $return_type = OBJECT, $include_stats = false, $exclude_disabled=true ) {
204
  global $wpdb, $prli_click, $prli_options, $prli_link_meta, $prli_blogurl;
205
 
206
  $struct = PrliUtils::get_permalink_pre_slug_uri();
200
  return $this->get_one_by( 'id', $id, $return_type, $include_stats, $exclude_disabled );
201
  }
202
 
203
+ public function get_one_by( $field, $val, $return_type = OBJECT, $include_stats = false, $exclude_disabled=true ) {
204
  global $wpdb, $prli_click, $prli_options, $prli_link_meta, $prli_blogurl;
205
 
206
  $struct = PrliUtils::get_permalink_pre_slug_uri();
app/views/admin/onboarding/update.php DELETED
@@ -1,146 +0,0 @@
1
- <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
-
3
- <div class="wrap prli-update">
4
- <h1><?php esc_html_e('Get Some Quick Wins with Pretty Links 3.0!', 'pretty-link'); ?></h1>
5
-
6
- <p>
7
- <img src="<?php echo PRLI_IMAGES_URL . '/update-3-0.png'; ?>" alt="<?php esc_attr_e('Get Some Quick Wins with Pretty Links 3.0!', 'pretty-link'); ?>">
8
- </p>
9
-
10
- <p>
11
- <?php
12
- printf(
13
- // translators: %1$s: open strong tag, %2$s: close strong tag
14
- esc_html__('We hope you know that here at Pretty Links, we work every day to deliver amazing tools for business owners to help them %1$swin more%2$s. We want our customers to make more money, easier through superior affiliate link strategy and management.', 'pretty-link'),
15
- '<strong><em>',
16
- '</em></strong>'
17
- );
18
- ?>
19
- </p>
20
-
21
- <p>
22
- <?php
23
- printf(
24
- // translators: %1$s: open strong tag, %2$s: close strong tag
25
- esc_html__('That\'s why today, we\'re excited to announce that we\'re rolling out a major, new release. This release won\'t deliver any huge, new features but rather a set of incremental features & fixes that will %1$sinstantly give you some well deserved quick wins%2$s in your business.', 'pretty-link'),
26
- '<strong><em>',
27
- '</em></strong>'
28
- );
29
- ?>
30
- </p>
31
-
32
- <p>
33
- <?php
34
- printf(
35
- // translators: %1$s: open strong tag, %2$s: close strong tag
36
- esc_html__('That\'s why we\'re calling Pretty Links 3.0 - %1$sQuick Wins!%2$s', 'pretty-link'),
37
- '<strong><em>',
38
- '</em></strong>'
39
- );
40
- ?>
41
- </p>
42
-
43
- <h2><?php esc_html_e('What Changes Can You Expect, Exactly?', 'pretty-link'); ?></h2>
44
-
45
- <p><?php esc_html_e('Check out these solid improvements that will make your experience with Pretty Links better in almost every way:', 'pretty-link'); ?></p>
46
-
47
- <ul class="prli-bullet-list">
48
- <li>
49
- <p>
50
- <?php
51
- printf(
52
- // translators: %1$s: open strong tag, %2$s: close strong tag
53
- esc_html__('%1$sAn all-new Link Editor%2$s - We\'ve completely overhauled our link editing experience. Our new, power-packed link editor will make creating and managing your affiliate links easier than ever before!', 'pretty-link'),
54
- '<strong>',
55
- '</strong>'
56
- );
57
- ?>
58
- </p>
59
- <div class="prli-row prli-2-columns">
60
- <div class="prli-column">
61
- <a href="<?php echo PRLI_IMAGES_URL . '/update-new-link-editor-1.png'; ?>" class="prli-image-popup" title="<?php esc_attr_e('An all-new Link Editor', 'pretty-link'); ?>">
62
- <img src="<?php echo PRLI_IMAGES_URL . '/update-new-link-editor-1.png'; ?>" alt="<?php esc_attr_e('An all-new Link Editor', 'pretty-link'); ?>">
63
- </a>
64
- </div>
65
- <div class="prli-column">
66
- <a href="<?php echo PRLI_IMAGES_URL . '/update-new-link-editor-2.png'; ?>" class="prli-image-popup" title="<?php esc_attr_e('An all-new Link Editor', 'pretty-link'); ?>">
67
- <img src="<?php echo PRLI_IMAGES_URL . '/update-new-link-editor-2.png'; ?>" alt="<?php esc_attr_e('An all-new Link Editor', 'pretty-link'); ?>">
68
- </a>
69
- </div>
70
- </div>
71
- </li>
72
- <li>
73
- <p>
74
- <?php
75
- printf(
76
- // translators: %1$s: open strong tag, %2$s: close strong tag
77
- esc_html__('%1$sAll new Link Listing%2$s - Gone is the clumsy, old Link Listing feature! You’ll now be able to send links to the "Trash," customize what columns you see in your listing with "Screen Options" and change the number of rows displayed.', 'pretty-link'),
78
- '<strong>',
79
- '</strong>'
80
- );
81
- ?>
82
- </p>
83
- <div class="prli-row">
84
- <div class="prli-column">
85
- <a href="<?php echo PRLI_IMAGES_URL . '/update-all-new-link-listing.png'; ?>" class="prli-image-popup" title="<?php esc_attr_e('All new Link Listing', 'pretty-link'); ?>">
86
- <img src="<?php echo PRLI_IMAGES_URL . '/update-all-new-link-listing.png'; ?>" alt="<?php esc_attr_e('All new Link Listing', 'pretty-link'); ?>">
87
- </a>
88
- </div>
89
- </div>
90
- </li>
91
- <li>
92
- <p>
93
- <?php
94
- printf(
95
- // translators: %1$s: open strong tag, %2$s: close strong tag
96
- esc_html__('%1$sCustomizable Links Tags / Categories (Pro Only)%2$s - Once you upgrade to Quick Wins, you\'ll be able to categorize and tag your pretty links! This is a long-requested feature that will help you organize your links and group them any way that you\'d like to for ultimate productivity and monetization!', 'pretty-link'),
97
- '<strong>',
98
- '</strong>'
99
- );
100
- ?>
101
- </p>
102
- <div class="prli-row">
103
- <div class="prli-column">
104
- <a href="<?php echo PRLI_IMAGES_URL . '/update-categories-tags.png'; ?>" class="prli-image-popup" title="<?php esc_attr_e('Customizable Links Tags / Categories (Pro Only)', 'pretty-link'); ?>">
105
- <img src="<?php echo PRLI_IMAGES_URL . '/update-categories-tags.png'; ?>" alt="<?php esc_attr_e('Customizable Links Tags / Categories (Pro Only)', 'pretty-link'); ?>">
106
- </a>
107
- </div>
108
- </div>
109
- </li>
110
- <li>
111
- <p>
112
- <?php
113
- printf(
114
- // translators: %1$s: open strong tag, %2$s: close strong tag
115
- esc_html__('%1$sGutenberg Block Link Integration%2$s - You can now use your Pretty Links directly inside the Gutenberg Paragraph Block. All you have to do is select the "Pretty Link" button from your Paragraph Block\'s formatting bar then you can search and insert Pretty Links instantly!', 'pretty-link'),
116
- '<strong>',
117
- '</strong>'
118
- );
119
- ?>
120
- </p>
121
- <div class="prli-row">
122
- <div class="prli-column">
123
- <a href="<?php echo PRLI_IMAGES_URL . '/update-gutenberg-editor.png'; ?>" class="prli-image-popup" title="<?php esc_attr_e('Gutenberg Block Link Integration', 'pretty-link'); ?>">
124
- <img src="<?php echo PRLI_IMAGES_URL . '/update-gutenberg-editor.png'; ?>" alt="<?php esc_attr_e('Gutenberg Block Link Integration', 'pretty-link'); ?>">
125
- </a>
126
- </div>
127
- </div>
128
- </li>
129
- </ul>
130
-
131
- <h2><?php esc_html_e('Tons of Fixes and Enhancements', 'pretty-link'); ?></h2>
132
-
133
- <p><?php esc_html_e('In addition to these streamlined, new features we’ve made hundreds of enhancements and numerous small fixes. Pretty Links Quick Wins is going to make your link experience easier, faster, more secure and more capable than ever before!', 'pretty-link'); ?></p>
134
-
135
- <p>
136
- <?php
137
- printf(
138
- // translators: %1$s: open strong tag, %2$s: close strong tag
139
- esc_html__('We\'re excited for you to start winning more today with %1$sPretty Link Quick Wins!%2$s', 'pretty-link'),
140
- '<strong><em>',
141
- '</em></strong>'
142
- );
143
- ?>
144
- </p>
145
-
146
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
i18n/pretty-link.pot CHANGED
@@ -1,24 +1,24 @@
1
- # Copyright (C) 2020 Pretty Links
2
  # This file is distributed under the same license as the Pretty Links plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Pretty Links 3.2.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pretty-link\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2020-10-07T15:20:19-06:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
- "X-Generator: WP-CLI 2.2.0\n"
15
  "X-Domain: pretty-link\n"
16
 
17
  #. Plugin Name of the plugin
18
  #. Author of the plugin
19
- #: pro/app/views/links/prettybar.php:68
20
  #: app/controllers/PrliLinksController.php:58
21
  #: app/controllers/PrliLinksController.php:506
 
22
  msgid "Pretty Links"
23
  msgstr ""
24
 
@@ -34,5178 +34,5178 @@ msgstr ""
34
  msgid "http://prettylinks.com"
35
  msgstr ""
36
 
37
- #: pro/app/helpers/PlpLinksHelper.php:18
38
- #: pro/app/views/links/form.php:226
39
- msgid "weight:"
40
  msgstr ""
41
 
42
- #: pro/app/helpers/PlpPostsHelper.php:19
43
- msgid "Hide Social Buttons on this post."
 
 
44
  msgstr ""
45
 
46
- #: pro/app/helpers/PlpPostsHelper.php:26
47
- msgid "Disable Keyword Replacements on this post."
 
 
48
  msgstr ""
49
 
50
- #: pro/app/helpers/PlpPostsHelper.php:44
51
- msgid "A Pretty Link will be created on Publish"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  msgstr ""
53
 
 
 
 
 
 
54
  #: pro/app/helpers/PlpPostsHelper.php:61
55
  #: pro/app/views/links/form.php:39
56
  #: pro/app/views/links/form.php:49
57
- #: pro/app/views/reports/split-test-report.php:28
58
- #: pro/app/views/reports/split-test-report.php:60
59
  #: pro/app/views/reports/custom-report.php:31
60
  #: pro/app/views/reports/custom-report.php:64
61
- #: app/models/PrliClick.php:256
62
- #: app/views/groups/list.php:81
63
- #: app/views/clicks/list.php:4
64
- #: app/controllers/PrliLinksController.php:504
65
- #: app/controllers/PrliAppController.php:168
66
  msgid "Clicks"
67
  msgstr ""
68
 
69
- #: pro/app/helpers/PlpPostsHelper.php:63
70
- #: pro/app/views/reports/split-test-report.php:29
71
- #: pro/app/views/reports/split-test-report.php:61
72
- #: pro/app/views/reports/custom-report.php:32
73
- #: pro/app/views/reports/custom-report.php:65
74
- msgid "Uniques"
75
  msgstr ""
76
 
77
- #: pro/app/helpers/PlpPostsHelper.php:66
78
- #: app/models/PrliClick.php:251
79
- msgid "Pretty Link:"
80
  msgstr ""
81
 
82
- #: pro/app/helpers/PlpPostsHelper.php:68
83
- msgid "edit"
84
  msgstr ""
85
 
86
- #: pro/app/helpers/PlpPostsHelper.php:70
87
- msgid "Visit Pretty Link:"
 
88
  msgstr ""
89
 
90
- #: pro/app/helpers/PlpPostsHelper.php:70
91
- msgid "in a New Window"
 
 
92
  msgstr ""
93
 
94
- #: pro/app/helpers/PlpPostsHelper.php:70
95
- msgid "visit"
96
  msgstr ""
97
 
98
- #: pro/app/helpers/PlpPostsHelper.php:76
99
- msgid "A Pretty Link hasn't been generated for this entry yet. Click \"Update Post\" to generate."
100
  msgstr ""
101
 
102
- #: pro/app/helpers/PlpPublicLinksHelper.php:6
103
- #: pro/app/controllers/PlpPublicLinksController.php:110
104
- msgid "Enter a URL:"
 
105
  msgstr ""
106
 
107
- #: pro/app/helpers/PlpPublicLinksHelper.php:7
108
- #: pro/app/controllers/PlpPublicLinksController.php:111
109
- #: pro/app/widgets/PlpPublicLinksWidget.php:61
110
- msgid "Shrink"
111
  msgstr ""
112
 
113
- #: pro/app/models/PlpUtils.php:36
114
- msgid "Google Analyticator"
115
  msgstr ""
116
 
117
- #: pro/app/models/PlpOptions.php:100
118
- msgid "Facebook"
 
 
119
  msgstr ""
120
 
121
- #: pro/app/models/PlpOptions.php:107
122
- msgid "Twitter"
 
 
 
123
  msgstr ""
124
 
125
- #: pro/app/models/PlpOptions.php:114
126
- msgid "Google+"
127
  msgstr ""
128
 
129
- #: pro/app/models/PlpOptions.php:121
130
- msgid "Pinterest"
131
  msgstr ""
132
 
133
- #: pro/app/models/PlpOptions.php:128
134
- msgid "LinkedIn"
135
  msgstr ""
136
 
137
- #: pro/app/models/PlpOptions.php:135
138
- msgid "Reddit"
139
  msgstr ""
140
 
141
- #: pro/app/models/PlpOptions.php:142
142
- msgid "StumbleUpon"
 
143
  msgstr ""
144
 
145
- #: pro/app/models/PlpOptions.php:149
146
- msgid "Digg"
147
  msgstr ""
148
 
149
- #: pro/app/models/PlpOptions.php:156
150
- #: app/controllers/PrliLinksController.php:731
151
- msgid "Email"
152
  msgstr ""
153
 
154
- #: pro/app/models/PlpOptions.php:242
155
- msgid "Affiliate Link Disclosures"
156
  msgstr ""
157
 
158
- #: pro/app/models/PlpOptions.php:251
159
- msgid "(aff)"
160
  msgstr ""
161
 
162
- #: pro/app/models/PlpReport.php:150
163
- msgid "Report must have a name."
164
  msgstr ""
165
 
166
- #: pro/app/models/PlpReport.php:154
167
- msgid "At least one link must be selected for analysis."
168
  msgstr ""
169
 
170
- #: pro/app/models/PlpReport.php:259
171
- msgid "Pretty Links Pro: Clicks for"
 
172
  msgstr ""
173
 
174
- #: pro/app/models/PlpReport.php:259
175
- msgid "report between"
176
  msgstr ""
177
 
178
- #: pro/app/models/PlpReport.php:259
179
- #: pro/app/models/PlpReport.php:400
180
- #: app/models/PrliClick.php:251
181
- msgid "and"
182
  msgstr ""
183
 
184
- #: pro/app/models/PlpReport.php:266
185
- #: pro/app/models/PlpReport.php:275
186
- #: app/views/clicks/list.php:101
187
- #: app/views/clicks/list.php:184
188
- msgid "Link"
189
  msgstr ""
190
 
191
- #: pro/app/models/PlpReport.php:266
192
- #: pro/app/models/PlpReport.php:275
193
- #: pro/app/models/PlpReport.php:412
194
- #: pro/app/models/PlpReport.php:419
195
- #: app/views/clicks/list.php:32
196
- msgid "All Clicks"
197
  msgstr ""
198
 
199
- #: pro/app/models/PlpReport.php:266
200
- #: pro/app/models/PlpReport.php:275
201
- #: pro/app/models/PlpReport.php:412
202
- #: pro/app/models/PlpReport.php:419
203
- #: app/views/clicks/list.php:33
204
- msgid "Unique Clicks"
205
  msgstr ""
206
 
207
- #: pro/app/models/PlpReport.php:266
208
- #: pro/app/models/PlpReport.php:412
209
- #: pro/app/views/reports/split-test-report.php:31
210
- #: pro/app/views/reports/split-test-report.php:63
211
- #: pro/app/views/reports/custom-report.php:34
212
- #: pro/app/views/reports/custom-report.php:67
213
- msgid "Conversions"
214
  msgstr ""
215
 
216
- #: pro/app/models/PlpReport.php:400
217
- msgid "Pretty Links Pro: Split Report for"
218
  msgstr ""
219
 
220
- #: pro/app/models/PlpReport.php:400
221
- #: app/models/PrliClick.php:251
222
- msgid "between"
 
 
 
223
  msgstr ""
224
 
225
- #: pro/app/models/PlpReport.php:412
226
- #: pro/app/models/PlpReport.php:419
227
- #: pro/app/views/links/form.php:199
228
- #: app/views/links/form_pro.php:97
229
- msgid "Rotation"
230
  msgstr ""
231
 
232
- #: pro/app/views/links/link-options.php:3
233
- #: pro/app/views/links/link-options.php:5
234
- #: app/views/options/form.php:147
235
- #: app/views/options/form.php:149
236
- msgid "Base Slug Prefix"
237
  msgstr ""
238
 
239
- #. translators: %1$s: open b tag, %2$s close b tag
240
- #: pro/app/views/links/link-options.php:8
241
- #: app/views/options/form.php:152
242
- msgid "Use this to prefix all newly generated pretty links with a directory of your choice. For example set to %1$sout%2$s to make your pretty links look like http://site.com/%1$sout%2$s/xyz. Changing this option will NOT affect existing pretty links. If you do not wish to use a directory prefix, leave this text field blank. Whatever you type here will be sanitized and modified to ensure it is URL-safe. So %1$sHello World%2$s might get changed to something like %1$shello-world%2$s instead. Lowercase letters, numbers, dashes, and underscores are allowed."
243
  msgstr ""
244
 
245
- #: pro/app/views/links/link-options.php:21
246
- #: pro/app/views/links/link-options.php:23
247
- #: app/views/options/form.php:166
248
- #: app/views/options/form.php:168
249
- msgid "Slug Character Count"
250
  msgstr ""
251
 
252
- #: pro/app/views/links/link-options.php:24
253
- #: app/views/options/form.php:169
254
- msgid "The number of characters to use when auto-generating a random slug for pretty links. The default is 4. You cannot use less than 2."
255
  msgstr ""
256
 
257
- #: pro/app/views/links/link-options.php:34
258
- #: pro/app/views/links/link-options.php:35
259
- #: app/views/options/form.php:180
260
- #: app/views/options/form.php:181
261
- msgid "Enable Google Analytics"
262
  msgstr ""
263
 
264
- #: pro/app/views/links/link-options.php:36
265
- msgid "Requires Google Analyticator, Google Analytics by MonsterInsights (formerly Yoast), or the Google Analytics Plugin to be installed and configured on your site."
266
  msgstr ""
267
 
268
- #. translators: %1s: open link tag, %2$s: close link tag
269
- #: pro/app/views/links/link-options.php:50
270
- msgid "Enable %1sQR Codes%2$s"
271
  msgstr ""
272
 
273
- #: pro/app/views/links/link-options.php:57
274
- #: app/views/options/form.php:195
275
- msgid "Generate QR Codes"
276
  msgstr ""
277
 
278
- #: pro/app/views/links/link-options.php:58
279
- #: app/views/options/form.php:196
280
- msgid "This will enable a link in your pretty link admin that will allow you to automatically download a QR Code for each individual Pretty Link."
281
  msgstr ""
282
 
283
- #: pro/app/views/links/link-options.php:68
284
- #: pro/app/views/links/link-options.php:70
285
- #: app/views/options/form.php:207
286
- #: app/views/options/form.php:209
287
- msgid "Global Head Scripts"
288
  msgstr ""
289
 
290
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
291
- #: pro/app/views/links/link-options.php:73
292
- #: app/views/options/form.php:212
293
- msgid "Useful for adding Google Analytics tracking, Facebook retargeting pixels, or any other kind of tracking script to the HTML head.%1$s%1$sWhat you enter in this box will be applied to all supported pretty links.%1$s%1$s%2$sNOTE:%3$s This does NOT work with 301, 302 and 307 type redirects."
294
  msgstr ""
295
 
296
- #: pro/app/views/links/form.php:6
297
- #: app/views/links/form_pro.php:17
298
- msgid "Expire"
299
  msgstr ""
300
 
301
- #: pro/app/views/links/form.php:9
302
- #: app/views/links/form_pro.php:20
303
- msgid "Expire Link"
304
  msgstr ""
305
 
306
- #: pro/app/views/links/form.php:10
307
- #: app/views/links/form_pro.php:21
308
- msgid "Set this link to expire after a specific date or number of clicks."
309
  msgstr ""
310
 
311
- #: pro/app/views/links/form.php:23
312
- msgid "Expire After"
313
  msgstr ""
314
 
315
- #: pro/app/views/links/form.php:26
316
- msgid "Expiration Type"
317
  msgstr ""
318
 
319
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
320
- #: pro/app/views/links/form.php:29
321
- msgid "Select the type of expiration you want for this link.%1$s%1$s%2$sDate%3$s Select this option if you'd like to expire your link after a certain date.%1%s%1$s%2$sClicks%3$s: Select this option to expire this link after it has been clicked a specific number of times."
322
  msgstr ""
323
 
324
- #: pro/app/views/links/form.php:38
325
- #: pro/app/views/links/form.php:73
326
- #: app/models/PrliClick.php:256
327
- #: app/controllers/PrliLinksController.php:505
328
- msgid "Date"
329
  msgstr ""
330
 
331
- #: pro/app/views/links/form.php:52
332
- msgid "Number of Clicks"
 
 
333
  msgstr ""
334
 
335
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
336
- #: pro/app/views/links/form.php:55
337
- msgid "Enter the number of times this link can be clicked before it expires.%1$s%1$s%2$sNote: Expirations based on clicks wouldn't work properly if you had tracking turned off for this link so as long as this is set to Clicks, Pretty Link will ensure tracking is turned on for this link as well.%3$s"
338
  msgstr ""
339
 
340
- #: pro/app/views/links/form.php:76
341
- msgid "Expiration Date"
342
  msgstr ""
343
 
344
- #: pro/app/views/links/form.php:77
345
- msgid "Enter a date here in the format YYYY-MM-DD to set when this link should expire."
 
 
346
  msgstr ""
347
 
348
- #: pro/app/views/links/form.php:91
349
- msgid "Expired Redirect"
350
  msgstr ""
351
 
352
- #: pro/app/views/links/form.php:94
353
- msgid "Redirect to URL when Expired"
 
 
 
 
354
  msgstr ""
355
 
356
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
357
- #: pro/app/views/links/form.php:97
358
- msgid "When this link expires, do you want to redirect to a specific URL. You can use this to redirect to a page you've setup to indicate that the link is expired.%1$s%1$s%2$sNote: If this is not set the link will throw a 404 error when expired%3$s."
359
  msgstr ""
360
 
361
- #: pro/app/views/links/form.php:114
362
- #: pro/app/views/options/form.php:208
363
- msgid "URL"
364
  msgstr ""
365
 
366
- #: pro/app/views/links/form.php:117
367
- msgid "Expired URL"
368
  msgstr ""
369
 
370
- #: pro/app/views/links/form.php:118
371
- msgid "This is the URL that this link will redirect to after the expiration date above."
372
  msgstr ""
373
 
374
- #: pro/app/views/links/form.php:133
375
- #: app/views/links/form_pro.php:32
376
- #: app/controllers/PrliLinksController.php:467
377
- msgid "Keywords"
378
  msgstr ""
379
 
380
- #: pro/app/views/links/form.php:136
381
- #: app/views/links/form_pro.php:35
382
- msgid "Auto-Replace Keywords"
 
 
383
  msgstr ""
384
 
385
- #: pro/app/views/links/form.php:137
386
- msgid "Enter a comma separated list of keywords / keyword phrases that you'd like to replace with this link in your Posts &amp; Pages."
 
387
  msgstr ""
388
 
389
- #: pro/app/views/links/form.php:145
390
- #: app/views/links/form_pro.php:46
391
- msgid "URL Replacements"
 
392
  msgstr ""
393
 
394
- #: pro/app/views/links/form.php:148
395
- #: app/views/links/form_pro.php:49
396
- msgid "Auto-Replace URLs"
 
 
 
 
397
  msgstr ""
398
 
399
- #. translators: %1$s: open code tag, %2$s: close code tag
400
- #: pro/app/views/links/form.php:151
401
- msgid "Enter a comma separated list of the URLs that you'd like to replace with this Pretty Link in your Posts &amp; Pages. These must be formatted as URLs for example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
 
 
 
 
402
  msgstr ""
403
 
404
- #: pro/app/views/links/form.php:167
405
- #: pro/app/views/links/form.php:170
406
- #: app/views/links/form_pro.php:66
407
- #: app/views/links/form_pro.php:69
408
- msgid "Head Scripts"
409
  msgstr ""
410
 
411
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
412
- #: pro/app/views/links/form.php:173
413
- #: app/views/links/form_pro.php:72
414
- msgid "Useful for adding Google Analytics tracking, Facebook retargeting pixels, or any other kind of tracking script to the HTML head for this pretty link.%1$s%1$sThese scripts will be in addition to any global one's you've defined in the options.%1$s%1$s%2$sNOTE:%3$s This does NOT work with 301, 302 and 307 type redirects."
 
415
  msgstr ""
416
 
417
- #: pro/app/views/links/form.php:189
418
- #: app/views/links/form_pro.php:86
419
- msgid "Dynamic Redirection"
 
 
420
  msgstr ""
421
 
422
- #: pro/app/views/links/form.php:192
423
- #: app/views/links/form_pro.php:89
424
- msgid "Dynamic Redirection Options"
425
  msgstr ""
426
 
427
- #: pro/app/views/links/form.php:193
428
- #: app/views/links/form_pro.php:90
429
- msgid "These powerful options are available to give you dynamic control over redirection for this pretty link."
430
  msgstr ""
431
 
432
- #: pro/app/views/links/form.php:198
433
- #: pro/app/views/options/form.php:833
434
- #: pro/app/views/options/autocreate.php:44
435
- #: pro/app/views/tools/generator.php:37
436
- #: pro/app/widgets/PlpPublicLinksWidget.php:94
437
- #: app/views/links/form_pro.php:96
438
- #: app/views/shared/tinymce_form_popup.php:83
439
- #: app/views/shared/tinymce_form_popup.php:87
440
- #: app/views/options/form.php:1015
441
- msgid "None"
442
  msgstr ""
443
 
444
- #: pro/app/views/links/form.php:200
445
- #: app/views/links/form_pro.php:98
446
- msgid "Geographic"
447
  msgstr ""
448
 
449
- #: pro/app/views/links/form.php:201
450
- #: app/views/links/form_pro.php:99
451
- msgid "Technology"
452
  msgstr ""
453
 
454
- #: pro/app/views/links/form.php:202
455
- #: app/views/links/form_pro.php:100
456
- msgid "Time"
457
  msgstr ""
458
 
459
- #: pro/app/views/links/form.php:211
460
- #: pro/app/views/links/form.php:214
461
- msgid "Target URL Rotations"
462
  msgstr ""
463
 
464
- #. translators: %1$s: open code tag, %2$s: close code tag
465
- #: pro/app/views/links/form.php:217
466
- msgid "Enter the Target URLs that you'd like to rotate through when this Pretty Link is Clicked. These must be formatted as URLs example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
467
  msgstr ""
468
 
469
- #: pro/app/views/links/form.php:225
470
- msgid "Target URL (above)"
 
471
  msgstr ""
472
 
473
- #: pro/app/views/links/form.php:237
474
- msgid "Add Link Rotation"
475
  msgstr ""
476
 
477
- #: pro/app/views/links/form.php:242
478
- msgid "Split Test"
479
  msgstr ""
480
 
481
- #: pro/app/views/links/form.php:245
482
- msgid "Split Test This Link"
 
483
  msgstr ""
484
 
485
- #: pro/app/views/links/form.php:246
486
- msgid "Split testing will enable you to track the effectiveness of several links against each other. This works best when you have multiple link rotation URLs entered."
487
  msgstr ""
488
 
489
- #: pro/app/views/links/form.php:260
490
- #: pro/app/views/reports/list.php:37
491
- #: pro/app/views/reports/list.php:87
492
- #: app/views/admin/upgrade/reports.php:13
493
- #: app/views/admin/upgrade/reports.php:36
494
- msgid "Goal Link"
495
  msgstr ""
496
 
497
- #: pro/app/views/links/form.php:263
498
- msgid "Goal Link for Split Test"
499
  msgstr ""
500
 
501
- #: pro/app/views/links/form.php:264
502
- msgid "This is the goal link for your split test."
503
  msgstr ""
504
 
505
- #: pro/app/views/links/form.php:275
506
- msgid "id: %1$s | slug: %3$s | name: %2$s"
507
  msgstr ""
508
 
509
- #: pro/app/views/links/form.php:293
510
- #: pro/app/views/links/form.php:296
511
- msgid "Geographic Redirects"
512
  msgstr ""
513
 
514
- #: pro/app/views/links/form.php:297
515
- msgid "This will enable you to setup specific target urls that this pretty link will redirect to based on the country of the person visiting the url."
516
  msgstr ""
517
 
518
- #: pro/app/views/links/form.php:302
519
- #: pro/app/views/links/form.php:316
520
- #: pro/app/views/links/form.php:336
521
- msgid "Add"
522
  msgstr ""
523
 
524
- #: pro/app/views/links/form.php:307
525
- #: pro/app/views/links/form.php:310
526
- msgid "Technology Redirects"
527
  msgstr ""
528
 
529
- #: pro/app/views/links/form.php:311
530
- msgid "This will allow you to redirect based on your visitor's device, operating system and/or browser"
 
531
  msgstr ""
532
 
533
- #: pro/app/views/links/form.php:321
534
- #: pro/app/views/links/form.php:324
535
- msgid "Time Period Redirects"
536
  msgstr ""
537
 
538
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
539
- #: pro/app/views/links/form.php:327
540
- msgid "This will allow you to redirect based on the time period in which your visitor visits this link.%1$s%1$s%2$sNote: If your visitor doesn't visit the link during any of the specified time periods set here, they'll simply be redirected to the main target url.%3$s"
541
  msgstr ""
542
 
543
- #: pro/app/views/links/bulk-edit.php:6
544
- msgid "Advanced Link Options"
545
  msgstr ""
546
 
547
- #: pro/app/views/links/bulk-edit.php:10
548
- #: app/views/links/form_advanced.php:71
549
- #: app/views/links/form_advanced.php:74
550
- msgid "Google Analytics"
551
  msgstr ""
552
 
553
- #: pro/app/views/links/cloaked-redirect.php:19
554
- msgid "Your browser does not support frames."
555
  msgstr ""
556
 
557
- #: pro/app/views/links/link-has-expired.php:9
558
- msgid "Link Not Found"
559
  msgstr ""
560
 
561
- #: pro/app/views/links/link-has-expired.php:23
562
- msgid "Sorry, this link has expired"
563
  msgstr ""
564
 
565
- #: pro/app/views/links/time_row.php:13
566
- msgid "Start Time:"
567
  msgstr ""
568
 
569
- #: pro/app/views/links/time_row.php:16
570
- msgid "Start of Time Period"
571
  msgstr ""
572
 
573
- #: pro/app/views/links/time_row.php:17
574
- msgid "This is where you'll enter the beginning of the time period for this redirect"
575
  msgstr ""
576
 
577
- #: pro/app/views/links/time_row.php:26
578
- msgid "End Time:"
579
  msgstr ""
580
 
581
- #: pro/app/views/links/time_row.php:29
582
- msgid "End of Time Period"
583
  msgstr ""
584
 
585
- #: pro/app/views/links/time_row.php:30
586
- msgid "This is where you'll enter the end of the time period for this redirect"
587
  msgstr ""
588
 
589
- #: pro/app/views/links/time_row.php:39
590
- #: pro/app/views/links/tech_row.php:85
591
- #: pro/app/views/links/geo_row.php:25
592
- msgid "URL:"
593
  msgstr ""
594
 
595
- #: pro/app/views/links/time_row.php:42
596
- msgid "Time Period Redirect URL"
597
  msgstr ""
598
 
599
- #: pro/app/views/links/time_row.php:43
600
- msgid "This is the URL that this Pretty Link will redirect to when the visitor visits the link in the associated time period."
601
  msgstr ""
602
 
603
- #: pro/app/views/links/time_row.php:52
604
- #: pro/app/views/links/tech_row.php:98
605
- #: pro/app/views/links/geo_row.php:38
606
- msgid "Remove"
 
 
 
 
 
607
  msgstr ""
608
 
609
- #: pro/app/views/links/tech_row.php:14
610
- msgid "Device:"
 
 
 
 
 
 
 
611
  msgstr ""
612
 
613
- #: pro/app/views/links/tech_row.php:17
614
- msgid "Technology Redirection Device"
 
 
 
 
 
 
 
615
  msgstr ""
616
 
617
- #. translators: %1$s: open b tag, %2$s: close b tag, %3$s: br tag
618
- #: pro/app/views/links/tech_row.php:20
619
- msgid "%1$sDesktop%2$s will match on any conventional laptop or desktop computer.%3$s%3$s%1$sMobile%2$s will match on any phone, tablet or other portable device.%3$s%3$s%1$sPhone%2$s will match on any phone or similarly small device.%3$s%3$s%1$sTablet%2$s will match on any tablet sized device."
620
  msgstr ""
621
 
622
- #: pro/app/views/links/tech_row.php:29
623
- #: pro/app/views/links/tech_row.php:48
624
- #: pro/app/views/links/tech_row.php:68
625
- msgid "Any"
626
  msgstr ""
627
 
628
- #: pro/app/views/links/tech_row.php:30
629
- msgid "Desktop"
630
  msgstr ""
631
 
632
- #: pro/app/views/links/tech_row.php:31
633
- msgid "Mobile"
634
  msgstr ""
635
 
636
- #: pro/app/views/links/tech_row.php:32
637
- msgid "Phone"
638
  msgstr ""
639
 
640
- #: pro/app/views/links/tech_row.php:33
641
- msgid "Tablet"
642
  msgstr ""
643
 
644
- #: pro/app/views/links/tech_row.php:39
645
- msgid "Operating System:"
 
646
  msgstr ""
647
 
648
- #: pro/app/views/links/tech_row.php:42
649
- msgid "Technology Redirection OS"
 
650
  msgstr ""
651
 
652
- #: pro/app/views/links/tech_row.php:43
653
- msgid "Use this dropdown to select which Operating System this redirect will match on."
654
  msgstr ""
655
 
656
- #: pro/app/views/links/tech_row.php:49
657
- #: pro/app/views/links/tech_row.php:70
658
- msgid "Android"
659
  msgstr ""
660
 
661
- #: pro/app/views/links/tech_row.php:50
662
- msgid "iOS"
 
 
663
  msgstr ""
664
 
665
- #: pro/app/views/links/tech_row.php:51
666
- msgid "Linux"
 
 
667
  msgstr ""
668
 
669
- #: pro/app/views/links/tech_row.php:52
670
- msgid "Mac"
 
 
671
  msgstr ""
672
 
673
- #: pro/app/views/links/tech_row.php:53
674
- msgid "Windows"
675
  msgstr ""
676
 
677
- #: pro/app/views/links/tech_row.php:59
678
- msgid "Browser:"
679
  msgstr ""
680
 
681
- #: pro/app/views/links/tech_row.php:62
682
- msgid "Technology Redirection Browser"
683
  msgstr ""
684
 
685
- #: pro/app/views/links/tech_row.php:63
686
- msgid "Use this dropdown to select which Browser this redirect will match on."
687
  msgstr ""
688
 
689
- #: pro/app/views/links/tech_row.php:69
690
- msgid "Amazon Silk"
691
  msgstr ""
692
 
693
- #: pro/app/views/links/tech_row.php:71
694
- msgid "Chrome"
695
  msgstr ""
696
 
697
- #: pro/app/views/links/tech_row.php:72
698
- msgid "Chromium"
699
  msgstr ""
700
 
701
- #: pro/app/views/links/tech_row.php:73
702
- msgid "Edge"
703
  msgstr ""
704
 
705
- #: pro/app/views/links/tech_row.php:74
706
- msgid "Firefox"
707
  msgstr ""
708
 
709
- #: pro/app/views/links/tech_row.php:75
710
- msgid "Internet Explorer"
711
  msgstr ""
712
 
713
- #: pro/app/views/links/tech_row.php:76
714
- msgid "Kindle"
715
  msgstr ""
716
 
717
- #: pro/app/views/links/tech_row.php:77
718
- msgid "Opera"
 
 
 
 
719
  msgstr ""
720
 
721
- #: pro/app/views/links/tech_row.php:78
722
- msgid "Opera Coast"
723
  msgstr ""
724
 
725
- #: pro/app/views/links/tech_row.php:79
726
- msgid "Safari"
 
 
727
  msgstr ""
728
 
729
- #: pro/app/views/links/tech_row.php:88
730
- msgid "Technology Redirection URL"
731
  msgstr ""
732
 
733
- #: pro/app/views/links/tech_row.php:89
734
- msgid "This is the URL that this Pretty Link will redirect to if the visitor's device, os and browser match the settings here."
 
735
  msgstr ""
736
 
737
- #: pro/app/views/links/prettybar.php:46
738
- msgid "You're viewing: %s"
 
739
  msgstr ""
740
 
741
- #: pro/app/views/links/prettybar.php:46
742
- msgid "Viewing: %s"
 
743
  msgstr ""
744
 
745
- #: pro/app/views/links/prettybar.php:51
746
- msgid "Share on Twitter"
 
747
  msgstr ""
748
 
749
- #: pro/app/views/links/prettybar.php:68
750
- msgid "Powered by"
 
751
  msgstr ""
752
 
753
- #: pro/app/views/links/geo_row.php:12
754
- msgid "Countries:"
 
755
  msgstr ""
756
 
757
- #: pro/app/views/links/geo_row.php:15
758
- msgid "Technology Redirection Countries"
759
  msgstr ""
760
 
761
- #: pro/app/views/links/geo_row.php:16
762
- msgid "This is a comma-separated list of countries that this redirect will match on. Just start typing a country's name and an autocomplete dropdown will appear to select from. Once a country is selected, feel free to start typing the name of another country. You can add as many as you'd like this redirect to match on"
763
  msgstr ""
764
 
765
- #: pro/app/views/links/geo_row.php:28
766
- msgid "Geographic Redirection URL"
767
  msgstr ""
768
 
769
- #: pro/app/views/links/geo_row.php:29
770
- msgid "This is the URL that this Pretty Link will redirect to if the visitor's country match the settings here."
771
  msgstr ""
772
 
773
- #: pro/app/views/public/form.php:28
774
- msgid "ERROR:"
775
  msgstr ""
776
 
777
- #: pro/app/views/reports/edit.php:7
778
- msgid "Edit Link Report"
779
  msgstr ""
780
 
781
- #: pro/app/views/reports/edit.php:18
782
- #: app/views/groups/edit.php:21
783
- msgid "Name:"
784
  msgstr ""
785
 
786
- #: pro/app/views/reports/edit.php:20
787
- #: pro/app/views/reports/new.php:19
788
- msgid "This is how you'll identify your Report."
789
  msgstr ""
790
 
791
- #: pro/app/views/reports/edit.php:26
792
- #: pro/app/views/reports/new.php:26
793
- msgid "Select Links to Analyze in this Report:"
794
  msgstr ""
795
 
796
- #: pro/app/views/reports/edit.php:36
797
- #: pro/app/views/reports/new.php:36
798
- msgid "Select some links to be analyzed in this report."
 
799
  msgstr ""
800
 
801
- #: pro/app/views/reports/edit.php:39
802
- #: pro/app/views/reports/new.php:39
803
- msgid "Select Your Goal Link (optional):"
804
  msgstr ""
805
 
806
- #: pro/app/views/reports/edit.php:44
807
- #: pro/app/views/reports/list.php:32
808
- #: pro/app/views/reports/list.php:86
809
- #: pro/app/views/reports/new.php:44
810
- #: app/views/admin/upgrade/reports.php:8
811
- #: app/views/admin/upgrade/reports.php:35
812
- #: app/views/groups/edit.php:36
813
- #: app/views/groups/list.php:41
814
- #: app/views/groups/list.php:93
815
- #: app/views/groups/new.php:37
816
- msgid "Name"
817
  msgstr ""
818
 
819
- #: pro/app/views/reports/edit.php:60
820
- #: pro/app/views/reports/new.php:60
821
- msgid "If you want to enable conversion tracking in this report then select a goal link."
822
  msgstr ""
823
 
824
- #: pro/app/views/reports/edit.php:66
825
- #: app/views/options/form.php:1082
826
- #: app/views/groups/edit.php:72
827
- #: app/controllers/PrliAppController.php:429
828
- msgid "Update"
829
  msgstr ""
830
 
831
- #: pro/app/views/reports/edit.php:66
832
- #: pro/app/views/reports/split-test-report.php:19
833
- #: pro/app/views/reports/custom-report.php:22
834
- #: pro/app/views/reports/new.php:66
835
- #: app/views/groups/edit.php:72
836
- #: app/views/groups/new.php:71
837
- #: app/views/clicks/list.php:43
838
- msgid "Cancel"
839
  msgstr ""
840
 
841
- #: pro/app/views/reports/list.php:4
842
- #: pro/app/views/reports/reports.php:7
843
- #: app/controllers/PrliUpdateController.php:504
844
- #: app/controllers/PrliAppController.php:150
845
- msgid "Link Reports"
846
  msgstr ""
847
 
848
- #: pro/app/views/reports/list.php:5
849
- msgid "Add Report"
850
  msgstr ""
851
 
852
- #: pro/app/views/reports/list.php:18
853
- #: app/views/groups/list.php:20
854
- msgid "Search"
855
  msgstr ""
856
 
857
- #: pro/app/views/reports/list.php:20
858
- #: app/views/groups/list.php:24
859
- #: app/views/clicks/list.php:64
860
- #: app/controllers/PrliLinksController.php:727
861
- msgid "Reset"
862
  msgstr ""
863
 
864
- #: pro/app/views/reports/list.php:42
865
- #: pro/app/views/reports/list.php:88
866
- #: app/views/admin/upgrade/reports.php:18
867
- #: app/views/admin/upgrade/reports.php:37
868
- #: app/views/options/form.php:51
869
- #: app/views/groups/list.php:46
870
- #: app/views/groups/list.php:80
871
- #: app/views/groups/list.php:94
872
- msgid "Links"
873
  msgstr ""
874
 
875
- #: pro/app/views/reports/list.php:47
876
- #: pro/app/views/reports/list.php:89
877
- #: app/views/admin/upgrade/reports.php:23
878
- #: app/views/admin/upgrade/reports.php:38
879
- #: app/views/groups/list.php:51
880
- #: app/views/groups/list.php:95
881
- msgid "Created"
882
  msgstr ""
883
 
884
- #: pro/app/views/reports/list.php:57
885
- #: app/views/admin/upgrade/reports.php:30
886
- msgid "No Pretty Link Reports were found"
887
  msgstr ""
888
 
889
- #: pro/app/views/reports/list.php:68
890
- #: pro/app/views/reports/list.php:71
891
- #: app/helpers/PrliLinksHelper.php:71
892
- #: app/views/groups/list.php:75
893
- #: app/views/groups/list.php:78
894
- msgid "Edit %s"
895
  msgstr ""
896
 
897
- #: pro/app/views/reports/list.php:71
898
- #: app/views/groups/list.php:78
899
- msgid "Edit"
900
  msgstr ""
901
 
902
- #: pro/app/views/reports/list.php:72
903
- msgid "Are you sure you want to delete your %s Pretty Link Report?"
904
  msgstr ""
905
 
906
- #: pro/app/views/reports/list.php:72
907
- #: app/helpers/PrliLinksHelper.php:72
908
- #: app/views/groups/list.php:79
909
- msgid "Delete %s"
910
  msgstr ""
911
 
912
- #: pro/app/views/reports/list.php:72
913
- #: app/views/groups/list.php:79
914
- msgid "Delete"
915
  msgstr ""
916
 
917
- #: pro/app/views/reports/list.php:73
918
- msgid "View report for %s"
 
919
  msgstr ""
920
 
921
- #: pro/app/views/reports/list.php:73
922
- msgid "View"
 
923
  msgstr ""
924
 
925
- #: pro/app/views/reports/split-test-report.php:4
926
- msgid "Link Split-Test Report"
 
927
  msgstr ""
928
 
929
- #: pro/app/views/reports/split-test-report.php:5
930
- msgid "For Link:"
 
931
  msgstr ""
932
 
933
- #: pro/app/views/reports/split-test-report.php:7
934
- msgid "Goal Link:"
 
935
  msgstr ""
936
 
937
- #: pro/app/views/reports/split-test-report.php:9
938
- #: app/views/clicks/list.php:18
939
- msgid "Back to Links"
940
  msgstr ""
941
 
942
- #: pro/app/views/reports/split-test-report.php:9
943
- #: pro/app/views/reports/custom-report.php:12
944
- #: app/views/clicks/list.php:11
945
- msgid "Customize Report"
946
  msgstr ""
947
 
948
- #: pro/app/views/reports/split-test-report.php:13
949
- #: pro/app/views/reports/custom-report.php:16
950
- #: app/views/clicks/list.php:37
951
- msgid "Date Range:"
952
  msgstr ""
953
 
954
- #: pro/app/views/reports/split-test-report.php:19
955
- #: pro/app/views/reports/custom-report.php:22
956
- #: app/views/clicks/list.php:43
957
- msgid "Customize"
958
  msgstr ""
959
 
960
- #: pro/app/views/reports/split-test-report.php:27
961
- msgid "Link Rotation URL"
962
  msgstr ""
963
 
964
- #: pro/app/views/reports/split-test-report.php:32
965
- #: pro/app/views/reports/split-test-report.php:64
966
- #: pro/app/views/reports/custom-report.php:35
967
- #: pro/app/views/reports/custom-report.php:68
968
- msgid "Conv Rate"
969
  msgstr ""
970
 
971
- #: pro/app/views/reports/split-test-report.php:59
972
- msgid "Rotation URL"
973
  msgstr ""
974
 
975
- #: pro/app/views/reports/custom-report.php:7
976
- msgid "Link Report"
977
  msgstr ""
978
 
979
- #: pro/app/views/reports/custom-report.php:8
980
- msgid "Report:"
981
  msgstr ""
982
 
983
- #: pro/app/views/reports/custom-report.php:10
984
- msgid "For Goal Link:"
985
  msgstr ""
986
 
987
- #: pro/app/views/reports/custom-report.php:30
988
- #: pro/app/views/reports/custom-report.php:63
989
- msgid "Link Name"
990
  msgstr ""
991
 
992
- #: pro/app/views/reports/reports.php:4
993
- #: pro/app/controllers/PlpReportsController.php:15
994
- #: app/controllers/PrliAppController.php:151
995
- msgid "Reports"
996
  msgstr ""
997
 
998
- #: pro/app/views/reports/new.php:7
999
- msgid "Add Link Report"
1000
  msgstr ""
1001
 
1002
- #: pro/app/views/reports/new.php:17
1003
- #: app/views/groups/new.php:22
1004
- msgid "Name*:"
1005
  msgstr ""
1006
 
1007
- #: pro/app/views/reports/new.php:66
1008
- #: app/views/groups/new.php:71
1009
- #: app/views/widgets/widget.php:21
1010
- msgid "Create"
1011
  msgstr ""
1012
 
1013
- #: pro/app/views/options/form.php:4
1014
- #: app/views/options/form.php:324
1015
- msgid "Keyword &amp; URL Auto Replacements Options"
1016
  msgstr ""
1017
 
1018
- #: pro/app/views/options/form.php:13
1019
- #: app/views/options/form.php:332
1020
- msgid "Enable Replacements"
1021
  msgstr ""
1022
 
1023
- #: pro/app/views/options/form.php:15
1024
- #: app/views/options/form.php:334
1025
- msgid "Enable Keyword and URL Auto Replacement"
1026
  msgstr ""
1027
 
1028
- #: pro/app/views/options/form.php:16
1029
- #: app/views/options/form.php:335
1030
- msgid "If checked, this will enable you to automatically replace keywords and/or URLs on your blog with pretty links. You will specify the specific keywords and urls from your Pretty Link edit page."
1031
  msgstr ""
1032
 
1033
- #: pro/app/views/options/form.php:34
1034
- #: app/views/options/form.php:354
1035
- msgid "Thresholds"
1036
  msgstr ""
1037
 
1038
- #: pro/app/views/options/form.php:36
1039
- #: app/views/options/form.php:356
1040
- msgid "Set Keyword Replacement Thresholds"
 
1041
  msgstr ""
1042
 
1043
- #: pro/app/views/options/form.php:37
1044
- #: app/views/options/form.php:357
1045
- msgid "Don't want to have too many keyword replacements per page? Select to set some reasonable keyword replacement thresholds."
 
1046
  msgstr ""
1047
 
1048
- #: pro/app/views/options/form.php:54
1049
- msgid "Max Keywords"
1050
  msgstr ""
1051
 
1052
- #: pro/app/views/options/form.php:56
1053
- msgid "Set Maximum Keywords per Page"
1054
  msgstr ""
1055
 
1056
- #: pro/app/views/options/form.php:57
1057
- msgid "Maximum number of unique keyword / keyphrases you can replace with Pretty Links per page."
 
1058
  msgstr ""
1059
 
1060
- #: pro/app/views/options/form.php:68
1061
- msgid "Max Replacements"
 
1062
  msgstr ""
1063
 
1064
- #: pro/app/views/options/form.php:70
1065
- msgid "Set Maximum Replacements per Keyword"
1066
  msgstr ""
1067
 
1068
- #: pro/app/views/options/form.php:71
1069
- msgid "Maximum number of Pretty Link replacements per Keyword / Keyphrase."
 
1070
  msgstr ""
1071
 
1072
- #: pro/app/views/options/form.php:87
1073
- #: app/views/options/form.php:373
1074
- msgid "Open in New Window"
1075
  msgstr ""
1076
 
1077
- #: pro/app/views/options/form.php:89
1078
- #: app/views/options/form.php:375
1079
- msgid "Open Keyword Replacement Links in New Window"
1080
  msgstr ""
1081
 
1082
- #. translators: %1$s: open strong tag, %2$s: close strong tag
1083
- #: pro/app/views/options/form.php:92
1084
- #: app/views/options/form.php:378
1085
- msgid "Ensure that these keyword replacement links are opened in a separate window. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
1086
  msgstr ""
1087
 
1088
- #: pro/app/views/options/form.php:106
1089
- #: app/views/options/form.php:393
1090
- msgid "Add No Follows"
1091
  msgstr ""
1092
 
1093
- #: pro/app/views/options/form.php:108
1094
- #: app/views/options/form.php:395
1095
- msgid "Add 'nofollow' attribute to all Keyword Pretty Links"
1096
  msgstr ""
1097
 
1098
- #. translators: %1$s: open code tag, %2$s: close code tag, %3$s: open strong tag, %4$s close strong tag
1099
- #: pro/app/views/options/form.php:111
1100
- #: app/views/options/form.php:398
1101
- msgid "This adds the html %1$sNOFOLLOW%2$s attribute to all keyword replacement links. %3$sNote:%4$s This does not apply to url replacements--only keyword replacements."
1102
  msgstr ""
1103
 
1104
- #: pro/app/views/options/form.php:127
1105
- #: app/views/options/form.php:121
1106
- #: app/views/options/form.php:415
1107
- msgid "Add Sponsored"
1108
  msgstr ""
1109
 
1110
- #: pro/app/views/options/form.php:129
1111
- #: app/views/options/form.php:417
1112
- msgid "Add 'sponsored' attribute to all Keyword Pretty Links"
1113
  msgstr ""
1114
 
1115
- #. translators: %1$s: open code tag, %2$s: close code tag, %3$s: open strong tag, %4$s close strong tag
1116
- #: pro/app/views/options/form.php:132
1117
- #: app/views/options/form.php:420
1118
- msgid "This adds the html %1$sSPONSORED%2$s attribute to all keyword replacement links. %3$sNote:%4$s This does not apply to url replacements--only keyword replacements."
1119
  msgstr ""
1120
 
1121
- #: pro/app/views/options/form.php:148
1122
- #: app/views/options/form.php:437
1123
- msgid "Custom CSS"
1124
  msgstr ""
1125
 
1126
- #: pro/app/views/options/form.php:150
1127
- #: app/views/options/form.php:439
1128
- msgid "Add custom CSS to your keyword replacement links"
1129
  msgstr ""
1130
 
1131
- #. translators: %1$s: open strong tag, %2$s: close strong tag
1132
- #: pro/app/views/options/form.php:153
1133
- #: app/views/options/form.php:442
1134
- msgid "Add some custom formatting to your keyword pretty link replacements. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
1135
  msgstr ""
1136
 
1137
- #: pro/app/views/options/form.php:167
1138
- #: app/views/options/form.php:457
1139
- msgid "Custom Hover CSS"
1140
  msgstr ""
1141
 
1142
- #: pro/app/views/options/form.php:169
1143
- #: app/views/options/form.php:459
1144
- msgid "Add custom hover CSS to your keyword replacement links"
1145
  msgstr ""
1146
 
1147
- #. translators: %1$s: open strong tag, %2$s: close strong tag
1148
- #: pro/app/views/options/form.php:172
1149
- #: app/views/options/form.php:462
1150
- msgid "Add some custom formatting to the hover attribute of your keyword pretty links. %1$sNote%2$s: This does not apply to url replacements--only keyword replacements."
1151
  msgstr ""
1152
 
1153
- #: pro/app/views/options/form.php:186
1154
- #: app/views/options/form.php:477
1155
- msgid "Link to Disclosures"
1156
  msgstr ""
1157
 
1158
- #: pro/app/views/options/form.php:189
1159
- #: app/views/options/form.php:480
1160
- msgid "Automatically Add a Link to Disclosures"
1161
- msgstr ""
1162
-
1163
- #: pro/app/views/options/form.php:190
1164
- #: app/views/options/form.php:481
1165
- msgid "When enabled, this will add a link to your official affiliate link disclosure page to any page, post or custom post type that have any keyword or URL replacements. You'll also be able to customize the URL and position of the disclosure link."
1166
  msgstr ""
1167
 
1168
- #: pro/app/views/options/form.php:211
1169
- msgid "Disclosures Link URL"
 
1170
  msgstr ""
1171
 
1172
- #: pro/app/views/options/form.php:212
1173
- msgid "This is the URL of the page that contains your official affiliate link disclosures. This URL will be used in the link that will be generated."
 
1174
  msgstr ""
1175
 
1176
- #: pro/app/views/options/form.php:223
1177
- msgid "Text"
 
1178
  msgstr ""
1179
 
1180
- #: pro/app/views/options/form.php:226
1181
- msgid "Disclosures Link Text"
1182
  msgstr ""
1183
 
1184
- #: pro/app/views/options/form.php:227
1185
- msgid "This is the text of the link to your disclosures. This text will be visible to your visitors when the link is displayed."
1186
  msgstr ""
1187
 
1188
- #: pro/app/views/options/form.php:238
1189
- msgid "Position"
1190
  msgstr ""
1191
 
1192
- #: pro/app/views/options/form.php:241
1193
- msgid "Disclosures Link Position"
1194
  msgstr ""
1195
 
1196
- #: pro/app/views/options/form.php:242
1197
- msgid "This is the position of the link to your disclosures in relation to your post content."
 
1198
  msgstr ""
1199
 
1200
- #: pro/app/views/options/form.php:248
1201
- #: pro/app/views/options/form.php:831
1202
- #: app/views/options/form.php:1013
1203
- msgid "Bottom"
1204
  msgstr ""
1205
 
1206
- #: pro/app/views/options/form.php:249
1207
- #: pro/app/views/options/form.php:830
1208
- #: app/views/options/form.php:1012
1209
- msgid "Top"
1210
  msgstr ""
1211
 
1212
- #: pro/app/views/options/form.php:250
1213
- #: pro/app/views/options/form.php:832
1214
- #: app/views/options/form.php:1014
1215
- msgid "Top and Bottom"
1216
  msgstr ""
1217
 
1218
- #: pro/app/views/options/form.php:262
1219
- #: app/views/options/form.php:494
1220
- msgid "Keyword Disclosures"
1221
  msgstr ""
1222
 
1223
- #: pro/app/views/options/form.php:265
1224
- #: app/views/options/form.php:497
1225
- msgid "Automatically Add Affiliate Link Disclosures to Keyword Replacements"
1226
  msgstr ""
1227
 
1228
- #. translators: %1$s: open b tag, %2$s close b tag
1229
- #: pro/app/views/options/form.php:268
1230
- #: app/views/options/form.php:500
1231
- msgid "When enabled, this will add an affiliate link disclosure next to each one of your keyword replacements. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
1232
  msgstr ""
1233
 
1234
- #: pro/app/views/options/form.php:289
1235
- msgid "Disclosure Text"
1236
  msgstr ""
1237
 
1238
- #: pro/app/views/options/form.php:292
1239
- msgid "Keyword Link Disclosure Text"
1240
  msgstr ""
1241
 
1242
- #: pro/app/views/options/form.php:293
1243
- msgid "This is the text that will be added after each keyword replacement to indicate that the link is an affiliate link."
 
1244
  msgstr ""
1245
 
1246
- #: pro/app/views/options/form.php:309
1247
- #: app/views/options/form.php:516
1248
- msgid "Replace All URLs"
1249
  msgstr ""
1250
 
1251
- #: pro/app/views/options/form.php:311
1252
- #: app/views/options/form.php:518
1253
- msgid "Replace All non-Pretty Link URLs With Pretty Link URLs"
1254
  msgstr ""
1255
 
1256
- #: pro/app/views/options/form.php:312
1257
- #: app/views/options/form.php:519
1258
- msgid "This feature will take each url it finds and create or use an existing pretty link pointing to the url and replace it with the pretty link."
1259
  msgstr ""
1260
 
1261
- #: pro/app/views/options/form.php:329
1262
- msgid "Domain Blacklist"
1263
  msgstr ""
1264
 
1265
- #: pro/app/views/options/form.php:331
1266
- msgid "Do not replace links from these domains"
 
1267
  msgstr ""
1268
 
1269
- #. translators: %1$s: br tag, %2$s: open b tag, %3$s: close b tag
1270
- #: pro/app/views/options/form.php:334
1271
- msgid "Any links on your site which point to domains you define here will not be replaced automatically with Pretty Links. Place one domain per line.%1$s%1$sYou MUST enter http:// or https:// in front of the domain names and do NOT include any /'s or other text after the domain name.%1$s%1$sProper entry example:%1$s%2$shttps://www.google.com%3$s%1$s%2$shttp://mysite.org%3$s%1$s%1$sImproperly entered domains will be removed upon saving the Options."
1272
  msgstr ""
1273
 
1274
- #: pro/app/views/options/form.php:354
1275
- #: app/views/options/form.php:531
1276
- msgid "Replace in Comments"
1277
  msgstr ""
1278
 
1279
- #: pro/app/views/options/form.php:356
1280
- #: app/views/options/form.php:533
1281
- msgid "Replace Keywords and URLs in Comments"
1282
  msgstr ""
1283
 
1284
- #: pro/app/views/options/form.php:357
1285
- #: app/views/options/form.php:534
1286
- msgid "This option will enable the keyword / URL replacement routine to run in Comments."
1287
  msgstr ""
1288
 
1289
- #: pro/app/views/options/form.php:368
1290
- #: app/views/options/form.php:546
1291
- msgid "Replace in Feeds"
1292
  msgstr ""
1293
 
1294
- #: pro/app/views/options/form.php:370
1295
- #: app/views/options/form.php:548
1296
- msgid "Replace Keywords and URLs in Feeds"
1297
  msgstr ""
1298
 
1299
- #. translators: %1$s: br tag, %2$s open strong tag, %3$s: close strong tag
1300
- #: pro/app/views/options/form.php:373
1301
- #: app/views/options/form.php:551
1302
- msgid "This option will enable the keyword / URL replacement routine to run in RSS Feeds.%1$s%2$sNote:%3$s This option can slow the load speed of your RSS feed -- unless used in conjunction with a caching plugin like W3 Total Cache or WP Super Cache.%1$s%2$sNote #2%3$s This option will only work if you have \"Full Text\" selected in your General WordPress Reading settings.%1$s%2$sNote #3:%3$s If this option is used along with \"Replace Keywords and URLs in Comments\" then your post comment feeds will have keywords replaced in them as well."
1303
  msgstr ""
1304
 
1305
- #: pro/app/views/options/form.php:388
1306
- #: pro/app/views/options/form.php:390
1307
- #: app/views/options/form.php:567
1308
- #: app/views/options/form.php:569
1309
- msgid "Index Replacements"
1310
  msgstr ""
1311
 
1312
- #. translators: %1$s: br tag, %2$s open strong tag, %3$s: close strong tag
1313
- #: pro/app/views/options/form.php:393
1314
- #: app/views/options/form.php:572
1315
- msgid "This feature will index all of your keyword & URL replacements to dramatically improve performance.%1$s%1$sIf your site has a large number of replacements and/or posts then this feature may increase the load on your server temporarily and your replacements may not show up on your posts for a day or two initially (until all posts are indexed).%1$s%1$s%2$sNote:%3$s this feature requires the use of wp-cron."
1316
  msgstr ""
1317
 
1318
- #: pro/app/views/options/form.php:414
1319
- #: pro/app/views/options/form.php:416
1320
- msgid "Keyword Index Status"
1321
  msgstr ""
1322
 
1323
- #: pro/app/views/options/form.php:417
1324
- msgid "This shows how many posts have keywords indexed for and are ready for replacement."
1325
  msgstr ""
1326
 
1327
- #: pro/app/views/options/form.php:425
1328
- #: pro/app/views/options/form.php:448
1329
- msgid "%1$s out of %2$s Posts Indexed"
1330
  msgstr ""
1331
 
1332
- #: pro/app/views/options/form.php:429
1333
- #: pro/app/views/options/form.php:452
1334
- msgid "%1$s out of %2$s Comments Indexed"
1335
  msgstr ""
1336
 
1337
- #: pro/app/views/options/form.php:437
1338
- msgid "URL Index Status"
1339
  msgstr ""
1340
 
1341
- #: pro/app/views/options/form.php:439
1342
- msgid "URL Replacements Index Status"
1343
  msgstr ""
1344
 
1345
- #: pro/app/views/options/form.php:440
1346
- msgid "This shows how many posts have url replacements indexed for and are ready for replacement."
1347
  msgstr ""
1348
 
1349
- #: pro/app/views/options/form.php:468
1350
- #: app/views/options/form.php:598
1351
- #: app/views/options/form.php:642
1352
- msgid "Auto-Create Shortlink Options"
1353
  msgstr ""
1354
 
1355
- #: pro/app/views/options/form.php:489
1356
- #: app/views/options/form.php:649
1357
- #: app/views/options/form.php:959
1358
- msgid "Pretty Bar Options"
1359
  msgstr ""
1360
 
1361
- #: pro/app/views/options/form.php:495
1362
- #: app/views/options/form.php:657
1363
- msgid "Image URL"
1364
  msgstr ""
1365
 
1366
- #: pro/app/views/options/form.php:497
1367
- #: app/views/options/form.php:659
1368
- msgid "Pretty Bar Image URL"
1369
  msgstr ""
1370
 
1371
- #: pro/app/views/options/form.php:498
1372
- #: app/views/options/form.php:660
1373
- msgid "If set, this will replace the logo image on the Pretty Bar. The image that this URL references should be 48x48 Pixels to fit."
1374
  msgstr ""
1375
 
1376
- #: pro/app/views/options/form.php:509
1377
- #: app/views/options/form.php:672
1378
- msgid "Background Image URL"
1379
  msgstr ""
1380
 
1381
- #: pro/app/views/options/form.php:511
1382
- #: app/views/options/form.php:674
1383
- msgid "Pretty Bar Background Image URL"
1384
  msgstr ""
1385
 
1386
- #: pro/app/views/options/form.php:512
1387
- #: app/views/options/form.php:675
1388
- msgid "If set, this will replace the background image on Pretty Bar. The image that this URL references should be 65px tall - this image will be repeated horizontally across the bar."
1389
  msgstr ""
1390
 
1391
- #: pro/app/views/options/form.php:523
1392
- #: app/views/options/form.php:687
1393
- msgid "Background Color"
1394
  msgstr ""
1395
 
1396
- #: pro/app/views/options/form.php:525
1397
- #: app/views/options/form.php:689
1398
- msgid "Pretty Bar Background Color"
1399
  msgstr ""
1400
 
1401
- #: pro/app/views/options/form.php:526
1402
- #: app/views/options/form.php:690
1403
- msgid "This will alter the background color of the Pretty Bar if you haven't specified a Pretty Bar background image."
1404
- msgstr ""
1405
-
1406
- #: pro/app/views/options/form.php:537
1407
- #: app/views/options/form.php:702
1408
- msgid "Text Color"
1409
- msgstr ""
1410
-
1411
- #: pro/app/views/options/form.php:539
1412
- #: app/views/options/form.php:704
1413
- msgid "Pretty Bar Text Color"
1414
- msgstr ""
1415
-
1416
- #. translators: %1$s: open code tag, %2$s: close code tag
1417
- #: pro/app/views/options/form.php:542
1418
- #: app/views/options/form.php:707
1419
- msgid "If not set, this defaults to black (RGB value %1$s#000000%2$s) but you can change it to whatever color you like."
1420
- msgstr ""
1421
-
1422
- #: pro/app/views/options/form.php:556
1423
- #: app/views/options/form.php:722
1424
- msgid "Link Color"
1425
- msgstr ""
1426
-
1427
- #: pro/app/views/options/form.php:558
1428
- #: app/views/options/form.php:724
1429
- msgid "Pretty Bar Link Color"
1430
- msgstr ""
1431
-
1432
- #. translators: %1$s: open code tag, %2$s: close code tag
1433
- #: pro/app/views/options/form.php:561
1434
- #: app/views/options/form.php:727
1435
- msgid "If not set, this defaults to blue (RGB value %1$s#0000ee%2$s) but you can change it to whatever color you like."
1436
- msgstr ""
1437
-
1438
- #: pro/app/views/options/form.php:575
1439
- #: app/views/options/form.php:742
1440
- msgid "Link Hover Color"
1441
  msgstr ""
1442
 
1443
- #: pro/app/views/options/form.php:577
1444
- #: app/views/options/form.php:744
1445
- msgid "Pretty Bar Link Hover Color"
 
 
 
1446
  msgstr ""
1447
 
1448
- #. translators: %1$s: open code tag, %2$s: close code tag
1449
- #: pro/app/views/options/form.php:580
1450
- #: app/views/options/form.php:747
1451
- msgid "If not set, this defaults to RGB value %1$s#ababab%2$s but you can change it to whatever color you like."
 
 
 
 
 
1452
  msgstr ""
1453
 
1454
- #: pro/app/views/options/form.php:594
1455
- #: app/views/options/form.php:762
1456
- msgid "Visited Link Color"
 
 
 
 
1457
  msgstr ""
1458
 
1459
- #: pro/app/views/options/form.php:596
1460
- #: app/views/options/form.php:764
1461
- msgid "Pretty Bar Visited Link Color"
1462
  msgstr ""
1463
 
1464
- #. translators: %1$s: open code tag, %2$s: close code tag
1465
- #: pro/app/views/options/form.php:599
1466
- #: app/views/options/form.php:767
1467
- msgid "If not set, this defaults to RGB value %1$s#551a8b%2$s but you can change it to whatever color you like."
1468
  msgstr ""
1469
 
1470
- #: pro/app/views/options/form.php:613
1471
- #: app/views/options/form.php:782
1472
- msgid "Title Char Limit"
1473
  msgstr ""
1474
 
1475
- #: pro/app/views/options/form.php:615
1476
- #: app/views/options/form.php:784
1477
- msgid "Pretty Bar Title Char Limit"
1478
  msgstr ""
1479
 
1480
- #. translators: %1$s: open code tag, %2$s: close code tag
1481
- #: pro/app/views/options/form.php:618
1482
- #: app/views/options/form.php:787
1483
- msgid "If your Website has a long title then you may need to adjust this value so that it will all fit on the Pretty Bar. It is recommended that you keep this value to %1$s30%2$s characters or less so the Pretty Bar's format looks good across different browsers and screen resolutions."
1484
  msgstr ""
1485
 
1486
- #: pro/app/views/options/form.php:632
1487
- #: app/views/options/form.php:802
1488
- msgid "Description Char Limit"
1489
  msgstr ""
1490
 
1491
- #: pro/app/views/options/form.php:634
1492
- #: app/views/options/form.php:804
1493
- msgid "Pretty Bar Description Char Limit"
 
1494
  msgstr ""
1495
 
1496
- #. translators: %1$s: open code tag, %2$s: close code tag
1497
- #: pro/app/views/options/form.php:637
1498
- #: app/views/options/form.php:807
1499
- msgid "If your Website has a long Description (tagline) then you may need to adjust this value so that it will all fit on the Pretty Bar. It is recommended that you keep this value to %1$s40%2$s characters or less so the Pretty Bar's format looks good across different browsers and screen resolutions."
1500
  msgstr ""
1501
 
1502
- #: pro/app/views/options/form.php:651
1503
- #: app/views/options/form.php:822
1504
- msgid "Target URL Char Limit"
1505
  msgstr ""
1506
 
1507
- #: pro/app/views/options/form.php:653
1508
- #: app/views/options/form.php:824
1509
- msgid "Pretty Bar Target URL Char Limit"
1510
  msgstr ""
1511
 
1512
- #. translators: %1$s: open code tag, %2$s: close code tag
1513
- #: pro/app/views/options/form.php:656
1514
- #: app/views/options/form.php:827
1515
- msgid "If you link to a lot of large Target URLs you may want to adjust this value. It is recommended that you keep this value to %1$s40%2$s or below so the Pretty Bar's format looks good across different browsers and URL sizes"
 
 
1516
  msgstr ""
1517
 
1518
- #: pro/app/views/options/form.php:670
1519
- #: app/views/options/form.php:842
1520
- msgid "Show Title"
 
 
 
1521
  msgstr ""
1522
 
1523
- #: pro/app/views/options/form.php:672
1524
- #: app/views/options/form.php:844
1525
- msgid "Pretty Bar Show Title"
 
1526
  msgstr ""
1527
 
1528
- #: pro/app/views/options/form.php:673
1529
- #: app/views/options/form.php:845
1530
- msgid "Make sure this is checked if you want the title of your blog (and link) to show up on the Pretty Bar."
1531
  msgstr ""
1532
 
1533
- #: pro/app/views/options/form.php:684
1534
- #: app/views/options/form.php:857
1535
- msgid "Show Description"
 
1536
  msgstr ""
1537
 
1538
- #: pro/app/views/options/form.php:686
1539
- #: app/views/options/form.php:859
1540
- msgid "Pretty Bar Show Description"
 
 
 
 
 
1541
  msgstr ""
1542
 
1543
- #: pro/app/views/options/form.php:687
1544
- #: app/views/options/form.php:860
1545
- msgid "Make sure this is checked if you want your site description to show up on the Pretty Bar."
1546
  msgstr ""
1547
 
1548
- #: pro/app/views/options/form.php:698
1549
- #: app/views/options/form.php:872
1550
- msgid "Show Share Links"
1551
  msgstr ""
1552
 
1553
- #: pro/app/views/options/form.php:700
1554
- #: app/views/options/form.php:874
1555
- msgid "Pretty Bar Show Share Links"
1556
  msgstr ""
1557
 
1558
- #: pro/app/views/options/form.php:701
1559
- #: app/views/options/form.php:875
1560
- msgid "Make sure this is checked if you want \"share links\" to show up on the Pretty Bar."
1561
  msgstr ""
1562
 
1563
- #: pro/app/views/options/form.php:712
1564
- #: app/views/options/form.php:887
1565
- msgid "Show Target URL"
1566
  msgstr ""
1567
 
1568
- #: pro/app/views/options/form.php:714
1569
- #: app/views/options/form.php:889
1570
- msgid "Pretty Bar Show Target URL Links"
1571
  msgstr ""
1572
 
1573
- #: pro/app/views/options/form.php:715
1574
- #: app/views/options/form.php:890
1575
- msgid "Make sure this is checked if you want a link displaying the Target URL to show up on the Pretty Bar."
1576
  msgstr ""
1577
 
1578
- #: pro/app/views/options/form.php:726
1579
- #: pro/app/views/options/form.php:728
1580
- #: app/views/options/form.php:902
1581
- #: app/views/options/form.php:904
1582
- msgid "Hide Attribution Link"
1583
  msgstr ""
1584
 
1585
- #. translators: %1$s: br tag, %2$s: open strong tag, %3$s close strong tag, %4$s open em tag, %5$s close em tag, %6$s open link tag, %7$s close link tag
1586
- #: pro/app/views/options/form.php:731
1587
- #: app/views/options/form.php:907
1588
- msgid "Check this to hide the pretty link attribution link on the pretty bar.%1$s%1$s%2$sWait, before you do this, you might want to leave this un-checked and set the alternate URL of this link to your %4$sPretty Links Pro%5$s %6$sAffiliate URL%7$s to earn a few bucks while you are at it.%3$s"
1589
  msgstr ""
1590
 
1591
- #: pro/app/views/options/form.php:757
1592
- #: app/views/options/form.php:934
1593
- msgid "Attribution URL"
 
 
1594
  msgstr ""
1595
 
1596
- #: pro/app/views/options/form.php:759
1597
- #: app/views/options/form.php:936
1598
- msgid "Alternate Pretty Bar Attribution URL"
1599
  msgstr ""
1600
 
1601
- #. translators: %1$s open em tag, %2$s close em tag, %3$s open link tag, %4$s close link tag
1602
- #: pro/app/views/options/form.php:762
1603
- #: app/views/options/form.php:939
1604
- msgid "If set, this will replace the Pretty Bars attribution URL. This is a very good place to put your %1$sPretty Links Pro%2$s %3$sAffiliate Link%4$s."
1605
  msgstr ""
1606
 
1607
- #: pro/app/views/options/form.php:781
1608
- #: app/views/options/form.php:966
1609
- #: app/views/options/form.php:1032
1610
- msgid "Social Buttons Options"
1611
  msgstr ""
1612
 
1613
- #: pro/app/views/options/form.php:784
1614
- #: app/views/options/form.php:970
1615
- msgid "Buttons"
1616
  msgstr ""
1617
 
1618
- #: pro/app/views/options/form.php:786
1619
- #: app/views/options/form.php:972
1620
- msgid "Social Buttons"
1621
  msgstr ""
1622
 
1623
- #. translators: %1$s: br tag, %2$s open code tag, %3$s close code tag
1624
- #: pro/app/views/options/form.php:789
1625
- #: app/views/options/form.php:975
1626
- msgid "Select which buttons you want to be visible on the Social Buttons Bar.%1$s%1$s%2$sNote:%3$s In order for the Social Buttons Bar to be visible on Pages and or Posts, you must first enable it in the \"Page &amp; Post Options\" section above."
1627
  msgstr ""
1628
 
1629
- #: pro/app/views/options/form.php:816
1630
- #: app/views/options/form.php:997
1631
- msgid "Buttons Placement"
1632
  msgstr ""
1633
 
1634
- #: pro/app/views/options/form.php:818
1635
- #: app/views/options/form.php:999
1636
- msgid "Social Buttons Placement"
1637
  msgstr ""
1638
 
1639
- #. translators: %1$s: br tag, %2$s open code tag, %3$s close code tag
1640
- #: pro/app/views/options/form.php:821
1641
- #: app/views/options/form.php:1002
1642
- msgid "This determines where your Social Buttons Placement should appear in relation to content on Pages and/or Posts.%1$s%1$s%2$sNote:%3$s If you want this bar to appear then you must enable it in the \"Auto-Create Links\" section above."
1643
  msgstr ""
1644
 
1645
- #: pro/app/views/options/form.php:835
1646
- #: app/views/options/form.php:1017
1647
- msgid "Social Buttons Manual Placement"
1648
  msgstr ""
1649
 
1650
- #. translators: %1$s: example shortcode, %2$s: example template tag
1651
- #: pro/app/views/options/form.php:838
1652
- #: app/views/options/form.php:1020
1653
- msgid "If you select none, you can still show your Social Buttons by manually adding the %1$s shortcode to your blog posts or %2$s template tag to your WordPress Theme."
1654
  msgstr ""
1655
 
1656
- #: pro/app/views/options/form.php:866
1657
- #: app/views/options/form.php:1040
1658
- msgid "Public Links Creation Options"
 
1659
  msgstr ""
1660
 
1661
- #: pro/app/views/options/form.php:872
1662
- #: app/views/options/form.php:1048
1663
- msgid "Enable Public Links"
1664
  msgstr ""
1665
 
1666
- #: pro/app/views/options/form.php:874
1667
- #: app/views/options/form.php:1050
1668
- msgid "Enable Public Link Creation on this Site"
1669
  msgstr ""
1670
 
1671
- #: pro/app/views/options/form.php:876
1672
- #: app/views/options/form.php:1052
1673
- msgid "This option will give you the ability to turn your website into a link shortening service for your users. Once selected, you can enable the Pretty Links Pro Sidebar Widget or just display the link creation form with the %s shortcode in any post or page on your website."
1674
  msgstr ""
1675
 
1676
- #: pro/app/views/options/form.php:895
1677
- msgid "Use Display Page"
1678
  msgstr ""
1679
 
1680
- #: pro/app/views/options/form.php:897
1681
- msgid "Use Public Link Display Page"
 
1682
  msgstr ""
1683
-
1684
- #: pro/app/views/options/form.php:898
1685
- msgid "When a link is created using the public form, the user is typically redirected to a simple page displaying their new pretty link. But, you can specify a page that you want them to be redirected to on your website, using your branding instead by selecting this box and entering the url of the page you want them to go to."
1686
  msgstr ""
1687
 
1688
- #: pro/app/views/options/form.php:915
1689
- msgid "Display Page"
 
1690
  msgstr ""
1691
 
1692
- #: pro/app/views/options/form.php:917
1693
- msgid "Public Pretty Link Creation Display URL"
 
1694
  msgstr ""
1695
 
1696
- #: pro/app/views/options/form.php:919
1697
- msgid "To set this up, create a new page on your WordPress site and make sure the %s appears somewhere on this page -- otherwise the link will never get created. Once this page is created, just enter the full URL to it here. Make sure this URL does not end with a slash (/)."
1698
  msgstr ""
1699
 
1700
- #: pro/app/views/options/autocreate.php:7
1701
- msgid "%s Shortlinks"
1702
  msgstr ""
1703
 
1704
- #: pro/app/views/options/autocreate.php:10
1705
- msgid "Create Pretty Links for %s"
 
1706
  msgstr ""
1707
 
1708
- #: pro/app/views/options/autocreate.php:11
1709
- msgid "Automatically Create a Pretty Link for each of your published %s"
 
 
1710
  msgstr ""
1711
 
1712
- #: pro/app/views/options/autocreate.php:30
1713
- msgid "Category"
1714
  msgstr ""
1715
 
1716
- #: pro/app/views/options/autocreate.php:33
1717
- msgid "%s Auto Link Category"
1718
  msgstr ""
1719
 
1720
- #: pro/app/views/options/autocreate.php:34
1721
- msgid "Category that Pretty Links for %s will be automatically added to."
1722
  msgstr ""
1723
 
1724
- #: pro/app/views/options/autocreate.php:51
1725
- msgid "Add a New Category"
1726
  msgstr ""
1727
 
1728
- #: pro/app/views/options/autocreate.php:57
1729
- msgid "Show Social Buttons"
1730
  msgstr ""
1731
 
1732
- #: pro/app/views/options/autocreate.php:60
1733
- msgid "Show Social Buttons on %s"
1734
  msgstr ""
1735
 
1736
- #: pro/app/views/options/autocreate.php:61
1737
- msgid "If this button is checked then you'll have the ability to include a social buttons bar on your %s."
 
1738
  msgstr ""
1739
 
1740
- #: pro/app/views/options/general.php:8
1741
- msgid "Use Shortlink URL"
1742
  msgstr ""
1743
 
1744
- #: pro/app/views/options/general.php:10
1745
- msgid "Use an Alternate Shortlink URL"
 
1746
  msgstr ""
1747
 
1748
- #: pro/app/views/options/general.php:11
1749
- msgid "Use this option if you want to substitute your actual blog's url with another URL. You must have another valid domain name pointing to this WordPress install before you enable this option. If you are using this option to just get rid of the www in the beginning of your url that is fine -- just make sure your domain works without the www before enabling this option."
1750
  msgstr ""
1751
 
1752
- #: pro/app/views/options/general.php:28
1753
- #: pro/app/views/options/general.php:30
1754
- msgid "Shortlink URL"
1755
  msgstr ""
1756
 
1757
- #: pro/app/views/options/general.php:31
1758
- msgid "Enter a valid base url that points at this WordPress install. Make sure this URL does not end with a slash (/)."
 
 
1759
  msgstr ""
1760
 
1761
- #: pro/app/views/options/general.php:47
1762
- msgid "Minimum Admin Role"
1763
  msgstr ""
1764
 
1765
- #: pro/app/views/options/general.php:49
1766
- msgid "Set Minimum Role Required To Access Pretty Link"
1767
  msgstr ""
1768
 
1769
- #: pro/app/views/options/general.php:50
1770
- msgid "Use this option to set the minimum role of users who can access the Admin interface for Pretty Link."
1771
  msgstr ""
1772
 
1773
- #: pro/app/views/options/general.php:56
1774
- msgid "Administrator"
1775
  msgstr ""
1776
 
1777
- #: pro/app/views/options/general.php:57
1778
- msgid "Editor"
 
1779
  msgstr ""
1780
 
1781
- #: pro/app/views/options/general.php:58
1782
- msgid "Author"
1783
  msgstr ""
1784
 
1785
- #: pro/app/views/options/general.php:59
1786
- msgid "Contributor"
 
1787
  msgstr ""
1788
 
1789
- #: pro/app/views/options/general.php:60
1790
- msgid "Subscriber"
1791
  msgstr ""
1792
 
1793
- #: pro/app/views/tools/nav.php:3
1794
- msgid "Custom Bookmarklet"
 
 
 
1795
  msgstr ""
1796
 
1797
- #: pro/app/views/tools/generator.php:6
1798
- msgid "Custom Bookmarklet:"
1799
  msgstr ""
1800
 
1801
- #: pro/app/views/tools/generator.php:7
1802
- #: pro/app/views/tools/generator.php:17
1803
- #: app/views/tools/form.php:26
1804
- msgid "Get Pretty Link"
1805
  msgstr ""
1806
 
1807
- #: pro/app/views/tools/generator.php:9
1808
- msgid "Customize Pretty Link Bookmarklet"
1809
  msgstr ""
1810
 
1811
- #: pro/app/views/tools/generator.php:10
1812
- msgid "Alter the options below to customize this Bookmarklet. As you modify the label, redirect type, tracking and category, you will see this bookmarklet update -- when the settings are how you want them, drag the bookmarklet into your toolbar. You can create as many bookmarklets as you want each with different settings."
 
1813
  msgstr ""
1814
 
1815
- #: pro/app/views/tools/generator.php:13
1816
- #: pro/app/widgets/PlpPublicLinksWidget.php:66
1817
- msgid "Pretty Link Options"
1818
  msgstr ""
1819
 
1820
- #: pro/app/views/tools/generator.php:16
1821
- msgid "Label:"
 
1822
  msgstr ""
1823
 
1824
- #: pro/app/views/tools/generator.php:20
1825
- #: pro/app/widgets/PlpPublicLinksWidget.php:68
1826
- msgid "Redirection:"
1827
  msgstr ""
1828
 
1829
- #: pro/app/views/tools/generator.php:21
1830
- #: pro/app/views/tools/generator.php:26
1831
- #: pro/app/widgets/PlpPublicLinksWidget.php:70
1832
- #: pro/app/widgets/PlpPublicLinksWidget.php:82
1833
- #: app/views/shared/tinymce_form_popup.php:31
1834
- #: app/views/shared/tinymce_form_popup.php:48
1835
- #: app/views/shared/tinymce_form_popup.php:56
1836
- #: app/views/shared/tinymce_form_popup.php:64
1837
- msgid "Default"
1838
  msgstr ""
1839
 
1840
- #: pro/app/views/tools/generator.php:24
1841
- msgid "Tracking:"
 
1842
  msgstr ""
1843
 
1844
- #: pro/app/views/tools/generator.php:27
1845
- #: pro/app/widgets/PlpPublicLinksWidget.php:83
1846
- #: app/views/admin/popups/rating.php:12
1847
- msgid "Yes"
1848
  msgstr ""
1849
 
1850
- #: pro/app/views/tools/generator.php:28
1851
- #: pro/app/widgets/PlpPublicLinksWidget.php:84
1852
- #: app/views/admin/popups/rating.php:13
1853
- msgid "No"
1854
  msgstr ""
1855
 
1856
- #: pro/app/views/tools/generator.php:32
1857
- #: pro/app/widgets/PlpPublicLinksWidget.php:89
1858
- msgid "Category:"
1859
  msgstr ""
1860
 
1861
- #: pro/app/views/import-export/form.php:4
1862
- msgid "Import / Export Links"
 
1863
  msgstr ""
1864
 
1865
- #: pro/app/views/import-export/form.php:9
1866
- #: pro/app/views/import-export/form.php:12
1867
- msgid "Export Pretty Links"
 
 
1868
  msgstr ""
1869
 
1870
- #: pro/app/views/import-export/form.php:13
1871
- msgid "Export Links to a CSV File"
 
 
1872
  msgstr ""
1873
 
1874
- #: pro/app/views/import-export/form.php:17
1875
- msgid "Export"
 
1876
  msgstr ""
1877
 
1878
- #: pro/app/views/import-export/form.php:22
1879
- #: pro/app/views/import-export/form.php:25
1880
- msgid "Import Pretty Links"
1881
  msgstr ""
1882
 
1883
- #: pro/app/views/import-export/form.php:27
1884
- msgid "There are two ways to import a file.%1$s%1$s1) Importing to update existing links and%1$s%1$s2) Importing to generate new links. When Importing to generate new links, you must delete the \"id\" column from the CSV before importing. If the \"id\" column is present, Pretty Links Pro will attempt to update existing links."
 
1885
  msgstr ""
1886
 
1887
- #: pro/app/views/import-export/form.php:39
1888
- msgid "Import"
 
 
 
 
 
 
 
 
1889
  msgstr ""
1890
 
1891
- #: pro/app/views/import-export/form.php:42
1892
- msgid "Links Import File"
 
 
 
1893
  msgstr ""
1894
 
1895
- #: pro/app/views/import-export/form.php:43
1896
- msgid "Select a file that has been formatted as a Pretty Link CSV import file and click \"Import\""
 
1897
  msgstr ""
1898
 
1899
- #: pro/app/views/import-export/form.php:51
1900
- msgid "Import/Export Help"
 
1901
  msgstr ""
1902
 
1903
- #: pro/app/views/import-export/import-error.php:4
1904
- msgid "Import Error"
 
1905
  msgstr ""
1906
 
1907
- #: pro/app/views/import-export/import-error.php:8
1908
- msgid "&larr; Go back"
1909
  msgstr ""
1910
 
1911
- #: pro/app/views/import-export/import.php:4
1912
- msgid "Import Results"
 
1913
  msgstr ""
1914
 
1915
- #: pro/app/views/import-export/import.php:5
1916
- msgid "Total Rows: %s"
1917
  msgstr ""
1918
 
1919
- #: pro/app/views/import-export/import.php:7
1920
- msgid "%s Pretty Links were Successfully Created"
1921
  msgstr ""
1922
 
1923
- #: pro/app/views/import-export/import.php:8
1924
- msgid "%s Pretty Links were Successfully Updated"
1925
  msgstr ""
1926
 
1927
- #: pro/app/views/import-export/import.php:13
1928
- msgid "Pretty Links were unable to be Created: %s"
1929
  msgstr ""
1930
 
1931
- #: pro/app/views/import-export/import.php:17
1932
- msgid "Error(s) for Pretty Link with Slug: %s"
1933
  msgstr ""
1934
 
1935
- #: pro/app/views/import-export/import.php:32
1936
- msgid "Pretty Links were unable to be Updated: %s"
 
 
 
1937
  msgstr ""
1938
 
1939
- #: pro/app/views/import-export/import.php:36
1940
- msgid "Error(s) for Pretty Link with id: %s"
1941
  msgstr ""
1942
 
1943
- #: pro/app/controllers/PlpLinksController.php:195
1944
- msgid "Your URL Replacements must be formatted as a comma separated list of properly formatted URLs (http[s]://example.com/whatever)"
1945
  msgstr ""
1946
 
1947
- #: pro/app/controllers/PlpLinksController.php:206
1948
- msgid "Date must be valid and formatted YYYY-MM-DD."
1949
  msgstr ""
1950
 
1951
- #: pro/app/controllers/PlpLinksController.php:218
1952
- msgid "Expire Clicks must be a number greater than zero."
1953
  msgstr ""
1954
 
1955
- #: pro/app/controllers/PlpLinksController.php:225
1956
- msgid "Expired URL must be a valid URL."
1957
  msgstr ""
1958
 
1959
- #: pro/app/controllers/PlpLinksController.php:237
1960
- msgid "Your URL Rotations must all be properly formatted URLs."
1961
  msgstr ""
1962
 
1963
- #: pro/app/controllers/PlpLinksController.php:246
1964
- msgid "Your Link Rotation Weights must add up to 100%."
 
1965
  msgstr ""
1966
 
1967
- #: pro/app/controllers/PlpLinksController.php:256
1968
- msgid "Your Geographic Redirect URLs must all be properly formatted."
1969
  msgstr ""
1970
 
1971
- #: pro/app/controllers/PlpLinksController.php:260
1972
- msgid "Your Geographic Redirects URLs must not be empty."
1973
  msgstr ""
1974
 
1975
- #: pro/app/controllers/PlpLinksController.php:264
1976
- msgid "Your Geographic Redirect Countries must not be empty."
1977
  msgstr ""
1978
 
1979
- #: pro/app/controllers/PlpLinksController.php:275
1980
- msgid "Your Technology Redirect URLs must all be properly formatted."
1981
  msgstr ""
1982
 
1983
- #: pro/app/controllers/PlpLinksController.php:279
1984
- msgid "Your Technology Redirects URLs must not be empty."
1985
  msgstr ""
1986
 
1987
- #: pro/app/controllers/PlpLinksController.php:290
1988
- msgid "Your Time Period Redirect URLs must all be properly formatted."
 
 
1989
  msgstr ""
1990
 
1991
- #: pro/app/controllers/PlpLinksController.php:294
1992
- msgid "Your Time Period Redirects URLs must not be empty."
1993
  msgstr ""
1994
 
1995
- #: pro/app/controllers/PlpLinksController.php:299
1996
- msgid "Your Time Period Redirect start time must not be empty."
1997
  msgstr ""
1998
 
1999
- #: pro/app/controllers/PlpLinksController.php:302
2000
- msgid "Your Time Period Redirect start time must be a properly formatted date."
2001
  msgstr ""
2002
 
2003
- #: pro/app/controllers/PlpLinksController.php:308
2004
- msgid "Your Time Period Redirect end time must not be empty."
2005
  msgstr ""
2006
 
2007
- #: pro/app/controllers/PlpLinksController.php:311
2008
- msgid "Your Time Period Redirect end time must be a properly formatted date."
 
 
 
2009
  msgstr ""
2010
 
2011
- #: pro/app/controllers/PlpLinksController.php:319
2012
- msgid "Your Time Period Redirect start time must come before the end time."
 
 
2013
  msgstr ""
2014
 
2015
- #: pro/app/controllers/PlpLinksController.php:327
2016
- msgid "Delay Redirect must be a number"
 
 
 
2017
  msgstr ""
2018
 
2019
- #: pro/app/controllers/PlpLinksController.php:623
2020
- #: pro/app/controllers/PlpLinksController.php:669
2021
- #: app/views/shared/tinymce_form_popup.php:37
2022
- #: app/views/options/form.php:55
2023
- msgid "Pretty Bar"
2024
  msgstr ""
2025
 
2026
- #: pro/app/controllers/PlpLinksController.php:624
2027
- #: app/views/shared/tinymce_form_popup.php:38
2028
- msgid "Cloaked"
 
 
2029
  msgstr ""
2030
 
2031
- #: pro/app/controllers/PlpLinksController.php:625
2032
- #: pro/app/controllers/PlpLinksController.php:671
2033
- #: app/views/shared/tinymce_form_popup.php:39
2034
- msgid "Pixel"
2035
  msgstr ""
2036
 
2037
- #: pro/app/controllers/PlpLinksController.php:626
2038
- #: pro/app/controllers/PlpLinksController.php:672
2039
- #: app/views/shared/tinymce_form_popup.php:40
2040
- msgid "Meta Refresh"
2041
  msgstr ""
2042
 
2043
- #: pro/app/controllers/PlpLinksController.php:627
2044
- #: pro/app/controllers/PlpLinksController.php:673
2045
- #: app/views/shared/tinymce_form_popup.php:41
2046
- msgid "Javascript"
2047
  msgstr ""
2048
 
2049
- #: pro/app/controllers/PlpLinksController.php:670
2050
- #: pro/app/widgets/PlpPublicLinksWidget.php:75
2051
- msgid "Cloak"
2052
  msgstr ""
2053
 
2054
- #: pro/app/controllers/PlpLinksController.php:735
2055
- msgid "View QR Code for this link: %s"
 
 
 
2056
  msgstr ""
2057
 
2058
- #: pro/app/controllers/PlpLinksController.php:735
2059
- #: pro/app/controllers/PlpLinksController.php:739
2060
- msgid "QR Code"
 
2061
  msgstr ""
2062
 
2063
- #: pro/app/controllers/PlpLinksController.php:739
2064
- msgid "Download QR Code for this link: %s"
2065
  msgstr ""
2066
 
2067
- #: pro/app/controllers/PlpLinksController.php:812
2068
- msgid "This link expired on %1$s and will now cause a 404 error when visited"
 
2069
  msgstr ""
2070
 
2071
- #: pro/app/controllers/PlpLinksController.php:815
2072
- msgid "This link expired on %1$s and now redirects to %2$s"
2073
  msgstr ""
2074
 
2075
- #: pro/app/controllers/PlpLinksController.php:819
2076
- msgid "This link is set to expire after the date %s"
2077
  msgstr ""
2078
 
2079
- #: pro/app/controllers/PlpLinksController.php:830
2080
- msgid "This link expired after %d clicks and will now cause a 404 error when visited"
2081
  msgstr ""
2082
 
2083
- #: pro/app/controllers/PlpLinksController.php:833
2084
- msgid "This link expired after %1$d clicks and now redirects to %2$s"
2085
  msgstr ""
2086
 
2087
- #: pro/app/controllers/PlpLinksController.php:837
2088
- msgid "This link is set to expire after %d clicks"
2089
  msgstr ""
2090
 
2091
- #: pro/app/controllers/PlpLinksController.php:845
2092
- msgid "This link has additional Target URL rotations"
2093
  msgstr ""
2094
 
2095
- #: pro/app/controllers/PlpLinksController.php:848
2096
- msgid "This link has additional Geographic Target URLs"
2097
  msgstr ""
2098
 
2099
- #: pro/app/controllers/PlpLinksController.php:851
2100
- msgid "This link has additional Technology Dependent Conditional Target URLs"
2101
  msgstr ""
2102
 
2103
- #: pro/app/controllers/PlpLinksController.php:856
2104
- msgid "A Time Period Redirect is currently active for this link. When visited it will currently redirect to %s rather than the Target URL unless the link is expired."
2105
  msgstr ""
2106
 
2107
- #: pro/app/controllers/PlpLinksController.php:860
2108
- msgid "Time Period Redirects have been setup for this link but the current time is not within any of them currently."
2109
  msgstr ""
2110
 
2111
- #: pro/app/controllers/PlpKeywordsController.php:68
2112
- msgid "Pretty Link Post Build Index"
2113
  msgstr ""
2114
 
2115
- #: pro/app/controllers/PlpLinkCategoriesController.php:15
2116
- msgctxt "taxonomy general name"
2117
- msgid "Link Categories"
2118
  msgstr ""
2119
 
2120
- #: pro/app/controllers/PlpLinkCategoriesController.php:16
2121
- msgctxt "taxonomy singular name"
2122
- msgid "Link Category"
2123
  msgstr ""
2124
 
2125
- #: pro/app/controllers/PlpLinkCategoriesController.php:17
2126
- msgid "Search Link Categories"
 
2127
  msgstr ""
2128
 
2129
- #: pro/app/controllers/PlpLinkCategoriesController.php:18
2130
- msgid "All Link Categories"
2131
  msgstr ""
2132
 
2133
- #: pro/app/controllers/PlpLinkCategoriesController.php:19
2134
- msgid "Parent Link Category"
 
2135
  msgstr ""
2136
 
2137
- #: pro/app/controllers/PlpLinkCategoriesController.php:20
2138
- msgid "Parent Link Category:"
 
2139
  msgstr ""
2140
 
2141
- #: pro/app/controllers/PlpLinkCategoriesController.php:21
2142
- msgid "Edit Link Category"
 
2143
  msgstr ""
2144
 
2145
- #: pro/app/controllers/PlpLinkCategoriesController.php:22
2146
- msgid "Update Link Category"
 
2147
  msgstr ""
2148
 
2149
- #: pro/app/controllers/PlpLinkCategoriesController.php:23
2150
- msgid "Add New Link Category"
 
2151
  msgstr ""
2152
 
2153
- #: pro/app/controllers/PlpLinkCategoriesController.php:24
2154
- msgid "New Link Category Name"
 
2155
  msgstr ""
2156
 
2157
- #: pro/app/controllers/PlpLinkCategoriesController.php:25
2158
- #: app/controllers/PrliLinksController.php:465
2159
- #: app/controllers/PrliAppController.php:135
2160
- msgid "Categories"
2161
  msgstr ""
2162
 
2163
- #: pro/app/controllers/PlpPrettyBarController.php:50
2164
- msgid "Logo Image URL must be a correctly formatted URL"
 
2165
  msgstr ""
2166
 
2167
- #: pro/app/controllers/PlpPrettyBarController.php:54
2168
- msgid "Background Image URL must be a correctly formatted URL"
 
2169
  msgstr ""
2170
 
2171
- #: pro/app/controllers/PlpPrettyBarController.php:60
2172
- msgid "PrettyBar Background Color must be an actual RGB Value"
 
 
2173
  msgstr ""
2174
 
2175
- #: pro/app/controllers/PlpPrettyBarController.php:64
2176
- msgid "PrettyBar Text Color must be an actual RGB Value"
 
2177
  msgstr ""
2178
 
2179
- #: pro/app/controllers/PlpPrettyBarController.php:68
2180
- msgid "PrettyBar Link Color must be an actual RGB Value"
 
2181
  msgstr ""
2182
 
2183
- #: pro/app/controllers/PlpPrettyBarController.php:72
2184
- #: pro/app/controllers/PlpPrettyBarController.php:76
2185
- msgid "PrettyBar Hover Color must be an actual RGB Value"
 
2186
  msgstr ""
2187
 
2188
- #: pro/app/controllers/PlpPrettyBarController.php:80
2189
- msgid "PrettyBar Title Character Limit must not be blank"
 
2190
  msgstr ""
2191
 
2192
- #: pro/app/controllers/PlpPrettyBarController.php:84
2193
- msgid "PrettyBar Description Character Limit must not be blank"
 
 
2194
  msgstr ""
2195
 
2196
- #: pro/app/controllers/PlpPrettyBarController.php:88
2197
- msgid "PrettyBar Link Character Limit must not be blank"
 
2198
  msgstr ""
2199
 
2200
- #: pro/app/controllers/PlpPrettyBarController.php:92
2201
- msgid "PrettyBar Title Character Limit must be a number"
 
2202
  msgstr ""
2203
 
2204
- #: pro/app/controllers/PlpPrettyBarController.php:96
2205
- msgid "PrettyBar Description Character Limit must be a number"
 
 
2206
  msgstr ""
2207
 
2208
- #: pro/app/controllers/PlpPrettyBarController.php:100
2209
- msgid "PrettyBar Link Character Limit must be a number"
 
2210
  msgstr ""
2211
 
2212
- #: pro/app/controllers/PlpPostsController.php:50
2213
- msgid "Pretty Links Pro"
 
2214
  msgstr ""
2215
 
2216
- #: pro/app/controllers/PlpPostsController.php:54
2217
- msgid "Pretty Links Pro Options"
 
 
2218
  msgstr ""
2219
 
2220
- #: pro/app/controllers/PlpPostsController.php:139
2221
- #: pro/app/controllers/PlpPostsController.php:155
2222
- #: pro/app/controllers/PlpPostsController.php:237
2223
- msgid "Untitled"
2224
  msgstr ""
2225
 
2226
- #: pro/app/controllers/PlpReportsController.php:14
2227
- msgid "Pretty Links Pro | Reports"
 
2228
  msgstr ""
2229
 
2230
- #: pro/app/controllers/PlpReportsController.php:51
2231
- msgid "Create a custom link report and analyze your data."
 
2232
  msgstr ""
2233
 
2234
- #: pro/app/controllers/PlpReportsController.php:94
2235
- msgid "Your Pretty Link Report was Successfully Created"
 
2236
  msgstr ""
2237
 
2238
- #: pro/app/controllers/PlpReportsController.php:130
2239
- msgid "Your Pretty Link Report was Successfully Updated"
 
2240
  msgstr ""
2241
 
2242
- #: pro/app/controllers/PlpReportsController.php:139
2243
- msgid "Your Pretty Link Report was Successfully Deleted"
 
 
2244
  msgstr ""
2245
 
2246
- #: pro/app/controllers/PlpAppController.php:169
2247
- msgid "ERROR: Your Pretty Link was unable to be created"
 
2248
  msgstr ""
2249
 
2250
- #: pro/app/controllers/PlpAppController.php:173
2251
- msgid "Unauthorized"
 
2252
  msgstr ""
2253
 
2254
- #: pro/app/controllers/PlpPublicLinksController.php:37
2255
- #: app/controllers/PrliLinksController.php:796
2256
- msgid "Security check failed"
2257
  msgstr ""
2258
 
2259
- #: pro/app/controllers/PlpLinkTagsController.php:15
2260
- msgctxt "taxonomy general name"
2261
- msgid "Link Tags"
2262
  msgstr ""
2263
 
2264
- #: pro/app/controllers/PlpLinkTagsController.php:16
2265
- msgctxt "taxonomy singular name"
2266
- msgid "Link Tag"
2267
  msgstr ""
2268
 
2269
- #: pro/app/controllers/PlpLinkTagsController.php:17
2270
- msgid "Search Link Tags"
 
2271
  msgstr ""
2272
 
2273
- #: pro/app/controllers/PlpLinkTagsController.php:18
2274
- msgid "All Link Tags"
 
2275
  msgstr ""
2276
 
2277
- #: pro/app/controllers/PlpLinkTagsController.php:21
2278
- msgid "Edit Link Tag"
 
2279
  msgstr ""
2280
 
2281
- #: pro/app/controllers/PlpLinkTagsController.php:22
2282
- msgid "Update Link Tag"
 
 
2283
  msgstr ""
2284
 
2285
- #: pro/app/controllers/PlpLinkTagsController.php:23
2286
- msgid "Add New Link Tag"
 
 
 
2287
  msgstr ""
2288
 
2289
- #: pro/app/controllers/PlpLinkTagsController.php:24
2290
- msgid "New Link Tag Name"
 
 
2291
  msgstr ""
2292
 
2293
- #: pro/app/controllers/PlpLinkTagsController.php:25
2294
- msgid "Separate Link Tags with commas"
2295
  msgstr ""
2296
 
2297
- #: pro/app/controllers/PlpLinkTagsController.php:26
2298
- msgid "Add or remove Link Tags"
 
 
2299
  msgstr ""
2300
 
2301
- #: pro/app/controllers/PlpLinkTagsController.php:27
2302
- msgid "Choose from the most used Link Tags"
2303
  msgstr ""
2304
 
2305
- #: pro/app/controllers/PlpLinkTagsController.php:28
2306
- msgid "No Link Tags found."
2307
  msgstr ""
2308
 
2309
- #: pro/app/controllers/PlpLinkTagsController.php:29
2310
- #: app/controllers/PrliLinksController.php:466
2311
- #: app/controllers/PrliAppController.php:143
2312
- msgid "Tags"
2313
  msgstr ""
2314
 
2315
- #: pro/app/controllers/PlpImportExportController.php:14
2316
- msgid "Pretty Links Pro | Import / Export"
2317
  msgstr ""
2318
 
2319
- #: pro/app/controllers/PlpImportExportController.php:15
2320
- #: app/controllers/PrliUpdateController.php:510
2321
- #: app/controllers/PrliAppController.php:158
2322
- #: app/controllers/PrliAppController.php:159
2323
- msgid "Import / Export"
 
2324
  msgstr ""
2325
 
2326
- #: pro/app/controllers/PlpImportExportController.php:34
2327
- msgid "Import file not found."
 
 
2328
  msgstr ""
2329
 
2330
- #: pro/app/controllers/PlpImportExportController.php:50
2331
- msgid "Import file could not be opened."
 
2332
  msgstr ""
2333
 
2334
- #: pro/app/controllers/PlpOptionsController.php:98
2335
- msgid "Keywords Per Page is required"
 
2336
  msgstr ""
2337
 
2338
- #: pro/app/controllers/PlpOptionsController.php:102
2339
- msgid "Keyword Links Per Page is required"
 
2340
  msgstr ""
2341
 
2342
- #: pro/app/controllers/PlpOptionsController.php:107
2343
- msgid "You need to enter a valid Pretty Link Base URL now that you have selected \"Use an alternate base url for your Pretty Links\""
 
2344
  msgstr ""
2345
 
2346
- #: pro/app/controllers/PlpOptionsController.php:112
2347
- msgid "You need to enter a valid Public Link Display URL now that you have selected \"Use a custom public link display page\""
 
2348
  msgstr ""
2349
 
2350
- #: pro/app/controllers/PlpOptionsController.php:118
2351
- msgid "Pretty Bar Attribution URL must be a correctly formatted URL"
 
2352
  msgstr ""
2353
 
2354
- #: pro/app/widgets/PlpPublicLinksWidget.php:11
2355
- msgid "Create a Short URL"
 
2356
  msgstr ""
2357
 
2358
- #: pro/app/widgets/PlpPublicLinksWidget.php:13
2359
- msgid "Displays a form to create a Pretty Link."
 
2360
  msgstr ""
2361
 
2362
- #: pro/app/widgets/PlpPublicLinksWidget.php:60
2363
- msgid "Enter a URL:&nbsp;"
 
2364
  msgstr ""
2365
 
2366
- #: pro/app/widgets/PlpPublicLinksWidget.php:64
2367
- msgid "Label Text:"
 
2368
  msgstr ""
2369
 
2370
- #: pro/app/widgets/PlpPublicLinksWidget.php:65
2371
- msgid "Button Text:"
 
2372
  msgstr ""
2373
 
2374
- #: pro/app/widgets/PlpPublicLinksWidget.php:65
2375
- msgid "if left blank, no button will display"
 
 
2376
  msgstr ""
2377
 
2378
- #: pro/app/widgets/PlpPublicLinksWidget.php:71
2379
- msgid "Permanent/301"
 
2380
  msgstr ""
2381
 
2382
- #: pro/app/widgets/PlpPublicLinksWidget.php:72
2383
- msgid "Temporary/302"
 
2384
  msgstr ""
2385
 
2386
- #: pro/app/widgets/PlpPublicLinksWidget.php:73
2387
- msgid "Temporary/307"
 
 
2388
  msgstr ""
2389
 
2390
- #: pro/app/widgets/PlpPublicLinksWidget.php:74
2391
- msgid "PrettyBar"
 
2392
  msgstr ""
2393
 
2394
- #: pro/app/widgets/PlpPublicLinksWidget.php:80
2395
- msgid "Tracking Enabled:"
 
2396
  msgstr ""
2397
 
2398
- #: pro/i18n/countries.php:5
2399
- msgid "Afghanistan"
 
 
2400
  msgstr ""
2401
 
2402
- #: pro/i18n/countries.php:6
2403
- msgid "&#197;land Islands"
 
2404
  msgstr ""
2405
 
2406
- #: pro/i18n/countries.php:7
2407
- msgid "Albania"
 
2408
  msgstr ""
2409
 
2410
- #: pro/i18n/countries.php:8
2411
- msgid "Algeria"
 
 
2412
  msgstr ""
2413
 
2414
- #: pro/i18n/countries.php:9
2415
- msgid "Andorra"
 
2416
  msgstr ""
2417
 
2418
- #: pro/i18n/countries.php:10
2419
- msgid "Angola"
 
2420
  msgstr ""
2421
 
2422
- #: pro/i18n/countries.php:11
2423
- msgid "Anguilla"
 
 
2424
  msgstr ""
2425
 
2426
- #: pro/i18n/countries.php:12
2427
- msgid "Antarctica"
 
2428
  msgstr ""
2429
 
2430
- #: pro/i18n/countries.php:13
2431
- msgid "Antigua and Barbuda"
 
2432
  msgstr ""
2433
 
2434
- #: pro/i18n/countries.php:14
2435
- msgid "Argentina"
 
 
2436
  msgstr ""
2437
 
2438
- #: pro/i18n/countries.php:15
2439
- msgid "Armenia"
 
2440
  msgstr ""
2441
 
2442
- #: pro/i18n/countries.php:16
2443
- msgid "Aruba"
 
2444
  msgstr ""
2445
 
2446
- #: pro/i18n/countries.php:17
2447
- msgid "Australia"
 
 
2448
  msgstr ""
2449
 
2450
- #: pro/i18n/countries.php:18
2451
- msgid "Austria"
 
2452
  msgstr ""
2453
 
2454
- #: pro/i18n/countries.php:19
2455
- msgid "Azerbaijan"
 
2456
  msgstr ""
2457
 
2458
- #: pro/i18n/countries.php:20
2459
- msgid "Bahamas"
 
2460
  msgstr ""
2461
 
2462
- #: pro/i18n/countries.php:21
2463
- msgid "Bahrain"
 
2464
  msgstr ""
2465
 
2466
- #: pro/i18n/countries.php:22
2467
- msgid "Bangladesh"
 
2468
  msgstr ""
2469
 
2470
- #: pro/i18n/countries.php:23
2471
- msgid "Barbados"
 
2472
  msgstr ""
2473
 
2474
- #: pro/i18n/countries.php:24
2475
- msgid "Belarus"
 
2476
  msgstr ""
2477
 
2478
- #: pro/i18n/countries.php:25
2479
- msgid "Belgium"
 
2480
  msgstr ""
2481
 
2482
- #: pro/i18n/countries.php:26
2483
- msgid "Belau"
 
2484
  msgstr ""
2485
 
2486
- #: pro/i18n/countries.php:27
2487
- msgid "Belize"
 
2488
  msgstr ""
2489
 
2490
- #: pro/i18n/countries.php:28
2491
- msgid "Benin"
 
2492
  msgstr ""
2493
 
2494
- #: pro/i18n/countries.php:29
2495
- msgid "Bermuda"
 
2496
  msgstr ""
2497
 
2498
- #: pro/i18n/countries.php:30
2499
- msgid "Bhutan"
 
 
 
2500
  msgstr ""
2501
 
2502
- #: pro/i18n/countries.php:31
2503
- msgid "Bolivia"
 
 
2504
  msgstr ""
2505
 
2506
- #: pro/i18n/countries.php:32
2507
- msgid "Bonaire, Saint Eustatius and Saba"
 
2508
  msgstr ""
2509
 
2510
- #: pro/i18n/countries.php:33
2511
- msgid "Bosnia and Herzegovina"
 
2512
  msgstr ""
2513
 
2514
- #: pro/i18n/countries.php:34
2515
- msgid "Botswana"
 
 
2516
  msgstr ""
2517
 
2518
- #: pro/i18n/countries.php:35
2519
- msgid "Bouvet Island"
 
 
2520
  msgstr ""
2521
 
2522
- #: pro/i18n/countries.php:36
2523
- msgid "Brazil"
 
2524
  msgstr ""
2525
 
2526
- #: pro/i18n/countries.php:37
2527
- msgid "British Indian Ocean Territory"
 
2528
  msgstr ""
2529
 
2530
- #: pro/i18n/countries.php:38
2531
- msgid "British Virgin Islands"
 
 
2532
  msgstr ""
2533
 
2534
- #: pro/i18n/countries.php:39
2535
- msgid "Brunei"
 
2536
  msgstr ""
2537
 
2538
- #: pro/i18n/countries.php:40
2539
- msgid "Bulgaria"
 
2540
  msgstr ""
2541
 
2542
- #: pro/i18n/countries.php:41
2543
- msgid "Burkina Faso"
 
 
2544
  msgstr ""
2545
 
2546
- #: pro/i18n/countries.php:42
2547
- msgid "Burundi"
 
 
2548
  msgstr ""
2549
 
2550
- #: pro/i18n/countries.php:43
2551
- msgid "Cambodia"
 
 
2552
  msgstr ""
2553
 
2554
- #: pro/i18n/countries.php:44
2555
- msgid "Cameroon"
 
 
2556
  msgstr ""
2557
 
2558
- #: pro/i18n/countries.php:45
2559
- msgid "Canada"
 
2560
  msgstr ""
2561
 
2562
- #: pro/i18n/countries.php:46
2563
- msgid "Cape Verde"
 
 
2564
  msgstr ""
2565
 
2566
- #: pro/i18n/countries.php:47
2567
- msgid "Cayman Islands"
 
2568
  msgstr ""
2569
 
2570
- #: pro/i18n/countries.php:48
2571
- msgid "Central African Republic"
 
2572
  msgstr ""
2573
 
2574
- #: pro/i18n/countries.php:49
2575
- msgid "Chad"
 
2576
  msgstr ""
2577
 
2578
- #: pro/i18n/countries.php:50
2579
- msgid "Chile"
 
2580
  msgstr ""
2581
 
2582
- #: pro/i18n/countries.php:51
2583
- msgid "China"
2584
  msgstr ""
2585
 
2586
- #: pro/i18n/countries.php:52
2587
- msgid "Christmas Island"
 
 
2588
  msgstr ""
2589
 
2590
- #: pro/i18n/countries.php:53
2591
- msgid "Cocos/Keeling Islands"
2592
  msgstr ""
2593
 
2594
- #: pro/i18n/countries.php:54
2595
- msgid "Colombia"
2596
  msgstr ""
2597
 
2598
- #: pro/i18n/countries.php:55
2599
- msgid "Comoros"
2600
  msgstr ""
2601
 
2602
- #: pro/i18n/countries.php:56
2603
- msgid "Congo (Brazzaville)"
2604
  msgstr ""
2605
 
2606
- #: pro/i18n/countries.php:57
2607
- msgid "Congo (Kinshasa)"
2608
  msgstr ""
2609
 
2610
- #: pro/i18n/countries.php:58
2611
- msgid "Cook Islands"
2612
  msgstr ""
2613
 
2614
- #: pro/i18n/countries.php:59
2615
- msgid "Costa Rica"
2616
  msgstr ""
2617
 
2618
- #: pro/i18n/countries.php:60
2619
- msgid "Croatia"
2620
  msgstr ""
2621
 
2622
- #: pro/i18n/countries.php:61
2623
- msgid "Cuba"
2624
  msgstr ""
2625
 
2626
- #: pro/i18n/countries.php:62
2627
- msgid "Cura&Ccedil;ao"
 
 
2628
  msgstr ""
2629
 
2630
- #: pro/i18n/countries.php:63
2631
- msgid "Cyprus"
2632
  msgstr ""
2633
 
2634
- #: pro/i18n/countries.php:64
2635
- msgid "Czech Republic"
2636
  msgstr ""
2637
 
2638
- #: pro/i18n/countries.php:65
2639
- msgid "Denmark"
2640
  msgstr ""
2641
 
2642
- #: pro/i18n/countries.php:66
2643
- msgid "Djibouti"
 
2644
  msgstr ""
2645
 
2646
- #: pro/i18n/countries.php:67
2647
- msgid "Dominica"
2648
  msgstr ""
2649
 
2650
- #: pro/i18n/countries.php:68
2651
- msgid "Dominican Republic"
 
 
 
 
 
 
 
2652
  msgstr ""
2653
 
2654
- #: pro/i18n/countries.php:69
2655
- msgid "Ecuador"
 
2656
  msgstr ""
2657
 
2658
- #: pro/i18n/countries.php:70
2659
- msgid "Egypt"
 
 
2660
  msgstr ""
2661
 
2662
- #: pro/i18n/countries.php:71
2663
- msgid "El Salvador"
 
 
2664
  msgstr ""
2665
 
2666
- #: pro/i18n/countries.php:72
2667
- msgid "Equatorial Guinea"
 
 
2668
  msgstr ""
2669
 
2670
- #: pro/i18n/countries.php:73
2671
- msgid "Eritrea"
2672
  msgstr ""
2673
 
2674
- #: pro/i18n/countries.php:74
2675
- msgid "Estonia"
 
2676
  msgstr ""
2677
 
2678
- #: pro/i18n/countries.php:75
2679
- msgid "Ethiopia"
2680
  msgstr ""
2681
 
2682
- #: pro/i18n/countries.php:76
2683
- msgid "Falkland Islands"
2684
  msgstr ""
2685
 
2686
- #: pro/i18n/countries.php:77
2687
- msgid "Faroe Islands"
2688
  msgstr ""
2689
 
2690
- #: pro/i18n/countries.php:78
2691
- msgid "Fiji"
2692
  msgstr ""
2693
 
2694
- #: pro/i18n/countries.php:79
2695
- msgid "Finland"
 
2696
  msgstr ""
2697
 
2698
- #: pro/i18n/countries.php:80
2699
- msgid "France"
 
2700
  msgstr ""
2701
 
2702
- #: pro/i18n/countries.php:81
2703
- msgid "French Guiana"
 
 
2704
  msgstr ""
2705
 
2706
- #: pro/i18n/countries.php:82
2707
- msgid "French Polynesia"
2708
  msgstr ""
2709
 
2710
- #: pro/i18n/countries.php:83
2711
- msgid "French Southern Territories"
 
2712
  msgstr ""
2713
 
2714
- #: pro/i18n/countries.php:84
2715
- msgid "Gabon"
2716
  msgstr ""
2717
 
2718
- #: pro/i18n/countries.php:85
2719
- msgid "Gambia"
 
2720
  msgstr ""
2721
 
2722
- #: pro/i18n/countries.php:86
2723
- msgid "Georgia"
2724
  msgstr ""
2725
-
2726
- #: pro/i18n/countries.php:87
2727
- msgid "Germany"
2728
  msgstr ""
2729
 
2730
- #: pro/i18n/countries.php:88
2731
- msgid "Ghana"
2732
  msgstr ""
2733
 
2734
- #: pro/i18n/countries.php:89
2735
- msgid "Gibraltar"
2736
  msgstr ""
2737
 
2738
- #: pro/i18n/countries.php:90
2739
- msgid "Greece"
2740
  msgstr ""
2741
 
2742
- #: pro/i18n/countries.php:91
2743
- msgid "Greenland"
2744
  msgstr ""
2745
 
2746
- #: pro/i18n/countries.php:92
2747
- msgid "Grenada"
 
2748
  msgstr ""
2749
 
2750
- #: pro/i18n/countries.php:93
2751
- msgid "Guadeloupe"
2752
  msgstr ""
2753
 
2754
- #: pro/i18n/countries.php:94
2755
- msgid "Guatemala"
2756
  msgstr ""
2757
 
2758
- #: pro/i18n/countries.php:95
2759
- msgid "Guernsey"
2760
  msgstr ""
2761
 
2762
- #: pro/i18n/countries.php:96
2763
- msgid "Guinea"
2764
  msgstr ""
2765
 
2766
- #: pro/i18n/countries.php:97
2767
- msgid "Guinea-Bissau"
2768
  msgstr ""
2769
 
2770
- #: pro/i18n/countries.php:98
2771
- msgid "Guyana"
2772
  msgstr ""
2773
 
2774
- #: pro/i18n/countries.php:99
2775
- msgid "Haiti"
2776
  msgstr ""
2777
 
2778
- #: pro/i18n/countries.php:100
2779
- msgid "Heard Island and McDonald Islands"
2780
  msgstr ""
2781
 
2782
- #: pro/i18n/countries.php:101
2783
- msgid "Honduras"
2784
  msgstr ""
2785
 
2786
- #: pro/i18n/countries.php:102
2787
- msgid "Hong Kong"
2788
  msgstr ""
2789
 
2790
- #: pro/i18n/countries.php:103
2791
- msgid "Hungary"
2792
  msgstr ""
2793
 
2794
- #: pro/i18n/countries.php:104
2795
- msgid "Iceland"
2796
  msgstr ""
2797
 
2798
- #: pro/i18n/countries.php:105
2799
- msgid "India"
2800
  msgstr ""
2801
 
2802
- #: pro/i18n/countries.php:106
2803
- msgid "Indonesia"
2804
  msgstr ""
2805
 
2806
- #: pro/i18n/countries.php:107
2807
- msgid "Iran"
2808
  msgstr ""
2809
 
2810
- #: pro/i18n/countries.php:108
2811
- msgid "Iraq"
2812
  msgstr ""
2813
 
2814
- #: pro/i18n/countries.php:109
2815
- msgid "Republic of Ireland"
2816
  msgstr ""
2817
 
2818
- #: pro/i18n/countries.php:110
2819
- msgid "Isle of Man"
2820
  msgstr ""
2821
 
2822
- #: pro/i18n/countries.php:111
2823
- msgid "Israel"
2824
  msgstr ""
2825
 
2826
- #: pro/i18n/countries.php:112
2827
- msgid "Italy"
2828
  msgstr ""
2829
 
2830
- #: pro/i18n/countries.php:113
2831
- msgid "Ivory Coast"
 
2832
  msgstr ""
2833
 
2834
- #: pro/i18n/countries.php:114
2835
- msgid "Jamaica"
 
2836
  msgstr ""
2837
 
2838
- #: pro/i18n/countries.php:115
2839
- msgid "Japan"
2840
  msgstr ""
2841
 
2842
- #: pro/i18n/countries.php:116
2843
- msgid "Jersey"
2844
  msgstr ""
2845
 
2846
- #: pro/i18n/countries.php:117
2847
- msgid "Jordan"
2848
  msgstr ""
2849
 
2850
- #: pro/i18n/countries.php:118
2851
- msgid "Kazakhstan"
2852
  msgstr ""
2853
 
2854
- #: pro/i18n/countries.php:119
2855
- msgid "Kenya"
2856
  msgstr ""
2857
 
2858
- #: pro/i18n/countries.php:120
2859
- msgid "Kiribati"
2860
  msgstr ""
2861
 
2862
- #: pro/i18n/countries.php:121
2863
- msgid "Kuwait"
2864
  msgstr ""
2865
 
2866
- #: pro/i18n/countries.php:122
2867
- msgid "Kyrgyzstan"
2868
  msgstr ""
2869
 
2870
- #: pro/i18n/countries.php:123
2871
- msgid "Laos"
2872
  msgstr ""
2873
 
2874
- #: pro/i18n/countries.php:124
2875
- msgid "Latvia"
2876
  msgstr ""
2877
 
2878
- #: pro/i18n/countries.php:125
2879
- msgid "Lebanon"
2880
  msgstr ""
2881
 
2882
- #: pro/i18n/countries.php:126
2883
- msgid "Lesotho"
2884
  msgstr ""
2885
 
2886
- #: pro/i18n/countries.php:127
2887
- msgid "Liberia"
2888
  msgstr ""
2889
 
2890
- #: pro/i18n/countries.php:128
2891
- msgid "Libya"
2892
  msgstr ""
2893
 
2894
- #: pro/i18n/countries.php:129
2895
- msgid "Liechtenstein"
2896
  msgstr ""
2897
 
2898
- #: pro/i18n/countries.php:130
2899
- msgid "Lithuania"
2900
  msgstr ""
2901
 
2902
- #: pro/i18n/countries.php:131
2903
- msgid "Luxembourg"
2904
  msgstr ""
2905
 
2906
- #: pro/i18n/countries.php:132
2907
- msgid "Macao S.A.R., China"
2908
  msgstr ""
2909
 
2910
- #: pro/i18n/countries.php:133
2911
- msgid "Macedonia"
2912
  msgstr ""
2913
 
2914
- #: pro/i18n/countries.php:134
2915
- msgid "Madagascar"
2916
  msgstr ""
2917
 
2918
- #: pro/i18n/countries.php:135
2919
- msgid "Malawi"
2920
  msgstr ""
2921
 
2922
- #: pro/i18n/countries.php:136
2923
- msgid "Malaysia"
2924
  msgstr ""
2925
 
2926
- #: pro/i18n/countries.php:137
2927
- msgid "Maldives"
2928
  msgstr ""
2929
 
2930
- #: pro/i18n/countries.php:138
2931
- msgid "Mali"
2932
  msgstr ""
2933
 
2934
- #: pro/i18n/countries.php:139
2935
- msgid "Malta"
2936
  msgstr ""
2937
 
2938
- #: pro/i18n/countries.php:140
2939
- msgid "Marshall Islands"
2940
  msgstr ""
2941
 
2942
- #: pro/i18n/countries.php:141
2943
- msgid "Martinique"
2944
  msgstr ""
2945
 
2946
- #: pro/i18n/countries.php:142
2947
- msgid "Mauritania"
 
2948
  msgstr ""
2949
 
2950
- #: pro/i18n/countries.php:143
2951
- msgid "Mauritius"
2952
  msgstr ""
2953
 
2954
- #: pro/i18n/countries.php:144
2955
- msgid "Mayotte"
 
2956
  msgstr ""
2957
 
2958
- #: pro/i18n/countries.php:145
2959
- msgid "Mexico"
2960
  msgstr ""
2961
 
2962
- #: pro/i18n/countries.php:146
2963
- msgid "Micronesia"
2964
  msgstr ""
2965
 
2966
- #: pro/i18n/countries.php:147
2967
- msgid "Moldova"
2968
  msgstr ""
2969
 
2970
- #: pro/i18n/countries.php:148
2971
- msgid "Monaco"
2972
  msgstr ""
2973
 
2974
- #: pro/i18n/countries.php:149
2975
- msgid "Mongolia"
2976
  msgstr ""
2977
 
2978
- #: pro/i18n/countries.php:150
2979
- msgid "Montenegro"
2980
  msgstr ""
2981
 
2982
- #: pro/i18n/countries.php:151
2983
- msgid "Montserrat"
2984
  msgstr ""
2985
 
2986
- #: pro/i18n/countries.php:152
2987
- msgid "Morocco"
2988
  msgstr ""
2989
 
2990
- #: pro/i18n/countries.php:153
2991
- msgid "Mozambique"
2992
  msgstr ""
2993
 
2994
- #: pro/i18n/countries.php:154
2995
- msgid "Myanmar"
2996
  msgstr ""
2997
 
2998
- #: pro/i18n/countries.php:155
2999
- msgid "Namibia"
3000
  msgstr ""
3001
 
3002
- #: pro/i18n/countries.php:156
3003
- msgid "Nauru"
3004
  msgstr ""
3005
 
3006
- #: pro/i18n/countries.php:157
3007
- msgid "Nepal"
 
3008
  msgstr ""
3009
 
3010
- #: pro/i18n/countries.php:158
3011
- msgid "Netherlands"
 
3012
  msgstr ""
3013
 
3014
- #: pro/i18n/countries.php:159
3015
- msgid "Netherlands Antilles"
3016
  msgstr ""
3017
 
3018
- #: pro/i18n/countries.php:160
3019
- msgid "New Caledonia"
3020
  msgstr ""
3021
 
3022
- #: pro/i18n/countries.php:161
3023
- msgid "New Zealand"
3024
  msgstr ""
3025
 
3026
- #: pro/i18n/countries.php:162
3027
- msgid "Nicaragua"
3028
  msgstr ""
3029
 
3030
- #: pro/i18n/countries.php:163
3031
- msgid "Niger"
3032
  msgstr ""
3033
 
3034
- #: pro/i18n/countries.php:164
3035
- msgid "Nigeria"
3036
  msgstr ""
3037
 
3038
- #: pro/i18n/countries.php:165
3039
- msgid "Niue"
3040
  msgstr ""
3041
 
3042
- #: pro/i18n/countries.php:166
3043
- msgid "Norfolk Island"
3044
  msgstr ""
3045
 
3046
- #: pro/i18n/countries.php:167
3047
- msgid "North Korea"
3048
  msgstr ""
3049
 
3050
- #: pro/i18n/countries.php:168
3051
- msgid "Norway"
3052
  msgstr ""
3053
 
3054
- #: pro/i18n/countries.php:169
3055
- msgid "Oman"
3056
  msgstr ""
3057
 
3058
- #: pro/i18n/countries.php:170
3059
- msgid "Pakistan"
3060
  msgstr ""
3061
 
3062
- #: pro/i18n/countries.php:171
3063
- msgid "Palestinian Territory"
3064
  msgstr ""
3065
 
3066
- #: pro/i18n/countries.php:172
3067
- msgid "Panama"
3068
  msgstr ""
3069
 
3070
- #: pro/i18n/countries.php:173
3071
- msgid "Papua New Guinea"
3072
  msgstr ""
3073
 
3074
- #: pro/i18n/countries.php:174
3075
- msgid "Paraguay"
3076
  msgstr ""
3077
 
3078
- #: pro/i18n/countries.php:175
3079
- msgid "Peru"
3080
  msgstr ""
3081
 
3082
- #: pro/i18n/countries.php:176
3083
- msgid "Philippines"
 
 
3084
  msgstr ""
3085
 
3086
- #: pro/i18n/countries.php:177
3087
- msgid "Pitcairn"
3088
  msgstr ""
3089
 
3090
- #: pro/i18n/countries.php:178
3091
- msgid "Poland"
3092
  msgstr ""
3093
 
3094
- #: pro/i18n/countries.php:179
3095
- msgid "Portugal"
3096
  msgstr ""
3097
 
3098
- #: pro/i18n/countries.php:180
3099
- msgid "Qatar"
3100
  msgstr ""
3101
 
3102
- #: pro/i18n/countries.php:181
3103
- msgid "Reunion"
3104
  msgstr ""
3105
 
3106
- #: pro/i18n/countries.php:182
3107
- msgid "Romania"
 
3108
  msgstr ""
3109
 
3110
- #: pro/i18n/countries.php:183
3111
- msgid "Russia"
3112
  msgstr ""
3113
 
3114
- #: pro/i18n/countries.php:184
3115
- msgid "Rwanda"
3116
  msgstr ""
3117
 
3118
- #: pro/i18n/countries.php:185
3119
- msgid "Saint Barth&eacute;lemy"
3120
  msgstr ""
3121
 
3122
- #: pro/i18n/countries.php:186
3123
- msgid "Saint Helena"
3124
  msgstr ""
3125
 
3126
- #: pro/i18n/countries.php:187
3127
- msgid "Saint Kitts and Nevis"
3128
  msgstr ""
3129
 
3130
- #: pro/i18n/countries.php:188
3131
- msgid "Saint Lucia"
3132
  msgstr ""
3133
 
3134
- #: pro/i18n/countries.php:189
3135
- msgid "Saint Martin (French part)"
 
3136
  msgstr ""
3137
 
3138
- #: pro/i18n/countries.php:190
3139
- msgid "Saint Martin (Dutch part)"
 
 
3140
  msgstr ""
3141
 
3142
- #: pro/i18n/countries.php:191
3143
- msgid "Saint Pierre and Miquelon"
3144
  msgstr ""
3145
 
3146
- #: pro/i18n/countries.php:192
3147
- msgid "Saint Vincent and the Grenadines"
3148
  msgstr ""
3149
 
3150
- #: pro/i18n/countries.php:193
3151
- msgid "San Marino"
3152
  msgstr ""
3153
 
3154
- #: pro/i18n/countries.php:194
3155
- msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
3156
  msgstr ""
3157
 
3158
- #: pro/i18n/countries.php:195
3159
- msgid "Saudi Arabia"
3160
  msgstr ""
3161
 
3162
- #: pro/i18n/countries.php:196
3163
- msgid "Senegal"
 
3164
  msgstr ""
3165
 
3166
- #: pro/i18n/countries.php:197
3167
- msgid "Serbia"
3168
  msgstr ""
3169
 
3170
- #: pro/i18n/countries.php:198
3171
- msgid "Seychelles"
3172
  msgstr ""
3173
 
3174
- #: pro/i18n/countries.php:199
3175
- msgid "Sierra Leone"
3176
  msgstr ""
3177
 
3178
- #: pro/i18n/countries.php:200
3179
- msgid "Singapore"
 
 
 
 
3180
  msgstr ""
3181
 
3182
- #: pro/i18n/countries.php:201
3183
- msgid "Slovakia"
3184
  msgstr ""
3185
 
3186
- #: pro/i18n/countries.php:202
3187
- msgid "Slovenia"
3188
  msgstr ""
3189
 
3190
- #: pro/i18n/countries.php:203
3191
- msgid "Solomon Islands"
3192
  msgstr ""
3193
 
3194
- #: pro/i18n/countries.php:204
3195
- msgid "Somalia"
3196
  msgstr ""
3197
 
3198
- #: pro/i18n/countries.php:205
3199
- msgid "South Africa"
3200
  msgstr ""
3201
 
3202
- #: pro/i18n/countries.php:206
3203
- msgid "South Georgia/Sandwich Islands"
3204
  msgstr ""
3205
 
3206
- #: pro/i18n/countries.php:207
3207
- msgid "South Korea"
3208
  msgstr ""
3209
 
3210
- #: pro/i18n/countries.php:208
3211
- msgid "South Sudan"
3212
  msgstr ""
3213
 
3214
- #: pro/i18n/countries.php:209
3215
- msgid "Spain"
3216
  msgstr ""
3217
-
3218
- #: pro/i18n/countries.php:210
3219
- msgid "Sri Lanka"
3220
  msgstr ""
3221
 
3222
- #: pro/i18n/countries.php:211
3223
- msgid "Sudan"
3224
  msgstr ""
3225
 
3226
- #: pro/i18n/countries.php:212
3227
- msgid "Suriname"
3228
  msgstr ""
3229
 
3230
- #: pro/i18n/countries.php:213
3231
- msgid "Svalbard and Jan Mayen"
3232
  msgstr ""
3233
 
3234
- #: pro/i18n/countries.php:214
3235
- msgid "Swaziland"
3236
  msgstr ""
3237
 
3238
- #: pro/i18n/countries.php:215
3239
- msgid "Sweden"
3240
  msgstr ""
3241
 
3242
- #: pro/i18n/countries.php:216
3243
- msgid "Switzerland"
3244
  msgstr ""
3245
 
3246
- #: pro/i18n/countries.php:217
3247
- msgid "Syria"
3248
  msgstr ""
3249
 
3250
- #: pro/i18n/countries.php:218
3251
- msgid "Taiwan"
3252
  msgstr ""
3253
 
3254
- #: pro/i18n/countries.php:219
3255
- msgid "Tajikistan"
3256
  msgstr ""
3257
 
3258
- #: pro/i18n/countries.php:220
3259
- msgid "Tanzania"
 
 
 
 
 
3260
  msgstr ""
3261
 
3262
- #: pro/i18n/countries.php:221
3263
- msgid "Thailand"
3264
  msgstr ""
3265
 
3266
- #: pro/i18n/countries.php:222
3267
- msgid "Timor-Leste"
3268
  msgstr ""
3269
 
3270
- #: pro/i18n/countries.php:223
3271
- msgid "Togo"
3272
  msgstr ""
3273
 
3274
- #: pro/i18n/countries.php:224
3275
- msgid "Tokelau"
 
3276
  msgstr ""
3277
 
3278
- #: pro/i18n/countries.php:225
3279
- msgid "Tonga"
3280
  msgstr ""
3281
 
3282
- #: pro/i18n/countries.php:226
3283
- msgid "Trinidad and Tobago"
3284
  msgstr ""
3285
 
3286
- #: pro/i18n/countries.php:227
3287
- msgid "Tunisia"
 
3288
  msgstr ""
3289
 
3290
- #: pro/i18n/countries.php:228
3291
- msgid "Turkey"
3292
  msgstr ""
3293
 
3294
- #: pro/i18n/countries.php:229
3295
- msgid "Turkmenistan"
3296
  msgstr ""
3297
 
3298
- #: pro/i18n/countries.php:230
3299
- msgid "Turks and Caicos Islands"
3300
  msgstr ""
3301
 
3302
- #: pro/i18n/countries.php:231
3303
- msgid "Tuvalu"
3304
  msgstr ""
3305
 
3306
- #: pro/i18n/countries.php:232
3307
- msgid "Uganda"
3308
  msgstr ""
3309
 
3310
- #: pro/i18n/countries.php:233
3311
- msgid "Ukraine"
3312
  msgstr ""
3313
 
3314
- #: pro/i18n/countries.php:234
3315
- msgid "United Arab Emirates"
3316
  msgstr ""
3317
 
3318
- #: pro/i18n/countries.php:235
3319
- msgid "United Kingdom (UK)"
3320
  msgstr ""
3321
 
3322
- #: pro/i18n/countries.php:236
3323
- msgid "United States"
3324
  msgstr ""
3325
 
3326
- #: pro/i18n/countries.php:237
3327
- msgid "Uruguay"
3328
  msgstr ""
3329
 
3330
- #: pro/i18n/countries.php:238
3331
- msgid "Uzbekistan"
3332
  msgstr ""
3333
 
3334
- #: pro/i18n/countries.php:239
3335
- msgid "Vanuatu"
3336
  msgstr ""
3337
 
3338
- #: pro/i18n/countries.php:240
3339
- msgid "Vatican"
3340
  msgstr ""
3341
 
3342
- #: pro/i18n/countries.php:241
3343
- msgid "Venezuela"
3344
  msgstr ""
3345
 
3346
- #: pro/i18n/countries.php:242
3347
- msgid "Vietnam"
3348
  msgstr ""
3349
 
3350
- #: pro/i18n/countries.php:243
3351
- msgid "Wallis and Futuna"
3352
  msgstr ""
3353
 
3354
- #: pro/i18n/countries.php:244
3355
- msgid "Western Sahara"
3356
  msgstr ""
3357
 
3358
- #: pro/i18n/countries.php:245
3359
- msgid "Western Samoa"
3360
  msgstr ""
3361
 
3362
- #: pro/i18n/countries.php:246
3363
- msgid "Yemen"
3364
  msgstr ""
3365
 
3366
- #: pro/i18n/countries.php:247
3367
- msgid "Zambia"
 
3368
  msgstr ""
3369
 
3370
- #: pro/i18n/countries.php:248
3371
- msgid "Zimbabwe"
3372
  msgstr ""
3373
 
3374
- #: app/helpers/PrliAppHelper.php:20
3375
- #: app/views/links/form.php:30
3376
- #: app/controllers/PrliLinksController.php:479
3377
- #: app/controllers/PrliLinksController.php:485
3378
- #: app/controllers/PrliLinksController.php:491
3379
- msgid "Pro"
3380
  msgstr ""
3381
 
3382
- #: app/helpers/PrliAppHelper.php:21
3383
- msgid "Upgrade to Pro to unlock this feature"
3384
  msgstr ""
3385
 
3386
- #: app/helpers/PrliLinksHelper.php:14
3387
- #: app/views/links/form_basic.php:15
3388
- #: app/views/shared/tinymce_form_popup.php:32
3389
- msgid "307 (Temporary)"
3390
  msgstr ""
3391
 
3392
- #: app/helpers/PrliLinksHelper.php:15
3393
- #: app/views/links/form_basic.php:16
3394
- #: app/views/shared/tinymce_form_popup.php:33
3395
- msgid "302 (Temporary)"
3396
  msgstr ""
3397
 
3398
- #: app/helpers/PrliLinksHelper.php:16
3399
- #: app/views/links/form_basic.php:17
3400
- #: app/views/shared/tinymce_form_popup.php:34
3401
- msgid "301 (Permanent)"
3402
  msgstr ""
3403
 
3404
- #: app/helpers/PrliLinksHelper.php:27
3405
- msgid "PrettyBar Redirection"
 
3406
  msgstr ""
3407
 
3408
- #: app/helpers/PrliLinksHelper.php:30
3409
- msgid "Cloaked Redirection"
 
3410
  msgstr ""
3411
 
3412
- #: app/helpers/PrliLinksHelper.php:33
3413
- msgid "Pixel Tracking Redirection"
3414
  msgstr ""
3415
 
3416
- #: app/helpers/PrliLinksHelper.php:36
3417
- msgid "Meta Refresh Redirection"
3418
  msgstr ""
3419
 
3420
- #: app/helpers/PrliLinksHelper.php:39
3421
- msgid "Javascript Redirection"
3422
  msgstr ""
3423
 
3424
- #: app/helpers/PrliLinksHelper.php:42
3425
- msgid "Temporary (307) Redirection"
 
3426
  msgstr ""
3427
 
3428
- #: app/helpers/PrliLinksHelper.php:45
3429
- msgid "Temporary (302) Redirection"
 
3430
  msgstr ""
3431
 
3432
- #: app/helpers/PrliLinksHelper.php:48
3433
- msgid "Permanent (301) Redirection"
 
3434
  msgstr ""
3435
 
3436
- #: app/helpers/PrliLinksHelper.php:52
3437
- msgid "Nofollow Enabled"
3438
  msgstr ""
3439
 
3440
- #: app/helpers/PrliLinksHelper.php:56
3441
- msgid "Sponsored Enabled"
3442
  msgstr ""
3443
 
3444
- #: app/helpers/PrliLinksHelper.php:60
3445
- msgid "Parameter Forwarding Enabled"
3446
  msgstr ""
3447
 
3448
- #: app/helpers/PrliLinksHelper.php:72
3449
- msgid "Are you sure you want to delete your %s Pretty Link? This will delete the Pretty Link and all of the statistical data about it in your database."
3450
  msgstr ""
3451
 
3452
- #: app/helpers/PrliLinksHelper.php:73
3453
- msgid "Are you sure you want to reset your %s Pretty Link? This will delete all of the statistical data about this Pretty Link in your database."
3454
  msgstr ""
3455
 
3456
- #: app/helpers/PrliLinksHelper.php:73
3457
- #: app/helpers/PrliLinksHelper.php:151
3458
- msgid "Reset %s"
3459
  msgstr ""
3460
 
3461
- #: app/helpers/PrliLinksHelper.php:76
3462
- #: app/views/clicks/list.php:161
3463
- msgid "View clicks for %s"
3464
  msgstr ""
3465
 
3466
- #: app/helpers/PrliLinksHelper.php:81
3467
- #: app/helpers/PrliLinksHelper.php:162
3468
- msgid "Post %s to Twitter"
3469
  msgstr ""
3470
 
3471
- #: app/helpers/PrliLinksHelper.php:82
3472
- #: app/helpers/PrliLinksHelper.php:173
3473
- msgid "Send %s in an Email"
3474
  msgstr ""
3475
 
3476
- #: app/helpers/PrliLinksHelper.php:87
3477
- #: app/helpers/PrliLinksHelper.php:184
3478
- msgid "Visit Target URL: %s in a New Window"
3479
  msgstr ""
3480
 
3481
- #: app/helpers/PrliLinksHelper.php:88
3482
- #: app/helpers/PrliLinksHelper.php:195
3483
- msgid "Visit Short URL: %s in a New Window"
 
3484
  msgstr ""
3485
 
3486
- #: app/helpers/PrliLinksHelper.php:106
3487
- msgid "%d Clicks / %d Uniques"
 
3488
  msgstr ""
3489
 
3490
- #: app/helpers/PrliLinksHelper.php:115
3491
- msgid "This link isn't being tracked"
3492
  msgstr ""
3493
 
3494
- #: app/helpers/PrliLinksHelper.php:139
3495
- msgid "Target URL:"
 
3496
  msgstr ""
3497
 
3498
- #: app/helpers/PrliLinksHelper.php:171
3499
- #: app/views/links/form_basic.php:48
3500
- #: app/views/shared/tinymce_form_popup.php:86
3501
- #: app/views/widgets/widget.php:15
3502
- #: app/controllers/PrliLinksController.php:59
3503
- msgid "Pretty Link"
3504
  msgstr ""
3505
 
3506
- #: app/models/PrliUtils.php:88
3507
- msgid "*** Pretty Links Debug: %s"
3508
  msgstr ""
3509
 
3510
- #: app/models/PrliUtils.php:96
3511
- msgid "The Slug can't be empty"
3512
  msgstr ""
3513
 
3514
- #: app/models/PrliUtils.php:103
3515
- msgid "This Pretty Link Slug is already taken. There's already another pretty link with this slug: %s"
3516
  msgstr ""
3517
 
3518
- #. translators: %1$s: open link tag, %2$s: close link tag, %3$s: br tag
3519
- #: app/models/PrliUtils.php:1082
3520
- msgid "Get started by %1$sadding a URL%2$s that you want to turn into a pretty link.%3$sCome back to see how many times it was clicked."
 
3521
  msgstr ""
3522
 
3523
- #: app/models/PrliLink.php:480
3524
- msgid "Target URL can't be blank"
3525
  msgstr ""
3526
 
3527
- #: app/models/PrliLink.php:484
3528
- msgid "Target URL must be different than the Pretty Link"
3529
  msgstr ""
3530
 
3531
- #: app/models/PrliLink.php:488
3532
- msgid "Link URL must be a correctly formatted url"
 
 
3533
  msgstr ""
3534
 
3535
- #: app/models/PrliLink.php:492
3536
- msgid "Pretty Link slugs must not contain question marks, ampersands or number signs."
3537
  msgstr ""
3538
 
3539
- #: app/models/PrliLink.php:496
3540
- msgid "Pretty Link slugs must not end with a slash (\"/\")"
3541
  msgstr ""
3542
 
3543
- #: app/models/PrliClick.php:237
3544
- msgid "all links"
3545
  msgstr ""
3546
 
3547
- #: app/models/PrliClick.php:244
3548
- msgid "All clicks"
 
3549
  msgstr ""
3550
 
3551
- #: app/models/PrliClick.php:247
3552
- msgid "Unique hits"
3553
  msgstr ""
3554
 
3555
- #: app/models/PrliClick.php:251
3556
- msgid "on"
3557
  msgstr ""
3558
 
3559
- #: app/models/PrliGroup.php:114
3560
- msgid "Group must have a name."
3561
  msgstr ""
3562
 
3563
- #: app/views/links/form_advanced.php:6
3564
- #: app/controllers/PrliLinksController.php:607
3565
- msgid "No Follow"
3566
  msgstr ""
3567
 
3568
- #: app/views/links/form_advanced.php:9
3569
- msgid "Nofollow Link"
3570
  msgstr ""
3571
 
3572
- #: app/views/links/form_advanced.php:10
3573
- msgid "Add a nofollow and noindex to this link's http redirect header. (Recommended)"
3574
  msgstr ""
3575
 
3576
- #: app/views/links/form_advanced.php:19
3577
- #: app/views/shared/tinymce_form_popup.php:54
3578
- #: app/controllers/PrliLinksController.php:614
3579
- msgid "Sponsored"
3580
  msgstr ""
3581
 
3582
- #: app/views/links/form_advanced.php:22
3583
- msgid "Sponsored Link"
 
 
3584
  msgstr ""
3585
 
3586
- #: app/views/links/form_advanced.php:23
3587
- msgid "Add a sponsored attribute to this link's http redirect header. Recommended if this is an affiliate link."
3588
  msgstr ""
3589
 
3590
- #: app/views/links/form_advanced.php:32
3591
- #: app/views/links/form_advanced.php:35
3592
- msgid "Delay Redirect"
3593
  msgstr ""
3594
 
3595
- #: app/views/links/form_advanced.php:36
3596
- msgid "Time in seconds to wait before redirecting"
3597
  msgstr ""
3598
 
3599
- #: app/views/links/form_advanced.php:45
3600
- #: app/views/links/form_advanced.php:48
3601
- msgid "Parameter Forwarding"
3602
  msgstr ""
3603
 
3604
- #: app/views/links/form_advanced.php:49
3605
- msgid "Forward parameters passed to this link onto the Target URL"
3606
  msgstr ""
3607
 
3608
- #: app/views/links/form_advanced.php:58
3609
- #: app/views/links/form_advanced.php:61
3610
- #: app/views/shared/tinymce_form_popup.php:62
3611
- #: app/controllers/PrliLinksController.php:621
3612
- msgid "Tracking"
3613
  msgstr ""
3614
 
3615
- #: app/views/links/form_advanced.php:62
3616
- msgid "Enable Pretty Link's built-in hit (click) tracking"
3617
  msgstr ""
3618
 
3619
- #: app/views/links/form_advanced.php:75
3620
- msgid "Requires the Google Analyticator plugin be installed and configured. This setting has no impact on the MonsterInsights integration with Pretty Links."
 
3621
  msgstr ""
3622
 
3623
- #: app/views/links/form_advanced.php:88
3624
- msgid "It appears that %s is currently installed. Pretty Link will attempt to use its settings to track this link."
3625
  msgstr ""
3626
 
3627
- #: app/views/links/form_advanced.php:97
3628
- msgid "No Google Analytics Plugin is currently installed. Pretty Link cannot track links using Google Analytics until one is."
3629
  msgstr ""
3630
 
3631
- #: app/views/links/form.php:28
3632
- msgid "Basic"
3633
  msgstr ""
3634
 
3635
- #: app/views/links/form.php:29
3636
- msgid "Advanced"
3637
  msgstr ""
3638
 
3639
- #: app/views/links/form_basic.php:6
3640
- msgid "Redirection*"
3641
  msgstr ""
3642
 
3643
- #: app/views/links/form_basic.php:9
3644
- #: app/views/options/form.php:77
3645
- msgid "Redirection Type"
3646
  msgstr ""
3647
 
3648
- #: app/views/links/form_basic.php:10
3649
- msgid "This is the method of redirection for your link."
3650
  msgstr ""
3651
 
3652
- #: app/views/links/form_basic.php:24
3653
- #: app/views/options/form.php:87
3654
- msgid "Get cloaked redirects, Javascript redirects and more when you %1$sUpgrade to PRO%2$s"
3655
  msgstr ""
3656
 
3657
- #: app/views/links/form_basic.php:32
3658
- msgid "Target URL*"
3659
  msgstr ""
3660
 
3661
- #: app/views/links/form_basic.php:35
3662
- #: app/views/shared/tinymce_form_popup.php:13
3663
- #: app/views/shared/tinymce_form_popup.php:82
3664
- #: app/views/widgets/widget.php:11
3665
- msgid "Target URL"
3666
  msgstr ""
3667
 
3668
- #: app/views/links/form_basic.php:36
3669
- msgid "This is the URL that your Pretty Link will redirect to."
3670
  msgstr ""
3671
 
3672
- #: app/views/links/form_basic.php:45
3673
- msgid "Pretty Link*"
3674
  msgstr ""
3675
 
3676
- #: app/views/links/form_basic.php:49
3677
- msgid "This is how your pretty link will appear. You can edit the Pretty Link slug here."
3678
  msgstr ""
3679
 
3680
- #: app/views/links/form_basic.php:61
3681
- #: app/views/links/form_basic.php:64
3682
- msgid "Notes"
3683
  msgstr ""
3684
 
3685
- #: app/views/links/form_basic.php:65
3686
- msgid "This is a field where you can enter notes about a particular link. This notes field is mainly for your own link management needs. It isn't currently used anywhere on the front end."
3687
  msgstr ""
3688
 
3689
- #: app/views/links/form_pro.php:36
3690
- msgid "Enter a comma separated list of keywords / keyword phrases that you'd like to replace with this link in your Posts & Pages."
3691
  msgstr ""
3692
 
3693
- #. translators: %1$s: open code tag, %2$s: close code tag
3694
- #: app/views/links/form_pro.php:52
3695
- msgid "Enter a comma separated list of the URLs that you'd like to replace with this Pretty Link in your Posts & Pages. These must be formatted as URLs for example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
 
 
 
3696
  msgstr ""
3697
 
3698
- #: app/views/shared/nav.php:6
3699
- msgid "Pro Manual"
3700
  msgstr ""
3701
 
3702
- #: app/views/shared/nav.php:9
3703
- #: app/views/admin/update/license.php:39
3704
- #: app/controllers/PrliAppController.php:327
3705
- msgid "Upgrade to Pro"
3706
  msgstr ""
3707
 
3708
- #: app/views/shared/nav.php:14
3709
- msgid "Connect:"
3710
  msgstr ""
3711
 
3712
- #: app/views/shared/nav.php:18
3713
- msgid "Get Help:"
3714
  msgstr ""
3715
 
3716
- #: app/views/shared/nav.php:19
3717
- msgid "Tutorials"
3718
  msgstr ""
3719
 
3720
- #: app/views/shared/public_link.php:22
3721
- msgid "Here is your Pretty Link"
3722
  msgstr ""
3723
 
3724
- #: app/views/shared/public_link.php:30
3725
- msgid "Here's your pretty link for"
3726
  msgstr ""
3727
 
3728
- #: app/views/shared/public_link.php:41
3729
- msgid "send this link to:"
3730
  msgstr ""
3731
 
3732
- #: app/views/shared/public_link.php:45
3733
- msgid "back"
3734
  msgstr ""
3735
 
3736
- #: app/views/shared/table-nav.php:14
3737
- #: app/views/shared/link-table-nav.php:16
3738
- #: app/views/shared/link-table-nav.php:106
3739
- msgid "Displaying %1$s&#8211;%2$s of %3$s"
3740
  msgstr ""
3741
 
3742
- #: app/views/shared/tinymce_form_popup.php:4
3743
- msgid "Insert Pretty Link"
3744
  msgstr ""
3745
 
3746
- #: app/views/shared/tinymce_form_popup.php:10
3747
- #: js/editor/components/link-editor/index.js:432
3748
- #: js/editor.js:12
3749
- msgid "Create New Pretty Link"
3750
  msgstr ""
3751
 
3752
- #: app/views/shared/tinymce_form_popup.php:17
3753
- msgid "Slug"
3754
  msgstr ""
3755
 
3756
- #: app/views/shared/tinymce_form_popup.php:20
3757
- msgid "valid"
3758
  msgstr ""
3759
 
3760
- #: app/views/shared/tinymce_form_popup.php:21
3761
- msgid "invalid"
3762
  msgstr ""
3763
 
3764
- #: app/views/shared/tinymce_form_popup.php:25
3765
- #: app/views/shared/tinymce_form_popup.php:90
3766
- msgid "Link Text"
3767
  msgstr ""
3768
 
3769
- #: app/views/shared/tinymce_form_popup.php:29
3770
- msgid "Redirect Type"
3771
  msgstr ""
3772
 
3773
- #: app/views/shared/tinymce_form_popup.php:46
3774
- msgid "Nofollow"
3775
  msgstr ""
3776
 
3777
- #: app/views/shared/tinymce_form_popup.php:49
3778
- #: app/views/shared/tinymce_form_popup.php:57
3779
- #: app/views/shared/tinymce_form_popup.php:65
3780
- #: app/controllers/PrliLinksController.php:610
3781
- #: app/controllers/PrliLinksController.php:617
3782
- #: app/controllers/PrliLinksController.php:624
3783
- msgid "Enabled"
3784
  msgstr ""
3785
 
3786
- #: app/views/shared/tinymce_form_popup.php:50
3787
- #: app/views/shared/tinymce_form_popup.php:58
3788
- #: app/views/shared/tinymce_form_popup.php:66
3789
- #: app/controllers/PrliLinksController.php:611
3790
- #: app/controllers/PrliLinksController.php:618
3791
- #: app/controllers/PrliLinksController.php:625
3792
- msgid "Disabled"
3793
  msgstr ""
3794
 
3795
- #: app/views/shared/tinymce_form_popup.php:71
3796
- #: app/views/shared/tinymce_form_popup.php:95
3797
- msgid "Open this Pretty Link in a new window/tab"
3798
  msgstr ""
3799
 
3800
- #: app/views/shared/tinymce_form_popup.php:74
3801
- msgid "Insert New Pretty Link"
3802
  msgstr ""
3803
 
3804
- #: app/views/shared/tinymce_form_popup.php:78
3805
- msgid "Use Existing Pretty Link"
3806
  msgstr ""
3807
 
3808
- #: app/views/shared/tinymce_form_popup.php:80
3809
- msgid "Search by Slug, Title, or Target URL..."
3810
  msgstr ""
3811
 
3812
- #: app/views/shared/tinymce_form_popup.php:100
3813
- msgid "Insert Existing Pretty Link"
3814
  msgstr ""
3815
 
3816
- #: app/views/shared/errors.php:12
3817
- #: app/views/admin/errors.php:7
3818
- msgid "ERROR"
3819
  msgstr ""
3820
 
3821
- #: app/views/admin/popups/upgrade.php:6
3822
- msgid "Upgrade to Pretty Links PRO"
3823
  msgstr ""
3824
 
3825
- #: app/views/admin/popups/upgrade.php:7
3826
- msgid "Unlock Pretty Links' PRO features and you'll be able to:"
3827
  msgstr ""
3828
 
3829
- #: app/views/admin/popups/upgrade.php:9
3830
- msgid "Monetize existing content with automated Pretty Link placement"
3831
  msgstr ""
3832
 
3833
- #: app/views/admin/popups/upgrade.php:10
3834
- msgid "Redirect with cloaking, Javascript or Meta-refresh"
3835
  msgstr ""
3836
 
3837
- #: app/views/admin/popups/upgrade.php:11
3838
- msgid "Redirect by location, time, device or rotation"
3839
  msgstr ""
3840
 
3841
- #: app/views/admin/popups/upgrade.php:12
3842
- msgid "Expire your Pretty Links"
3843
  msgstr ""
3844
 
3845
- #: app/views/admin/popups/upgrade.php:13
3846
- msgid "Split-test your Pretty Links"
3847
  msgstr ""
3848
 
3849
- #: app/views/admin/popups/upgrade.php:14
3850
- #: app/views/admin/update/license.php:60
3851
- msgid "And much, much more!"
3852
  msgstr ""
3853
 
3854
- #: app/views/admin/popups/upgrade.php:17
3855
- msgid "Plus, upgrading is fast, easy and won't disrupt any of your existing links or data."
3856
  msgstr ""
3857
 
3858
- #: app/views/admin/popups/upgrade.php:18
3859
- #: app/views/admin/update/license.php:66
3860
- msgid "We think you'll love it!"
3861
  msgstr ""
3862
 
3863
- #: app/views/admin/popups/upgrade.php:23
3864
- #: app/controllers/PrliFlyoutMenuController.php:79
3865
- msgid "Upgrade to Pretty Links Pro"
3866
  msgstr ""
3867
 
3868
- #: app/views/admin/popups/upgrade.php:24
3869
- msgid "Maybe Later"
3870
  msgstr ""
3871
 
3872
- #: app/views/admin/popups/rating.php:8
3873
- #: app/controllers/PrliReviewNoticeController.php:56
3874
- msgid "Are you enjoying using Pretty Links?"
3875
  msgstr ""
3876
 
3877
- #: app/views/admin/popups/rating.php:17
3878
- msgid "Rate Pretty Links"
 
3879
  msgstr ""
3880
 
3881
- #: app/views/admin/popups/rating.php:18
3882
- msgid "If you enjoy using Pretty Links would you mind taking a moment to rate it on WordPress.org? It won't take more than a minute."
3883
  msgstr ""
3884
 
3885
- #: app/views/admin/popups/rating.php:19
3886
- #: app/views/admin/popups/rating.php:31
3887
- msgid "Thanks for your support!"
3888
  msgstr ""
3889
 
3890
- #: app/views/admin/popups/rating.php:24
3891
- #: app/views/admin/popups/rating.php:36
3892
- msgid "Remind Me Later"
3893
  msgstr ""
3894
 
3895
- #: app/views/admin/popups/rating.php:25
3896
- msgid "Review Pretty Links"
3897
  msgstr ""
3898
 
3899
- #: app/views/admin/popups/rating.php:29
3900
- #: app/views/admin/popups/rating.php:37
3901
- msgid "Leave Feedback"
3902
  msgstr ""
3903
 
3904
- #: app/views/admin/popups/rating.php:30
3905
- msgid "To help us improve Pretty Links, would you mind taking a moment to leave feedback?"
3906
  msgstr ""
3907
 
3908
- #: app/views/admin/popups/rating.php:40
3909
- msgid "Never Remind Me Again"
3910
  msgstr ""
3911
 
3912
- #: app/views/admin/update/addons.php:3
3913
- msgid "Pretty Link Add-ons"
3914
  msgstr ""
3915
 
3916
- #: app/views/admin/update/addons.php:8
3917
- msgid "There were no Add-ons found for your license or lack thereof..."
3918
  msgstr ""
3919
 
3920
- #: app/views/admin/update/addons.php:14
3921
- msgid "Add-on"
3922
  msgstr ""
3923
 
3924
- #: app/views/admin/update/addons.php:15
3925
- msgid "Description"
3926
  msgstr ""
3927
 
3928
- #: app/views/admin/update/addons.php:16
3929
- #: app/views/admin/update/addons.php:54
3930
- msgid "Install"
3931
  msgstr ""
3932
 
3933
- #: app/views/admin/update/addons.php:42
3934
- msgid "(Update Available)"
3935
  msgstr ""
3936
 
3937
- #: app/views/admin/update/addons.php:50
3938
- msgid "Installed & Active"
3939
  msgstr ""
3940
 
3941
- #: app/views/admin/update/addons.php:52
3942
- msgid "Installed & Inactive"
3943
  msgstr ""
3944
 
3945
- #: app/views/admin/update/license.php:7
3946
- msgid "Pretty Links Pro License"
 
3947
  msgstr ""
3948
 
3949
- #. translators: %1$s: link to pro site, %2$s: link to pro site login page
3950
- #: app/views/admin/update/license.php:14
3951
- msgid "You must have a License Key to enable automatic updates for Pretty Links Pro. If you don't have a License please go to %1$s to get one. If you do have a license you can login at %2$s to manage your licenses and site activations."
3952
  msgstr ""
3953
 
3954
- #: app/views/admin/update/license.php:25
3955
- msgid "Enter Your Pretty Links Pro License Key:"
3956
  msgstr ""
3957
 
3958
- #: app/views/admin/update/license.php:32
3959
- msgid "Activate License Key on %s"
3960
  msgstr ""
3961
 
3962
- #. translators: %1$s: open link tag, %2$s: close link tag
3963
- #: app/views/admin/update/license.php:45
3964
- msgid "It looks like you haven't %1$supgraded to Pretty Links Pro%2$s yet. Here are just a few things you could be doing with pro:"
3965
  msgstr ""
3966
 
3967
- #: app/views/admin/update/license.php:55
3968
- msgid "Auto-replace keywords throughout your site with Pretty Links"
3969
  msgstr ""
3970
 
3971
- #: app/views/admin/update/license.php:56
3972
- msgid "Protect your affiliate links by using Cloaked Redirects"
3973
  msgstr ""
3974
 
3975
- #: app/views/admin/update/license.php:57
3976
- msgid "Redirect based on a visitor's location"
3977
  msgstr ""
3978
 
3979
- #: app/views/admin/update/license.php:58
3980
- msgid "Auto-prettylink your Pages &amp; Posts"
3981
  msgstr ""
3982
 
3983
- #: app/views/admin/update/license.php:59
3984
- msgid "Find out what works and what doesn't by split testing your links"
3985
  msgstr ""
3986
 
3987
- #: app/views/admin/update/license.php:64
3988
- msgid "Plus, upgrading is fast, easy and won't disrupt any of your existing links or data. And there's even a 14 day money back guarantee."
3989
  msgstr ""
3990
 
3991
- #: app/views/admin/update/license.php:68
3992
- msgid "Upgrade to Pro today!"
3993
  msgstr ""
3994
 
3995
- #: app/views/admin/update/license.php:72
3996
- msgid "Active License Key Information:"
3997
  msgstr ""
3998
 
3999
- #: app/views/admin/update/license.php:75
4000
- msgid "License Key:"
4001
  msgstr ""
4002
 
4003
- #: app/views/admin/update/license.php:79
4004
- msgid "Status:"
 
4005
  msgstr ""
4006
 
4007
- #: app/views/admin/update/license.php:80
4008
- msgid "Active on %s"
 
 
 
4009
  msgstr ""
4010
 
4011
- #: app/views/admin/update/license.php:83
4012
- msgid "Product:"
4013
  msgstr ""
4014
 
4015
- #: app/views/admin/update/license.php:87
4016
- msgid "Activations:"
 
4017
  msgstr ""
4018
 
4019
- #. translators: %1$s: open b tag, %2$s: close b tag, %3$d: current activation count, %4$s: max activations
4020
- #: app/views/admin/update/license.php:92
4021
- msgid "%1$s%3$d of %4$s%2$s sites have been activated with this license key"
4022
  msgstr ""
4023
 
4024
- #: app/views/admin/update/license.php:102
4025
- msgid "Are you sure? Pretty Links Pro will not be functional on %s if this License Key is deactivated."
 
4026
  msgstr ""
4027
 
4028
- #: app/views/admin/update/license.php:102
4029
- msgid "Deactivate License Key on %s"
 
4030
  msgstr ""
4031
 
4032
- #: app/views/admin/update/license.php:105
4033
- msgid "Upgrade plugin to Pro"
 
4034
  msgstr ""
4035
 
4036
- #: app/views/admin/update/license.php:110
4037
- msgid "You're currently running version %s of Pretty Links Pro"
4038
  msgstr ""
4039
 
4040
- #: app/views/admin/update/addon_popup.php:4
4041
- msgid "ACTION REQUIRED"
4042
  msgstr ""
4043
 
4044
- #: app/views/admin/update/addon_popup.php:5
4045
- msgid "The %s features in your Pretty Link options have been moved from Pretty Link into a separate plugin."
4046
  msgstr ""
4047
 
4048
- #: app/views/admin/update/addon_popup.php:6
4049
- msgid "Why you ask? Well, it's to streamline and increase the performance of Pretty Link for you."
4050
  msgstr ""
4051
 
4052
- #: app/views/admin/update/addon_popup.php:9
4053
- msgid "And good for you, it looks like you've already got the %1$s Add-on installed. Just click the \"Activate %2$s Add-on\" button below and you'll get all these features back now."
4054
  msgstr ""
4055
 
4056
- #: app/views/admin/update/addon_popup.php:11
4057
- msgid "Luckily it's easy to get these features back now. Just click the \"Install %s Add-on\" button below."
4058
  msgstr ""
4059
 
4060
- #. translators: %1$s: open link tag, %2$s: close link tag
4061
- #: app/views/admin/update/addon_popup.php:16
4062
- msgid "If you have problems with the auto-install please refer to %1$sthe user manual%2$s for manual install instructions."
4063
  msgstr ""
4064
 
4065
- #: app/views/admin/update/addon_popup.php:27
4066
- msgid "Activate %s Add-on"
4067
  msgstr ""
4068
 
4069
- #: app/views/admin/update/addon_popup.php:29
4070
- msgid "Install %s Add-on"
4071
  msgstr ""
4072
 
4073
- #: app/views/admin/update/addon_popup.php:31
4074
- msgid "Don't Show This Message Again"
4075
  msgstr ""
4076
 
4077
- #: app/views/admin/update/ui.php:3
4078
- msgid "Activate Pretty Links Pro"
4079
  msgstr ""
4080
 
4081
- #: app/views/admin/update/ui.php:16
4082
- msgid "License"
4083
  msgstr ""
4084
 
4085
- #: app/views/admin/update/ui.php:17
4086
- msgid "Add-Ons"
4087
  msgstr ""
4088
 
4089
- #: app/views/admin/update/edge_updates.php:4
4090
- msgid "Include Pretty Links Pro edge (development) releases in automatic updates (not recommended for production websites)"
 
4091
  msgstr ""
4092
 
4093
- #: app/views/admin/update/edge_updates.php:4
4094
- #: app/views/widgets/widget.php:22
4095
- msgid "Loading..."
4096
  msgstr ""
4097
 
4098
- #: app/views/admin/update/activation_warning.php:7
4099
- msgid "Error with PRETTYLINK_LICENSE_KEY: %s"
 
4100
  msgstr ""
4101
 
4102
- #: app/views/admin/update/activation_warning.php:14
4103
- #: app/views/admin/update/activation_warning.php:41
4104
- msgid "Pretty Links Pro isn't able to get critical automatic updates"
4105
  msgstr ""
4106
 
4107
- #: app/views/admin/update/activation_warning.php:15
4108
- msgid "It looks like you used to have Pretty Links Pro activated with a username and password but now you need a license key to activate it."
 
4109
  msgstr ""
4110
 
4111
- #. translators: %1$s: open link tag, %2$s: close link tag
4112
- #: app/views/admin/update/activation_warning.php:21
4113
- msgid "You can get your license key by logging in at %1$sPrettyLinkPro.com.%2$s"
4114
  msgstr ""
4115
 
4116
- #. translators: %1$s: open link tag, %2$s: close link tag
4117
- #: app/views/admin/update/activation_warning.php:32
4118
- msgid "After you paste your license key on the %1$s\"Pretty Link\" -> \"Activate Pro\" admin page,%2$s you'll start getting updates again."
4119
  msgstr ""
4120
 
4121
- #. translators: %1$s: open link tag, %2$s: close link tag
4122
- #: app/views/admin/update/activation_warning.php:47
4123
- msgid "You can retrieve or purchase a license key at %1$sPrettyLinks.com%2$s to enable automatic updates today."
4124
  msgstr ""
4125
 
4126
- #. translators: %1$s: open link tag, %2$s: close link tag
4127
- #: app/views/admin/update/activation_warning.php:58
4128
- msgid "After you paste your license key on the %1$s\"Pretty Links\" -> \"Activate Pro\" admin page,%2$s you'll start getting automatic updates."
4129
  msgstr ""
4130
 
4131
- #: app/views/admin/onboarding/welcome.php:15
4132
- msgid "Welcome to"
4133
  msgstr ""
4134
 
4135
- #: app/views/admin/onboarding/welcome.php:18
4136
- msgid "Welcome to Pretty Links!"
4137
  msgstr ""
4138
 
4139
- #: app/views/admin/onboarding/welcome.php:21
4140
- msgid "Congratulations, you've just installed the most powerful link management platform for WordPress on Earth!"
4141
  msgstr ""
4142
 
4143
- #: app/views/admin/onboarding/welcome.php:22
4144
- msgid "With Pretty Links, you'll no longer need to manage links from a spreadsheet and you'll be able to maximize the visibility of your links - these benefits (and more) will make it possible to make more money from your content like never before!"
4145
  msgstr ""
4146
 
4147
- #: app/views/admin/onboarding/welcome.php:25
4148
- msgid "Getting Started is Easy"
4149
  msgstr ""
4150
 
4151
- #: app/views/admin/onboarding/welcome.php:26
4152
- msgid "Start by creating your first Pretty Link:"
4153
  msgstr ""
4154
 
4155
- #: app/views/admin/onboarding/welcome.php:34
4156
- #: app/views/admin/onboarding/welcome.php:35
4157
- msgid "Click \"Add New Link\""
4158
  msgstr ""
4159
 
4160
- #: app/views/admin/onboarding/welcome.php:39
4161
- #: app/views/admin/onboarding/welcome.php:40
4162
- msgid "Enter the URL of your Affiliate Link"
4163
  msgstr ""
4164
 
4165
- #: app/views/admin/onboarding/welcome.php:44
4166
- #: app/views/admin/onboarding/welcome.php:45
4167
- msgid "Customize your Pretty Link Slug"
4168
  msgstr ""
4169
 
4170
- #: app/views/admin/onboarding/welcome.php:49
4171
- #: app/views/admin/onboarding/welcome.php:50
4172
- msgid "Click \"Update\""
4173
  msgstr ""
4174
 
4175
- #: app/views/admin/onboarding/welcome.php:54
4176
- #: app/views/admin/onboarding/welcome.php:55
4177
- msgid "Copy the Pretty Link URL"
4178
  msgstr ""
4179
 
4180
- #: app/views/admin/onboarding/welcome.php:59
4181
- msgid "Wasn't that easy? Now, you can use this link wherever you want!"
4182
  msgstr ""
4183
 
4184
- #: app/views/admin/onboarding/welcome.php:63
4185
- msgid "The Power of"
4186
  msgstr ""
4187
 
4188
- #: app/views/admin/onboarding/welcome.php:66
4189
- msgid "The Power of Pretty Links Pro"
 
 
 
 
4190
  msgstr ""
4191
 
4192
- #: app/views/admin/onboarding/welcome.php:70
4193
- msgid "There are many reasons that premium users of Pretty Links <br> are able to take their business to the next level:"
4194
  msgstr ""
4195
 
4196
- #: app/views/admin/onboarding/welcome.php:77
4197
- msgid "Automated, Site-Wide Link Placement (Keyword Replacement)"
4198
  msgstr ""
4199
 
4200
- #: app/views/admin/onboarding/welcome.php:79
4201
- msgid "Imagine if you never had to hand-edit links, copy and paste from a spreadsheet, or actively have to keep up with you links ever again. Well that time has come! Now with Pretty Links, all you have to do is create your links and let Pretty Links do the rest!"
4202
  msgstr ""
4203
 
4204
- #: app/views/admin/onboarding/welcome.php:80
4205
- msgid "Pretty Links will scan your content for the keywords or URLs that you want to target and will replace them with Pretty Links automatically! This will save you tons of time so you can focus on growing your business!"
4206
  msgstr ""
4207
 
4208
- #: app/views/admin/onboarding/welcome.php:87
4209
- msgid "Categories & Tags"
4210
  msgstr ""
4211
 
4212
- #: app/views/admin/onboarding/welcome.php:89
4213
- msgid "When you are dealing with a large number of links, it can be easy to be overwhelmed and confused by which links to you planned to use where. It's now easier than ever to organize your links and group them any way that you like for ultimate productivity and monetization!"
4214
  msgstr ""
4215
 
4216
- #: app/views/admin/onboarding/welcome.php:96
4217
- #: app/controllers/PrliLinksController.php:162
4218
- msgid "Advanced Redirect Types"
4219
  msgstr ""
4220
 
4221
- #: app/views/admin/onboarding/welcome.php:98
4222
- msgid "Lite users can take advantage of 301 & 302 server side redirects but our pro users can also redirect with cloaking, JavaScript, Meta-refresh and more."
4223
  msgstr ""
4224
 
4225
- #: app/views/admin/onboarding/welcome.php:99
4226
- msgid "So if you have social media links, a landing page, or a new page or post you'd like to redirect your customers to, this feature will definitely come in handy!"
4227
  msgstr ""
4228
 
4229
- #: app/views/admin/onboarding/welcome.php:106
4230
- msgid "Dynamic Redirect Types"
4231
  msgstr ""
4232
 
4233
- #: app/views/admin/onboarding/welcome.php:108
4234
- msgid "Would you like your Pretty Link to redirect somewhere custom depending on what country your user is in, device they're using, time they're clicking the link or just randomly? Our pro users can do this easily with our Dynamic Redirections!"
4235
  msgstr ""
4236
 
4237
- #: app/views/admin/onboarding/welcome.php:109
4238
- msgid "This feature is excellent if you are running a time-sensitive sales, want to create custom content for you customers, create stellar landing pages for customers in different countries!"
4239
  msgstr ""
4240
 
4241
- #: app/views/admin/onboarding/welcome.php:116
4242
- msgid "Import and Export Links"
4243
  msgstr ""
4244
 
4245
- #: app/views/admin/onboarding/welcome.php:118
4246
- msgid "Export your links to a spreadsheet or import them en masse - our pro users can do this with ease. Simply download your spreadsheet, upload to WordPress, and your links are automatically added to Pretty Links!"
4247
  msgstr ""
4248
 
4249
- #: app/views/admin/onboarding/welcome.php:125
4250
- msgid "The list goes on and on"
4251
  msgstr ""
4252
 
4253
- #: app/views/admin/onboarding/welcome.php:126
4254
- msgid "Our premium editions of Pretty Links are a HUGE upgrade from Lite. <br> Don’t miss out on our critical PRO benefits!"
4255
  msgstr ""
4256
 
4257
- #: app/views/admin/onboarding/welcome.php:130
4258
- msgid "Upgrade to Pretty Links Pro Now"
4259
  msgstr ""
4260
 
4261
- #: app/views/admin/onboarding/welcome.php:131
4262
- msgid "Upgrade NOW and get $50 off of your subscription!!!"
4263
  msgstr ""
4264
 
4265
- #: app/views/options/form.php:3
4266
- #: app/controllers/PrliAppController.php:175
4267
- msgid "Options"
4268
  msgstr ""
4269
 
4270
- #: app/views/options/form.php:4
4271
- msgid "User Manual"
4272
  msgstr ""
4273
 
4274
- #. translators: %1$s: open strong tag, %2$s: close strong tag
4275
- #: app/views/options/form.php:17
4276
- msgid "%1$sWordPress Must be Configured:%2$s Pretty Links won't work until you select a Permalink Structure other than 'Default'"
4277
  msgstr ""
4278
 
4279
- #: app/views/options/form.php:22
4280
- msgid "Permalink Settings"
4281
  msgstr ""
4282
 
4283
- #: app/views/options/form.php:49
4284
- msgid "General"
4285
  msgstr ""
4286
 
4287
- #: app/views/options/form.php:52
4288
- msgid "Reporting"
4289
  msgstr ""
4290
 
4291
- #: app/views/options/form.php:53
4292
- msgid "Replacements"
4293
  msgstr ""
4294
 
4295
- #: app/views/options/form.php:54
4296
- msgid "Auto-Create Links"
4297
  msgstr ""
4298
 
4299
- #: app/views/options/form.php:56
4300
- msgid "Social"
4301
  msgstr ""
4302
 
4303
- #: app/views/options/form.php:57
4304
- msgid "Public"
4305
  msgstr ""
4306
 
4307
- #: app/views/options/form.php:64
4308
- msgid "General Options"
4309
  msgstr ""
4310
 
4311
- #: app/views/options/form.php:70
4312
- msgid "Default Link Options"
4313
  msgstr ""
4314
 
4315
- #: app/views/options/form.php:75
4316
- msgid "Redirection"
4317
  msgstr ""
4318
 
4319
- #: app/views/options/form.php:78
4320
- msgid "Select the type of redirection you want your newly created links to have."
4321
  msgstr ""
4322
 
4323
- #: app/views/options/form.php:95
4324
- #: app/views/options/form.php:97
4325
- msgid "Enable Tracking"
4326
  msgstr ""
4327
 
4328
- #: app/views/options/form.php:98
4329
- msgid "Default all new links to be tracked."
4330
  msgstr ""
4331
 
4332
- #: app/views/options/form.php:107
4333
- msgid "Enable No Follow"
4334
  msgstr ""
4335
 
4336
- #: app/views/options/form.php:109
4337
- msgid "Add No Follow"
4338
  msgstr ""
4339
 
4340
- #: app/views/options/form.php:110
4341
- msgid "Add the 'nofollow' attribute by default to new links. This will add nofollow and noindex in the HTTP Response headers when enabled."
4342
  msgstr ""
4343
 
4344
- #: app/views/options/form.php:119
4345
- msgid "Enable Sponsored"
4346
  msgstr ""
4347
 
4348
- #: app/views/options/form.php:122
4349
- msgid "Add the 'sponsored' attribute by default to new links. This will add sponsored in the HTTP Response headers when enabled."
4350
  msgstr ""
4351
 
4352
- #: app/views/options/form.php:131
4353
- msgid "Enable Permalink Fix"
4354
  msgstr ""
4355
 
4356
- #: app/views/options/form.php:133
4357
- msgid "Use fix for index.php Permalink Structure"
4358
  msgstr ""
4359
 
4360
- #: app/views/options/form.php:134
4361
- msgid "This option should ONLY be checked if you have elements in your permalink structure that must be present in any link on your site. For example, some WordPress installs don't have the benefit of full rewrite capabilities and in this case you'd need an index.php included in each link (http://example.com/index.php/mycoolslug instead of http://example.com/mycoolslug). If this is the case for you then check this option but the vast majority of users will want to keep this unchecked."
4362
  msgstr ""
4363
 
4364
- #: app/views/options/form.php:182
4365
- msgid "Requires the Google Analyticator plugin be installed. If you rely on MonsterInsights plugin for Google Analytics, leave this setting disabled as it has no affect."
4366
  msgstr ""
4367
 
4368
- #: app/views/options/form.php:193
4369
- msgid "Enable %sQR Codes%s"
4370
  msgstr ""
4371
 
4372
- #: app/views/options/form.php:239
4373
- msgid "Reporting Options"
4374
  msgstr ""
4375
 
4376
- #: app/views/options/form.php:244
4377
- #: app/views/options/form.php:246
4378
- msgid "Tracking Style"
4379
  msgstr ""
4380
 
4381
- #: app/views/options/form.php:247
4382
- msgid "Changing your tracking style can affect the accuracy of your existing statistics. Extended mode must be used for Conversion reporting."
4383
  msgstr ""
4384
 
4385
- #: app/views/options/form.php:251
4386
- msgid "Normal Tracking"
4387
  msgstr ""
4388
 
4389
- #: app/views/options/form.php:252
4390
- msgid "Extended Tracking (more stats / slower performance)"
4391
  msgstr ""
4392
 
4393
- #: app/views/options/form.php:253
4394
- msgid "Simple Click Count Tracking (less stats / faster performance)"
4395
  msgstr ""
4396
 
4397
- #: app/views/options/form.php:259
4398
- msgid "Excluded IP Addresses:"
4399
  msgstr ""
4400
 
4401
- #: app/views/options/form.php:261
4402
- msgid "Excluded IP Addresses"
4403
  msgstr ""
4404
 
4405
- #: app/views/options/form.php:262
4406
- msgid "Enter IP Addresses or IP Ranges you want to exclude from your Click data and Stats. Each IP Address should be separated by commas. Example: 192.168.0.1, 192.168.2.1, 192.168.3.4 or 192.168.*.*"
4407
  msgstr ""
4408
 
4409
- #: app/views/options/form.php:265
4410
- msgid "FYI, your current IP address is %s."
4411
  msgstr ""
4412
 
4413
- #: app/views/options/form.php:276
4414
- msgid "Auto-Trim Clicks"
4415
  msgstr ""
4416
 
4417
- #: app/views/options/form.php:278
4418
- msgid "Automatically Trim Clicks"
4419
  msgstr ""
4420
 
4421
- #: app/views/options/form.php:279
4422
- msgid "Will automatically delete all hits older than 90 days. We strongly recommend doing this to keep your database performance up. This will permanently delete this click data, and is not undo-able. "
4423
  msgstr ""
4424
 
4425
- #: app/views/options/form.php:288
4426
- #: app/views/options/form.php:290
4427
- msgid "Filter Robots"
4428
  msgstr ""
4429
 
4430
- #: app/views/options/form.php:291
4431
- msgid "Filter known Robots and unidentifiable browser clients from your click data, stats and reports. Works best if Tracking Style above is set to 'Extended Tracking'."
4432
  msgstr ""
4433
 
4434
- #: app/views/options/form.php:307
4435
- #: app/views/options/form.php:309
4436
- msgid "Whitelist IP Addresses"
4437
  msgstr ""
4438
 
4439
- #: app/views/options/form.php:310
4440
- msgid "Enter IP Addresses or IP Ranges you want to always include in your Click data and Stats even if they are flagged as robots. Each IP Address should be separated by commas. Example: 192.168.0.1, 192.168.2.1, 192.168.3.4 or 192.168.*.*"
4441
  msgstr ""
4442
 
4443
- #: app/views/options/form.php:591
4444
- msgid "Keywork &amp; URL Options"
4445
  msgstr ""
4446
 
4447
- #: app/views/options/form.php:606
4448
- msgid "Post Shortlinks"
4449
  msgstr ""
4450
 
4451
- #: app/views/options/form.php:609
4452
- msgid "Create Pretty Links for Posts"
4453
  msgstr ""
4454
 
4455
- #: app/views/options/form.php:610
4456
- msgid "Automatically Create a Pretty Link for each of your published Posts"
4457
  msgstr ""
4458
 
4459
- #: app/views/options/form.php:623
4460
- msgid "Page Shortlinks"
4461
  msgstr ""
4462
 
4463
- #: app/views/options/form.php:626
4464
- msgid "Create Pretty Links for Pages"
4465
  msgstr ""
4466
 
4467
- #: app/views/options/form.php:627
4468
- msgid "Automatically Create a Pretty Link for each of your published Pages"
4469
  msgstr ""
4470
 
4471
- #: app/views/options/form.php:1068
4472
- msgid "Public Link Options"
4473
  msgstr ""
4474
 
4475
- #: app/views/groups/edit.php:10
4476
- msgid "Edit Group"
4477
  msgstr ""
4478
 
4479
- #: app/views/groups/edit.php:23
4480
- #: app/views/groups/new.php:24
4481
- msgid "This is how you'll identify your Group."
4482
  msgstr ""
4483
 
4484
- #: app/views/groups/edit.php:26
4485
- #: app/views/groups/new.php:27
4486
- msgid "Description:"
4487
  msgstr ""
4488
 
4489
- #: app/views/groups/edit.php:28
4490
- #: app/views/groups/new.php:29
4491
- msgid "A Description of this group."
4492
  msgstr ""
4493
 
4494
- #: app/views/groups/edit.php:31
4495
- #: app/views/groups/new.php:32
4496
- msgid "Links:"
4497
  msgstr ""
4498
 
4499
- #: app/views/groups/edit.php:37
4500
- #: app/views/groups/new.php:38
4501
- msgid "Current Group"
4502
  msgstr ""
4503
 
4504
- #. translators: %1$s: open strong tag, %2$s close strong tag
4505
- #: app/views/groups/edit.php:61
4506
- #: app/views/groups/new.php:60
4507
- msgid "Select some links for this group. %1$sNote: each link can only be in one group at a time.%2$s"
4508
  msgstr ""
4509
 
4510
- #: app/views/groups/list.php:6
4511
- msgid "Groups"
4512
  msgstr ""
4513
 
4514
- #: app/views/groups/list.php:7
4515
- msgid "Add Group"
4516
  msgstr ""
4517
 
4518
- #: app/views/groups/list.php:62
4519
- msgid "No Pretty Link Groups were found"
4520
  msgstr ""
4521
 
4522
- #: app/views/groups/list.php:79
4523
- msgid "Are you sure you want to delete your %s Pretty Link Group?"
4524
  msgstr ""
4525
 
4526
- #: app/views/groups/list.php:80
4527
- #: app/views/groups/list.php:84
4528
- msgid "View links in %s"
4529
  msgstr ""
4530
 
4531
- #: app/views/groups/list.php:81
4532
- msgid "View hits in %s"
4533
  msgstr ""
4534
 
4535
- #: app/views/groups/new.php:10
4536
- msgid "New Group"
4537
  msgstr ""
4538
 
4539
- #: app/views/tools/form.php:3
4540
- #: app/controllers/PrliAppController.php:172
4541
- msgid "Tools"
4542
  msgstr ""
4543
 
4544
- #: app/views/tools/form.php:18
4545
- #: app/views/tools/form.php:25
4546
- msgid "Bookmarklet"
4547
  msgstr ""
4548
 
4549
- #: app/views/tools/form.php:19
4550
- #: app/views/tools/form.php:70
4551
- msgid "Trim Clicks"
4552
  msgstr ""
4553
 
4554
- #: app/views/tools/form.php:28
4555
- msgid "Install Pretty Link Bookmarklet"
4556
  msgstr ""
4557
 
4558
- #. translators: %1$s: open link tag, %2$s close link tag
4559
- #: app/views/tools/form.php:31
4560
- msgid "Just drag this \"Get PrettyLink\" link to your toolbar to install the bookmarklet. As you browse the web, you can just click this bookmarklet to create a pretty link from the current url you're looking at. %1$s(more help)%2$s"
4561
  msgstr ""
4562
 
4563
- #: app/views/tools/form.php:36
4564
- msgid "Show iPhone Bookmarklet Instructions"
4565
  msgstr ""
4566
 
4567
- #. translators: %1$s: open strong tag, %2$s close strong tag
4568
- #: app/views/tools/form.php:43
4569
- msgid "%1$sNote:%2$s iPhone users can install this bookmarklet in their Safari to create Pretty Links with the following steps:"
4570
  msgstr ""
4571
 
4572
- #: app/views/tools/form.php:49
4573
- msgid "Copy this text:"
4574
  msgstr ""
4575
 
4576
- #: app/views/tools/form.php:50
4577
- msgid "Tap the + button at the bottom of the screen"
4578
  msgstr ""
4579
 
4580
- #: app/views/tools/form.php:51
4581
- msgid "Choose to share the page, then click on \"Bookmark\". We recommend saving it in your Favorites folder. Rename your bookmark to \"Get PrettyLink\" (or whatever you want) and then \"Save\""
4582
  msgstr ""
4583
 
4584
- #: app/views/tools/form.php:52
4585
- msgid "Navigate through your Bookmarks until you find the new bookmark and click \"Edit\""
4586
  msgstr ""
4587
 
4588
- #: app/views/tools/form.php:53
4589
- msgid "Delete all the text from the address"
4590
  msgstr ""
4591
 
4592
- #: app/views/tools/form.php:54
4593
- msgid "Paste the text you copied in Step 1 into the address field"
4594
  msgstr ""
4595
 
4596
- #. translators: %1$s: open strong tag, %2$s close strong tag
4597
- #: app/views/tools/form.php:59
4598
- msgid "To save the changes hit \"Bookmarks\" and %1$syou're done!%2$s"
4599
  msgstr ""
4600
 
4601
- #: app/views/tools/form.php:64
4602
- msgid "Now when you find a page you want to save off as a Pretty Link, just click the \"Bookmarks\" icon at the bottom of the screen and select your \"Get PrettyLink\" bookmarklet."
4603
  msgstr ""
4604
 
4605
- #: app/views/tools/form.php:72
4606
- msgid "Pretty Link is already automatically trimming Clicks older than 90 days. Although not necessary, you can still use the buttons below to force click trimming."
4607
  msgstr ""
4608
 
4609
- #: app/views/tools/form.php:75
4610
- msgid "***WARNING*** If you click OK you will delete ALL of the Click data that is older than 30 days. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete this data because there is no going back!"
4611
  msgstr ""
4612
 
4613
- #: app/views/tools/form.php:75
4614
- msgid "Delete Clicks older than 30 days"
4615
  msgstr ""
4616
 
4617
- #: app/views/tools/form.php:77
4618
- msgid "Clear clicks 30 days or older"
4619
  msgstr ""
4620
 
4621
- #: app/views/tools/form.php:78
4622
- msgid "This will clear all clicks in your database that are older than 30 days."
4623
  msgstr ""
4624
 
4625
- #: app/views/tools/form.php:80
4626
- msgid "***WARNING*** If you click OK you will delete ALL of the Click data that is older than 90 days. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete this data because there is no going back!"
4627
  msgstr ""
4628
 
4629
- #: app/views/tools/form.php:80
4630
- msgid "Delete Clicks older than 90 days"
4631
  msgstr ""
4632
 
4633
- #: app/views/tools/form.php:82
4634
- msgid "Clear clicks 90 days or older"
4635
  msgstr ""
4636
 
4637
- #: app/views/tools/form.php:83
4638
- msgid "This will clear all clicks in your database that are older than 90 days."
4639
  msgstr ""
4640
 
4641
- #: app/views/tools/form.php:87
4642
- msgid "***WARNING*** If you click OK you will delete ALL of the Click data in your Database. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete all your data because there is no going back!"
4643
  msgstr ""
4644
 
4645
- #: app/views/tools/form.php:87
4646
- msgid "Delete All Clicks"
4647
  msgstr ""
4648
 
4649
- #: app/views/tools/form.php:89
4650
- msgid "Clear all clicks"
4651
  msgstr ""
4652
 
4653
- #: app/views/tools/form.php:90
4654
- msgid "Seriously, only click this link if you want to delete all the Click data in your database."
4655
  msgstr ""
4656
 
4657
- #: app/views/clicks/list.php:6
4658
- #: app/views/clicks/csv_download.php:4
4659
- msgid "For %s"
4660
  msgstr ""
4661
 
4662
- #: app/views/clicks/list.php:21
4663
- msgid "Back to Clicks"
4664
  msgstr ""
4665
 
4666
- #: app/views/clicks/list.php:30
4667
- msgid "Type:"
4668
  msgstr ""
4669
 
4670
- #: app/views/clicks/list.php:39
4671
- msgid "to"
4672
  msgstr ""
4673
 
4674
- #: app/views/clicks/list.php:62
4675
- msgid "Search Clicks"
4676
  msgstr ""
4677
 
4678
- #: app/views/clicks/list.php:73
4679
- #: app/views/clicks/list.php:171
4680
- msgid "Browser"
4681
  msgstr ""
4682
 
4683
- #: app/views/clicks/list.php:75
4684
- #: app/views/clicks/list.php:172
4685
- msgid "OS"
4686
  msgstr ""
4687
 
4688
- #: app/views/clicks/list.php:79
4689
- #: app/views/clicks/list.php:174
4690
- msgid "IP"
4691
  msgstr ""
4692
 
4693
- #: app/views/clicks/list.php:83
4694
- #: app/views/clicks/list.php:176
4695
- msgid "Visitor"
4696
  msgstr ""
4697
 
4698
- #: app/views/clicks/list.php:87
4699
- #: app/views/clicks/list.php:178
4700
- msgid "Timestamp"
4701
  msgstr ""
4702
 
4703
- #: app/views/clicks/list.php:91
4704
- #: app/views/clicks/list.php:180
4705
- msgid "Host"
4706
  msgstr ""
4707
 
4708
- #: app/views/clicks/list.php:95
4709
- #: app/views/clicks/list.php:182
4710
- msgid "URI"
4711
  msgstr ""
4712
 
4713
- #: app/views/clicks/list.php:98
4714
- #: app/views/clicks/list.php:183
4715
- msgid "Referrer"
4716
  msgstr ""
4717
 
4718
- #: app/views/clicks/list.php:111
4719
- msgid "No Clicks have been recorded yet"
4720
  msgstr ""
4721
 
4722
- #: app/views/clicks/list.php:147
4723
- msgid "View All Activity for IP Address: %s"
4724
  msgstr ""
4725
 
4726
- #: app/views/clicks/list.php:150
4727
- msgid "View All Activity for Visitor: %s"
4728
  msgstr ""
4729
 
4730
- #: app/views/clicks/list.php:190
4731
- msgid "Download CSV"
4732
  msgstr ""
4733
 
4734
- #: app/views/clicks/csv_download.php:3
4735
- msgid "Download Clicks"
4736
  msgstr ""
4737
 
4738
- #: app/views/clicks/csv_download.php:6
4739
- msgid "Click Reports:"
4740
  msgstr ""
4741
 
4742
- #: app/views/clicks/csv_download.php:7
4743
- msgid "All clicks on %s"
4744
  msgstr ""
4745
 
4746
- #: app/views/clicks/csv_download.php:24
4747
- msgid "Clicks %d-%d (%d Records)"
4748
  msgstr ""
4749
 
4750
- #: app/controllers/PrliUpdateController.php:74
4751
- msgid "Why you creepin'?"
4752
  msgstr ""
4753
 
4754
- #: app/controllers/PrliUpdateController.php:318
4755
- msgid "Check for Update"
4756
  msgstr ""
4757
 
4758
- #: app/controllers/PrliUpdateController.php:387
4759
- msgid "You had an HTTP error connecting to Caseproof's Mothership API"
4760
  msgstr ""
4761
 
4762
- #: app/controllers/PrliUpdateController.php:399
4763
- msgid "Your License Key was invalid"
4764
  msgstr ""
4765
 
4766
- #: app/controllers/PrliUpdateController.php:425
4767
- msgid "You do not have access."
4768
  msgstr ""
4769
 
4770
- #: app/controllers/PrliUpdateController.php:429
4771
- msgid "Edge updates couldn't be updated."
4772
  msgstr ""
4773
 
4774
- #: app/controllers/PrliUpdateController.php:492
4775
- #: app/controllers/PrliLinksController.php:166
4776
- #: app/controllers/PrliAppController.php:134
4777
- msgid "Link Categories"
4778
  msgstr ""
4779
 
4780
- #: app/controllers/PrliUpdateController.php:498
4781
- #: app/controllers/PrliLinksController.php:167
4782
- #: app/controllers/PrliAppController.php:142
4783
- msgid "Link Tags"
4784
  msgstr ""
4785
 
4786
- #: app/controllers/PrliToolsController.php:94
4787
- msgid "Click Database was Cleared."
4788
  msgstr ""
4789
 
4790
- #: app/controllers/PrliToolsController.php:100
4791
- msgid "Clicks older than %1$d days (%2$d Clicks) were deleted"
4792
  msgstr ""
4793
 
4794
- #: app/controllers/PrliToolsController.php:103
4795
- msgid "No clicks older than %1$d days were found, so nothing was deleted"
4796
  msgstr ""
4797
 
4798
- #: app/controllers/PrliClicksController.php:90
4799
- msgid "IP Address: "
4800
  msgstr ""
4801
 
4802
- #: app/controllers/PrliClicksController.php:95
4803
- msgid "Visitor: "
4804
  msgstr ""
4805
 
4806
- #: app/controllers/PrliClicksController.php:100
4807
- msgid "All Links"
4808
  msgstr ""
4809
 
4810
- #: app/controllers/PrliXmlRpcController.php:36
4811
- #: app/controllers/PrliXmlRpcController.php:103
4812
- #: app/controllers/PrliXmlRpcController.php:152
4813
- #: app/controllers/PrliXmlRpcController.php:209
4814
- #: app/controllers/PrliXmlRpcController.php:238
4815
- #: app/controllers/PrliXmlRpcController.php:266
4816
- #: app/controllers/PrliXmlRpcController.php:299
4817
- #: app/controllers/PrliXmlRpcController.php:331
4818
- msgid "Sorry, XML-RPC Not enabled for this website"
4819
  msgstr ""
4820
 
4821
- #: app/controllers/PrliXmlRpcController.php:39
4822
- #: app/controllers/PrliXmlRpcController.php:106
4823
- #: app/controllers/PrliXmlRpcController.php:155
4824
- #: app/controllers/PrliXmlRpcController.php:212
4825
- #: app/controllers/PrliXmlRpcController.php:241
4826
- #: app/controllers/PrliXmlRpcController.php:269
4827
- #: app/controllers/PrliXmlRpcController.php:302
4828
- #: app/controllers/PrliXmlRpcController.php:334
4829
- msgid "Sorry, Login failed"
4830
  msgstr ""
4831
 
4832
- #: app/controllers/PrliXmlRpcController.php:45
4833
- #: app/controllers/PrliXmlRpcController.php:112
4834
- #: app/controllers/PrliXmlRpcController.php:161
4835
- #: app/controllers/PrliXmlRpcController.php:218
4836
- #: app/controllers/PrliXmlRpcController.php:247
4837
- #: app/controllers/PrliXmlRpcController.php:275
4838
- #: app/controllers/PrliXmlRpcController.php:308
4839
- #: app/controllers/PrliXmlRpcController.php:340
4840
- msgid "Sorry, you must be an administrator to access this resource"
4841
  msgstr ""
4842
 
4843
- #: app/controllers/PrliXmlRpcController.php:116
4844
- msgid "You must provide a target URL"
4845
  msgstr ""
4846
 
4847
- #: app/controllers/PrliXmlRpcController.php:144
4848
- #: app/controllers/PrliXmlRpcController.php:194
4849
- msgid "There was an error creating your Pretty Link"
4850
  msgstr ""
4851
 
4852
- #: app/controllers/PrliXmlRpcController.php:165
4853
- msgid "You must provide the id of the link you want to update"
4854
  msgstr ""
4855
 
4856
- #: app/controllers/PrliXmlRpcController.php:223
4857
- msgid "There was an error fetching the Pretty Link Groups"
4858
  msgstr ""
4859
 
4860
- #: app/controllers/PrliXmlRpcController.php:252
4861
- msgid "There was an error fetching the Pretty Links"
4862
  msgstr ""
4863
 
4864
- #: app/controllers/PrliXmlRpcController.php:278
4865
- msgid "Sorry, you must provide a slug to lookup"
4866
  msgstr ""
4867
 
4868
- #: app/controllers/PrliXmlRpcController.php:285
4869
- #: app/controllers/PrliXmlRpcController.php:318
4870
- msgid "There was an error fetching your Pretty Link"
4871
  msgstr ""
4872
 
4873
- #: app/controllers/PrliXmlRpcController.php:311
4874
- #: app/controllers/PrliXmlRpcController.php:343
4875
- msgid "Sorry, you must provide an id to lookup"
4876
  msgstr ""
4877
 
4878
- #: app/controllers/PrliXmlRpcController.php:350
4879
- msgid "There was an error fetching your Pretty Link URL"
4880
  msgstr ""
4881
 
4882
- #: app/controllers/PrliOptionsController.php:62
4883
- msgid "Options saved."
4884
  msgstr ""
4885
 
4886
- #: app/controllers/PrliOptionsController.php:76
4887
- msgid "Excluded IP Addresses must be a comma separated list of IPv4 or IPv6 addresses or ranges."
4888
  msgstr ""
4889
 
4890
- #: app/controllers/PrliOptionsController.php:80
4891
- msgid "Whitelist IP Addresses must be a comma separated list of IPv4 or IPv6 addresses or ranges."
4892
  msgstr ""
4893
 
4894
- #: app/controllers/PrliPopupController.php:63
4895
- msgid "An unknown error occurred."
4896
  msgstr ""
4897
 
4898
- #: app/controllers/PrliPopupController.php:93
4899
- #: app/controllers/PrliLinksController.php:432
4900
- #: app/controllers/PrliLinksController.php:774
4901
- msgid "Forbidden"
4902
  msgstr ""
4903
 
4904
- #: app/controllers/PrliPopupController.php:97
4905
- msgid "Must specify a popup"
4906
  msgstr ""
4907
 
4908
- #: app/controllers/PrliPopupController.php:103
4909
- msgid "Invalid popup"
4910
  msgstr ""
4911
 
4912
- #: app/controllers/PrliPopupController.php:108
4913
- msgid "The popup was successfully delayed"
4914
  msgstr ""
4915
 
4916
- #: app/controllers/PrliPopupController.php:112
4917
- msgid "The popup was successfully stopped"
4918
  msgstr ""
4919
 
4920
- #: app/controllers/PrliLocalApiController.php:103
4921
- #: app/controllers/PrliLocalApiController.php:167
4922
- msgid "An error prevented your Pretty Link from being created"
4923
  msgstr ""
4924
 
4925
- #: app/controllers/PrliLocalApiController.php:128
4926
- msgid "Pretty Link ID must be set for successful update."
4927
  msgstr ""
4928
 
4929
- #: app/controllers/PrliFlyoutMenuController.php:34
4930
- msgid "See Quick Links"
4931
  msgstr ""
4932
 
4933
- #: app/controllers/PrliFlyoutMenuController.php:86
4934
- msgid "Support & Docs"
4935
  msgstr ""
4936
 
4937
- #: app/controllers/PrliFlyoutMenuController.php:91
4938
- msgid "Suggest a Feature"
4939
  msgstr ""
4940
 
4941
- #: app/controllers/PrliLinksController.php:60
4942
- msgid "Add New Pretty Link"
4943
  msgstr ""
4944
 
4945
- #: app/controllers/PrliLinksController.php:61
4946
- msgid "Edit Pretty Link"
4947
  msgstr ""
4948
 
4949
- #: app/controllers/PrliLinksController.php:62
4950
- #: js/editor/components/link-editor/index.js:379
4951
- #: js/editor.js:12
4952
- msgid "New Pretty Link"
4953
  msgstr ""
4954
 
4955
- #: app/controllers/PrliLinksController.php:63
4956
- msgid "View Pretty Link"
4957
  msgstr ""
4958
 
4959
- #: app/controllers/PrliLinksController.php:64
4960
- msgid "Search Pretty Links"
4961
  msgstr ""
4962
 
4963
- #: app/controllers/PrliLinksController.php:65
4964
- msgid "No Pretty Links found"
4965
  msgstr ""
4966
 
4967
- #: app/controllers/PrliLinksController.php:66
4968
- msgid "No Pretty Links found in Trash"
4969
  msgstr ""
4970
 
4971
- #: app/controllers/PrliLinksController.php:67
4972
- msgid "Parent Pretty Link:"
4973
  msgstr ""
4974
 
4975
- #: app/controllers/PrliLinksController.php:128
4976
- msgid "Pretty Link Settings"
4977
  msgstr ""
4978
 
4979
- #: app/controllers/PrliLinksController.php:136
4980
- msgid "Advanced Features"
4981
  msgstr ""
4982
 
4983
- #: app/controllers/PrliLinksController.php:163
4984
- msgid "Auto Create Pretty Links"
4985
  msgstr ""
4986
 
4987
- #: app/controllers/PrliLinksController.php:164
4988
- msgid "Auto-Link Keywords"
4989
  msgstr ""
4990
 
4991
- #: app/controllers/PrliLinksController.php:165
4992
- msgid "Support & Updates"
4993
  msgstr ""
4994
 
4995
- #: app/controllers/PrliLinksController.php:168
4996
- msgid "Plus Much More!"
4997
  msgstr ""
4998
 
4999
- #: app/controllers/PrliLinksController.php:170
5000
- msgid "Tell Me More"
5001
  msgstr ""
5002
 
5003
- #: app/controllers/PrliLinksController.php:350
5004
- msgid "Pretty Link updated."
5005
  msgstr ""
5006
 
5007
- #: app/controllers/PrliLinksController.php:352
5008
- msgid "Pretty Link created."
5009
  msgstr ""
5010
 
5011
- #: app/controllers/PrliLinksController.php:420
5012
- msgid "Pretty Link Cleanup Visitor Locks"
5013
  msgstr ""
5014
 
5015
- #: app/controllers/PrliLinksController.php:441
5016
- msgid "Success!"
5017
  msgstr ""
5018
 
5019
- #: app/controllers/PrliLinksController.php:443
5020
- msgid "Fix the following errors:"
5021
  msgstr ""
5022
 
5023
- #: app/controllers/PrliLinksController.php:477
5024
- msgid "Upgrade to a Pretty Links premium plan to get Link Categories"
5025
  msgstr ""
5026
 
5027
- #: app/controllers/PrliLinksController.php:483
5028
- msgid "Upgrade to a Pretty Links premium plan to get Link Tags"
5029
  msgstr ""
5030
 
5031
- #: app/controllers/PrliLinksController.php:489
5032
- msgid "Upgrade to a Pretty Links premium plan to get Keyword Replacements"
5033
  msgstr ""
5034
 
5035
- #: app/controllers/PrliLinksController.php:497
5036
- msgid "Settings"
5037
  msgstr ""
5038
 
5039
- #: app/controllers/PrliLinksController.php:498
5040
- msgid "Link Title"
5041
  msgstr ""
5042
 
5043
- #: app/controllers/PrliLinksController.php:500
5044
- msgid "Target"
5045
  msgstr ""
5046
 
5047
- #: app/controllers/PrliLinksController.php:609
5048
- #: app/controllers/PrliLinksController.php:616
5049
- #: app/controllers/PrliLinksController.php:623
5050
- msgid "No Change"
5051
  msgstr ""
5052
 
5053
- #: app/controllers/PrliLinksController.php:730
5054
- msgid "Tweet"
5055
  msgstr ""
5056
 
5057
- #: app/controllers/PrliLinksController.php:732
5058
- msgid "Target &raquo;"
5059
  msgstr ""
5060
 
5061
- #: app/controllers/PrliLinksController.php:733
5062
- msgid "Pretty Link &raquo;"
5063
  msgstr ""
5064
 
5065
- #: app/controllers/PrliLinksController.php:755
5066
- #: app/controllers/PrliLinksController.php:756
5067
- msgid "View Split Test Report"
5068
  msgstr ""
5069
 
5070
- #: app/controllers/PrliLinksController.php:780
5071
- msgid "Your Pretty Link was Successfully Reset"
5072
  msgstr ""
5073
 
5074
- #: app/controllers/PrliLinksController.php:788
5075
- msgid "Bad request"
5076
  msgstr ""
5077
 
5078
- #: app/controllers/PrliLinksController.php:792
5079
- msgid "Insufficient permissions"
5080
  msgstr ""
5081
 
5082
- #: app/controllers/PrliLinksController.php:825
5083
- msgid "An error occurred creating the link"
5084
  msgstr ""
5085
 
5086
- #: app/controllers/PrliLinksController.php:862
5087
- msgid "All Groups (Legacy)"
5088
  msgstr ""
5089
 
5090
- #: app/controllers/PrliAppController.php:84
5091
- msgid "You're using Pretty Links Lite. To unlock more features, consider <a href=\"https://prettylinks.com/pl/main-menu/upgrade?plugin-upgrade-header\">upgrading to Pro.</a>"
5092
  msgstr ""
5093
 
5094
- #: app/controllers/PrliAppController.php:168
5095
- msgid "Pretty Links | Clicks"
5096
  msgstr ""
5097
 
5098
- #: app/controllers/PrliAppController.php:172
5099
- msgid "Pretty Links | Tools"
5100
  msgstr ""
5101
 
5102
- #: app/controllers/PrliAppController.php:175
5103
- msgid "Pretty Links | Options"
5104
  msgstr ""
5105
 
5106
- #: app/controllers/PrliAppController.php:179
5107
- #: app/controllers/PrliAppController.php:182
5108
- #: app/controllers/PrliAppController.php:319
5109
- msgid "Activate"
5110
  msgstr ""
5111
 
5112
- #: app/controllers/PrliAppController.php:185
5113
- msgid "Upgrade"
5114
  msgstr ""
5115
 
5116
- #: app/controllers/PrliAppController.php:190
5117
- msgid "Welcome"
5118
  msgstr ""
5119
 
5120
- #: app/controllers/PrliAppController.php:318
5121
- #: app/controllers/PrliAppController.php:324
5122
- #: app/controllers/PrliAppController.php:329
5123
- msgid "Docs"
5124
  msgstr ""
5125
 
5126
- #: app/controllers/PrliAppController.php:322
5127
- #: app/controllers/PrliAppController.php:328
5128
- msgid "Activate Pro License"
5129
  msgstr ""
5130
 
5131
- #: app/controllers/PrliAppController.php:323
5132
- msgid "Buy"
5133
  msgstr ""
5134
 
5135
- #: app/controllers/PrliAppController.php:431
5136
- msgid "Copy to Clipboard"
5137
  msgstr ""
5138
 
5139
- #: app/controllers/PrliAppController.php:432
5140
- msgid "Copied!"
5141
  msgstr ""
5142
 
5143
- #: app/controllers/PrliAppController.php:433
5144
- msgid "Oops, Copy Failed!"
5145
  msgstr ""
5146
 
5147
- #: app/controllers/PrliAppController.php:457
5148
- msgid "Are you sure you want to reset your Pretty Link? This will delete all of the statistical data about this Pretty Link in your database."
5149
  msgstr ""
5150
 
5151
- #. translators: %1$s: br tag, %2$s: open link tag, %3$s: close link tag
5152
- #: app/controllers/PrliAppController.php:562
5153
- msgid "You're almost done!%1$s%2$sFinish your Re-Install of Pretty Links Pro%3$s"
5154
  msgstr ""
5155
 
5156
- #: app/controllers/PrliAppController.php:577
5157
- msgid "Pretty Links Pro Successfully Uninstalled."
5158
  msgstr ""
5159
 
5160
- #: app/controllers/PrliAppController.php:626
5161
- msgid "Invalid server response"
5162
  msgstr ""
5163
 
5164
- #: app/controllers/PrliAppController.php:627
5165
- msgid "Ajax error"
5166
  msgstr ""
5167
 
5168
- #: app/controllers/PrliAppController.php:644
5169
- msgid "Pretty Link Quick Add"
5170
  msgstr ""
5171
 
5172
- #: app/controllers/PrliAppController.php:683
5173
- msgid "Your Pretty Links Pro installation isn't quite complete yet. %1$sAutomatically Upgrade to Enable Pretty Links Pro%2$s"
5174
  msgstr ""
5175
 
5176
- #: app/controllers/PrliAppController.php:704
5177
- msgid "Your Pretty Links Pro installation isn't quite complete yet.<br/>%1$sAutomatically Upgrade to Enable Pretty Links Pro%2$s"
5178
  msgstr ""
5179
 
5180
- #. translators: $1$s - Pretty Links plugin name; $2$s - WP.org review link; $3$s - WP.org review link.
5181
- #: app/controllers/PrliAppController.php:752
5182
- msgid "Enjoying %1$s? Please rate <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href=\"%3$s\" target=\"_blank\" rel=\"noopener\">WordPress.org</a> to help us spread the word. Thanks from the Pretty Links team!"
5183
  msgstr ""
5184
 
5185
- #: app/controllers/PrliReviewNoticeController.php:60
5186
- msgid "That's awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?"
5187
  msgstr ""
5188
 
5189
- #: app/controllers/PrliReviewNoticeController.php:63
5190
- msgid "Okay, you deserve it"
5191
  msgstr ""
5192
 
5193
- #: app/controllers/PrliReviewNoticeController.php:64
5194
- msgid "Nope, maybe later"
5195
  msgstr ""
5196
 
5197
- #: app/controllers/PrliReviewNoticeController.php:65
5198
- msgid "I already did"
5199
  msgstr ""
5200
 
5201
- #: app/controllers/PrliReviewNoticeController.php:69
5202
- msgid "We're sorry to hear you aren't enjoying Pretty Links. We would love a chance to improve. Could you take a minute and let us know what we can do better?"
5203
  msgstr ""
5204
 
5205
- #: app/controllers/PrliReviewNoticeController.php:71
5206
- msgid "Give Feedback"
5207
  msgstr ""
5208
 
5209
- #: app/controllers/PrliReviewNoticeController.php:72
5210
- msgid "No thanks"
5211
  msgstr ""
1
+ # Copyright (C) 2021 Pretty Links
2
  # This file is distributed under the same license as the Pretty Links plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Pretty Links 3.2.2\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pretty-link\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2021-03-25T16:54:09+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
+ "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: pretty-link\n"
16
 
17
  #. Plugin Name of the plugin
18
  #. Author of the plugin
 
19
  #: app/controllers/PrliLinksController.php:58
20
  #: app/controllers/PrliLinksController.php:506
21
+ #: pro/app/views/links/prettybar.php:68
22
  msgid "Pretty Links"
23
  msgstr ""
24
 
34
  msgid "http://prettylinks.com"
35
  msgstr ""
36
 
37
+ #: app/controllers/PrliAppController.php:84
38
+ msgid "You're using Pretty Links Lite. To unlock more features, consider <a href=\"https://prettylinks.com/pl/main-menu/upgrade?plugin-upgrade-header\">upgrading to Pro.</a>"
 
39
  msgstr ""
40
 
41
+ #: app/controllers/PrliAppController.php:134
42
+ #: app/controllers/PrliLinksController.php:166
43
+ #: app/controllers/PrliUpdateController.php:492
44
+ msgid "Link Categories"
45
  msgstr ""
46
 
47
+ #: app/controllers/PrliAppController.php:135
48
+ #: app/controllers/PrliLinksController.php:465
49
+ #: pro/app/controllers/PlpLinkCategoriesController.php:25
50
+ msgid "Categories"
51
  msgstr ""
52
 
53
+ #: app/controllers/PrliAppController.php:142
54
+ #: app/controllers/PrliLinksController.php:167
55
+ #: app/controllers/PrliUpdateController.php:498
56
+ msgid "Link Tags"
57
+ msgstr ""
58
+
59
+ #: app/controllers/PrliAppController.php:143
60
+ #: app/controllers/PrliLinksController.php:466
61
+ #: pro/app/controllers/PlpLinkTagsController.php:29
62
+ msgid "Tags"
63
+ msgstr ""
64
+
65
+ #: app/controllers/PrliAppController.php:150
66
+ #: app/controllers/PrliUpdateController.php:504
67
+ #: pro/app/views/reports/list.php:4
68
+ #: pro/app/views/reports/reports.php:7
69
+ msgid "Link Reports"
70
+ msgstr ""
71
+
72
+ #: app/controllers/PrliAppController.php:151
73
+ #: pro/app/controllers/PlpReportsController.php:15
74
+ #: pro/app/views/reports/reports.php:4
75
+ msgid "Reports"
76
+ msgstr ""
77
+
78
+ #: app/controllers/PrliAppController.php:158
79
+ #: app/controllers/PrliAppController.php:159
80
+ #: app/controllers/PrliUpdateController.php:510
81
+ #: pro/app/controllers/PlpImportExportController.php:15
82
+ msgid "Import / Export"
83
+ msgstr ""
84
+
85
+ #: app/controllers/PrliAppController.php:168
86
+ msgid "Pretty Links | Clicks"
87
  msgstr ""
88
 
89
+ #: app/controllers/PrliAppController.php:168
90
+ #: app/controllers/PrliLinksController.php:504
91
+ #: app/models/PrliClick.php:256
92
+ #: app/views/clicks/list.php:4
93
+ #: app/views/groups/list.php:81
94
  #: pro/app/helpers/PlpPostsHelper.php:61
95
  #: pro/app/views/links/form.php:39
96
  #: pro/app/views/links/form.php:49
 
 
97
  #: pro/app/views/reports/custom-report.php:31
98
  #: pro/app/views/reports/custom-report.php:64
99
+ #: pro/app/views/reports/split-test-report.php:28
100
+ #: pro/app/views/reports/split-test-report.php:60
 
 
 
101
  msgid "Clicks"
102
  msgstr ""
103
 
104
+ #: app/controllers/PrliAppController.php:172
105
+ msgid "Pretty Links | Tools"
 
 
 
 
106
  msgstr ""
107
 
108
+ #: app/controllers/PrliAppController.php:172
109
+ #: app/views/tools/form.php:3
110
+ msgid "Tools"
111
  msgstr ""
112
 
113
+ #: app/controllers/PrliAppController.php:175
114
+ msgid "Pretty Links | Options"
115
  msgstr ""
116
 
117
+ #: app/controllers/PrliAppController.php:175
118
+ #: app/views/options/form.php:3
119
+ msgid "Options"
120
  msgstr ""
121
 
122
+ #: app/controllers/PrliAppController.php:179
123
+ #: app/controllers/PrliAppController.php:182
124
+ #: app/controllers/PrliAppController.php:319
125
+ msgid "Activate"
126
  msgstr ""
127
 
128
+ #: app/controllers/PrliAppController.php:185
129
+ msgid "Upgrade"
130
  msgstr ""
131
 
132
+ #: app/controllers/PrliAppController.php:190
133
+ msgid "Welcome"
134
  msgstr ""
135
 
136
+ #: app/controllers/PrliAppController.php:318
137
+ #: app/controllers/PrliAppController.php:324
138
+ #: app/controllers/PrliAppController.php:329
139
+ msgid "Docs"
140
  msgstr ""
141
 
142
+ #: app/controllers/PrliAppController.php:322
143
+ #: app/controllers/PrliAppController.php:328
144
+ msgid "Activate Pro License"
 
145
  msgstr ""
146
 
147
+ #: app/controllers/PrliAppController.php:323
148
+ msgid "Buy"
149
  msgstr ""
150
 
151
+ #: app/controllers/PrliAppController.php:327
152
+ #: app/views/admin/update/license.php:39
153
+ #: app/views/shared/nav.php:9
154
+ msgid "Upgrade to Pro"
155
  msgstr ""
156
 
157
+ #: app/controllers/PrliAppController.php:429
158
+ #: app/views/groups/edit.php:72
159
+ #: app/views/options/form.php:1082
160
+ #: pro/app/views/reports/edit.php:66
161
+ msgid "Update"
162
  msgstr ""
163
 
164
+ #: app/controllers/PrliAppController.php:431
165
+ msgid "Copy to Clipboard"
166
  msgstr ""
167
 
168
+ #: app/controllers/PrliAppController.php:432
169
+ msgid "Copied!"
170
  msgstr ""
171
 
172
+ #: app/controllers/PrliAppController.php:433
173
+ msgid "Oops, Copy Failed!"
174
  msgstr ""
175
 
176
+ #: app/controllers/PrliAppController.php:457
177
+ msgid "Are you sure you want to reset your Pretty Link? This will delete all of the statistical data about this Pretty Link in your database."
178
  msgstr ""
179
 
180
+ #. translators: %1$s: br tag, %2$s: open link tag, %3$s: close link tag
181
+ #: app/controllers/PrliAppController.php:562
182
+ msgid "You're almost done!%1$s%2$sFinish your Re-Install of Pretty Links Pro%3$s"
183
  msgstr ""
184
 
185
+ #: app/controllers/PrliAppController.php:577
186
+ msgid "Pretty Links Pro Successfully Uninstalled."
187
  msgstr ""
188
 
189
+ #: app/controllers/PrliAppController.php:626
190
+ msgid "Invalid server response"
 
191
  msgstr ""
192
 
193
+ #: app/controllers/PrliAppController.php:627
194
+ msgid "Ajax error"
195
  msgstr ""
196
 
197
+ #: app/controllers/PrliAppController.php:644
198
+ msgid "Pretty Link Quick Add"
199
  msgstr ""
200
 
201
+ #: app/controllers/PrliAppController.php:683
202
+ msgid "Your Pretty Links Pro installation isn't quite complete yet. %1$sAutomatically Upgrade to Enable Pretty Links Pro%2$s"
203
  msgstr ""
204
 
205
+ #: app/controllers/PrliAppController.php:704
206
+ msgid "Your Pretty Links Pro installation isn't quite complete yet.<br/>%1$sAutomatically Upgrade to Enable Pretty Links Pro%2$s"
207
  msgstr ""
208
 
209
+ #. translators: $1$s - Pretty Links plugin name; $2$s - WP.org review link; $3$s - WP.org review link.
210
+ #: app/controllers/PrliAppController.php:752
211
+ msgid "Enjoying %1$s? Please rate <a href=\"%2$s\" target=\"_blank\" rel=\"noopener noreferrer\">&#9733;&#9733;&#9733;&#9733;&#9733;</a> on <a href=\"%3$s\" target=\"_blank\" rel=\"noopener\">WordPress.org</a> to help us spread the word. Thanks from the Pretty Links team!"
212
  msgstr ""
213
 
214
+ #: app/controllers/PrliClicksController.php:90
215
+ msgid "IP Address: "
216
  msgstr ""
217
 
218
+ #: app/controllers/PrliClicksController.php:95
219
+ msgid "Visitor: "
 
 
220
  msgstr ""
221
 
222
+ #: app/controllers/PrliClicksController.php:100
223
+ msgid "All Links"
 
 
 
224
  msgstr ""
225
 
226
+ #: app/controllers/PrliFlyoutMenuController.php:34
227
+ msgid "See Quick Links"
 
 
 
 
228
  msgstr ""
229
 
230
+ #: app/controllers/PrliFlyoutMenuController.php:79
231
+ #: app/views/admin/popups/upgrade.php:23
232
+ msgid "Upgrade to Pretty Links Pro"
 
 
 
233
  msgstr ""
234
 
235
+ #: app/controllers/PrliFlyoutMenuController.php:86
236
+ msgid "Support & Docs"
 
 
 
 
 
237
  msgstr ""
238
 
239
+ #: app/controllers/PrliFlyoutMenuController.php:91
240
+ msgid "Suggest a Feature"
241
  msgstr ""
242
 
243
+ #: app/controllers/PrliLinksController.php:59
244
+ #: app/helpers/PrliLinksHelper.php:171
245
+ #: app/views/links/form_basic.php:48
246
+ #: app/views/shared/tinymce_form_popup.php:86
247
+ #: app/views/widgets/widget.php:15
248
+ msgid "Pretty Link"
249
  msgstr ""
250
 
251
+ #: app/controllers/PrliLinksController.php:60
252
+ msgid "Add New Pretty Link"
 
 
 
253
  msgstr ""
254
 
255
+ #: app/controllers/PrliLinksController.php:61
256
+ msgid "Edit Pretty Link"
 
 
 
257
  msgstr ""
258
 
259
+ #: app/controllers/PrliLinksController.php:62
260
+ #: js/editor.js:12
261
+ #: js/editor/components/link-editor/index.js:379
262
+ msgid "New Pretty Link"
263
  msgstr ""
264
 
265
+ #: app/controllers/PrliLinksController.php:63
266
+ msgid "View Pretty Link"
 
 
 
267
  msgstr ""
268
 
269
+ #: app/controllers/PrliLinksController.php:64
270
+ msgid "Search Pretty Links"
 
271
  msgstr ""
272
 
273
+ #: app/controllers/PrliLinksController.php:65
274
+ msgid "No Pretty Links found"
 
 
 
275
  msgstr ""
276
 
277
+ #: app/controllers/PrliLinksController.php:66
278
+ msgid "No Pretty Links found in Trash"
279
  msgstr ""
280
 
281
+ #: app/controllers/PrliLinksController.php:67
282
+ msgid "Parent Pretty Link:"
 
283
  msgstr ""
284
 
285
+ #: app/controllers/PrliLinksController.php:128
286
+ msgid "Pretty Link Settings"
 
287
  msgstr ""
288
 
289
+ #: app/controllers/PrliLinksController.php:136
290
+ msgid "Advanced Features"
 
291
  msgstr ""
292
 
293
+ #: app/controllers/PrliLinksController.php:162
294
+ #: app/views/admin/onboarding/welcome.php:96
295
+ msgid "Advanced Redirect Types"
 
 
296
  msgstr ""
297
 
298
+ #: app/controllers/PrliLinksController.php:163
299
+ msgid "Auto Create Pretty Links"
 
 
300
  msgstr ""
301
 
302
+ #: app/controllers/PrliLinksController.php:164
303
+ msgid "Auto-Link Keywords"
 
304
  msgstr ""
305
 
306
+ #: app/controllers/PrliLinksController.php:165
307
+ msgid "Support & Updates"
 
308
  msgstr ""
309
 
310
+ #: app/controllers/PrliLinksController.php:168
311
+ msgid "Plus Much More!"
 
312
  msgstr ""
313
 
314
+ #: app/controllers/PrliLinksController.php:170
315
+ msgid "Tell Me More"
316
  msgstr ""
317
 
318
+ #: app/controllers/PrliLinksController.php:350
319
+ msgid "Pretty Link updated."
320
  msgstr ""
321
 
322
+ #: app/controllers/PrliLinksController.php:352
323
+ msgid "Pretty Link created."
 
324
  msgstr ""
325
 
326
+ #: app/controllers/PrliLinksController.php:420
327
+ msgid "Pretty Link Cleanup Visitor Locks"
 
 
 
328
  msgstr ""
329
 
330
+ #: app/controllers/PrliLinksController.php:432
331
+ #: app/controllers/PrliLinksController.php:774
332
+ #: app/controllers/PrliPopupController.php:93
333
+ msgid "Forbidden"
334
  msgstr ""
335
 
336
+ #: app/controllers/PrliLinksController.php:441
337
+ msgid "Success!"
 
338
  msgstr ""
339
 
340
+ #: app/controllers/PrliLinksController.php:443
341
+ msgid "Fix the following errors:"
342
  msgstr ""
343
 
344
+ #: app/controllers/PrliLinksController.php:467
345
+ #: app/views/links/form_pro.php:32
346
+ #: pro/app/views/links/form.php:133
347
+ msgid "Keywords"
348
  msgstr ""
349
 
350
+ #: app/controllers/PrliLinksController.php:477
351
+ msgid "Upgrade to a Pretty Links premium plan to get Link Categories"
352
  msgstr ""
353
 
354
+ #: app/controllers/PrliLinksController.php:479
355
+ #: app/controllers/PrliLinksController.php:485
356
+ #: app/controllers/PrliLinksController.php:491
357
+ #: app/helpers/PrliAppHelper.php:20
358
+ #: app/views/links/form.php:30
359
+ msgid "Pro"
360
  msgstr ""
361
 
362
+ #: app/controllers/PrliLinksController.php:483
363
+ msgid "Upgrade to a Pretty Links premium plan to get Link Tags"
 
364
  msgstr ""
365
 
366
+ #: app/controllers/PrliLinksController.php:489
367
+ msgid "Upgrade to a Pretty Links premium plan to get Keyword Replacements"
 
368
  msgstr ""
369
 
370
+ #: app/controllers/PrliLinksController.php:497
371
+ msgid "Settings"
372
  msgstr ""
373
 
374
+ #: app/controllers/PrliLinksController.php:498
375
+ msgid "Link Title"
376
  msgstr ""
377
 
378
+ #: app/controllers/PrliLinksController.php:500
379
+ msgid "Target"
 
 
380
  msgstr ""
381
 
382
+ #: app/controllers/PrliLinksController.php:505
383
+ #: app/models/PrliClick.php:256
384
+ #: pro/app/views/links/form.php:38
385
+ #: pro/app/views/links/form.php:73
386
+ msgid "Date"
387
  msgstr ""
388
 
389
+ #: app/controllers/PrliLinksController.php:607
390
+ #: app/views/links/form_advanced.php:6
391
+ msgid "No Follow"
392
  msgstr ""
393
 
394
+ #: app/controllers/PrliLinksController.php:609
395
+ #: app/controllers/PrliLinksController.php:616
396
+ #: app/controllers/PrliLinksController.php:623
397
+ msgid "No Change"
398
  msgstr ""
399
 
400
+ #: app/controllers/PrliLinksController.php:610
401
+ #: app/controllers/PrliLinksController.php:617
402
+ #: app/controllers/PrliLinksController.php:624
403
+ #: app/views/shared/tinymce_form_popup.php:49
404
+ #: app/views/shared/tinymce_form_popup.php:57
405
+ #: app/views/shared/tinymce_form_popup.php:65
406
+ msgid "Enabled"
407
  msgstr ""
408
 
409
+ #: app/controllers/PrliLinksController.php:611
410
+ #: app/controllers/PrliLinksController.php:618
411
+ #: app/controllers/PrliLinksController.php:625
412
+ #: app/views/shared/tinymce_form_popup.php:50
413
+ #: app/views/shared/tinymce_form_popup.php:58
414
+ #: app/views/shared/tinymce_form_popup.php:66
415
+ msgid "Disabled"
416
  msgstr ""
417
 
418
+ #: app/controllers/PrliLinksController.php:614
419
+ #: app/views/links/form_advanced.php:19
420
+ #: app/views/shared/tinymce_form_popup.php:54
421
+ msgid "Sponsored"
 
422
  msgstr ""
423
 
424
+ #: app/controllers/PrliLinksController.php:621
425
+ #: app/views/links/form_advanced.php:58
426
+ #: app/views/links/form_advanced.php:61
427
+ #: app/views/shared/tinymce_form_popup.php:62
428
+ msgid "Tracking"
429
  msgstr ""
430
 
431
+ #: app/controllers/PrliLinksController.php:727
432
+ #: app/views/clicks/list.php:64
433
+ #: app/views/groups/list.php:24
434
+ #: pro/app/views/reports/list.php:20
435
+ msgid "Reset"
436
  msgstr ""
437
 
438
+ #: app/controllers/PrliLinksController.php:730
439
+ msgid "Tweet"
 
440
  msgstr ""
441
 
442
+ #: app/controllers/PrliLinksController.php:731
443
+ #: pro/app/models/PlpOptions.php:156
444
+ msgid "Email"
445
  msgstr ""
446
 
447
+ #: app/controllers/PrliLinksController.php:732
448
+ msgid "Target &raquo;"
 
 
 
 
 
 
 
 
449
  msgstr ""
450
 
451
+ #: app/controllers/PrliLinksController.php:733
452
+ msgid "Pretty Link &raquo;"
 
453
  msgstr ""
454
 
455
+ #: app/controllers/PrliLinksController.php:755
456
+ #: app/controllers/PrliLinksController.php:756
457
+ msgid "View Split Test Report"
458
  msgstr ""
459
 
460
+ #: app/controllers/PrliLinksController.php:780
461
+ msgid "Your Pretty Link was Successfully Reset"
 
462
  msgstr ""
463
 
464
+ #: app/controllers/PrliLinksController.php:788
465
+ msgid "Bad request"
 
466
  msgstr ""
467
 
468
+ #: app/controllers/PrliLinksController.php:792
469
+ msgid "Insufficient permissions"
 
470
  msgstr ""
471
 
472
+ #: app/controllers/PrliLinksController.php:796
473
+ #: pro/app/controllers/PlpPublicLinksController.php:37
474
+ msgid "Security check failed"
475
  msgstr ""
476
 
477
+ #: app/controllers/PrliLinksController.php:825
478
+ msgid "An error occurred creating the link"
479
  msgstr ""
480
 
481
+ #: app/controllers/PrliLinksController.php:862
482
+ msgid "All Groups (Legacy)"
483
  msgstr ""
484
 
485
+ #: app/controllers/PrliLocalApiController.php:103
486
+ #: app/controllers/PrliLocalApiController.php:167
487
+ msgid "An error prevented your Pretty Link from being created"
488
  msgstr ""
489
 
490
+ #: app/controllers/PrliLocalApiController.php:128
491
+ msgid "Pretty Link ID must be set for successful update."
492
  msgstr ""
493
 
494
+ #: app/controllers/PrliOptionsController.php:62
495
+ msgid "Options saved."
 
 
 
 
496
  msgstr ""
497
 
498
+ #: app/controllers/PrliOptionsController.php:76
499
+ msgid "Excluded IP Addresses must be a comma separated list of IPv4 or IPv6 addresses or ranges."
500
  msgstr ""
501
 
502
+ #: app/controllers/PrliOptionsController.php:80
503
+ msgid "Whitelist IP Addresses must be a comma separated list of IPv4 or IPv6 addresses or ranges."
504
  msgstr ""
505
 
506
+ #: app/controllers/PrliPopupController.php:63
507
+ msgid "An unknown error occurred."
508
  msgstr ""
509
 
510
+ #: app/controllers/PrliPopupController.php:97
511
+ msgid "Must specify a popup"
 
512
  msgstr ""
513
 
514
+ #: app/controllers/PrliPopupController.php:103
515
+ msgid "Invalid popup"
516
  msgstr ""
517
 
518
+ #: app/controllers/PrliPopupController.php:108
519
+ msgid "The popup was successfully delayed"
 
 
520
  msgstr ""
521
 
522
+ #: app/controllers/PrliPopupController.php:112
523
+ msgid "The popup was successfully stopped"
 
524
  msgstr ""
525
 
526
+ #: app/controllers/PrliReviewNoticeController.php:56
527
+ #: app/views/admin/popups/rating.php:8
528
+ msgid "Are you enjoying using Pretty Links?"
529
  msgstr ""
530
 
531
+ #: app/controllers/PrliReviewNoticeController.php:60
532
+ msgid "That's awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?"
 
533
  msgstr ""
534
 
535
+ #: app/controllers/PrliReviewNoticeController.php:63
536
+ msgid "Okay, you deserve it"
 
537
  msgstr ""
538
 
539
+ #: app/controllers/PrliReviewNoticeController.php:64
540
+ msgid "Nope, maybe later"
541
  msgstr ""
542
 
543
+ #: app/controllers/PrliReviewNoticeController.php:65
544
+ msgid "I already did"
 
 
545
  msgstr ""
546
 
547
+ #: app/controllers/PrliReviewNoticeController.php:69
548
+ msgid "We're sorry to hear you aren't enjoying Pretty Links. We would love a chance to improve. Could you take a minute and let us know what we can do better?"
549
  msgstr ""
550
 
551
+ #: app/controllers/PrliReviewNoticeController.php:71
552
+ msgid "Give Feedback"
553
  msgstr ""
554
 
555
+ #: app/controllers/PrliReviewNoticeController.php:72
556
+ msgid "No thanks"
557
  msgstr ""
558
 
559
+ #: app/controllers/PrliToolsController.php:94
560
+ msgid "Click Database was Cleared."
561
  msgstr ""
562
 
563
+ #: app/controllers/PrliToolsController.php:100
564
+ msgid "Clicks older than %1$d days (%2$d Clicks) were deleted"
565
  msgstr ""
566
 
567
+ #: app/controllers/PrliToolsController.php:103
568
+ msgid "No clicks older than %1$d days were found, so nothing was deleted"
569
  msgstr ""
570
 
571
+ #: app/controllers/PrliUpdateController.php:74
572
+ msgid "Why you creepin'?"
573
  msgstr ""
574
 
575
+ #: app/controllers/PrliUpdateController.php:318
576
+ msgid "Check for Update"
577
  msgstr ""
578
 
579
+ #: app/controllers/PrliUpdateController.php:387
580
+ msgid "You had an HTTP error connecting to Caseproof's Mothership API"
581
  msgstr ""
582
 
583
+ #: app/controllers/PrliUpdateController.php:399
584
+ msgid "Your License Key was invalid"
 
 
585
  msgstr ""
586
 
587
+ #: app/controllers/PrliUpdateController.php:425
588
+ msgid "You do not have access."
589
  msgstr ""
590
 
591
+ #: app/controllers/PrliUpdateController.php:429
592
+ msgid "Edge updates couldn't be updated."
593
  msgstr ""
594
 
595
+ #: app/controllers/PrliXmlRpcController.php:36
596
+ #: app/controllers/PrliXmlRpcController.php:103
597
+ #: app/controllers/PrliXmlRpcController.php:152
598
+ #: app/controllers/PrliXmlRpcController.php:209
599
+ #: app/controllers/PrliXmlRpcController.php:238
600
+ #: app/controllers/PrliXmlRpcController.php:266
601
+ #: app/controllers/PrliXmlRpcController.php:299
602
+ #: app/controllers/PrliXmlRpcController.php:331
603
+ msgid "Sorry, XML-RPC Not enabled for this website"
604
  msgstr ""
605
 
606
+ #: app/controllers/PrliXmlRpcController.php:39
607
+ #: app/controllers/PrliXmlRpcController.php:106
608
+ #: app/controllers/PrliXmlRpcController.php:155
609
+ #: app/controllers/PrliXmlRpcController.php:212
610
+ #: app/controllers/PrliXmlRpcController.php:241
611
+ #: app/controllers/PrliXmlRpcController.php:269
612
+ #: app/controllers/PrliXmlRpcController.php:302
613
+ #: app/controllers/PrliXmlRpcController.php:334
614
+ msgid "Sorry, Login failed"
615
  msgstr ""
616
 
617
+ #: app/controllers/PrliXmlRpcController.php:45
618
+ #: app/controllers/PrliXmlRpcController.php:112
619
+ #: app/controllers/PrliXmlRpcController.php:161
620
+ #: app/controllers/PrliXmlRpcController.php:218
621
+ #: app/controllers/PrliXmlRpcController.php:247
622
+ #: app/controllers/PrliXmlRpcController.php:275
623
+ #: app/controllers/PrliXmlRpcController.php:308
624
+ #: app/controllers/PrliXmlRpcController.php:340
625
+ msgid "Sorry, you must be an administrator to access this resource"
626
  msgstr ""
627
 
628
+ #: app/controllers/PrliXmlRpcController.php:116
629
+ msgid "You must provide a target URL"
 
630
  msgstr ""
631
 
632
+ #: app/controllers/PrliXmlRpcController.php:144
633
+ #: app/controllers/PrliXmlRpcController.php:194
634
+ msgid "There was an error creating your Pretty Link"
 
635
  msgstr ""
636
 
637
+ #: app/controllers/PrliXmlRpcController.php:165
638
+ msgid "You must provide the id of the link you want to update"
639
  msgstr ""
640
 
641
+ #: app/controllers/PrliXmlRpcController.php:223
642
+ msgid "There was an error fetching the Pretty Link Groups"
643
  msgstr ""
644
 
645
+ #: app/controllers/PrliXmlRpcController.php:252
646
+ msgid "There was an error fetching the Pretty Links"
647
  msgstr ""
648
 
649
+ #: app/controllers/PrliXmlRpcController.php:278
650
+ msgid "Sorry, you must provide a slug to lookup"
651
  msgstr ""
652
 
653
+ #: app/controllers/PrliXmlRpcController.php:285
654
+ #: app/controllers/PrliXmlRpcController.php:318
655
+ msgid "There was an error fetching your Pretty Link"
656
  msgstr ""
657
 
658
+ #: app/controllers/PrliXmlRpcController.php:311
659
+ #: app/controllers/PrliXmlRpcController.php:343
660
+ msgid "Sorry, you must provide an id to lookup"
661
  msgstr ""
662
 
663
+ #: app/controllers/PrliXmlRpcController.php:350
664
+ msgid "There was an error fetching your Pretty Link URL"
665
  msgstr ""
666
 
667
+ #: app/helpers/PrliAppHelper.php:21
668
+ msgid "Upgrade to Pro to unlock this feature"
 
669
  msgstr ""
670
 
671
+ #: app/helpers/PrliLinksHelper.php:14
672
+ #: app/views/links/form_basic.php:15
673
+ #: app/views/shared/tinymce_form_popup.php:32
674
+ msgid "307 (Temporary)"
675
  msgstr ""
676
 
677
+ #: app/helpers/PrliLinksHelper.php:15
678
+ #: app/views/links/form_basic.php:16
679
+ #: app/views/shared/tinymce_form_popup.php:33
680
+ msgid "302 (Temporary)"
681
  msgstr ""
682
 
683
+ #: app/helpers/PrliLinksHelper.php:16
684
+ #: app/views/links/form_basic.php:17
685
+ #: app/views/shared/tinymce_form_popup.php:34
686
+ msgid "301 (Permanent)"
687
  msgstr ""
688
 
689
+ #: app/helpers/PrliLinksHelper.php:27
690
+ msgid "PrettyBar Redirection"
691
  msgstr ""
692
 
693
+ #: app/helpers/PrliLinksHelper.php:30
694
+ msgid "Cloaked Redirection"
695
  msgstr ""
696
 
697
+ #: app/helpers/PrliLinksHelper.php:33
698
+ msgid "Pixel Tracking Redirection"
699
  msgstr ""
700
 
701
+ #: app/helpers/PrliLinksHelper.php:36
702
+ msgid "Meta Refresh Redirection"
703
  msgstr ""
704
 
705
+ #: app/helpers/PrliLinksHelper.php:39
706
+ msgid "Javascript Redirection"
707
  msgstr ""
708
 
709
+ #: app/helpers/PrliLinksHelper.php:42
710
+ msgid "Temporary (307) Redirection"
711
  msgstr ""
712
 
713
+ #: app/helpers/PrliLinksHelper.php:45
714
+ msgid "Temporary (302) Redirection"
715
  msgstr ""
716
 
717
+ #: app/helpers/PrliLinksHelper.php:48
718
+ msgid "Permanent (301) Redirection"
719
  msgstr ""
720
 
721
+ #: app/helpers/PrliLinksHelper.php:52
722
+ msgid "Nofollow Enabled"
723
  msgstr ""
724
 
725
+ #: app/helpers/PrliLinksHelper.php:56
726
+ msgid "Sponsored Enabled"
727
  msgstr ""
728
 
729
+ #: app/helpers/PrliLinksHelper.php:60
730
+ msgid "Parameter Forwarding Enabled"
731
  msgstr ""
732
 
733
+ #: app/helpers/PrliLinksHelper.php:71
734
+ #: app/views/groups/list.php:75
735
+ #: app/views/groups/list.php:78
736
+ #: pro/app/views/reports/list.php:68
737
+ #: pro/app/views/reports/list.php:71
738
+ msgid "Edit %s"
739
  msgstr ""
740
 
741
+ #: app/helpers/PrliLinksHelper.php:72
742
+ msgid "Are you sure you want to delete your %s Pretty Link? This will delete the Pretty Link and all of the statistical data about it in your database."
743
  msgstr ""
744
 
745
+ #: app/helpers/PrliLinksHelper.php:72
746
+ #: app/views/groups/list.php:79
747
+ #: pro/app/views/reports/list.php:72
748
+ msgid "Delete %s"
749
  msgstr ""
750
 
751
+ #: app/helpers/PrliLinksHelper.php:73
752
+ msgid "Are you sure you want to reset your %s Pretty Link? This will delete all of the statistical data about this Pretty Link in your database."
753
  msgstr ""
754
 
755
+ #: app/helpers/PrliLinksHelper.php:73
756
+ #: app/helpers/PrliLinksHelper.php:151
757
+ msgid "Reset %s"
758
  msgstr ""
759
 
760
+ #: app/helpers/PrliLinksHelper.php:76
761
+ #: app/views/clicks/list.php:161
762
+ msgid "View clicks for %s"
763
  msgstr ""
764
 
765
+ #: app/helpers/PrliLinksHelper.php:81
766
+ #: app/helpers/PrliLinksHelper.php:162
767
+ msgid "Post %s to Twitter"
768
  msgstr ""
769
 
770
+ #: app/helpers/PrliLinksHelper.php:82
771
+ #: app/helpers/PrliLinksHelper.php:173
772
+ msgid "Send %s in an Email"
773
  msgstr ""
774
 
775
+ #: app/helpers/PrliLinksHelper.php:87
776
+ #: app/helpers/PrliLinksHelper.php:184
777
+ msgid "Visit Target URL: %s in a New Window"
778
  msgstr ""
779
 
780
+ #: app/helpers/PrliLinksHelper.php:88
781
+ #: app/helpers/PrliLinksHelper.php:195
782
+ msgid "Visit Short URL: %s in a New Window"
783
  msgstr ""
784
 
785
+ #: app/helpers/PrliLinksHelper.php:106
786
+ msgid "%d Clicks / %d Uniques"
787
  msgstr ""
788
 
789
+ #: app/helpers/PrliLinksHelper.php:115
790
+ msgid "This link isn't being tracked"
791
  msgstr ""
792
 
793
+ #: app/helpers/PrliLinksHelper.php:139
794
+ msgid "Target URL:"
795
  msgstr ""
796
 
797
+ #: app/models/PrliClick.php:237
798
+ msgid "all links"
799
  msgstr ""
800
 
801
+ #: app/models/PrliClick.php:244
802
+ msgid "All clicks"
803
  msgstr ""
804
 
805
+ #: app/models/PrliClick.php:247
806
+ msgid "Unique hits"
807
  msgstr ""
808
 
809
+ #: app/models/PrliClick.php:251
810
+ #: pro/app/helpers/PlpPostsHelper.php:66
811
+ msgid "Pretty Link:"
812
  msgstr ""
813
 
814
+ #: app/models/PrliClick.php:251
815
+ msgid "on"
 
816
  msgstr ""
817
 
818
+ #: app/models/PrliClick.php:251
819
+ #: pro/app/models/PlpReport.php:400
820
+ msgid "between"
821
  msgstr ""
822
 
823
+ #: app/models/PrliClick.php:251
824
+ #: pro/app/models/PlpReport.php:259
825
+ #: pro/app/models/PlpReport.php:400
826
+ msgid "and"
827
  msgstr ""
828
 
829
+ #: app/models/PrliGroup.php:114
830
+ msgid "Group must have a name."
 
831
  msgstr ""
832
 
833
+ #: app/models/PrliLink.php:480
834
+ msgid "Target URL can't be blank"
 
 
 
 
 
 
 
 
 
835
  msgstr ""
836
 
837
+ #: app/models/PrliLink.php:484
838
+ msgid "Target URL must be different than the Pretty Link"
 
839
  msgstr ""
840
 
841
+ #: app/models/PrliLink.php:488
842
+ msgid "Link URL must be a correctly formatted url"
 
 
 
843
  msgstr ""
844
 
845
+ #: app/models/PrliLink.php:492
846
+ msgid "Pretty Link slugs must not contain question marks, ampersands or number signs."
 
 
 
 
 
 
847
  msgstr ""
848
 
849
+ #: app/models/PrliLink.php:496
850
+ msgid "Pretty Link slugs must not end with a slash (\"/\")"
 
 
 
851
  msgstr ""
852
 
853
+ #: app/models/PrliUtils.php:88
854
+ msgid "*** Pretty Links Debug: %s"
855
  msgstr ""
856
 
857
+ #: app/models/PrliUtils.php:96
858
+ msgid "The Slug can't be empty"
 
859
  msgstr ""
860
 
861
+ #: app/models/PrliUtils.php:103
862
+ msgid "This Pretty Link Slug is already taken. There's already another pretty link with this slug: %s"
 
 
 
863
  msgstr ""
864
 
865
+ #. translators: %1$s: open link tag, %2$s: close link tag, %3$s: br tag
866
+ #: app/models/PrliUtils.php:1082
867
+ msgid "Get started by %1$sadding a URL%2$s that you want to turn into a pretty link.%3$sCome back to see how many times it was clicked."
 
 
 
 
 
 
868
  msgstr ""
869
 
870
+ #: app/views/admin/errors.php:7
871
+ #: app/views/shared/errors.php:12
872
+ msgid "ERROR"
 
 
 
 
873
  msgstr ""
874
 
875
+ #: app/views/admin/onboarding/welcome.php:15
876
+ msgid "Welcome to"
 
877
  msgstr ""
878
 
879
+ #: app/views/admin/onboarding/welcome.php:18
880
+ msgid "Welcome to Pretty Links!"
 
 
 
 
881
  msgstr ""
882
 
883
+ #: app/views/admin/onboarding/welcome.php:21
884
+ msgid "Congratulations, you've just installed the most powerful link management platform for WordPress on Earth!"
 
885
  msgstr ""
886
 
887
+ #: app/views/admin/onboarding/welcome.php:22
888
+ msgid "With Pretty Links, you'll no longer need to manage links from a spreadsheet and you'll be able to maximize the visibility of your links - these benefits (and more) will make it possible to make more money from your content like never before!"
889
  msgstr ""
890
 
891
+ #: app/views/admin/onboarding/welcome.php:25
892
+ msgid "Getting Started is Easy"
 
 
893
  msgstr ""
894
 
895
+ #: app/views/admin/onboarding/welcome.php:26
896
+ msgid "Start by creating your first Pretty Link:"
 
897
  msgstr ""
898
 
899
+ #: app/views/admin/onboarding/welcome.php:34
900
+ #: app/views/admin/onboarding/welcome.php:35
901
+ msgid "Click \"Add New Link\""
902
  msgstr ""
903
 
904
+ #: app/views/admin/onboarding/welcome.php:39
905
+ #: app/views/admin/onboarding/welcome.php:40
906
+ msgid "Enter the URL of your Affiliate Link"
907
  msgstr ""
908
 
909
+ #: app/views/admin/onboarding/welcome.php:44
910
+ #: app/views/admin/onboarding/welcome.php:45
911
+ msgid "Customize your Pretty Link Slug"
912
  msgstr ""
913
 
914
+ #: app/views/admin/onboarding/welcome.php:49
915
+ #: app/views/admin/onboarding/welcome.php:50
916
+ msgid "Click \"Update\""
917
  msgstr ""
918
 
919
+ #: app/views/admin/onboarding/welcome.php:54
920
+ #: app/views/admin/onboarding/welcome.php:55
921
+ msgid "Copy the Pretty Link URL"
922
  msgstr ""
923
 
924
+ #: app/views/admin/onboarding/welcome.php:59
925
+ msgid "Wasn't that easy? Now, you can use this link wherever you want!"
 
926
  msgstr ""
927
 
928
+ #: app/views/admin/onboarding/welcome.php:63
929
+ msgid "The Power of"
 
 
930
  msgstr ""
931
 
932
+ #: app/views/admin/onboarding/welcome.php:66
933
+ msgid "The Power of Pretty Links Pro"
 
 
934
  msgstr ""
935
 
936
+ #: app/views/admin/onboarding/welcome.php:70
937
+ msgid "There are many reasons that premium users of Pretty Links <br> are able to take their business to the next level:"
 
 
938
  msgstr ""
939
 
940
+ #: app/views/admin/onboarding/welcome.php:77
941
+ msgid "Automated, Site-Wide Link Placement (Keyword Replacement)"
942
  msgstr ""
943
 
944
+ #: app/views/admin/onboarding/welcome.php:79
945
+ msgid "Imagine if you never had to hand-edit links, copy and paste from a spreadsheet, or actively have to keep up with you links ever again. Well that time has come! Now with Pretty Links, all you have to do is create your links and let Pretty Links do the rest!"
 
 
 
946
  msgstr ""
947
 
948
+ #: app/views/admin/onboarding/welcome.php:80
949
+ msgid "Pretty Links will scan your content for the keywords or URLs that you want to target and will replace them with Pretty Links automatically! This will save you tons of time so you can focus on growing your business!"
950
  msgstr ""
951
 
952
+ #: app/views/admin/onboarding/welcome.php:87
953
+ msgid "Categories & Tags"
954
  msgstr ""
955
 
956
+ #: app/views/admin/onboarding/welcome.php:89
957
+ msgid "When you are dealing with a large number of links, it can be easy to be overwhelmed and confused by which links to you planned to use where. It's now easier than ever to organize your links and group them any way that you like for ultimate productivity and monetization!"
958
  msgstr ""
959
 
960
+ #: app/views/admin/onboarding/welcome.php:98
961
+ msgid "Lite users can take advantage of 301 & 302 server side redirects but our pro users can also redirect with cloaking, JavaScript, Meta-refresh and more."
962
  msgstr ""
963
 
964
+ #: app/views/admin/onboarding/welcome.php:99
965
+ msgid "So if you have social media links, a landing page, or a new page or post you'd like to redirect your customers to, this feature will definitely come in handy!"
 
966
  msgstr ""
967
 
968
+ #: app/views/admin/onboarding/welcome.php:106
969
+ msgid "Dynamic Redirect Types"
 
 
970
  msgstr ""
971
 
972
+ #: app/views/admin/onboarding/welcome.php:108
973
+ msgid "Would you like your Pretty Link to redirect somewhere custom depending on what country your user is in, device they're using, time they're clicking the link or just randomly? Our pro users can do this easily with our Dynamic Redirections!"
974
  msgstr ""
975
 
976
+ #: app/views/admin/onboarding/welcome.php:109
977
+ msgid "This feature is excellent if you are running a time-sensitive sales, want to create custom content for you customers, create stellar landing pages for customers in different countries!"
 
978
  msgstr ""
979
 
980
+ #: app/views/admin/onboarding/welcome.php:116
981
+ msgid "Import and Export Links"
 
 
982
  msgstr ""
983
 
984
+ #: app/views/admin/onboarding/welcome.php:118
985
+ msgid "Export your links to a spreadsheet or import them en masse - our pro users can do this with ease. Simply download your spreadsheet, upload to WordPress, and your links are automatically added to Pretty Links!"
 
986
  msgstr ""
987
 
988
+ #: app/views/admin/onboarding/welcome.php:125
989
+ msgid "The list goes on and on"
 
990
  msgstr ""
991
 
992
+ #: app/views/admin/onboarding/welcome.php:126
993
+ msgid "Our premium editions of Pretty Links are a HUGE upgrade from Lite. <br> Don’t miss out on our critical PRO benefits!"
 
994
  msgstr ""
995
 
996
+ #: app/views/admin/onboarding/welcome.php:130
997
+ msgid "Upgrade to Pretty Links Pro Now"
 
998
  msgstr ""
999
 
1000
+ #: app/views/admin/onboarding/welcome.php:131
1001
+ msgid "Upgrade NOW and get $50 off of your subscription!!!"
 
1002
  msgstr ""
1003
 
1004
+ #: app/views/admin/popups/rating.php:12
1005
+ #: pro/app/views/tools/generator.php:27
1006
+ #: pro/app/widgets/PlpPublicLinksWidget.php:83
1007
+ msgid "Yes"
1008
  msgstr ""
1009
 
1010
+ #: app/views/admin/popups/rating.php:13
1011
+ #: pro/app/views/tools/generator.php:28
1012
+ #: pro/app/widgets/PlpPublicLinksWidget.php:84
1013
+ msgid "No"
1014
  msgstr ""
1015
 
1016
+ #: app/views/admin/popups/rating.php:17
1017
+ msgid "Rate Pretty Links"
1018
  msgstr ""
1019
 
1020
+ #: app/views/admin/popups/rating.php:18
1021
+ msgid "If you enjoy using Pretty Links would you mind taking a moment to rate it on WordPress.org? It won't take more than a minute."
1022
  msgstr ""
1023
 
1024
+ #: app/views/admin/popups/rating.php:19
1025
+ #: app/views/admin/popups/rating.php:31
1026
+ msgid "Thanks for your support!"
1027
  msgstr ""
1028
 
1029
+ #: app/views/admin/popups/rating.php:24
1030
+ #: app/views/admin/popups/rating.php:36
1031
+ msgid "Remind Me Later"
1032
  msgstr ""
1033
 
1034
+ #: app/views/admin/popups/rating.php:25
1035
+ msgid "Review Pretty Links"
1036
  msgstr ""
1037
 
1038
+ #: app/views/admin/popups/rating.php:29
1039
+ #: app/views/admin/popups/rating.php:37
1040
+ msgid "Leave Feedback"
1041
  msgstr ""
1042
 
1043
+ #: app/views/admin/popups/rating.php:30
1044
+ msgid "To help us improve Pretty Links, would you mind taking a moment to leave feedback?"
 
1045
  msgstr ""
1046
 
1047
+ #: app/views/admin/popups/rating.php:40
1048
+ msgid "Never Remind Me Again"
 
1049
  msgstr ""
1050
 
1051
+ #: app/views/admin/popups/upgrade.php:6
1052
+ msgid "Upgrade to Pretty Links PRO"
 
 
1053
  msgstr ""
1054
 
1055
+ #: app/views/admin/popups/upgrade.php:7
1056
+ msgid "Unlock Pretty Links' PRO features and you'll be able to:"
 
1057
  msgstr ""
1058
 
1059
+ #: app/views/admin/popups/upgrade.php:9
1060
+ msgid "Monetize existing content with automated Pretty Link placement"
 
1061
  msgstr ""
1062
 
1063
+ #: app/views/admin/popups/upgrade.php:10
1064
+ msgid "Redirect with cloaking, Javascript or Meta-refresh"
 
 
1065
  msgstr ""
1066
 
1067
+ #: app/views/admin/popups/upgrade.php:11
1068
+ msgid "Redirect by location, time, device or rotation"
 
 
1069
  msgstr ""
1070
 
1071
+ #: app/views/admin/popups/upgrade.php:12
1072
+ msgid "Expire your Pretty Links"
 
1073
  msgstr ""
1074
 
1075
+ #: app/views/admin/popups/upgrade.php:13
1076
+ msgid "Split-test your Pretty Links"
 
 
1077
  msgstr ""
1078
 
1079
+ #: app/views/admin/popups/upgrade.php:14
1080
+ #: app/views/admin/update/license.php:60
1081
+ msgid "And much, much more!"
1082
  msgstr ""
1083
 
1084
+ #: app/views/admin/popups/upgrade.php:17
1085
+ msgid "Plus, upgrading is fast, easy and won't disrupt any of your existing links or data."
 
1086
  msgstr ""
1087
 
1088
+ #: app/views/admin/popups/upgrade.php:18
1089
+ #: app/views/admin/update/license.php:66
1090
+ msgid "We think you'll love it!"
 
1091
  msgstr ""
1092
 
1093
+ #: app/views/admin/popups/upgrade.php:24
1094
+ msgid "Maybe Later"
 
1095
  msgstr ""
1096
 
1097
+ #: app/views/admin/update/activation_warning.php:7
1098
+ msgid "Error with PRETTYLINK_LICENSE_KEY: %s"
 
1099
  msgstr ""
1100
 
1101
+ #: app/views/admin/update/activation_warning.php:14
1102
+ #: app/views/admin/update/activation_warning.php:41
1103
+ msgid "Pretty Links Pro isn't able to get critical automatic updates"
 
1104
  msgstr ""
1105
 
1106
+ #: app/views/admin/update/activation_warning.php:15
1107
+ msgid "It looks like you used to have Pretty Links Pro activated with a username and password but now you need a license key to activate it."
 
1108
  msgstr ""
1109
 
1110
+ #. translators: %1$s: open link tag, %2$s: close link tag
1111
+ #: app/views/admin/update/activation_warning.php:21
1112
+ msgid "You can get your license key by logging in at %1$sPrettyLinkPro.com.%2$s"
 
 
 
 
 
1113
  msgstr ""
1114
 
1115
+ #. translators: %1$s: open link tag, %2$s: close link tag
1116
+ #: app/views/admin/update/activation_warning.php:32
1117
+ msgid "After you paste your license key on the %1$s\"Pretty Link\" -> \"Activate Pro\" admin page,%2$s you'll start getting updates again."
1118
  msgstr ""
1119
 
1120
+ #. translators: %1$s: open link tag, %2$s: close link tag
1121
+ #: app/views/admin/update/activation_warning.php:47
1122
+ msgid "You can retrieve or purchase a license key at %1$sPrettyLinks.com%2$s to enable automatic updates today."
1123
  msgstr ""
1124
 
1125
+ #. translators: %1$s: open link tag, %2$s: close link tag
1126
+ #: app/views/admin/update/activation_warning.php:58
1127
+ msgid "After you paste your license key on the %1$s\"Pretty Links\" -> \"Activate Pro\" admin page,%2$s you'll start getting automatic updates."
1128
  msgstr ""
1129
 
1130
+ #: app/views/admin/update/addons.php:3
1131
+ msgid "Pretty Link Add-ons"
1132
  msgstr ""
1133
 
1134
+ #: app/views/admin/update/addons.php:8
1135
+ msgid "There were no Add-ons found for your license or lack thereof..."
1136
  msgstr ""
1137
 
1138
+ #: app/views/admin/update/addons.php:14
1139
+ msgid "Add-on"
1140
  msgstr ""
1141
 
1142
+ #: app/views/admin/update/addons.php:15
1143
+ msgid "Description"
1144
  msgstr ""
1145
 
1146
+ #: app/views/admin/update/addons.php:16
1147
+ #: app/views/admin/update/addons.php:54
1148
+ msgid "Install"
1149
  msgstr ""
1150
 
1151
+ #: app/views/admin/update/addons.php:42
1152
+ msgid "(Update Available)"
 
 
1153
  msgstr ""
1154
 
1155
+ #: app/views/admin/update/addons.php:50
1156
+ msgid "Installed & Active"
 
 
1157
  msgstr ""
1158
 
1159
+ #: app/views/admin/update/addons.php:52
1160
+ msgid "Installed & Inactive"
 
 
1161
  msgstr ""
1162
 
1163
+ #: app/views/admin/update/addon_popup.php:4
1164
+ msgid "ACTION REQUIRED"
 
1165
  msgstr ""
1166
 
1167
+ #: app/views/admin/update/addon_popup.php:5
1168
+ msgid "The %s features in your Pretty Link options have been moved from Pretty Link into a separate plugin."
 
1169
  msgstr ""
1170
 
1171
+ #: app/views/admin/update/addon_popup.php:6
1172
+ msgid "Why you ask? Well, it's to streamline and increase the performance of Pretty Link for you."
 
 
1173
  msgstr ""
1174
 
1175
+ #: app/views/admin/update/addon_popup.php:9
1176
+ msgid "And good for you, it looks like you've already got the %1$s Add-on installed. Just click the \"Activate %2$s Add-on\" button below and you'll get all these features back now."
1177
  msgstr ""
1178
 
1179
+ #: app/views/admin/update/addon_popup.php:11
1180
+ msgid "Luckily it's easy to get these features back now. Just click the \"Install %s Add-on\" button below."
1181
  msgstr ""
1182
 
1183
+ #. translators: %1$s: open link tag, %2$s: close link tag
1184
+ #: app/views/admin/update/addon_popup.php:16
1185
+ msgid "If you have problems with the auto-install please refer to %1$sthe user manual%2$s for manual install instructions."
1186
  msgstr ""
1187
 
1188
+ #: app/views/admin/update/addon_popup.php:27
1189
+ msgid "Activate %s Add-on"
 
1190
  msgstr ""
1191
 
1192
+ #: app/views/admin/update/addon_popup.php:29
1193
+ msgid "Install %s Add-on"
 
1194
  msgstr ""
1195
 
1196
+ #: app/views/admin/update/addon_popup.php:31
1197
+ msgid "Don't Show This Message Again"
 
1198
  msgstr ""
1199
 
1200
+ #: app/views/admin/update/edge_updates.php:4
1201
+ msgid "Include Pretty Links Pro edge (development) releases in automatic updates (not recommended for production websites)"
1202
  msgstr ""
1203
 
1204
+ #: app/views/admin/update/edge_updates.php:4
1205
+ #: app/views/widgets/widget.php:22
1206
+ msgid "Loading..."
1207
  msgstr ""
1208
 
1209
+ #: app/views/admin/update/license.php:7
1210
+ msgid "Pretty Links Pro License"
 
1211
  msgstr ""
1212
 
1213
+ #. translators: %1$s: link to pro site, %2$s: link to pro site login page
1214
+ #: app/views/admin/update/license.php:14
1215
+ msgid "You must have a License Key to enable automatic updates for Pretty Links Pro. If you don't have a License please go to %1$s to get one. If you do have a license you can login at %2$s to manage your licenses and site activations."
1216
  msgstr ""
1217
 
1218
+ #: app/views/admin/update/license.php:25
1219
+ msgid "Enter Your Pretty Links Pro License Key:"
 
1220
  msgstr ""
1221
 
1222
+ #: app/views/admin/update/license.php:32
1223
+ msgid "Activate License Key on %s"
 
1224
  msgstr ""
1225
 
1226
+ #. translators: %1$s: open link tag, %2$s: close link tag
1227
+ #: app/views/admin/update/license.php:45
1228
+ msgid "It looks like you haven't %1$supgraded to Pretty Links Pro%2$s yet. Here are just a few things you could be doing with pro:"
1229
  msgstr ""
1230
 
1231
+ #: app/views/admin/update/license.php:55
1232
+ msgid "Auto-replace keywords throughout your site with Pretty Links"
 
1233
  msgstr ""
1234
 
1235
+ #: app/views/admin/update/license.php:56
1236
+ msgid "Protect your affiliate links by using Cloaked Redirects"
 
 
1237
  msgstr ""
1238
 
1239
+ #: app/views/admin/update/license.php:57
1240
+ msgid "Redirect based on a visitor's location"
 
 
 
1241
  msgstr ""
1242
 
1243
+ #: app/views/admin/update/license.php:58
1244
+ msgid "Auto-prettylink your Pages &amp; Posts"
 
 
1245
  msgstr ""
1246
 
1247
+ #: app/views/admin/update/license.php:59
1248
+ msgid "Find out what works and what doesn't by split testing your links"
 
1249
  msgstr ""
1250
 
1251
+ #: app/views/admin/update/license.php:64
1252
+ msgid "Plus, upgrading is fast, easy and won't disrupt any of your existing links or data. And there's even a 14 day money back guarantee."
1253
  msgstr ""
1254
 
1255
+ #: app/views/admin/update/license.php:68
1256
+ msgid "Upgrade to Pro today!"
 
1257
  msgstr ""
1258
 
1259
+ #: app/views/admin/update/license.php:72
1260
+ msgid "Active License Key Information:"
 
1261
  msgstr ""
1262
 
1263
+ #: app/views/admin/update/license.php:75
1264
+ msgid "License Key:"
1265
  msgstr ""
1266
 
1267
+ #: app/views/admin/update/license.php:79
1268
+ msgid "Status:"
1269
  msgstr ""
1270
 
1271
+ #: app/views/admin/update/license.php:80
1272
+ msgid "Active on %s"
1273
  msgstr ""
1274
 
1275
+ #: app/views/admin/update/license.php:83
1276
+ msgid "Product:"
 
 
1277
  msgstr ""
1278
 
1279
+ #: app/views/admin/update/license.php:87
1280
+ msgid "Activations:"
 
 
1281
  msgstr ""
1282
 
1283
+ #. translators: %1$s: open b tag, %2$s: close b tag, %3$d: current activation count, %4$s: max activations
1284
+ #: app/views/admin/update/license.php:92
1285
+ msgid "%1$s%3$d of %4$s%2$s sites have been activated with this license key"
1286
  msgstr ""
1287
 
1288
+ #: app/views/admin/update/license.php:102
1289
+ msgid "Are you sure? Pretty Links Pro will not be functional on %s if this License Key is deactivated."
 
1290
  msgstr ""
1291
 
1292
+ #: app/views/admin/update/license.php:102
1293
+ msgid "Deactivate License Key on %s"
 
1294
  msgstr ""
1295
 
1296
+ #: app/views/admin/update/license.php:105
1297
+ msgid "Upgrade plugin to Pro"
 
1298
  msgstr ""
1299
 
1300
+ #: app/views/admin/update/license.php:110
1301
+ msgid "You're currently running version %s of Pretty Links Pro"
 
1302
  msgstr ""
1303
 
1304
+ #: app/views/admin/update/ui.php:3
1305
+ msgid "Activate Pretty Links Pro"
 
1306
  msgstr ""
1307
 
1308
+ #: app/views/admin/update/ui.php:16
1309
+ msgid "License"
 
1310
  msgstr ""
1311
 
1312
+ #: app/views/admin/update/ui.php:17
1313
+ msgid "Add-Ons"
 
1314
  msgstr ""
1315
 
1316
+ #: app/views/admin/upgrade/reports.php:8
1317
+ #: app/views/admin/upgrade/reports.php:35
1318
+ #: app/views/groups/edit.php:36
1319
+ #: app/views/groups/list.php:41
1320
+ #: app/views/groups/list.php:93
1321
+ #: app/views/groups/new.php:37
1322
+ #: pro/app/views/reports/edit.php:44
1323
+ #: pro/app/views/reports/list.php:32
1324
+ #: pro/app/views/reports/list.php:86
1325
+ #: pro/app/views/reports/new.php:44
1326
+ msgid "Name"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1327
  msgstr ""
1328
 
1329
+ #: app/views/admin/upgrade/reports.php:13
1330
+ #: app/views/admin/upgrade/reports.php:36
1331
+ #: pro/app/views/links/form.php:260
1332
+ #: pro/app/views/reports/list.php:37
1333
+ #: pro/app/views/reports/list.php:87
1334
+ msgid "Goal Link"
1335
  msgstr ""
1336
 
1337
+ #: app/views/admin/upgrade/reports.php:18
1338
+ #: app/views/admin/upgrade/reports.php:37
1339
+ #: app/views/groups/list.php:46
1340
+ #: app/views/groups/list.php:80
1341
+ #: app/views/groups/list.php:94
1342
+ #: app/views/options/form.php:51
1343
+ #: pro/app/views/reports/list.php:42
1344
+ #: pro/app/views/reports/list.php:88
1345
+ msgid "Links"
1346
  msgstr ""
1347
 
1348
+ #: app/views/admin/upgrade/reports.php:23
1349
+ #: app/views/admin/upgrade/reports.php:38
1350
+ #: app/views/groups/list.php:51
1351
+ #: app/views/groups/list.php:95
1352
+ #: pro/app/views/reports/list.php:47
1353
+ #: pro/app/views/reports/list.php:89
1354
+ msgid "Created"
1355
  msgstr ""
1356
 
1357
+ #: app/views/admin/upgrade/reports.php:30
1358
+ #: pro/app/views/reports/list.php:57
1359
+ msgid "No Pretty Link Reports were found"
1360
  msgstr ""
1361
 
1362
+ #: app/views/clicks/csv_download.php:3
1363
+ msgid "Download Clicks"
 
 
1364
  msgstr ""
1365
 
1366
+ #: app/views/clicks/csv_download.php:4
1367
+ #: app/views/clicks/list.php:6
1368
+ msgid "For %s"
1369
  msgstr ""
1370
 
1371
+ #: app/views/clicks/csv_download.php:6
1372
+ msgid "Click Reports:"
 
1373
  msgstr ""
1374
 
1375
+ #: app/views/clicks/csv_download.php:7
1376
+ msgid "All clicks on %s"
 
 
1377
  msgstr ""
1378
 
1379
+ #: app/views/clicks/csv_download.php:24
1380
+ msgid "Clicks %d-%d (%d Records)"
 
1381
  msgstr ""
1382
 
1383
+ #: app/views/clicks/list.php:11
1384
+ #: pro/app/views/reports/custom-report.php:12
1385
+ #: pro/app/views/reports/split-test-report.php:9
1386
+ msgid "Customize Report"
1387
  msgstr ""
1388
 
1389
+ #: app/views/clicks/list.php:18
1390
+ #: pro/app/views/reports/split-test-report.php:9
1391
+ msgid "Back to Links"
 
1392
  msgstr ""
1393
 
1394
+ #: app/views/clicks/list.php:21
1395
+ msgid "Back to Clicks"
 
1396
  msgstr ""
1397
 
1398
+ #: app/views/clicks/list.php:30
1399
+ msgid "Type:"
 
1400
  msgstr ""
1401
 
1402
+ #: app/views/clicks/list.php:32
1403
+ #: pro/app/models/PlpReport.php:266
1404
+ #: pro/app/models/PlpReport.php:275
1405
+ #: pro/app/models/PlpReport.php:412
1406
+ #: pro/app/models/PlpReport.php:419
1407
+ msgid "All Clicks"
1408
  msgstr ""
1409
 
1410
+ #: app/views/clicks/list.php:33
1411
+ #: pro/app/models/PlpReport.php:266
1412
+ #: pro/app/models/PlpReport.php:275
1413
+ #: pro/app/models/PlpReport.php:412
1414
+ #: pro/app/models/PlpReport.php:419
1415
+ msgid "Unique Clicks"
1416
  msgstr ""
1417
 
1418
+ #: app/views/clicks/list.php:37
1419
+ #: pro/app/views/reports/custom-report.php:16
1420
+ #: pro/app/views/reports/split-test-report.php:13
1421
+ msgid "Date Range:"
1422
  msgstr ""
1423
 
1424
+ #: app/views/clicks/list.php:39
1425
+ msgid "to"
 
1426
  msgstr ""
1427
 
1428
+ #: app/views/clicks/list.php:43
1429
+ #: pro/app/views/reports/custom-report.php:22
1430
+ #: pro/app/views/reports/split-test-report.php:19
1431
+ msgid "Customize"
1432
  msgstr ""
1433
 
1434
+ #: app/views/clicks/list.php:43
1435
+ #: app/views/groups/edit.php:72
1436
+ #: app/views/groups/new.php:71
1437
+ #: pro/app/views/reports/custom-report.php:22
1438
+ #: pro/app/views/reports/edit.php:66
1439
+ #: pro/app/views/reports/new.php:66
1440
+ #: pro/app/views/reports/split-test-report.php:19
1441
+ msgid "Cancel"
1442
  msgstr ""
1443
 
1444
+ #: app/views/clicks/list.php:62
1445
+ msgid "Search Clicks"
 
1446
  msgstr ""
1447
 
1448
+ #: app/views/clicks/list.php:73
1449
+ #: app/views/clicks/list.php:171
1450
+ msgid "Browser"
1451
  msgstr ""
1452
 
1453
+ #: app/views/clicks/list.php:75
1454
+ #: app/views/clicks/list.php:172
1455
+ msgid "OS"
1456
  msgstr ""
1457
 
1458
+ #: app/views/clicks/list.php:79
1459
+ #: app/views/clicks/list.php:174
1460
+ msgid "IP"
1461
  msgstr ""
1462
 
1463
+ #: app/views/clicks/list.php:83
1464
+ #: app/views/clicks/list.php:176
1465
+ msgid "Visitor"
1466
  msgstr ""
1467
 
1468
+ #: app/views/clicks/list.php:87
1469
+ #: app/views/clicks/list.php:178
1470
+ msgid "Timestamp"
1471
  msgstr ""
1472
 
1473
+ #: app/views/clicks/list.php:91
1474
+ #: app/views/clicks/list.php:180
1475
+ msgid "Host"
1476
  msgstr ""
1477
 
1478
+ #: app/views/clicks/list.php:95
1479
+ #: app/views/clicks/list.php:182
1480
+ msgid "URI"
 
 
1481
  msgstr ""
1482
 
1483
+ #: app/views/clicks/list.php:98
1484
+ #: app/views/clicks/list.php:183
1485
+ msgid "Referrer"
 
1486
  msgstr ""
1487
 
1488
+ #: app/views/clicks/list.php:101
1489
+ #: app/views/clicks/list.php:184
1490
+ #: pro/app/models/PlpReport.php:266
1491
+ #: pro/app/models/PlpReport.php:275
1492
+ msgid "Link"
1493
  msgstr ""
1494
 
1495
+ #: app/views/clicks/list.php:111
1496
+ msgid "No Clicks have been recorded yet"
 
1497
  msgstr ""
1498
 
1499
+ #: app/views/clicks/list.php:147
1500
+ msgid "View All Activity for IP Address: %s"
 
 
1501
  msgstr ""
1502
 
1503
+ #: app/views/clicks/list.php:150
1504
+ msgid "View All Activity for Visitor: %s"
 
 
1505
  msgstr ""
1506
 
1507
+ #: app/views/clicks/list.php:190
1508
+ msgid "Download CSV"
 
1509
  msgstr ""
1510
 
1511
+ #: app/views/groups/edit.php:10
1512
+ msgid "Edit Group"
 
1513
  msgstr ""
1514
 
1515
+ #: app/views/groups/edit.php:21
1516
+ #: pro/app/views/reports/edit.php:18
1517
+ msgid "Name:"
 
1518
  msgstr ""
1519
 
1520
+ #: app/views/groups/edit.php:23
1521
+ #: app/views/groups/new.php:24
1522
+ msgid "This is how you'll identify your Group."
1523
  msgstr ""
1524
 
1525
+ #: app/views/groups/edit.php:26
1526
+ #: app/views/groups/new.php:27
1527
+ msgid "Description:"
1528
  msgstr ""
1529
 
1530
+ #: app/views/groups/edit.php:28
1531
+ #: app/views/groups/new.php:29
1532
+ msgid "A Description of this group."
 
1533
  msgstr ""
1534
 
1535
+ #: app/views/groups/edit.php:31
1536
+ #: app/views/groups/new.php:32
1537
+ msgid "Links:"
1538
  msgstr ""
1539
 
1540
+ #: app/views/groups/edit.php:37
1541
+ #: app/views/groups/new.php:38
1542
+ msgid "Current Group"
 
1543
  msgstr ""
1544
 
1545
+ #. translators: %1$s: open strong tag, %2$s close strong tag
1546
+ #: app/views/groups/edit.php:61
1547
+ #: app/views/groups/new.php:60
1548
+ msgid "Select some links for this group. %1$sNote: each link can only be in one group at a time.%2$s"
1549
  msgstr ""
1550
 
1551
+ #: app/views/groups/list.php:6
1552
+ msgid "Groups"
 
1553
  msgstr ""
1554
 
1555
+ #: app/views/groups/list.php:7
1556
+ msgid "Add Group"
 
1557
  msgstr ""
1558
 
1559
+ #: app/views/groups/list.php:20
1560
+ #: pro/app/views/reports/list.php:18
1561
+ msgid "Search"
1562
  msgstr ""
1563
 
1564
+ #: app/views/groups/list.php:62
1565
+ msgid "No Pretty Link Groups were found"
1566
  msgstr ""
1567
 
1568
+ #: app/views/groups/list.php:78
1569
+ #: pro/app/views/reports/list.php:71
1570
+ msgid "Edit"
1571
  msgstr ""
1572
+
1573
+ #: app/views/groups/list.php:79
1574
+ msgid "Are you sure you want to delete your %s Pretty Link Group?"
1575
  msgstr ""
1576
 
1577
+ #: app/views/groups/list.php:79
1578
+ #: pro/app/views/reports/list.php:72
1579
+ msgid "Delete"
1580
  msgstr ""
1581
 
1582
+ #: app/views/groups/list.php:80
1583
+ #: app/views/groups/list.php:84
1584
+ msgid "View links in %s"
1585
  msgstr ""
1586
 
1587
+ #: app/views/groups/list.php:81
1588
+ msgid "View hits in %s"
1589
  msgstr ""
1590
 
1591
+ #: app/views/groups/new.php:10
1592
+ msgid "New Group"
1593
  msgstr ""
1594
 
1595
+ #: app/views/groups/new.php:22
1596
+ #: pro/app/views/reports/new.php:17
1597
+ msgid "Name*:"
1598
  msgstr ""
1599
 
1600
+ #: app/views/groups/new.php:71
1601
+ #: app/views/widgets/widget.php:21
1602
+ #: pro/app/views/reports/new.php:66
1603
+ msgid "Create"
1604
  msgstr ""
1605
 
1606
+ #: app/views/links/form.php:28
1607
+ msgid "Basic"
1608
  msgstr ""
1609
 
1610
+ #: app/views/links/form.php:29
1611
+ msgid "Advanced"
1612
  msgstr ""
1613
 
1614
+ #: app/views/links/form_advanced.php:9
1615
+ msgid "Nofollow Link"
1616
  msgstr ""
1617
 
1618
+ #: app/views/links/form_advanced.php:10
1619
+ msgid "Add a nofollow and noindex to this link's http redirect header. (Recommended)"
1620
  msgstr ""
1621
 
1622
+ #: app/views/links/form_advanced.php:22
1623
+ msgid "Sponsored Link"
1624
  msgstr ""
1625
 
1626
+ #: app/views/links/form_advanced.php:23
1627
+ msgid "Add a sponsored attribute to this link's http redirect header. Recommended if this is an affiliate link."
1628
  msgstr ""
1629
 
1630
+ #: app/views/links/form_advanced.php:32
1631
+ #: app/views/links/form_advanced.php:35
1632
+ msgid "Delay Redirect"
1633
  msgstr ""
1634
 
1635
+ #: app/views/links/form_advanced.php:36
1636
+ msgid "Time in seconds to wait before redirecting"
1637
  msgstr ""
1638
 
1639
+ #: app/views/links/form_advanced.php:45
1640
+ #: app/views/links/form_advanced.php:48
1641
+ msgid "Parameter Forwarding"
1642
  msgstr ""
1643
 
1644
+ #: app/views/links/form_advanced.php:49
1645
+ msgid "Forward parameters passed to this link onto the Target URL"
1646
  msgstr ""
1647
 
1648
+ #: app/views/links/form_advanced.php:62
1649
+ msgid "Enable Pretty Link's built-in hit (click) tracking"
 
1650
  msgstr ""
1651
 
1652
+ #: app/views/links/form_advanced.php:71
1653
+ #: app/views/links/form_advanced.php:74
1654
+ #: pro/app/views/links/bulk-edit.php:10
1655
+ msgid "Google Analytics"
1656
  msgstr ""
1657
 
1658
+ #: app/views/links/form_advanced.php:75
1659
+ msgid "Requires the Google Analyticator plugin be installed and configured. This setting has no impact on the MonsterInsights integration with Pretty Links."
1660
  msgstr ""
1661
 
1662
+ #: app/views/links/form_advanced.php:88
1663
+ msgid "It appears that %s is currently installed. Pretty Link will attempt to use its settings to track this link."
1664
  msgstr ""
1665
 
1666
+ #: app/views/links/form_advanced.php:97
1667
+ msgid "No Google Analytics Plugin is currently installed. Pretty Link cannot track links using Google Analytics until one is."
1668
  msgstr ""
1669
 
1670
+ #: app/views/links/form_basic.php:6
1671
+ msgid "Redirection*"
1672
  msgstr ""
1673
 
1674
+ #: app/views/links/form_basic.php:9
1675
+ #: app/views/options/form.php:77
1676
+ msgid "Redirection Type"
1677
  msgstr ""
1678
 
1679
+ #: app/views/links/form_basic.php:10
1680
+ msgid "This is the method of redirection for your link."
1681
  msgstr ""
1682
 
1683
+ #: app/views/links/form_basic.php:24
1684
+ #: app/views/options/form.php:87
1685
+ msgid "Get cloaked redirects, Javascript redirects and more when you %1$sUpgrade to PRO%2$s"
1686
  msgstr ""
1687
 
1688
+ #: app/views/links/form_basic.php:32
1689
+ msgid "Target URL*"
1690
  msgstr ""
1691
 
1692
+ #: app/views/links/form_basic.php:35
1693
+ #: app/views/shared/tinymce_form_popup.php:13
1694
+ #: app/views/shared/tinymce_form_popup.php:82
1695
+ #: app/views/widgets/widget.php:11
1696
+ msgid "Target URL"
1697
  msgstr ""
1698
 
1699
+ #: app/views/links/form_basic.php:36
1700
+ msgid "This is the URL that your Pretty Link will redirect to."
1701
  msgstr ""
1702
 
1703
+ #: app/views/links/form_basic.php:45
1704
+ msgid "Pretty Link*"
 
 
1705
  msgstr ""
1706
 
1707
+ #: app/views/links/form_basic.php:49
1708
+ msgid "This is how your pretty link will appear. You can edit the Pretty Link slug here."
1709
  msgstr ""
1710
 
1711
+ #: app/views/links/form_basic.php:61
1712
+ #: app/views/links/form_basic.php:64
1713
+ msgid "Notes"
1714
  msgstr ""
1715
 
1716
+ #: app/views/links/form_basic.php:65
1717
+ msgid "This is a field where you can enter notes about a particular link. This notes field is mainly for your own link management needs. It isn't currently used anywhere on the front end."
 
1718
  msgstr ""
1719
 
1720
+ #: app/views/links/form_pro.php:17
1721
+ #: pro/app/views/links/form.php:6
1722
+ msgid "Expire"
1723
  msgstr ""
1724
 
1725
+ #: app/views/links/form_pro.php:20
1726
+ #: pro/app/views/links/form.php:9
1727
+ msgid "Expire Link"
1728
  msgstr ""
1729
 
1730
+ #: app/views/links/form_pro.php:21
1731
+ #: pro/app/views/links/form.php:10
1732
+ msgid "Set this link to expire after a specific date or number of clicks."
 
 
 
 
 
 
1733
  msgstr ""
1734
 
1735
+ #: app/views/links/form_pro.php:35
1736
+ #: pro/app/views/links/form.php:136
1737
+ msgid "Auto-Replace Keywords"
1738
  msgstr ""
1739
 
1740
+ #: app/views/links/form_pro.php:36
1741
+ msgid "Enter a comma separated list of keywords / keyword phrases that you'd like to replace with this link in your Posts & Pages."
 
 
1742
  msgstr ""
1743
 
1744
+ #: app/views/links/form_pro.php:46
1745
+ #: pro/app/views/links/form.php:145
1746
+ msgid "URL Replacements"
 
1747
  msgstr ""
1748
 
1749
+ #: app/views/links/form_pro.php:49
1750
+ #: pro/app/views/links/form.php:148
1751
+ msgid "Auto-Replace URLs"
1752
  msgstr ""
1753
 
1754
+ #. translators: %1$s: open code tag, %2$s: close code tag
1755
+ #: app/views/links/form_pro.php:52
1756
+ msgid "Enter a comma separated list of the URLs that you'd like to replace with this Pretty Link in your Posts & Pages. These must be formatted as URLs for example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
1757
  msgstr ""
1758
 
1759
+ #: app/views/links/form_pro.php:66
1760
+ #: app/views/links/form_pro.php:69
1761
+ #: pro/app/views/links/form.php:167
1762
+ #: pro/app/views/links/form.php:170
1763
+ msgid "Head Scripts"
1764
  msgstr ""
1765
 
1766
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
1767
+ #: app/views/links/form_pro.php:72
1768
+ #: pro/app/views/links/form.php:173
1769
+ msgid "Useful for adding Google Analytics tracking, Facebook retargeting pixels, or any other kind of tracking script to the HTML head for this pretty link.%1$s%1$sThese scripts will be in addition to any global one's you've defined in the options.%1$s%1$s%2$sNOTE:%3$s This does NOT work with 301, 302 and 307 type redirects."
1770
  msgstr ""
1771
 
1772
+ #: app/views/links/form_pro.php:86
1773
+ #: pro/app/views/links/form.php:189
1774
+ msgid "Dynamic Redirection"
1775
  msgstr ""
1776
 
1777
+ #: app/views/links/form_pro.php:89
1778
+ #: pro/app/views/links/form.php:192
1779
+ msgid "Dynamic Redirection Options"
1780
  msgstr ""
1781
 
1782
+ #: app/views/links/form_pro.php:90
1783
+ #: pro/app/views/links/form.php:193
1784
+ msgid "These powerful options are available to give you dynamic control over redirection for this pretty link."
1785
  msgstr ""
1786
 
1787
+ #: app/views/links/form_pro.php:96
1788
+ #: app/views/options/form.php:1015
1789
+ #: app/views/shared/tinymce_form_popup.php:83
1790
+ #: app/views/shared/tinymce_form_popup.php:87
1791
+ #: pro/app/views/links/form.php:198
1792
+ #: pro/app/views/options/autocreate.php:44
1793
+ #: pro/app/views/options/form.php:833
1794
+ #: pro/app/views/tools/generator.php:37
1795
+ #: pro/app/widgets/PlpPublicLinksWidget.php:94
1796
+ msgid "None"
1797
  msgstr ""
1798
 
1799
+ #: app/views/links/form_pro.php:97
1800
+ #: pro/app/models/PlpReport.php:412
1801
+ #: pro/app/models/PlpReport.php:419
1802
+ #: pro/app/views/links/form.php:199
1803
+ msgid "Rotation"
1804
  msgstr ""
1805
 
1806
+ #: app/views/links/form_pro.php:98
1807
+ #: pro/app/views/links/form.php:200
1808
+ msgid "Geographic"
1809
  msgstr ""
1810
 
1811
+ #: app/views/links/form_pro.php:99
1812
+ #: pro/app/views/links/form.php:201
1813
+ msgid "Technology"
1814
  msgstr ""
1815
 
1816
+ #: app/views/links/form_pro.php:100
1817
+ #: pro/app/views/links/form.php:202
1818
+ msgid "Time"
1819
  msgstr ""
1820
 
1821
+ #: app/views/options/form.php:4
1822
+ msgid "User Manual"
1823
  msgstr ""
1824
 
1825
+ #. translators: %1$s: open strong tag, %2$s: close strong tag
1826
+ #: app/views/options/form.php:17
1827
+ msgid "%1$sWordPress Must be Configured:%2$s Pretty Links won't work until you select a Permalink Structure other than 'Default'"
1828
  msgstr ""
1829
 
1830
+ #: app/views/options/form.php:22
1831
+ msgid "Permalink Settings"
1832
  msgstr ""
1833
 
1834
+ #: app/views/options/form.php:49
1835
+ msgid "General"
1836
  msgstr ""
1837
 
1838
+ #: app/views/options/form.php:52
1839
+ msgid "Reporting"
1840
  msgstr ""
1841
 
1842
+ #: app/views/options/form.php:53
1843
+ msgid "Replacements"
1844
  msgstr ""
1845
 
1846
+ #: app/views/options/form.php:54
1847
+ msgid "Auto-Create Links"
1848
  msgstr ""
1849
 
1850
+ #: app/views/options/form.php:55
1851
+ #: app/views/shared/tinymce_form_popup.php:37
1852
+ #: pro/app/controllers/PlpLinksController.php:623
1853
+ #: pro/app/controllers/PlpLinksController.php:669
1854
+ msgid "Pretty Bar"
1855
  msgstr ""
1856
 
1857
+ #: app/views/options/form.php:56
1858
+ msgid "Social"
1859
  msgstr ""
1860
 
1861
+ #: app/views/options/form.php:57
1862
+ msgid "Public"
1863
  msgstr ""
1864
 
1865
+ #: app/views/options/form.php:64
1866
+ msgid "General Options"
1867
  msgstr ""
1868
 
1869
+ #: app/views/options/form.php:70
1870
+ msgid "Default Link Options"
1871
  msgstr ""
1872
 
1873
+ #: app/views/options/form.php:75
1874
+ msgid "Redirection"
1875
  msgstr ""
1876
 
1877
+ #: app/views/options/form.php:78
1878
+ msgid "Select the type of redirection you want your newly created links to have."
1879
  msgstr ""
1880
 
1881
+ #: app/views/options/form.php:95
1882
+ #: app/views/options/form.php:97
1883
+ msgid "Enable Tracking"
1884
  msgstr ""
1885
 
1886
+ #: app/views/options/form.php:98
1887
+ msgid "Default all new links to be tracked."
1888
  msgstr ""
1889
 
1890
+ #: app/views/options/form.php:107
1891
+ msgid "Enable No Follow"
1892
  msgstr ""
1893
 
1894
+ #: app/views/options/form.php:109
1895
+ msgid "Add No Follow"
1896
  msgstr ""
1897
 
1898
+ #: app/views/options/form.php:110
1899
+ msgid "Add the 'nofollow' attribute by default to new links. This will add nofollow and noindex in the HTTP Response headers when enabled."
1900
  msgstr ""
1901
 
1902
+ #: app/views/options/form.php:119
1903
+ msgid "Enable Sponsored"
1904
  msgstr ""
1905
 
1906
+ #: app/views/options/form.php:121
1907
+ #: app/views/options/form.php:415
1908
+ #: pro/app/views/options/form.php:127
1909
+ msgid "Add Sponsored"
1910
  msgstr ""
1911
 
1912
+ #: app/views/options/form.php:122
1913
+ msgid "Add the 'sponsored' attribute by default to new links. This will add sponsored in the HTTP Response headers when enabled."
1914
  msgstr ""
1915
 
1916
+ #: app/views/options/form.php:131
1917
+ msgid "Enable Permalink Fix"
1918
  msgstr ""
1919
 
1920
+ #: app/views/options/form.php:133
1921
+ msgid "Use fix for index.php Permalink Structure"
1922
  msgstr ""
1923
 
1924
+ #: app/views/options/form.php:134
1925
+ msgid "This option should ONLY be checked if you have elements in your permalink structure that must be present in any link on your site. For example, some WordPress installs don't have the benefit of full rewrite capabilities and in this case you'd need an index.php included in each link (http://example.com/index.php/mycoolslug instead of http://example.com/mycoolslug). If this is the case for you then check this option but the vast majority of users will want to keep this unchecked."
1926
  msgstr ""
1927
 
1928
+ #: app/views/options/form.php:147
1929
+ #: app/views/options/form.php:149
1930
+ #: pro/app/views/links/link-options.php:3
1931
+ #: pro/app/views/links/link-options.php:5
1932
+ msgid "Base Slug Prefix"
1933
  msgstr ""
1934
 
1935
+ #. translators: %1$s: open b tag, %2$s close b tag
1936
+ #: app/views/options/form.php:152
1937
+ #: pro/app/views/links/link-options.php:8
1938
+ msgid "Use this to prefix all newly generated pretty links with a directory of your choice. For example set to %1$sout%2$s to make your pretty links look like http://site.com/%1$sout%2$s/xyz. Changing this option will NOT affect existing pretty links. If you do not wish to use a directory prefix, leave this text field blank. Whatever you type here will be sanitized and modified to ensure it is URL-safe. So %1$sHello World%2$s might get changed to something like %1$shello-world%2$s instead. Lowercase letters, numbers, dashes, and underscores are allowed."
1939
  msgstr ""
1940
 
1941
+ #: app/views/options/form.php:166
1942
+ #: app/views/options/form.php:168
1943
+ #: pro/app/views/links/link-options.php:21
1944
+ #: pro/app/views/links/link-options.php:23
1945
+ msgid "Slug Character Count"
1946
  msgstr ""
1947
 
1948
+ #: app/views/options/form.php:169
1949
+ #: pro/app/views/links/link-options.php:24
1950
+ msgid "The number of characters to use when auto-generating a random slug for pretty links. The default is 4. You cannot use less than 2."
 
 
1951
  msgstr ""
1952
 
1953
+ #: app/views/options/form.php:180
1954
+ #: app/views/options/form.php:181
1955
+ #: pro/app/views/links/link-options.php:34
1956
+ #: pro/app/views/links/link-options.php:35
1957
+ msgid "Enable Google Analytics"
1958
  msgstr ""
1959
 
1960
+ #: app/views/options/form.php:182
1961
+ msgid "Requires the Google Analyticator plugin be installed. If you rely on MonsterInsights plugin for Google Analytics, leave this setting disabled as it has no affect."
 
 
1962
  msgstr ""
1963
 
1964
+ #: app/views/options/form.php:193
1965
+ msgid "Enable %sQR Codes%s"
 
 
1966
  msgstr ""
1967
 
1968
+ #: app/views/options/form.php:195
1969
+ #: pro/app/views/links/link-options.php:57
1970
+ msgid "Generate QR Codes"
 
1971
  msgstr ""
1972
 
1973
+ #: app/views/options/form.php:196
1974
+ #: pro/app/views/links/link-options.php:58
1975
+ msgid "This will enable a link in your pretty link admin that will allow you to automatically download a QR Code for each individual Pretty Link."
1976
  msgstr ""
1977
 
1978
+ #: app/views/options/form.php:207
1979
+ #: app/views/options/form.php:209
1980
+ #: pro/app/views/links/link-options.php:68
1981
+ #: pro/app/views/links/link-options.php:70
1982
+ msgid "Global Head Scripts"
1983
  msgstr ""
1984
 
1985
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
1986
+ #: app/views/options/form.php:212
1987
+ #: pro/app/views/links/link-options.php:73
1988
+ msgid "Useful for adding Google Analytics tracking, Facebook retargeting pixels, or any other kind of tracking script to the HTML head.%1$s%1$sWhat you enter in this box will be applied to all supported pretty links.%1$s%1$s%2$sNOTE:%3$s This does NOT work with 301, 302 and 307 type redirects."
1989
  msgstr ""
1990
 
1991
+ #: app/views/options/form.php:239
1992
+ msgid "Reporting Options"
1993
  msgstr ""
1994
 
1995
+ #: app/views/options/form.php:244
1996
+ #: app/views/options/form.php:246
1997
+ msgid "Tracking Style"
1998
  msgstr ""
1999
 
2000
+ #: app/views/options/form.php:247
2001
+ msgid "Changing your tracking style can affect the accuracy of your existing statistics. Extended mode must be used for Conversion reporting."
2002
  msgstr ""
2003
 
2004
+ #: app/views/options/form.php:251
2005
+ msgid "Normal Tracking"
2006
  msgstr ""
2007
 
2008
+ #: app/views/options/form.php:252
2009
+ msgid "Extended Tracking (more stats / slower performance)"
2010
  msgstr ""
2011
 
2012
+ #: app/views/options/form.php:253
2013
+ msgid "Simple Click Count Tracking (less stats / faster performance)"
2014
  msgstr ""
2015
 
2016
+ #: app/views/options/form.php:259
2017
+ msgid "Excluded IP Addresses:"
2018
  msgstr ""
2019
 
2020
+ #: app/views/options/form.php:261
2021
+ msgid "Excluded IP Addresses"
2022
  msgstr ""
2023
 
2024
+ #: app/views/options/form.php:262
2025
+ msgid "Enter IP Addresses or IP Ranges you want to exclude from your Click data and Stats. Each IP Address should be separated by commas. Example: 192.168.0.1, 192.168.2.1, 192.168.3.4 or 192.168.*.*"
2026
  msgstr ""
2027
 
2028
+ #: app/views/options/form.php:265
2029
+ msgid "FYI, your current IP address is %s."
2030
  msgstr ""
2031
 
2032
+ #: app/views/options/form.php:276
2033
+ msgid "Auto-Trim Clicks"
2034
  msgstr ""
2035
 
2036
+ #: app/views/options/form.php:278
2037
+ msgid "Automatically Trim Clicks"
2038
  msgstr ""
2039
 
2040
+ #: app/views/options/form.php:279
2041
+ msgid "Will automatically delete all hits older than 90 days. We strongly recommend doing this to keep your database performance up. This will permanently delete this click data, and is not undo-able. "
2042
  msgstr ""
2043
 
2044
+ #: app/views/options/form.php:288
2045
+ #: app/views/options/form.php:290
2046
+ msgid "Filter Robots"
2047
  msgstr ""
2048
 
2049
+ #: app/views/options/form.php:291
2050
+ msgid "Filter known Robots and unidentifiable browser clients from your click data, stats and reports. Works best if Tracking Style above is set to 'Extended Tracking'."
 
2051
  msgstr ""
2052
 
2053
+ #: app/views/options/form.php:307
2054
+ #: app/views/options/form.php:309
2055
+ msgid "Whitelist IP Addresses"
2056
  msgstr ""
2057
 
2058
+ #: app/views/options/form.php:310
2059
+ msgid "Enter IP Addresses or IP Ranges you want to always include in your Click data and Stats even if they are flagged as robots. Each IP Address should be separated by commas. Example: 192.168.0.1, 192.168.2.1, 192.168.3.4 or 192.168.*.*"
2060
  msgstr ""
2061
 
2062
+ #: app/views/options/form.php:324
2063
+ #: pro/app/views/options/form.php:4
2064
+ msgid "Keyword &amp; URL Auto Replacements Options"
2065
  msgstr ""
2066
 
2067
+ #: app/views/options/form.php:332
2068
+ #: pro/app/views/options/form.php:13
2069
+ msgid "Enable Replacements"
2070
  msgstr ""
2071
 
2072
+ #: app/views/options/form.php:334
2073
+ #: pro/app/views/options/form.php:15
2074
+ msgid "Enable Keyword and URL Auto Replacement"
2075
  msgstr ""
2076
 
2077
+ #: app/views/options/form.php:335
2078
+ #: pro/app/views/options/form.php:16
2079
+ msgid "If checked, this will enable you to automatically replace keywords and/or URLs on your blog with pretty links. You will specify the specific keywords and urls from your Pretty Link edit page."
2080
  msgstr ""
2081
 
2082
+ #: app/views/options/form.php:354
2083
+ #: pro/app/views/options/form.php:34
2084
+ msgid "Thresholds"
2085
  msgstr ""
2086
 
2087
+ #: app/views/options/form.php:356
2088
+ #: pro/app/views/options/form.php:36
2089
+ msgid "Set Keyword Replacement Thresholds"
2090
  msgstr ""
2091
 
2092
+ #: app/views/options/form.php:357
2093
+ #: pro/app/views/options/form.php:37
2094
+ msgid "Don't want to have too many keyword replacements per page? Select to set some reasonable keyword replacement thresholds."
 
2095
  msgstr ""
2096
 
2097
+ #: app/views/options/form.php:373
2098
+ #: pro/app/views/options/form.php:87
2099
+ msgid "Open in New Window"
2100
  msgstr ""
2101
 
2102
+ #: app/views/options/form.php:375
2103
+ #: pro/app/views/options/form.php:89
2104
+ msgid "Open Keyword Replacement Links in New Window"
2105
  msgstr ""
2106
 
2107
+ #. translators: %1$s: open strong tag, %2$s: close strong tag
2108
+ #: app/views/options/form.php:378
2109
+ #: pro/app/views/options/form.php:92
2110
+ msgid "Ensure that these keyword replacement links are opened in a separate window. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
2111
  msgstr ""
2112
 
2113
+ #: app/views/options/form.php:393
2114
+ #: pro/app/views/options/form.php:106
2115
+ msgid "Add No Follows"
2116
  msgstr ""
2117
 
2118
+ #: app/views/options/form.php:395
2119
+ #: pro/app/views/options/form.php:108
2120
+ msgid "Add 'nofollow' attribute to all Keyword Pretty Links"
2121
  msgstr ""
2122
 
2123
+ #. translators: %1$s: open code tag, %2$s: close code tag, %3$s: open strong tag, %4$s close strong tag
2124
+ #: app/views/options/form.php:398
2125
+ #: pro/app/views/options/form.php:111
2126
+ msgid "This adds the html %1$sNOFOLLOW%2$s attribute to all keyword replacement links. %3$sNote:%4$s This does not apply to url replacements--only keyword replacements."
2127
  msgstr ""
2128
 
2129
+ #: app/views/options/form.php:417
2130
+ #: pro/app/views/options/form.php:129
2131
+ msgid "Add 'sponsored' attribute to all Keyword Pretty Links"
2132
  msgstr ""
2133
 
2134
+ #. translators: %1$s: open code tag, %2$s: close code tag, %3$s: open strong tag, %4$s close strong tag
2135
+ #: app/views/options/form.php:420
2136
+ #: pro/app/views/options/form.php:132
2137
+ msgid "This adds the html %1$sSPONSORED%2$s attribute to all keyword replacement links. %3$sNote:%4$s This does not apply to url replacements--only keyword replacements."
2138
  msgstr ""
2139
 
2140
+ #: app/views/options/form.php:437
2141
+ #: pro/app/views/options/form.php:148
2142
+ msgid "Custom CSS"
2143
  msgstr ""
2144
 
2145
+ #: app/views/options/form.php:439
2146
+ #: pro/app/views/options/form.php:150
2147
+ msgid "Add custom CSS to your keyword replacement links"
2148
  msgstr ""
2149
 
2150
+ #. translators: %1$s: open strong tag, %2$s: close strong tag
2151
+ #: app/views/options/form.php:442
2152
+ #: pro/app/views/options/form.php:153
2153
+ msgid "Add some custom formatting to your keyword pretty link replacements. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
2154
  msgstr ""
2155
 
2156
+ #: app/views/options/form.php:457
2157
+ #: pro/app/views/options/form.php:167
2158
+ msgid "Custom Hover CSS"
2159
  msgstr ""
2160
 
2161
+ #: app/views/options/form.php:459
2162
+ #: pro/app/views/options/form.php:169
2163
+ msgid "Add custom hover CSS to your keyword replacement links"
2164
  msgstr ""
2165
 
2166
+ #. translators: %1$s: open strong tag, %2$s: close strong tag
2167
+ #: app/views/options/form.php:462
2168
+ #: pro/app/views/options/form.php:172
2169
+ msgid "Add some custom formatting to the hover attribute of your keyword pretty links. %1$sNote%2$s: This does not apply to url replacements--only keyword replacements."
2170
  msgstr ""
2171
 
2172
+ #: app/views/options/form.php:477
2173
+ #: pro/app/views/options/form.php:186
2174
+ msgid "Link to Disclosures"
 
2175
  msgstr ""
2176
 
2177
+ #: app/views/options/form.php:480
2178
+ #: pro/app/views/options/form.php:189
2179
+ msgid "Automatically Add a Link to Disclosures"
2180
  msgstr ""
2181
 
2182
+ #: app/views/options/form.php:481
2183
+ #: pro/app/views/options/form.php:190
2184
+ msgid "When enabled, this will add a link to your official affiliate link disclosure page to any page, post or custom post type that have any keyword or URL replacements. You'll also be able to customize the URL and position of the disclosure link."
2185
  msgstr ""
2186
 
2187
+ #: app/views/options/form.php:494
2188
+ #: pro/app/views/options/form.php:262
2189
+ msgid "Keyword Disclosures"
2190
  msgstr ""
2191
 
2192
+ #: app/views/options/form.php:497
2193
+ #: pro/app/views/options/form.php:265
2194
+ msgid "Automatically Add Affiliate Link Disclosures to Keyword Replacements"
2195
  msgstr ""
2196
 
2197
+ #. translators: %1$s: open b tag, %2$s close b tag
2198
+ #: app/views/options/form.php:500
2199
+ #: pro/app/views/options/form.php:268
2200
+ msgid "When enabled, this will add an affiliate link disclosure next to each one of your keyword replacements. %1$sNote:%2$s This does not apply to url replacements--only keyword replacements."
2201
  msgstr ""
2202
 
2203
+ #: app/views/options/form.php:516
2204
+ #: pro/app/views/options/form.php:309
2205
+ msgid "Replace All URLs"
2206
  msgstr ""
2207
 
2208
+ #: app/views/options/form.php:518
2209
+ #: pro/app/views/options/form.php:311
2210
+ msgid "Replace All non-Pretty Link URLs With Pretty Link URLs"
2211
  msgstr ""
2212
 
2213
+ #: app/views/options/form.php:519
2214
+ #: pro/app/views/options/form.php:312
2215
+ msgid "This feature will take each url it finds and create or use an existing pretty link pointing to the url and replace it with the pretty link."
2216
  msgstr ""
2217
 
2218
+ #: app/views/options/form.php:531
2219
+ #: pro/app/views/options/form.php:354
2220
+ msgid "Replace in Comments"
2221
  msgstr ""
2222
 
2223
+ #: app/views/options/form.php:533
2224
+ #: pro/app/views/options/form.php:356
2225
+ msgid "Replace Keywords and URLs in Comments"
2226
  msgstr ""
2227
 
2228
+ #: app/views/options/form.php:534
2229
+ #: pro/app/views/options/form.php:357
2230
+ msgid "This option will enable the keyword / URL replacement routine to run in Comments."
2231
  msgstr ""
2232
 
2233
+ #: app/views/options/form.php:546
2234
+ #: pro/app/views/options/form.php:368
2235
+ msgid "Replace in Feeds"
2236
  msgstr ""
2237
 
2238
+ #: app/views/options/form.php:548
2239
+ #: pro/app/views/options/form.php:370
2240
+ msgid "Replace Keywords and URLs in Feeds"
2241
  msgstr ""
2242
 
2243
+ #. translators: %1$s: br tag, %2$s open strong tag, %3$s: close strong tag
2244
+ #: app/views/options/form.php:551
2245
+ #: pro/app/views/options/form.php:373
2246
+ msgid "This option will enable the keyword / URL replacement routine to run in RSS Feeds.%1$s%2$sNote:%3$s This option can slow the load speed of your RSS feed -- unless used in conjunction with a caching plugin like W3 Total Cache or WP Super Cache.%1$s%2$sNote #2%3$s This option will only work if you have \"Full Text\" selected in your General WordPress Reading settings.%1$s%2$sNote #3:%3$s If this option is used along with \"Replace Keywords and URLs in Comments\" then your post comment feeds will have keywords replaced in them as well."
2247
  msgstr ""
2248
 
2249
+ #: app/views/options/form.php:567
2250
+ #: app/views/options/form.php:569
2251
+ #: pro/app/views/options/form.php:388
2252
+ #: pro/app/views/options/form.php:390
2253
+ msgid "Index Replacements"
2254
  msgstr ""
2255
 
2256
+ #. translators: %1$s: br tag, %2$s open strong tag, %3$s: close strong tag
2257
+ #: app/views/options/form.php:572
2258
+ #: pro/app/views/options/form.php:393
2259
+ msgid "This feature will index all of your keyword & URL replacements to dramatically improve performance.%1$s%1$sIf your site has a large number of replacements and/or posts then this feature may increase the load on your server temporarily and your replacements may not show up on your posts for a day or two initially (until all posts are indexed).%1$s%1$s%2$sNote:%3$s this feature requires the use of wp-cron."
2260
  msgstr ""
2261
 
2262
+ #: app/views/options/form.php:591
2263
+ msgid "Keywork &amp; URL Options"
2264
  msgstr ""
2265
 
2266
+ #: app/views/options/form.php:598
2267
+ #: app/views/options/form.php:642
2268
+ #: pro/app/views/options/form.php:468
2269
+ msgid "Auto-Create Shortlink Options"
2270
  msgstr ""
2271
 
2272
+ #: app/views/options/form.php:606
2273
+ msgid "Post Shortlinks"
2274
  msgstr ""
2275
 
2276
+ #: app/views/options/form.php:609
2277
+ msgid "Create Pretty Links for Posts"
2278
  msgstr ""
2279
 
2280
+ #: app/views/options/form.php:610
2281
+ msgid "Automatically Create a Pretty Link for each of your published Posts"
 
 
2282
  msgstr ""
2283
 
2284
+ #: app/views/options/form.php:623
2285
+ msgid "Page Shortlinks"
2286
  msgstr ""
2287
 
2288
+ #: app/views/options/form.php:626
2289
+ msgid "Create Pretty Links for Pages"
2290
+ msgstr ""
2291
+
2292
+ #: app/views/options/form.php:627
2293
+ msgid "Automatically Create a Pretty Link for each of your published Pages"
2294
  msgstr ""
2295
 
2296
+ #: app/views/options/form.php:649
2297
+ #: app/views/options/form.php:959
2298
+ #: pro/app/views/options/form.php:489
2299
+ msgid "Pretty Bar Options"
2300
  msgstr ""
2301
 
2302
+ #: app/views/options/form.php:657
2303
+ #: pro/app/views/options/form.php:495
2304
+ msgid "Image URL"
2305
  msgstr ""
2306
 
2307
+ #: app/views/options/form.php:659
2308
+ #: pro/app/views/options/form.php:497
2309
+ msgid "Pretty Bar Image URL"
2310
  msgstr ""
2311
 
2312
+ #: app/views/options/form.php:660
2313
+ #: pro/app/views/options/form.php:498
2314
+ msgid "If set, this will replace the logo image on the Pretty Bar. The image that this URL references should be 48x48 Pixels to fit."
2315
  msgstr ""
2316
 
2317
+ #: app/views/options/form.php:672
2318
+ #: pro/app/views/options/form.php:509
2319
+ msgid "Background Image URL"
2320
  msgstr ""
2321
 
2322
+ #: app/views/options/form.php:674
2323
+ #: pro/app/views/options/form.php:511
2324
+ msgid "Pretty Bar Background Image URL"
2325
  msgstr ""
2326
 
2327
+ #: app/views/options/form.php:675
2328
+ #: pro/app/views/options/form.php:512
2329
+ msgid "If set, this will replace the background image on Pretty Bar. The image that this URL references should be 65px tall - this image will be repeated horizontally across the bar."
2330
  msgstr ""
2331
 
2332
+ #: app/views/options/form.php:687
2333
+ #: pro/app/views/options/form.php:523
2334
+ msgid "Background Color"
2335
  msgstr ""
2336
 
2337
+ #: app/views/options/form.php:689
2338
+ #: pro/app/views/options/form.php:525
2339
+ msgid "Pretty Bar Background Color"
2340
  msgstr ""
2341
 
2342
+ #: app/views/options/form.php:690
2343
+ #: pro/app/views/options/form.php:526
2344
+ msgid "This will alter the background color of the Pretty Bar if you haven't specified a Pretty Bar background image."
2345
  msgstr ""
2346
 
2347
+ #: app/views/options/form.php:702
2348
+ #: pro/app/views/options/form.php:537
2349
+ msgid "Text Color"
2350
  msgstr ""
2351
 
2352
+ #: app/views/options/form.php:704
2353
+ #: pro/app/views/options/form.php:539
2354
+ msgid "Pretty Bar Text Color"
2355
  msgstr ""
2356
 
2357
+ #. translators: %1$s: open code tag, %2$s: close code tag
2358
+ #: app/views/options/form.php:707
2359
+ #: pro/app/views/options/form.php:542
2360
+ msgid "If not set, this defaults to black (RGB value %1$s#000000%2$s) but you can change it to whatever color you like."
2361
  msgstr ""
2362
 
2363
+ #: app/views/options/form.php:722
2364
+ #: pro/app/views/options/form.php:556
2365
+ msgid "Link Color"
2366
  msgstr ""
2367
 
2368
+ #: app/views/options/form.php:724
2369
+ #: pro/app/views/options/form.php:558
2370
+ msgid "Pretty Bar Link Color"
2371
  msgstr ""
2372
 
2373
+ #. translators: %1$s: open code tag, %2$s: close code tag
2374
+ #: app/views/options/form.php:727
2375
+ #: pro/app/views/options/form.php:561
2376
+ msgid "If not set, this defaults to blue (RGB value %1$s#0000ee%2$s) but you can change it to whatever color you like."
2377
  msgstr ""
2378
 
2379
+ #: app/views/options/form.php:742
2380
+ #: pro/app/views/options/form.php:575
2381
+ msgid "Link Hover Color"
2382
  msgstr ""
2383
 
2384
+ #: app/views/options/form.php:744
2385
+ #: pro/app/views/options/form.php:577
2386
+ msgid "Pretty Bar Link Hover Color"
2387
  msgstr ""
2388
 
2389
+ #. translators: %1$s: open code tag, %2$s: close code tag
2390
+ #: app/views/options/form.php:747
2391
+ #: pro/app/views/options/form.php:580
2392
+ msgid "If not set, this defaults to RGB value %1$s#ababab%2$s but you can change it to whatever color you like."
2393
  msgstr ""
2394
 
2395
+ #: app/views/options/form.php:762
2396
+ #: pro/app/views/options/form.php:594
2397
+ msgid "Visited Link Color"
2398
  msgstr ""
2399
 
2400
+ #: app/views/options/form.php:764
2401
+ #: pro/app/views/options/form.php:596
2402
+ msgid "Pretty Bar Visited Link Color"
2403
  msgstr ""
2404
 
2405
+ #. translators: %1$s: open code tag, %2$s: close code tag
2406
+ #: app/views/options/form.php:767
2407
+ #: pro/app/views/options/form.php:599
2408
+ msgid "If not set, this defaults to RGB value %1$s#551a8b%2$s but you can change it to whatever color you like."
2409
  msgstr ""
2410
 
2411
+ #: app/views/options/form.php:782
2412
+ #: pro/app/views/options/form.php:613
2413
+ msgid "Title Char Limit"
2414
  msgstr ""
2415
 
2416
+ #: app/views/options/form.php:784
2417
+ #: pro/app/views/options/form.php:615
2418
+ msgid "Pretty Bar Title Char Limit"
2419
  msgstr ""
2420
 
2421
+ #. translators: %1$s: open code tag, %2$s: close code tag
2422
+ #: app/views/options/form.php:787
2423
+ #: pro/app/views/options/form.php:618
2424
+ msgid "If your Website has a long title then you may need to adjust this value so that it will all fit on the Pretty Bar. It is recommended that you keep this value to %1$s30%2$s characters or less so the Pretty Bar's format looks good across different browsers and screen resolutions."
2425
  msgstr ""
2426
 
2427
+ #: app/views/options/form.php:802
2428
+ #: pro/app/views/options/form.php:632
2429
+ msgid "Description Char Limit"
2430
  msgstr ""
2431
 
2432
+ #: app/views/options/form.php:804
2433
+ #: pro/app/views/options/form.php:634
2434
+ msgid "Pretty Bar Description Char Limit"
2435
  msgstr ""
2436
 
2437
+ #. translators: %1$s: open code tag, %2$s: close code tag
2438
+ #: app/views/options/form.php:807
2439
+ #: pro/app/views/options/form.php:637
2440
+ msgid "If your Website has a long Description (tagline) then you may need to adjust this value so that it will all fit on the Pretty Bar. It is recommended that you keep this value to %1$s40%2$s characters or less so the Pretty Bar's format looks good across different browsers and screen resolutions."
2441
  msgstr ""
2442
 
2443
+ #: app/views/options/form.php:822
2444
+ #: pro/app/views/options/form.php:651
2445
+ msgid "Target URL Char Limit"
2446
  msgstr ""
2447
 
2448
+ #: app/views/options/form.php:824
2449
+ #: pro/app/views/options/form.php:653
2450
+ msgid "Pretty Bar Target URL Char Limit"
2451
  msgstr ""
2452
 
2453
+ #. translators: %1$s: open code tag, %2$s: close code tag
2454
+ #: app/views/options/form.php:827
2455
+ #: pro/app/views/options/form.php:656
2456
+ msgid "If you link to a lot of large Target URLs you may want to adjust this value. It is recommended that you keep this value to %1$s40%2$s or below so the Pretty Bar's format looks good across different browsers and URL sizes"
2457
  msgstr ""
2458
 
2459
+ #: app/views/options/form.php:842
2460
+ #: pro/app/views/options/form.php:670
2461
+ msgid "Show Title"
2462
  msgstr ""
2463
 
2464
+ #: app/views/options/form.php:844
2465
+ #: pro/app/views/options/form.php:672
2466
+ msgid "Pretty Bar Show Title"
2467
  msgstr ""
2468
 
2469
+ #: app/views/options/form.php:845
2470
+ #: pro/app/views/options/form.php:673
2471
+ msgid "Make sure this is checked if you want the title of your blog (and link) to show up on the Pretty Bar."
2472
  msgstr ""
2473
 
2474
+ #: app/views/options/form.php:857
2475
+ #: pro/app/views/options/form.php:684
2476
+ msgid "Show Description"
2477
  msgstr ""
2478
 
2479
+ #: app/views/options/form.php:859
2480
+ #: pro/app/views/options/form.php:686
2481
+ msgid "Pretty Bar Show Description"
2482
  msgstr ""
2483
 
2484
+ #: app/views/options/form.php:860
2485
+ #: pro/app/views/options/form.php:687
2486
+ msgid "Make sure this is checked if you want your site description to show up on the Pretty Bar."
2487
  msgstr ""
2488
 
2489
+ #: app/views/options/form.php:872
2490
+ #: pro/app/views/options/form.php:698
2491
+ msgid "Show Share Links"
2492
  msgstr ""
2493
 
2494
+ #: app/views/options/form.php:874
2495
+ #: pro/app/views/options/form.php:700
2496
+ msgid "Pretty Bar Show Share Links"
2497
  msgstr ""
2498
 
2499
+ #: app/views/options/form.php:875
2500
+ #: pro/app/views/options/form.php:701
2501
+ msgid "Make sure this is checked if you want \"share links\" to show up on the Pretty Bar."
2502
  msgstr ""
2503
 
2504
+ #: app/views/options/form.php:887
2505
+ #: pro/app/views/options/form.php:712
2506
+ msgid "Show Target URL"
2507
  msgstr ""
2508
 
2509
+ #: app/views/options/form.php:889
2510
+ #: pro/app/views/options/form.php:714
2511
+ msgid "Pretty Bar Show Target URL Links"
2512
  msgstr ""
2513
 
2514
+ #: app/views/options/form.php:890
2515
+ #: pro/app/views/options/form.php:715
2516
+ msgid "Make sure this is checked if you want a link displaying the Target URL to show up on the Pretty Bar."
2517
  msgstr ""
2518
 
2519
+ #: app/views/options/form.php:902
2520
+ #: app/views/options/form.php:904
2521
+ #: pro/app/views/options/form.php:726
2522
+ #: pro/app/views/options/form.php:728
2523
+ msgid "Hide Attribution Link"
2524
  msgstr ""
2525
 
2526
+ #. translators: %1$s: br tag, %2$s: open strong tag, %3$s close strong tag, %4$s open em tag, %5$s close em tag, %6$s open link tag, %7$s close link tag
2527
+ #: app/views/options/form.php:907
2528
+ #: pro/app/views/options/form.php:731
2529
+ msgid "Check this to hide the pretty link attribution link on the pretty bar.%1$s%1$s%2$sWait, before you do this, you might want to leave this un-checked and set the alternate URL of this link to your %4$sPretty Links Pro%5$s %6$sAffiliate URL%7$s to earn a few bucks while you are at it.%3$s"
2530
  msgstr ""
2531
 
2532
+ #: app/views/options/form.php:934
2533
+ #: pro/app/views/options/form.php:757
2534
+ msgid "Attribution URL"
2535
  msgstr ""
2536
 
2537
+ #: app/views/options/form.php:936
2538
+ #: pro/app/views/options/form.php:759
2539
+ msgid "Alternate Pretty Bar Attribution URL"
2540
  msgstr ""
2541
 
2542
+ #. translators: %1$s open em tag, %2$s close em tag, %3$s open link tag, %4$s close link tag
2543
+ #: app/views/options/form.php:939
2544
+ #: pro/app/views/options/form.php:762
2545
+ msgid "If set, this will replace the Pretty Bars attribution URL. This is a very good place to put your %1$sPretty Links Pro%2$s %3$sAffiliate Link%4$s."
2546
  msgstr ""
2547
 
2548
+ #: app/views/options/form.php:966
2549
+ #: app/views/options/form.php:1032
2550
+ #: pro/app/views/options/form.php:781
2551
+ msgid "Social Buttons Options"
2552
  msgstr ""
2553
 
2554
+ #: app/views/options/form.php:970
2555
+ #: pro/app/views/options/form.php:784
2556
+ msgid "Buttons"
2557
  msgstr ""
2558
 
2559
+ #: app/views/options/form.php:972
2560
+ #: pro/app/views/options/form.php:786
2561
+ msgid "Social Buttons"
2562
  msgstr ""
2563
 
2564
+ #. translators: %1$s: br tag, %2$s open code tag, %3$s close code tag
2565
+ #: app/views/options/form.php:975
2566
+ #: pro/app/views/options/form.php:789
2567
+ msgid "Select which buttons you want to be visible on the Social Buttons Bar.%1$s%1$s%2$sNote:%3$s In order for the Social Buttons Bar to be visible on Pages and or Posts, you must first enable it in the \"Page &amp; Post Options\" section above."
2568
  msgstr ""
2569
 
2570
+ #: app/views/options/form.php:997
2571
+ #: pro/app/views/options/form.php:816
2572
+ msgid "Buttons Placement"
2573
  msgstr ""
2574
 
2575
+ #: app/views/options/form.php:999
2576
+ #: pro/app/views/options/form.php:818
2577
+ msgid "Social Buttons Placement"
2578
  msgstr ""
2579
 
2580
+ #. translators: %1$s: br tag, %2$s open code tag, %3$s close code tag
2581
+ #: app/views/options/form.php:1002
2582
+ #: pro/app/views/options/form.php:821
2583
+ msgid "This determines where your Social Buttons Placement should appear in relation to content on Pages and/or Posts.%1$s%1$s%2$sNote:%3$s If you want this bar to appear then you must enable it in the \"Auto-Create Links\" section above."
2584
  msgstr ""
2585
 
2586
+ #: app/views/options/form.php:1012
2587
+ #: pro/app/views/options/form.php:249
2588
+ #: pro/app/views/options/form.php:830
2589
+ msgid "Top"
2590
  msgstr ""
2591
 
2592
+ #: app/views/options/form.php:1013
2593
+ #: pro/app/views/options/form.php:248
2594
+ #: pro/app/views/options/form.php:831
2595
+ msgid "Bottom"
2596
  msgstr ""
2597
 
2598
+ #: app/views/options/form.php:1014
2599
+ #: pro/app/views/options/form.php:250
2600
+ #: pro/app/views/options/form.php:832
2601
+ msgid "Top and Bottom"
2602
  msgstr ""
2603
 
2604
+ #: app/views/options/form.php:1017
2605
+ #: pro/app/views/options/form.php:835
2606
+ msgid "Social Buttons Manual Placement"
2607
  msgstr ""
2608
 
2609
+ #. translators: %1$s: example shortcode, %2$s: example template tag
2610
+ #: app/views/options/form.php:1020
2611
+ #: pro/app/views/options/form.php:838
2612
+ msgid "If you select none, you can still show your Social Buttons by manually adding the %1$s shortcode to your blog posts or %2$s template tag to your WordPress Theme."
2613
  msgstr ""
2614
 
2615
+ #: app/views/options/form.php:1040
2616
+ #: pro/app/views/options/form.php:866
2617
+ msgid "Public Links Creation Options"
2618
  msgstr ""
2619
 
2620
+ #: app/views/options/form.php:1048
2621
+ #: pro/app/views/options/form.php:872
2622
+ msgid "Enable Public Links"
2623
  msgstr ""
2624
 
2625
+ #: app/views/options/form.php:1050
2626
+ #: pro/app/views/options/form.php:874
2627
+ msgid "Enable Public Link Creation on this Site"
2628
  msgstr ""
2629
 
2630
+ #: app/views/options/form.php:1052
2631
+ #: pro/app/views/options/form.php:876
2632
+ msgid "This option will give you the ability to turn your website into a link shortening service for your users. Once selected, you can enable the Pretty Links Pro Sidebar Widget or just display the link creation form with the %s shortcode in any post or page on your website."
2633
  msgstr ""
2634
 
2635
+ #: app/views/options/form.php:1068
2636
+ msgid "Public Link Options"
2637
  msgstr ""
2638
 
2639
+ #: app/views/shared/link-table-nav.php:16
2640
+ #: app/views/shared/link-table-nav.php:106
2641
+ #: app/views/shared/table-nav.php:14
2642
+ msgid "Displaying %1$s&#8211;%2$s of %3$s"
2643
  msgstr ""
2644
 
2645
+ #: app/views/shared/nav.php:6
2646
+ msgid "Pro Manual"
2647
  msgstr ""
2648
 
2649
+ #: app/views/shared/nav.php:14
2650
+ msgid "Connect:"
2651
  msgstr ""
2652
 
2653
+ #: app/views/shared/nav.php:18
2654
+ msgid "Get Help:"
2655
  msgstr ""
2656
 
2657
+ #: app/views/shared/nav.php:19
2658
+ msgid "Tutorials"
2659
  msgstr ""
2660
 
2661
+ #: app/views/shared/public_link.php:22
2662
+ msgid "Here is your Pretty Link"
2663
  msgstr ""
2664
 
2665
+ #: app/views/shared/public_link.php:30
2666
+ msgid "Here's your pretty link for"
2667
  msgstr ""
2668
 
2669
+ #: app/views/shared/public_link.php:41
2670
+ msgid "send this link to:"
2671
  msgstr ""
2672
 
2673
+ #: app/views/shared/public_link.php:45
2674
+ msgid "back"
2675
  msgstr ""
2676
 
2677
+ #: app/views/shared/tinymce_form_popup.php:4
2678
+ msgid "Insert Pretty Link"
2679
  msgstr ""
2680
 
2681
+ #: app/views/shared/tinymce_form_popup.php:10
2682
+ #: js/editor.js:12
2683
+ #: js/editor/components/link-editor/index.js:432
2684
+ msgid "Create New Pretty Link"
2685
  msgstr ""
2686
 
2687
+ #: app/views/shared/tinymce_form_popup.php:17
2688
+ msgid "Slug"
2689
  msgstr ""
2690
 
2691
+ #: app/views/shared/tinymce_form_popup.php:20
2692
+ msgid "valid"
2693
  msgstr ""
2694
 
2695
+ #: app/views/shared/tinymce_form_popup.php:21
2696
+ msgid "invalid"
2697
  msgstr ""
2698
 
2699
+ #: app/views/shared/tinymce_form_popup.php:25
2700
+ #: app/views/shared/tinymce_form_popup.php:90
2701
+ msgid "Link Text"
2702
  msgstr ""
2703
 
2704
+ #: app/views/shared/tinymce_form_popup.php:29
2705
+ msgid "Redirect Type"
2706
  msgstr ""
2707
 
2708
+ #: app/views/shared/tinymce_form_popup.php:31
2709
+ #: app/views/shared/tinymce_form_popup.php:48
2710
+ #: app/views/shared/tinymce_form_popup.php:56
2711
+ #: app/views/shared/tinymce_form_popup.php:64
2712
+ #: pro/app/views/tools/generator.php:21
2713
+ #: pro/app/views/tools/generator.php:26
2714
+ #: pro/app/widgets/PlpPublicLinksWidget.php:70
2715
+ #: pro/app/widgets/PlpPublicLinksWidget.php:82
2716
+ msgid "Default"
2717
  msgstr ""
2718
 
2719
+ #: app/views/shared/tinymce_form_popup.php:38
2720
+ #: pro/app/controllers/PlpLinksController.php:624
2721
+ msgid "Cloaked"
2722
  msgstr ""
2723
 
2724
+ #: app/views/shared/tinymce_form_popup.php:39
2725
+ #: pro/app/controllers/PlpLinksController.php:625
2726
+ #: pro/app/controllers/PlpLinksController.php:671
2727
+ msgid "Pixel"
2728
  msgstr ""
2729
 
2730
+ #: app/views/shared/tinymce_form_popup.php:40
2731
+ #: pro/app/controllers/PlpLinksController.php:626
2732
+ #: pro/app/controllers/PlpLinksController.php:672
2733
+ msgid "Meta Refresh"
2734
  msgstr ""
2735
 
2736
+ #: app/views/shared/tinymce_form_popup.php:41
2737
+ #: pro/app/controllers/PlpLinksController.php:627
2738
+ #: pro/app/controllers/PlpLinksController.php:673
2739
+ msgid "Javascript"
2740
  msgstr ""
2741
 
2742
+ #: app/views/shared/tinymce_form_popup.php:46
2743
+ msgid "Nofollow"
2744
  msgstr ""
2745
 
2746
+ #: app/views/shared/tinymce_form_popup.php:71
2747
+ #: app/views/shared/tinymce_form_popup.php:95
2748
+ msgid "Open this Pretty Link in a new window/tab"
2749
  msgstr ""
2750
 
2751
+ #: app/views/shared/tinymce_form_popup.php:74
2752
+ msgid "Insert New Pretty Link"
2753
  msgstr ""
2754
 
2755
+ #: app/views/shared/tinymce_form_popup.php:78
2756
+ msgid "Use Existing Pretty Link"
2757
  msgstr ""
2758
 
2759
+ #: app/views/shared/tinymce_form_popup.php:80
2760
+ msgid "Search by Slug, Title, or Target URL..."
2761
  msgstr ""
2762
 
2763
+ #: app/views/shared/tinymce_form_popup.php:100
2764
+ msgid "Insert Existing Pretty Link"
2765
  msgstr ""
2766
 
2767
+ #: app/views/tools/form.php:18
2768
+ #: app/views/tools/form.php:25
2769
+ msgid "Bookmarklet"
2770
  msgstr ""
2771
 
2772
+ #: app/views/tools/form.php:19
2773
+ #: app/views/tools/form.php:70
2774
+ msgid "Trim Clicks"
2775
  msgstr ""
2776
 
2777
+ #: app/views/tools/form.php:26
2778
+ #: pro/app/views/tools/generator.php:7
2779
+ #: pro/app/views/tools/generator.php:17
2780
+ msgid "Get Pretty Link"
2781
  msgstr ""
2782
 
2783
+ #: app/views/tools/form.php:28
2784
+ msgid "Install Pretty Link Bookmarklet"
2785
  msgstr ""
2786
 
2787
+ #. translators: %1$s: open link tag, %2$s close link tag
2788
+ #: app/views/tools/form.php:31
2789
+ msgid "Just drag this \"Get PrettyLink\" link to your toolbar to install the bookmarklet. As you browse the web, you can just click this bookmarklet to create a pretty link from the current url you're looking at. %1$s(more help)%2$s"
2790
  msgstr ""
2791
 
2792
+ #: app/views/tools/form.php:36
2793
+ msgid "Show iPhone Bookmarklet Instructions"
2794
  msgstr ""
2795
 
2796
+ #. translators: %1$s: open strong tag, %2$s close strong tag
2797
+ #: app/views/tools/form.php:43
2798
+ msgid "%1$sNote:%2$s iPhone users can install this bookmarklet in their Safari to create Pretty Links with the following steps:"
2799
  msgstr ""
2800
 
2801
+ #: app/views/tools/form.php:49
2802
+ msgid "Copy this text:"
2803
  msgstr ""
2804
+
2805
+ #: app/views/tools/form.php:50
2806
+ msgid "Tap the + button at the bottom of the screen"
2807
  msgstr ""
2808
 
2809
+ #: app/views/tools/form.php:51
2810
+ msgid "Choose to share the page, then click on \"Bookmark\". We recommend saving it in your Favorites folder. Rename your bookmark to \"Get PrettyLink\" (or whatever you want) and then \"Save\""
2811
  msgstr ""
2812
 
2813
+ #: app/views/tools/form.php:52
2814
+ msgid "Navigate through your Bookmarks until you find the new bookmark and click \"Edit\""
2815
  msgstr ""
2816
 
2817
+ #: app/views/tools/form.php:53
2818
+ msgid "Delete all the text from the address"
2819
  msgstr ""
2820
 
2821
+ #: app/views/tools/form.php:54
2822
+ msgid "Paste the text you copied in Step 1 into the address field"
2823
  msgstr ""
2824
 
2825
+ #. translators: %1$s: open strong tag, %2$s close strong tag
2826
+ #: app/views/tools/form.php:59
2827
+ msgid "To save the changes hit \"Bookmarks\" and %1$syou're done!%2$s"
2828
  msgstr ""
2829
 
2830
+ #: app/views/tools/form.php:64
2831
+ msgid "Now when you find a page you want to save off as a Pretty Link, just click the \"Bookmarks\" icon at the bottom of the screen and select your \"Get PrettyLink\" bookmarklet."
2832
  msgstr ""
2833
 
2834
+ #: app/views/tools/form.php:72
2835
+ msgid "Pretty Link is already automatically trimming Clicks older than 90 days. Although not necessary, you can still use the buttons below to force click trimming."
2836
  msgstr ""
2837
 
2838
+ #: app/views/tools/form.php:75
2839
+ msgid "***WARNING*** If you click OK you will delete ALL of the Click data that is older than 30 days. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete this data because there is no going back!"
2840
  msgstr ""
2841
 
2842
+ #: app/views/tools/form.php:75
2843
+ msgid "Delete Clicks older than 30 days"
2844
  msgstr ""
2845
 
2846
+ #: app/views/tools/form.php:77
2847
+ msgid "Clear clicks 30 days or older"
2848
  msgstr ""
2849
 
2850
+ #: app/views/tools/form.php:78
2851
+ msgid "This will clear all clicks in your database that are older than 30 days."
2852
  msgstr ""
2853
 
2854
+ #: app/views/tools/form.php:80
2855
+ msgid "***WARNING*** If you click OK you will delete ALL of the Click data that is older than 90 days. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete this data because there is no going back!"
2856
  msgstr ""
2857
 
2858
+ #: app/views/tools/form.php:80
2859
+ msgid "Delete Clicks older than 90 days"
2860
  msgstr ""
2861
 
2862
+ #: app/views/tools/form.php:82
2863
+ msgid "Clear clicks 90 days or older"
2864
  msgstr ""
2865
 
2866
+ #: app/views/tools/form.php:83
2867
+ msgid "This will clear all clicks in your database that are older than 90 days."
2868
  msgstr ""
2869
 
2870
+ #: app/views/tools/form.php:87
2871
+ msgid "***WARNING*** If you click OK you will delete ALL of the Click data in your Database. Your data will be gone forever -- no way to retreive it. Do not click OK unless you are absolutely sure you want to delete all your data because there is no going back!"
2872
  msgstr ""
2873
 
2874
+ #: app/views/tools/form.php:87
2875
+ msgid "Delete All Clicks"
2876
  msgstr ""
2877
 
2878
+ #: app/views/tools/form.php:89
2879
+ msgid "Clear all clicks"
2880
  msgstr ""
2881
 
2882
+ #: app/views/tools/form.php:90
2883
+ msgid "Seriously, only click this link if you want to delete all the Click data in your database."
2884
  msgstr ""
2885
 
2886
+ #: pro/app/controllers/PlpAppController.php:169
2887
+ msgid "ERROR: Your Pretty Link was unable to be created"
2888
  msgstr ""
2889
 
2890
+ #: pro/app/controllers/PlpAppController.php:173
2891
+ msgid "Unauthorized"
2892
  msgstr ""
2893
 
2894
+ #: pro/app/controllers/PlpImportExportController.php:14
2895
+ msgid "Pretty Links Pro | Import / Export"
2896
  msgstr ""
2897
 
2898
+ #: pro/app/controllers/PlpImportExportController.php:34
2899
+ msgid "Import file not found."
2900
  msgstr ""
2901
 
2902
+ #: pro/app/controllers/PlpImportExportController.php:50
2903
+ msgid "Import file could not be opened."
2904
  msgstr ""
2905
 
2906
+ #: pro/app/controllers/PlpKeywordsController.php:68
2907
+ msgid "Pretty Link Post Build Index"
2908
  msgstr ""
2909
 
2910
+ #: pro/app/controllers/PlpLinkCategoriesController.php:15
2911
+ msgctxt "taxonomy general name"
2912
+ msgid "Link Categories"
2913
  msgstr ""
2914
 
2915
+ #: pro/app/controllers/PlpLinkCategoriesController.php:16
2916
+ msgctxt "taxonomy singular name"
2917
+ msgid "Link Category"
2918
  msgstr ""
2919
 
2920
+ #: pro/app/controllers/PlpLinkCategoriesController.php:17
2921
+ msgid "Search Link Categories"
2922
  msgstr ""
2923
 
2924
+ #: pro/app/controllers/PlpLinkCategoriesController.php:18
2925
+ msgid "All Link Categories"
2926
  msgstr ""
2927
 
2928
+ #: pro/app/controllers/PlpLinkCategoriesController.php:19
2929
+ msgid "Parent Link Category"
2930
  msgstr ""
2931
 
2932
+ #: pro/app/controllers/PlpLinkCategoriesController.php:20
2933
+ msgid "Parent Link Category:"
2934
  msgstr ""
2935
 
2936
+ #: pro/app/controllers/PlpLinkCategoriesController.php:21
2937
+ msgid "Edit Link Category"
2938
  msgstr ""
2939
 
2940
+ #: pro/app/controllers/PlpLinkCategoriesController.php:22
2941
+ msgid "Update Link Category"
2942
  msgstr ""
2943
 
2944
+ #: pro/app/controllers/PlpLinkCategoriesController.php:23
2945
+ msgid "Add New Link Category"
2946
  msgstr ""
2947
 
2948
+ #: pro/app/controllers/PlpLinkCategoriesController.php:24
2949
+ msgid "New Link Category Name"
2950
  msgstr ""
2951
 
2952
+ #: pro/app/controllers/PlpLinksController.php:195
2953
+ msgid "Your URL Replacements must be formatted as a comma separated list of properly formatted URLs (http[s]://example.com/whatever)"
2954
  msgstr ""
2955
 
2956
+ #: pro/app/controllers/PlpLinksController.php:206
2957
+ msgid "Date must be valid and formatted YYYY-MM-DD."
2958
  msgstr ""
2959
 
2960
+ #: pro/app/controllers/PlpLinksController.php:218
2961
+ msgid "Expire Clicks must be a number greater than zero."
2962
  msgstr ""
2963
 
2964
+ #: pro/app/controllers/PlpLinksController.php:225
2965
+ msgid "Expired URL must be a valid URL."
2966
  msgstr ""
2967
 
2968
+ #: pro/app/controllers/PlpLinksController.php:237
2969
+ msgid "Your URL Rotations must all be properly formatted URLs."
2970
  msgstr ""
2971
 
2972
+ #: pro/app/controllers/PlpLinksController.php:246
2973
+ msgid "Your Link Rotation Weights must add up to 100%."
2974
  msgstr ""
2975
 
2976
+ #: pro/app/controllers/PlpLinksController.php:256
2977
+ msgid "Your Geographic Redirect URLs must all be properly formatted."
2978
  msgstr ""
2979
 
2980
+ #: pro/app/controllers/PlpLinksController.php:260
2981
+ msgid "Your Geographic Redirects URLs must not be empty."
2982
  msgstr ""
2983
 
2984
+ #: pro/app/controllers/PlpLinksController.php:264
2985
+ msgid "Your Geographic Redirect Countries must not be empty."
2986
  msgstr ""
2987
 
2988
+ #: pro/app/controllers/PlpLinksController.php:275
2989
+ msgid "Your Technology Redirect URLs must all be properly formatted."
2990
  msgstr ""
2991
 
2992
+ #: pro/app/controllers/PlpLinksController.php:279
2993
+ msgid "Your Technology Redirects URLs must not be empty."
2994
  msgstr ""
2995
 
2996
+ #: pro/app/controllers/PlpLinksController.php:290
2997
+ msgid "Your Time Period Redirect URLs must all be properly formatted."
2998
  msgstr ""
2999
 
3000
+ #: pro/app/controllers/PlpLinksController.php:294
3001
+ msgid "Your Time Period Redirects URLs must not be empty."
3002
  msgstr ""
3003
 
3004
+ #: pro/app/controllers/PlpLinksController.php:299
3005
+ msgid "Your Time Period Redirect start time must not be empty."
3006
  msgstr ""
3007
 
3008
+ #: pro/app/controllers/PlpLinksController.php:302
3009
+ msgid "Your Time Period Redirect start time must be a properly formatted date."
3010
  msgstr ""
3011
 
3012
+ #: pro/app/controllers/PlpLinksController.php:308
3013
+ msgid "Your Time Period Redirect end time must not be empty."
3014
  msgstr ""
3015
 
3016
+ #: pro/app/controllers/PlpLinksController.php:311
3017
+ msgid "Your Time Period Redirect end time must be a properly formatted date."
3018
  msgstr ""
3019
 
3020
+ #: pro/app/controllers/PlpLinksController.php:319
3021
+ msgid "Your Time Period Redirect start time must come before the end time."
3022
  msgstr ""
3023
 
3024
+ #: pro/app/controllers/PlpLinksController.php:327
3025
+ msgid "Delay Redirect must be a number"
3026
  msgstr ""
3027
 
3028
+ #: pro/app/controllers/PlpLinksController.php:670
3029
+ #: pro/app/widgets/PlpPublicLinksWidget.php:75
3030
+ msgid "Cloak"
3031
  msgstr ""
3032
 
3033
+ #: pro/app/controllers/PlpLinksController.php:735
3034
+ msgid "View QR Code for this link: %s"
3035
  msgstr ""
3036
 
3037
+ #: pro/app/controllers/PlpLinksController.php:735
3038
+ #: pro/app/controllers/PlpLinksController.php:739
3039
+ msgid "QR Code"
3040
  msgstr ""
3041
 
3042
+ #: pro/app/controllers/PlpLinksController.php:739
3043
+ msgid "Download QR Code for this link: %s"
3044
  msgstr ""
3045
 
3046
+ #: pro/app/controllers/PlpLinksController.php:812
3047
+ msgid "This link expired on %1$s and will now cause a 404 error when visited"
3048
  msgstr ""
3049
 
3050
+ #: pro/app/controllers/PlpLinksController.php:815
3051
+ msgid "This link expired on %1$s and now redirects to %2$s"
3052
  msgstr ""
3053
 
3054
+ #: pro/app/controllers/PlpLinksController.php:819
3055
+ msgid "This link is set to expire after the date %s"
3056
  msgstr ""
3057
 
3058
+ #: pro/app/controllers/PlpLinksController.php:830
3059
+ msgid "This link expired after %d clicks and will now cause a 404 error when visited"
3060
  msgstr ""
3061
 
3062
+ #: pro/app/controllers/PlpLinksController.php:833
3063
+ msgid "This link expired after %1$d clicks and now redirects to %2$s"
3064
  msgstr ""
3065
 
3066
+ #: pro/app/controllers/PlpLinksController.php:837
3067
+ msgid "This link is set to expire after %d clicks"
3068
  msgstr ""
3069
 
3070
+ #: pro/app/controllers/PlpLinksController.php:845
3071
+ msgid "This link has additional Target URL rotations"
3072
  msgstr ""
3073
 
3074
+ #: pro/app/controllers/PlpLinksController.php:848
3075
+ msgid "This link has additional Geographic Target URLs"
3076
  msgstr ""
3077
 
3078
+ #: pro/app/controllers/PlpLinksController.php:851
3079
+ msgid "This link has additional Technology Dependent Conditional Target URLs"
3080
  msgstr ""
3081
 
3082
+ #: pro/app/controllers/PlpLinksController.php:856
3083
+ msgid "A Time Period Redirect is currently active for this link. When visited it will currently redirect to %s rather than the Target URL unless the link is expired."
3084
  msgstr ""
3085
 
3086
+ #: pro/app/controllers/PlpLinksController.php:860
3087
+ msgid "Time Period Redirects have been setup for this link but the current time is not within any of them currently."
3088
  msgstr ""
3089
 
3090
+ #: pro/app/controllers/PlpLinkTagsController.php:15
3091
+ msgctxt "taxonomy general name"
3092
+ msgid "Link Tags"
3093
  msgstr ""
3094
 
3095
+ #: pro/app/controllers/PlpLinkTagsController.php:16
3096
+ msgctxt "taxonomy singular name"
3097
+ msgid "Link Tag"
3098
  msgstr ""
3099
 
3100
+ #: pro/app/controllers/PlpLinkTagsController.php:17
3101
+ msgid "Search Link Tags"
3102
  msgstr ""
3103
 
3104
+ #: pro/app/controllers/PlpLinkTagsController.php:18
3105
+ msgid "All Link Tags"
3106
  msgstr ""
3107
 
3108
+ #: pro/app/controllers/PlpLinkTagsController.php:21
3109
+ msgid "Edit Link Tag"
3110
  msgstr ""
3111
 
3112
+ #: pro/app/controllers/PlpLinkTagsController.php:22
3113
+ msgid "Update Link Tag"
3114
  msgstr ""
3115
 
3116
+ #: pro/app/controllers/PlpLinkTagsController.php:23
3117
+ msgid "Add New Link Tag"
3118
  msgstr ""
3119
 
3120
+ #: pro/app/controllers/PlpLinkTagsController.php:24
3121
+ msgid "New Link Tag Name"
3122
  msgstr ""
3123
 
3124
+ #: pro/app/controllers/PlpLinkTagsController.php:25
3125
+ msgid "Separate Link Tags with commas"
3126
  msgstr ""
3127
 
3128
+ #: pro/app/controllers/PlpLinkTagsController.php:26
3129
+ msgid "Add or remove Link Tags"
3130
  msgstr ""
3131
 
3132
+ #: pro/app/controllers/PlpLinkTagsController.php:27
3133
+ msgid "Choose from the most used Link Tags"
3134
  msgstr ""
3135
 
3136
+ #: pro/app/controllers/PlpLinkTagsController.php:28
3137
+ msgid "No Link Tags found."
3138
  msgstr ""
3139
 
3140
+ #: pro/app/controllers/PlpOptionsController.php:98
3141
+ msgid "Keywords Per Page is required"
3142
  msgstr ""
3143
 
3144
+ #: pro/app/controllers/PlpOptionsController.php:102
3145
+ msgid "Keyword Links Per Page is required"
3146
  msgstr ""
3147
 
3148
+ #: pro/app/controllers/PlpOptionsController.php:107
3149
+ msgid "You need to enter a valid Pretty Link Base URL now that you have selected \"Use an alternate base url for your Pretty Links\""
3150
  msgstr ""
3151
 
3152
+ #: pro/app/controllers/PlpOptionsController.php:112
3153
+ msgid "You need to enter a valid Public Link Display URL now that you have selected \"Use a custom public link display page\""
3154
  msgstr ""
3155
 
3156
+ #: pro/app/controllers/PlpOptionsController.php:118
3157
+ msgid "Pretty Bar Attribution URL must be a correctly formatted URL"
3158
  msgstr ""
3159
 
3160
+ #: pro/app/controllers/PlpPostsController.php:50
3161
+ msgid "Pretty Links Pro"
3162
  msgstr ""
3163
 
3164
+ #: pro/app/controllers/PlpPostsController.php:54
3165
+ msgid "Pretty Links Pro Options"
3166
  msgstr ""
3167
 
3168
+ #: pro/app/controllers/PlpPostsController.php:139
3169
+ #: pro/app/controllers/PlpPostsController.php:155
3170
+ #: pro/app/controllers/PlpPostsController.php:237
3171
+ msgid "Untitled"
3172
  msgstr ""
3173
 
3174
+ #: pro/app/controllers/PlpPrettyBarController.php:50
3175
+ msgid "Logo Image URL must be a correctly formatted URL"
3176
  msgstr ""
3177
 
3178
+ #: pro/app/controllers/PlpPrettyBarController.php:54
3179
+ msgid "Background Image URL must be a correctly formatted URL"
3180
  msgstr ""
3181
 
3182
+ #: pro/app/controllers/PlpPrettyBarController.php:60
3183
+ msgid "PrettyBar Background Color must be an actual RGB Value"
3184
  msgstr ""
3185
 
3186
+ #: pro/app/controllers/PlpPrettyBarController.php:64
3187
+ msgid "PrettyBar Text Color must be an actual RGB Value"
3188
  msgstr ""
3189
 
3190
+ #: pro/app/controllers/PlpPrettyBarController.php:68
3191
+ msgid "PrettyBar Link Color must be an actual RGB Value"
3192
  msgstr ""
3193
 
3194
+ #: pro/app/controllers/PlpPrettyBarController.php:72
3195
+ #: pro/app/controllers/PlpPrettyBarController.php:76
3196
+ msgid "PrettyBar Hover Color must be an actual RGB Value"
3197
  msgstr ""
3198
 
3199
+ #: pro/app/controllers/PlpPrettyBarController.php:80
3200
+ msgid "PrettyBar Title Character Limit must not be blank"
3201
  msgstr ""
3202
 
3203
+ #: pro/app/controllers/PlpPrettyBarController.php:84
3204
+ msgid "PrettyBar Description Character Limit must not be blank"
3205
  msgstr ""
3206
 
3207
+ #: pro/app/controllers/PlpPrettyBarController.php:88
3208
+ msgid "PrettyBar Link Character Limit must not be blank"
3209
  msgstr ""
3210
 
3211
+ #: pro/app/controllers/PlpPrettyBarController.php:92
3212
+ msgid "PrettyBar Title Character Limit must be a number"
3213
  msgstr ""
3214
 
3215
+ #: pro/app/controllers/PlpPrettyBarController.php:96
3216
+ msgid "PrettyBar Description Character Limit must be a number"
3217
  msgstr ""
3218
 
3219
+ #: pro/app/controllers/PlpPrettyBarController.php:100
3220
+ msgid "PrettyBar Link Character Limit must be a number"
3221
  msgstr ""
3222
 
3223
+ #: pro/app/controllers/PlpPublicLinksController.php:110
3224
+ #: pro/app/helpers/PlpPublicLinksHelper.php:6
3225
+ msgid "Enter a URL:"
3226
  msgstr ""
3227
 
3228
+ #: pro/app/controllers/PlpPublicLinksController.php:111
3229
+ #: pro/app/helpers/PlpPublicLinksHelper.php:7
3230
+ #: pro/app/widgets/PlpPublicLinksWidget.php:61
3231
+ msgid "Shrink"
3232
  msgstr ""
3233
 
3234
+ #: pro/app/controllers/PlpReportsController.php:14
3235
+ msgid "Pretty Links Pro | Reports"
3236
  msgstr ""
3237
 
3238
+ #: pro/app/controllers/PlpReportsController.php:51
3239
+ msgid "Create a custom link report and analyze your data."
3240
  msgstr ""
3241
 
3242
+ #: pro/app/controllers/PlpReportsController.php:94
3243
+ msgid "Your Pretty Link Report was Successfully Created"
3244
  msgstr ""
3245
 
3246
+ #: pro/app/controllers/PlpReportsController.php:130
3247
+ msgid "Your Pretty Link Report was Successfully Updated"
3248
  msgstr ""
3249
 
3250
+ #: pro/app/controllers/PlpReportsController.php:139
3251
+ msgid "Your Pretty Link Report was Successfully Deleted"
3252
  msgstr ""
3253
 
3254
+ #: pro/app/helpers/PlpLinksHelper.php:18
3255
+ #: pro/app/views/links/form.php:226
3256
+ msgid "weight:"
3257
  msgstr ""
3258
 
3259
+ #: pro/app/helpers/PlpPostsHelper.php:19
3260
+ msgid "Hide Social Buttons on this post."
3261
  msgstr ""
3262
 
3263
+ #: pro/app/helpers/PlpPostsHelper.php:26
3264
+ msgid "Disable Keyword Replacements on this post."
3265
  msgstr ""
3266
 
3267
+ #: pro/app/helpers/PlpPostsHelper.php:44
3268
+ msgid "A Pretty Link will be created on Publish"
3269
  msgstr ""
3270
 
3271
+ #: pro/app/helpers/PlpPostsHelper.php:63
3272
+ #: pro/app/views/reports/custom-report.php:32
3273
+ #: pro/app/views/reports/custom-report.php:65
3274
+ #: pro/app/views/reports/split-test-report.php:29
3275
+ #: pro/app/views/reports/split-test-report.php:61
3276
+ msgid "Uniques"
3277
  msgstr ""
3278
 
3279
+ #: pro/app/helpers/PlpPostsHelper.php:68
3280
+ msgid "edit"
3281
  msgstr ""
3282
 
3283
+ #: pro/app/helpers/PlpPostsHelper.php:70
3284
+ msgid "Visit Pretty Link:"
3285
  msgstr ""
3286
 
3287
+ #: pro/app/helpers/PlpPostsHelper.php:70
3288
+ msgid "in a New Window"
3289
  msgstr ""
3290
 
3291
+ #: pro/app/helpers/PlpPostsHelper.php:70
3292
+ msgid "visit"
3293
  msgstr ""
3294
 
3295
+ #: pro/app/helpers/PlpPostsHelper.php:76
3296
+ msgid "A Pretty Link hasn't been generated for this entry yet. Click \"Update Post\" to generate."
3297
  msgstr ""
3298
 
3299
+ #: pro/app/models/PlpOptions.php:100
3300
+ msgid "Facebook"
3301
  msgstr ""
3302
 
3303
+ #: pro/app/models/PlpOptions.php:107
3304
+ msgid "Twitter"
3305
  msgstr ""
3306
 
3307
+ #: pro/app/models/PlpOptions.php:114
3308
+ msgid "Google+"
3309
  msgstr ""
3310
 
3311
+ #: pro/app/models/PlpOptions.php:121
3312
+ msgid "Pinterest"
3313
  msgstr ""
3314
+
3315
+ #: pro/app/models/PlpOptions.php:128
3316
+ msgid "LinkedIn"
3317
  msgstr ""
3318
 
3319
+ #: pro/app/models/PlpOptions.php:135
3320
+ msgid "Reddit"
3321
  msgstr ""
3322
 
3323
+ #: pro/app/models/PlpOptions.php:142
3324
+ msgid "StumbleUpon"
3325
  msgstr ""
3326
 
3327
+ #: pro/app/models/PlpOptions.php:149
3328
+ msgid "Digg"
3329
  msgstr ""
3330
 
3331
+ #: pro/app/models/PlpOptions.php:242
3332
+ msgid "Affiliate Link Disclosures"
3333
  msgstr ""
3334
 
3335
+ #: pro/app/models/PlpOptions.php:251
3336
+ msgid "(aff)"
3337
  msgstr ""
3338
 
3339
+ #: pro/app/models/PlpReport.php:150
3340
+ msgid "Report must have a name."
3341
  msgstr ""
3342
 
3343
+ #: pro/app/models/PlpReport.php:154
3344
+ msgid "At least one link must be selected for analysis."
3345
  msgstr ""
3346
 
3347
+ #: pro/app/models/PlpReport.php:259
3348
+ msgid "Pretty Links Pro: Clicks for"
3349
  msgstr ""
3350
 
3351
+ #: pro/app/models/PlpReport.php:259
3352
+ msgid "report between"
3353
  msgstr ""
3354
 
3355
+ #: pro/app/models/PlpReport.php:266
3356
+ #: pro/app/models/PlpReport.php:412
3357
+ #: pro/app/views/reports/custom-report.php:34
3358
+ #: pro/app/views/reports/custom-report.php:67
3359
+ #: pro/app/views/reports/split-test-report.php:31
3360
+ #: pro/app/views/reports/split-test-report.php:63
3361
+ msgid "Conversions"
3362
  msgstr ""
3363
 
3364
+ #: pro/app/models/PlpReport.php:400
3365
+ msgid "Pretty Links Pro: Split Report for"
3366
  msgstr ""
3367
 
3368
+ #: pro/app/models/PlpUtils.php:36
3369
+ msgid "Google Analyticator"
3370
  msgstr ""
3371
 
3372
+ #: pro/app/views/import-export/form.php:4
3373
+ msgid "Import / Export Links"
3374
  msgstr ""
3375
 
3376
+ #: pro/app/views/import-export/form.php:9
3377
+ #: pro/app/views/import-export/form.php:12
3378
+ msgid "Export Pretty Links"
3379
  msgstr ""
3380
 
3381
+ #: pro/app/views/import-export/form.php:13
3382
+ msgid "Export Links to a CSV File"
3383
  msgstr ""
3384
 
3385
+ #: pro/app/views/import-export/form.php:17
3386
+ msgid "Export"
3387
  msgstr ""
3388
 
3389
+ #: pro/app/views/import-export/form.php:22
3390
+ #: pro/app/views/import-export/form.php:25
3391
+ msgid "Import Pretty Links"
3392
  msgstr ""
3393
 
3394
+ #: pro/app/views/import-export/form.php:27
3395
+ msgid "There are two ways to import a file.%1$s%1$s1) Importing to update existing links and%1$s%1$s2) Importing to generate new links. When Importing to generate new links, you must delete the \"id\" column from the CSV before importing. If the \"id\" column is present, Pretty Links Pro will attempt to update existing links."
3396
  msgstr ""
3397
 
3398
+ #: pro/app/views/import-export/form.php:39
3399
+ msgid "Import"
3400
  msgstr ""
3401
 
3402
+ #: pro/app/views/import-export/form.php:42
3403
+ msgid "Links Import File"
3404
  msgstr ""
3405
 
3406
+ #: pro/app/views/import-export/form.php:43
3407
+ msgid "Select a file that has been formatted as a Pretty Link CSV import file and click \"Import\""
3408
  msgstr ""
3409
 
3410
+ #: pro/app/views/import-export/form.php:51
3411
+ msgid "Import/Export Help"
3412
  msgstr ""
3413
 
3414
+ #: pro/app/views/import-export/import-error.php:4
3415
+ msgid "Import Error"
3416
  msgstr ""
3417
 
3418
+ #: pro/app/views/import-export/import-error.php:8
3419
+ msgid "&larr; Go back"
3420
  msgstr ""
3421
 
3422
+ #: pro/app/views/import-export/import.php:4
3423
+ msgid "Import Results"
3424
  msgstr ""
3425
 
3426
+ #: pro/app/views/import-export/import.php:5
3427
+ msgid "Total Rows: %s"
3428
  msgstr ""
3429
 
3430
+ #: pro/app/views/import-export/import.php:7
3431
+ msgid "%s Pretty Links were Successfully Created"
3432
  msgstr ""
3433
 
3434
+ #: pro/app/views/import-export/import.php:8
3435
+ msgid "%s Pretty Links were Successfully Updated"
3436
  msgstr ""
3437
 
3438
+ #: pro/app/views/import-export/import.php:13
3439
+ msgid "Pretty Links were unable to be Created: %s"
3440
  msgstr ""
3441
 
3442
+ #: pro/app/views/import-export/import.php:17
3443
+ msgid "Error(s) for Pretty Link with Slug: %s"
3444
  msgstr ""
3445
 
3446
+ #: pro/app/views/import-export/import.php:32
3447
+ msgid "Pretty Links were unable to be Updated: %s"
3448
  msgstr ""
3449
 
3450
+ #: pro/app/views/import-export/import.php:36
3451
+ msgid "Error(s) for Pretty Link with id: %s"
3452
  msgstr ""
3453
 
3454
+ #: pro/app/views/links/bulk-edit.php:6
3455
+ msgid "Advanced Link Options"
3456
  msgstr ""
3457
 
3458
+ #: pro/app/views/links/cloaked-redirect.php:19
3459
+ msgid "Your browser does not support frames."
3460
  msgstr ""
3461
 
3462
+ #: pro/app/views/links/form.php:23
3463
+ msgid "Expire After"
3464
  msgstr ""
3465
 
3466
+ #: pro/app/views/links/form.php:26
3467
+ msgid "Expiration Type"
3468
  msgstr ""
3469
 
3470
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
3471
+ #: pro/app/views/links/form.php:29
3472
+ msgid "Select the type of expiration you want for this link.%1$s%1$s%2$sDate%3$s Select this option if you'd like to expire your link after a certain date.%1%s%1$s%2$sClicks%3$s: Select this option to expire this link after it has been clicked a specific number of times."
3473
  msgstr ""
3474
 
3475
+ #: pro/app/views/links/form.php:52
3476
+ msgid "Number of Clicks"
3477
  msgstr ""
3478
 
3479
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
3480
+ #: pro/app/views/links/form.php:55
3481
+ msgid "Enter the number of times this link can be clicked before it expires.%1$s%1$s%2$sNote: Expirations based on clicks wouldn't work properly if you had tracking turned off for this link so as long as this is set to Clicks, Pretty Link will ensure tracking is turned on for this link as well.%3$s"
 
 
 
3482
  msgstr ""
3483
 
3484
+ #: pro/app/views/links/form.php:76
3485
+ msgid "Expiration Date"
3486
  msgstr ""
3487
 
3488
+ #: pro/app/views/links/form.php:77
3489
+ msgid "Enter a date here in the format YYYY-MM-DD to set when this link should expire."
 
 
3490
  msgstr ""
3491
 
3492
+ #: pro/app/views/links/form.php:91
3493
+ msgid "Expired Redirect"
 
 
3494
  msgstr ""
3495
 
3496
+ #: pro/app/views/links/form.php:94
3497
+ msgid "Redirect to URL when Expired"
 
 
3498
  msgstr ""
3499
 
3500
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
3501
+ #: pro/app/views/links/form.php:97
3502
+ msgid "When this link expires, do you want to redirect to a specific URL. You can use this to redirect to a page you've setup to indicate that the link is expired.%1$s%1$s%2$sNote: If this is not set the link will throw a 404 error when expired%3$s."
3503
  msgstr ""
3504
 
3505
+ #: pro/app/views/links/form.php:114
3506
+ #: pro/app/views/options/form.php:208
3507
+ msgid "URL"
3508
  msgstr ""
3509
 
3510
+ #: pro/app/views/links/form.php:117
3511
+ msgid "Expired URL"
3512
  msgstr ""
3513
 
3514
+ #: pro/app/views/links/form.php:118
3515
+ msgid "This is the URL that this link will redirect to after the expiration date above."
3516
  msgstr ""
3517
 
3518
+ #: pro/app/views/links/form.php:137
3519
+ msgid "Enter a comma separated list of keywords / keyword phrases that you'd like to replace with this link in your Posts &amp; Pages."
3520
  msgstr ""
3521
 
3522
+ #. translators: %1$s: open code tag, %2$s: close code tag
3523
+ #: pro/app/views/links/form.php:151
3524
+ msgid "Enter a comma separated list of the URLs that you'd like to replace with this Pretty Link in your Posts &amp; Pages. These must be formatted as URLs for example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
3525
  msgstr ""
3526
 
3527
+ #: pro/app/views/links/form.php:211
3528
+ #: pro/app/views/links/form.php:214
3529
+ msgid "Target URL Rotations"
3530
  msgstr ""
3531
 
3532
+ #. translators: %1$s: open code tag, %2$s: close code tag
3533
+ #: pro/app/views/links/form.php:217
3534
+ msgid "Enter the Target URLs that you'd like to rotate through when this Pretty Link is Clicked. These must be formatted as URLs example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s"
3535
  msgstr ""
3536
 
3537
+ #: pro/app/views/links/form.php:225
3538
+ msgid "Target URL (above)"
3539
  msgstr ""
3540
 
3541
+ #: pro/app/views/links/form.php:237
3542
+ msgid "Add Link Rotation"
3543
  msgstr ""
3544
 
3545
+ #: pro/app/views/links/form.php:242
3546
+ msgid "Split Test"
3547
  msgstr ""
3548
 
3549
+ #: pro/app/views/links/form.php:245
3550
+ msgid "Split Test This Link"
3551
  msgstr ""
3552
 
3553
+ #: pro/app/views/links/form.php:246
3554
+ msgid "Split testing will enable you to track the effectiveness of several links against each other. This works best when you have multiple link rotation URLs entered."
3555
  msgstr ""
3556
 
3557
+ #: pro/app/views/links/form.php:263
3558
+ msgid "Goal Link for Split Test"
 
3559
  msgstr ""
3560
 
3561
+ #: pro/app/views/links/form.php:264
3562
+ msgid "This is the goal link for your split test."
 
3563
  msgstr ""
3564
 
3565
+ #: pro/app/views/links/form.php:275
3566
+ msgid "id: %1$s | slug: %3$s | name: %2$s"
 
3567
  msgstr ""
3568
 
3569
+ #: pro/app/views/links/form.php:293
3570
+ #: pro/app/views/links/form.php:296
3571
+ msgid "Geographic Redirects"
3572
  msgstr ""
3573
 
3574
+ #: pro/app/views/links/form.php:297
3575
+ msgid "This will enable you to setup specific target urls that this pretty link will redirect to based on the country of the person visiting the url."
 
3576
  msgstr ""
3577
 
3578
+ #: pro/app/views/links/form.php:302
3579
+ #: pro/app/views/links/form.php:316
3580
+ #: pro/app/views/links/form.php:336
3581
+ msgid "Add"
3582
  msgstr ""
3583
 
3584
+ #: pro/app/views/links/form.php:307
3585
+ #: pro/app/views/links/form.php:310
3586
+ msgid "Technology Redirects"
3587
  msgstr ""
3588
 
3589
+ #: pro/app/views/links/form.php:311
3590
+ msgid "This will allow you to redirect based on your visitor's device, operating system and/or browser"
3591
  msgstr ""
3592
 
3593
+ #: pro/app/views/links/form.php:321
3594
+ #: pro/app/views/links/form.php:324
3595
+ msgid "Time Period Redirects"
3596
  msgstr ""
3597
 
3598
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
3599
+ #: pro/app/views/links/form.php:327
3600
+ msgid "This will allow you to redirect based on the time period in which your visitor visits this link.%1$s%1$s%2$sNote: If your visitor doesn't visit the link during any of the specified time periods set here, they'll simply be redirected to the main target url.%3$s"
 
 
 
3601
  msgstr ""
3602
 
3603
+ #: pro/app/views/links/geo_row.php:12
3604
+ msgid "Countries:"
3605
  msgstr ""
3606
 
3607
+ #: pro/app/views/links/geo_row.php:15
3608
+ msgid "Technology Redirection Countries"
3609
  msgstr ""
3610
 
3611
+ #: pro/app/views/links/geo_row.php:16
3612
+ msgid "This is a comma-separated list of countries that this redirect will match on. Just start typing a country's name and an autocomplete dropdown will appear to select from. Once a country is selected, feel free to start typing the name of another country. You can add as many as you'd like this redirect to match on"
3613
  msgstr ""
3614
 
3615
+ #: pro/app/views/links/geo_row.php:25
3616
+ #: pro/app/views/links/tech_row.php:85
3617
+ #: pro/app/views/links/time_row.php:39
3618
+ msgid "URL:"
3619
  msgstr ""
3620
 
3621
+ #: pro/app/views/links/geo_row.php:28
3622
+ msgid "Geographic Redirection URL"
3623
  msgstr ""
3624
 
3625
+ #: pro/app/views/links/geo_row.php:29
3626
+ msgid "This is the URL that this Pretty Link will redirect to if the visitor's country match the settings here."
3627
  msgstr ""
3628
 
3629
+ #: pro/app/views/links/geo_row.php:38
3630
+ #: pro/app/views/links/tech_row.php:98
3631
+ #: pro/app/views/links/time_row.php:52
3632
+ msgid "Remove"
3633
  msgstr ""
3634
 
3635
+ #: pro/app/views/links/link-has-expired.php:9
3636
+ msgid "Link Not Found"
3637
  msgstr ""
3638
 
3639
+ #: pro/app/views/links/link-has-expired.php:23
3640
+ msgid "Sorry, this link has expired"
3641
  msgstr ""
3642
 
3643
+ #: pro/app/views/links/link-options.php:36
3644
+ msgid "Requires Google Analyticator, Google Analytics by MonsterInsights (formerly Yoast), or the Google Analytics Plugin to be installed and configured on your site."
3645
  msgstr ""
3646
 
3647
+ #. translators: %1s: open link tag, %2$s: close link tag
3648
+ #: pro/app/views/links/link-options.php:50
3649
+ msgid "Enable %1sQR Codes%2$s"
3650
  msgstr ""
3651
 
3652
+ #: pro/app/views/links/prettybar.php:46
3653
+ msgid "You're viewing: %s"
3654
  msgstr ""
3655
 
3656
+ #: pro/app/views/links/prettybar.php:46
3657
+ msgid "Viewing: %s"
3658
  msgstr ""
3659
 
3660
+ #: pro/app/views/links/prettybar.php:51
3661
+ msgid "Share on Twitter"
3662
  msgstr ""
3663
 
3664
+ #: pro/app/views/links/prettybar.php:68
3665
+ msgid "Powered by"
 
3666
  msgstr ""
3667
 
3668
+ #: pro/app/views/links/tech_row.php:14
3669
+ msgid "Device:"
3670
  msgstr ""
3671
 
3672
+ #: pro/app/views/links/tech_row.php:17
3673
+ msgid "Technology Redirection Device"
3674
  msgstr ""
3675
 
3676
+ #. translators: %1$s: open b tag, %2$s: close b tag, %3$s: br tag
3677
+ #: pro/app/views/links/tech_row.php:20
3678
+ msgid "%1$sDesktop%2$s will match on any conventional laptop or desktop computer.%3$s%3$s%1$sMobile%2$s will match on any phone, tablet or other portable device.%3$s%3$s%1$sPhone%2$s will match on any phone or similarly small device.%3$s%3$s%1$sTablet%2$s will match on any tablet sized device."
 
3679
  msgstr ""
3680
 
3681
+ #: pro/app/views/links/tech_row.php:29
3682
+ #: pro/app/views/links/tech_row.php:48
3683
+ #: pro/app/views/links/tech_row.php:68
3684
+ msgid "Any"
3685
  msgstr ""
3686
 
3687
+ #: pro/app/views/links/tech_row.php:30
3688
+ msgid "Desktop"
3689
  msgstr ""
3690
 
3691
+ #: pro/app/views/links/tech_row.php:31
3692
+ msgid "Mobile"
 
3693
  msgstr ""
3694
 
3695
+ #: pro/app/views/links/tech_row.php:32
3696
+ msgid "Phone"
3697
  msgstr ""
3698
 
3699
+ #: pro/app/views/links/tech_row.php:33
3700
+ msgid "Tablet"
 
3701
  msgstr ""
3702
 
3703
+ #: pro/app/views/links/tech_row.php:39
3704
+ msgid "Operating System:"
3705
  msgstr ""
3706
 
3707
+ #: pro/app/views/links/tech_row.php:42
3708
+ msgid "Technology Redirection OS"
 
 
 
3709
  msgstr ""
3710
 
3711
+ #: pro/app/views/links/tech_row.php:43
3712
+ msgid "Use this dropdown to select which Operating System this redirect will match on."
3713
  msgstr ""
3714
 
3715
+ #: pro/app/views/links/tech_row.php:49
3716
+ #: pro/app/views/links/tech_row.php:70
3717
+ msgid "Android"
3718
  msgstr ""
3719
 
3720
+ #: pro/app/views/links/tech_row.php:50
3721
+ msgid "iOS"
3722
  msgstr ""
3723
 
3724
+ #: pro/app/views/links/tech_row.php:51
3725
+ msgid "Linux"
3726
  msgstr ""
3727
 
3728
+ #: pro/app/views/links/tech_row.php:52
3729
+ msgid "Mac"
3730
  msgstr ""
3731
 
3732
+ #: pro/app/views/links/tech_row.php:53
3733
+ msgid "Windows"
3734
  msgstr ""
3735
 
3736
+ #: pro/app/views/links/tech_row.php:59
3737
+ msgid "Browser:"
3738
  msgstr ""
3739
 
3740
+ #: pro/app/views/links/tech_row.php:62
3741
+ msgid "Technology Redirection Browser"
 
3742
  msgstr ""
3743
 
3744
+ #: pro/app/views/links/tech_row.php:63
3745
+ msgid "Use this dropdown to select which Browser this redirect will match on."
3746
  msgstr ""
3747
 
3748
+ #: pro/app/views/links/tech_row.php:69
3749
+ msgid "Amazon Silk"
 
3750
  msgstr ""
3751
 
3752
+ #: pro/app/views/links/tech_row.php:71
3753
+ msgid "Chrome"
3754
  msgstr ""
3755
 
3756
+ #: pro/app/views/links/tech_row.php:72
3757
+ msgid "Chromium"
 
 
 
3758
  msgstr ""
3759
 
3760
+ #: pro/app/views/links/tech_row.php:73
3761
+ msgid "Edge"
3762
  msgstr ""
3763
 
3764
+ #: pro/app/views/links/tech_row.php:74
3765
+ msgid "Firefox"
3766
  msgstr ""
3767
 
3768
+ #: pro/app/views/links/tech_row.php:75
3769
+ msgid "Internet Explorer"
3770
  msgstr ""
3771
 
3772
+ #: pro/app/views/links/tech_row.php:76
3773
+ msgid "Kindle"
 
3774
  msgstr ""
3775
 
3776
+ #: pro/app/views/links/tech_row.php:77
3777
+ msgid "Opera"
3778
  msgstr ""
3779
 
3780
+ #: pro/app/views/links/tech_row.php:78
3781
+ msgid "Opera Coast"
3782
  msgstr ""
3783
 
3784
+ #: pro/app/views/links/tech_row.php:79
3785
+ msgid "Safari"
3786
+ msgstr ""
3787
+
3788
+ #: pro/app/views/links/tech_row.php:88
3789
+ msgid "Technology Redirection URL"
3790
  msgstr ""
3791
 
3792
+ #: pro/app/views/links/tech_row.php:89
3793
+ msgid "This is the URL that this Pretty Link will redirect to if the visitor's device, os and browser match the settings here."
3794
  msgstr ""
3795
 
3796
+ #: pro/app/views/links/time_row.php:13
3797
+ msgid "Start Time:"
 
 
3798
  msgstr ""
3799
 
3800
+ #: pro/app/views/links/time_row.php:16
3801
+ msgid "Start of Time Period"
3802
  msgstr ""
3803
 
3804
+ #: pro/app/views/links/time_row.php:17
3805
+ msgid "This is where you'll enter the beginning of the time period for this redirect"
3806
  msgstr ""
3807
 
3808
+ #: pro/app/views/links/time_row.php:26
3809
+ msgid "End Time:"
3810
  msgstr ""
3811
 
3812
+ #: pro/app/views/links/time_row.php:29
3813
+ msgid "End of Time Period"
3814
  msgstr ""
3815
 
3816
+ #: pro/app/views/links/time_row.php:30
3817
+ msgid "This is where you'll enter the end of the time period for this redirect"
3818
  msgstr ""
3819
 
3820
+ #: pro/app/views/links/time_row.php:42
3821
+ msgid "Time Period Redirect URL"
3822
  msgstr ""
3823
 
3824
+ #: pro/app/views/links/time_row.php:43
3825
+ msgid "This is the URL that this Pretty Link will redirect to when the visitor visits the link in the associated time period."
3826
  msgstr ""
3827
 
3828
+ #: pro/app/views/options/autocreate.php:7
3829
+ msgid "%s Shortlinks"
 
 
3830
  msgstr ""
3831
 
3832
+ #: pro/app/views/options/autocreate.php:10
3833
+ msgid "Create Pretty Links for %s"
3834
  msgstr ""
3835
 
3836
+ #: pro/app/views/options/autocreate.php:11
3837
+ msgid "Automatically Create a Pretty Link for each of your published %s"
 
 
3838
  msgstr ""
3839
 
3840
+ #: pro/app/views/options/autocreate.php:30
3841
+ msgid "Category"
3842
  msgstr ""
3843
 
3844
+ #: pro/app/views/options/autocreate.php:33
3845
+ msgid "%s Auto Link Category"
3846
  msgstr ""
3847
 
3848
+ #: pro/app/views/options/autocreate.php:34
3849
+ msgid "Category that Pretty Links for %s will be automatically added to."
3850
  msgstr ""
3851
 
3852
+ #: pro/app/views/options/autocreate.php:51
3853
+ msgid "Add a New Category"
 
3854
  msgstr ""
3855
 
3856
+ #: pro/app/views/options/autocreate.php:57
3857
+ msgid "Show Social Buttons"
3858
  msgstr ""
3859
 
3860
+ #: pro/app/views/options/autocreate.php:60
3861
+ msgid "Show Social Buttons on %s"
3862
  msgstr ""
3863
 
3864
+ #: pro/app/views/options/autocreate.php:61
3865
+ msgid "If this button is checked then you'll have the ability to include a social buttons bar on your %s."
 
 
 
 
 
3866
  msgstr ""
3867
 
3868
+ #: pro/app/views/options/form.php:54
3869
+ msgid "Max Keywords"
 
 
 
 
 
3870
  msgstr ""
3871
 
3872
+ #: pro/app/views/options/form.php:56
3873
+ msgid "Set Maximum Keywords per Page"
 
3874
  msgstr ""
3875
 
3876
+ #: pro/app/views/options/form.php:57
3877
+ msgid "Maximum number of unique keyword / keyphrases you can replace with Pretty Links per page."
3878
  msgstr ""
3879
 
3880
+ #: pro/app/views/options/form.php:68
3881
+ msgid "Max Replacements"
3882
  msgstr ""
3883
 
3884
+ #: pro/app/views/options/form.php:70
3885
+ msgid "Set Maximum Replacements per Keyword"
3886
  msgstr ""
3887
 
3888
+ #: pro/app/views/options/form.php:71
3889
+ msgid "Maximum number of Pretty Link replacements per Keyword / Keyphrase."
3890
  msgstr ""
3891
 
3892
+ #: pro/app/views/options/form.php:211
3893
+ msgid "Disclosures Link URL"
 
3894
  msgstr ""
3895
 
3896
+ #: pro/app/views/options/form.php:212
3897
+ msgid "This is the URL of the page that contains your official affiliate link disclosures. This URL will be used in the link that will be generated."
3898
  msgstr ""
3899
 
3900
+ #: pro/app/views/options/form.php:223
3901
+ msgid "Text"
3902
  msgstr ""
3903
 
3904
+ #: pro/app/views/options/form.php:226
3905
+ msgid "Disclosures Link Text"
3906
  msgstr ""
3907
 
3908
+ #: pro/app/views/options/form.php:227
3909
+ msgid "This is the text of the link to your disclosures. This text will be visible to your visitors when the link is displayed."
3910
  msgstr ""
3911
 
3912
+ #: pro/app/views/options/form.php:238
3913
+ msgid "Position"
3914
  msgstr ""
3915
 
3916
+ #: pro/app/views/options/form.php:241
3917
+ msgid "Disclosures Link Position"
3918
  msgstr ""
3919
 
3920
+ #: pro/app/views/options/form.php:242
3921
+ msgid "This is the position of the link to your disclosures in relation to your post content."
3922
  msgstr ""
3923
 
3924
+ #: pro/app/views/options/form.php:289
3925
+ msgid "Disclosure Text"
 
3926
  msgstr ""
3927
 
3928
+ #: pro/app/views/options/form.php:292
3929
+ msgid "Keyword Link Disclosure Text"
3930
  msgstr ""
3931
 
3932
+ #: pro/app/views/options/form.php:293
3933
+ msgid "This is the text that will be added after each keyword replacement to indicate that the link is an affiliate link."
 
3934
  msgstr ""
3935
 
3936
+ #: pro/app/views/options/form.php:329
3937
+ msgid "Domain Blacklist"
 
3938
  msgstr ""
3939
 
3940
+ #: pro/app/views/options/form.php:331
3941
+ msgid "Do not replace links from these domains"
3942
  msgstr ""
3943
 
3944
+ #. translators: %1$s: br tag, %2$s: open b tag, %3$s: close b tag
3945
+ #: pro/app/views/options/form.php:334
3946
+ msgid "Any links on your site which point to domains you define here will not be replaced automatically with Pretty Links. Place one domain per line.%1$s%1$sYou MUST enter http:// or https:// in front of the domain names and do NOT include any /'s or other text after the domain name.%1$s%1$sProper entry example:%1$s%2$shttps://www.google.com%3$s%1$s%2$shttp://mysite.org%3$s%1$s%1$sImproperly entered domains will be removed upon saving the Options."
3947
  msgstr ""
3948
 
3949
+ #: pro/app/views/options/form.php:414
3950
+ #: pro/app/views/options/form.php:416
3951
+ msgid "Keyword Index Status"
3952
  msgstr ""
3953
 
3954
+ #: pro/app/views/options/form.php:417
3955
+ msgid "This shows how many posts have keywords indexed for and are ready for replacement."
3956
  msgstr ""
3957
 
3958
+ #: pro/app/views/options/form.php:425
3959
+ #: pro/app/views/options/form.php:448
3960
+ msgid "%1$s out of %2$s Posts Indexed"
3961
  msgstr ""
3962
 
3963
+ #: pro/app/views/options/form.php:429
3964
+ #: pro/app/views/options/form.php:452
3965
+ msgid "%1$s out of %2$s Comments Indexed"
3966
  msgstr ""
3967
 
3968
+ #: pro/app/views/options/form.php:437
3969
+ msgid "URL Index Status"
3970
  msgstr ""
3971
 
3972
+ #: pro/app/views/options/form.php:439
3973
+ msgid "URL Replacements Index Status"
 
3974
  msgstr ""
3975
 
3976
+ #: pro/app/views/options/form.php:440
3977
+ msgid "This shows how many posts have url replacements indexed for and are ready for replacement."
3978
  msgstr ""
3979
 
3980
+ #: pro/app/views/options/form.php:895
3981
+ msgid "Use Display Page"
3982
  msgstr ""
3983
 
3984
+ #: pro/app/views/options/form.php:897
3985
+ msgid "Use Public Link Display Page"
3986
  msgstr ""
3987
 
3988
+ #: pro/app/views/options/form.php:898
3989
+ msgid "When a link is created using the public form, the user is typically redirected to a simple page displaying their new pretty link. But, you can specify a page that you want them to be redirected to on your website, using your branding instead by selecting this box and entering the url of the page you want them to go to."
3990
  msgstr ""
3991
 
3992
+ #: pro/app/views/options/form.php:915
3993
+ msgid "Display Page"
3994
  msgstr ""
3995
 
3996
+ #: pro/app/views/options/form.php:917
3997
+ msgid "Public Pretty Link Creation Display URL"
3998
  msgstr ""
3999
 
4000
+ #: pro/app/views/options/form.php:919
4001
+ msgid "To set this up, create a new page on your WordPress site and make sure the %s appears somewhere on this page -- otherwise the link will never get created. Once this page is created, just enter the full URL to it here. Make sure this URL does not end with a slash (/)."
 
4002
  msgstr ""
4003
 
4004
+ #: pro/app/views/options/general.php:8
4005
+ msgid "Use Shortlink URL"
4006
  msgstr ""
4007
 
4008
+ #: pro/app/views/options/general.php:10
4009
+ msgid "Use an Alternate Shortlink URL"
4010
  msgstr ""
4011
 
4012
+ #: pro/app/views/options/general.php:11
4013
+ msgid "Use this option if you want to substitute your actual blog's url with another URL. You must have another valid domain name pointing to this WordPress install before you enable this option. If you are using this option to just get rid of the www in the beginning of your url that is fine -- just make sure your domain works without the www before enabling this option."
4014
  msgstr ""
4015
 
4016
+ #: pro/app/views/options/general.php:28
4017
+ #: pro/app/views/options/general.php:30
4018
+ msgid "Shortlink URL"
4019
  msgstr ""
4020
 
4021
+ #: pro/app/views/options/general.php:31
4022
+ msgid "Enter a valid base url that points at this WordPress install. Make sure this URL does not end with a slash (/)."
 
4023
  msgstr ""
4024
 
4025
+ #: pro/app/views/options/general.php:47
4026
+ msgid "Minimum Admin Role"
4027
  msgstr ""
4028
 
4029
+ #: pro/app/views/options/general.php:49
4030
+ msgid "Set Minimum Role Required To Access Pretty Link"
4031
  msgstr ""
4032
 
4033
+ #: pro/app/views/options/general.php:50
4034
+ msgid "Use this option to set the minimum role of users who can access the Admin interface for Pretty Link."
 
4035
  msgstr ""
4036
 
4037
+ #: pro/app/views/options/general.php:56
4038
+ msgid "Administrator"
4039
  msgstr ""
4040
 
4041
+ #: pro/app/views/options/general.php:57
4042
+ msgid "Editor"
4043
  msgstr ""
4044
 
4045
+ #: pro/app/views/options/general.php:58
4046
+ msgid "Author"
4047
  msgstr ""
4048
 
4049
+ #: pro/app/views/options/general.php:59
4050
+ msgid "Contributor"
4051
  msgstr ""
4052
 
4053
+ #: pro/app/views/options/general.php:60
4054
+ msgid "Subscriber"
4055
  msgstr ""
4056
 
4057
+ #: pro/app/views/public/form.php:28
4058
+ msgid "ERROR:"
4059
  msgstr ""
4060
 
4061
+ #: pro/app/views/reports/custom-report.php:7
4062
+ msgid "Link Report"
4063
  msgstr ""
4064
 
4065
+ #: pro/app/views/reports/custom-report.php:8
4066
+ msgid "Report:"
4067
  msgstr ""
4068
 
4069
+ #: pro/app/views/reports/custom-report.php:10
4070
+ msgid "For Goal Link:"
4071
  msgstr ""
4072
 
4073
+ #: pro/app/views/reports/custom-report.php:30
4074
+ #: pro/app/views/reports/custom-report.php:63
4075
+ msgid "Link Name"
4076
  msgstr ""
4077
 
4078
+ #: pro/app/views/reports/custom-report.php:35
4079
+ #: pro/app/views/reports/custom-report.php:68
4080
+ #: pro/app/views/reports/split-test-report.php:32
4081
+ #: pro/app/views/reports/split-test-report.php:64
4082
+ msgid "Conv Rate"
4083
  msgstr ""
4084
 
4085
+ #: pro/app/views/reports/edit.php:7
4086
+ msgid "Edit Link Report"
4087
  msgstr ""
4088
 
4089
+ #: pro/app/views/reports/edit.php:20
4090
+ #: pro/app/views/reports/new.php:19
4091
+ msgid "This is how you'll identify your Report."
4092
  msgstr ""
4093
 
4094
+ #: pro/app/views/reports/edit.php:26
4095
+ #: pro/app/views/reports/new.php:26
4096
+ msgid "Select Links to Analyze in this Report:"
4097
  msgstr ""
4098
 
4099
+ #: pro/app/views/reports/edit.php:36
4100
+ #: pro/app/views/reports/new.php:36
4101
+ msgid "Select some links to be analyzed in this report."
4102
  msgstr ""
4103
 
4104
+ #: pro/app/views/reports/edit.php:39
4105
+ #: pro/app/views/reports/new.php:39
4106
+ msgid "Select Your Goal Link (optional):"
4107
  msgstr ""
4108
 
4109
+ #: pro/app/views/reports/edit.php:60
4110
+ #: pro/app/views/reports/new.php:60
4111
+ msgid "If you want to enable conversion tracking in this report then select a goal link."
4112
  msgstr ""
4113
 
4114
+ #: pro/app/views/reports/list.php:5
4115
+ msgid "Add Report"
4116
  msgstr ""
4117
 
4118
+ #: pro/app/views/reports/list.php:72
4119
+ msgid "Are you sure you want to delete your %s Pretty Link Report?"
4120
  msgstr ""
4121
 
4122
+ #: pro/app/views/reports/list.php:73
4123
+ msgid "View report for %s"
4124
  msgstr ""
4125
 
4126
+ #: pro/app/views/reports/list.php:73
4127
+ msgid "View"
4128
  msgstr ""
4129
 
4130
+ #: pro/app/views/reports/new.php:7
4131
+ msgid "Add Link Report"
4132
  msgstr ""
4133
 
4134
+ #: pro/app/views/reports/split-test-report.php:4
4135
+ msgid "Link Split-Test Report"
4136
  msgstr ""
4137
 
4138
+ #: pro/app/views/reports/split-test-report.php:5
4139
+ msgid "For Link:"
 
4140
  msgstr ""
4141
 
4142
+ #: pro/app/views/reports/split-test-report.php:7
4143
+ msgid "Goal Link:"
4144
  msgstr ""
4145
 
4146
+ #: pro/app/views/reports/split-test-report.php:27
4147
+ msgid "Link Rotation URL"
4148
  msgstr ""
4149
 
4150
+ #: pro/app/views/reports/split-test-report.php:59
4151
+ msgid "Rotation URL"
4152
  msgstr ""
4153
 
4154
+ #: pro/app/views/tools/generator.php:6
4155
+ msgid "Custom Bookmarklet:"
4156
  msgstr ""
4157
 
4158
+ #: pro/app/views/tools/generator.php:9
4159
+ msgid "Customize Pretty Link Bookmarklet"
4160
  msgstr ""
4161
 
4162
+ #: pro/app/views/tools/generator.php:10
4163
+ msgid "Alter the options below to customize this Bookmarklet. As you modify the label, redirect type, tracking and category, you will see this bookmarklet update -- when the settings are how you want them, drag the bookmarklet into your toolbar. You can create as many bookmarklets as you want each with different settings."
4164
  msgstr ""
4165
 
4166
+ #: pro/app/views/tools/generator.php:13
4167
+ #: pro/app/widgets/PlpPublicLinksWidget.php:66
4168
+ msgid "Pretty Link Options"
4169
  msgstr ""
4170
 
4171
+ #: pro/app/views/tools/generator.php:16
4172
+ msgid "Label:"
 
4173
  msgstr ""
4174
 
4175
+ #: pro/app/views/tools/generator.php:20
4176
+ #: pro/app/widgets/PlpPublicLinksWidget.php:68
4177
+ msgid "Redirection:"
4178
  msgstr ""
4179
 
4180
+ #: pro/app/views/tools/generator.php:24
4181
+ msgid "Tracking:"
 
4182
  msgstr ""
4183
 
4184
+ #: pro/app/views/tools/generator.php:32
4185
+ #: pro/app/widgets/PlpPublicLinksWidget.php:89
4186
+ msgid "Category:"
4187
  msgstr ""
4188
 
4189
+ #: pro/app/views/tools/nav.php:3
4190
+ msgid "Custom Bookmarklet"
 
4191
  msgstr ""
4192
 
4193
+ #: pro/app/widgets/PlpPublicLinksWidget.php:11
4194
+ msgid "Create a Short URL"
 
4195
  msgstr ""
4196
 
4197
+ #: pro/app/widgets/PlpPublicLinksWidget.php:13
4198
+ msgid "Displays a form to create a Pretty Link."
 
4199
  msgstr ""
4200
 
4201
+ #: pro/app/widgets/PlpPublicLinksWidget.php:60
4202
+ msgid "Enter a URL:&nbsp;"
 
4203
  msgstr ""
4204
 
4205
+ #: pro/app/widgets/PlpPublicLinksWidget.php:64
4206
+ msgid "Label Text:"
4207
  msgstr ""
4208
 
4209
+ #: pro/app/widgets/PlpPublicLinksWidget.php:65
4210
+ msgid "Button Text:"
4211
  msgstr ""
4212
 
4213
+ #: pro/app/widgets/PlpPublicLinksWidget.php:65
4214
+ msgid "if left blank, no button will display"
4215
  msgstr ""
4216
 
4217
+ #: pro/app/widgets/PlpPublicLinksWidget.php:71
4218
+ msgid "Permanent/301"
4219
  msgstr ""
4220
 
4221
+ #: pro/app/widgets/PlpPublicLinksWidget.php:72
4222
+ msgid "Temporary/302"
4223
  msgstr ""
4224
 
4225
+ #: pro/app/widgets/PlpPublicLinksWidget.php:73
4226
+ msgid "Temporary/307"
4227
  msgstr ""
4228
 
4229
+ #: pro/app/widgets/PlpPublicLinksWidget.php:74
4230
+ msgid "PrettyBar"
 
4231
  msgstr ""
4232
 
4233
+ #: pro/app/widgets/PlpPublicLinksWidget.php:80
4234
+ msgid "Tracking Enabled:"
 
4235
  msgstr ""
4236
 
4237
+ #: pro/i18n/countries.php:5
4238
+ msgid "Afghanistan"
 
4239
  msgstr ""
4240
 
4241
+ #: pro/i18n/countries.php:6
4242
+ msgid "&#197;land Islands"
 
4243
  msgstr ""
4244
 
4245
+ #: pro/i18n/countries.php:7
4246
+ msgid "Albania"
 
4247
  msgstr ""
4248
 
4249
+ #: pro/i18n/countries.php:8
4250
+ msgid "Algeria"
4251
  msgstr ""
4252
 
4253
+ #: pro/i18n/countries.php:9
4254
+ msgid "Andorra"
4255
  msgstr ""
4256
 
4257
+ #: pro/i18n/countries.php:10
4258
+ msgid "Angola"
4259
+ msgstr ""
4260
+
4261
+ #: pro/i18n/countries.php:11
4262
+ msgid "Anguilla"
4263
  msgstr ""
4264
 
4265
+ #: pro/i18n/countries.php:12
4266
+ msgid "Antarctica"
4267
  msgstr ""
4268
 
4269
+ #: pro/i18n/countries.php:13
4270
+ msgid "Antigua and Barbuda"
4271
  msgstr ""
4272
 
4273
+ #: pro/i18n/countries.php:14
4274
+ msgid "Argentina"
4275
  msgstr ""
4276
 
4277
+ #: pro/i18n/countries.php:15
4278
+ msgid "Armenia"
4279
  msgstr ""
4280
 
4281
+ #: pro/i18n/countries.php:16
4282
+ msgid "Aruba"
4283
  msgstr ""
4284
 
4285
+ #: pro/i18n/countries.php:17
4286
+ msgid "Australia"
4287
  msgstr ""
4288
 
4289
+ #: pro/i18n/countries.php:18
4290
+ msgid "Austria"
 
4291
  msgstr ""
4292
 
4293
+ #: pro/i18n/countries.php:19
4294
+ msgid "Azerbaijan"
4295
  msgstr ""
4296
 
4297
+ #: pro/i18n/countries.php:20
4298
+ msgid "Bahamas"
4299
  msgstr ""
4300
 
4301
+ #: pro/i18n/countries.php:21
4302
+ msgid "Bahrain"
4303
  msgstr ""
4304
 
4305
+ #: pro/i18n/countries.php:22
4306
+ msgid "Bangladesh"
4307
  msgstr ""
4308
 
4309
+ #: pro/i18n/countries.php:23
4310
+ msgid "Barbados"
4311
  msgstr ""
4312
 
4313
+ #: pro/i18n/countries.php:24
4314
+ msgid "Belarus"
4315
  msgstr ""
4316
 
4317
+ #: pro/i18n/countries.php:25
4318
+ msgid "Belgium"
4319
  msgstr ""
4320
 
4321
+ #: pro/i18n/countries.php:26
4322
+ msgid "Belau"
4323
  msgstr ""
4324
 
4325
+ #: pro/i18n/countries.php:27
4326
+ msgid "Belize"
4327
  msgstr ""
4328
 
4329
+ #: pro/i18n/countries.php:28
4330
+ msgid "Benin"
4331
  msgstr ""
4332
 
4333
+ #: pro/i18n/countries.php:29
4334
+ msgid "Bermuda"
4335
  msgstr ""
4336
 
4337
+ #: pro/i18n/countries.php:30
4338
+ msgid "Bhutan"
 
4339
  msgstr ""
4340
 
4341
+ #: pro/i18n/countries.php:31
4342
+ msgid "Bolivia"
4343
  msgstr ""
4344
 
4345
+ #: pro/i18n/countries.php:32
4346
+ msgid "Bonaire, Saint Eustatius and Saba"
 
4347
  msgstr ""
4348
 
4349
+ #: pro/i18n/countries.php:33
4350
+ msgid "Bosnia and Herzegovina"
4351
  msgstr ""
4352
 
4353
+ #: pro/i18n/countries.php:34
4354
+ msgid "Botswana"
4355
  msgstr ""
4356
 
4357
+ #: pro/i18n/countries.php:35
4358
+ msgid "Bouvet Island"
4359
  msgstr ""
4360
 
4361
+ #: pro/i18n/countries.php:36
4362
+ msgid "Brazil"
4363
  msgstr ""
4364
 
4365
+ #: pro/i18n/countries.php:37
4366
+ msgid "British Indian Ocean Territory"
4367
  msgstr ""
4368
 
4369
+ #: pro/i18n/countries.php:38
4370
+ msgid "British Virgin Islands"
4371
  msgstr ""
4372
 
4373
+ #: pro/i18n/countries.php:39
4374
+ msgid "Brunei"
4375
  msgstr ""
4376
 
4377
+ #: pro/i18n/countries.php:40
4378
+ msgid "Bulgaria"
4379
  msgstr ""
4380
 
4381
+ #: pro/i18n/countries.php:41
4382
+ msgid "Burkina Faso"
4383
  msgstr ""
4384
 
4385
+ #: pro/i18n/countries.php:42
4386
+ msgid "Burundi"
4387
  msgstr ""
4388
 
4389
+ #: pro/i18n/countries.php:43
4390
+ msgid "Cambodia"
4391
  msgstr ""
4392
 
4393
+ #: pro/i18n/countries.php:44
4394
+ msgid "Cameroon"
 
4395
  msgstr ""
4396
 
4397
+ #: pro/i18n/countries.php:45
4398
+ msgid "Canada"
4399
  msgstr ""
4400
 
4401
+ #: pro/i18n/countries.php:46
4402
+ msgid "Cape Verde"
4403
  msgstr ""
4404
 
4405
+ #: pro/i18n/countries.php:47
4406
+ msgid "Cayman Islands"
4407
  msgstr ""
4408
 
4409
+ #: pro/i18n/countries.php:48
4410
+ msgid "Central African Republic"
4411
  msgstr ""
4412
 
4413
+ #: pro/i18n/countries.php:49
4414
+ msgid "Chad"
4415
  msgstr ""
4416
 
4417
+ #: pro/i18n/countries.php:50
4418
+ msgid "Chile"
4419
  msgstr ""
4420
 
4421
+ #: pro/i18n/countries.php:51
4422
+ msgid "China"
4423
  msgstr ""
4424
 
4425
+ #: pro/i18n/countries.php:52
4426
+ msgid "Christmas Island"
4427
  msgstr ""
4428
 
4429
+ #: pro/i18n/countries.php:53
4430
+ msgid "Cocos/Keeling Islands"
4431
  msgstr ""
4432
 
4433
+ #: pro/i18n/countries.php:54
4434
+ msgid "Colombia"
4435
  msgstr ""
4436
 
4437
+ #: pro/i18n/countries.php:55
4438
+ msgid "Comoros"
4439
  msgstr ""
4440
 
4441
+ #: pro/i18n/countries.php:56
4442
+ msgid "Congo (Brazzaville)"
4443
  msgstr ""
4444
 
4445
+ #: pro/i18n/countries.php:57
4446
+ msgid "Congo (Kinshasa)"
 
4447
  msgstr ""
4448
 
4449
+ #: pro/i18n/countries.php:58
4450
+ msgid "Cook Islands"
4451
  msgstr ""
4452
 
4453
+ #: pro/i18n/countries.php:59
4454
+ msgid "Costa Rica"
4455
  msgstr ""
4456
 
4457
+ #: pro/i18n/countries.php:60
4458
+ msgid "Croatia"
4459
  msgstr ""
4460
 
4461
+ #: pro/i18n/countries.php:61
4462
+ msgid "Cuba"
4463
  msgstr ""
4464
 
4465
+ #: pro/i18n/countries.php:62
4466
+ msgid "Cura&Ccedil;ao"
4467
  msgstr ""
4468
 
4469
+ #: pro/i18n/countries.php:63
4470
+ msgid "Cyprus"
4471
  msgstr ""
4472
 
4473
+ #: pro/i18n/countries.php:64
4474
+ msgid "Czech Republic"
4475
  msgstr ""
4476
 
4477
+ #: pro/i18n/countries.php:65
4478
+ msgid "Denmark"
4479
  msgstr ""
4480
 
4481
+ #: pro/i18n/countries.php:66
4482
+ msgid "Djibouti"
4483
  msgstr ""
4484
 
4485
+ #: pro/i18n/countries.php:67
4486
+ msgid "Dominica"
4487
  msgstr ""
4488
 
4489
+ #: pro/i18n/countries.php:68
4490
+ msgid "Dominican Republic"
4491
  msgstr ""
4492
 
4493
+ #: pro/i18n/countries.php:69
4494
+ msgid "Ecuador"
 
4495
  msgstr ""
4496
 
4497
+ #: pro/i18n/countries.php:70
4498
+ msgid "Egypt"
4499
  msgstr ""
4500
 
4501
+ #: pro/i18n/countries.php:71
4502
+ msgid "El Salvador"
 
4503
  msgstr ""
4504
 
4505
+ #: pro/i18n/countries.php:72
4506
+ msgid "Equatorial Guinea"
4507
  msgstr ""
4508
 
4509
+ #: pro/i18n/countries.php:73
4510
+ msgid "Eritrea"
4511
  msgstr ""
4512
 
4513
+ #: pro/i18n/countries.php:74
4514
+ msgid "Estonia"
4515
  msgstr ""
4516
 
4517
+ #: pro/i18n/countries.php:75
4518
+ msgid "Ethiopia"
4519
  msgstr ""
4520
 
4521
+ #: pro/i18n/countries.php:76
4522
+ msgid "Falkland Islands"
4523
  msgstr ""
4524
 
4525
+ #: pro/i18n/countries.php:77
4526
+ msgid "Faroe Islands"
4527
  msgstr ""
4528
 
4529
+ #: pro/i18n/countries.php:78
4530
+ msgid "Fiji"
4531
  msgstr ""
4532
 
4533
+ #: pro/i18n/countries.php:79
4534
+ msgid "Finland"
4535
  msgstr ""
4536
 
4537
+ #: pro/i18n/countries.php:80
4538
+ msgid "France"
4539
  msgstr ""
4540
 
4541
+ #: pro/i18n/countries.php:81
4542
+ msgid "French Guiana"
4543
  msgstr ""
4544
 
4545
+ #: pro/i18n/countries.php:82
4546
+ msgid "French Polynesia"
 
4547
  msgstr ""
4548
 
4549
+ #: pro/i18n/countries.php:83
4550
+ msgid "French Southern Territories"
 
4551
  msgstr ""
4552
 
4553
+ #: pro/i18n/countries.php:84
4554
+ msgid "Gabon"
 
4555
  msgstr ""
4556
 
4557
+ #: pro/i18n/countries.php:85
4558
+ msgid "Gambia"
 
4559
  msgstr ""
4560
 
4561
+ #: pro/i18n/countries.php:86
4562
+ msgid "Georgia"
 
4563
  msgstr ""
4564
 
4565
+ #: pro/i18n/countries.php:87
4566
+ msgid "Germany"
 
 
4567
  msgstr ""
4568
 
4569
+ #: pro/i18n/countries.php:88
4570
+ msgid "Ghana"
4571
  msgstr ""
4572
 
4573
+ #: pro/i18n/countries.php:89
4574
+ msgid "Gibraltar"
4575
  msgstr ""
4576
 
4577
+ #: pro/i18n/countries.php:90
4578
+ msgid "Greece"
4579
  msgstr ""
4580
 
4581
+ #: pro/i18n/countries.php:91
4582
+ msgid "Greenland"
4583
  msgstr ""
4584
 
4585
+ #: pro/i18n/countries.php:92
4586
+ msgid "Grenada"
 
4587
  msgstr ""
4588
 
4589
+ #: pro/i18n/countries.php:93
4590
+ msgid "Guadeloupe"
4591
  msgstr ""
4592
 
4593
+ #: pro/i18n/countries.php:94
4594
+ msgid "Guatemala"
4595
  msgstr ""
4596
 
4597
+ #: pro/i18n/countries.php:95
4598
+ msgid "Guernsey"
 
4599
  msgstr ""
4600
 
4601
+ #: pro/i18n/countries.php:96
4602
+ msgid "Guinea"
 
4603
  msgstr ""
4604
 
4605
+ #: pro/i18n/countries.php:97
4606
+ msgid "Guinea-Bissau"
 
4607
  msgstr ""
4608
 
4609
+ #: pro/i18n/countries.php:98
4610
+ msgid "Guyana"
4611
  msgstr ""
4612
 
4613
+ #: pro/i18n/countries.php:99
4614
+ msgid "Haiti"
 
4615
  msgstr ""
4616
 
4617
+ #: pro/i18n/countries.php:100
4618
+ msgid "Heard Island and McDonald Islands"
4619
  msgstr ""
4620
 
4621
+ #: pro/i18n/countries.php:101
4622
+ msgid "Honduras"
 
4623
  msgstr ""
4624
 
4625
+ #: pro/i18n/countries.php:102
4626
+ msgid "Hong Kong"
4627
  msgstr ""
4628
 
4629
+ #: pro/i18n/countries.php:103
4630
+ msgid "Hungary"
4631
  msgstr ""
4632
 
4633
+ #: pro/i18n/countries.php:104
4634
+ msgid "Iceland"
4635
  msgstr ""
4636
 
4637
+ #: pro/i18n/countries.php:105
4638
+ msgid "India"
4639
  msgstr ""
4640
 
4641
+ #: pro/i18n/countries.php:106
4642
+ msgid "Indonesia"
4643
  msgstr ""
4644
 
4645
+ #: pro/i18n/countries.php:107
4646
+ msgid "Iran"
4647
  msgstr ""
4648
 
4649
+ #: pro/i18n/countries.php:108
4650
+ msgid "Iraq"
 
4651
  msgstr ""
4652
 
4653
+ #: pro/i18n/countries.php:109
4654
+ msgid "Republic of Ireland"
4655
  msgstr ""
4656
 
4657
+ #: pro/i18n/countries.php:110
4658
+ msgid "Isle of Man"
4659
  msgstr ""
4660
 
4661
+ #: pro/i18n/countries.php:111
4662
+ msgid "Israel"
4663
  msgstr ""
4664
 
4665
+ #: pro/i18n/countries.php:112
4666
+ msgid "Italy"
4667
  msgstr ""
4668
 
4669
+ #: pro/i18n/countries.php:113
4670
+ msgid "Ivory Coast"
4671
  msgstr ""
4672
 
4673
+ #: pro/i18n/countries.php:114
4674
+ msgid "Jamaica"
4675
  msgstr ""
4676
 
4677
+ #: pro/i18n/countries.php:115
4678
+ msgid "Japan"
4679
  msgstr ""
4680
 
4681
+ #: pro/i18n/countries.php:116
4682
+ msgid "Jersey"
4683
  msgstr ""
4684
 
4685
+ #: pro/i18n/countries.php:117
4686
+ msgid "Jordan"
4687
  msgstr ""
4688
 
4689
+ #: pro/i18n/countries.php:118
4690
+ msgid "Kazakhstan"
4691
  msgstr ""
4692
 
4693
+ #: pro/i18n/countries.php:119
4694
+ msgid "Kenya"
4695
  msgstr ""
4696
 
4697
+ #: pro/i18n/countries.php:120
4698
+ msgid "Kiribati"
4699
  msgstr ""
4700
 
4701
+ #: pro/i18n/countries.php:121
4702
+ msgid "Kuwait"
4703
  msgstr ""
4704
 
4705
+ #: pro/i18n/countries.php:122
4706
+ msgid "Kyrgyzstan"
4707
  msgstr ""
4708
 
4709
+ #: pro/i18n/countries.php:123
4710
+ msgid "Laos"
 
4711
  msgstr ""
4712
 
4713
+ #: pro/i18n/countries.php:124
4714
+ msgid "Latvia"
4715
  msgstr ""
4716
 
4717
+ #: pro/i18n/countries.php:125
4718
+ msgid "Lebanon"
4719
  msgstr ""
4720
 
4721
+ #: pro/i18n/countries.php:126
4722
+ msgid "Lesotho"
4723
  msgstr ""
4724
 
4725
+ #: pro/i18n/countries.php:127
4726
+ msgid "Liberia"
4727
  msgstr ""
4728
 
4729
+ #: pro/i18n/countries.php:128
4730
+ msgid "Libya"
 
4731
  msgstr ""
4732
 
4733
+ #: pro/i18n/countries.php:129
4734
+ msgid "Liechtenstein"
 
4735
  msgstr ""
4736
 
4737
+ #: pro/i18n/countries.php:130
4738
+ msgid "Lithuania"
 
4739
  msgstr ""
4740
 
4741
+ #: pro/i18n/countries.php:131
4742
+ msgid "Luxembourg"
 
4743
  msgstr ""
4744
 
4745
+ #: pro/i18n/countries.php:132
4746
+ msgid "Macao S.A.R., China"
 
4747
  msgstr ""
4748
 
4749
+ #: pro/i18n/countries.php:133
4750
+ msgid "Macedonia"
 
4751
  msgstr ""
4752
 
4753
+ #: pro/i18n/countries.php:134
4754
+ msgid "Madagascar"
 
4755
  msgstr ""
4756
 
4757
+ #: pro/i18n/countries.php:135
4758
+ msgid "Malawi"
 
4759
  msgstr ""
4760
 
4761
+ #: pro/i18n/countries.php:136
4762
+ msgid "Malaysia"
4763
  msgstr ""
4764
 
4765
+ #: pro/i18n/countries.php:137
4766
+ msgid "Maldives"
4767
  msgstr ""
4768
 
4769
+ #: pro/i18n/countries.php:138
4770
+ msgid "Mali"
4771
  msgstr ""
4772
 
4773
+ #: pro/i18n/countries.php:139
4774
+ msgid "Malta"
4775
  msgstr ""
4776
 
4777
+ #: pro/i18n/countries.php:140
4778
+ msgid "Marshall Islands"
4779
  msgstr ""
4780
 
4781
+ #: pro/i18n/countries.php:141
4782
+ msgid "Martinique"
4783
  msgstr ""
4784
 
4785
+ #: pro/i18n/countries.php:142
4786
+ msgid "Mauritania"
4787
  msgstr ""
4788
 
4789
+ #: pro/i18n/countries.php:143
4790
+ msgid "Mauritius"
4791
  msgstr ""
4792
 
4793
+ #: pro/i18n/countries.php:144
4794
+ msgid "Mayotte"
4795
  msgstr ""
4796
 
4797
+ #: pro/i18n/countries.php:145
4798
+ msgid "Mexico"
4799
  msgstr ""
4800
 
4801
+ #: pro/i18n/countries.php:146
4802
+ msgid "Micronesia"
4803
  msgstr ""
4804
 
4805
+ #: pro/i18n/countries.php:147
4806
+ msgid "Moldova"
4807
  msgstr ""
4808
 
4809
+ #: pro/i18n/countries.php:148
4810
+ msgid "Monaco"
4811
  msgstr ""
4812
 
4813
+ #: pro/i18n/countries.php:149
4814
+ msgid "Mongolia"
4815
  msgstr ""
4816
 
4817
+ #: pro/i18n/countries.php:150
4818
+ msgid "Montenegro"
 
 
4819
  msgstr ""
4820
 
4821
+ #: pro/i18n/countries.php:151
4822
+ msgid "Montserrat"
 
 
4823
  msgstr ""
4824
 
4825
+ #: pro/i18n/countries.php:152
4826
+ msgid "Morocco"
4827
  msgstr ""
4828
 
4829
+ #: pro/i18n/countries.php:153
4830
+ msgid "Mozambique"
4831
  msgstr ""
4832
 
4833
+ #: pro/i18n/countries.php:154
4834
+ msgid "Myanmar"
4835
  msgstr ""
4836
 
4837
+ #: pro/i18n/countries.php:155
4838
+ msgid "Namibia"
4839
  msgstr ""
4840
 
4841
+ #: pro/i18n/countries.php:156
4842
+ msgid "Nauru"
4843
  msgstr ""
4844
 
4845
+ #: pro/i18n/countries.php:157
4846
+ msgid "Nepal"
4847
  msgstr ""
4848
 
4849
+ #: pro/i18n/countries.php:158
4850
+ msgid "Netherlands"
 
 
 
 
 
 
 
4851
  msgstr ""
4852
 
4853
+ #: pro/i18n/countries.php:159
4854
+ msgid "Netherlands Antilles"
 
 
 
 
 
 
 
4855
  msgstr ""
4856
 
4857
+ #: pro/i18n/countries.php:160
4858
+ msgid "New Caledonia"
 
 
 
 
 
 
 
4859
  msgstr ""
4860
 
4861
+ #: pro/i18n/countries.php:161
4862
+ msgid "New Zealand"
4863
  msgstr ""
4864
 
4865
+ #: pro/i18n/countries.php:162
4866
+ msgid "Nicaragua"
 
4867
  msgstr ""
4868
 
4869
+ #: pro/i18n/countries.php:163
4870
+ msgid "Niger"
4871
  msgstr ""
4872
 
4873
+ #: pro/i18n/countries.php:164
4874
+ msgid "Nigeria"
4875
  msgstr ""
4876
 
4877
+ #: pro/i18n/countries.php:165
4878
+ msgid "Niue"
4879
  msgstr ""
4880
 
4881
+ #: pro/i18n/countries.php:166
4882
+ msgid "Norfolk Island"
4883
  msgstr ""
4884
 
4885
+ #: pro/i18n/countries.php:167
4886
+ msgid "North Korea"
 
4887
  msgstr ""
4888
 
4889
+ #: pro/i18n/countries.php:168
4890
+ msgid "Norway"
 
4891
  msgstr ""
4892
 
4893
+ #: pro/i18n/countries.php:169
4894
+ msgid "Oman"
4895
  msgstr ""
4896
 
4897
+ #: pro/i18n/countries.php:170
4898
+ msgid "Pakistan"
4899
  msgstr ""
4900
 
4901
+ #: pro/i18n/countries.php:171
4902
+ msgid "Palestinian Territory"
4903
  msgstr ""
4904
 
4905
+ #: pro/i18n/countries.php:172
4906
+ msgid "Panama"
4907
  msgstr ""
4908
 
4909
+ #: pro/i18n/countries.php:173
4910
+ msgid "Papua New Guinea"
4911
  msgstr ""
4912
 
4913
+ #: pro/i18n/countries.php:174
4914
+ msgid "Paraguay"
 
 
4915
  msgstr ""
4916
 
4917
+ #: pro/i18n/countries.php:175
4918
+ msgid "Peru"
4919
  msgstr ""
4920
 
4921
+ #: pro/i18n/countries.php:176
4922
+ msgid "Philippines"
4923
  msgstr ""
4924
 
4925
+ #: pro/i18n/countries.php:177
4926
+ msgid "Pitcairn"
4927
  msgstr ""
4928
 
4929
+ #: pro/i18n/countries.php:178
4930
+ msgid "Poland"
4931
  msgstr ""
4932
 
4933
+ #: pro/i18n/countries.php:179
4934
+ msgid "Portugal"
 
4935
  msgstr ""
4936
 
4937
+ #: pro/i18n/countries.php:180
4938
+ msgid "Qatar"
4939
  msgstr ""
4940
 
4941
+ #: pro/i18n/countries.php:181
4942
+ msgid "Reunion"
4943
  msgstr ""
4944
 
4945
+ #: pro/i18n/countries.php:182
4946
+ msgid "Romania"
4947
  msgstr ""
4948
 
4949
+ #: pro/i18n/countries.php:183
4950
+ msgid "Russia"
4951
  msgstr ""
4952
 
4953
+ #: pro/i18n/countries.php:184
4954
+ msgid "Rwanda"
4955
  msgstr ""
4956
 
4957
+ #: pro/i18n/countries.php:185
4958
+ msgid "Saint Barth&eacute;lemy"
4959
  msgstr ""
4960
 
4961
+ #: pro/i18n/countries.php:186
4962
+ msgid "Saint Helena"
 
 
4963
  msgstr ""
4964
 
4965
+ #: pro/i18n/countries.php:187
4966
+ msgid "Saint Kitts and Nevis"
4967
  msgstr ""
4968
 
4969
+ #: pro/i18n/countries.php:188
4970
+ msgid "Saint Lucia"
4971
  msgstr ""
4972
 
4973
+ #: pro/i18n/countries.php:189
4974
+ msgid "Saint Martin (French part)"
4975
  msgstr ""
4976
 
4977
+ #: pro/i18n/countries.php:190
4978
+ msgid "Saint Martin (Dutch part)"
4979
  msgstr ""
4980
 
4981
+ #: pro/i18n/countries.php:191
4982
+ msgid "Saint Pierre and Miquelon"
4983
  msgstr ""
4984
 
4985
+ #: pro/i18n/countries.php:192
4986
+ msgid "Saint Vincent and the Grenadines"
4987
  msgstr ""
4988
 
4989
+ #: pro/i18n/countries.php:193
4990
+ msgid "San Marino"
4991
  msgstr ""
4992
 
4993
+ #: pro/i18n/countries.php:194
4994
+ msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
4995
  msgstr ""
4996
 
4997
+ #: pro/i18n/countries.php:195
4998
+ msgid "Saudi Arabia"
4999
  msgstr ""
5000
 
5001
+ #: pro/i18n/countries.php:196
5002
+ msgid "Senegal"
5003
  msgstr ""
5004
 
5005
+ #: pro/i18n/countries.php:197
5006
+ msgid "Serbia"
5007
  msgstr ""
5008
 
5009
+ #: pro/i18n/countries.php:198
5010
+ msgid "Seychelles"
5011
  msgstr ""
5012
 
5013
+ #: pro/i18n/countries.php:199
5014
+ msgid "Sierra Leone"
5015
  msgstr ""
5016
 
5017
+ #: pro/i18n/countries.php:200
5018
+ msgid "Singapore"
5019
  msgstr ""
5020
 
5021
+ #: pro/i18n/countries.php:201
5022
+ msgid "Slovakia"
5023
  msgstr ""
5024
 
5025
+ #: pro/i18n/countries.php:202
5026
+ msgid "Slovenia"
5027
  msgstr ""
5028
 
5029
+ #: pro/i18n/countries.php:203
5030
+ msgid "Solomon Islands"
5031
  msgstr ""
5032
 
5033
+ #: pro/i18n/countries.php:204
5034
+ msgid "Somalia"
5035
  msgstr ""
5036
 
5037
+ #: pro/i18n/countries.php:205
5038
+ msgid "South Africa"
5039
  msgstr ""
5040
 
5041
+ #: pro/i18n/countries.php:206
5042
+ msgid "South Georgia/Sandwich Islands"
5043
  msgstr ""
5044
 
5045
+ #: pro/i18n/countries.php:207
5046
+ msgid "South Korea"
5047
  msgstr ""
5048
 
5049
+ #: pro/i18n/countries.php:208
5050
+ msgid "South Sudan"
5051
  msgstr ""
5052
 
5053
+ #: pro/i18n/countries.php:209
5054
+ msgid "Spain"
5055
  msgstr ""
5056
 
5057
+ #: pro/i18n/countries.php:210
5058
+ msgid "Sri Lanka"
 
 
5059
  msgstr ""
5060
 
5061
+ #: pro/i18n/countries.php:211
5062
+ msgid "Sudan"
5063
  msgstr ""
5064
 
5065
+ #: pro/i18n/countries.php:212
5066
+ msgid "Suriname"
5067
  msgstr ""
5068
 
5069
+ #: pro/i18n/countries.php:213
5070
+ msgid "Svalbard and Jan Mayen"
5071
  msgstr ""
5072
 
5073
+ #: pro/i18n/countries.php:214
5074
+ msgid "Swaziland"
 
5075
  msgstr ""
5076
 
5077
+ #: pro/i18n/countries.php:215
5078
+ msgid "Sweden"
5079
  msgstr ""
5080
 
5081
+ #: pro/i18n/countries.php:216
5082
+ msgid "Switzerland"
5083
  msgstr ""
5084
 
5085
+ #: pro/i18n/countries.php:217
5086
+ msgid "Syria"
5087
  msgstr ""
5088
 
5089
+ #: pro/i18n/countries.php:218
5090
+ msgid "Taiwan"
5091
  msgstr ""
5092
 
5093
+ #: pro/i18n/countries.php:219
5094
+ msgid "Tajikistan"
5095
  msgstr ""
5096
 
5097
+ #: pro/i18n/countries.php:220
5098
+ msgid "Tanzania"
5099
  msgstr ""
5100
 
5101
+ #: pro/i18n/countries.php:221
5102
+ msgid "Thailand"
5103
  msgstr ""
5104
 
5105
+ #: pro/i18n/countries.php:222
5106
+ msgid "Timor-Leste"
5107
  msgstr ""
5108
 
5109
+ #: pro/i18n/countries.php:223
5110
+ msgid "Togo"
5111
  msgstr ""
5112
 
5113
+ #: pro/i18n/countries.php:224
5114
+ msgid "Tokelau"
 
 
5115
  msgstr ""
5116
 
5117
+ #: pro/i18n/countries.php:225
5118
+ msgid "Tonga"
5119
  msgstr ""
5120
 
5121
+ #: pro/i18n/countries.php:226
5122
+ msgid "Trinidad and Tobago"
5123
  msgstr ""
5124
 
5125
+ #: pro/i18n/countries.php:227
5126
+ msgid "Tunisia"
 
 
5127
  msgstr ""
5128
 
5129
+ #: pro/i18n/countries.php:228
5130
+ msgid "Turkey"
 
5131
  msgstr ""
5132
 
5133
+ #: pro/i18n/countries.php:229
5134
+ msgid "Turkmenistan"
5135
  msgstr ""
5136
 
5137
+ #: pro/i18n/countries.php:230
5138
+ msgid "Turks and Caicos Islands"
5139
  msgstr ""
5140
 
5141
+ #: pro/i18n/countries.php:231
5142
+ msgid "Tuvalu"
5143
  msgstr ""
5144
 
5145
+ #: pro/i18n/countries.php:232
5146
+ msgid "Uganda"
5147
  msgstr ""
5148
 
5149
+ #: pro/i18n/countries.php:233
5150
+ msgid "Ukraine"
5151
  msgstr ""
5152
 
5153
+ #: pro/i18n/countries.php:234
5154
+ msgid "United Arab Emirates"
 
5155
  msgstr ""
5156
 
5157
+ #: pro/i18n/countries.php:235
5158
+ msgid "United Kingdom (UK)"
5159
  msgstr ""
5160
 
5161
+ #: pro/i18n/countries.php:236
5162
+ msgid "United States"
5163
  msgstr ""
5164
 
5165
+ #: pro/i18n/countries.php:237
5166
+ msgid "Uruguay"
5167
  msgstr ""
5168
 
5169
+ #: pro/i18n/countries.php:238
5170
+ msgid "Uzbekistan"
5171
  msgstr ""
5172
 
5173
+ #: pro/i18n/countries.php:239
5174
+ msgid "Vanuatu"
5175
  msgstr ""
5176
 
5177
+ #: pro/i18n/countries.php:240
5178
+ msgid "Vatican"
5179
  msgstr ""
5180
 
5181
+ #: pro/i18n/countries.php:241
5182
+ msgid "Venezuela"
 
5183
  msgstr ""
5184
 
5185
+ #: pro/i18n/countries.php:242
5186
+ msgid "Vietnam"
5187
  msgstr ""
5188
 
5189
+ #: pro/i18n/countries.php:243
5190
+ msgid "Wallis and Futuna"
5191
  msgstr ""
5192
 
5193
+ #: pro/i18n/countries.php:244
5194
+ msgid "Western Sahara"
5195
  msgstr ""
5196
 
5197
+ #: pro/i18n/countries.php:245
5198
+ msgid "Western Samoa"
5199
  msgstr ""
5200
 
5201
+ #: pro/i18n/countries.php:246
5202
+ msgid "Yemen"
5203
  msgstr ""
5204
 
5205
+ #: pro/i18n/countries.php:247
5206
+ msgid "Zambia"
5207
  msgstr ""
5208
 
5209
+ #: pro/i18n/countries.php:248
5210
+ msgid "Zimbabwe"
5211
  msgstr ""
images/not_tracking.png CHANGED
File without changes
images/update-3-0.png DELETED
Binary file
images/update-all-new-link-listing.png DELETED
Binary file
images/update-categories-tags.png DELETED
Binary file
images/update-gutenberg-editor.png DELETED
Binary file
images/update-new-link-editor-1.png DELETED
Binary file
images/update-new-link-editor-2.png DELETED
Binary file
js/admin_shared.js CHANGED
@@ -72,7 +72,7 @@ jQuery(document).ready(function($) {
72
  } else {
73
  $flyoutMenu.removeClass( 'out' );
74
  }
75
- }, 50 );
76
 
77
  // $( window ).trigger( 'scroll' );
78
  });
72
  } else {
73
  $flyoutMenu.removeClass( 'out' );
74
  }
75
+ } );
76
 
77
  // $( window ).trigger( 'scroll' );
78
  });
package-lock.json ADDED
@@ -0,0 +1,12767 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "pretty-link",
3
+ "version": "2.1.9",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "@babel/code-frame": {
8
+ "version": "7.0.0",
9
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
10
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
11
+ "dev": true,
12
+ "requires": {
13
+ "@babel/highlight": "^7.0.0"
14
+ }
15
+ },
16
+ "@babel/core": {
17
+ "version": "7.4.5",
18
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz",
19
+ "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==",
20
+ "dev": true,
21
+ "requires": {
22
+ "@babel/code-frame": "^7.0.0",
23
+ "@babel/generator": "^7.4.4",
24
+ "@babel/helpers": "^7.4.4",
25
+ "@babel/parser": "^7.4.5",
26
+ "@babel/template": "^7.4.4",
27
+ "@babel/traverse": "^7.4.5",
28
+ "@babel/types": "^7.4.4",
29
+ "convert-source-map": "^1.1.0",
30
+ "debug": "^4.1.0",
31
+ "json5": "^2.1.0",
32
+ "lodash": "^4.17.11",
33
+ "resolve": "^1.3.2",
34
+ "semver": "^5.4.1",
35
+ "source-map": "^0.5.0"
36
+ }
37
+ },
38
+ "@babel/generator": {
39
+ "version": "7.4.4",
40
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
41
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
42
+ "dev": true,
43
+ "requires": {
44
+ "@babel/types": "^7.4.4",
45
+ "jsesc": "^2.5.1",
46
+ "lodash": "^4.17.11",
47
+ "source-map": "^0.5.0",
48
+ "trim-right": "^1.0.1"
49
+ }
50
+ },
51
+ "@babel/helper-annotate-as-pure": {
52
+ "version": "7.0.0",
53
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
54
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
55
+ "dev": true,
56
+ "requires": {
57
+ "@babel/types": "^7.0.0"
58
+ }
59
+ },
60
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
61
+ "version": "7.1.0",
62
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
63
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
64
+ "dev": true,
65
+ "requires": {
66
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
67
+ "@babel/types": "^7.0.0"
68
+ }
69
+ },
70
+ "@babel/helper-builder-react-jsx": {
71
+ "version": "7.3.0",
72
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
73
+ "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
74
+ "dev": true,
75
+ "requires": {
76
+ "@babel/types": "^7.3.0",
77
+ "esutils": "^2.0.0"
78
+ }
79
+ },
80
+ "@babel/helper-call-delegate": {
81
+ "version": "7.4.4",
82
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
83
+ "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
84
+ "dev": true,
85
+ "requires": {
86
+ "@babel/helper-hoist-variables": "^7.4.4",
87
+ "@babel/traverse": "^7.4.4",
88
+ "@babel/types": "^7.4.4"
89
+ }
90
+ },
91
+ "@babel/helper-define-map": {
92
+ "version": "7.4.4",
93
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz",
94
+ "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==",
95
+ "dev": true,
96
+ "requires": {
97
+ "@babel/helper-function-name": "^7.1.0",
98
+ "@babel/types": "^7.4.4",
99
+ "lodash": "^4.17.11"
100
+ }
101
+ },
102
+ "@babel/helper-explode-assignable-expression": {
103
+ "version": "7.1.0",
104
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
105
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
106
+ "dev": true,
107
+ "requires": {
108
+ "@babel/traverse": "^7.1.0",
109
+ "@babel/types": "^7.0.0"
110
+ }
111
+ },
112
+ "@babel/helper-function-name": {
113
+ "version": "7.1.0",
114
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
115
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
116
+ "dev": true,
117
+ "requires": {
118
+ "@babel/helper-get-function-arity": "^7.0.0",
119
+ "@babel/template": "^7.1.0",
120
+ "@babel/types": "^7.0.0"
121
+ }
122
+ },
123
+ "@babel/helper-get-function-arity": {
124
+ "version": "7.0.0",
125
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
126
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
127
+ "dev": true,
128
+ "requires": {
129
+ "@babel/types": "^7.0.0"
130
+ }
131
+ },
132
+ "@babel/helper-hoist-variables": {
133
+ "version": "7.4.4",
134
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
135
+ "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
136
+ "dev": true,
137
+ "requires": {
138
+ "@babel/types": "^7.4.4"
139
+ }
140
+ },
141
+ "@babel/helper-member-expression-to-functions": {
142
+ "version": "7.0.0",
143
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
144
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
145
+ "dev": true,
146
+ "requires": {
147
+ "@babel/types": "^7.0.0"
148
+ }
149
+ },
150
+ "@babel/helper-module-imports": {
151
+ "version": "7.0.0",
152
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
153
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
154
+ "dev": true,
155
+ "requires": {
156
+ "@babel/types": "^7.0.0"
157
+ }
158
+ },
159
+ "@babel/helper-module-transforms": {
160
+ "version": "7.4.4",
161
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz",
162
+ "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==",
163
+ "dev": true,
164
+ "requires": {
165
+ "@babel/helper-module-imports": "^7.0.0",
166
+ "@babel/helper-simple-access": "^7.1.0",
167
+ "@babel/helper-split-export-declaration": "^7.4.4",
168
+ "@babel/template": "^7.4.4",
169
+ "@babel/types": "^7.4.4",
170
+ "lodash": "^4.17.11"
171
+ }
172
+ },
173
+ "@babel/helper-optimise-call-expression": {
174
+ "version": "7.0.0",
175
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
176
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
177
+ "dev": true,
178
+ "requires": {
179
+ "@babel/types": "^7.0.0"
180
+ }
181
+ },
182
+ "@babel/helper-plugin-utils": {
183
+ "version": "7.0.0",
184
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
185
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
186
+ "dev": true
187
+ },
188
+ "@babel/helper-regex": {
189
+ "version": "7.4.4",
190
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz",
191
+ "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==",
192
+ "dev": true,
193
+ "requires": {
194
+ "lodash": "^4.17.11"
195
+ }
196
+ },
197
+ "@babel/helper-remap-async-to-generator": {
198
+ "version": "7.1.0",
199
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
200
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
201
+ "dev": true,
202
+ "requires": {
203
+ "@babel/helper-annotate-as-pure": "^7.0.0",
204
+ "@babel/helper-wrap-function": "^7.1.0",
205
+ "@babel/template": "^7.1.0",
206
+ "@babel/traverse": "^7.1.0",
207
+ "@babel/types": "^7.0.0"
208
+ }
209
+ },
210
+ "@babel/helper-replace-supers": {
211
+ "version": "7.4.4",
212
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
213
+ "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
214
+ "dev": true,
215
+ "requires": {
216
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
217
+ "@babel/helper-optimise-call-expression": "^7.0.0",
218
+ "@babel/traverse": "^7.4.4",
219
+ "@babel/types": "^7.4.4"
220
+ }
221
+ },
222
+ "@babel/helper-simple-access": {
223
+ "version": "7.1.0",
224
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
225
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
226
+ "dev": true,
227
+ "requires": {
228
+ "@babel/template": "^7.1.0",
229
+ "@babel/types": "^7.0.0"
230
+ }
231
+ },
232
+ "@babel/helper-split-export-declaration": {
233
+ "version": "7.4.4",
234
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
235
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
236
+ "dev": true,
237
+ "requires": {
238
+ "@babel/types": "^7.4.4"
239
+ }
240
+ },
241
+ "@babel/helper-wrap-function": {
242
+ "version": "7.2.0",
243
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
244
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
245
+ "dev": true,
246
+ "requires": {
247
+ "@babel/helper-function-name": "^7.1.0",
248
+ "@babel/template": "^7.1.0",
249
+ "@babel/traverse": "^7.1.0",
250
+ "@babel/types": "^7.2.0"
251
+ }
252
+ },
253
+ "@babel/helpers": {
254
+ "version": "7.4.4",
255
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
256
+ "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
257
+ "dev": true,
258
+ "requires": {
259
+ "@babel/template": "^7.4.4",
260
+ "@babel/traverse": "^7.4.4",
261
+ "@babel/types": "^7.4.4"
262
+ }
263
+ },
264
+ "@babel/highlight": {
265
+ "version": "7.0.0",
266
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
267
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
268
+ "dev": true,
269
+ "requires": {
270
+ "chalk": "^2.0.0",
271
+ "esutils": "^2.0.2",
272
+ "js-tokens": "^4.0.0"
273
+ }
274
+ },
275
+ "@babel/parser": {
276
+ "version": "7.4.5",
277
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
278
+ "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
279
+ "dev": true
280
+ },
281
+ "@babel/plugin-proposal-async-generator-functions": {
282
+ "version": "7.2.0",
283
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
284
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
285
+ "dev": true,
286
+ "requires": {
287
+ "@babel/helper-plugin-utils": "^7.0.0",
288
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
289
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
290
+ }
291
+ },
292
+ "@babel/plugin-proposal-json-strings": {
293
+ "version": "7.2.0",
294
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
295
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
296
+ "dev": true,
297
+ "requires": {
298
+ "@babel/helper-plugin-utils": "^7.0.0",
299
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
300
+ }
301
+ },
302
+ "@babel/plugin-proposal-object-rest-spread": {
303
+ "version": "7.4.4",
304
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
305
+ "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
306
+ "dev": true,
307
+ "requires": {
308
+ "@babel/helper-plugin-utils": "^7.0.0",
309
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
310
+ }
311
+ },
312
+ "@babel/plugin-proposal-optional-catch-binding": {
313
+ "version": "7.2.0",
314
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
315
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
316
+ "dev": true,
317
+ "requires": {
318
+ "@babel/helper-plugin-utils": "^7.0.0",
319
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
320
+ }
321
+ },
322
+ "@babel/plugin-proposal-unicode-property-regex": {
323
+ "version": "7.4.4",
324
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
325
+ "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
326
+ "dev": true,
327
+ "requires": {
328
+ "@babel/helper-plugin-utils": "^7.0.0",
329
+ "@babel/helper-regex": "^7.4.4",
330
+ "regexpu-core": "^4.5.4"
331
+ }
332
+ },
333
+ "@babel/plugin-syntax-async-generators": {
334
+ "version": "7.2.0",
335
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
336
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
337
+ "dev": true,
338
+ "requires": {
339
+ "@babel/helper-plugin-utils": "^7.0.0"
340
+ }
341
+ },
342
+ "@babel/plugin-syntax-json-strings": {
343
+ "version": "7.2.0",
344
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
345
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
346
+ "dev": true,
347
+ "requires": {
348
+ "@babel/helper-plugin-utils": "^7.0.0"
349
+ }
350
+ },
351
+ "@babel/plugin-syntax-jsx": {
352
+ "version": "7.2.0",
353
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
354
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
355
+ "dev": true,
356
+ "requires": {
357
+ "@babel/helper-plugin-utils": "^7.0.0"
358
+ }
359
+ },
360
+ "@babel/plugin-syntax-object-rest-spread": {
361
+ "version": "7.2.0",
362
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
363
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
364
+ "dev": true,
365
+ "requires": {
366
+ "@babel/helper-plugin-utils": "^7.0.0"
367
+ }
368
+ },
369
+ "@babel/plugin-syntax-optional-catch-binding": {
370
+ "version": "7.2.0",
371
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
372
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
373
+ "dev": true,
374
+ "requires": {
375
+ "@babel/helper-plugin-utils": "^7.0.0"
376
+ }
377
+ },
378
+ "@babel/plugin-transform-arrow-functions": {
379
+ "version": "7.2.0",
380
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
381
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
382
+ "dev": true,
383
+ "requires": {
384
+ "@babel/helper-plugin-utils": "^7.0.0"
385
+ }
386
+ },
387
+ "@babel/plugin-transform-async-to-generator": {
388
+ "version": "7.4.4",
389
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz",
390
+ "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==",
391
+ "dev": true,
392
+ "requires": {
393
+ "@babel/helper-module-imports": "^7.0.0",
394
+ "@babel/helper-plugin-utils": "^7.0.0",
395
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
396
+ }
397
+ },
398
+ "@babel/plugin-transform-block-scoped-functions": {
399
+ "version": "7.2.0",
400
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
401
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
402
+ "dev": true,
403
+ "requires": {
404
+ "@babel/helper-plugin-utils": "^7.0.0"
405
+ }
406
+ },
407
+ "@babel/plugin-transform-block-scoping": {
408
+ "version": "7.4.4",
409
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz",
410
+ "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==",
411
+ "dev": true,
412
+ "requires": {
413
+ "@babel/helper-plugin-utils": "^7.0.0",
414
+ "lodash": "^4.17.11"
415
+ }
416
+ },
417
+ "@babel/plugin-transform-classes": {
418
+ "version": "7.4.4",
419
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz",
420
+ "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==",
421
+ "dev": true,
422
+ "requires": {
423
+ "@babel/helper-annotate-as-pure": "^7.0.0",
424
+ "@babel/helper-define-map": "^7.4.4",
425
+ "@babel/helper-function-name": "^7.1.0",
426
+ "@babel/helper-optimise-call-expression": "^7.0.0",
427
+ "@babel/helper-plugin-utils": "^7.0.0",
428
+ "@babel/helper-replace-supers": "^7.4.4",
429
+ "@babel/helper-split-export-declaration": "^7.4.4",
430
+ "globals": "^11.1.0"
431
+ }
432
+ },
433
+ "@babel/plugin-transform-computed-properties": {
434
+ "version": "7.2.0",
435
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
436
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
437
+ "dev": true,
438
+ "requires": {
439
+ "@babel/helper-plugin-utils": "^7.0.0"
440
+ }
441
+ },
442
+ "@babel/plugin-transform-destructuring": {
443
+ "version": "7.4.4",
444
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz",
445
+ "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==",
446
+ "dev": true,
447
+ "requires": {
448
+ "@babel/helper-plugin-utils": "^7.0.0"
449
+ }
450
+ },
451
+ "@babel/plugin-transform-dotall-regex": {
452
+ "version": "7.4.4",
453
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
454
+ "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
455
+ "dev": true,
456
+ "requires": {
457
+ "@babel/helper-plugin-utils": "^7.0.0",
458
+ "@babel/helper-regex": "^7.4.4",
459
+ "regexpu-core": "^4.5.4"
460
+ }
461
+ },
462
+ "@babel/plugin-transform-duplicate-keys": {
463
+ "version": "7.2.0",
464
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
465
+ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
466
+ "dev": true,
467
+ "requires": {
468
+ "@babel/helper-plugin-utils": "^7.0.0"
469
+ }
470
+ },
471
+ "@babel/plugin-transform-exponentiation-operator": {
472
+ "version": "7.2.0",
473
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
474
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
475
+ "dev": true,
476
+ "requires": {
477
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
478
+ "@babel/helper-plugin-utils": "^7.0.0"
479
+ }
480
+ },
481
+ "@babel/plugin-transform-for-of": {
482
+ "version": "7.4.4",
483
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
484
+ "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
485
+ "dev": true,
486
+ "requires": {
487
+ "@babel/helper-plugin-utils": "^7.0.0"
488
+ }
489
+ },
490
+ "@babel/plugin-transform-function-name": {
491
+ "version": "7.4.4",
492
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
493
+ "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
494
+ "dev": true,
495
+ "requires": {
496
+ "@babel/helper-function-name": "^7.1.0",
497
+ "@babel/helper-plugin-utils": "^7.0.0"
498
+ }
499
+ },
500
+ "@babel/plugin-transform-literals": {
501
+ "version": "7.2.0",
502
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
503
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
504
+ "dev": true,
505
+ "requires": {
506
+ "@babel/helper-plugin-utils": "^7.0.0"
507
+ }
508
+ },
509
+ "@babel/plugin-transform-member-expression-literals": {
510
+ "version": "7.2.0",
511
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
512
+ "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
513
+ "dev": true,
514
+ "requires": {
515
+ "@babel/helper-plugin-utils": "^7.0.0"
516
+ }
517
+ },
518
+ "@babel/plugin-transform-modules-amd": {
519
+ "version": "7.2.0",
520
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
521
+ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
522
+ "dev": true,
523
+ "requires": {
524
+ "@babel/helper-module-transforms": "^7.1.0",
525
+ "@babel/helper-plugin-utils": "^7.0.0"
526
+ }
527
+ },
528
+ "@babel/plugin-transform-modules-commonjs": {
529
+ "version": "7.4.4",
530
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz",
531
+ "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==",
532
+ "dev": true,
533
+ "requires": {
534
+ "@babel/helper-module-transforms": "^7.4.4",
535
+ "@babel/helper-plugin-utils": "^7.0.0",
536
+ "@babel/helper-simple-access": "^7.1.0"
537
+ }
538
+ },
539
+ "@babel/plugin-transform-modules-systemjs": {
540
+ "version": "7.4.4",
541
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
542
+ "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
543
+ "dev": true,
544
+ "requires": {
545
+ "@babel/helper-hoist-variables": "^7.4.4",
546
+ "@babel/helper-plugin-utils": "^7.0.0"
547
+ }
548
+ },
549
+ "@babel/plugin-transform-modules-umd": {
550
+ "version": "7.2.0",
551
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
552
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
553
+ "dev": true,
554
+ "requires": {
555
+ "@babel/helper-module-transforms": "^7.1.0",
556
+ "@babel/helper-plugin-utils": "^7.0.0"
557
+ }
558
+ },
559
+ "@babel/plugin-transform-named-capturing-groups-regex": {
560
+ "version": "7.4.5",
561
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
562
+ "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
563
+ "dev": true,
564
+ "requires": {
565
+ "regexp-tree": "^0.1.6"
566
+ }
567
+ },
568
+ "@babel/plugin-transform-new-target": {
569
+ "version": "7.4.4",
570
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
571
+ "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
572
+ "dev": true,
573
+ "requires": {
574
+ "@babel/helper-plugin-utils": "^7.0.0"
575
+ }
576
+ },
577
+ "@babel/plugin-transform-object-super": {
578
+ "version": "7.2.0",
579
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
580
+ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
581
+ "dev": true,
582
+ "requires": {
583
+ "@babel/helper-plugin-utils": "^7.0.0",
584
+ "@babel/helper-replace-supers": "^7.1.0"
585
+ }
586
+ },
587
+ "@babel/plugin-transform-parameters": {
588
+ "version": "7.4.4",
589
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
590
+ "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
591
+ "dev": true,
592
+ "requires": {
593
+ "@babel/helper-call-delegate": "^7.4.4",
594
+ "@babel/helper-get-function-arity": "^7.0.0",
595
+ "@babel/helper-plugin-utils": "^7.0.0"
596
+ }
597
+ },
598
+ "@babel/plugin-transform-property-literals": {
599
+ "version": "7.2.0",
600
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
601
+ "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
602
+ "dev": true,
603
+ "requires": {
604
+ "@babel/helper-plugin-utils": "^7.0.0"
605
+ }
606
+ },
607
+ "@babel/plugin-transform-react-jsx": {
608
+ "version": "7.3.0",
609
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
610
+ "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
611
+ "dev": true,
612
+ "requires": {
613
+ "@babel/helper-builder-react-jsx": "^7.3.0",
614
+ "@babel/helper-plugin-utils": "^7.0.0",
615
+ "@babel/plugin-syntax-jsx": "^7.2.0"
616
+ }
617
+ },
618
+ "@babel/plugin-transform-regenerator": {
619
+ "version": "7.4.5",
620
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
621
+ "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
622
+ "dev": true,
623
+ "requires": {
624
+ "regenerator-transform": "^0.14.0"
625
+ }
626
+ },
627
+ "@babel/plugin-transform-reserved-words": {
628
+ "version": "7.2.0",
629
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
630
+ "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
631
+ "dev": true,
632
+ "requires": {
633
+ "@babel/helper-plugin-utils": "^7.0.0"
634
+ }
635
+ },
636
+ "@babel/plugin-transform-runtime": {
637
+ "version": "7.4.4",
638
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz",
639
+ "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==",
640
+ "dev": true,
641
+ "requires": {
642
+ "@babel/helper-module-imports": "^7.0.0",
643
+ "@babel/helper-plugin-utils": "^7.0.0",
644
+ "resolve": "^1.8.1",
645
+ "semver": "^5.5.1"
646
+ }
647
+ },
648
+ "@babel/plugin-transform-shorthand-properties": {
649
+ "version": "7.2.0",
650
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
651
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
652
+ "dev": true,
653
+ "requires": {
654
+ "@babel/helper-plugin-utils": "^7.0.0"
655
+ }
656
+ },
657
+ "@babel/plugin-transform-spread": {
658
+ "version": "7.2.2",
659
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
660
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
661
+ "dev": true,
662
+ "requires": {
663
+ "@babel/helper-plugin-utils": "^7.0.0"
664
+ }
665
+ },
666
+ "@babel/plugin-transform-sticky-regex": {
667
+ "version": "7.2.0",
668
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
669
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
670
+ "dev": true,
671
+ "requires": {
672
+ "@babel/helper-plugin-utils": "^7.0.0",
673
+ "@babel/helper-regex": "^7.0.0"
674
+ }
675
+ },
676
+ "@babel/plugin-transform-template-literals": {
677
+ "version": "7.4.4",
678
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
679
+ "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
680
+ "dev": true,
681
+ "requires": {
682
+ "@babel/helper-annotate-as-pure": "^7.0.0",
683
+ "@babel/helper-plugin-utils": "^7.0.0"
684
+ }
685
+ },
686
+ "@babel/plugin-transform-typeof-symbol": {
687
+ "version": "7.2.0",
688
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
689
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
690
+ "dev": true,
691
+ "requires": {
692
+ "@babel/helper-plugin-utils": "^7.0.0"
693
+ }
694
+ },
695
+ "@babel/plugin-transform-unicode-regex": {
696
+ "version": "7.4.4",
697
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
698
+ "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
699
+ "dev": true,
700
+ "requires": {
701
+ "@babel/helper-plugin-utils": "^7.0.0",
702
+ "@babel/helper-regex": "^7.4.4",
703
+ "regexpu-core": "^4.5.4"
704
+ }
705
+ },
706
+ "@babel/preset-env": {
707
+ "version": "7.4.5",
708
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz",
709
+ "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==",
710
+ "dev": true,
711
+ "requires": {
712
+ "@babel/helper-module-imports": "^7.0.0",
713
+ "@babel/helper-plugin-utils": "^7.0.0",
714
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
715
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
716
+ "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
717
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
718
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
719
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
720
+ "@babel/plugin-syntax-json-strings": "^7.2.0",
721
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
722
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
723
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
724
+ "@babel/plugin-transform-async-to-generator": "^7.4.4",
725
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
726
+ "@babel/plugin-transform-block-scoping": "^7.4.4",
727
+ "@babel/plugin-transform-classes": "^7.4.4",
728
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
729
+ "@babel/plugin-transform-destructuring": "^7.4.4",
730
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
731
+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
732
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
733
+ "@babel/plugin-transform-for-of": "^7.4.4",
734
+ "@babel/plugin-transform-function-name": "^7.4.4",
735
+ "@babel/plugin-transform-literals": "^7.2.0",
736
+ "@babel/plugin-transform-member-expression-literals": "^7.2.0",
737
+ "@babel/plugin-transform-modules-amd": "^7.2.0",
738
+ "@babel/plugin-transform-modules-commonjs": "^7.4.4",
739
+ "@babel/plugin-transform-modules-systemjs": "^7.4.4",
740
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
741
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
742
+ "@babel/plugin-transform-new-target": "^7.4.4",
743
+ "@babel/plugin-transform-object-super": "^7.2.0",
744
+ "@babel/plugin-transform-parameters": "^7.4.4",
745
+ "@babel/plugin-transform-property-literals": "^7.2.0",
746
+ "@babel/plugin-transform-regenerator": "^7.4.5",
747
+ "@babel/plugin-transform-reserved-words": "^7.2.0",
748
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
749
+ "@babel/plugin-transform-spread": "^7.2.0",
750
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
751
+ "@babel/plugin-transform-template-literals": "^7.4.4",
752
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
753
+ "@babel/plugin-transform-unicode-regex": "^7.4.4",
754
+ "@babel/types": "^7.4.4",
755
+ "browserslist": "^4.6.0",
756
+ "core-js-compat": "^3.1.1",
757
+ "invariant": "^2.2.2",
758
+ "js-levenshtein": "^1.1.3",
759
+ "semver": "^5.5.0"
760
+ }
761
+ },
762
+ "@babel/runtime": {
763
+ "version": "7.4.5",
764
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
765
+ "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
766
+ "dev": true,
767
+ "requires": {
768
+ "regenerator-runtime": "^0.13.2"
769
+ }
770
+ },
771
+ "@babel/template": {
772
+ "version": "7.4.4",
773
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
774
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
775
+ "dev": true,
776
+ "requires": {
777
+ "@babel/code-frame": "^7.0.0",
778
+ "@babel/parser": "^7.4.4",
779
+ "@babel/types": "^7.4.4"
780
+ }
781
+ },
782
+ "@babel/traverse": {
783
+ "version": "7.4.5",
784
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
785
+ "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
786
+ "dev": true,
787
+ "requires": {
788
+ "@babel/code-frame": "^7.0.0",
789
+ "@babel/generator": "^7.4.4",
790
+ "@babel/helper-function-name": "^7.1.0",
791
+ "@babel/helper-split-export-declaration": "^7.4.4",
792
+ "@babel/parser": "^7.4.5",
793
+ "@babel/types": "^7.4.4",
794
+ "debug": "^4.1.0",
795
+ "globals": "^11.1.0",
796
+ "lodash": "^4.17.11"
797
+ }
798
+ },
799
+ "@babel/types": {
800
+ "version": "7.4.4",
801
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
802
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
803
+ "dev": true,
804
+ "requires": {
805
+ "esutils": "^2.0.2",
806
+ "lodash": "^4.17.11",
807
+ "to-fast-properties": "^2.0.0"
808
+ }
809
+ },
810
+ "@cnakazawa/watch": {
811
+ "version": "1.0.3",
812
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
813
+ "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
814
+ "dev": true,
815
+ "requires": {
816
+ "exec-sh": "^0.3.2",
817
+ "minimist": "^1.2.0"
818
+ }
819
+ },
820
+ "@jest/console": {
821
+ "version": "24.7.1",
822
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
823
+ "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==",
824
+ "dev": true,
825
+ "requires": {
826
+ "@jest/source-map": "^24.3.0",
827
+ "chalk": "^2.0.1",
828
+ "slash": "^2.0.0"
829
+ }
830
+ },
831
+ "@jest/core": {
832
+ "version": "24.8.0",
833
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz",
834
+ "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==",
835
+ "dev": true,
836
+ "requires": {
837
+ "@jest/console": "^24.7.1",
838
+ "@jest/reporters": "^24.8.0",
839
+ "@jest/test-result": "^24.8.0",
840
+ "@jest/transform": "^24.8.0",
841
+ "@jest/types": "^24.8.0",
842
+ "ansi-escapes": "^3.0.0",
843
+ "chalk": "^2.0.1",
844
+ "exit": "^0.1.2",
845
+ "graceful-fs": "^4.1.15",
846
+ "jest-changed-files": "^24.8.0",
847
+ "jest-config": "^24.8.0",
848
+ "jest-haste-map": "^24.8.0",
849
+ "jest-message-util": "^24.8.0",
850
+ "jest-regex-util": "^24.3.0",
851
+ "jest-resolve-dependencies": "^24.8.0",
852
+ "jest-runner": "^24.8.0",
853
+ "jest-runtime": "^24.8.0",
854
+ "jest-snapshot": "^24.8.0",
855
+ "jest-util": "^24.8.0",
856
+ "jest-validate": "^24.8.0",
857
+ "jest-watcher": "^24.8.0",
858
+ "micromatch": "^3.1.10",
859
+ "p-each-series": "^1.0.0",
860
+ "pirates": "^4.0.1",
861
+ "realpath-native": "^1.1.0",
862
+ "rimraf": "^2.5.4",
863
+ "strip-ansi": "^5.0.0"
864
+ },
865
+ "dependencies": {
866
+ "strip-ansi": {
867
+ "version": "5.2.0",
868
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
869
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
870
+ "dev": true,
871
+ "requires": {
872
+ "ansi-regex": "^4.1.0"
873
+ }
874
+ }
875
+ }
876
+ },
877
+ "@jest/environment": {
878
+ "version": "24.8.0",
879
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz",
880
+ "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==",
881
+ "dev": true,
882
+ "requires": {
883
+ "@jest/fake-timers": "^24.8.0",
884
+ "@jest/transform": "^24.8.0",
885
+ "@jest/types": "^24.8.0",
886
+ "jest-mock": "^24.8.0"
887
+ }
888
+ },
889
+ "@jest/fake-timers": {
890
+ "version": "24.8.0",
891
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz",
892
+ "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==",
893
+ "dev": true,
894
+ "requires": {
895
+ "@jest/types": "^24.8.0",
896
+ "jest-message-util": "^24.8.0",
897
+ "jest-mock": "^24.8.0"
898
+ }
899
+ },
900
+ "@jest/reporters": {
901
+ "version": "24.8.0",
902
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz",
903
+ "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==",
904
+ "dev": true,
905
+ "requires": {
906
+ "@jest/environment": "^24.8.0",
907
+ "@jest/test-result": "^24.8.0",
908
+ "@jest/transform": "^24.8.0",
909
+ "@jest/types": "^24.8.0",
910
+ "chalk": "^2.0.1",
911
+ "exit": "^0.1.2",
912
+ "glob": "^7.1.2",
913
+ "istanbul-lib-coverage": "^2.0.2",
914
+ "istanbul-lib-instrument": "^3.0.1",
915
+ "istanbul-lib-report": "^2.0.4",
916
+ "istanbul-lib-source-maps": "^3.0.1",
917
+ "istanbul-reports": "^2.1.1",
918
+ "jest-haste-map": "^24.8.0",
919
+ "jest-resolve": "^24.8.0",
920
+ "jest-runtime": "^24.8.0",
921
+ "jest-util": "^24.8.0",
922
+ "jest-worker": "^24.6.0",
923
+ "node-notifier": "^5.2.1",
924
+ "slash": "^2.0.0",
925
+ "source-map": "^0.6.0",
926
+ "string-length": "^2.0.0"
927
+ },
928
+ "dependencies": {
929
+ "source-map": {
930
+ "version": "0.6.1",
931
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
932
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
933
+ "dev": true
934
+ }
935
+ }
936
+ },
937
+ "@jest/source-map": {
938
+ "version": "24.3.0",
939
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz",
940
+ "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==",
941
+ "dev": true,
942
+ "requires": {
943
+ "callsites": "^3.0.0",
944
+ "graceful-fs": "^4.1.15",
945
+ "source-map": "^0.6.0"
946
+ },
947
+ "dependencies": {
948
+ "source-map": {
949
+ "version": "0.6.1",
950
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
951
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
952
+ "dev": true
953
+ }
954
+ }
955
+ },
956
+ "@jest/test-result": {
957
+ "version": "24.8.0",
958
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz",
959
+ "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==",
960
+ "dev": true,
961
+ "requires": {
962
+ "@jest/console": "^24.7.1",
963
+ "@jest/types": "^24.8.0",
964
+ "@types/istanbul-lib-coverage": "^2.0.0"
965
+ }
966
+ },
967
+ "@jest/test-sequencer": {
968
+ "version": "24.8.0",
969
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz",
970
+ "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==",
971
+ "dev": true,
972
+ "requires": {
973
+ "@jest/test-result": "^24.8.0",
974
+ "jest-haste-map": "^24.8.0",
975
+ "jest-runner": "^24.8.0",
976
+ "jest-runtime": "^24.8.0"
977
+ }
978
+ },
979
+ "@jest/transform": {
980
+ "version": "24.8.0",
981
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz",
982
+ "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==",
983
+ "dev": true,
984
+ "requires": {
985
+ "@babel/core": "^7.1.0",
986
+ "@jest/types": "^24.8.0",
987
+ "babel-plugin-istanbul": "^5.1.0",
988
+ "chalk": "^2.0.1",
989
+ "convert-source-map": "^1.4.0",
990
+ "fast-json-stable-stringify": "^2.0.0",
991
+ "graceful-fs": "^4.1.15",
992
+ "jest-haste-map": "^24.8.0",
993
+ "jest-regex-util": "^24.3.0",
994
+ "jest-util": "^24.8.0",
995
+ "micromatch": "^3.1.10",
996
+ "realpath-native": "^1.1.0",
997
+ "slash": "^2.0.0",
998
+ "source-map": "^0.6.1",
999
+ "write-file-atomic": "2.4.1"
1000
+ },
1001
+ "dependencies": {
1002
+ "source-map": {
1003
+ "version": "0.6.1",
1004
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1005
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1006
+ "dev": true
1007
+ }
1008
+ }
1009
+ },
1010
+ "@jest/types": {
1011
+ "version": "24.8.0",
1012
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz",
1013
+ "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==",
1014
+ "dev": true,
1015
+ "requires": {
1016
+ "@types/istanbul-lib-coverage": "^2.0.0",
1017
+ "@types/istanbul-reports": "^1.1.1",
1018
+ "@types/yargs": "^12.0.9"
1019
+ }
1020
+ },
1021
+ "@mrmlnc/readdir-enhanced": {
1022
+ "version": "2.2.1",
1023
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
1024
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
1025
+ "dev": true,
1026
+ "requires": {
1027
+ "call-me-maybe": "^1.0.1",
1028
+ "glob-to-regexp": "^0.3.0"
1029
+ }
1030
+ },
1031
+ "@nodelib/fs.stat": {
1032
+ "version": "1.1.3",
1033
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
1034
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
1035
+ "dev": true
1036
+ },
1037
+ "@types/babel__core": {
1038
+ "version": "7.1.2",
1039
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz",
1040
+ "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==",
1041
+ "dev": true,
1042
+ "requires": {
1043
+ "@babel/parser": "^7.1.0",
1044
+ "@babel/types": "^7.0.0",
1045
+ "@types/babel__generator": "*",
1046
+ "@types/babel__template": "*",
1047
+ "@types/babel__traverse": "*"
1048
+ }
1049
+ },
1050
+ "@types/babel__generator": {
1051
+ "version": "7.0.2",
1052
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
1053
+ "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
1054
+ "dev": true,
1055
+ "requires": {
1056
+ "@babel/types": "^7.0.0"
1057
+ }
1058
+ },
1059
+ "@types/babel__template": {
1060
+ "version": "7.0.2",
1061
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
1062
+ "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
1063
+ "dev": true,
1064
+ "requires": {
1065
+ "@babel/parser": "^7.1.0",
1066
+ "@babel/types": "^7.0.0"
1067
+ }
1068
+ },
1069
+ "@types/babel__traverse": {
1070
+ "version": "7.0.7",
1071
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz",
1072
+ "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==",
1073
+ "dev": true,
1074
+ "requires": {
1075
+ "@babel/types": "^7.3.0"
1076
+ }
1077
+ },
1078
+ "@types/events": {
1079
+ "version": "3.0.0",
1080
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
1081
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
1082
+ "dev": true
1083
+ },
1084
+ "@types/glob": {
1085
+ "version": "7.1.1",
1086
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
1087
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
1088
+ "dev": true,
1089
+ "requires": {
1090
+ "@types/events": "*",
1091
+ "@types/minimatch": "*",
1092
+ "@types/node": "*"
1093
+ }
1094
+ },
1095
+ "@types/istanbul-lib-coverage": {
1096
+ "version": "2.0.1",
1097
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
1098
+ "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
1099
+ "dev": true
1100
+ },
1101
+ "@types/istanbul-lib-report": {
1102
+ "version": "1.1.1",
1103
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
1104
+ "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
1105
+ "dev": true,
1106
+ "requires": {
1107
+ "@types/istanbul-lib-coverage": "*"
1108
+ }
1109
+ },
1110
+ "@types/istanbul-reports": {
1111
+ "version": "1.1.1",
1112
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
1113
+ "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
1114
+ "dev": true,
1115
+ "requires": {
1116
+ "@types/istanbul-lib-coverage": "*",
1117
+ "@types/istanbul-lib-report": "*"
1118
+ }
1119
+ },
1120
+ "@types/minimatch": {
1121
+ "version": "3.0.3",
1122
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
1123
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
1124
+ "dev": true
1125
+ },
1126
+ "@types/node": {
1127
+ "version": "12.0.10",
1128
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz",
1129
+ "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==",
1130
+ "dev": true
1131
+ },
1132
+ "@types/stack-utils": {
1133
+ "version": "1.0.1",
1134
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
1135
+ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
1136
+ "dev": true
1137
+ },
1138
+ "@types/unist": {
1139
+ "version": "2.0.3",
1140
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
1141
+ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==",
1142
+ "dev": true
1143
+ },
1144
+ "@types/vfile": {
1145
+ "version": "3.0.2",
1146
+ "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz",
1147
+ "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==",
1148
+ "dev": true,
1149
+ "requires": {
1150
+ "@types/node": "*",
1151
+ "@types/unist": "*",
1152
+ "@types/vfile-message": "*"
1153
+ }
1154
+ },
1155
+ "@types/vfile-message": {
1156
+ "version": "1.0.1",
1157
+ "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz",
1158
+ "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==",
1159
+ "dev": true,
1160
+ "requires": {
1161
+ "@types/node": "*",
1162
+ "@types/unist": "*"
1163
+ }
1164
+ },
1165
+ "@types/yargs": {
1166
+ "version": "12.0.12",
1167
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
1168
+ "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==",
1169
+ "dev": true
1170
+ },
1171
+ "@webassemblyjs/ast": {
1172
+ "version": "1.4.3",
1173
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.4.3.tgz",
1174
+ "integrity": "sha512-S6npYhPcTHDYe9nlsKa9CyWByFi8Vj8HovcAgtmMAQZUOczOZbQ8CnwMYKYC5HEZzxEE+oY0jfQk4cVlI3J59Q==",
1175
+ "dev": true,
1176
+ "requires": {
1177
+ "@webassemblyjs/helper-wasm-bytecode": "1.4.3",
1178
+ "@webassemblyjs/wast-parser": "1.4.3",
1179
+ "debug": "^3.1.0",
1180
+ "webassemblyjs": "1.4.3"
1181
+ },
1182
+ "dependencies": {
1183
+ "debug": {
1184
+ "version": "3.2.6",
1185
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1186
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1187
+ "dev": true,
1188
+ "requires": {
1189
+ "ms": "^2.1.1"
1190
+ }
1191
+ }
1192
+ }
1193
+ },
1194
+ "@webassemblyjs/floating-point-hex-parser": {
1195
+ "version": "1.4.3",
1196
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz",
1197
+ "integrity": "sha512-3zTkSFswwZOPNHnzkP9ONq4bjJSeKVMcuahGXubrlLmZP8fmTIJ58dW7h/zOVWiFSuG2em3/HH3BlCN7wyu9Rw==",
1198
+ "dev": true
1199
+ },
1200
+ "@webassemblyjs/helper-buffer": {
1201
+ "version": "1.4.3",
1202
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz",
1203
+ "integrity": "sha512-e8+KZHh+RV8MUvoSRtuT1sFXskFnWG9vbDy47Oa166xX+l0dD5sERJ21g5/tcH8Yo95e9IN3u7Jc3NbhnUcSkw==",
1204
+ "dev": true,
1205
+ "requires": {
1206
+ "debug": "^3.1.0"
1207
+ },
1208
+ "dependencies": {
1209
+ "debug": {
1210
+ "version": "3.2.6",
1211
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1212
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1213
+ "dev": true,
1214
+ "requires": {
1215
+ "ms": "^2.1.1"
1216
+ }
1217
+ }
1218
+ }
1219
+ },
1220
+ "@webassemblyjs/helper-code-frame": {
1221
+ "version": "1.4.3",
1222
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz",
1223
+ "integrity": "sha512-9FgHEtNsZQYaKrGCtsjswBil48Qp1agrzRcPzCbQloCoaTbOXLJ9IRmqT+uEZbenpULLRNFugz3I4uw18hJM8w==",
1224
+ "dev": true,
1225
+ "requires": {
1226
+ "@webassemblyjs/wast-printer": "1.4.3"
1227
+ }
1228
+ },
1229
+ "@webassemblyjs/helper-fsm": {
1230
+ "version": "1.4.3",
1231
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz",
1232
+ "integrity": "sha512-JINY76U+702IRf7ePukOt037RwmtH59JHvcdWbTTyHi18ixmQ+uOuNhcdCcQHTquDAH35/QgFlp3Y9KqtyJsCQ==",
1233
+ "dev": true
1234
+ },
1235
+ "@webassemblyjs/helper-wasm-bytecode": {
1236
+ "version": "1.4.3",
1237
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz",
1238
+ "integrity": "sha512-I7bS+HaO0K07Io89qhJv+z1QipTpuramGwUSDkwEaficbSvCcL92CUZEtgykfNtk5wb0CoLQwWlmXTwGbNZUeQ==",
1239
+ "dev": true
1240
+ },
1241
+ "@webassemblyjs/helper-wasm-section": {
1242
+ "version": "1.4.3",
1243
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz",
1244
+ "integrity": "sha512-p0yeeO/h2r30PyjnJX9xXSR6EDcvJd/jC6xa/Pxg4lpfcNi7JUswOpqDToZQ55HMMVhXDih/yqkaywHWGLxqyQ==",
1245
+ "dev": true,
1246
+ "requires": {
1247
+ "@webassemblyjs/ast": "1.4.3",
1248
+ "@webassemblyjs/helper-buffer": "1.4.3",
1249
+ "@webassemblyjs/helper-wasm-bytecode": "1.4.3",
1250
+ "@webassemblyjs/wasm-gen": "1.4.3",
1251
+ "debug": "^3.1.0"
1252
+ },
1253
+ "dependencies": {
1254
+ "debug": {
1255
+ "version": "3.2.6",
1256
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1257
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1258
+ "dev": true,
1259
+ "requires": {
1260
+ "ms": "^2.1.1"
1261
+ }
1262
+ }
1263
+ }
1264
+ },
1265
+ "@webassemblyjs/leb128": {
1266
+ "version": "1.4.3",
1267
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.4.3.tgz",
1268
+ "integrity": "sha512-4u0LJLSPzuRDWHwdqsrThYn+WqMFVqbI2ltNrHvZZkzFPO8XOZ0HFQ5eVc4jY/TNHgXcnwrHjONhPGYuuf//KQ==",
1269
+ "dev": true,
1270
+ "requires": {
1271
+ "leb": "^0.3.0"
1272
+ }
1273
+ },
1274
+ "@webassemblyjs/validation": {
1275
+ "version": "1.4.3",
1276
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.4.3.tgz",
1277
+ "integrity": "sha512-R+rRMKfhd9mq0rj2mhU9A9NKI2l/Rw65vIYzz4lui7eTKPcCu1l7iZNi4b9Gen8D42Sqh/KGiaQNk/x5Tn/iBQ==",
1278
+ "dev": true,
1279
+ "requires": {
1280
+ "@webassemblyjs/ast": "1.4.3"
1281
+ }
1282
+ },
1283
+ "@webassemblyjs/wasm-edit": {
1284
+ "version": "1.4.3",
1285
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz",
1286
+ "integrity": "sha512-qzuwUn771PV6/LilqkXcS0ozJYAeY/OKbXIWU3a8gexuqb6De2p4ya/baBeH5JQ2WJdfhWhSvSbu86Vienttpw==",
1287
+ "dev": true,
1288
+ "requires": {
1289
+ "@webassemblyjs/ast": "1.4.3",
1290
+ "@webassemblyjs/helper-buffer": "1.4.3",
1291
+ "@webassemblyjs/helper-wasm-bytecode": "1.4.3",
1292
+ "@webassemblyjs/helper-wasm-section": "1.4.3",
1293
+ "@webassemblyjs/wasm-gen": "1.4.3",
1294
+ "@webassemblyjs/wasm-opt": "1.4.3",
1295
+ "@webassemblyjs/wasm-parser": "1.4.3",
1296
+ "@webassemblyjs/wast-printer": "1.4.3",
1297
+ "debug": "^3.1.0"
1298
+ },
1299
+ "dependencies": {
1300
+ "debug": {
1301
+ "version": "3.2.6",
1302
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1303
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1304
+ "dev": true,
1305
+ "requires": {
1306
+ "ms": "^2.1.1"
1307
+ }
1308
+ }
1309
+ }
1310
+ },
1311
+ "@webassemblyjs/wasm-gen": {
1312
+ "version": "1.4.3",
1313
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz",
1314
+ "integrity": "sha512-eR394T8dHZfpLJ7U/Z5pFSvxl1L63JdREebpv9gYc55zLhzzdJPAuxjBYT4XqevUdW67qU2s0nNA3kBuNJHbaQ==",
1315
+ "dev": true,
1316
+ "requires": {
1317
+ "@webassemblyjs/ast": "1.4.3",
1318
+ "@webassemblyjs/helper-wasm-bytecode": "1.4.3",
1319
+ "@webassemblyjs/leb128": "1.4.3"
1320
+ }
1321
+ },
1322
+ "@webassemblyjs/wasm-opt": {
1323
+ "version": "1.4.3",
1324
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz",
1325
+ "integrity": "sha512-7Gp+nschuKiDuAL1xmp4Xz0rgEbxioFXw4nCFYEmy+ytynhBnTeGc9W9cB1XRu1w8pqRU2lbj2VBBA4cL5Z2Kw==",
1326
+ "dev": true,
1327
+ "requires": {
1328
+ "@webassemblyjs/ast": "1.4.3",
1329
+ "@webassemblyjs/helper-buffer": "1.4.3",
1330
+ "@webassemblyjs/wasm-gen": "1.4.3",
1331
+ "@webassemblyjs/wasm-parser": "1.4.3",
1332
+ "debug": "^3.1.0"
1333
+ },
1334
+ "dependencies": {
1335
+ "debug": {
1336
+ "version": "3.2.6",
1337
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1338
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1339
+ "dev": true,
1340
+ "requires": {
1341
+ "ms": "^2.1.1"
1342
+ }
1343
+ }
1344
+ }
1345
+ },
1346
+ "@webassemblyjs/wasm-parser": {
1347
+ "version": "1.4.3",
1348
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz",
1349
+ "integrity": "sha512-KXBjtlwA3BVukR/yWHC9GF+SCzBcgj0a7lm92kTOaa4cbjaTaa47bCjXw6cX4SGQpkncB9PU2hHGYVyyI7wFRg==",
1350
+ "dev": true,
1351
+ "requires": {
1352
+ "@webassemblyjs/ast": "1.4.3",
1353
+ "@webassemblyjs/helper-wasm-bytecode": "1.4.3",
1354
+ "@webassemblyjs/leb128": "1.4.3",
1355
+ "@webassemblyjs/wasm-parser": "1.4.3",
1356
+ "webassemblyjs": "1.4.3"
1357
+ }
1358
+ },
1359
+ "@webassemblyjs/wast-parser": {
1360
+ "version": "1.4.3",
1361
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz",
1362
+ "integrity": "sha512-QhCsQzqV0CpsEkRYyTzQDilCNUZ+5j92f+g35bHHNqS22FppNTywNFfHPq8ZWZfYCgbectc+PoghD+xfzVFh1Q==",
1363
+ "dev": true,
1364
+ "requires": {
1365
+ "@webassemblyjs/ast": "1.4.3",
1366
+ "@webassemblyjs/floating-point-hex-parser": "1.4.3",
1367
+ "@webassemblyjs/helper-code-frame": "1.4.3",
1368
+ "@webassemblyjs/helper-fsm": "1.4.3",
1369
+ "long": "^3.2.0",
1370
+ "webassemblyjs": "1.4.3"
1371
+ }
1372
+ },
1373
+ "@webassemblyjs/wast-printer": {
1374
+ "version": "1.4.3",
1375
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz",
1376
+ "integrity": "sha512-EgXk4anf8jKmuZJsqD8qy5bz2frEQhBvZruv+bqwNoLWUItjNSFygk8ywL3JTEz9KtxTlAmqTXNrdD1d9gNDtg==",
1377
+ "dev": true,
1378
+ "requires": {
1379
+ "@webassemblyjs/ast": "1.4.3",
1380
+ "@webassemblyjs/wast-parser": "1.4.3",
1381
+ "long": "^3.2.0"
1382
+ }
1383
+ },
1384
+ "@wordpress/babel-plugin-import-jsx-pragma": {
1385
+ "version": "2.2.0",
1386
+ "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-2.2.0.tgz",
1387
+ "integrity": "sha512-H31qqjbXrQebue4ho8bu/vCPkVCENalxQMMAQOGulmQxOQ6IF+9uwglCR6ZiAWhZmPo6LFq0NQ+IPLSUX8IS8Q==",
1388
+ "dev": true
1389
+ },
1390
+ "@wordpress/babel-preset-default": {
1391
+ "version": "4.3.0",
1392
+ "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-4.3.0.tgz",
1393
+ "integrity": "sha512-yj/JEQh8SJzI3d6h531iVnKvFSYssdFb2PwpMCL5BuIXk98U+FOKSmIHj134WJ1lm4viwMIQeH3UZ93bJ0MqTQ==",
1394
+ "dev": true,
1395
+ "requires": {
1396
+ "@babel/core": "^7.4.4",
1397
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
1398
+ "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
1399
+ "@babel/plugin-transform-react-jsx": "^7.3.0",
1400
+ "@babel/plugin-transform-runtime": "^7.4.4",
1401
+ "@babel/preset-env": "^7.4.4",
1402
+ "@babel/runtime": "^7.4.4",
1403
+ "@wordpress/babel-plugin-import-jsx-pragma": "^2.2.0",
1404
+ "@wordpress/browserslist-config": "^2.5.0"
1405
+ }
1406
+ },
1407
+ "@wordpress/browserslist-config": {
1408
+ "version": "2.5.0",
1409
+ "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-2.5.0.tgz",
1410
+ "integrity": "sha512-cspE4iJ87YjweKAtnIsCxm7ZJQ/ved3TdRJWS0DX/0AOukoRhOMYh7CP1aVc0M3J1kB4LtTY7u3HOcqF2Yf2VA==",
1411
+ "dev": true
1412
+ },
1413
+ "@wordpress/dependency-extraction-webpack-plugin": {
1414
+ "version": "1.0.1",
1415
+ "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-1.0.1.tgz",
1416
+ "integrity": "sha512-Ov4IljSGSPDjQPKV79tXKk7Ljndo+f84aImKIH8mzTMRbZS+7wPzz6jHAa/FpGmf7R99QqaN4CNRpvBihu3o9Q==",
1417
+ "dev": true,
1418
+ "requires": {
1419
+ "webpack": "^4.8.3",
1420
+ "webpack-sources": "^1.3.0"
1421
+ }
1422
+ },
1423
+ "@wordpress/eslint-plugin": {
1424
+ "version": "2.3.0",
1425
+ "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-2.3.0.tgz",
1426
+ "integrity": "sha512-1X1uvBfwx96dxz0NmLB22JhSNaJQCYP3bYAnaR5qMV+O9t6gwbdPl+1kpYhe2sSKFm72y6Tfi8CKRWsyKRCHUg==",
1427
+ "dev": true,
1428
+ "requires": {
1429
+ "babel-eslint": "^10.0.1",
1430
+ "eslint-plugin-jsx-a11y": "^6.2.1",
1431
+ "eslint-plugin-react": "^7.12.4",
1432
+ "eslint-plugin-react-hooks": "^1.6.0",
1433
+ "requireindex": "^1.2.0"
1434
+ }
1435
+ },
1436
+ "@wordpress/jest-console": {
1437
+ "version": "3.1.0",
1438
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-console/-/jest-console-3.1.0.tgz",
1439
+ "integrity": "sha512-6ofKMrGnmDFUnc9zdxN8AfuD3IDrf4THnvJ2QEvz71FVZZbFRLlFZOGs4O/IFmPPOMa/0/lGvTEJr9THZ44wBw==",
1440
+ "dev": true,
1441
+ "requires": {
1442
+ "@babel/runtime": "^7.4.4",
1443
+ "jest-matcher-utils": "^24.7.0",
1444
+ "lodash": "^4.17.11"
1445
+ }
1446
+ },
1447
+ "@wordpress/jest-preset-default": {
1448
+ "version": "4.2.0",
1449
+ "resolved": "https://registry.npmjs.org/@wordpress/jest-preset-default/-/jest-preset-default-4.2.0.tgz",
1450
+ "integrity": "sha512-EJUF7cwqqqpjx5H6exW4RcAZU3eTkzsPFb+Huh/R06t7D91clTQ3PG04h22sbGNDc245lG1ta3wyL04YaWo47A==",
1451
+ "dev": true,
1452
+ "requires": {
1453
+ "@wordpress/jest-console": "^3.1.0",
1454
+ "babel-jest": "^24.7.1",
1455
+ "enzyme": "^3.9.0",
1456
+ "enzyme-adapter-react-16": "^1.10.0",
1457
+ "enzyme-to-json": "^3.3.5"
1458
+ }
1459
+ },
1460
+ "@wordpress/npm-package-json-lint-config": {
1461
+ "version": "2.0.0",
1462
+ "resolved": "https://registry.npmjs.org/@wordpress/npm-package-json-lint-config/-/npm-package-json-lint-config-2.0.0.tgz",
1463
+ "integrity": "sha512-PF8wU2Vwo0TXsbK1Wj//9qpfcoFxs9A2gzHGNnyyH+npGlSqSE3tBXwz+sDNCVjRWgf8bIhPKQ9EmH2eXp4Ctw==",
1464
+ "dev": true
1465
+ },
1466
+ "@wordpress/scripts": {
1467
+ "version": "3.3.0",
1468
+ "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-3.3.0.tgz",
1469
+ "integrity": "sha512-kQBzYMGNhAgTaguS0IZGT9LsmaeC1wgJ8pExjc7md8i9ldp4GPOJCOxVefLkxid6vVJrOi0GzBVYqEfiwpFFCQ==",
1470
+ "dev": true,
1471
+ "requires": {
1472
+ "@wordpress/babel-preset-default": "^4.3.0",
1473
+ "@wordpress/dependency-extraction-webpack-plugin": "^1.0.1",
1474
+ "@wordpress/eslint-plugin": "^2.3.0",
1475
+ "@wordpress/jest-preset-default": "^4.2.0",
1476
+ "@wordpress/npm-package-json-lint-config": "^2.0.0",
1477
+ "babel-loader": "^8.0.5",
1478
+ "chalk": "^2.4.1",
1479
+ "check-node-version": "^3.1.1",
1480
+ "cross-spawn": "^5.1.0",
1481
+ "eslint": "^5.16.0",
1482
+ "jest": "^24.7.1",
1483
+ "jest-puppeteer": "^4.0.0",
1484
+ "minimist": "^1.2.0",
1485
+ "npm-package-json-lint": "^3.6.0",
1486
+ "puppeteer": "1.6.1",
1487
+ "read-pkg-up": "^1.0.1",
1488
+ "resolve-bin": "^0.4.0",
1489
+ "source-map-loader": "^0.2.4",
1490
+ "stylelint": "^9.10.1",
1491
+ "stylelint-config-wordpress": "^13.1.0",
1492
+ "thread-loader": "^2.1.2",
1493
+ "webpack": "4.8.3",
1494
+ "webpack-bundle-analyzer": "^3.3.2",
1495
+ "webpack-cli": "^3.1.2",
1496
+ "webpack-livereload-plugin": "^2.2.0"
1497
+ }
1498
+ },
1499
+ "abab": {
1500
+ "version": "2.0.0",
1501
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
1502
+ "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
1503
+ "dev": true
1504
+ },
1505
+ "abbrev": {
1506
+ "version": "1.1.1",
1507
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
1508
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
1509
+ "dev": true
1510
+ },
1511
+ "accepts": {
1512
+ "version": "1.3.7",
1513
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
1514
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
1515
+ "dev": true,
1516
+ "requires": {
1517
+ "mime-types": "~2.1.24",
1518
+ "negotiator": "0.6.2"
1519
+ }
1520
+ },
1521
+ "acorn": {
1522
+ "version": "5.7.3",
1523
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
1524
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
1525
+ "dev": true
1526
+ },
1527
+ "acorn-dynamic-import": {
1528
+ "version": "3.0.0",
1529
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
1530
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
1531
+ "dev": true,
1532
+ "requires": {
1533
+ "acorn": "^5.0.0"
1534
+ }
1535
+ },
1536
+ "acorn-globals": {
1537
+ "version": "4.3.2",
1538
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
1539
+ "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
1540
+ "dev": true,
1541
+ "requires": {
1542
+ "acorn": "^6.0.1",
1543
+ "acorn-walk": "^6.0.1"
1544
+ },
1545
+ "dependencies": {
1546
+ "acorn": {
1547
+ "version": "6.1.1",
1548
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
1549
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
1550
+ "dev": true
1551
+ }
1552
+ }
1553
+ },
1554
+ "acorn-jsx": {
1555
+ "version": "5.0.1",
1556
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
1557
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
1558
+ "dev": true
1559
+ },
1560
+ "acorn-walk": {
1561
+ "version": "6.1.1",
1562
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
1563
+ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
1564
+ "dev": true
1565
+ },
1566
+ "agent-base": {
1567
+ "version": "4.3.0",
1568
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
1569
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
1570
+ "dev": true,
1571
+ "requires": {
1572
+ "es6-promisify": "^5.0.0"
1573
+ }
1574
+ },
1575
+ "airbnb-prop-types": {
1576
+ "version": "2.13.2",
1577
+ "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz",
1578
+ "integrity": "sha512-2FN6DlHr6JCSxPPi25EnqGaXC4OC3/B3k1lCd6MMYrZ51/Gf/1qDfaR+JElzWa+Tl7cY2aYOlsYJGFeQyVHIeQ==",
1579
+ "dev": true,
1580
+ "requires": {
1581
+ "array.prototype.find": "^2.0.4",
1582
+ "function.prototype.name": "^1.1.0",
1583
+ "has": "^1.0.3",
1584
+ "is-regex": "^1.0.4",
1585
+ "object-is": "^1.0.1",
1586
+ "object.assign": "^4.1.0",
1587
+ "object.entries": "^1.1.0",
1588
+ "prop-types": "^15.7.2",
1589
+ "prop-types-exact": "^1.2.0",
1590
+ "react-is": "^16.8.6"
1591
+ }
1592
+ },
1593
+ "ajv": {
1594
+ "version": "6.10.0",
1595
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
1596
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
1597
+ "dev": true,
1598
+ "requires": {
1599
+ "fast-deep-equal": "^2.0.1",
1600
+ "fast-json-stable-stringify": "^2.0.0",
1601
+ "json-schema-traverse": "^0.4.1",
1602
+ "uri-js": "^4.2.2"
1603
+ }
1604
+ },
1605
+ "ajv-errors": {
1606
+ "version": "1.0.1",
1607
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
1608
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
1609
+ "dev": true
1610
+ },
1611
+ "ajv-keywords": {
1612
+ "version": "3.4.0",
1613
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
1614
+ "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
1615
+ "dev": true
1616
+ },
1617
+ "amdefine": {
1618
+ "version": "1.0.1",
1619
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
1620
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
1621
+ "dev": true
1622
+ },
1623
+ "ansi-escapes": {
1624
+ "version": "3.2.0",
1625
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
1626
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
1627
+ "dev": true
1628
+ },
1629
+ "ansi-regex": {
1630
+ "version": "4.1.0",
1631
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1632
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1633
+ "dev": true
1634
+ },
1635
+ "ansi-styles": {
1636
+ "version": "3.2.1",
1637
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1638
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1639
+ "dev": true,
1640
+ "requires": {
1641
+ "color-convert": "^1.9.0"
1642
+ }
1643
+ },
1644
+ "anymatch": {
1645
+ "version": "2.0.0",
1646
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
1647
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
1648
+ "dev": true,
1649
+ "requires": {
1650
+ "micromatch": "^3.1.4",
1651
+ "normalize-path": "^2.1.1"
1652
+ },
1653
+ "dependencies": {
1654
+ "normalize-path": {
1655
+ "version": "2.1.1",
1656
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1657
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1658
+ "dev": true,
1659
+ "requires": {
1660
+ "remove-trailing-separator": "^1.0.1"
1661
+ }
1662
+ }
1663
+ }
1664
+ },
1665
+ "aproba": {
1666
+ "version": "1.2.0",
1667
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
1668
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
1669
+ "dev": true
1670
+ },
1671
+ "are-we-there-yet": {
1672
+ "version": "1.1.5",
1673
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
1674
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
1675
+ "dev": true,
1676
+ "requires": {
1677
+ "delegates": "^1.0.0",
1678
+ "readable-stream": "^2.0.6"
1679
+ }
1680
+ },
1681
+ "argparse": {
1682
+ "version": "1.0.10",
1683
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
1684
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
1685
+ "dev": true,
1686
+ "requires": {
1687
+ "sprintf-js": "~1.0.2"
1688
+ }
1689
+ },
1690
+ "aria-query": {
1691
+ "version": "3.0.0",
1692
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
1693
+ "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
1694
+ "dev": true,
1695
+ "requires": {
1696
+ "ast-types-flow": "0.0.7",
1697
+ "commander": "^2.11.0"
1698
+ }
1699
+ },
1700
+ "arr-diff": {
1701
+ "version": "4.0.0",
1702
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
1703
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
1704
+ "dev": true
1705
+ },
1706
+ "arr-flatten": {
1707
+ "version": "1.1.0",
1708
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
1709
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
1710
+ "dev": true
1711
+ },
1712
+ "arr-union": {
1713
+ "version": "3.1.0",
1714
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
1715
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
1716
+ "dev": true
1717
+ },
1718
+ "array-equal": {
1719
+ "version": "1.0.0",
1720
+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
1721
+ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
1722
+ "dev": true
1723
+ },
1724
+ "array-filter": {
1725
+ "version": "1.0.0",
1726
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
1727
+ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
1728
+ "dev": true
1729
+ },
1730
+ "array-find-index": {
1731
+ "version": "1.0.2",
1732
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
1733
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
1734
+ "dev": true
1735
+ },
1736
+ "array-flatten": {
1737
+ "version": "1.1.1",
1738
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1739
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
1740
+ "dev": true
1741
+ },
1742
+ "array-includes": {
1743
+ "version": "3.0.3",
1744
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
1745
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
1746
+ "dev": true,
1747
+ "requires": {
1748
+ "define-properties": "^1.1.2",
1749
+ "es-abstract": "^1.7.0"
1750
+ }
1751
+ },
1752
+ "array-union": {
1753
+ "version": "1.0.2",
1754
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
1755
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
1756
+ "dev": true,
1757
+ "requires": {
1758
+ "array-uniq": "^1.0.1"
1759
+ }
1760
+ },
1761
+ "array-uniq": {
1762
+ "version": "1.0.3",
1763
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
1764
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
1765
+ "dev": true
1766
+ },
1767
+ "array-unique": {
1768
+ "version": "0.3.2",
1769
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
1770
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
1771
+ "dev": true
1772
+ },
1773
+ "array.prototype.find": {
1774
+ "version": "2.1.0",
1775
+ "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
1776
+ "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
1777
+ "dev": true,
1778
+ "requires": {
1779
+ "define-properties": "^1.1.3",
1780
+ "es-abstract": "^1.13.0"
1781
+ }
1782
+ },
1783
+ "array.prototype.flat": {
1784
+ "version": "1.2.1",
1785
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz",
1786
+ "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==",
1787
+ "dev": true,
1788
+ "requires": {
1789
+ "define-properties": "^1.1.2",
1790
+ "es-abstract": "^1.10.0",
1791
+ "function-bind": "^1.1.1"
1792
+ }
1793
+ },
1794
+ "arrify": {
1795
+ "version": "1.0.1",
1796
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
1797
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
1798
+ "dev": true
1799
+ },
1800
+ "asn1": {
1801
+ "version": "0.2.4",
1802
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
1803
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
1804
+ "dev": true,
1805
+ "requires": {
1806
+ "safer-buffer": "~2.1.0"
1807
+ }
1808
+ },
1809
+ "asn1.js": {
1810
+ "version": "4.10.1",
1811
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
1812
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
1813
+ "dev": true,
1814
+ "requires": {
1815
+ "bn.js": "^4.0.0",
1816
+ "inherits": "^2.0.1",
1817
+ "minimalistic-assert": "^1.0.0"
1818
+ }
1819
+ },
1820
+ "assert": {
1821
+ "version": "1.5.0",
1822
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
1823
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
1824
+ "dev": true,
1825
+ "requires": {
1826
+ "object-assign": "^4.1.1",
1827
+ "util": "0.10.3"
1828
+ },
1829
+ "dependencies": {
1830
+ "inherits": {
1831
+ "version": "2.0.1",
1832
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
1833
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
1834
+ "dev": true
1835
+ },
1836
+ "util": {
1837
+ "version": "0.10.3",
1838
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
1839
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
1840
+ "dev": true,
1841
+ "requires": {
1842
+ "inherits": "2.0.1"
1843
+ }
1844
+ }
1845
+ }
1846
+ },
1847
+ "assert-plus": {
1848
+ "version": "1.0.0",
1849
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
1850
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
1851
+ "dev": true
1852
+ },
1853
+ "assign-symbols": {
1854
+ "version": "1.0.0",
1855
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
1856
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
1857
+ "dev": true
1858
+ },
1859
+ "ast-types-flow": {
1860
+ "version": "0.0.7",
1861
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
1862
+ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
1863
+ "dev": true
1864
+ },
1865
+ "astral-regex": {
1866
+ "version": "1.0.0",
1867
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
1868
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
1869
+ "dev": true
1870
+ },
1871
+ "async": {
1872
+ "version": "2.6.2",
1873
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
1874
+ "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
1875
+ "dev": true,
1876
+ "requires": {
1877
+ "lodash": "^4.17.11"
1878
+ }
1879
+ },
1880
+ "async-each": {
1881
+ "version": "1.0.3",
1882
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
1883
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
1884
+ "dev": true
1885
+ },
1886
+ "async-foreach": {
1887
+ "version": "0.1.3",
1888
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
1889
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
1890
+ "dev": true
1891
+ },
1892
+ "async-limiter": {
1893
+ "version": "1.0.0",
1894
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
1895
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
1896
+ "dev": true
1897
+ },
1898
+ "asynckit": {
1899
+ "version": "0.4.0",
1900
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1901
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
1902
+ "dev": true
1903
+ },
1904
+ "atob": {
1905
+ "version": "2.1.2",
1906
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
1907
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
1908
+ "dev": true
1909
+ },
1910
+ "autoprefixer": {
1911
+ "version": "9.6.0",
1912
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz",
1913
+ "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==",
1914
+ "dev": true,
1915
+ "requires": {
1916
+ "browserslist": "^4.6.1",
1917
+ "caniuse-lite": "^1.0.30000971",
1918
+ "chalk": "^2.4.2",
1919
+ "normalize-range": "^0.1.2",
1920
+ "num2fraction": "^1.2.2",
1921
+ "postcss": "^7.0.16",
1922
+ "postcss-value-parser": "^3.3.1"
1923
+ }
1924
+ },
1925
+ "aws-sign2": {
1926
+ "version": "0.7.0",
1927
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
1928
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
1929
+ "dev": true
1930
+ },
1931
+ "aws4": {
1932
+ "version": "1.8.0",
1933
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
1934
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
1935
+ "dev": true
1936
+ },
1937
+ "axobject-query": {
1938
+ "version": "2.0.2",
1939
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz",
1940
+ "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==",
1941
+ "dev": true,
1942
+ "requires": {
1943
+ "ast-types-flow": "0.0.7"
1944
+ }
1945
+ },
1946
+ "babel-eslint": {
1947
+ "version": "10.0.2",
1948
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
1949
+ "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
1950
+ "dev": true,
1951
+ "requires": {
1952
+ "@babel/code-frame": "^7.0.0",
1953
+ "@babel/parser": "^7.0.0",
1954
+ "@babel/traverse": "^7.0.0",
1955
+ "@babel/types": "^7.0.0",
1956
+ "eslint-scope": "3.7.1",
1957
+ "eslint-visitor-keys": "^1.0.0"
1958
+ },
1959
+ "dependencies": {
1960
+ "eslint-scope": {
1961
+ "version": "3.7.1",
1962
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
1963
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
1964
+ "dev": true,
1965
+ "requires": {
1966
+ "esrecurse": "^4.1.0",
1967
+ "estraverse": "^4.1.1"
1968
+ }
1969
+ }
1970
+ }
1971
+ },
1972
+ "babel-jest": {
1973
+ "version": "24.8.0",
1974
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz",
1975
+ "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==",
1976
+ "dev": true,
1977
+ "requires": {
1978
+ "@jest/transform": "^24.8.0",
1979
+ "@jest/types": "^24.8.0",
1980
+ "@types/babel__core": "^7.1.0",
1981
+ "babel-plugin-istanbul": "^5.1.0",
1982
+ "babel-preset-jest": "^24.6.0",
1983
+ "chalk": "^2.4.2",
1984
+ "slash": "^2.0.0"
1985
+ }
1986
+ },
1987
+ "babel-loader": {
1988
+ "version": "8.0.6",
1989
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
1990
+ "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
1991
+ "dev": true,
1992
+ "requires": {
1993
+ "find-cache-dir": "^2.0.0",
1994
+ "loader-utils": "^1.0.2",
1995
+ "mkdirp": "^0.5.1",
1996
+ "pify": "^4.0.1"
1997
+ },
1998
+ "dependencies": {
1999
+ "find-cache-dir": {
2000
+ "version": "2.1.0",
2001
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
2002
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
2003
+ "dev": true,
2004
+ "requires": {
2005
+ "commondir": "^1.0.1",
2006
+ "make-dir": "^2.0.0",
2007
+ "pkg-dir": "^3.0.0"
2008
+ }
2009
+ },
2010
+ "find-up": {
2011
+ "version": "3.0.0",
2012
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
2013
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
2014
+ "dev": true,
2015
+ "requires": {
2016
+ "locate-path": "^3.0.0"
2017
+ }
2018
+ },
2019
+ "locate-path": {
2020
+ "version": "3.0.0",
2021
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
2022
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
2023
+ "dev": true,
2024
+ "requires": {
2025
+ "p-locate": "^3.0.0",
2026
+ "path-exists": "^3.0.0"
2027
+ }
2028
+ },
2029
+ "make-dir": {
2030
+ "version": "2.1.0",
2031
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
2032
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
2033
+ "dev": true,
2034
+ "requires": {
2035
+ "pify": "^4.0.1",
2036
+ "semver": "^5.6.0"
2037
+ }
2038
+ },
2039
+ "p-limit": {
2040
+ "version": "2.2.0",
2041
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
2042
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
2043
+ "dev": true,
2044
+ "requires": {
2045
+ "p-try": "^2.0.0"
2046
+ }
2047
+ },
2048
+ "p-locate": {
2049
+ "version": "3.0.0",
2050
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2051
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2052
+ "dev": true,
2053
+ "requires": {
2054
+ "p-limit": "^2.0.0"
2055
+ }
2056
+ },
2057
+ "p-try": {
2058
+ "version": "2.2.0",
2059
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2060
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2061
+ "dev": true
2062
+ },
2063
+ "pify": {
2064
+ "version": "4.0.1",
2065
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
2066
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
2067
+ "dev": true
2068
+ },
2069
+ "pkg-dir": {
2070
+ "version": "3.0.0",
2071
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
2072
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
2073
+ "dev": true,
2074
+ "requires": {
2075
+ "find-up": "^3.0.0"
2076
+ }
2077
+ }
2078
+ }
2079
+ },
2080
+ "babel-plugin-istanbul": {
2081
+ "version": "5.1.4",
2082
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz",
2083
+ "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==",
2084
+ "dev": true,
2085
+ "requires": {
2086
+ "find-up": "^3.0.0",
2087
+ "istanbul-lib-instrument": "^3.3.0",
2088
+ "test-exclude": "^5.2.3"
2089
+ },
2090
+ "dependencies": {
2091
+ "find-up": {
2092
+ "version": "3.0.0",
2093
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
2094
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
2095
+ "dev": true,
2096
+ "requires": {
2097
+ "locate-path": "^3.0.0"
2098
+ }
2099
+ },
2100
+ "locate-path": {
2101
+ "version": "3.0.0",
2102
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
2103
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
2104
+ "dev": true,
2105
+ "requires": {
2106
+ "p-locate": "^3.0.0",
2107
+ "path-exists": "^3.0.0"
2108
+ }
2109
+ },
2110
+ "p-limit": {
2111
+ "version": "2.2.0",
2112
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
2113
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
2114
+ "dev": true,
2115
+ "requires": {
2116
+ "p-try": "^2.0.0"
2117
+ }
2118
+ },
2119
+ "p-locate": {
2120
+ "version": "3.0.0",
2121
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2122
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2123
+ "dev": true,
2124
+ "requires": {
2125
+ "p-limit": "^2.0.0"
2126
+ }
2127
+ },
2128
+ "p-try": {
2129
+ "version": "2.2.0",
2130
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2131
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2132
+ "dev": true
2133
+ }
2134
+ }
2135
+ },
2136
+ "babel-plugin-jest-hoist": {
2137
+ "version": "24.6.0",
2138
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz",
2139
+ "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==",
2140
+ "dev": true,
2141
+ "requires": {
2142
+ "@types/babel__traverse": "^7.0.6"
2143
+ }
2144
+ },
2145
+ "babel-preset-jest": {
2146
+ "version": "24.6.0",
2147
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
2148
+ "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==",
2149
+ "dev": true,
2150
+ "requires": {
2151
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
2152
+ "babel-plugin-jest-hoist": "^24.6.0"
2153
+ }
2154
+ },
2155
+ "bail": {
2156
+ "version": "1.0.4",
2157
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz",
2158
+ "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==",
2159
+ "dev": true
2160
+ },
2161
+ "balanced-match": {
2162
+ "version": "1.0.0",
2163
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
2164
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
2165
+ "dev": true
2166
+ },
2167
+ "base": {
2168
+ "version": "0.11.2",
2169
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
2170
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
2171
+ "dev": true,
2172
+ "requires": {
2173
+ "cache-base": "^1.0.1",
2174
+ "class-utils": "^0.3.5",
2175
+ "component-emitter": "^1.2.1",
2176
+ "define-property": "^1.0.0",
2177
+ "isobject": "^3.0.1",
2178
+ "mixin-deep": "^1.2.0",
2179
+ "pascalcase": "^0.1.1"
2180
+ },
2181
+ "dependencies": {
2182
+ "define-property": {
2183
+ "version": "1.0.0",
2184
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
2185
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
2186
+ "dev": true,
2187
+ "requires": {
2188
+ "is-descriptor": "^1.0.0"
2189
+ }
2190
+ },
2191
+ "is-accessor-descriptor": {
2192
+ "version": "1.0.0",
2193
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
2194
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
2195
+ "dev": true,
2196
+ "requires": {
2197
+ "kind-of": "^6.0.0"
2198
+ }
2199
+ },
2200
+ "is-data-descriptor": {
2201
+ "version": "1.0.0",
2202
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
2203
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
2204
+ "dev": true,
2205
+ "requires": {
2206
+ "kind-of": "^6.0.0"
2207
+ }
2208
+ },
2209
+ "is-descriptor": {
2210
+ "version": "1.0.2",
2211
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
2212
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
2213
+ "dev": true,
2214
+ "requires": {
2215
+ "is-accessor-descriptor": "^1.0.0",
2216
+ "is-data-descriptor": "^1.0.0",
2217
+ "kind-of": "^6.0.2"
2218
+ }
2219
+ }
2220
+ }
2221
+ },
2222
+ "base64-js": {
2223
+ "version": "1.3.0",
2224
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
2225
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
2226
+ "dev": true
2227
+ },
2228
+ "bcrypt-pbkdf": {
2229
+ "version": "1.0.2",
2230
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
2231
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
2232
+ "dev": true,
2233
+ "requires": {
2234
+ "tweetnacl": "^0.14.3"
2235
+ }
2236
+ },
2237
+ "bfj": {
2238
+ "version": "6.1.1",
2239
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz",
2240
+ "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==",
2241
+ "dev": true,
2242
+ "requires": {
2243
+ "bluebird": "^3.5.1",
2244
+ "check-types": "^7.3.0",
2245
+ "hoopy": "^0.1.2",
2246
+ "tryer": "^1.0.0"
2247
+ }
2248
+ },
2249
+ "big.js": {
2250
+ "version": "5.2.2",
2251
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
2252
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
2253
+ "dev": true
2254
+ },
2255
+ "binary-extensions": {
2256
+ "version": "1.13.1",
2257
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
2258
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
2259
+ "dev": true
2260
+ },
2261
+ "block-stream": {
2262
+ "version": "0.0.9",
2263
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
2264
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
2265
+ "dev": true,
2266
+ "requires": {
2267
+ "inherits": "~2.0.0"
2268
+ }
2269
+ },
2270
+ "bluebird": {
2271
+ "version": "3.5.5",
2272
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
2273
+ "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
2274
+ "dev": true
2275
+ },
2276
+ "bn.js": {
2277
+ "version": "4.11.8",
2278
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
2279
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
2280
+ "dev": true
2281
+ },
2282
+ "body": {
2283
+ "version": "5.1.0",
2284
+ "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
2285
+ "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
2286
+ "dev": true,
2287
+ "requires": {
2288
+ "continuable-cache": "^0.3.1",
2289
+ "error": "^7.0.0",
2290
+ "raw-body": "~1.1.0",
2291
+ "safe-json-parse": "~1.0.1"
2292
+ },
2293
+ "dependencies": {
2294
+ "bytes": {
2295
+ "version": "1.0.0",
2296
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
2297
+ "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
2298
+ "dev": true
2299
+ },
2300
+ "raw-body": {
2301
+ "version": "1.1.7",
2302
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
2303
+ "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
2304
+ "dev": true,
2305
+ "requires": {
2306
+ "bytes": "1",
2307
+ "string_decoder": "0.10"
2308
+ }
2309
+ },
2310
+ "string_decoder": {
2311
+ "version": "0.10.31",
2312
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
2313
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
2314
+ "dev": true
2315
+ }
2316
+ }
2317
+ },
2318
+ "body-parser": {
2319
+ "version": "1.19.0",
2320
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
2321
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
2322
+ "dev": true,
2323
+ "requires": {
2324
+ "bytes": "3.1.0",
2325
+ "content-type": "~1.0.4",
2326
+ "debug": "2.6.9",
2327
+ "depd": "~1.1.2",
2328
+ "http-errors": "1.7.2",
2329
+ "iconv-lite": "0.4.24",
2330
+ "on-finished": "~2.3.0",
2331
+ "qs": "6.7.0",
2332
+ "raw-body": "2.4.0",
2333
+ "type-is": "~1.6.17"
2334
+ },
2335
+ "dependencies": {
2336
+ "debug": {
2337
+ "version": "2.6.9",
2338
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2339
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2340
+ "dev": true,
2341
+ "requires": {
2342
+ "ms": "2.0.0"
2343
+ }
2344
+ },
2345
+ "ms": {
2346
+ "version": "2.0.0",
2347
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2348
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2349
+ "dev": true
2350
+ },
2351
+ "qs": {
2352
+ "version": "6.7.0",
2353
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
2354
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
2355
+ "dev": true
2356
+ }
2357
+ }
2358
+ },
2359
+ "boolbase": {
2360
+ "version": "1.0.0",
2361
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
2362
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
2363
+ "dev": true
2364
+ },
2365
+ "brace-expansion": {
2366
+ "version": "1.1.11",
2367
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2368
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2369
+ "dev": true,
2370
+ "requires": {
2371
+ "balanced-match": "^1.0.0",
2372
+ "concat-map": "0.0.1"
2373
+ }
2374
+ },
2375
+ "braces": {
2376
+ "version": "2.3.2",
2377
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
2378
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
2379
+ "dev": true,
2380
+ "requires": {
2381
+ "arr-flatten": "^1.1.0",
2382
+ "array-unique": "^0.3.2",
2383
+ "extend-shallow": "^2.0.1",
2384
+ "fill-range": "^4.0.0",
2385
+ "isobject": "^3.0.1",
2386
+ "repeat-element": "^1.1.2",
2387
+ "snapdragon": "^0.8.1",
2388
+ "snapdragon-node": "^2.0.1",
2389
+ "split-string": "^3.0.2",
2390
+ "to-regex": "^3.0.1"
2391
+ },
2392
+ "dependencies": {
2393
+ "extend-shallow": {
2394
+ "version": "2.0.1",
2395
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2396
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
2397
+ "dev": true,
2398
+ "requires": {
2399
+ "is-extendable": "^0.1.0"
2400
+ }
2401
+ }
2402
+ }
2403
+ },
2404
+ "brorand": {
2405
+ "version": "1.1.0",
2406
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
2407
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
2408
+ "dev": true
2409
+ },
2410
+ "browser-process-hrtime": {
2411
+ "version": "0.1.3",
2412
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
2413
+ "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
2414
+ "dev": true
2415
+ },
2416
+ "browser-resolve": {
2417
+ "version": "1.11.3",
2418
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
2419
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
2420
+ "dev": true,
2421
+ "requires": {
2422
+ "resolve": "1.1.7"
2423
+ },
2424
+ "dependencies": {
2425
+ "resolve": {
2426
+ "version": "1.1.7",
2427
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
2428
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
2429
+ "dev": true
2430
+ }
2431
+ }
2432
+ },
2433
+ "browserify-aes": {
2434
+ "version": "1.2.0",
2435
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
2436
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
2437
+ "dev": true,
2438
+ "requires": {
2439
+ "buffer-xor": "^1.0.3",
2440
+ "cipher-base": "^1.0.0",
2441
+ "create-hash": "^1.1.0",
2442
+ "evp_bytestokey": "^1.0.3",
2443
+ "inherits": "^2.0.1",
2444
+ "safe-buffer": "^5.0.1"
2445
+ }
2446
+ },
2447
+ "browserify-cipher": {
2448
+ "version": "1.0.1",
2449
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
2450
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
2451
+ "dev": true,
2452
+ "requires": {
2453
+ "browserify-aes": "^1.0.4",
2454
+ "browserify-des": "^1.0.0",
2455
+ "evp_bytestokey": "^1.0.0"
2456
+ }
2457
+ },
2458
+ "browserify-des": {
2459
+ "version": "1.0.2",
2460
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
2461
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
2462
+ "dev": true,
2463
+ "requires": {
2464
+ "cipher-base": "^1.0.1",
2465
+ "des.js": "^1.0.0",
2466
+ "inherits": "^2.0.1",
2467
+ "safe-buffer": "^5.1.2"
2468
+ }
2469
+ },
2470
+ "browserify-rsa": {
2471
+ "version": "4.0.1",
2472
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
2473
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
2474
+ "dev": true,
2475
+ "requires": {
2476
+ "bn.js": "^4.1.0",
2477
+ "randombytes": "^2.0.1"
2478
+ }
2479
+ },
2480
+ "browserify-sign": {
2481
+ "version": "4.0.4",
2482
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
2483
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
2484
+ "dev": true,
2485
+ "requires": {
2486
+ "bn.js": "^4.1.1",
2487
+ "browserify-rsa": "^4.0.0",
2488
+ "create-hash": "^1.1.0",
2489
+ "create-hmac": "^1.1.2",
2490
+ "elliptic": "^6.0.0",
2491
+ "inherits": "^2.0.1",
2492
+ "parse-asn1": "^5.0.0"
2493
+ }
2494
+ },
2495
+ "browserify-zlib": {
2496
+ "version": "0.2.0",
2497
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
2498
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
2499
+ "dev": true,
2500
+ "requires": {
2501
+ "pako": "~1.0.5"
2502
+ }
2503
+ },
2504
+ "browserslist": {
2505
+ "version": "4.6.3",
2506
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.3.tgz",
2507
+ "integrity": "sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ==",
2508
+ "dev": true,
2509
+ "requires": {
2510
+ "caniuse-lite": "^1.0.30000975",
2511
+ "electron-to-chromium": "^1.3.164",
2512
+ "node-releases": "^1.1.23"
2513
+ }
2514
+ },
2515
+ "bser": {
2516
+ "version": "2.1.0",
2517
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz",
2518
+ "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==",
2519
+ "dev": true,
2520
+ "requires": {
2521
+ "node-int64": "^0.4.0"
2522
+ }
2523
+ },
2524
+ "buffer": {
2525
+ "version": "4.9.1",
2526
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
2527
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
2528
+ "dev": true,
2529
+ "requires": {
2530
+ "base64-js": "^1.0.2",
2531
+ "ieee754": "^1.1.4",
2532
+ "isarray": "^1.0.0"
2533
+ }
2534
+ },
2535
+ "buffer-from": {
2536
+ "version": "1.1.1",
2537
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
2538
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
2539
+ "dev": true
2540
+ },
2541
+ "buffer-xor": {
2542
+ "version": "1.0.3",
2543
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
2544
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
2545
+ "dev": true
2546
+ },
2547
+ "builtin-status-codes": {
2548
+ "version": "3.0.0",
2549
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
2550
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
2551
+ "dev": true
2552
+ },
2553
+ "bytes": {
2554
+ "version": "3.1.0",
2555
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
2556
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
2557
+ "dev": true
2558
+ },
2559
+ "cacache": {
2560
+ "version": "10.0.4",
2561
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
2562
+ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
2563
+ "dev": true,
2564
+ "requires": {
2565
+ "bluebird": "^3.5.1",
2566
+ "chownr": "^1.0.1",
2567
+ "glob": "^7.1.2",
2568
+ "graceful-fs": "^4.1.11",
2569
+ "lru-cache": "^4.1.1",
2570
+ "mississippi": "^2.0.0",
2571
+ "mkdirp": "^0.5.1",
2572
+ "move-concurrently": "^1.0.1",
2573
+ "promise-inflight": "^1.0.1",
2574
+ "rimraf": "^2.6.2",
2575
+ "ssri": "^5.2.4",
2576
+ "unique-filename": "^1.1.0",
2577
+ "y18n": "^4.0.0"
2578
+ }
2579
+ },
2580
+ "cache-base": {
2581
+ "version": "1.0.1",
2582
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
2583
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
2584
+ "dev": true,
2585
+ "requires": {
2586
+ "collection-visit": "^1.0.0",
2587
+ "component-emitter": "^1.2.1",
2588
+ "get-value": "^2.0.6",
2589
+ "has-value": "^1.0.0",
2590
+ "isobject": "^3.0.1",
2591
+ "set-value": "^2.0.0",
2592
+ "to-object-path": "^0.3.0",
2593
+ "union-value": "^1.0.0",
2594
+ "unset-value": "^1.0.0"
2595
+ }
2596
+ },
2597
+ "call-me-maybe": {
2598
+ "version": "1.0.1",
2599
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
2600
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
2601
+ "dev": true
2602
+ },
2603
+ "caller-callsite": {
2604
+ "version": "2.0.0",
2605
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
2606
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
2607
+ "dev": true,
2608
+ "requires": {
2609
+ "callsites": "^2.0.0"
2610
+ },
2611
+ "dependencies": {
2612
+ "callsites": {
2613
+ "version": "2.0.0",
2614
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
2615
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
2616
+ "dev": true
2617
+ }
2618
+ }
2619
+ },
2620
+ "caller-path": {
2621
+ "version": "2.0.0",
2622
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
2623
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
2624
+ "dev": true,
2625
+ "requires": {
2626
+ "caller-callsite": "^2.0.0"
2627
+ }
2628
+ },
2629
+ "callsites": {
2630
+ "version": "3.1.0",
2631
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
2632
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
2633
+ "dev": true
2634
+ },
2635
+ "camelcase": {
2636
+ "version": "5.3.1",
2637
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
2638
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
2639
+ "dev": true
2640
+ },
2641
+ "camelcase-keys": {
2642
+ "version": "4.2.0",
2643
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
2644
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
2645
+ "dev": true,
2646
+ "requires": {
2647
+ "camelcase": "^4.1.0",
2648
+ "map-obj": "^2.0.0",
2649
+ "quick-lru": "^1.0.0"
2650
+ },
2651
+ "dependencies": {
2652
+ "camelcase": {
2653
+ "version": "4.1.0",
2654
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
2655
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
2656
+ "dev": true
2657
+ }
2658
+ }
2659
+ },
2660
+ "caniuse-lite": {
2661
+ "version": "1.0.30000976",
2662
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000976.tgz",
2663
+ "integrity": "sha512-tleNB1IwPRqZiod6nUNum63xQCMN96BUO2JTeiwuRM7p9d616EHsMBjBWJMudX39qCaPuWY8KEWzMZq7A9XQMQ==",
2664
+ "dev": true
2665
+ },
2666
+ "capture-exit": {
2667
+ "version": "2.0.0",
2668
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
2669
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
2670
+ "dev": true,
2671
+ "requires": {
2672
+ "rsvp": "^4.8.4"
2673
+ }
2674
+ },
2675
+ "caseless": {
2676
+ "version": "0.12.0",
2677
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
2678
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
2679
+ "dev": true
2680
+ },
2681
+ "ccount": {
2682
+ "version": "1.0.4",
2683
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.4.tgz",
2684
+ "integrity": "sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==",
2685
+ "dev": true
2686
+ },
2687
+ "chalk": {
2688
+ "version": "2.4.2",
2689
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2690
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2691
+ "dev": true,
2692
+ "requires": {
2693
+ "ansi-styles": "^3.2.1",
2694
+ "escape-string-regexp": "^1.0.5",
2695
+ "supports-color": "^5.3.0"
2696
+ }
2697
+ },
2698
+ "character-entities": {
2699
+ "version": "1.2.3",
2700
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz",
2701
+ "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==",
2702
+ "dev": true
2703
+ },
2704
+ "character-entities-html4": {
2705
+ "version": "1.1.3",
2706
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.3.tgz",
2707
+ "integrity": "sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==",
2708
+ "dev": true
2709
+ },
2710
+ "character-entities-legacy": {
2711
+ "version": "1.1.3",
2712
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz",
2713
+ "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==",
2714
+ "dev": true
2715
+ },
2716
+ "character-reference-invalid": {
2717
+ "version": "1.1.3",
2718
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz",
2719
+ "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==",
2720
+ "dev": true
2721
+ },
2722
+ "chardet": {
2723
+ "version": "0.7.0",
2724
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
2725
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
2726
+ "dev": true
2727
+ },
2728
+ "check-node-version": {
2729
+ "version": "3.3.0",
2730
+ "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-3.3.0.tgz",
2731
+ "integrity": "sha512-OAtp7prQf+8YYKn2UB/fK1Ppb9OT+apW56atoKYUvucYLPq69VozOY0B295okBwCKymk2cictrS3qsdcZwyfzw==",
2732
+ "dev": true,
2733
+ "requires": {
2734
+ "chalk": "^2.3.0",
2735
+ "map-values": "^1.0.1",
2736
+ "minimist": "^1.2.0",
2737
+ "object-filter": "^1.0.2",
2738
+ "object.assign": "^4.0.4",
2739
+ "run-parallel": "^1.1.4",
2740
+ "semver": "^5.0.3"
2741
+ }
2742
+ },
2743
+ "check-types": {
2744
+ "version": "7.4.0",
2745
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
2746
+ "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==",
2747
+ "dev": true
2748
+ },
2749
+ "cheerio": {
2750
+ "version": "1.0.0-rc.3",
2751
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
2752
+ "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
2753
+ "dev": true,
2754
+ "requires": {
2755
+ "css-select": "~1.2.0",
2756
+ "dom-serializer": "~0.1.1",
2757
+ "entities": "~1.1.1",
2758
+ "htmlparser2": "^3.9.1",
2759
+ "lodash": "^4.15.0",
2760
+ "parse5": "^3.0.1"
2761
+ }
2762
+ },
2763
+ "chokidar": {
2764
+ "version": "2.1.6",
2765
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
2766
+ "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
2767
+ "dev": true,
2768
+ "requires": {
2769
+ "anymatch": "^2.0.0",
2770
+ "async-each": "^1.0.1",
2771
+ "braces": "^2.3.2",
2772
+ "fsevents": "^1.2.7",
2773
+ "glob-parent": "^3.1.0",
2774
+ "inherits": "^2.0.3",
2775
+ "is-binary-path": "^1.0.0",
2776
+ "is-glob": "^4.0.0",
2777
+ "normalize-path": "^3.0.0",
2778
+ "path-is-absolute": "^1.0.0",
2779
+ "readdirp": "^2.2.1",
2780
+ "upath": "^1.1.1"
2781
+ }
2782
+ },
2783
+ "chownr": {
2784
+ "version": "1.1.1",
2785
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
2786
+ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
2787
+ "dev": true
2788
+ },
2789
+ "chrome-trace-event": {
2790
+ "version": "0.1.3",
2791
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz",
2792
+ "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==",
2793
+ "dev": true
2794
+ },
2795
+ "ci-info": {
2796
+ "version": "2.0.0",
2797
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
2798
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
2799
+ "dev": true
2800
+ },
2801
+ "cipher-base": {
2802
+ "version": "1.0.4",
2803
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
2804
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
2805
+ "dev": true,
2806
+ "requires": {
2807
+ "inherits": "^2.0.1",
2808
+ "safe-buffer": "^5.0.1"
2809
+ }
2810
+ },
2811
+ "class-utils": {
2812
+ "version": "0.3.6",
2813
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
2814
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
2815
+ "dev": true,
2816
+ "requires": {
2817
+ "arr-union": "^3.1.0",
2818
+ "define-property": "^0.2.5",
2819
+ "isobject": "^3.0.0",
2820
+ "static-extend": "^0.1.1"
2821
+ },
2822
+ "dependencies": {
2823
+ "define-property": {
2824
+ "version": "0.2.5",
2825
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2826
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2827
+ "dev": true,
2828
+ "requires": {
2829
+ "is-descriptor": "^0.1.0"
2830
+ }
2831
+ }
2832
+ }
2833
+ },
2834
+ "classnames": {
2835
+ "version": "2.2.6",
2836
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
2837
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==",
2838
+ "dev": true
2839
+ },
2840
+ "cli-cursor": {
2841
+ "version": "2.1.0",
2842
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
2843
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
2844
+ "dev": true,
2845
+ "requires": {
2846
+ "restore-cursor": "^2.0.0"
2847
+ }
2848
+ },
2849
+ "cli-width": {
2850
+ "version": "2.2.0",
2851
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
2852
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
2853
+ "dev": true
2854
+ },
2855
+ "cliui": {
2856
+ "version": "4.1.0",
2857
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
2858
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
2859
+ "dev": true,
2860
+ "requires": {
2861
+ "string-width": "^2.1.1",
2862
+ "strip-ansi": "^4.0.0",
2863
+ "wrap-ansi": "^2.0.0"
2864
+ }
2865
+ },
2866
+ "clone-deep": {
2867
+ "version": "0.2.4",
2868
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
2869
+ "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
2870
+ "dev": true,
2871
+ "requires": {
2872
+ "for-own": "^0.1.3",
2873
+ "is-plain-object": "^2.0.1",
2874
+ "kind-of": "^3.0.2",
2875
+ "lazy-cache": "^1.0.3",
2876
+ "shallow-clone": "^0.1.2"
2877
+ },
2878
+ "dependencies": {
2879
+ "kind-of": {
2880
+ "version": "3.2.2",
2881
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2882
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2883
+ "dev": true,
2884
+ "requires": {
2885
+ "is-buffer": "^1.1.5"
2886
+ }
2887
+ }
2888
+ }
2889
+ },
2890
+ "clone-regexp": {
2891
+ "version": "1.0.1",
2892
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz",
2893
+ "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==",
2894
+ "dev": true,
2895
+ "requires": {
2896
+ "is-regexp": "^1.0.0",
2897
+ "is-supported-regexp-flag": "^1.0.0"
2898
+ }
2899
+ },
2900
+ "co": {
2901
+ "version": "4.6.0",
2902
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
2903
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
2904
+ "dev": true
2905
+ },
2906
+ "code-point-at": {
2907
+ "version": "1.1.0",
2908
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
2909
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
2910
+ "dev": true
2911
+ },
2912
+ "collapse-white-space": {
2913
+ "version": "1.0.5",
2914
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz",
2915
+ "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==",
2916
+ "dev": true
2917
+ },
2918
+ "collection-visit": {
2919
+ "version": "1.0.0",
2920
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
2921
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
2922
+ "dev": true,
2923
+ "requires": {
2924
+ "map-visit": "^1.0.0",
2925
+ "object-visit": "^1.0.0"
2926
+ }
2927
+ },
2928
+ "color-convert": {
2929
+ "version": "1.9.3",
2930
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2931
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2932
+ "dev": true,
2933
+ "requires": {
2934
+ "color-name": "1.1.3"
2935
+ }
2936
+ },
2937
+ "color-name": {
2938
+ "version": "1.1.3",
2939
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2940
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
2941
+ "dev": true
2942
+ },
2943
+ "combined-stream": {
2944
+ "version": "1.0.8",
2945
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
2946
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
2947
+ "dev": true,
2948
+ "requires": {
2949
+ "delayed-stream": "~1.0.0"
2950
+ }
2951
+ },
2952
+ "commander": {
2953
+ "version": "2.13.0",
2954
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
2955
+ "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==",
2956
+ "dev": true
2957
+ },
2958
+ "commondir": {
2959
+ "version": "1.0.1",
2960
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
2961
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
2962
+ "dev": true
2963
+ },
2964
+ "component-emitter": {
2965
+ "version": "1.3.0",
2966
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
2967
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
2968
+ "dev": true
2969
+ },
2970
+ "concat-map": {
2971
+ "version": "0.0.1",
2972
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2973
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
2974
+ "dev": true
2975
+ },
2976
+ "concat-stream": {
2977
+ "version": "1.6.2",
2978
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
2979
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
2980
+ "dev": true,
2981
+ "requires": {
2982
+ "buffer-from": "^1.0.0",
2983
+ "inherits": "^2.0.3",
2984
+ "readable-stream": "^2.2.2",
2985
+ "typedarray": "^0.0.6"
2986
+ }
2987
+ },
2988
+ "console-browserify": {
2989
+ "version": "1.1.0",
2990
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
2991
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
2992
+ "dev": true,
2993
+ "requires": {
2994
+ "date-now": "^0.1.4"
2995
+ }
2996
+ },
2997
+ "console-control-strings": {
2998
+ "version": "1.1.0",
2999
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
3000
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
3001
+ "dev": true
3002
+ },
3003
+ "constants-browserify": {
3004
+ "version": "1.0.0",
3005
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
3006
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
3007
+ "dev": true
3008
+ },
3009
+ "content-disposition": {
3010
+ "version": "0.5.3",
3011
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
3012
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
3013
+ "dev": true,
3014
+ "requires": {
3015
+ "safe-buffer": "5.1.2"
3016
+ }
3017
+ },
3018
+ "content-type": {
3019
+ "version": "1.0.4",
3020
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
3021
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
3022
+ "dev": true
3023
+ },
3024
+ "continuable-cache": {
3025
+ "version": "0.3.1",
3026
+ "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
3027
+ "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
3028
+ "dev": true
3029
+ },
3030
+ "convert-source-map": {
3031
+ "version": "1.6.0",
3032
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
3033
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
3034
+ "dev": true,
3035
+ "requires": {
3036
+ "safe-buffer": "~5.1.1"
3037
+ }
3038
+ },
3039
+ "cookie": {
3040
+ "version": "0.4.0",
3041
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
3042
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
3043
+ "dev": true
3044
+ },
3045
+ "cookie-signature": {
3046
+ "version": "1.0.6",
3047
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
3048
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
3049
+ "dev": true
3050
+ },
3051
+ "copy-concurrently": {
3052
+ "version": "1.0.5",
3053
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
3054
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
3055
+ "dev": true,
3056
+ "requires": {
3057
+ "aproba": "^1.1.1",
3058
+ "fs-write-stream-atomic": "^1.0.8",
3059
+ "iferr": "^0.1.5",
3060
+ "mkdirp": "^0.5.1",
3061
+ "rimraf": "^2.5.4",
3062
+ "run-queue": "^1.0.0"
3063
+ }
3064
+ },
3065
+ "copy-descriptor": {
3066
+ "version": "0.1.1",
3067
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
3068
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
3069
+ "dev": true
3070
+ },
3071
+ "core-js": {
3072
+ "version": "2.6.9",
3073
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
3074
+ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==",
3075
+ "dev": true
3076
+ },
3077
+ "core-js-compat": {
3078
+ "version": "3.1.4",
3079
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz",
3080
+ "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==",
3081
+ "dev": true,
3082
+ "requires": {
3083
+ "browserslist": "^4.6.2",
3084
+ "core-js-pure": "3.1.4",
3085
+ "semver": "^6.1.1"
3086
+ },
3087
+ "dependencies": {
3088
+ "semver": {
3089
+ "version": "6.1.1",
3090
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
3091
+ "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
3092
+ "dev": true
3093
+ }
3094
+ }
3095
+ },
3096
+ "core-js-pure": {
3097
+ "version": "3.1.4",
3098
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz",
3099
+ "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==",
3100
+ "dev": true
3101
+ },
3102
+ "core-util-is": {
3103
+ "version": "1.0.2",
3104
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
3105
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
3106
+ "dev": true
3107
+ },
3108
+ "cosmiconfig": {
3109
+ "version": "5.2.1",
3110
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
3111
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
3112
+ "dev": true,
3113
+ "requires": {
3114
+ "import-fresh": "^2.0.0",
3115
+ "is-directory": "^0.3.1",
3116
+ "js-yaml": "^3.13.1",
3117
+ "parse-json": "^4.0.0"
3118
+ },
3119
+ "dependencies": {
3120
+ "import-fresh": {
3121
+ "version": "2.0.0",
3122
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
3123
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
3124
+ "dev": true,
3125
+ "requires": {
3126
+ "caller-path": "^2.0.0",
3127
+ "resolve-from": "^3.0.0"
3128
+ }
3129
+ },
3130
+ "resolve-from": {
3131
+ "version": "3.0.0",
3132
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
3133
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
3134
+ "dev": true
3135
+ }
3136
+ }
3137
+ },
3138
+ "create-ecdh": {
3139
+ "version": "4.0.3",
3140
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
3141
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
3142
+ "dev": true,
3143
+ "requires": {
3144
+ "bn.js": "^4.1.0",
3145
+ "elliptic": "^6.0.0"
3146
+ }
3147
+ },
3148
+ "create-hash": {
3149
+ "version": "1.2.0",
3150
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
3151
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
3152
+ "dev": true,
3153
+ "requires": {
3154
+ "cipher-base": "^1.0.1",
3155
+ "inherits": "^2.0.1",
3156
+ "md5.js": "^1.3.4",
3157
+ "ripemd160": "^2.0.1",
3158
+ "sha.js": "^2.4.0"
3159
+ }
3160
+ },
3161
+ "create-hmac": {
3162
+ "version": "1.1.7",
3163
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
3164
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
3165
+ "dev": true,
3166
+ "requires": {
3167
+ "cipher-base": "^1.0.3",
3168
+ "create-hash": "^1.1.0",
3169
+ "inherits": "^2.0.1",
3170
+ "ripemd160": "^2.0.0",
3171
+ "safe-buffer": "^5.0.1",
3172
+ "sha.js": "^2.4.8"
3173
+ }
3174
+ },
3175
+ "cross-spawn": {
3176
+ "version": "5.1.0",
3177
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
3178
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
3179
+ "dev": true,
3180
+ "requires": {
3181
+ "lru-cache": "^4.0.1",
3182
+ "shebang-command": "^1.2.0",
3183
+ "which": "^1.2.9"
3184
+ }
3185
+ },
3186
+ "crypto-browserify": {
3187
+ "version": "3.12.0",
3188
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
3189
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
3190
+ "dev": true,
3191
+ "requires": {
3192
+ "browserify-cipher": "^1.0.0",
3193
+ "browserify-sign": "^4.0.0",
3194
+ "create-ecdh": "^4.0.0",
3195
+ "create-hash": "^1.1.0",
3196
+ "create-hmac": "^1.1.0",
3197
+ "diffie-hellman": "^5.0.0",
3198
+ "inherits": "^2.0.1",
3199
+ "pbkdf2": "^3.0.3",
3200
+ "public-encrypt": "^4.0.0",
3201
+ "randombytes": "^2.0.0",
3202
+ "randomfill": "^1.0.3"
3203
+ }
3204
+ },
3205
+ "css-loader": {
3206
+ "version": "2.1.1",
3207
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz",
3208
+ "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==",
3209
+ "dev": true,
3210
+ "requires": {
3211
+ "camelcase": "^5.2.0",
3212
+ "icss-utils": "^4.1.0",
3213
+ "loader-utils": "^1.2.3",
3214
+ "normalize-path": "^3.0.0",
3215
+ "postcss": "^7.0.14",
3216
+ "postcss-modules-extract-imports": "^2.0.0",
3217
+ "postcss-modules-local-by-default": "^2.0.6",
3218
+ "postcss-modules-scope": "^2.1.0",
3219
+ "postcss-modules-values": "^2.0.0",
3220
+ "postcss-value-parser": "^3.3.0",
3221
+ "schema-utils": "^1.0.0"
3222
+ },
3223
+ "dependencies": {
3224
+ "schema-utils": {
3225
+ "version": "1.0.0",
3226
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
3227
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
3228
+ "dev": true,
3229
+ "requires": {
3230
+ "ajv": "^6.1.0",
3231
+ "ajv-errors": "^1.0.0",
3232
+ "ajv-keywords": "^3.1.0"
3233
+ }
3234
+ }
3235
+ }
3236
+ },
3237
+ "css-select": {
3238
+ "version": "1.2.0",
3239
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
3240
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
3241
+ "dev": true,
3242
+ "requires": {
3243
+ "boolbase": "~1.0.0",
3244
+ "css-what": "2.1",
3245
+ "domutils": "1.5.1",
3246
+ "nth-check": "~1.0.1"
3247
+ }
3248
+ },
3249
+ "css-what": {
3250
+ "version": "2.1.3",
3251
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
3252
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
3253
+ "dev": true
3254
+ },
3255
+ "cssesc": {
3256
+ "version": "3.0.0",
3257
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
3258
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
3259
+ "dev": true
3260
+ },
3261
+ "cssom": {
3262
+ "version": "0.3.6",
3263
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz",
3264
+ "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==",
3265
+ "dev": true
3266
+ },
3267
+ "cssstyle": {
3268
+ "version": "1.2.2",
3269
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz",
3270
+ "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==",
3271
+ "dev": true,
3272
+ "requires": {
3273
+ "cssom": "0.3.x"
3274
+ }
3275
+ },
3276
+ "currently-unhandled": {
3277
+ "version": "0.4.1",
3278
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
3279
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
3280
+ "dev": true,
3281
+ "requires": {
3282
+ "array-find-index": "^1.0.1"
3283
+ }
3284
+ },
3285
+ "cwd": {
3286
+ "version": "0.10.0",
3287
+ "resolved": "https://registry.npmjs.org/cwd/-/cwd-0.10.0.tgz",
3288
+ "integrity": "sha1-FyQAaUBXwioTsM8WFix+S3p/5Wc=",
3289
+ "dev": true,
3290
+ "requires": {
3291
+ "find-pkg": "^0.1.2",
3292
+ "fs-exists-sync": "^0.1.0"
3293
+ }
3294
+ },
3295
+ "cyclist": {
3296
+ "version": "0.2.2",
3297
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
3298
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
3299
+ "dev": true
3300
+ },
3301
+ "damerau-levenshtein": {
3302
+ "version": "1.0.5",
3303
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz",
3304
+ "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==",
3305
+ "dev": true
3306
+ },
3307
+ "dashdash": {
3308
+ "version": "1.14.1",
3309
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
3310
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
3311
+ "dev": true,
3312
+ "requires": {
3313
+ "assert-plus": "^1.0.0"
3314
+ }
3315
+ },
3316
+ "data-urls": {
3317
+ "version": "1.1.0",
3318
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
3319
+ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
3320
+ "dev": true,
3321
+ "requires": {
3322
+ "abab": "^2.0.0",
3323
+ "whatwg-mimetype": "^2.2.0",
3324
+ "whatwg-url": "^7.0.0"
3325
+ },
3326
+ "dependencies": {
3327
+ "whatwg-url": {
3328
+ "version": "7.0.0",
3329
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
3330
+ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
3331
+ "dev": true,
3332
+ "requires": {
3333
+ "lodash.sortby": "^4.7.0",
3334
+ "tr46": "^1.0.1",
3335
+ "webidl-conversions": "^4.0.2"
3336
+ }
3337
+ }
3338
+ }
3339
+ },
3340
+ "date-now": {
3341
+ "version": "0.1.4",
3342
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
3343
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
3344
+ "dev": true
3345
+ },
3346
+ "debug": {
3347
+ "version": "4.1.1",
3348
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
3349
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
3350
+ "dev": true,
3351
+ "requires": {
3352
+ "ms": "^2.1.1"
3353
+ }
3354
+ },
3355
+ "decamelize": {
3356
+ "version": "1.2.0",
3357
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
3358
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
3359
+ "dev": true
3360
+ },
3361
+ "decamelize-keys": {
3362
+ "version": "1.1.0",
3363
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
3364
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
3365
+ "dev": true,
3366
+ "requires": {
3367
+ "decamelize": "^1.1.0",
3368
+ "map-obj": "^1.0.0"
3369
+ },
3370
+ "dependencies": {
3371
+ "map-obj": {
3372
+ "version": "1.0.1",
3373
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
3374
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
3375
+ "dev": true
3376
+ }
3377
+ }
3378
+ },
3379
+ "decode-uri-component": {
3380
+ "version": "0.2.0",
3381
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
3382
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
3383
+ "dev": true
3384
+ },
3385
+ "deep-is": {
3386
+ "version": "0.1.3",
3387
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
3388
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
3389
+ "dev": true
3390
+ },
3391
+ "define-properties": {
3392
+ "version": "1.1.3",
3393
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
3394
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
3395
+ "dev": true,
3396
+ "requires": {
3397
+ "object-keys": "^1.0.12"
3398
+ }
3399
+ },
3400
+ "define-property": {
3401
+ "version": "2.0.2",
3402
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
3403
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
3404
+ "dev": true,
3405
+ "requires": {
3406
+ "is-descriptor": "^1.0.2",
3407
+ "isobject": "^3.0.1"
3408
+ },
3409
+ "dependencies": {
3410
+ "is-accessor-descriptor": {
3411
+ "version": "1.0.0",
3412
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
3413
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
3414
+ "dev": true,
3415
+ "requires": {
3416
+ "kind-of": "^6.0.0"
3417
+ }
3418
+ },
3419
+ "is-data-descriptor": {
3420
+ "version": "1.0.0",
3421
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
3422
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
3423
+ "dev": true,
3424
+ "requires": {
3425
+ "kind-of": "^6.0.0"
3426
+ }
3427
+ },
3428
+ "is-descriptor": {
3429
+ "version": "1.0.2",
3430
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
3431
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
3432
+ "dev": true,
3433
+ "requires": {
3434
+ "is-accessor-descriptor": "^1.0.0",
3435
+ "is-data-descriptor": "^1.0.0",
3436
+ "kind-of": "^6.0.2"
3437
+ }
3438
+ }
3439
+ }
3440
+ },
3441
+ "delayed-stream": {
3442
+ "version": "1.0.0",
3443
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
3444
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
3445
+ "dev": true
3446
+ },
3447
+ "delegates": {
3448
+ "version": "1.0.0",
3449
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
3450
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
3451
+ "dev": true
3452
+ },
3453
+ "depd": {
3454
+ "version": "1.1.2",
3455
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
3456
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
3457
+ "dev": true
3458
+ },
3459
+ "des.js": {
3460
+ "version": "1.0.0",
3461
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
3462
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
3463
+ "dev": true,
3464
+ "requires": {
3465
+ "inherits": "^2.0.1",
3466
+ "minimalistic-assert": "^1.0.0"
3467
+ }
3468
+ },
3469
+ "destroy": {
3470
+ "version": "1.0.4",
3471
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
3472
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
3473
+ "dev": true
3474
+ },
3475
+ "detect-file": {
3476
+ "version": "1.0.0",
3477
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
3478
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
3479
+ "dev": true
3480
+ },
3481
+ "detect-newline": {
3482
+ "version": "2.1.0",
3483
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
3484
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
3485
+ "dev": true
3486
+ },
3487
+ "diff-sequences": {
3488
+ "version": "24.3.0",
3489
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
3490
+ "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==",
3491
+ "dev": true
3492
+ },
3493
+ "diffie-hellman": {
3494
+ "version": "5.0.3",
3495
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
3496
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
3497
+ "dev": true,
3498
+ "requires": {
3499
+ "bn.js": "^4.1.0",
3500
+ "miller-rabin": "^4.0.0",
3501
+ "randombytes": "^2.0.0"
3502
+ }
3503
+ },
3504
+ "dir-glob": {
3505
+ "version": "2.2.2",
3506
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
3507
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
3508
+ "dev": true,
3509
+ "requires": {
3510
+ "path-type": "^3.0.0"
3511
+ }
3512
+ },
3513
+ "discontinuous-range": {
3514
+ "version": "1.0.0",
3515
+ "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
3516
+ "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
3517
+ "dev": true
3518
+ },
3519
+ "doctrine": {
3520
+ "version": "2.1.0",
3521
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
3522
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
3523
+ "dev": true,
3524
+ "requires": {
3525
+ "esutils": "^2.0.2"
3526
+ }
3527
+ },
3528
+ "dom-scroll-into-view": {
3529
+ "version": "1.2.1",
3530
+ "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz",
3531
+ "integrity": "sha1-6PNnMt0ImwIBqI14Fdw/iObWbH4="
3532
+ },
3533
+ "dom-serializer": {
3534
+ "version": "0.1.1",
3535
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
3536
+ "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
3537
+ "dev": true,
3538
+ "requires": {
3539
+ "domelementtype": "^1.3.0",
3540
+ "entities": "^1.1.1"
3541
+ }
3542
+ },
3543
+ "domain-browser": {
3544
+ "version": "1.2.0",
3545
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
3546
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
3547
+ "dev": true
3548
+ },
3549
+ "domelementtype": {
3550
+ "version": "1.3.1",
3551
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
3552
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
3553
+ "dev": true
3554
+ },
3555
+ "domexception": {
3556
+ "version": "1.0.1",
3557
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
3558
+ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
3559
+ "dev": true,
3560
+ "requires": {
3561
+ "webidl-conversions": "^4.0.2"
3562
+ }
3563
+ },
3564
+ "domhandler": {
3565
+ "version": "2.4.2",
3566
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
3567
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
3568
+ "dev": true,
3569
+ "requires": {
3570
+ "domelementtype": "1"
3571
+ }
3572
+ },
3573
+ "domutils": {
3574
+ "version": "1.5.1",
3575
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
3576
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
3577
+ "dev": true,
3578
+ "requires": {
3579
+ "dom-serializer": "0",
3580
+ "domelementtype": "1"
3581
+ }
3582
+ },
3583
+ "dot-prop": {
3584
+ "version": "4.2.0",
3585
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
3586
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
3587
+ "dev": true,
3588
+ "requires": {
3589
+ "is-obj": "^1.0.0"
3590
+ }
3591
+ },
3592
+ "duplexer": {
3593
+ "version": "0.1.1",
3594
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
3595
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
3596
+ "dev": true
3597
+ },
3598
+ "duplexify": {
3599
+ "version": "3.7.1",
3600
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
3601
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
3602
+ "dev": true,
3603
+ "requires": {
3604
+ "end-of-stream": "^1.0.0",
3605
+ "inherits": "^2.0.1",
3606
+ "readable-stream": "^2.0.0",
3607
+ "stream-shift": "^1.0.0"
3608
+ }
3609
+ },
3610
+ "ecc-jsbn": {
3611
+ "version": "0.1.2",
3612
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
3613
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
3614
+ "dev": true,
3615
+ "requires": {
3616
+ "jsbn": "~0.1.0",
3617
+ "safer-buffer": "^2.1.0"
3618
+ }
3619
+ },
3620
+ "ee-first": {
3621
+ "version": "1.1.1",
3622
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
3623
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
3624
+ "dev": true
3625
+ },
3626
+ "ejs": {
3627
+ "version": "2.6.2",
3628
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz",
3629
+ "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==",
3630
+ "dev": true
3631
+ },
3632
+ "electron-to-chromium": {
3633
+ "version": "1.3.170",
3634
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.170.tgz",
3635
+ "integrity": "sha512-vDEhHcwMogbM+WXDTh6ZktwQOqLcK7MJdCOM99UZXRI1ct3Y9OeYYJTrIHnswzv+IYwoXNj0Furh+K6UotcHVg==",
3636
+ "dev": true
3637
+ },
3638
+ "elliptic": {
3639
+ "version": "6.4.1",
3640
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
3641
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
3642
+ "dev": true,
3643
+ "requires": {
3644
+ "bn.js": "^4.4.0",
3645
+ "brorand": "^1.0.1",
3646
+ "hash.js": "^1.0.0",
3647
+ "hmac-drbg": "^1.0.0",
3648
+ "inherits": "^2.0.1",
3649
+ "minimalistic-assert": "^1.0.0",
3650
+ "minimalistic-crypto-utils": "^1.0.0"
3651
+ }
3652
+ },
3653
+ "emoji-regex": {
3654
+ "version": "7.0.3",
3655
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
3656
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
3657
+ "dev": true
3658
+ },
3659
+ "emojis-list": {
3660
+ "version": "2.1.0",
3661
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
3662
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
3663
+ "dev": true
3664
+ },
3665
+ "encodeurl": {
3666
+ "version": "1.0.2",
3667
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
3668
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
3669
+ "dev": true
3670
+ },
3671
+ "end-of-stream": {
3672
+ "version": "1.4.1",
3673
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
3674
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
3675
+ "dev": true,
3676
+ "requires": {
3677
+ "once": "^1.4.0"
3678
+ }
3679
+ },
3680
+ "enhanced-resolve": {
3681
+ "version": "4.1.0",
3682
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
3683
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
3684
+ "dev": true,
3685
+ "requires": {
3686
+ "graceful-fs": "^4.1.2",
3687
+ "memory-fs": "^0.4.0",
3688
+ "tapable": "^1.0.0"
3689
+ }
3690
+ },
3691
+ "entities": {
3692
+ "version": "1.1.2",
3693
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
3694
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
3695
+ "dev": true
3696
+ },
3697
+ "enzyme": {
3698
+ "version": "3.10.0",
3699
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz",
3700
+ "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==",
3701
+ "dev": true,
3702
+ "requires": {
3703
+ "array.prototype.flat": "^1.2.1",
3704
+ "cheerio": "^1.0.0-rc.2",
3705
+ "function.prototype.name": "^1.1.0",
3706
+ "has": "^1.0.3",
3707
+ "html-element-map": "^1.0.0",
3708
+ "is-boolean-object": "^1.0.0",
3709
+ "is-callable": "^1.1.4",
3710
+ "is-number-object": "^1.0.3",
3711
+ "is-regex": "^1.0.4",
3712
+ "is-string": "^1.0.4",
3713
+ "is-subset": "^0.1.1",
3714
+ "lodash.escape": "^4.0.1",
3715
+ "lodash.isequal": "^4.5.0",
3716
+ "object-inspect": "^1.6.0",
3717
+ "object-is": "^1.0.1",
3718
+ "object.assign": "^4.1.0",
3719
+ "object.entries": "^1.0.4",
3720
+ "object.values": "^1.0.4",
3721
+ "raf": "^3.4.0",
3722
+ "rst-selector-parser": "^2.2.3",
3723
+ "string.prototype.trim": "^1.1.2"
3724
+ }
3725
+ },
3726
+ "enzyme-adapter-react-16": {
3727
+ "version": "1.14.0",
3728
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz",
3729
+ "integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==",
3730
+ "dev": true,
3731
+ "requires": {
3732
+ "enzyme-adapter-utils": "^1.12.0",
3733
+ "has": "^1.0.3",
3734
+ "object.assign": "^4.1.0",
3735
+ "object.values": "^1.1.0",
3736
+ "prop-types": "^15.7.2",
3737
+ "react-is": "^16.8.6",
3738
+ "react-test-renderer": "^16.0.0-0",
3739
+ "semver": "^5.7.0"
3740
+ }
3741
+ },
3742
+ "enzyme-adapter-utils": {
3743
+ "version": "1.12.0",
3744
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz",
3745
+ "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==",
3746
+ "dev": true,
3747
+ "requires": {
3748
+ "airbnb-prop-types": "^2.13.2",
3749
+ "function.prototype.name": "^1.1.0",
3750
+ "object.assign": "^4.1.0",
3751
+ "object.fromentries": "^2.0.0",
3752
+ "prop-types": "^15.7.2",
3753
+ "semver": "^5.6.0"
3754
+ }
3755
+ },
3756
+ "enzyme-to-json": {
3757
+ "version": "3.3.5",
3758
+ "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz",
3759
+ "integrity": "sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA==",
3760
+ "dev": true,
3761
+ "requires": {
3762
+ "lodash": "^4.17.4"
3763
+ }
3764
+ },
3765
+ "errno": {
3766
+ "version": "0.1.7",
3767
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
3768
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
3769
+ "dev": true,
3770
+ "requires": {
3771
+ "prr": "~1.0.1"
3772
+ }
3773
+ },
3774
+ "error": {
3775
+ "version": "7.0.2",
3776
+ "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz",
3777
+ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=",
3778
+ "dev": true,
3779
+ "requires": {
3780
+ "string-template": "~0.2.1",
3781
+ "xtend": "~4.0.0"
3782
+ }
3783
+ },
3784
+ "error-ex": {
3785
+ "version": "1.3.2",
3786
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
3787
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
3788
+ "dev": true,
3789
+ "requires": {
3790
+ "is-arrayish": "^0.2.1"
3791
+ }
3792
+ },
3793
+ "es-abstract": {
3794
+ "version": "1.13.0",
3795
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
3796
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
3797
+ "dev": true,
3798
+ "requires": {
3799
+ "es-to-primitive": "^1.2.0",
3800
+ "function-bind": "^1.1.1",
3801
+ "has": "^1.0.3",
3802
+ "is-callable": "^1.1.4",
3803
+ "is-regex": "^1.0.4",
3804
+ "object-keys": "^1.0.12"
3805
+ }
3806
+ },
3807
+ "es-to-primitive": {
3808
+ "version": "1.2.0",
3809
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
3810
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
3811
+ "dev": true,
3812
+ "requires": {
3813
+ "is-callable": "^1.1.4",
3814
+ "is-date-object": "^1.0.1",
3815
+ "is-symbol": "^1.0.2"
3816
+ }
3817
+ },
3818
+ "es6-promise": {
3819
+ "version": "4.2.8",
3820
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
3821
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
3822
+ "dev": true
3823
+ },
3824
+ "es6-promisify": {
3825
+ "version": "5.0.0",
3826
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
3827
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
3828
+ "dev": true,
3829
+ "requires": {
3830
+ "es6-promise": "^4.0.3"
3831
+ }
3832
+ },
3833
+ "escape-html": {
3834
+ "version": "1.0.3",
3835
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
3836
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
3837
+ "dev": true
3838
+ },
3839
+ "escape-string-regexp": {
3840
+ "version": "1.0.5",
3841
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3842
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
3843
+ "dev": true
3844
+ },
3845
+ "escodegen": {
3846
+ "version": "1.11.1",
3847
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
3848
+ "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
3849
+ "dev": true,
3850
+ "requires": {
3851
+ "esprima": "^3.1.3",
3852
+ "estraverse": "^4.2.0",
3853
+ "esutils": "^2.0.2",
3854
+ "optionator": "^0.8.1",
3855
+ "source-map": "~0.6.1"
3856
+ },
3857
+ "dependencies": {
3858
+ "esprima": {
3859
+ "version": "3.1.3",
3860
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
3861
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
3862
+ "dev": true
3863
+ },
3864
+ "source-map": {
3865
+ "version": "0.6.1",
3866
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3867
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3868
+ "dev": true,
3869
+ "optional": true
3870
+ }
3871
+ }
3872
+ },
3873
+ "eslint": {
3874
+ "version": "5.16.0",
3875
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
3876
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
3877
+ "dev": true,
3878
+ "requires": {
3879
+ "@babel/code-frame": "^7.0.0",
3880
+ "ajv": "^6.9.1",
3881
+ "chalk": "^2.1.0",
3882
+ "cross-spawn": "^6.0.5",
3883
+ "debug": "^4.0.1",
3884
+ "doctrine": "^3.0.0",
3885
+ "eslint-scope": "^4.0.3",
3886
+ "eslint-utils": "^1.3.1",
3887
+ "eslint-visitor-keys": "^1.0.0",
3888
+ "espree": "^5.0.1",
3889
+ "esquery": "^1.0.1",
3890
+ "esutils": "^2.0.2",
3891
+ "file-entry-cache": "^5.0.1",
3892
+ "functional-red-black-tree": "^1.0.1",
3893
+ "glob": "^7.1.2",
3894
+ "globals": "^11.7.0",
3895
+ "ignore": "^4.0.6",
3896
+ "import-fresh": "^3.0.0",
3897
+ "imurmurhash": "^0.1.4",
3898
+ "inquirer": "^6.2.2",
3899
+ "js-yaml": "^3.13.0",
3900
+ "json-stable-stringify-without-jsonify": "^1.0.1",
3901
+ "levn": "^0.3.0",
3902
+ "lodash": "^4.17.11",
3903
+ "minimatch": "^3.0.4",
3904
+ "mkdirp": "^0.5.1",
3905
+ "natural-compare": "^1.4.0",
3906
+ "optionator": "^0.8.2",
3907
+ "path-is-inside": "^1.0.2",
3908
+ "progress": "^2.0.0",
3909
+ "regexpp": "^2.0.1",
3910
+ "semver": "^5.5.1",
3911
+ "strip-ansi": "^4.0.0",
3912
+ "strip-json-comments": "^2.0.1",
3913
+ "table": "^5.2.3",
3914
+ "text-table": "^0.2.0"
3915
+ },
3916
+ "dependencies": {
3917
+ "cross-spawn": {
3918
+ "version": "6.0.5",
3919
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
3920
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
3921
+ "dev": true,
3922
+ "requires": {
3923
+ "nice-try": "^1.0.4",
3924
+ "path-key": "^2.0.1",
3925
+ "semver": "^5.5.0",
3926
+ "shebang-command": "^1.2.0",
3927
+ "which": "^1.2.9"
3928
+ }
3929
+ },
3930
+ "doctrine": {
3931
+ "version": "3.0.0",
3932
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
3933
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
3934
+ "dev": true,
3935
+ "requires": {
3936
+ "esutils": "^2.0.2"
3937
+ }
3938
+ },
3939
+ "eslint-scope": {
3940
+ "version": "4.0.3",
3941
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
3942
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
3943
+ "dev": true,
3944
+ "requires": {
3945
+ "esrecurse": "^4.1.0",
3946
+ "estraverse": "^4.1.1"
3947
+ }
3948
+ }
3949
+ }
3950
+ },
3951
+ "eslint-plugin-jsx-a11y": {
3952
+ "version": "6.2.1",
3953
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz",
3954
+ "integrity": "sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w==",
3955
+ "dev": true,
3956
+ "requires": {
3957
+ "aria-query": "^3.0.0",
3958
+ "array-includes": "^3.0.3",
3959
+ "ast-types-flow": "^0.0.7",
3960
+ "axobject-query": "^2.0.2",
3961
+ "damerau-levenshtein": "^1.0.4",
3962
+ "emoji-regex": "^7.0.2",
3963
+ "has": "^1.0.3",
3964
+ "jsx-ast-utils": "^2.0.1"
3965
+ }
3966
+ },
3967
+ "eslint-plugin-react": {
3968
+ "version": "7.13.0",
3969
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz",
3970
+ "integrity": "sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ==",
3971
+ "dev": true,
3972
+ "requires": {
3973
+ "array-includes": "^3.0.3",
3974
+ "doctrine": "^2.1.0",
3975
+ "has": "^1.0.3",
3976
+ "jsx-ast-utils": "^2.1.0",
3977
+ "object.fromentries": "^2.0.0",
3978
+ "prop-types": "^15.7.2",
3979
+ "resolve": "^1.10.1"
3980
+ }
3981
+ },
3982
+ "eslint-plugin-react-hooks": {
3983
+ "version": "1.6.0",
3984
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.6.0.tgz",
3985
+ "integrity": "sha512-lHBVRIaz5ibnIgNG07JNiAuBUeKhEf8l4etNx5vfAEwqQ5tcuK3jV9yjmopPgQDagQb7HwIuQVsE3IVcGrRnag==",
3986
+ "dev": true
3987
+ },
3988
+ "eslint-scope": {
3989
+ "version": "3.7.3",
3990
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
3991
+ "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
3992
+ "dev": true,
3993
+ "requires": {
3994
+ "esrecurse": "^4.1.0",
3995
+ "estraverse": "^4.1.1"
3996
+ }
3997
+ },
3998
+ "eslint-utils": {
3999
+ "version": "1.3.1",
4000
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
4001
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
4002
+ "dev": true
4003
+ },
4004
+ "eslint-visitor-keys": {
4005
+ "version": "1.0.0",
4006
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
4007
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
4008
+ "dev": true
4009
+ },
4010
+ "espree": {
4011
+ "version": "5.0.1",
4012
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
4013
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
4014
+ "dev": true,
4015
+ "requires": {
4016
+ "acorn": "^6.0.7",
4017
+ "acorn-jsx": "^5.0.0",
4018
+ "eslint-visitor-keys": "^1.0.0"
4019
+ },
4020
+ "dependencies": {
4021
+ "acorn": {
4022
+ "version": "6.1.1",
4023
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
4024
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
4025
+ "dev": true
4026
+ }
4027
+ }
4028
+ },
4029
+ "esprima": {
4030
+ "version": "4.0.1",
4031
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
4032
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
4033
+ "dev": true
4034
+ },
4035
+ "esquery": {
4036
+ "version": "1.0.1",
4037
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
4038
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
4039
+ "dev": true,
4040
+ "requires": {
4041
+ "estraverse": "^4.0.0"
4042
+ }
4043
+ },
4044
+ "esrecurse": {
4045
+ "version": "4.2.1",
4046
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
4047
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
4048
+ "dev": true,
4049
+ "requires": {
4050
+ "estraverse": "^4.1.0"
4051
+ }
4052
+ },
4053
+ "estraverse": {
4054
+ "version": "4.2.0",
4055
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
4056
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
4057
+ "dev": true
4058
+ },
4059
+ "esutils": {
4060
+ "version": "2.0.2",
4061
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
4062
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
4063
+ "dev": true
4064
+ },
4065
+ "etag": {
4066
+ "version": "1.8.1",
4067
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
4068
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
4069
+ "dev": true
4070
+ },
4071
+ "events": {
4072
+ "version": "3.0.0",
4073
+ "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
4074
+ "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
4075
+ "dev": true
4076
+ },
4077
+ "evp_bytestokey": {
4078
+ "version": "1.0.3",
4079
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
4080
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
4081
+ "dev": true,
4082
+ "requires": {
4083
+ "md5.js": "^1.3.4",
4084
+ "safe-buffer": "^5.1.1"
4085
+ }
4086
+ },
4087
+ "exec-sh": {
4088
+ "version": "0.3.2",
4089
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
4090
+ "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==",
4091
+ "dev": true
4092
+ },
4093
+ "execa": {
4094
+ "version": "1.0.0",
4095
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
4096
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
4097
+ "dev": true,
4098
+ "requires": {
4099
+ "cross-spawn": "^6.0.0",
4100
+ "get-stream": "^4.0.0",
4101
+ "is-stream": "^1.1.0",
4102
+ "npm-run-path": "^2.0.0",
4103
+ "p-finally": "^1.0.0",
4104
+ "signal-exit": "^3.0.0",
4105
+ "strip-eof": "^1.0.0"
4106
+ },
4107
+ "dependencies": {
4108
+ "cross-spawn": {
4109
+ "version": "6.0.5",
4110
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
4111
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
4112
+ "dev": true,
4113
+ "requires": {
4114
+ "nice-try": "^1.0.4",
4115
+ "path-key": "^2.0.1",
4116
+ "semver": "^5.5.0",
4117
+ "shebang-command": "^1.2.0",
4118
+ "which": "^1.2.9"
4119
+ }
4120
+ }
4121
+ }
4122
+ },
4123
+ "execall": {
4124
+ "version": "1.0.0",
4125
+ "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz",
4126
+ "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=",
4127
+ "dev": true,
4128
+ "requires": {
4129
+ "clone-regexp": "^1.0.0"
4130
+ }
4131
+ },
4132
+ "exit": {
4133
+ "version": "0.1.2",
4134
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
4135
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
4136
+ "dev": true
4137
+ },
4138
+ "expand-brackets": {
4139
+ "version": "2.1.4",
4140
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
4141
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
4142
+ "dev": true,
4143
+ "requires": {
4144
+ "debug": "^2.3.3",
4145
+ "define-property": "^0.2.5",
4146
+ "extend-shallow": "^2.0.1",
4147
+ "posix-character-classes": "^0.1.0",
4148
+ "regex-not": "^1.0.0",
4149
+ "snapdragon": "^0.8.1",
4150
+ "to-regex": "^3.0.1"
4151
+ },
4152
+ "dependencies": {
4153
+ "debug": {
4154
+ "version": "2.6.9",
4155
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
4156
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
4157
+ "dev": true,
4158
+ "requires": {
4159
+ "ms": "2.0.0"
4160
+ }
4161
+ },
4162
+ "define-property": {
4163
+ "version": "0.2.5",
4164
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
4165
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
4166
+ "dev": true,
4167
+ "requires": {
4168
+ "is-descriptor": "^0.1.0"
4169
+ }
4170
+ },
4171
+ "extend-shallow": {
4172
+ "version": "2.0.1",
4173
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
4174
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
4175
+ "dev": true,
4176
+ "requires": {
4177
+ "is-extendable": "^0.1.0"
4178
+ }
4179
+ },
4180
+ "ms": {
4181
+ "version": "2.0.0",
4182
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4183
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
4184
+ "dev": true
4185
+ }
4186
+ }
4187
+ },
4188
+ "expand-tilde": {
4189
+ "version": "1.2.2",
4190
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
4191
+ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
4192
+ "dev": true,
4193
+ "requires": {
4194
+ "os-homedir": "^1.0.1"
4195
+ }
4196
+ },
4197
+ "expect": {
4198
+ "version": "24.8.0",
4199
+ "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz",
4200
+ "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==",
4201
+ "dev": true,
4202
+ "requires": {
4203
+ "@jest/types": "^24.8.0",
4204
+ "ansi-styles": "^3.2.0",
4205
+ "jest-get-type": "^24.8.0",
4206
+ "jest-matcher-utils": "^24.8.0",
4207
+ "jest-message-util": "^24.8.0",
4208
+ "jest-regex-util": "^24.3.0"
4209
+ }
4210
+ },
4211
+ "expect-puppeteer": {
4212
+ "version": "4.1.1",
4213
+ "resolved": "https://registry.npmjs.org/expect-puppeteer/-/expect-puppeteer-4.1.1.tgz",
4214
+ "integrity": "sha512-xNpu6uYJL9Qrrp4Z31MOpDWK68zAi+2qg5aMQlyOTVZNy7cAgBZiPvKCN0C1JmP3jgPZfcxhetVjZLaw/KcJOQ==",
4215
+ "dev": true
4216
+ },
4217
+ "express": {
4218
+ "version": "4.17.1",
4219
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
4220
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
4221
+ "dev": true,
4222
+ "requires": {
4223
+ "accepts": "~1.3.7",
4224
+ "array-flatten": "1.1.1",
4225
+ "body-parser": "1.19.0",
4226
+ "content-disposition": "0.5.3",
4227
+ "content-type": "~1.0.4",
4228
+ "cookie": "0.4.0",
4229
+ "cookie-signature": "1.0.6",
4230
+ "debug": "2.6.9",
4231
+ "depd": "~1.1.2",
4232
+ "encodeurl": "~1.0.2",
4233
+ "escape-html": "~1.0.3",
4234
+ "etag": "~1.8.1",
4235
+ "finalhandler": "~1.1.2",
4236
+ "fresh": "0.5.2",
4237
+ "merge-descriptors": "1.0.1",
4238
+ "methods": "~1.1.2",
4239
+ "on-finished": "~2.3.0",
4240
+ "parseurl": "~1.3.3",
4241
+ "path-to-regexp": "0.1.7",
4242
+ "proxy-addr": "~2.0.5",
4243
+ "qs": "6.7.0",
4244
+ "range-parser": "~1.2.1",
4245
+ "safe-buffer": "5.1.2",
4246
+ "send": "0.17.1",
4247
+ "serve-static": "1.14.1",
4248
+ "setprototypeof": "1.1.1",
4249
+ "statuses": "~1.5.0",
4250
+ "type-is": "~1.6.18",
4251
+ "utils-merge": "1.0.1",
4252
+ "vary": "~1.1.2"
4253
+ },
4254
+ "dependencies": {
4255
+ "debug": {
4256
+ "version": "2.6.9",
4257
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
4258
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
4259
+ "dev": true,
4260
+ "requires": {
4261
+ "ms": "2.0.0"
4262
+ }
4263
+ },
4264
+ "ms": {
4265
+ "version": "2.0.0",
4266
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4267
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
4268
+ "dev": true
4269
+ },
4270
+ "qs": {
4271
+ "version": "6.7.0",
4272
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
4273
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
4274
+ "dev": true
4275
+ }
4276
+ }
4277
+ },
4278
+ "extend": {
4279
+ "version": "3.0.2",
4280
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
4281
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
4282
+ "dev": true
4283
+ },
4284
+ "extend-shallow": {
4285
+ "version": "3.0.2",
4286
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
4287
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
4288
+ "dev": true,
4289
+ "requires": {
4290
+ "assign-symbols": "^1.0.0",
4291
+ "is-extendable": "^1.0.1"
4292
+ },
4293
+ "dependencies": {
4294
+ "is-extendable": {
4295
+ "version": "1.0.1",
4296
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
4297
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
4298
+ "dev": true,
4299
+ "requires": {
4300
+ "is-plain-object": "^2.0.4"
4301
+ }
4302
+ }
4303
+ }
4304
+ },
4305
+ "external-editor": {
4306
+ "version": "3.0.3",
4307
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
4308
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
4309
+ "dev": true,
4310
+ "requires": {
4311
+ "chardet": "^0.7.0",
4312
+ "iconv-lite": "^0.4.24",
4313
+ "tmp": "^0.0.33"
4314
+ }
4315
+ },
4316
+ "extglob": {
4317
+ "version": "2.0.4",
4318
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
4319
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
4320
+ "dev": true,
4321
+ "requires": {
4322
+ "array-unique": "^0.3.2",
4323
+ "define-property": "^1.0.0",
4324
+ "expand-brackets": "^2.1.4",
4325
+ "extend-shallow": "^2.0.1",
4326
+ "fragment-cache": "^0.2.1",
4327
+ "regex-not": "^1.0.0",
4328
+ "snapdragon": "^0.8.1",
4329
+ "to-regex": "^3.0.1"
4330
+ },
4331
+ "dependencies": {
4332
+ "define-property": {
4333
+ "version": "1.0.0",
4334
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
4335
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
4336
+ "dev": true,
4337
+ "requires": {
4338
+ "is-descriptor": "^1.0.0"
4339
+ }
4340
+ },
4341
+ "extend-shallow": {
4342
+ "version": "2.0.1",
4343
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
4344
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
4345
+ "dev": true,
4346
+ "requires": {
4347
+ "is-extendable": "^0.1.0"
4348
+ }
4349
+ },
4350
+ "is-accessor-descriptor": {
4351
+ "version": "1.0.0",
4352
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
4353
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
4354
+ "dev": true,
4355
+ "requires": {
4356
+ "kind-of": "^6.0.0"
4357
+ }
4358
+ },
4359
+ "is-data-descriptor": {
4360
+ "version": "1.0.0",
4361
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
4362
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
4363
+ "dev": true,
4364
+ "requires": {
4365
+ "kind-of": "^6.0.0"
4366
+ }
4367
+ },
4368
+ "is-descriptor": {
4369
+ "version": "1.0.2",
4370
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
4371
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
4372
+ "dev": true,
4373
+ "requires": {
4374
+ "is-accessor-descriptor": "^1.0.0",
4375
+ "is-data-descriptor": "^1.0.0",
4376
+ "kind-of": "^6.0.2"
4377
+ }
4378
+ }
4379
+ }
4380
+ },
4381
+ "extract-zip": {
4382
+ "version": "1.6.7",
4383
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
4384
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
4385
+ "dev": true,
4386
+ "requires": {
4387
+ "concat-stream": "1.6.2",
4388
+ "debug": "2.6.9",
4389
+ "mkdirp": "0.5.1",
4390
+ "yauzl": "2.4.1"
4391
+ },
4392
+ "dependencies": {
4393
+ "debug": {
4394
+ "version": "2.6.9",
4395
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
4396
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
4397
+ "dev": true,
4398
+ "requires": {
4399
+ "ms": "2.0.0"
4400
+ }
4401
+ },
4402
+ "ms": {
4403
+ "version": "2.0.0",
4404
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4405
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
4406
+ "dev": true
4407
+ }
4408
+ }
4409
+ },
4410
+ "extsprintf": {
4411
+ "version": "1.3.0",
4412
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
4413
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
4414
+ "dev": true
4415
+ },
4416
+ "fast-deep-equal": {
4417
+ "version": "2.0.1",
4418
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
4419
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
4420
+ "dev": true
4421
+ },
4422
+ "fast-glob": {
4423
+ "version": "2.2.7",
4424
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
4425
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
4426
+ "dev": true,
4427
+ "requires": {
4428
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
4429
+ "@nodelib/fs.stat": "^1.1.2",
4430
+ "glob-parent": "^3.1.0",
4431
+ "is-glob": "^4.0.0",
4432
+ "merge2": "^1.2.3",
4433
+ "micromatch": "^3.1.10"
4434
+ }
4435
+ },
4436
+ "fast-json-stable-stringify": {
4437
+ "version": "2.0.0",
4438
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
4439
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
4440
+ "dev": true
4441
+ },
4442
+ "fast-levenshtein": {
4443
+ "version": "2.0.6",
4444
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
4445
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
4446
+ "dev": true
4447
+ },
4448
+ "faye-websocket": {
4449
+ "version": "0.10.0",
4450
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
4451
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
4452
+ "dev": true,
4453
+ "requires": {
4454
+ "websocket-driver": ">=0.5.1"
4455
+ }
4456
+ },
4457
+ "fb-watchman": {
4458
+ "version": "2.0.0",
4459
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
4460
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
4461
+ "dev": true,
4462
+ "requires": {
4463
+ "bser": "^2.0.0"
4464
+ }
4465
+ },
4466
+ "fd-slicer": {
4467
+ "version": "1.0.1",
4468
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
4469
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
4470
+ "dev": true,
4471
+ "requires": {
4472
+ "pend": "~1.2.0"
4473
+ }
4474
+ },
4475
+ "figures": {
4476
+ "version": "2.0.0",
4477
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
4478
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
4479
+ "dev": true,
4480
+ "requires": {
4481
+ "escape-string-regexp": "^1.0.5"
4482
+ }
4483
+ },
4484
+ "file-entry-cache": {
4485
+ "version": "5.0.1",
4486
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
4487
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
4488
+ "dev": true,
4489
+ "requires": {
4490
+ "flat-cache": "^2.0.1"
4491
+ }
4492
+ },
4493
+ "filesize": {
4494
+ "version": "3.6.1",
4495
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
4496
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
4497
+ "dev": true
4498
+ },
4499
+ "fill-range": {
4500
+ "version": "4.0.0",
4501
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
4502
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
4503
+ "dev": true,
4504
+ "requires": {
4505
+ "extend-shallow": "^2.0.1",
4506
+ "is-number": "^3.0.0",
4507
+ "repeat-string": "^1.6.1",
4508
+ "to-regex-range": "^2.1.0"
4509
+ },
4510
+ "dependencies": {
4511
+ "extend-shallow": {
4512
+ "version": "2.0.1",
4513
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
4514
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
4515
+ "dev": true,
4516
+ "requires": {
4517
+ "is-extendable": "^0.1.0"
4518
+ }
4519
+ }
4520
+ }
4521
+ },
4522
+ "finalhandler": {
4523
+ "version": "1.1.2",
4524
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
4525
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
4526
+ "dev": true,
4527
+ "requires": {
4528
+ "debug": "2.6.9",
4529
+ "encodeurl": "~1.0.2",
4530
+ "escape-html": "~1.0.3",
4531
+ "on-finished": "~2.3.0",
4532
+ "parseurl": "~1.3.3",
4533
+ "statuses": "~1.5.0",
4534
+ "unpipe": "~1.0.0"
4535
+ },
4536
+ "dependencies": {
4537
+ "debug": {
4538
+ "version": "2.6.9",
4539
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
4540
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
4541
+ "dev": true,
4542
+ "requires": {
4543
+ "ms": "2.0.0"
4544
+ }
4545
+ },
4546
+ "ms": {
4547
+ "version": "2.0.0",
4548
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4549
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
4550
+ "dev": true
4551
+ }
4552
+ }
4553
+ },
4554
+ "find-cache-dir": {
4555
+ "version": "1.0.0",
4556
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
4557
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
4558
+ "dev": true,
4559
+ "requires": {
4560
+ "commondir": "^1.0.1",
4561
+ "make-dir": "^1.0.0",
4562
+ "pkg-dir": "^2.0.0"
4563
+ }
4564
+ },
4565
+ "find-file-up": {
4566
+ "version": "0.1.3",
4567
+ "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz",
4568
+ "integrity": "sha1-z2gJG8+fMApA2kEbN9pczlovvqA=",
4569
+ "dev": true,
4570
+ "requires": {
4571
+ "fs-exists-sync": "^0.1.0",
4572
+ "resolve-dir": "^0.1.0"
4573
+ }
4574
+ },
4575
+ "find-parent-dir": {
4576
+ "version": "0.3.0",
4577
+ "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
4578
+ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
4579
+ "dev": true
4580
+ },
4581
+ "find-pkg": {
4582
+ "version": "0.1.2",
4583
+ "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz",
4584
+ "integrity": "sha1-G9wiwG42NlUy4qJIBGhUuXiNpVc=",
4585
+ "dev": true,
4586
+ "requires": {
4587
+ "find-file-up": "^0.1.2"
4588
+ }
4589
+ },
4590
+ "find-process": {
4591
+ "version": "1.4.2",
4592
+ "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.2.tgz",
4593
+ "integrity": "sha512-O83EVJr4dWvHJ7QpUzANNAMeQVKukRzRqRx4AIzdLYRrQorRdbqDwLPigkd9PYPhJRhmNPAoVjOm9bcwSmcZaw==",
4594
+ "dev": true,
4595
+ "requires": {
4596
+ "chalk": "^2.0.1",
4597
+ "commander": "^2.11.0",
4598
+ "debug": "^2.6.8"
4599
+ },
4600
+ "dependencies": {
4601
+ "debug": {
4602
+ "version": "2.6.9",
4603
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
4604
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
4605
+ "dev": true,
4606
+ "requires": {
4607
+ "ms": "2.0.0"
4608
+ }
4609
+ },
4610
+ "ms": {
4611
+ "version": "2.0.0",
4612
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
4613
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
4614
+ "dev": true
4615
+ }
4616
+ }
4617
+ },
4618
+ "find-up": {
4619
+ "version": "2.1.0",
4620
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
4621
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
4622
+ "dev": true,
4623
+ "requires": {
4624
+ "locate-path": "^2.0.0"
4625
+ }
4626
+ },
4627
+ "findup-sync": {
4628
+ "version": "3.0.0",
4629
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
4630
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
4631
+ "dev": true,
4632
+ "requires": {
4633
+ "detect-file": "^1.0.0",
4634
+ "is-glob": "^4.0.0",
4635
+ "micromatch": "^3.0.4",
4636
+ "resolve-dir": "^1.0.1"
4637
+ },
4638
+ "dependencies": {
4639
+ "expand-tilde": {
4640
+ "version": "2.0.2",
4641
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
4642
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
4643
+ "dev": true,
4644
+ "requires": {
4645
+ "homedir-polyfill": "^1.0.1"
4646
+ }
4647
+ },
4648
+ "global-modules": {
4649
+ "version": "1.0.0",
4650
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
4651
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
4652
+ "dev": true,
4653
+ "requires": {
4654
+ "global-prefix": "^1.0.1",
4655
+ "is-windows": "^1.0.1",
4656
+ "resolve-dir": "^1.0.0"
4657
+ }
4658
+ },
4659
+ "global-prefix": {
4660
+ "version": "1.0.2",
4661
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
4662
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
4663
+ "dev": true,
4664
+ "requires": {
4665
+ "expand-tilde": "^2.0.2",
4666
+ "homedir-polyfill": "^1.0.1",
4667
+ "ini": "^1.3.4",
4668
+ "is-windows": "^1.0.1",
4669
+ "which": "^1.2.14"
4670
+ }
4671
+ },
4672
+ "resolve-dir": {
4673
+ "version": "1.0.1",
4674
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
4675
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
4676
+ "dev": true,
4677
+ "requires": {
4678
+ "expand-tilde": "^2.0.0",
4679
+ "global-modules": "^1.0.0"
4680
+ }
4681
+ }
4682
+ }
4683
+ },
4684
+ "flat-cache": {
4685
+ "version": "2.0.1",
4686
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
4687
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
4688
+ "dev": true,
4689
+ "requires": {
4690
+ "flatted": "^2.0.0",
4691
+ "rimraf": "2.6.3",
4692
+ "write": "1.0.3"
4693
+ }
4694
+ },
4695
+ "flatted": {
4696
+ "version": "2.0.0",
4697
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
4698
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
4699
+ "dev": true
4700
+ },
4701
+ "flush-write-stream": {
4702
+ "version": "1.1.1",
4703
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
4704
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
4705
+ "dev": true,
4706
+ "requires": {
4707
+ "inherits": "^2.0.3",
4708
+ "readable-stream": "^2.3.6"
4709
+ }
4710
+ },
4711
+ "for-in": {
4712
+ "version": "1.0.2",
4713
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
4714
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
4715
+ "dev": true
4716
+ },
4717
+ "for-own": {
4718
+ "version": "0.1.5",
4719
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
4720
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
4721
+ "dev": true,
4722
+ "requires": {
4723
+ "for-in": "^1.0.1"
4724
+ }
4725
+ },
4726
+ "forever-agent": {
4727
+ "version": "0.6.1",
4728
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
4729
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
4730
+ "dev": true
4731
+ },
4732
+ "form-data": {
4733
+ "version": "2.3.3",
4734
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
4735
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
4736
+ "dev": true,
4737
+ "requires": {
4738
+ "asynckit": "^0.4.0",
4739
+ "combined-stream": "^1.0.6",
4740
+ "mime-types": "^2.1.12"
4741
+ }
4742
+ },
4743
+ "forwarded": {
4744
+ "version": "0.1.2",
4745
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
4746
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
4747
+ "dev": true
4748
+ },
4749
+ "fragment-cache": {
4750
+ "version": "0.2.1",
4751
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
4752
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
4753
+ "dev": true,
4754
+ "requires": {
4755
+ "map-cache": "^0.2.2"
4756
+ }
4757
+ },
4758
+ "fresh": {
4759
+ "version": "0.5.2",
4760
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
4761
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
4762
+ "dev": true
4763
+ },
4764
+ "from2": {
4765
+ "version": "2.3.0",
4766
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
4767
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
4768
+ "dev": true,
4769
+ "requires": {
4770
+ "inherits": "^2.0.1",
4771
+ "readable-stream": "^2.0.0"
4772
+ }
4773
+ },
4774
+ "fs-exists-sync": {
4775
+ "version": "0.1.0",
4776
+ "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
4777
+ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
4778
+ "dev": true
4779
+ },
4780
+ "fs-write-stream-atomic": {
4781
+ "version": "1.0.10",
4782
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
4783
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
4784
+ "dev": true,
4785
+ "requires": {
4786
+ "graceful-fs": "^4.1.2",
4787
+ "iferr": "^0.1.5",
4788
+ "imurmurhash": "^0.1.4",
4789
+ "readable-stream": "1 || 2"
4790
+ }
4791
+ },
4792
+ "fs.realpath": {
4793
+ "version": "1.0.0",
4794
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4795
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
4796
+ "dev": true
4797
+ },
4798
+ "fsevents": {
4799
+ "version": "1.2.9",
4800
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
4801
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
4802
+ "dev": true,
4803
+ "optional": true,
4804
+ "requires": {
4805
+ "nan": "^2.12.1",
4806
+ "node-pre-gyp": "^0.12.0"
4807
+ },
4808
+ "dependencies": {
4809
+ "abbrev": {
4810
+ "version": "1.1.1",
4811
+ "bundled": true,
4812
+ "dev": true,
4813
+ "optional": true
4814
+ },
4815
+ "ansi-regex": {
4816
+ "version": "2.1.1",
4817
+ "bundled": true,
4818
+ "dev": true,
4819
+ "optional": true
4820
+ },
4821
+ "aproba": {
4822
+ "version": "1.2.0",
4823
+ "bundled": true,
4824
+ "dev": true,
4825
+ "optional": true
4826
+ },
4827
+ "are-we-there-yet": {
4828
+ "version": "1.1.5",
4829
+ "bundled": true,
4830
+ "dev": true,
4831
+ "optional": true,
4832
+ "requires": {
4833
+ "delegates": "^1.0.0",
4834
+ "readable-stream": "^2.0.6"
4835
+ }
4836
+ },
4837
+ "balanced-match": {
4838
+ "version": "1.0.0",
4839
+ "bundled": true,
4840
+ "dev": true,
4841
+ "optional": true
4842
+ },
4843
+ "brace-expansion": {
4844
+ "version": "1.1.11",
4845
+ "bundled": true,
4846
+ "dev": true,
4847
+ "optional": true,
4848
+ "requires": {
4849
+ "balanced-match": "^1.0.0",
4850
+ "concat-map": "0.0.1"
4851
+ }
4852
+ },
4853
+ "chownr": {
4854
+ "version": "1.1.1",
4855
+ "bundled": true,
4856
+ "dev": true,
4857
+ "optional": true
4858
+ },
4859
+ "code-point-at": {
4860
+ "version": "1.1.0",
4861
+ "bundled": true,
4862
+ "dev": true,
4863
+ "optional": true
4864
+ },
4865
+ "concat-map": {
4866
+ "version": "0.0.1",
4867
+ "bundled": true,
4868
+ "dev": true,
4869
+ "optional": true
4870
+ },
4871
+ "console-control-strings": {
4872
+ "version": "1.1.0",
4873
+ "bundled": true,
4874
+ "dev": true,
4875
+ "optional": true
4876
+ },
4877
+ "core-util-is": {
4878
+ "version": "1.0.2",
4879
+ "bundled": true,
4880
+ "dev": true,
4881
+ "optional": true
4882
+ },
4883
+ "debug": {
4884
+ "version": "4.1.1",
4885
+ "bundled": true,
4886
+ "dev": true,
4887
+ "optional": true,
4888
+ "requires": {
4889
+ "ms": "^2.1.1"
4890
+ }
4891
+ },
4892
+ "deep-extend": {
4893
+ "version": "0.6.0",
4894
+ "bundled": true,
4895
+ "dev": true,
4896
+ "optional": true
4897
+ },
4898
+ "delegates": {
4899
+ "version": "1.0.0",
4900
+ "bundled": true,
4901
+ "dev": true,
4902
+ "optional": true
4903
+ },
4904
+ "detect-libc": {
4905
+ "version": "1.0.3",
4906
+ "bundled": true,
4907
+ "dev": true,
4908
+ "optional": true
4909
+ },
4910
+ "fs-minipass": {
4911
+ "version": "1.2.5",
4912
+ "bundled": true,
4913
+ "dev": true,
4914
+ "optional": true,
4915
+ "requires": {
4916
+ "minipass": "^2.2.1"
4917
+ }
4918
+ },
4919
+ "fs.realpath": {
4920
+ "version": "1.0.0",
4921
+ "bundled": true,
4922
+ "dev": true,
4923
+ "optional": true
4924
+ },
4925
+ "gauge": {
4926
+ "version": "2.7.4",
4927
+ "bundled": true,
4928
+ "dev": true,
4929
+ "optional": true,
4930
+ "requires": {
4931
+ "aproba": "^1.0.3",
4932
+ "console-control-strings": "^1.0.0",
4933
+ "has-unicode": "^2.0.0",
4934
+ "object-assign": "^4.1.0",
4935
+ "signal-exit": "^3.0.0",
4936
+ "string-width": "^1.0.1",
4937
+ "strip-ansi": "^3.0.1",
4938
+ "wide-align": "^1.1.0"
4939
+ }
4940
+ },
4941
+ "glob": {
4942
+ "version": "7.1.3",
4943
+ "bundled": true,
4944
+ "dev": true,
4945
+ "optional": true,
4946
+ "requires": {
4947
+ "fs.realpath": "^1.0.0",
4948
+ "inflight": "^1.0.4",
4949
+ "inherits": "2",
4950
+ "minimatch": "^3.0.4",
4951
+ "once": "^1.3.0",
4952
+ "path-is-absolute": "^1.0.0"
4953
+ }
4954
+ },
4955
+ "has-unicode": {
4956
+ "version": "2.0.1",
4957
+ "bundled": true,
4958
+ "dev": true,
4959
+ "optional": true
4960
+ },
4961
+ "iconv-lite": {
4962
+ "version": "0.4.24",
4963
+ "bundled": true,
4964
+ "dev": true,
4965
+ "optional": true,
4966
+ "requires": {
4967
+ "safer-buffer": ">= 2.1.2 < 3"
4968
+ }
4969
+ },
4970
+ "ignore-walk": {
4971
+ "version": "3.0.1",
4972
+ "bundled": true,
4973
+ "dev": true,
4974
+ "optional": true,
4975
+ "requires": {
4976
+ "minimatch": "^3.0.4"
4977
+ }
4978
+ },
4979
+ "inflight": {
4980
+ "version": "1.0.6",
4981
+ "bundled": true,
4982
+ "dev": true,
4983
+ "optional": true,
4984
+ "requires": {
4985
+ "once": "^1.3.0",
4986
+ "wrappy": "1"
4987
+ }
4988
+ },
4989
+ "inherits": {
4990
+ "version": "2.0.3",
4991
+ "bundled": true,
4992
+ "dev": true,
4993
+ "optional": true
4994
+ },
4995
+ "ini": {
4996
+ "version": "1.3.5",
4997
+ "bundled": true,
4998
+ "dev": true,
4999
+ "optional": true
5000
+ },
5001
+ "is-fullwidth-code-point": {
5002
+ "version": "1.0.0",
5003
+ "bundled": true,
5004
+ "dev": true,
5005
+ "optional": true,
5006
+ "requires": {
5007
+ "number-is-nan": "^1.0.0"
5008
+ }
5009
+ },
5010
+ "isarray": {
5011
+ "version": "1.0.0",
5012
+ "bundled": true,
5013
+ "dev": true,
5014
+ "optional": true
5015
+ },
5016
+ "minimatch": {
5017
+ "version": "3.0.4",
5018
+ "bundled": true,
5019
+ "dev": true,
5020
+ "optional": true,
5021
+ "requires": {
5022
+ "brace-expansion": "^1.1.7"
5023
+ }
5024
+ },
5025
+ "minimist": {
5026
+ "version": "0.0.8",
5027
+ "bundled": true,
5028
+ "dev": true,
5029
+ "optional": true
5030
+ },
5031
+ "minipass": {
5032
+ "version": "2.3.5",
5033
+ "bundled": true,
5034
+ "dev": true,
5035
+ "optional": true,
5036
+ "requires": {
5037
+ "safe-buffer": "^5.1.2",
5038
+ "yallist": "^3.0.0"
5039
+ }
5040
+ },
5041
+ "minizlib": {
5042
+ "version": "1.2.1",
5043
+ "bundled": true,
5044
+ "dev": true,
5045
+ "optional": true,
5046
+ "requires": {
5047
+ "minipass": "^2.2.1"
5048
+ }
5049
+ },
5050
+ "mkdirp": {
5051
+ "version": "0.5.1",
5052
+ "bundled": true,
5053
+ "dev": true,
5054
+ "optional": true,
5055
+ "requires": {
5056
+ "minimist": "0.0.8"
5057
+ }
5058
+ },
5059
+ "ms": {
5060
+ "version": "2.1.1",
5061
+ "bundled": true,
5062
+ "dev": true,
5063
+ "optional": true
5064
+ },
5065
+ "needle": {
5066
+ "version": "2.3.0",
5067
+ "bundled": true,
5068
+ "dev": true,
5069
+ "optional": true,
5070
+ "requires": {
5071
+ "debug": "^4.1.0",
5072
+ "iconv-lite": "^0.4.4",
5073
+ "sax": "^1.2.4"
5074
+ }
5075
+ },
5076
+ "node-pre-gyp": {
5077
+ "version": "0.12.0",
5078
+ "bundled": true,
5079
+ "dev": true,
5080
+ "optional": true,
5081
+ "requires": {
5082
+ "detect-libc": "^1.0.2",
5083
+ "mkdirp": "^0.5.1",
5084
+ "needle": "^2.2.1",
5085
+ "nopt": "^4.0.1",
5086
+ "npm-packlist": "^1.1.6",
5087
+ "npmlog": "^4.0.2",
5088
+ "rc": "^1.2.7",
5089
+ "rimraf": "^2.6.1",
5090
+ "semver": "^5.3.0",
5091
+ "tar": "^4"
5092
+ }
5093
+ },
5094
+ "nopt": {
5095
+ "version": "4.0.1",
5096
+ "bundled": true,
5097
+ "dev": true,
5098
+ "optional": true,
5099
+ "requires": {
5100
+ "abbrev": "1",
5101
+ "osenv": "^0.1.4"
5102
+ }
5103
+ },
5104
+ "npm-bundled": {
5105
+ "version": "1.0.6",
5106
+ "bundled": true,
5107
+ "dev": true,
5108
+ "optional": true
5109
+ },
5110
+ "npm-packlist": {
5111
+ "version": "1.4.1",
5112
+ "bundled": true,
5113
+ "dev": true,
5114
+ "optional": true,
5115
+ "requires": {
5116
+ "ignore-walk": "^3.0.1",
5117
+ "npm-bundled": "^1.0.1"
5118
+ }
5119
+ },
5120
+ "npmlog": {
5121
+ "version": "4.1.2",
5122
+ "bundled": true,
5123
+ "dev": true,
5124
+ "optional": true,
5125
+ "requires": {
5126
+ "are-we-there-yet": "~1.1.2",
5127
+ "console-control-strings": "~1.1.0",
5128
+ "gauge": "~2.7.3",
5129
+ "set-blocking": "~2.0.0"
5130
+ }
5131
+ },
5132
+ "number-is-nan": {
5133
+ "version": "1.0.1",
5134
+ "bundled": true,
5135
+ "dev": true,
5136
+ "optional": true
5137
+ },
5138
+ "object-assign": {
5139
+ "version": "4.1.1",
5140
+ "bundled": true,
5141
+ "dev": true,
5142
+ "optional": true
5143
+ },
5144
+ "once": {
5145
+ "version": "1.4.0",
5146
+ "bundled": true,
5147
+ "dev": true,
5148
+ "optional": true,
5149
+ "requires": {
5150
+ "wrappy": "1"
5151
+ }
5152
+ },
5153
+ "os-homedir": {
5154
+ "version": "1.0.2",
5155
+ "bundled": true,
5156
+ "dev": true,
5157
+ "optional": true
5158
+ },
5159
+ "os-tmpdir": {
5160
+ "version": "1.0.2",
5161
+ "bundled": true,
5162
+ "dev": true,
5163
+ "optional": true
5164
+ },
5165
+ "osenv": {
5166
+ "version": "0.1.5",
5167
+ "bundled": true,
5168
+ "dev": true,
5169
+ "optional": true,
5170
+ "requires": {
5171
+ "os-homedir": "^1.0.0",
5172
+ "os-tmpdir": "^1.0.0"
5173
+ }
5174
+ },
5175
+ "path-is-absolute": {
5176
+ "version": "1.0.1",
5177
+ "bundled": true,
5178
+ "dev": true,
5179
+ "optional": true
5180
+ },
5181
+ "process-nextick-args": {
5182
+ "version": "2.0.0",
5183
+ "bundled": true,
5184
+ "dev": true,
5185
+ "optional": true
5186
+ },
5187
+ "rc": {
5188
+ "version": "1.2.8",
5189
+ "bundled": true,
5190
+ "dev": true,
5191
+ "optional": true,
5192
+ "requires": {
5193
+ "deep-extend": "^0.6.0",
5194
+ "ini": "~1.3.0",
5195
+ "minimist": "^1.2.0",
5196
+ "strip-json-comments": "~2.0.1"
5197
+ },
5198
+ "dependencies": {
5199
+ "minimist": {
5200
+ "version": "1.2.0",
5201
+ "bundled": true,
5202
+ "dev": true,
5203
+ "optional": true
5204
+ }
5205
+ }
5206
+ },
5207
+ "readable-stream": {
5208
+ "version": "2.3.6",
5209
+ "bundled": true,
5210
+ "dev": true,
5211
+ "optional": true,
5212
+ "requires": {
5213
+ "core-util-is": "~1.0.0",
5214
+ "inherits": "~2.0.3",
5215
+ "isarray": "~1.0.0",
5216
+ "process-nextick-args": "~2.0.0",
5217
+ "safe-buffer": "~5.1.1",
5218
+ "string_decoder": "~1.1.1",
5219
+ "util-deprecate": "~1.0.1"
5220
+ }
5221
+ },
5222
+ "rimraf": {
5223
+ "version": "2.6.3",
5224
+ "bundled": true,
5225
+ "dev": true,
5226
+ "optional": true,
5227
+ "requires": {
5228
+ "glob": "^7.1.3"
5229
+ }
5230
+ },
5231
+ "safe-buffer": {
5232
+ "version": "5.1.2",
5233
+ "bundled": true,
5234
+ "dev": true,
5235
+ "optional": true
5236
+ },
5237
+ "safer-buffer": {
5238
+ "version": "2.1.2",
5239
+ "bundled": true,
5240
+ "dev": true,
5241
+ "optional": true
5242
+ },
5243
+ "sax": {
5244
+ "version": "1.2.4",
5245
+ "bundled": true,
5246
+ "dev": true,
5247
+ "optional": true
5248
+ },
5249
+ "semver": {
5250
+ "version": "5.7.0",
5251
+ "bundled": true,
5252
+ "dev": true,
5253
+ "optional": true
5254
+ },
5255
+ "set-blocking": {
5256
+ "version": "2.0.0",
5257
+ "bundled": true,
5258
+ "dev": true,
5259
+ "optional": true
5260
+ },
5261
+ "signal-exit": {
5262
+ "version": "3.0.2",
5263
+ "bundled": true,
5264
+ "dev": true,
5265
+ "optional": true
5266
+ },
5267
+ "string-width": {
5268
+ "version": "1.0.2",
5269
+ "bundled": true,
5270
+ "dev": true,
5271
+ "optional": true,
5272
+ "requires": {
5273
+ "code-point-at": "^1.0.0",
5274
+ "is-fullwidth-code-point": "^1.0.0",
5275
+ "strip-ansi": "^3.0.0"
5276
+ }
5277
+ },
5278
+ "string_decoder": {
5279
+ "version": "1.1.1",
5280
+ "bundled": true,
5281
+ "dev": true,
5282
+ "optional": true,
5283
+ "requires": {
5284
+ "safe-buffer": "~5.1.0"
5285
+ }
5286
+ },
5287
+ "strip-ansi": {
5288
+ "version": "3.0.1",
5289
+ "bundled": true,
5290
+ "dev": true,
5291
+ "optional": true,
5292
+ "requires": {
5293
+ "ansi-regex": "^2.0.0"
5294
+ }
5295
+ },
5296
+ "strip-json-comments": {
5297
+ "version": "2.0.1",
5298
+ "bundled": true,
5299
+ "dev": true,
5300
+ "optional": true
5301
+ },
5302
+ "tar": {
5303
+ "version": "4.4.8",
5304
+ "bundled": true,
5305
+ "dev": true,
5306
+ "optional": true,
5307
+ "requires": {
5308
+ "chownr": "^1.1.1",
5309
+ "fs-minipass": "^1.2.5",
5310
+ "minipass": "^2.3.4",
5311
+ "minizlib": "^1.1.1",
5312
+ "mkdirp": "^0.5.0",
5313
+ "safe-buffer": "^5.1.2",
5314
+ "yallist": "^3.0.2"
5315
+ }
5316
+ },
5317
+ "util-deprecate": {
5318
+ "version": "1.0.2",
5319
+ "bundled": true,
5320
+ "dev": true,
5321
+ "optional": true
5322
+ },
5323
+ "wide-align": {
5324
+ "version": "1.1.3",
5325
+ "bundled": true,
5326
+ "dev": true,
5327
+ "optional": true,
5328
+ "requires": {
5329
+ "string-width": "^1.0.2 || 2"
5330
+ }
5331
+ },
5332
+ "wrappy": {
5333
+ "version": "1.0.2",
5334
+ "bundled": true,
5335
+ "dev": true,
5336
+ "optional": true
5337
+ },
5338
+ "yallist": {
5339
+ "version": "3.0.3",
5340
+ "bundled": true,
5341
+ "dev": true,
5342
+ "optional": true
5343
+ }
5344
+ }
5345
+ },
5346
+ "fstream": {
5347
+ "version": "1.0.12",
5348
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
5349
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
5350
+ "dev": true,
5351
+ "requires": {
5352
+ "graceful-fs": "^4.1.2",
5353
+ "inherits": "~2.0.0",
5354
+ "mkdirp": ">=0.5 0",
5355
+ "rimraf": "2"
5356
+ }
5357
+ },
5358
+ "function-bind": {
5359
+ "version": "1.1.1",
5360
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
5361
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
5362
+ "dev": true
5363
+ },
5364
+ "function.prototype.name": {
5365
+ "version": "1.1.0",
5366
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz",
5367
+ "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==",
5368
+ "dev": true,
5369
+ "requires": {
5370
+ "define-properties": "^1.1.2",
5371
+ "function-bind": "^1.1.1",
5372
+ "is-callable": "^1.1.3"
5373
+ }
5374
+ },
5375
+ "functional-red-black-tree": {
5376
+ "version": "1.0.1",
5377
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
5378
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
5379
+ "dev": true
5380
+ },
5381
+ "gauge": {
5382
+ "version": "2.7.4",
5383
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
5384
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
5385
+ "dev": true,
5386
+ "requires": {
5387
+ "aproba": "^1.0.3",
5388
+ "console-control-strings": "^1.0.0",
5389
+ "has-unicode": "^2.0.0",
5390
+ "object-assign": "^4.1.0",
5391
+ "signal-exit": "^3.0.0",
5392
+ "string-width": "^1.0.1",
5393
+ "strip-ansi": "^3.0.1",
5394
+ "wide-align": "^1.1.0"
5395
+ },
5396
+ "dependencies": {
5397
+ "ansi-regex": {
5398
+ "version": "2.1.1",
5399
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
5400
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
5401
+ "dev": true
5402
+ },
5403
+ "is-fullwidth-code-point": {
5404
+ "version": "1.0.0",
5405
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
5406
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
5407
+ "dev": true,
5408
+ "requires": {
5409
+ "number-is-nan": "^1.0.0"
5410
+ }
5411
+ },
5412
+ "string-width": {
5413
+ "version": "1.0.2",
5414
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
5415
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
5416
+ "dev": true,
5417
+ "requires": {
5418
+ "code-point-at": "^1.0.0",
5419
+ "is-fullwidth-code-point": "^1.0.0",
5420
+ "strip-ansi": "^3.0.0"
5421
+ }
5422
+ },
5423
+ "strip-ansi": {
5424
+ "version": "3.0.1",
5425
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
5426
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
5427
+ "dev": true,
5428
+ "requires": {
5429
+ "ansi-regex": "^2.0.0"
5430
+ }
5431
+ }
5432
+ }
5433
+ },
5434
+ "gaze": {
5435
+ "version": "1.1.3",
5436
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
5437
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
5438
+ "dev": true,
5439
+ "requires": {
5440
+ "globule": "^1.0.0"
5441
+ }
5442
+ },
5443
+ "get-caller-file": {
5444
+ "version": "1.0.3",
5445
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
5446
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
5447
+ "dev": true
5448
+ },
5449
+ "get-stdin": {
5450
+ "version": "6.0.0",
5451
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
5452
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
5453
+ "dev": true
5454
+ },
5455
+ "get-stream": {
5456
+ "version": "4.1.0",
5457
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
5458
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
5459
+ "dev": true,
5460
+ "requires": {
5461
+ "pump": "^3.0.0"
5462
+ },
5463
+ "dependencies": {
5464
+ "pump": {
5465
+ "version": "3.0.0",
5466
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5467
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5468
+ "dev": true,
5469
+ "requires": {
5470
+ "end-of-stream": "^1.1.0",
5471
+ "once": "^1.3.1"
5472
+ }
5473
+ }
5474
+ }
5475
+ },
5476
+ "get-value": {
5477
+ "version": "2.0.6",
5478
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
5479
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
5480
+ "dev": true
5481
+ },
5482
+ "getpass": {
5483
+ "version": "0.1.7",
5484
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
5485
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
5486
+ "dev": true,
5487
+ "requires": {
5488
+ "assert-plus": "^1.0.0"
5489
+ }
5490
+ },
5491
+ "glob": {
5492
+ "version": "7.1.4",
5493
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
5494
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
5495
+ "dev": true,
5496
+ "requires": {
5497
+ "fs.realpath": "^1.0.0",
5498
+ "inflight": "^1.0.4",
5499
+ "inherits": "2",
5500
+ "minimatch": "^3.0.4",
5501
+ "once": "^1.3.0",
5502
+ "path-is-absolute": "^1.0.0"
5503
+ }
5504
+ },
5505
+ "glob-parent": {
5506
+ "version": "3.1.0",
5507
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
5508
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
5509
+ "dev": true,
5510
+ "requires": {
5511
+ "is-glob": "^3.1.0",
5512
+ "path-dirname": "^1.0.0"
5513
+ },
5514
+ "dependencies": {
5515
+ "is-glob": {
5516
+ "version": "3.1.0",
5517
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
5518
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
5519
+ "dev": true,
5520
+ "requires": {
5521
+ "is-extglob": "^2.1.0"
5522
+ }
5523
+ }
5524
+ }
5525
+ },
5526
+ "glob-to-regexp": {
5527
+ "version": "0.3.0",
5528
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
5529
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
5530
+ "dev": true
5531
+ },
5532
+ "global-modules": {
5533
+ "version": "0.2.3",
5534
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
5535
+ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
5536
+ "dev": true,
5537
+ "requires": {
5538
+ "global-prefix": "^0.1.4",
5539
+ "is-windows": "^0.2.0"
5540
+ },
5541
+ "dependencies": {
5542
+ "is-windows": {
5543
+ "version": "0.2.0",
5544
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
5545
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
5546
+ "dev": true
5547
+ }
5548
+ }
5549
+ },
5550
+ "global-prefix": {
5551
+ "version": "0.1.5",
5552
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
5553
+ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
5554
+ "dev": true,
5555
+ "requires": {
5556
+ "homedir-polyfill": "^1.0.0",
5557
+ "ini": "^1.3.4",
5558
+ "is-windows": "^0.2.0",
5559
+ "which": "^1.2.12"
5560
+ },
5561
+ "dependencies": {
5562
+ "is-windows": {
5563
+ "version": "0.2.0",
5564
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
5565
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
5566
+ "dev": true
5567
+ }
5568
+ }
5569
+ },
5570
+ "globals": {
5571
+ "version": "11.12.0",
5572
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
5573
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
5574
+ "dev": true
5575
+ },
5576
+ "globby": {
5577
+ "version": "9.2.0",
5578
+ "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
5579
+ "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
5580
+ "dev": true,
5581
+ "requires": {
5582
+ "@types/glob": "^7.1.1",
5583
+ "array-union": "^1.0.2",
5584
+ "dir-glob": "^2.2.2",
5585
+ "fast-glob": "^2.2.6",
5586
+ "glob": "^7.1.3",
5587
+ "ignore": "^4.0.3",
5588
+ "pify": "^4.0.1",
5589
+ "slash": "^2.0.0"
5590
+ },
5591
+ "dependencies": {
5592
+ "pify": {
5593
+ "version": "4.0.1",
5594
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5595
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5596
+ "dev": true
5597
+ }
5598
+ }
5599
+ },
5600
+ "globjoin": {
5601
+ "version": "0.1.4",
5602
+ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
5603
+ "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
5604
+ "dev": true
5605
+ },
5606
+ "globule": {
5607
+ "version": "1.2.1",
5608
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
5609
+ "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
5610
+ "dev": true,
5611
+ "requires": {
5612
+ "glob": "~7.1.1",
5613
+ "lodash": "~4.17.10",
5614
+ "minimatch": "~3.0.2"
5615
+ }
5616
+ },
5617
+ "gonzales-pe": {
5618
+ "version": "4.2.4",
5619
+ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.4.tgz",
5620
+ "integrity": "sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==",
5621
+ "dev": true,
5622
+ "requires": {
5623
+ "minimist": "1.1.x"
5624
+ },
5625
+ "dependencies": {
5626
+ "minimist": {
5627
+ "version": "1.1.3",
5628
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
5629
+ "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
5630
+ "dev": true
5631
+ }
5632
+ }
5633
+ },
5634
+ "graceful-fs": {
5635
+ "version": "4.1.15",
5636
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
5637
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
5638
+ "dev": true
5639
+ },
5640
+ "growly": {
5641
+ "version": "1.3.0",
5642
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
5643
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
5644
+ "dev": true
5645
+ },
5646
+ "gzip-size": {
5647
+ "version": "5.1.1",
5648
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
5649
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
5650
+ "dev": true,
5651
+ "requires": {
5652
+ "duplexer": "^0.1.1",
5653
+ "pify": "^4.0.1"
5654
+ },
5655
+ "dependencies": {
5656
+ "pify": {
5657
+ "version": "4.0.1",
5658
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5659
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5660
+ "dev": true
5661
+ }
5662
+ }
5663
+ },
5664
+ "handlebars": {
5665
+ "version": "4.1.2",
5666
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
5667
+ "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
5668
+ "dev": true,
5669
+ "requires": {
5670
+ "neo-async": "^2.6.0",
5671
+ "optimist": "^0.6.1",
5672
+ "source-map": "^0.6.1",
5673
+ "uglify-js": "^3.1.4"
5674
+ },
5675
+ "dependencies": {
5676
+ "commander": {
5677
+ "version": "2.20.0",
5678
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
5679
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
5680
+ "dev": true,
5681
+ "optional": true
5682
+ },
5683
+ "source-map": {
5684
+ "version": "0.6.1",
5685
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
5686
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
5687
+ "dev": true
5688
+ },
5689
+ "uglify-js": {
5690
+ "version": "3.6.0",
5691
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
5692
+ "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
5693
+ "dev": true,
5694
+ "optional": true,
5695
+ "requires": {
5696
+ "commander": "~2.20.0",
5697
+ "source-map": "~0.6.1"
5698
+ }
5699
+ }
5700
+ }
5701
+ },
5702
+ "har-schema": {
5703
+ "version": "2.0.0",
5704
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
5705
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
5706
+ "dev": true
5707
+ },
5708
+ "har-validator": {
5709
+ "version": "5.1.3",
5710
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
5711
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
5712
+ "dev": true,
5713
+ "requires": {
5714
+ "ajv": "^6.5.5",
5715
+ "har-schema": "^2.0.0"
5716
+ }
5717
+ },
5718
+ "has": {
5719
+ "version": "1.0.3",
5720
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
5721
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
5722
+ "dev": true,
5723
+ "requires": {
5724
+ "function-bind": "^1.1.1"
5725
+ }
5726
+ },
5727
+ "has-ansi": {
5728
+ "version": "2.0.0",
5729
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
5730
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
5731
+ "dev": true,
5732
+ "requires": {
5733
+ "ansi-regex": "^2.0.0"
5734
+ },
5735
+ "dependencies": {
5736
+ "ansi-regex": {
5737
+ "version": "2.1.1",
5738
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
5739
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
5740
+ "dev": true
5741
+ }
5742
+ }
5743
+ },
5744
+ "has-flag": {
5745
+ "version": "3.0.0",
5746
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
5747
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
5748
+ "dev": true
5749
+ },
5750
+ "has-symbols": {
5751
+ "version": "1.0.0",
5752
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
5753
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
5754
+ "dev": true
5755
+ },
5756
+ "has-unicode": {
5757
+ "version": "2.0.1",
5758
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
5759
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
5760
+ "dev": true
5761
+ },
5762
+ "has-value": {
5763
+ "version": "1.0.0",
5764
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
5765
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
5766
+ "dev": true,
5767
+ "requires": {
5768
+ "get-value": "^2.0.6",
5769
+ "has-values": "^1.0.0",
5770
+ "isobject": "^3.0.0"
5771
+ }
5772
+ },
5773
+ "has-values": {
5774
+ "version": "1.0.0",
5775
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
5776
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
5777
+ "dev": true,
5778
+ "requires": {
5779
+ "is-number": "^3.0.0",
5780
+ "kind-of": "^4.0.0"
5781
+ },
5782
+ "dependencies": {
5783
+ "kind-of": {
5784
+ "version": "4.0.0",
5785
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
5786
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
5787
+ "dev": true,
5788
+ "requires": {
5789
+ "is-buffer": "^1.1.5"
5790
+ }
5791
+ }
5792
+ }
5793
+ },
5794
+ "hash-base": {
5795
+ "version": "3.0.4",
5796
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
5797
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
5798
+ "dev": true,
5799
+ "requires": {
5800
+ "inherits": "^2.0.1",
5801
+ "safe-buffer": "^5.0.1"
5802
+ }
5803
+ },
5804
+ "hash.js": {
5805
+ "version": "1.1.7",
5806
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
5807
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
5808
+ "dev": true,
5809
+ "requires": {
5810
+ "inherits": "^2.0.3",
5811
+ "minimalistic-assert": "^1.0.1"
5812
+ }
5813
+ },
5814
+ "hmac-drbg": {
5815
+ "version": "1.0.1",
5816
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
5817
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
5818
+ "dev": true,
5819
+ "requires": {
5820
+ "hash.js": "^1.0.3",
5821
+ "minimalistic-assert": "^1.0.0",
5822
+ "minimalistic-crypto-utils": "^1.0.1"
5823
+ }
5824
+ },
5825
+ "hoek": {
5826
+ "version": "5.0.4",
5827
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
5828
+ "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==",
5829
+ "dev": true
5830
+ },
5831
+ "homedir-polyfill": {
5832
+ "version": "1.0.3",
5833
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
5834
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
5835
+ "dev": true,
5836
+ "requires": {
5837
+ "parse-passwd": "^1.0.0"
5838
+ }
5839
+ },
5840
+ "hoopy": {
5841
+ "version": "0.1.4",
5842
+ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
5843
+ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
5844
+ "dev": true
5845
+ },
5846
+ "hosted-git-info": {
5847
+ "version": "2.7.1",
5848
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
5849
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
5850
+ "dev": true
5851
+ },
5852
+ "html-element-map": {
5853
+ "version": "1.0.1",
5854
+ "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.0.1.tgz",
5855
+ "integrity": "sha512-BZSfdEm6n706/lBfXKWa4frZRZcT5k1cOusw95ijZsHlI+GdgY0v95h6IzO3iIDf2ROwq570YTwqNPqHcNMozw==",
5856
+ "dev": true,
5857
+ "requires": {
5858
+ "array-filter": "^1.0.0"
5859
+ }
5860
+ },
5861
+ "html-encoding-sniffer": {
5862
+ "version": "1.0.2",
5863
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
5864
+ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
5865
+ "dev": true,
5866
+ "requires": {
5867
+ "whatwg-encoding": "^1.0.1"
5868
+ }
5869
+ },
5870
+ "html-tags": {
5871
+ "version": "2.0.0",
5872
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
5873
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
5874
+ "dev": true
5875
+ },
5876
+ "htmlparser2": {
5877
+ "version": "3.10.1",
5878
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
5879
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
5880
+ "dev": true,
5881
+ "requires": {
5882
+ "domelementtype": "^1.3.1",
5883
+ "domhandler": "^2.3.0",
5884
+ "domutils": "^1.5.1",
5885
+ "entities": "^1.1.1",
5886
+ "inherits": "^2.0.1",
5887
+ "readable-stream": "^3.1.1"
5888
+ },
5889
+ "dependencies": {
5890
+ "readable-stream": {
5891
+ "version": "3.4.0",
5892
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
5893
+ "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
5894
+ "dev": true,
5895
+ "requires": {
5896
+ "inherits": "^2.0.3",
5897
+ "string_decoder": "^1.1.1",
5898
+ "util-deprecate": "^1.0.1"
5899
+ }
5900
+ }
5901
+ }
5902
+ },
5903
+ "http-errors": {
5904
+ "version": "1.7.2",
5905
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
5906
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
5907
+ "dev": true,
5908
+ "requires": {
5909
+ "depd": "~1.1.2",
5910
+ "inherits": "2.0.3",
5911
+ "setprototypeof": "1.1.1",
5912
+ "statuses": ">= 1.5.0 < 2",
5913
+ "toidentifier": "1.0.0"
5914
+ },
5915
+ "dependencies": {
5916
+ "inherits": {
5917
+ "version": "2.0.3",
5918
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
5919
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
5920
+ "dev": true
5921
+ }
5922
+ }
5923
+ },
5924
+ "http-parser-js": {
5925
+ "version": "0.4.10",
5926
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
5927
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
5928
+ "dev": true
5929
+ },
5930
+ "http-signature": {
5931
+ "version": "1.2.0",
5932
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
5933
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
5934
+ "dev": true,
5935
+ "requires": {
5936
+ "assert-plus": "^1.0.0",
5937
+ "jsprim": "^1.2.2",
5938
+ "sshpk": "^1.7.0"
5939
+ }
5940
+ },
5941
+ "https-browserify": {
5942
+ "version": "1.0.0",
5943
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
5944
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
5945
+ "dev": true
5946
+ },
5947
+ "https-proxy-agent": {
5948
+ "version": "2.2.1",
5949
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
5950
+ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
5951
+ "dev": true,
5952
+ "requires": {
5953
+ "agent-base": "^4.1.0",
5954
+ "debug": "^3.1.0"
5955
+ },
5956
+ "dependencies": {
5957
+ "debug": {
5958
+ "version": "3.2.6",
5959
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
5960
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
5961
+ "dev": true,
5962
+ "requires": {
5963
+ "ms": "^2.1.1"
5964
+ }
5965
+ }
5966
+ }
5967
+ },
5968
+ "iconv-lite": {
5969
+ "version": "0.4.24",
5970
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
5971
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
5972
+ "dev": true,
5973
+ "requires": {
5974
+ "safer-buffer": ">= 2.1.2 < 3"
5975
+ }
5976
+ },
5977
+ "icss-replace-symbols": {
5978
+ "version": "1.1.0",
5979
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
5980
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
5981
+ "dev": true
5982
+ },
5983
+ "icss-utils": {
5984
+ "version": "4.1.1",
5985
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
5986
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
5987
+ "dev": true,
5988
+ "requires": {
5989
+ "postcss": "^7.0.14"
5990
+ }
5991
+ },
5992
+ "ieee754": {
5993
+ "version": "1.1.13",
5994
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
5995
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
5996
+ "dev": true
5997
+ },
5998
+ "iferr": {
5999
+ "version": "0.1.5",
6000
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
6001
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
6002
+ "dev": true
6003
+ },
6004
+ "ignore": {
6005
+ "version": "4.0.6",
6006
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
6007
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
6008
+ "dev": true
6009
+ },
6010
+ "import-cwd": {
6011
+ "version": "2.1.0",
6012
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
6013
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
6014
+ "dev": true,
6015
+ "requires": {
6016
+ "import-from": "^2.1.0"
6017
+ }
6018
+ },
6019
+ "import-fresh": {
6020
+ "version": "3.0.0",
6021
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
6022
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
6023
+ "dev": true,
6024
+ "requires": {
6025
+ "parent-module": "^1.0.0",
6026
+ "resolve-from": "^4.0.0"
6027
+ }
6028
+ },
6029
+ "import-from": {
6030
+ "version": "2.1.0",
6031
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
6032
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
6033
+ "dev": true,
6034
+ "requires": {
6035
+ "resolve-from": "^3.0.0"
6036
+ },
6037
+ "dependencies": {
6038
+ "resolve-from": {
6039
+ "version": "3.0.0",
6040
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
6041
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
6042
+ "dev": true
6043
+ }
6044
+ }
6045
+ },
6046
+ "import-lazy": {
6047
+ "version": "3.1.0",
6048
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
6049
+ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
6050
+ "dev": true
6051
+ },
6052
+ "import-local": {
6053
+ "version": "2.0.0",
6054
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
6055
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
6056
+ "dev": true,
6057
+ "requires": {
6058
+ "pkg-dir": "^3.0.0",
6059
+ "resolve-cwd": "^2.0.0"
6060
+ },
6061
+ "dependencies": {
6062
+ "find-up": {
6063
+ "version": "3.0.0",
6064
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
6065
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
6066
+ "dev": true,
6067
+ "requires": {
6068
+ "locate-path": "^3.0.0"
6069
+ }
6070
+ },
6071
+ "locate-path": {
6072
+ "version": "3.0.0",
6073
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
6074
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
6075
+ "dev": true,
6076
+ "requires": {
6077
+ "p-locate": "^3.0.0",
6078
+ "path-exists": "^3.0.0"
6079
+ }
6080
+ },
6081
+ "p-limit": {
6082
+ "version": "2.2.0",
6083
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
6084
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
6085
+ "dev": true,
6086
+ "requires": {
6087
+ "p-try": "^2.0.0"
6088
+ }
6089
+ },
6090
+ "p-locate": {
6091
+ "version": "3.0.0",
6092
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
6093
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
6094
+ "dev": true,
6095
+ "requires": {
6096
+ "p-limit": "^2.0.0"
6097
+ }
6098
+ },
6099
+ "p-try": {
6100
+ "version": "2.2.0",
6101
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
6102
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
6103
+ "dev": true
6104
+ },
6105
+ "pkg-dir": {
6106
+ "version": "3.0.0",
6107
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
6108
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
6109
+ "dev": true,
6110
+ "requires": {
6111
+ "find-up": "^3.0.0"
6112
+ }
6113
+ }
6114
+ }
6115
+ },
6116
+ "imurmurhash": {
6117
+ "version": "0.1.4",
6118
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
6119
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
6120
+ "dev": true
6121
+ },
6122
+ "in-publish": {
6123
+ "version": "2.0.0",
6124
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
6125
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
6126
+ "dev": true
6127
+ },
6128
+ "indent-string": {
6129
+ "version": "3.2.0",
6130
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
6131
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
6132
+ "dev": true
6133
+ },
6134
+ "indexes-of": {
6135
+ "version": "1.0.1",
6136
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
6137
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
6138
+ "dev": true
6139
+ },
6140
+ "inflight": {
6141
+ "version": "1.0.6",
6142
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
6143
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
6144
+ "dev": true,
6145
+ "requires": {
6146
+ "once": "^1.3.0",
6147
+ "wrappy": "1"
6148
+ }
6149
+ },
6150
+ "inherits": {
6151
+ "version": "2.0.4",
6152
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
6153
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
6154
+ "dev": true
6155
+ },
6156
+ "ini": {
6157
+ "version": "1.3.5",
6158
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
6159
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
6160
+ "dev": true
6161
+ },
6162
+ "inquirer": {
6163
+ "version": "6.4.1",
6164
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.1.tgz",
6165
+ "integrity": "sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw==",
6166
+ "dev": true,
6167
+ "requires": {
6168
+ "ansi-escapes": "^3.2.0",
6169
+ "chalk": "^2.4.2",
6170
+ "cli-cursor": "^2.1.0",
6171
+ "cli-width": "^2.0.0",
6172
+ "external-editor": "^3.0.3",
6173
+ "figures": "^2.0.0",
6174
+ "lodash": "^4.17.11",
6175
+ "mute-stream": "0.0.7",
6176
+ "run-async": "^2.2.0",
6177
+ "rxjs": "^6.4.0",
6178
+ "string-width": "^2.1.0",
6179
+ "strip-ansi": "^5.1.0",
6180
+ "through": "^2.3.6"
6181
+ },
6182
+ "dependencies": {
6183
+ "strip-ansi": {
6184
+ "version": "5.2.0",
6185
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
6186
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
6187
+ "dev": true,
6188
+ "requires": {
6189
+ "ansi-regex": "^4.1.0"
6190
+ }
6191
+ }
6192
+ }
6193
+ },
6194
+ "interpret": {
6195
+ "version": "1.2.0",
6196
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
6197
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
6198
+ "dev": true
6199
+ },
6200
+ "invariant": {
6201
+ "version": "2.2.4",
6202
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
6203
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
6204
+ "dev": true,
6205
+ "requires": {
6206
+ "loose-envify": "^1.0.0"
6207
+ }
6208
+ },
6209
+ "invert-kv": {
6210
+ "version": "2.0.0",
6211
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
6212
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
6213
+ "dev": true
6214
+ },
6215
+ "ipaddr.js": {
6216
+ "version": "1.9.0",
6217
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
6218
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
6219
+ "dev": true
6220
+ },
6221
+ "irregular-plurals": {
6222
+ "version": "2.0.0",
6223
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz",
6224
+ "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==",
6225
+ "dev": true
6226
+ },
6227
+ "is-accessor-descriptor": {
6228
+ "version": "0.1.6",
6229
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
6230
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
6231
+ "dev": true,
6232
+ "requires": {
6233
+ "kind-of": "^3.0.2"
6234
+ },
6235
+ "dependencies": {
6236
+ "kind-of": {
6237
+ "version": "3.2.2",
6238
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
6239
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
6240
+ "dev": true,
6241
+ "requires": {
6242
+ "is-buffer": "^1.1.5"
6243
+ }
6244
+ }
6245
+ }
6246
+ },
6247
+ "is-alphabetical": {
6248
+ "version": "1.0.3",
6249
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz",
6250
+ "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==",
6251
+ "dev": true
6252
+ },
6253
+ "is-alphanumeric": {
6254
+ "version": "1.0.0",
6255
+ "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
6256
+ "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
6257
+ "dev": true
6258
+ },
6259
+ "is-alphanumerical": {
6260
+ "version": "1.0.3",
6261
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz",
6262
+ "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==",
6263
+ "dev": true,
6264
+ "requires": {
6265
+ "is-alphabetical": "^1.0.0",
6266
+ "is-decimal": "^1.0.0"
6267
+ }
6268
+ },
6269
+ "is-arrayish": {
6270
+ "version": "0.2.1",
6271
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
6272
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
6273
+ "dev": true
6274
+ },
6275
+ "is-binary-path": {
6276
+ "version": "1.0.1",
6277
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
6278
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
6279
+ "dev": true,
6280
+ "requires": {
6281
+ "binary-extensions": "^1.0.0"
6282
+ }
6283
+ },
6284
+ "is-boolean-object": {
6285
+ "version": "1.0.0",
6286
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
6287
+ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
6288
+ "dev": true
6289
+ },
6290
+ "is-buffer": {
6291
+ "version": "1.1.6",
6292
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
6293
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
6294
+ "dev": true
6295
+ },
6296
+ "is-callable": {
6297
+ "version": "1.1.4",
6298
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
6299
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
6300
+ "dev": true
6301
+ },
6302
+ "is-ci": {
6303
+ "version": "2.0.0",
6304
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
6305
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
6306
+ "dev": true,
6307
+ "requires": {
6308
+ "ci-info": "^2.0.0"
6309
+ }
6310
+ },
6311
+ "is-data-descriptor": {
6312
+ "version": "0.1.4",
6313
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
6314
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
6315
+ "dev": true,
6316
+ "requires": {
6317
+ "kind-of": "^3.0.2"
6318
+ },
6319
+ "dependencies": {
6320
+ "kind-of": {
6321
+ "version": "3.2.2",
6322
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
6323
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
6324
+ "dev": true,
6325
+ "requires": {
6326
+ "is-buffer": "^1.1.5"
6327
+ }
6328
+ }
6329
+ }
6330
+ },
6331
+ "is-date-object": {
6332
+ "version": "1.0.1",
6333
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
6334
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
6335
+ "dev": true
6336
+ },
6337
+ "is-decimal": {
6338
+ "version": "1.0.3",
6339
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz",
6340
+ "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==",
6341
+ "dev": true
6342
+ },
6343
+ "is-descriptor": {
6344
+ "version": "0.1.6",
6345
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
6346
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
6347
+ "dev": true,
6348
+ "requires": {
6349
+ "is-accessor-descriptor": "^0.1.6",
6350
+ "is-data-descriptor": "^0.1.4",
6351
+ "kind-of": "^5.0.0"
6352
+ },
6353
+ "dependencies": {
6354
+ "kind-of": {
6355
+ "version": "5.1.0",
6356
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
6357
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
6358
+ "dev": true
6359
+ }
6360
+ }
6361
+ },
6362
+ "is-directory": {
6363
+ "version": "0.3.1",
6364
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
6365
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
6366
+ "dev": true
6367
+ },
6368
+ "is-extendable": {
6369
+ "version": "0.1.1",
6370
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
6371
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
6372
+ "dev": true
6373
+ },
6374
+ "is-extglob": {
6375
+ "version": "2.1.1",
6376
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
6377
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
6378
+ "dev": true
6379
+ },
6380
+ "is-finite": {
6381
+ "version": "1.0.2",
6382
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
6383
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
6384
+ "dev": true,
6385
+ "requires": {
6386
+ "number-is-nan": "^1.0.0"
6387
+ }
6388
+ },
6389
+ "is-fullwidth-code-point": {
6390
+ "version": "2.0.0",
6391
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
6392
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
6393
+ "dev": true
6394
+ },
6395
+ "is-generator-fn": {
6396
+ "version": "2.1.0",
6397
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
6398
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
6399
+ "dev": true
6400
+ },
6401
+ "is-glob": {
6402
+ "version": "4.0.1",
6403
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
6404
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
6405
+ "dev": true,
6406
+ "requires": {
6407
+ "is-extglob": "^2.1.1"
6408
+ }
6409
+ },
6410
+ "is-hexadecimal": {
6411
+ "version": "1.0.3",
6412
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz",
6413
+ "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==",
6414
+ "dev": true
6415
+ },
6416
+ "is-number": {
6417
+ "version": "3.0.0",
6418
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
6419
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
6420
+ "dev": true,
6421
+ "requires": {
6422
+ "kind-of": "^3.0.2"
6423
+ },
6424
+ "dependencies": {
6425
+ "kind-of": {
6426
+ "version": "3.2.2",
6427
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
6428
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
6429
+ "dev": true,
6430
+ "requires": {
6431
+ "is-buffer": "^1.1.5"
6432
+ }
6433
+ }
6434
+ }
6435
+ },
6436
+ "is-number-object": {
6437
+ "version": "1.0.3",
6438
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
6439
+ "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
6440
+ "dev": true
6441
+ },
6442
+ "is-obj": {
6443
+ "version": "1.0.1",
6444
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
6445
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
6446
+ "dev": true
6447
+ },
6448
+ "is-path-inside": {
6449
+ "version": "2.1.0",
6450
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
6451
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
6452
+ "dev": true,
6453
+ "requires": {
6454
+ "path-is-inside": "^1.0.2"
6455
+ }
6456
+ },
6457
+ "is-plain-obj": {
6458
+ "version": "1.1.0",
6459
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
6460
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
6461
+ "dev": true
6462
+ },
6463
+ "is-plain-object": {
6464
+ "version": "2.0.4",
6465
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
6466
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
6467
+ "dev": true,
6468
+ "requires": {
6469
+ "isobject": "^3.0.1"
6470
+ }
6471
+ },
6472
+ "is-promise": {
6473
+ "version": "2.1.0",
6474
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
6475
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
6476
+ "dev": true
6477
+ },
6478
+ "is-regex": {
6479
+ "version": "1.0.4",
6480
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
6481
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
6482
+ "dev": true,
6483
+ "requires": {
6484
+ "has": "^1.0.1"
6485
+ }
6486
+ },
6487
+ "is-regexp": {
6488
+ "version": "1.0.0",
6489
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
6490
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
6491
+ "dev": true
6492
+ },
6493
+ "is-resolvable": {
6494
+ "version": "1.1.0",
6495
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
6496
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
6497
+ "dev": true
6498
+ },
6499
+ "is-stream": {
6500
+ "version": "1.1.0",
6501
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
6502
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
6503
+ "dev": true
6504
+ },
6505
+ "is-string": {
6506
+ "version": "1.0.4",
6507
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
6508
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
6509
+ "dev": true
6510
+ },
6511
+ "is-subset": {
6512
+ "version": "0.1.1",
6513
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
6514
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
6515
+ "dev": true
6516
+ },
6517
+ "is-supported-regexp-flag": {
6518
+ "version": "1.0.1",
6519
+ "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz",
6520
+ "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==",
6521
+ "dev": true
6522
+ },
6523
+ "is-symbol": {
6524
+ "version": "1.0.2",
6525
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
6526
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
6527
+ "dev": true,
6528
+ "requires": {
6529
+ "has-symbols": "^1.0.0"
6530
+ }
6531
+ },
6532
+ "is-typedarray": {
6533
+ "version": "1.0.0",
6534
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
6535
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
6536
+ "dev": true
6537
+ },
6538
+ "is-utf8": {
6539
+ "version": "0.2.1",
6540
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
6541
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
6542
+ "dev": true
6543
+ },
6544
+ "is-whitespace-character": {
6545
+ "version": "1.0.3",
6546
+ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz",
6547
+ "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==",
6548
+ "dev": true
6549
+ },
6550
+ "is-windows": {
6551
+ "version": "1.0.2",
6552
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
6553
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
6554
+ "dev": true
6555
+ },
6556
+ "is-word-character": {
6557
+ "version": "1.0.3",
6558
+ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz",
6559
+ "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==",
6560
+ "dev": true
6561
+ },
6562
+ "is-wsl": {
6563
+ "version": "1.1.0",
6564
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
6565
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
6566
+ "dev": true
6567
+ },
6568
+ "isarray": {
6569
+ "version": "1.0.0",
6570
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
6571
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
6572
+ "dev": true
6573
+ },
6574
+ "isemail": {
6575
+ "version": "3.2.0",
6576
+ "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
6577
+ "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
6578
+ "dev": true,
6579
+ "requires": {
6580
+ "punycode": "2.x.x"
6581
+ }
6582
+ },
6583
+ "isexe": {
6584
+ "version": "2.0.0",
6585
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
6586
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
6587
+ "dev": true
6588
+ },
6589
+ "isobject": {
6590
+ "version": "3.0.1",
6591
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
6592
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
6593
+ "dev": true
6594
+ },
6595
+ "isstream": {
6596
+ "version": "0.1.2",
6597
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
6598
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
6599
+ "dev": true
6600
+ },
6601
+ "istanbul-lib-coverage": {
6602
+ "version": "2.0.5",
6603
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
6604
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
6605
+ "dev": true
6606
+ },
6607
+ "istanbul-lib-instrument": {
6608
+ "version": "3.3.0",
6609
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
6610
+ "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
6611
+ "dev": true,
6612
+ "requires": {
6613
+ "@babel/generator": "^7.4.0",
6614
+ "@babel/parser": "^7.4.3",
6615
+ "@babel/template": "^7.4.0",
6616
+ "@babel/traverse": "^7.4.3",
6617
+ "@babel/types": "^7.4.0",
6618
+ "istanbul-lib-coverage": "^2.0.5",
6619
+ "semver": "^6.0.0"
6620
+ },
6621
+ "dependencies": {
6622
+ "semver": {
6623
+ "version": "6.1.1",
6624
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz",
6625
+ "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==",
6626
+ "dev": true
6627
+ }
6628
+ }
6629
+ },
6630
+ "istanbul-lib-report": {
6631
+ "version": "2.0.8",
6632
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
6633
+ "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
6634
+ "dev": true,
6635
+ "requires": {
6636
+ "istanbul-lib-coverage": "^2.0.5",
6637
+ "make-dir": "^2.1.0",
6638
+ "supports-color": "^6.1.0"
6639
+ },
6640
+ "dependencies": {
6641
+ "make-dir": {
6642
+ "version": "2.1.0",
6643
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
6644
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
6645
+ "dev": true,
6646
+ "requires": {
6647
+ "pify": "^4.0.1",
6648
+ "semver": "^5.6.0"
6649
+ }
6650
+ },
6651
+ "pify": {
6652
+ "version": "4.0.1",
6653
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
6654
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
6655
+ "dev": true
6656
+ },
6657
+ "supports-color": {
6658
+ "version": "6.1.0",
6659
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
6660
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
6661
+ "dev": true,
6662
+ "requires": {
6663
+ "has-flag": "^3.0.0"
6664
+ }
6665
+ }
6666
+ }
6667
+ },
6668
+ "istanbul-lib-source-maps": {
6669
+ "version": "3.0.6",
6670
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
6671
+ "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
6672
+ "dev": true,
6673
+ "requires": {
6674
+ "debug": "^4.1.1",
6675
+ "istanbul-lib-coverage": "^2.0.5",
6676
+ "make-dir": "^2.1.0",
6677
+ "rimraf": "^2.6.3",
6678
+ "source-map": "^0.6.1"
6679
+ },
6680
+ "dependencies": {
6681
+ "make-dir": {
6682
+ "version": "2.1.0",
6683
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
6684
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
6685
+ "dev": true,
6686
+ "requires": {
6687
+ "pify": "^4.0.1",
6688
+ "semver": "^5.6.0"
6689
+ }
6690
+ },
6691
+ "pify": {
6692
+ "version": "4.0.1",
6693
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
6694
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
6695
+ "dev": true
6696
+ },
6697
+ "source-map": {
6698
+ "version": "0.6.1",
6699
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6700
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6701
+ "dev": true
6702
+ }
6703
+ }
6704
+ },
6705
+ "istanbul-reports": {
6706
+ "version": "2.2.6",
6707
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz",
6708
+ "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==",
6709
+ "dev": true,
6710
+ "requires": {
6711
+ "handlebars": "^4.1.2"
6712
+ }
6713
+ },
6714
+ "jest": {
6715
+ "version": "24.8.0",
6716
+ "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz",
6717
+ "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==",
6718
+ "dev": true,
6719
+ "requires": {
6720
+ "import-local": "^2.0.0",
6721
+ "jest-cli": "^24.8.0"
6722
+ },
6723
+ "dependencies": {
6724
+ "jest-cli": {
6725
+ "version": "24.8.0",
6726
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz",
6727
+ "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==",
6728
+ "dev": true,
6729
+ "requires": {
6730
+ "@jest/core": "^24.8.0",
6731
+ "@jest/test-result": "^24.8.0",
6732
+ "@jest/types": "^24.8.0",
6733
+ "chalk": "^2.0.1",
6734
+ "exit": "^0.1.2",
6735
+ "import-local": "^2.0.0",
6736
+ "is-ci": "^2.0.0",
6737
+ "jest-config": "^24.8.0",
6738
+ "jest-util": "^24.8.0",
6739
+ "jest-validate": "^24.8.0",
6740
+ "prompts": "^2.0.1",
6741
+ "realpath-native": "^1.1.0",
6742
+ "yargs": "^12.0.2"
6743
+ }
6744
+ }
6745
+ }
6746
+ },
6747
+ "jest-changed-files": {
6748
+ "version": "24.8.0",
6749
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz",
6750
+ "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==",
6751
+ "dev": true,
6752
+ "requires": {
6753
+ "@jest/types": "^24.8.0",
6754
+ "execa": "^1.0.0",
6755
+ "throat": "^4.0.0"
6756
+ }
6757
+ },
6758
+ "jest-config": {
6759
+ "version": "24.8.0",
6760
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz",
6761
+ "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==",
6762
+ "dev": true,
6763
+ "requires": {
6764
+ "@babel/core": "^7.1.0",
6765
+ "@jest/test-sequencer": "^24.8.0",
6766
+ "@jest/types": "^24.8.0",
6767
+ "babel-jest": "^24.8.0",
6768
+ "chalk": "^2.0.1",
6769
+ "glob": "^7.1.1",
6770
+ "jest-environment-jsdom": "^24.8.0",
6771
+ "jest-environment-node": "^24.8.0",
6772
+ "jest-get-type": "^24.8.0",
6773
+ "jest-jasmine2": "^24.8.0",
6774
+ "jest-regex-util": "^24.3.0",
6775
+ "jest-resolve": "^24.8.0",
6776
+ "jest-util": "^24.8.0",
6777
+ "jest-validate": "^24.8.0",
6778
+ "micromatch": "^3.1.10",
6779
+ "pretty-format": "^24.8.0",
6780
+ "realpath-native": "^1.1.0"
6781
+ }
6782
+ },
6783
+ "jest-dev-server": {
6784
+ "version": "4.2.0",
6785
+ "resolved": "https://registry.npmjs.org/jest-dev-server/-/jest-dev-server-4.2.0.tgz",
6786
+ "integrity": "sha512-Hy4+Y3awthvT3OI7exmqqXmselI6pvYiAQeob2hkHLtvhpsA2rO7GDPbOwxDMjqAVGUEopQOzQm37WjfB5tWdg==",
6787
+ "dev": true,
6788
+ "requires": {
6789
+ "chalk": "^2.4.2",
6790
+ "cwd": "^0.10.0",
6791
+ "find-process": "^1.4.1",
6792
+ "prompts": "^2.0.4",
6793
+ "spawnd": "^4.0.0",
6794
+ "tree-kill": "^1.2.1",
6795
+ "wait-on": "^3.2.0"
6796
+ }
6797
+ },
6798
+ "jest-diff": {
6799
+ "version": "24.8.0",
6800
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz",
6801
+ "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==",
6802
+ "dev": true,
6803
+ "requires": {
6804
+ "chalk": "^2.0.1",
6805
+ "diff-sequences": "^24.3.0",
6806
+ "jest-get-type": "^24.8.0",
6807
+ "pretty-format": "^24.8.0"
6808
+ }
6809
+ },
6810
+ "jest-docblock": {
6811
+ "version": "24.3.0",
6812
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz",
6813
+ "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==",
6814
+ "dev": true,
6815
+ "requires": {
6816
+ "detect-newline": "^2.1.0"
6817
+ }
6818
+ },
6819
+ "jest-each": {
6820
+ "version": "24.8.0",
6821
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz",
6822
+ "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==",
6823
+ "dev": true,
6824
+ "requires": {
6825
+ "@jest/types": "^24.8.0",
6826
+ "chalk": "^2.0.1",
6827
+ "jest-get-type": "^24.8.0",
6828
+ "jest-util": "^24.8.0",
6829
+ "pretty-format": "^24.8.0"
6830
+ }
6831
+ },
6832
+ "jest-environment-jsdom": {
6833
+ "version": "24.8.0",
6834
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz",
6835
+ "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==",
6836
+ "dev": true,
6837
+ "requires": {
6838
+ "@jest/environment": "^24.8.0",
6839
+ "@jest/fake-timers": "^24.8.0",
6840
+ "@jest/types": "^24.8.0",
6841
+ "jest-mock": "^24.8.0",
6842
+ "jest-util": "^24.8.0",
6843
+ "jsdom": "^11.5.1"
6844
+ }
6845
+ },
6846
+ "jest-environment-node": {
6847
+ "version": "24.8.0",
6848
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz",
6849
+ "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==",
6850
+ "dev": true,
6851
+ "requires": {
6852
+ "@jest/environment": "^24.8.0",
6853
+ "@jest/fake-timers": "^24.8.0",
6854
+ "@jest/types": "^24.8.0",
6855
+ "jest-mock": "^24.8.0",
6856
+ "jest-util": "^24.8.0"
6857
+ }
6858
+ },
6859
+ "jest-environment-puppeteer": {
6860
+ "version": "4.2.0",
6861
+ "resolved": "https://registry.npmjs.org/jest-environment-puppeteer/-/jest-environment-puppeteer-4.2.0.tgz",
6862
+ "integrity": "sha512-i3HC+BsB0l9LR79+wrnyz7ImomZdwgpu1QH/9l1DnOgAuD5tTIwvzbyQp1nX+z5aKUhAVhontDIvHaM4oHRQ0Q==",
6863
+ "dev": true,
6864
+ "requires": {
6865
+ "chalk": "^2.4.2",
6866
+ "cwd": "^0.10.0",
6867
+ "jest-dev-server": "^4.2.0",
6868
+ "merge-deep": "^3.0.2"
6869
+ }
6870
+ },
6871
+ "jest-get-type": {
6872
+ "version": "24.8.0",
6873
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz",
6874
+ "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==",
6875
+ "dev": true
6876
+ },
6877
+ "jest-haste-map": {
6878
+ "version": "24.8.1",
6879
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz",
6880
+ "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==",
6881
+ "dev": true,
6882
+ "requires": {
6883
+ "@jest/types": "^24.8.0",
6884
+ "anymatch": "^2.0.0",
6885
+ "fb-watchman": "^2.0.0",
6886
+ "fsevents": "^1.2.7",
6887
+ "graceful-fs": "^4.1.15",
6888
+ "invariant": "^2.2.4",
6889
+ "jest-serializer": "^24.4.0",
6890
+ "jest-util": "^24.8.0",
6891
+ "jest-worker": "^24.6.0",
6892
+ "micromatch": "^3.1.10",
6893
+ "sane": "^4.0.3",
6894
+ "walker": "^1.0.7"
6895
+ }
6896
+ },
6897
+ "jest-jasmine2": {
6898
+ "version": "24.8.0",
6899
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz",
6900
+ "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==",
6901
+ "dev": true,
6902
+ "requires": {
6903
+ "@babel/traverse": "^7.1.0",
6904
+ "@jest/environment": "^24.8.0",
6905
+ "@jest/test-result": "^24.8.0",
6906
+ "@jest/types": "^24.8.0",
6907
+ "chalk": "^2.0.1",
6908
+ "co": "^4.6.0",
6909
+ "expect": "^24.8.0",
6910
+ "is-generator-fn": "^2.0.0",
6911
+ "jest-each": "^24.8.0",
6912
+ "jest-matcher-utils": "^24.8.0",
6913
+ "jest-message-util": "^24.8.0",
6914
+ "jest-runtime": "^24.8.0",
6915
+ "jest-snapshot": "^24.8.0",
6916
+ "jest-util": "^24.8.0",
6917
+ "pretty-format": "^24.8.0",
6918
+ "throat": "^4.0.0"
6919
+ }
6920
+ },
6921
+ "jest-leak-detector": {
6922
+ "version": "24.8.0",
6923
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz",
6924
+ "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==",
6925
+ "dev": true,
6926
+ "requires": {
6927
+ "pretty-format": "^24.8.0"
6928
+ }
6929
+ },
6930
+ "jest-matcher-utils": {
6931
+ "version": "24.8.0",
6932
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz",
6933
+ "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==",
6934
+ "dev": true,
6935
+ "requires": {
6936
+ "chalk": "^2.0.1",
6937
+ "jest-diff": "^24.8.0",
6938
+ "jest-get-type": "^24.8.0",
6939
+ "pretty-format": "^24.8.0"
6940
+ }
6941
+ },
6942
+ "jest-message-util": {
6943
+ "version": "24.8.0",
6944
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz",
6945
+ "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==",
6946
+ "dev": true,
6947
+ "requires": {
6948
+ "@babel/code-frame": "^7.0.0",
6949
+ "@jest/test-result": "^24.8.0",
6950
+ "@jest/types": "^24.8.0",
6951
+ "@types/stack-utils": "^1.0.1",
6952
+ "chalk": "^2.0.1",
6953
+ "micromatch": "^3.1.10",
6954
+ "slash": "^2.0.0",
6955
+ "stack-utils": "^1.0.1"
6956
+ }
6957
+ },
6958
+ "jest-mock": {
6959
+ "version": "24.8.0",
6960
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz",
6961
+ "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==",
6962
+ "dev": true,
6963
+ "requires": {
6964
+ "@jest/types": "^24.8.0"
6965
+ }
6966
+ },
6967
+ "jest-pnp-resolver": {
6968
+ "version": "1.2.1",
6969
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
6970
+ "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==",
6971
+ "dev": true
6972
+ },
6973
+ "jest-puppeteer": {
6974
+ "version": "4.2.0",
6975
+ "resolved": "https://registry.npmjs.org/jest-puppeteer/-/jest-puppeteer-4.2.0.tgz",
6976
+ "integrity": "sha512-vTynE0pLia0SxbE4eRdFMWAVCm75poMTKzPhKQdQ5iS7e+mZOuMtVRNXqErsHppl4+3cRnN/r3u0g6iFSvR/sw==",
6977
+ "dev": true,
6978
+ "requires": {
6979
+ "expect-puppeteer": "^4.1.1",
6980
+ "jest-environment-puppeteer": "^4.2.0"
6981
+ }
6982
+ },
6983
+ "jest-regex-util": {
6984
+ "version": "24.3.0",
6985
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz",
6986
+ "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==",
6987
+ "dev": true
6988
+ },
6989
+ "jest-resolve": {
6990
+ "version": "24.8.0",
6991
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz",
6992
+ "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==",
6993
+ "dev": true,
6994
+ "requires": {
6995
+ "@jest/types": "^24.8.0",
6996
+ "browser-resolve": "^1.11.3",
6997
+ "chalk": "^2.0.1",
6998
+ "jest-pnp-resolver": "^1.2.1",
6999
+ "realpath-native": "^1.1.0"
7000
+ }
7001
+ },
7002
+ "jest-resolve-dependencies": {
7003
+ "version": "24.8.0",
7004
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz",
7005
+ "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==",
7006
+ "dev": true,
7007
+ "requires": {
7008
+ "@jest/types": "^24.8.0",
7009
+ "jest-regex-util": "^24.3.0",
7010
+ "jest-snapshot": "^24.8.0"
7011
+ }
7012
+ },
7013
+ "jest-runner": {
7014
+ "version": "24.8.0",
7015
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz",
7016
+ "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==",
7017
+ "dev": true,
7018
+ "requires": {
7019
+ "@jest/console": "^24.7.1",
7020
+ "@jest/environment": "^24.8.0",
7021
+ "@jest/test-result": "^24.8.0",
7022
+ "@jest/types": "^24.8.0",
7023
+ "chalk": "^2.4.2",
7024
+ "exit": "^0.1.2",
7025
+ "graceful-fs": "^4.1.15",
7026
+ "jest-config": "^24.8.0",
7027
+ "jest-docblock": "^24.3.0",
7028
+ "jest-haste-map": "^24.8.0",
7029
+ "jest-jasmine2": "^24.8.0",
7030
+ "jest-leak-detector": "^24.8.0",
7031
+ "jest-message-util": "^24.8.0",
7032
+ "jest-resolve": "^24.8.0",
7033
+ "jest-runtime": "^24.8.0",
7034
+ "jest-util": "^24.8.0",
7035
+ "jest-worker": "^24.6.0",
7036
+ "source-map-support": "^0.5.6",
7037
+ "throat": "^4.0.0"
7038
+ }
7039
+ },
7040
+ "jest-runtime": {
7041
+ "version": "24.8.0",
7042
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz",
7043
+ "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==",
7044
+ "dev": true,
7045
+ "requires": {
7046
+ "@jest/console": "^24.7.1",
7047
+ "@jest/environment": "^24.8.0",
7048
+ "@jest/source-map": "^24.3.0",
7049
+ "@jest/transform": "^24.8.0",
7050
+ "@jest/types": "^24.8.0",
7051
+ "@types/yargs": "^12.0.2",
7052
+ "chalk": "^2.0.1",
7053
+ "exit": "^0.1.2",
7054
+ "glob": "^7.1.3",
7055
+ "graceful-fs": "^4.1.15",
7056
+ "jest-config": "^24.8.0",
7057
+ "jest-haste-map": "^24.8.0",
7058
+ "jest-message-util": "^24.8.0",
7059
+ "jest-mock": "^24.8.0",
7060
+ "jest-regex-util": "^24.3.0",
7061
+ "jest-resolve": "^24.8.0",
7062
+ "jest-snapshot": "^24.8.0",
7063
+ "jest-util": "^24.8.0",
7064
+ "jest-validate": "^24.8.0",
7065
+ "realpath-native": "^1.1.0",
7066
+ "slash": "^2.0.0",
7067
+ "strip-bom": "^3.0.0",
7068
+ "yargs": "^12.0.2"
7069
+ }
7070
+ },
7071
+ "jest-serializer": {
7072
+ "version": "24.4.0",
7073
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
7074
+ "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
7075
+ "dev": true
7076
+ },
7077
+ "jest-snapshot": {
7078
+ "version": "24.8.0",
7079
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz",
7080
+ "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==",
7081
+ "dev": true,
7082
+ "requires": {
7083
+ "@babel/types": "^7.0.0",
7084
+ "@jest/types": "^24.8.0",
7085
+ "chalk": "^2.0.1",
7086
+ "expect": "^24.8.0",
7087
+ "jest-diff": "^24.8.0",
7088
+ "jest-matcher-utils": "^24.8.0",
7089
+ "jest-message-util": "^24.8.0",
7090
+ "jest-resolve": "^24.8.0",
7091
+ "mkdirp": "^0.5.1",
7092
+ "natural-compare": "^1.4.0",
7093
+ "pretty-format": "^24.8.0",
7094
+ "semver": "^5.5.0"
7095
+ }
7096
+ },
7097
+ "jest-util": {
7098
+ "version": "24.8.0",
7099
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz",
7100
+ "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==",
7101
+ "dev": true,
7102
+ "requires": {
7103
+ "@jest/console": "^24.7.1",
7104
+ "@jest/fake-timers": "^24.8.0",
7105
+ "@jest/source-map": "^24.3.0",
7106
+ "@jest/test-result": "^24.8.0",
7107
+ "@jest/types": "^24.8.0",
7108
+ "callsites": "^3.0.0",
7109
+ "chalk": "^2.0.1",
7110
+ "graceful-fs": "^4.1.15",
7111
+ "is-ci": "^2.0.0",
7112
+ "mkdirp": "^0.5.1",
7113
+ "slash": "^2.0.0",
7114
+ "source-map": "^0.6.0"
7115
+ },
7116
+ "dependencies": {
7117
+ "source-map": {
7118
+ "version": "0.6.1",
7119
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
7120
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
7121
+ "dev": true
7122
+ }
7123
+ }
7124
+ },
7125
+ "jest-validate": {
7126
+ "version": "24.8.0",
7127
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz",
7128
+ "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==",
7129
+ "dev": true,
7130
+ "requires": {
7131
+ "@jest/types": "^24.8.0",
7132
+ "camelcase": "^5.0.0",
7133
+ "chalk": "^2.0.1",
7134
+ "jest-get-type": "^24.8.0",
7135
+ "leven": "^2.1.0",
7136
+ "pretty-format": "^24.8.0"
7137
+ }
7138
+ },
7139
+ "jest-watcher": {
7140
+ "version": "24.8.0",
7141
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz",
7142
+ "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==",
7143
+ "dev": true,
7144
+ "requires": {
7145
+ "@jest/test-result": "^24.8.0",
7146
+ "@jest/types": "^24.8.0",
7147
+ "@types/yargs": "^12.0.9",
7148
+ "ansi-escapes": "^3.0.0",
7149
+ "chalk": "^2.0.1",
7150
+ "jest-util": "^24.8.0",
7151
+ "string-length": "^2.0.0"
7152
+ }
7153
+ },
7154
+ "jest-worker": {
7155
+ "version": "24.6.0",
7156
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
7157
+ "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
7158
+ "dev": true,
7159
+ "requires": {
7160
+ "merge-stream": "^1.0.1",
7161
+ "supports-color": "^6.1.0"
7162
+ },
7163
+ "dependencies": {
7164
+ "supports-color": {
7165
+ "version": "6.1.0",
7166
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
7167
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
7168
+ "dev": true,
7169
+ "requires": {
7170
+ "has-flag": "^3.0.0"
7171
+ }
7172
+ }
7173
+ }
7174
+ },
7175
+ "joi": {
7176
+ "version": "13.7.0",
7177
+ "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
7178
+ "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
7179
+ "dev": true,
7180
+ "requires": {
7181
+ "hoek": "5.x.x",
7182
+ "isemail": "3.x.x",
7183
+ "topo": "3.x.x"
7184
+ }
7185
+ },
7186
+ "js-base64": {
7187
+ "version": "2.5.1",
7188
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
7189
+ "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
7190
+ "dev": true
7191
+ },
7192
+ "js-levenshtein": {
7193
+ "version": "1.1.6",
7194
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
7195
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
7196
+ "dev": true
7197
+ },
7198
+ "js-tokens": {
7199
+ "version": "4.0.0",
7200
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
7201
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
7202
+ "dev": true
7203
+ },
7204
+ "js-yaml": {
7205
+ "version": "3.13.1",
7206
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
7207
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
7208
+ "dev": true,
7209
+ "requires": {
7210
+ "argparse": "^1.0.7",
7211
+ "esprima": "^4.0.0"
7212
+ }
7213
+ },
7214
+ "jsbn": {
7215
+ "version": "0.1.1",
7216
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
7217
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
7218
+ "dev": true
7219
+ },
7220
+ "jsdom": {
7221
+ "version": "11.12.0",
7222
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
7223
+ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
7224
+ "dev": true,
7225
+ "requires": {
7226
+ "abab": "^2.0.0",
7227
+ "acorn": "^5.5.3",
7228
+ "acorn-globals": "^4.1.0",
7229
+ "array-equal": "^1.0.0",
7230
+ "cssom": ">= 0.3.2 < 0.4.0",
7231
+ "cssstyle": "^1.0.0",
7232
+ "data-urls": "^1.0.0",
7233
+ "domexception": "^1.0.1",
7234
+ "escodegen": "^1.9.1",
7235
+ "html-encoding-sniffer": "^1.0.2",
7236
+ "left-pad": "^1.3.0",
7237
+ "nwsapi": "^2.0.7",
7238
+ "parse5": "4.0.0",
7239
+ "pn": "^1.1.0",
7240
+ "request": "^2.87.0",
7241
+ "request-promise-native": "^1.0.5",
7242
+ "sax": "^1.2.4",
7243
+ "symbol-tree": "^3.2.2",
7244
+ "tough-cookie": "^2.3.4",
7245
+ "w3c-hr-time": "^1.0.1",
7246
+ "webidl-conversions": "^4.0.2",
7247
+ "whatwg-encoding": "^1.0.3",
7248
+ "whatwg-mimetype": "^2.1.0",
7249
+ "whatwg-url": "^6.4.1",
7250
+ "ws": "^5.2.0",
7251
+ "xml-name-validator": "^3.0.0"
7252
+ },
7253
+ "dependencies": {
7254
+ "parse5": {
7255
+ "version": "4.0.0",
7256
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
7257
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
7258
+ "dev": true
7259
+ }
7260
+ }
7261
+ },
7262
+ "jsesc": {
7263
+ "version": "2.5.2",
7264
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
7265
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
7266
+ "dev": true
7267
+ },
7268
+ "json-parse-better-errors": {
7269
+ "version": "1.0.2",
7270
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
7271
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
7272
+ "dev": true
7273
+ },
7274
+ "json-schema": {
7275
+ "version": "0.2.3",
7276
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
7277
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
7278
+ "dev": true
7279
+ },
7280
+ "json-schema-traverse": {
7281
+ "version": "0.4.1",
7282
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
7283
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
7284
+ "dev": true
7285
+ },
7286
+ "json-stable-stringify-without-jsonify": {
7287
+ "version": "1.0.1",
7288
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
7289
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
7290
+ "dev": true
7291
+ },
7292
+ "json-stringify-safe": {
7293
+ "version": "5.0.1",
7294
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
7295
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
7296
+ "dev": true
7297
+ },
7298
+ "json5": {
7299
+ "version": "2.1.0",
7300
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
7301
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
7302
+ "dev": true,
7303
+ "requires": {
7304
+ "minimist": "^1.2.0"
7305
+ }
7306
+ },
7307
+ "jsprim": {
7308
+ "version": "1.4.1",
7309
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
7310
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
7311
+ "dev": true,
7312
+ "requires": {
7313
+ "assert-plus": "1.0.0",
7314
+ "extsprintf": "1.3.0",
7315
+ "json-schema": "0.2.3",
7316
+ "verror": "1.10.0"
7317
+ }
7318
+ },
7319
+ "jsx-ast-utils": {
7320
+ "version": "2.1.0",
7321
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz",
7322
+ "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==",
7323
+ "dev": true,
7324
+ "requires": {
7325
+ "array-includes": "^3.0.3"
7326
+ }
7327
+ },
7328
+ "kind-of": {
7329
+ "version": "6.0.2",
7330
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
7331
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
7332
+ "dev": true
7333
+ },
7334
+ "kleur": {
7335
+ "version": "3.0.3",
7336
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
7337
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
7338
+ "dev": true
7339
+ },
7340
+ "known-css-properties": {
7341
+ "version": "0.11.0",
7342
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz",
7343
+ "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==",
7344
+ "dev": true
7345
+ },
7346
+ "lazy-cache": {
7347
+ "version": "1.0.4",
7348
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
7349
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
7350
+ "dev": true
7351
+ },
7352
+ "lcid": {
7353
+ "version": "2.0.0",
7354
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
7355
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
7356
+ "dev": true,
7357
+ "requires": {
7358
+ "invert-kv": "^2.0.0"
7359
+ }
7360
+ },
7361
+ "leb": {
7362
+ "version": "0.3.0",
7363
+ "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz",
7364
+ "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=",
7365
+ "dev": true
7366
+ },
7367
+ "left-pad": {
7368
+ "version": "1.3.0",
7369
+ "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
7370
+ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
7371
+ "dev": true
7372
+ },
7373
+ "leven": {
7374
+ "version": "2.1.0",
7375
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
7376
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
7377
+ "dev": true
7378
+ },
7379
+ "levn": {
7380
+ "version": "0.3.0",
7381
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
7382
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
7383
+ "dev": true,
7384
+ "requires": {
7385
+ "prelude-ls": "~1.1.2",
7386
+ "type-check": "~0.3.2"
7387
+ }
7388
+ },
7389
+ "livereload-js": {
7390
+ "version": "2.4.0",
7391
+ "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
7392
+ "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==",
7393
+ "dev": true
7394
+ },
7395
+ "load-json-file": {
7396
+ "version": "4.0.0",
7397
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
7398
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
7399
+ "dev": true,
7400
+ "requires": {
7401
+ "graceful-fs": "^4.1.2",
7402
+ "parse-json": "^4.0.0",
7403
+ "pify": "^3.0.0",
7404
+ "strip-bom": "^3.0.0"
7405
+ }
7406
+ },
7407
+ "loader-runner": {
7408
+ "version": "2.4.0",
7409
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
7410
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
7411
+ "dev": true
7412
+ },
7413
+ "loader-utils": {
7414
+ "version": "1.2.3",
7415
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
7416
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
7417
+ "dev": true,
7418
+ "requires": {
7419
+ "big.js": "^5.2.2",
7420
+ "emojis-list": "^2.0.0",
7421
+ "json5": "^1.0.1"
7422
+ },
7423
+ "dependencies": {
7424
+ "json5": {
7425
+ "version": "1.0.1",
7426
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
7427
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
7428
+ "dev": true,
7429
+ "requires": {
7430
+ "minimist": "^1.2.0"
7431
+ }
7432
+ }
7433
+ }
7434
+ },
7435
+ "locate-path": {
7436
+ "version": "2.0.0",
7437
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
7438
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
7439
+ "dev": true,
7440
+ "requires": {
7441
+ "p-locate": "^2.0.0",
7442
+ "path-exists": "^3.0.0"
7443
+ }
7444
+ },
7445
+ "lodash": {
7446
+ "version": "4.17.11",
7447
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
7448
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
7449
+ },
7450
+ "lodash.escape": {
7451
+ "version": "4.0.1",
7452
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
7453
+ "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
7454
+ "dev": true
7455
+ },
7456
+ "lodash.flattendeep": {
7457
+ "version": "4.4.0",
7458
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
7459
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
7460
+ "dev": true
7461
+ },
7462
+ "lodash.isequal": {
7463
+ "version": "4.5.0",
7464
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
7465
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
7466
+ "dev": true
7467
+ },
7468
+ "lodash.sortby": {
7469
+ "version": "4.7.0",
7470
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
7471
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
7472
+ "dev": true
7473
+ },
7474
+ "lodash.tail": {
7475
+ "version": "4.1.1",
7476
+ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
7477
+ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
7478
+ "dev": true
7479
+ },
7480
+ "log-symbols": {
7481
+ "version": "2.2.0",
7482
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
7483
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
7484
+ "dev": true,
7485
+ "requires": {
7486
+ "chalk": "^2.0.1"
7487
+ }
7488
+ },
7489
+ "long": {
7490
+ "version": "3.2.0",
7491
+ "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
7492
+ "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=",
7493
+ "dev": true
7494
+ },
7495
+ "longest-streak": {
7496
+ "version": "2.0.3",
7497
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz",
7498
+ "integrity": "sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==",
7499
+ "dev": true
7500
+ },
7501
+ "loose-envify": {
7502
+ "version": "1.4.0",
7503
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
7504
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
7505
+ "dev": true,
7506
+ "requires": {
7507
+ "js-tokens": "^3.0.0 || ^4.0.0"
7508
+ }
7509
+ },
7510
+ "loud-rejection": {
7511
+ "version": "1.6.0",
7512
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
7513
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
7514
+ "dev": true,
7515
+ "requires": {
7516
+ "currently-unhandled": "^0.4.1",
7517
+ "signal-exit": "^3.0.0"
7518
+ }
7519
+ },
7520
+ "lru-cache": {
7521
+ "version": "4.1.5",
7522
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
7523
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
7524
+ "dev": true,
7525
+ "requires": {
7526
+ "pseudomap": "^1.0.2",
7527
+ "yallist": "^2.1.2"
7528
+ }
7529
+ },
7530
+ "make-dir": {
7531
+ "version": "1.3.0",
7532
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
7533
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
7534
+ "dev": true,
7535
+ "requires": {
7536
+ "pify": "^3.0.0"
7537
+ }
7538
+ },
7539
+ "makeerror": {
7540
+ "version": "1.0.11",
7541
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
7542
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
7543
+ "dev": true,
7544
+ "requires": {
7545
+ "tmpl": "1.0.x"
7546
+ }
7547
+ },
7548
+ "map-age-cleaner": {
7549
+ "version": "0.1.3",
7550
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
7551
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
7552
+ "dev": true,
7553
+ "requires": {
7554
+ "p-defer": "^1.0.0"
7555
+ }
7556
+ },
7557
+ "map-cache": {
7558
+ "version": "0.2.2",
7559
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
7560
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
7561
+ "dev": true
7562
+ },
7563
+ "map-obj": {
7564
+ "version": "2.0.0",
7565
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
7566
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
7567
+ "dev": true
7568
+ },
7569
+ "map-values": {
7570
+ "version": "1.0.1",
7571
+ "resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz",
7572
+ "integrity": "sha1-douOecAJvytk/ugG4ip7HEGQyZA=",
7573
+ "dev": true
7574
+ },
7575
+ "map-visit": {
7576
+ "version": "1.0.0",
7577
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
7578
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
7579
+ "dev": true,
7580
+ "requires": {
7581
+ "object-visit": "^1.0.0"
7582
+ }
7583
+ },
7584
+ "markdown-escapes": {
7585
+ "version": "1.0.3",
7586
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz",
7587
+ "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==",
7588
+ "dev": true
7589
+ },
7590
+ "markdown-table": {
7591
+ "version": "1.1.3",
7592
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz",
7593
+ "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==",
7594
+ "dev": true
7595
+ },
7596
+ "mathml-tag-names": {
7597
+ "version": "2.1.1",
7598
+ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz",
7599
+ "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==",
7600
+ "dev": true
7601
+ },
7602
+ "md5.js": {
7603
+ "version": "1.3.5",
7604
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
7605
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
7606
+ "dev": true,
7607
+ "requires": {
7608
+ "hash-base": "^3.0.0",
7609
+ "inherits": "^2.0.1",
7610
+ "safe-buffer": "^5.1.2"
7611
+ }
7612
+ },
7613
+ "mdast-util-compact": {
7614
+ "version": "1.0.3",
7615
+ "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz",
7616
+ "integrity": "sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==",
7617
+ "dev": true,
7618
+ "requires": {
7619
+ "unist-util-visit": "^1.1.0"
7620
+ }
7621
+ },
7622
+ "media-typer": {
7623
+ "version": "0.3.0",
7624
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
7625
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
7626
+ "dev": true
7627
+ },
7628
+ "mem": {
7629
+ "version": "4.3.0",
7630
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
7631
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
7632
+ "dev": true,
7633
+ "requires": {
7634
+ "map-age-cleaner": "^0.1.1",
7635
+ "mimic-fn": "^2.0.0",
7636
+ "p-is-promise": "^2.0.0"
7637
+ },
7638
+ "dependencies": {
7639
+ "mimic-fn": {
7640
+ "version": "2.1.0",
7641
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
7642
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
7643
+ "dev": true
7644
+ }
7645
+ }
7646
+ },
7647
+ "memory-fs": {
7648
+ "version": "0.4.1",
7649
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
7650
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
7651
+ "dev": true,
7652
+ "requires": {
7653
+ "errno": "^0.1.3",
7654
+ "readable-stream": "^2.0.1"
7655
+ }
7656
+ },
7657
+ "meow": {
7658
+ "version": "5.0.0",
7659
+ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
7660
+ "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
7661
+ "dev": true,
7662
+ "requires": {
7663
+ "camelcase-keys": "^4.0.0",
7664
+ "decamelize-keys": "^1.0.0",
7665
+ "loud-rejection": "^1.0.0",
7666
+ "minimist-options": "^3.0.1",
7667
+ "normalize-package-data": "^2.3.4",
7668
+ "read-pkg-up": "^3.0.0",
7669
+ "redent": "^2.0.0",
7670
+ "trim-newlines": "^2.0.0",
7671
+ "yargs-parser": "^10.0.0"
7672
+ },
7673
+ "dependencies": {
7674
+ "camelcase": {
7675
+ "version": "4.1.0",
7676
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
7677
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
7678
+ "dev": true
7679
+ },
7680
+ "read-pkg-up": {
7681
+ "version": "3.0.0",
7682
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
7683
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
7684
+ "dev": true,
7685
+ "requires": {
7686
+ "find-up": "^2.0.0",
7687
+ "read-pkg": "^3.0.0"
7688
+ }
7689
+ },
7690
+ "yargs-parser": {
7691
+ "version": "10.1.0",
7692
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
7693
+ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
7694
+ "dev": true,
7695
+ "requires": {
7696
+ "camelcase": "^4.1.0"
7697
+ }
7698
+ }
7699
+ }
7700
+ },
7701
+ "merge-deep": {
7702
+ "version": "3.0.2",
7703
+ "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz",
7704
+ "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==",
7705
+ "dev": true,
7706
+ "requires": {
7707
+ "arr-union": "^3.1.0",
7708
+ "clone-deep": "^0.2.4",
7709
+ "kind-of": "^3.0.2"
7710
+ },
7711
+ "dependencies": {
7712
+ "kind-of": {
7713
+ "version": "3.2.2",
7714
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
7715
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
7716
+ "dev": true,
7717
+ "requires": {
7718
+ "is-buffer": "^1.1.5"
7719
+ }
7720
+ }
7721
+ }
7722
+ },
7723
+ "merge-descriptors": {
7724
+ "version": "1.0.1",
7725
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
7726
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
7727
+ "dev": true
7728
+ },
7729
+ "merge-stream": {
7730
+ "version": "1.0.1",
7731
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
7732
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
7733
+ "dev": true,
7734
+ "requires": {
7735
+ "readable-stream": "^2.0.1"
7736
+ }
7737
+ },
7738
+ "merge2": {
7739
+ "version": "1.2.3",
7740
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
7741
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==",
7742
+ "dev": true
7743
+ },
7744
+ "methods": {
7745
+ "version": "1.1.2",
7746
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
7747
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
7748
+ "dev": true
7749
+ },
7750
+ "micromatch": {
7751
+ "version": "3.1.10",
7752
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
7753
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
7754
+ "dev": true,
7755
+ "requires": {
7756
+ "arr-diff": "^4.0.0",
7757
+ "array-unique": "^0.3.2",
7758
+ "braces": "^2.3.1",
7759
+ "define-property": "^2.0.2",
7760
+ "extend-shallow": "^3.0.2",
7761
+ "extglob": "^2.0.4",
7762
+ "fragment-cache": "^0.2.1",
7763
+ "kind-of": "^6.0.2",
7764
+ "nanomatch": "^1.2.9",
7765
+ "object.pick": "^1.3.0",
7766
+ "regex-not": "^1.0.0",
7767
+ "snapdragon": "^0.8.1",
7768
+ "to-regex": "^3.0.2"
7769
+ }
7770
+ },
7771
+ "miller-rabin": {
7772
+ "version": "4.0.1",
7773
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
7774
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
7775
+ "dev": true,
7776
+ "requires": {
7777
+ "bn.js": "^4.0.0",
7778
+ "brorand": "^1.0.1"
7779
+ }
7780
+ },
7781
+ "mime": {
7782
+ "version": "2.4.4",
7783
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
7784
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
7785
+ "dev": true
7786
+ },
7787
+ "mime-db": {
7788
+ "version": "1.40.0",
7789
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
7790
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
7791
+ "dev": true
7792
+ },
7793
+ "mime-types": {
7794
+ "version": "2.1.24",
7795
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
7796
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
7797
+ "dev": true,
7798
+ "requires": {
7799
+ "mime-db": "1.40.0"
7800
+ }
7801
+ },
7802
+ "mimic-fn": {
7803
+ "version": "1.2.0",
7804
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
7805
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
7806
+ "dev": true
7807
+ },
7808
+ "minimalistic-assert": {
7809
+ "version": "1.0.1",
7810
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
7811
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
7812
+ "dev": true
7813
+ },
7814
+ "minimalistic-crypto-utils": {
7815
+ "version": "1.0.1",
7816
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
7817
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
7818
+ "dev": true
7819
+ },
7820
+ "minimatch": {
7821
+ "version": "3.0.4",
7822
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
7823
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
7824
+ "dev": true,
7825
+ "requires": {
7826
+ "brace-expansion": "^1.1.7"
7827
+ }
7828
+ },
7829
+ "minimist": {
7830
+ "version": "1.2.0",
7831
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
7832
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
7833
+ "dev": true
7834
+ },
7835
+ "minimist-options": {
7836
+ "version": "3.0.2",
7837
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
7838
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
7839
+ "dev": true,
7840
+ "requires": {
7841
+ "arrify": "^1.0.1",
7842
+ "is-plain-obj": "^1.1.0"
7843
+ }
7844
+ },
7845
+ "mississippi": {
7846
+ "version": "2.0.0",
7847
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
7848
+ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
7849
+ "dev": true,
7850
+ "requires": {
7851
+ "concat-stream": "^1.5.0",
7852
+ "duplexify": "^3.4.2",
7853
+ "end-of-stream": "^1.1.0",
7854
+ "flush-write-stream": "^1.0.0",
7855
+ "from2": "^2.1.0",
7856
+ "parallel-transform": "^1.1.0",
7857
+ "pump": "^2.0.1",
7858
+ "pumpify": "^1.3.3",
7859
+ "stream-each": "^1.1.0",
7860
+ "through2": "^2.0.0"
7861
+ }
7862
+ },
7863
+ "mixin-deep": {
7864
+ "version": "1.3.1",
7865
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
7866
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
7867
+ "dev": true,
7868
+ "requires": {
7869
+ "for-in": "^1.0.2",
7870
+ "is-extendable": "^1.0.1"
7871
+ },
7872
+ "dependencies": {
7873
+ "is-extendable": {
7874
+ "version": "1.0.1",
7875
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
7876
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
7877
+ "dev": true,
7878
+ "requires": {
7879
+ "is-plain-object": "^2.0.4"
7880
+ }
7881
+ }
7882
+ }
7883
+ },
7884
+ "mixin-object": {
7885
+ "version": "2.0.1",
7886
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
7887
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
7888
+ "dev": true,
7889
+ "requires": {
7890
+ "for-in": "^0.1.3",
7891
+ "is-extendable": "^0.1.1"
7892
+ },
7893
+ "dependencies": {
7894
+ "for-in": {
7895
+ "version": "0.1.8",
7896
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
7897
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
7898
+ "dev": true
7899
+ }
7900
+ }
7901
+ },
7902
+ "mkdirp": {
7903
+ "version": "0.5.1",
7904
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
7905
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
7906
+ "dev": true,
7907
+ "requires": {
7908
+ "minimist": "0.0.8"
7909
+ },
7910
+ "dependencies": {
7911
+ "minimist": {
7912
+ "version": "0.0.8",
7913
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
7914
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
7915
+ "dev": true
7916
+ }
7917
+ }
7918
+ },
7919
+ "moo": {
7920
+ "version": "0.4.3",
7921
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
7922
+ "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==",
7923
+ "dev": true
7924
+ },
7925
+ "move-concurrently": {
7926
+ "version": "1.0.1",
7927
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
7928
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
7929
+ "dev": true,
7930
+ "requires": {
7931
+ "aproba": "^1.1.1",
7932
+ "copy-concurrently": "^1.0.0",
7933
+ "fs-write-stream-atomic": "^1.0.8",
7934
+ "mkdirp": "^0.5.1",
7935
+ "rimraf": "^2.5.4",
7936
+ "run-queue": "^1.0.3"
7937
+ }
7938
+ },
7939
+ "ms": {
7940
+ "version": "2.1.2",
7941
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
7942
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
7943
+ "dev": true
7944
+ },
7945
+ "mute-stream": {
7946
+ "version": "0.0.7",
7947
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
7948
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
7949
+ "dev": true
7950
+ },
7951
+ "nan": {
7952
+ "version": "2.14.0",
7953
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
7954
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
7955
+ "dev": true
7956
+ },
7957
+ "nanomatch": {
7958
+ "version": "1.2.13",
7959
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
7960
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
7961
+ "dev": true,
7962
+ "requires": {
7963
+ "arr-diff": "^4.0.0",
7964
+ "array-unique": "^0.3.2",
7965
+ "define-property": "^2.0.2",
7966
+ "extend-shallow": "^3.0.2",
7967
+ "fragment-cache": "^0.2.1",
7968
+ "is-windows": "^1.0.2",
7969
+ "kind-of": "^6.0.2",
7970
+ "object.pick": "^1.3.0",
7971
+ "regex-not": "^1.0.0",
7972
+ "snapdragon": "^0.8.1",
7973
+ "to-regex": "^3.0.1"
7974
+ }
7975
+ },
7976
+ "natural-compare": {
7977
+ "version": "1.4.0",
7978
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
7979
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
7980
+ "dev": true
7981
+ },
7982
+ "nearley": {
7983
+ "version": "2.16.0",
7984
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz",
7985
+ "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==",
7986
+ "dev": true,
7987
+ "requires": {
7988
+ "commander": "^2.19.0",
7989
+ "moo": "^0.4.3",
7990
+ "railroad-diagrams": "^1.0.0",
7991
+ "randexp": "0.4.6",
7992
+ "semver": "^5.4.1"
7993
+ },
7994
+ "dependencies": {
7995
+ "commander": {
7996
+ "version": "2.20.0",
7997
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
7998
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
7999
+ "dev": true
8000
+ }
8001
+ }
8002
+ },
8003
+ "negotiator": {
8004
+ "version": "0.6.2",
8005
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
8006
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
8007
+ "dev": true
8008
+ },
8009
+ "neo-async": {
8010
+ "version": "2.6.1",
8011
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
8012
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
8013
+ "dev": true
8014
+ },
8015
+ "nice-try": {
8016
+ "version": "1.0.5",
8017
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
8018
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
8019
+ "dev": true
8020
+ },
8021
+ "node-gyp": {
8022
+ "version": "3.8.0",
8023
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
8024
+ "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
8025
+ "dev": true,
8026
+ "requires": {
8027
+ "fstream": "^1.0.0",
8028
+ "glob": "^7.0.3",
8029
+ "graceful-fs": "^4.1.2",
8030
+ "mkdirp": "^0.5.0",
8031
+ "nopt": "2 || 3",
8032
+ "npmlog": "0 || 1 || 2 || 3 || 4",
8033
+ "osenv": "0",
8034
+ "request": "^2.87.0",
8035
+ "rimraf": "2",
8036
+ "semver": "~5.3.0",
8037
+ "tar": "^2.0.0",
8038
+ "which": "1"
8039
+ },
8040
+ "dependencies": {
8041
+ "semver": {
8042
+ "version": "5.3.0",
8043
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
8044
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
8045
+ "dev": true
8046
+ }
8047
+ }
8048
+ },
8049
+ "node-int64": {
8050
+ "version": "0.4.0",
8051
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
8052
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
8053
+ "dev": true
8054
+ },
8055
+ "node-libs-browser": {
8056
+ "version": "2.2.1",
8057
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
8058
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
8059
+ "dev": true,
8060
+ "requires": {
8061
+ "assert": "^1.1.1",
8062
+ "browserify-zlib": "^0.2.0",
8063
+ "buffer": "^4.3.0",
8064
+ "console-browserify": "^1.1.0",
8065
+ "constants-browserify": "^1.0.0",
8066
+ "crypto-browserify": "^3.11.0",
8067
+ "domain-browser": "^1.1.1",
8068
+ "events": "^3.0.0",
8069
+ "https-browserify": "^1.0.0",
8070
+ "os-browserify": "^0.3.0",
8071
+ "path-browserify": "0.0.1",
8072
+ "process": "^0.11.10",
8073
+ "punycode": "^1.2.4",
8074
+ "querystring-es3": "^0.2.0",
8075
+ "readable-stream": "^2.3.3",
8076
+ "stream-browserify": "^2.0.1",
8077
+ "stream-http": "^2.7.2",
8078
+ "string_decoder": "^1.0.0",
8079
+ "timers-browserify": "^2.0.4",
8080
+ "tty-browserify": "0.0.0",
8081
+ "url": "^0.11.0",
8082
+ "util": "^0.11.0",
8083
+ "vm-browserify": "^1.0.1"
8084
+ },
8085
+ "dependencies": {
8086
+ "punycode": {
8087
+ "version": "1.4.1",
8088
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
8089
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
8090
+ "dev": true
8091
+ }
8092
+ }
8093
+ },
8094
+ "node-modules-regexp": {
8095
+ "version": "1.0.0",
8096
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
8097
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
8098
+ "dev": true
8099
+ },
8100
+ "node-notifier": {
8101
+ "version": "5.4.0",
8102
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
8103
+ "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
8104
+ "dev": true,
8105
+ "requires": {
8106
+ "growly": "^1.3.0",
8107
+ "is-wsl": "^1.1.0",
8108
+ "semver": "^5.5.0",
8109
+ "shellwords": "^0.1.1",
8110
+ "which": "^1.3.0"
8111
+ }
8112
+ },
8113
+ "node-releases": {
8114
+ "version": "1.1.23",
8115
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz",
8116
+ "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==",
8117
+ "dev": true,
8118
+ "requires": {
8119
+ "semver": "^5.3.0"
8120
+ }
8121
+ },
8122
+ "node-sass": {
8123
+ "version": "4.12.0",
8124
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
8125
+ "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
8126
+ "dev": true,
8127
+ "requires": {
8128
+ "async-foreach": "^0.1.3",
8129
+ "chalk": "^1.1.1",
8130
+ "cross-spawn": "^3.0.0",
8131
+ "gaze": "^1.0.0",
8132
+ "get-stdin": "^4.0.1",
8133
+ "glob": "^7.0.3",
8134
+ "in-publish": "^2.0.0",
8135
+ "lodash": "^4.17.11",
8136
+ "meow": "^3.7.0",
8137
+ "mkdirp": "^0.5.1",
8138
+ "nan": "^2.13.2",
8139
+ "node-gyp": "^3.8.0",
8140
+ "npmlog": "^4.0.0",
8141
+ "request": "^2.88.0",
8142
+ "sass-graph": "^2.2.4",
8143
+ "stdout-stream": "^1.4.0",
8144
+ "true-case-path": "^1.0.2"
8145
+ },
8146
+ "dependencies": {
8147
+ "ansi-regex": {
8148
+ "version": "2.1.1",
8149
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
8150
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
8151
+ "dev": true
8152
+ },
8153
+ "ansi-styles": {
8154
+ "version": "2.2.1",
8155
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
8156
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
8157
+ "dev": true
8158
+ },
8159
+ "camelcase": {
8160
+ "version": "2.1.1",
8161
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
8162
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
8163
+ "dev": true
8164
+ },
8165
+ "camelcase-keys": {
8166
+ "version": "2.1.0",
8167
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
8168
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
8169
+ "dev": true,
8170
+ "requires": {
8171
+ "camelcase": "^2.0.0",
8172
+ "map-obj": "^1.0.0"
8173
+ }
8174
+ },
8175
+ "chalk": {
8176
+ "version": "1.1.3",
8177
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
8178
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
8179
+ "dev": true,
8180
+ "requires": {
8181
+ "ansi-styles": "^2.2.1",
8182
+ "escape-string-regexp": "^1.0.2",
8183
+ "has-ansi": "^2.0.0",
8184
+ "strip-ansi": "^3.0.0",
8185
+ "supports-color": "^2.0.0"
8186
+ }
8187
+ },
8188
+ "cross-spawn": {
8189
+ "version": "3.0.1",
8190
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
8191
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
8192
+ "dev": true,
8193
+ "requires": {
8194
+ "lru-cache": "^4.0.1",
8195
+ "which": "^1.2.9"
8196
+ }
8197
+ },
8198
+ "get-stdin": {
8199
+ "version": "4.0.1",
8200
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
8201
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
8202
+ "dev": true
8203
+ },
8204
+ "indent-string": {
8205
+ "version": "2.1.0",
8206
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
8207
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
8208
+ "dev": true,
8209
+ "requires": {
8210
+ "repeating": "^2.0.0"
8211
+ }
8212
+ },
8213
+ "map-obj": {
8214
+ "version": "1.0.1",
8215
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
8216
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
8217
+ "dev": true
8218
+ },
8219
+ "meow": {
8220
+ "version": "3.7.0",
8221
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
8222
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
8223
+ "dev": true,
8224
+ "requires": {
8225
+ "camelcase-keys": "^2.0.0",
8226
+ "decamelize": "^1.1.2",
8227
+ "loud-rejection": "^1.0.0",
8228
+ "map-obj": "^1.0.1",
8229
+ "minimist": "^1.1.3",
8230
+ "normalize-package-data": "^2.3.4",
8231
+ "object-assign": "^4.0.1",
8232
+ "read-pkg-up": "^1.0.1",
8233
+ "redent": "^1.0.0",
8234
+ "trim-newlines": "^1.0.0"
8235
+ }
8236
+ },
8237
+ "redent": {
8238
+ "version": "1.0.0",
8239
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
8240
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
8241
+ "dev": true,
8242
+ "requires": {
8243
+ "indent-string": "^2.1.0",
8244
+ "strip-indent": "^1.0.1"
8245
+ }
8246
+ },
8247
+ "strip-ansi": {
8248
+ "version": "3.0.1",
8249
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
8250
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
8251
+ "dev": true,
8252
+ "requires": {
8253
+ "ansi-regex": "^2.0.0"
8254
+ }
8255
+ },
8256
+ "strip-indent": {
8257
+ "version": "1.0.1",
8258
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
8259
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
8260
+ "dev": true,
8261
+ "requires": {
8262
+ "get-stdin": "^4.0.1"
8263
+ }
8264
+ },
8265
+ "supports-color": {
8266
+ "version": "2.0.0",
8267
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
8268
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
8269
+ "dev": true
8270
+ },
8271
+ "trim-newlines": {
8272
+ "version": "1.0.0",
8273
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
8274
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
8275
+ "dev": true
8276
+ }
8277
+ }
8278
+ },
8279
+ "nopt": {
8280
+ "version": "3.0.6",
8281
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
8282
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
8283
+ "dev": true,
8284
+ "requires": {
8285
+ "abbrev": "1"
8286
+ }
8287
+ },
8288
+ "normalize-package-data": {
8289
+ "version": "2.5.0",
8290
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
8291
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
8292
+ "dev": true,
8293
+ "requires": {
8294
+ "hosted-git-info": "^2.1.4",
8295
+ "resolve": "^1.10.0",
8296
+ "semver": "2 || 3 || 4 || 5",
8297
+ "validate-npm-package-license": "^3.0.1"
8298
+ }
8299
+ },
8300
+ "normalize-path": {
8301
+ "version": "3.0.0",
8302
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
8303
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
8304
+ "dev": true
8305
+ },
8306
+ "normalize-range": {
8307
+ "version": "0.1.2",
8308
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
8309
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
8310
+ "dev": true
8311
+ },
8312
+ "normalize-selector": {
8313
+ "version": "0.2.0",
8314
+ "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
8315
+ "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
8316
+ "dev": true
8317
+ },
8318
+ "npm-package-json-lint": {
8319
+ "version": "3.7.0",
8320
+ "resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-3.7.0.tgz",
8321
+ "integrity": "sha512-eWi1pZ/ZhPHAOMLC1+njBJj81yCu2Ek4VxhwpPHABvSVHS0dkaL6aKhSj/TX8Rtm/0rIg3edgMLt3kSRtWkFaA==",
8322
+ "dev": true,
8323
+ "requires": {
8324
+ "ajv": "^6.10.0",
8325
+ "chalk": "^2.4.2",
8326
+ "glob": "^7.1.4",
8327
+ "ignore": "^5.1.2",
8328
+ "is-path-inside": "^2.1.0",
8329
+ "is-plain-obj": "^1.1.0",
8330
+ "is-resolvable": "^1.1.0",
8331
+ "log-symbols": "^2.2.0",
8332
+ "meow": "^5.0.0",
8333
+ "plur": "^3.1.1",
8334
+ "semver": "^5.6.0",
8335
+ "strip-json-comments": "^2.0.1",
8336
+ "validator": "^10.11.0"
8337
+ },
8338
+ "dependencies": {
8339
+ "ignore": {
8340
+ "version": "5.1.2",
8341
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz",
8342
+ "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==",
8343
+ "dev": true
8344
+ }
8345
+ }
8346
+ },
8347
+ "npm-run-path": {
8348
+ "version": "2.0.2",
8349
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
8350
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
8351
+ "dev": true,
8352
+ "requires": {
8353
+ "path-key": "^2.0.0"
8354
+ }
8355
+ },
8356
+ "npmlog": {
8357
+ "version": "4.1.2",
8358
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
8359
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
8360
+ "dev": true,
8361
+ "requires": {
8362
+ "are-we-there-yet": "~1.1.2",
8363
+ "console-control-strings": "~1.1.0",
8364
+ "gauge": "~2.7.3",
8365
+ "set-blocking": "~2.0.0"
8366
+ }
8367
+ },
8368
+ "nth-check": {
8369
+ "version": "1.0.2",
8370
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
8371
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
8372
+ "dev": true,
8373
+ "requires": {
8374
+ "boolbase": "~1.0.0"
8375
+ }
8376
+ },
8377
+ "num2fraction": {
8378
+ "version": "1.2.2",
8379
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
8380
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
8381
+ "dev": true
8382
+ },
8383
+ "number-is-nan": {
8384
+ "version": "1.0.1",
8385
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
8386
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
8387
+ "dev": true
8388
+ },
8389
+ "nwsapi": {
8390
+ "version": "2.1.4",
8391
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
8392
+ "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==",
8393
+ "dev": true
8394
+ },
8395
+ "oauth-sign": {
8396
+ "version": "0.9.0",
8397
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
8398
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
8399
+ "dev": true
8400
+ },
8401
+ "object-assign": {
8402
+ "version": "4.1.1",
8403
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
8404
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
8405
+ "dev": true
8406
+ },
8407
+ "object-copy": {
8408
+ "version": "0.1.0",
8409
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
8410
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
8411
+ "dev": true,
8412
+ "requires": {
8413
+ "copy-descriptor": "^0.1.0",
8414
+ "define-property": "^0.2.5",
8415
+ "kind-of": "^3.0.3"
8416
+ },
8417
+ "dependencies": {
8418
+ "define-property": {
8419
+ "version": "0.2.5",
8420
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
8421
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
8422
+ "dev": true,
8423
+ "requires": {
8424
+ "is-descriptor": "^0.1.0"
8425
+ }
8426
+ },
8427
+ "kind-of": {
8428
+ "version": "3.2.2",
8429
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
8430
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
8431
+ "dev": true,
8432
+ "requires": {
8433
+ "is-buffer": "^1.1.5"
8434
+ }
8435
+ }
8436
+ }
8437
+ },
8438
+ "object-filter": {
8439
+ "version": "1.0.2",
8440
+ "resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz",
8441
+ "integrity": "sha1-rwt5f/6+r4pSxmN87b6IFs/sG8g=",
8442
+ "dev": true
8443
+ },
8444
+ "object-inspect": {
8445
+ "version": "1.6.0",
8446
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
8447
+ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
8448
+ "dev": true
8449
+ },
8450
+ "object-is": {
8451
+ "version": "1.0.1",
8452
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
8453
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
8454
+ "dev": true
8455
+ },
8456
+ "object-keys": {
8457
+ "version": "1.1.1",
8458
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
8459
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
8460
+ "dev": true
8461
+ },
8462
+ "object-visit": {
8463
+ "version": "1.0.1",
8464
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
8465
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
8466
+ "dev": true,
8467
+ "requires": {
8468
+ "isobject": "^3.0.0"
8469
+ }
8470
+ },
8471
+ "object.assign": {
8472
+ "version": "4.1.0",
8473
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
8474
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
8475
+ "dev": true,
8476
+ "requires": {
8477
+ "define-properties": "^1.1.2",
8478
+ "function-bind": "^1.1.1",
8479
+ "has-symbols": "^1.0.0",
8480
+ "object-keys": "^1.0.11"
8481
+ }
8482
+ },
8483
+ "object.entries": {
8484
+ "version": "1.1.0",
8485
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
8486
+ "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
8487
+ "dev": true,
8488
+ "requires": {
8489
+ "define-properties": "^1.1.3",
8490
+ "es-abstract": "^1.12.0",
8491
+ "function-bind": "^1.1.1",
8492
+ "has": "^1.0.3"
8493
+ }
8494
+ },
8495
+ "object.fromentries": {
8496
+ "version": "2.0.0",
8497
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
8498
+ "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
8499
+ "dev": true,
8500
+ "requires": {
8501
+ "define-properties": "^1.1.2",
8502
+ "es-abstract": "^1.11.0",
8503
+ "function-bind": "^1.1.1",
8504
+ "has": "^1.0.1"
8505
+ }
8506
+ },
8507
+ "object.getownpropertydescriptors": {
8508
+ "version": "2.0.3",
8509
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
8510
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
8511
+ "dev": true,
8512
+ "requires": {
8513
+ "define-properties": "^1.1.2",
8514
+ "es-abstract": "^1.5.1"
8515
+ }
8516
+ },
8517
+ "object.pick": {
8518
+ "version": "1.3.0",
8519
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
8520
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
8521
+ "dev": true,
8522
+ "requires": {
8523
+ "isobject": "^3.0.1"
8524
+ }
8525
+ },
8526
+ "object.values": {
8527
+ "version": "1.1.0",
8528
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
8529
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
8530
+ "dev": true,
8531
+ "requires": {
8532
+ "define-properties": "^1.1.3",
8533
+ "es-abstract": "^1.12.0",
8534
+ "function-bind": "^1.1.1",
8535
+ "has": "^1.0.3"
8536
+ }
8537
+ },
8538
+ "on-finished": {
8539
+ "version": "2.3.0",
8540
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
8541
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
8542
+ "dev": true,
8543
+ "requires": {
8544
+ "ee-first": "1.1.1"
8545
+ }
8546
+ },
8547
+ "once": {
8548
+ "version": "1.4.0",
8549
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
8550
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
8551
+ "dev": true,
8552
+ "requires": {
8553
+ "wrappy": "1"
8554
+ }
8555
+ },
8556
+ "onetime": {
8557
+ "version": "2.0.1",
8558
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
8559
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
8560
+ "dev": true,
8561
+ "requires": {
8562
+ "mimic-fn": "^1.0.0"
8563
+ }
8564
+ },
8565
+ "opener": {
8566
+ "version": "1.5.1",
8567
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
8568
+ "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
8569
+ "dev": true
8570
+ },
8571
+ "optimist": {
8572
+ "version": "0.6.1",
8573
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
8574
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
8575
+ "dev": true,
8576
+ "requires": {
8577
+ "minimist": "~0.0.1",
8578
+ "wordwrap": "~0.0.2"
8579
+ },
8580
+ "dependencies": {
8581
+ "minimist": {
8582
+ "version": "0.0.10",
8583
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
8584
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
8585
+ "dev": true
8586
+ },
8587
+ "wordwrap": {
8588
+ "version": "0.0.3",
8589
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
8590
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
8591
+ "dev": true
8592
+ }
8593
+ }
8594
+ },
8595
+ "optionator": {
8596
+ "version": "0.8.2",
8597
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
8598
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
8599
+ "dev": true,
8600
+ "requires": {
8601
+ "deep-is": "~0.1.3",
8602
+ "fast-levenshtein": "~2.0.4",
8603
+ "levn": "~0.3.0",
8604
+ "prelude-ls": "~1.1.2",
8605
+ "type-check": "~0.3.2",
8606
+ "wordwrap": "~1.0.0"
8607
+ }
8608
+ },
8609
+ "os-browserify": {
8610
+ "version": "0.3.0",
8611
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
8612
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
8613
+ "dev": true
8614
+ },
8615
+ "os-homedir": {
8616
+ "version": "1.0.2",
8617
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
8618
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
8619
+ "dev": true
8620
+ },
8621
+ "os-locale": {
8622
+ "version": "3.1.0",
8623
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
8624
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
8625
+ "dev": true,
8626
+ "requires": {
8627
+ "execa": "^1.0.0",
8628
+ "lcid": "^2.0.0",
8629
+ "mem": "^4.0.0"
8630
+ }
8631
+ },
8632
+ "os-tmpdir": {
8633
+ "version": "1.0.2",
8634
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
8635
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
8636
+ "dev": true
8637
+ },
8638
+ "osenv": {
8639
+ "version": "0.1.5",
8640
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
8641
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
8642
+ "dev": true,
8643
+ "requires": {
8644
+ "os-homedir": "^1.0.0",
8645
+ "os-tmpdir": "^1.0.0"
8646
+ }
8647
+ },
8648
+ "p-defer": {
8649
+ "version": "1.0.0",
8650
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
8651
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
8652
+ "dev": true
8653
+ },
8654
+ "p-each-series": {
8655
+ "version": "1.0.0",
8656
+ "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
8657
+ "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
8658
+ "dev": true,
8659
+ "requires": {
8660
+ "p-reduce": "^1.0.0"
8661
+ }
8662
+ },
8663
+ "p-finally": {
8664
+ "version": "1.0.0",
8665
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
8666
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
8667
+ "dev": true
8668
+ },
8669
+ "p-is-promise": {
8670
+ "version": "2.1.0",
8671
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
8672
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
8673
+ "dev": true
8674
+ },
8675
+ "p-limit": {
8676
+ "version": "1.3.0",
8677
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
8678
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
8679
+ "dev": true,
8680
+ "requires": {
8681
+ "p-try": "^1.0.0"
8682
+ }
8683
+ },
8684
+ "p-locate": {
8685
+ "version": "2.0.0",
8686
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
8687
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
8688
+ "dev": true,
8689
+ "requires": {
8690
+ "p-limit": "^1.1.0"
8691
+ }
8692
+ },
8693
+ "p-reduce": {
8694
+ "version": "1.0.0",
8695
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
8696
+ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
8697
+ "dev": true
8698
+ },
8699
+ "p-try": {
8700
+ "version": "1.0.0",
8701
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
8702
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
8703
+ "dev": true
8704
+ },
8705
+ "pako": {
8706
+ "version": "1.0.10",
8707
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
8708
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
8709
+ "dev": true
8710
+ },
8711
+ "parallel-transform": {
8712
+ "version": "1.1.0",
8713
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
8714
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
8715
+ "dev": true,
8716
+ "requires": {
8717
+ "cyclist": "~0.2.2",
8718
+ "inherits": "^2.0.3",
8719
+ "readable-stream": "^2.1.5"
8720
+ }
8721
+ },
8722
+ "parent-module": {
8723
+ "version": "1.0.1",
8724
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
8725
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
8726
+ "dev": true,
8727
+ "requires": {
8728
+ "callsites": "^3.0.0"
8729
+ }
8730
+ },
8731
+ "parse-asn1": {
8732
+ "version": "5.1.4",
8733
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
8734
+ "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
8735
+ "dev": true,
8736
+ "requires": {
8737
+ "asn1.js": "^4.0.0",
8738
+ "browserify-aes": "^1.0.0",
8739
+ "create-hash": "^1.1.0",
8740
+ "evp_bytestokey": "^1.0.0",
8741
+ "pbkdf2": "^3.0.3",
8742
+ "safe-buffer": "^5.1.1"
8743
+ }
8744
+ },
8745
+ "parse-entities": {
8746
+ "version": "1.2.2",
8747
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz",
8748
+ "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==",
8749
+ "dev": true,
8750
+ "requires": {
8751
+ "character-entities": "^1.0.0",
8752
+ "character-entities-legacy": "^1.0.0",
8753
+ "character-reference-invalid": "^1.0.0",
8754
+ "is-alphanumerical": "^1.0.0",
8755
+ "is-decimal": "^1.0.0",
8756
+ "is-hexadecimal": "^1.0.0"
8757
+ }
8758
+ },
8759
+ "parse-json": {
8760
+ "version": "4.0.0",
8761
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
8762
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
8763
+ "dev": true,
8764
+ "requires": {
8765
+ "error-ex": "^1.3.1",
8766
+ "json-parse-better-errors": "^1.0.1"
8767
+ }
8768
+ },
8769
+ "parse-passwd": {
8770
+ "version": "1.0.0",
8771
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
8772
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
8773
+ "dev": true
8774
+ },
8775
+ "parse5": {
8776
+ "version": "3.0.3",
8777
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
8778
+ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
8779
+ "dev": true,
8780
+ "requires": {
8781
+ "@types/node": "*"
8782
+ }
8783
+ },
8784
+ "parseurl": {
8785
+ "version": "1.3.3",
8786
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
8787
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
8788
+ "dev": true
8789
+ },
8790
+ "pascalcase": {
8791
+ "version": "0.1.1",
8792
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
8793
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
8794
+ "dev": true
8795
+ },
8796
+ "path-browserify": {
8797
+ "version": "0.0.1",
8798
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
8799
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
8800
+ "dev": true
8801
+ },
8802
+ "path-dirname": {
8803
+ "version": "1.0.2",
8804
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
8805
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
8806
+ "dev": true
8807
+ },
8808
+ "path-exists": {
8809
+ "version": "3.0.0",
8810
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
8811
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
8812
+ "dev": true
8813
+ },
8814
+ "path-is-absolute": {
8815
+ "version": "1.0.1",
8816
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
8817
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
8818
+ "dev": true
8819
+ },
8820
+ "path-is-inside": {
8821
+ "version": "1.0.2",
8822
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
8823
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
8824
+ "dev": true
8825
+ },
8826
+ "path-key": {
8827
+ "version": "2.0.1",
8828
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
8829
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
8830
+ "dev": true
8831
+ },
8832
+ "path-parse": {
8833
+ "version": "1.0.6",
8834
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
8835
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
8836
+ "dev": true
8837
+ },
8838
+ "path-to-regexp": {
8839
+ "version": "0.1.7",
8840
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
8841
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
8842
+ "dev": true
8843
+ },
8844
+ "path-type": {
8845
+ "version": "3.0.0",
8846
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
8847
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
8848
+ "dev": true,
8849
+ "requires": {
8850
+ "pify": "^3.0.0"
8851
+ }
8852
+ },
8853
+ "pbkdf2": {
8854
+ "version": "3.0.17",
8855
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
8856
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
8857
+ "dev": true,
8858
+ "requires": {
8859
+ "create-hash": "^1.1.2",
8860
+ "create-hmac": "^1.1.4",
8861
+ "ripemd160": "^2.0.1",
8862
+ "safe-buffer": "^5.0.1",
8863
+ "sha.js": "^2.4.8"
8864
+ }
8865
+ },
8866
+ "pend": {
8867
+ "version": "1.2.0",
8868
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
8869
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
8870
+ "dev": true
8871
+ },
8872
+ "performance-now": {
8873
+ "version": "2.1.0",
8874
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
8875
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
8876
+ "dev": true
8877
+ },
8878
+ "pify": {
8879
+ "version": "3.0.0",
8880
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
8881
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
8882
+ "dev": true
8883
+ },
8884
+ "pinkie": {
8885
+ "version": "2.0.4",
8886
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
8887
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
8888
+ "dev": true
8889
+ },
8890
+ "pinkie-promise": {
8891
+ "version": "2.0.1",
8892
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
8893
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
8894
+ "dev": true,
8895
+ "requires": {
8896
+ "pinkie": "^2.0.0"
8897
+ }
8898
+ },
8899
+ "pirates": {
8900
+ "version": "4.0.1",
8901
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
8902
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
8903
+ "dev": true,
8904
+ "requires": {
8905
+ "node-modules-regexp": "^1.0.0"
8906
+ }
8907
+ },
8908
+ "pkg-dir": {
8909
+ "version": "2.0.0",
8910
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
8911
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
8912
+ "dev": true,
8913
+ "requires": {
8914
+ "find-up": "^2.1.0"
8915
+ }
8916
+ },
8917
+ "plur": {
8918
+ "version": "3.1.1",
8919
+ "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz",
8920
+ "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==",
8921
+ "dev": true,
8922
+ "requires": {
8923
+ "irregular-plurals": "^2.0.0"
8924
+ }
8925
+ },
8926
+ "pn": {
8927
+ "version": "1.1.0",
8928
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
8929
+ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
8930
+ "dev": true
8931
+ },
8932
+ "portfinder": {
8933
+ "version": "1.0.20",
8934
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
8935
+ "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
8936
+ "dev": true,
8937
+ "requires": {
8938
+ "async": "^1.5.2",
8939
+ "debug": "^2.2.0",
8940
+ "mkdirp": "0.5.x"
8941
+ },
8942
+ "dependencies": {
8943
+ "async": {
8944
+ "version": "1.5.2",
8945
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
8946
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
8947
+ "dev": true
8948
+ },
8949
+ "debug": {
8950
+ "version": "2.6.9",
8951
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
8952
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
8953
+ "dev": true,
8954
+ "requires": {
8955
+ "ms": "2.0.0"
8956
+ }
8957
+ },
8958
+ "ms": {
8959
+ "version": "2.0.0",
8960
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
8961
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
8962
+ "dev": true
8963
+ }
8964
+ }
8965
+ },
8966
+ "posix-character-classes": {
8967
+ "version": "0.1.1",
8968
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
8969
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
8970
+ "dev": true
8971
+ },
8972
+ "postcss": {
8973
+ "version": "7.0.17",
8974
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz",
8975
+ "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==",
8976
+ "dev": true,
8977
+ "requires": {
8978
+ "chalk": "^2.4.2",
8979
+ "source-map": "^0.6.1",
8980
+ "supports-color": "^6.1.0"
8981
+ },
8982
+ "dependencies": {
8983
+ "source-map": {
8984
+ "version": "0.6.1",
8985
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
8986
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
8987
+ "dev": true
8988
+ },
8989
+ "supports-color": {
8990
+ "version": "6.1.0",
8991
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
8992
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
8993
+ "dev": true,
8994
+ "requires": {
8995
+ "has-flag": "^3.0.0"
8996
+ }
8997
+ }
8998
+ }
8999
+ },
9000
+ "postcss-html": {
9001
+ "version": "0.36.0",
9002
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
9003
+ "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
9004
+ "dev": true,
9005
+ "requires": {
9006
+ "htmlparser2": "^3.10.0"
9007
+ }
9008
+ },
9009
+ "postcss-jsx": {
9010
+ "version": "0.36.1",
9011
+ "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.1.tgz",
9012
+ "integrity": "sha512-xaZpy01YR7ijsFUtu5rViYCFHurFIPHir+faiOQp8g/NfTfWqZCKDhKrydQZ4d8WlSAmVdXGwLjpFbsNUI26Sw==",
9013
+ "dev": true,
9014
+ "requires": {
9015
+ "@babel/core": ">=7.2.2"
9016
+ }
9017
+ },
9018
+ "postcss-less": {
9019
+ "version": "3.1.4",
9020
+ "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
9021
+ "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
9022
+ "dev": true,
9023
+ "requires": {
9024
+ "postcss": "^7.0.14"
9025
+ }
9026
+ },
9027
+ "postcss-load-config": {
9028
+ "version": "2.1.0",
9029
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
9030
+ "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
9031
+ "dev": true,
9032
+ "requires": {
9033
+ "cosmiconfig": "^5.0.0",
9034
+ "import-cwd": "^2.0.0"
9035
+ }
9036
+ },
9037
+ "postcss-loader": {
9038
+ "version": "3.0.0",
9039
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
9040
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
9041
+ "dev": true,
9042
+ "requires": {
9043
+ "loader-utils": "^1.1.0",
9044
+ "postcss": "^7.0.0",
9045
+ "postcss-load-config": "^2.0.0",
9046
+ "schema-utils": "^1.0.0"
9047
+ },
9048
+ "dependencies": {
9049
+ "schema-utils": {
9050
+ "version": "1.0.0",
9051
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
9052
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
9053
+ "dev": true,
9054
+ "requires": {
9055
+ "ajv": "^6.1.0",
9056
+ "ajv-errors": "^1.0.0",
9057
+ "ajv-keywords": "^3.1.0"
9058
+ }
9059
+ }
9060
+ }
9061
+ },
9062
+ "postcss-markdown": {
9063
+ "version": "0.36.0",
9064
+ "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz",
9065
+ "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==",
9066
+ "dev": true,
9067
+ "requires": {
9068
+ "remark": "^10.0.1",
9069
+ "unist-util-find-all-after": "^1.0.2"
9070
+ }
9071
+ },
9072
+ "postcss-media-query-parser": {
9073
+ "version": "0.2.3",
9074
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
9075
+ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
9076
+ "dev": true
9077
+ },
9078
+ "postcss-modules-extract-imports": {
9079
+ "version": "2.0.0",
9080
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
9081
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
9082
+ "dev": true,
9083
+ "requires": {
9084
+ "postcss": "^7.0.5"
9085
+ }
9086
+ },
9087
+ "postcss-modules-local-by-default": {
9088
+ "version": "2.0.6",
9089
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
9090
+ "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
9091
+ "dev": true,
9092
+ "requires": {
9093
+ "postcss": "^7.0.6",
9094
+ "postcss-selector-parser": "^6.0.0",
9095
+ "postcss-value-parser": "^3.3.1"
9096
+ },
9097
+ "dependencies": {
9098
+ "postcss-selector-parser": {
9099
+ "version": "6.0.2",
9100
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
9101
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
9102
+ "dev": true,
9103
+ "requires": {
9104
+ "cssesc": "^3.0.0",
9105
+ "indexes-of": "^1.0.1",
9106
+ "uniq": "^1.0.1"
9107
+ }
9108
+ }
9109
+ }
9110
+ },
9111
+ "postcss-modules-scope": {
9112
+ "version": "2.1.0",
9113
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz",
9114
+ "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==",
9115
+ "dev": true,
9116
+ "requires": {
9117
+ "postcss": "^7.0.6",
9118
+ "postcss-selector-parser": "^6.0.0"
9119
+ },
9120
+ "dependencies": {
9121
+ "postcss-selector-parser": {
9122
+ "version": "6.0.2",
9123
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
9124
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
9125
+ "dev": true,
9126
+ "requires": {
9127
+ "cssesc": "^3.0.0",
9128
+ "indexes-of": "^1.0.1",
9129
+ "uniq": "^1.0.1"
9130
+ }
9131
+ }
9132
+ }
9133
+ },
9134
+ "postcss-modules-values": {
9135
+ "version": "2.0.0",
9136
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
9137
+ "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
9138
+ "dev": true,
9139
+ "requires": {
9140
+ "icss-replace-symbols": "^1.1.0",
9141
+ "postcss": "^7.0.6"
9142
+ }
9143
+ },
9144
+ "postcss-reporter": {
9145
+ "version": "6.0.1",
9146
+ "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz",
9147
+ "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==",
9148
+ "dev": true,
9149
+ "requires": {
9150
+ "chalk": "^2.4.1",
9151
+ "lodash": "^4.17.11",
9152
+ "log-symbols": "^2.2.0",
9153
+ "postcss": "^7.0.7"
9154
+ }
9155
+ },
9156
+ "postcss-resolve-nested-selector": {
9157
+ "version": "0.1.1",
9158
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
9159
+ "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
9160
+ "dev": true
9161
+ },
9162
+ "postcss-safe-parser": {
9163
+ "version": "4.0.1",
9164
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
9165
+ "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
9166
+ "dev": true,
9167
+ "requires": {
9168
+ "postcss": "^7.0.0"
9169
+ }
9170
+ },
9171
+ "postcss-sass": {
9172
+ "version": "0.3.5",
9173
+ "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.3.5.tgz",
9174
+ "integrity": "sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==",
9175
+ "dev": true,
9176
+ "requires": {
9177
+ "gonzales-pe": "^4.2.3",
9178
+ "postcss": "^7.0.1"
9179
+ }
9180
+ },
9181
+ "postcss-scss": {
9182
+ "version": "2.0.0",
9183
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz",
9184
+ "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==",
9185
+ "dev": true,
9186
+ "requires": {
9187
+ "postcss": "^7.0.0"
9188
+ }
9189
+ },
9190
+ "postcss-selector-parser": {
9191
+ "version": "3.1.1",
9192
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
9193
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
9194
+ "dev": true,
9195
+ "requires": {
9196
+ "dot-prop": "^4.1.1",
9197
+ "indexes-of": "^1.0.1",
9198
+ "uniq": "^1.0.1"
9199
+ }
9200
+ },
9201
+ "postcss-syntax": {
9202
+ "version": "0.36.2",
9203
+ "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
9204
+ "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
9205
+ "dev": true
9206
+ },
9207
+ "postcss-value-parser": {
9208
+ "version": "3.3.1",
9209
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
9210
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
9211
+ "dev": true
9212
+ },
9213
+ "prelude-ls": {
9214
+ "version": "1.1.2",
9215
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
9216
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
9217
+ "dev": true
9218
+ },
9219
+ "pretty-format": {
9220
+ "version": "24.8.0",
9221
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz",
9222
+ "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==",
9223
+ "dev": true,
9224
+ "requires": {
9225
+ "@jest/types": "^24.8.0",
9226
+ "ansi-regex": "^4.0.0",
9227
+ "ansi-styles": "^3.2.0",
9228
+ "react-is": "^16.8.4"
9229
+ }
9230
+ },
9231
+ "private": {
9232
+ "version": "0.1.8",
9233
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
9234
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
9235
+ "dev": true
9236
+ },
9237
+ "process": {
9238
+ "version": "0.11.10",
9239
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
9240
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
9241
+ "dev": true
9242
+ },
9243
+ "process-nextick-args": {
9244
+ "version": "2.0.1",
9245
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
9246
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
9247
+ "dev": true
9248
+ },
9249
+ "progress": {
9250
+ "version": "2.0.3",
9251
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
9252
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
9253
+ "dev": true
9254
+ },
9255
+ "promise-inflight": {
9256
+ "version": "1.0.1",
9257
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
9258
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
9259
+ "dev": true
9260
+ },
9261
+ "prompts": {
9262
+ "version": "2.1.0",
9263
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz",
9264
+ "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==",
9265
+ "dev": true,
9266
+ "requires": {
9267
+ "kleur": "^3.0.2",
9268
+ "sisteransi": "^1.0.0"
9269
+ }
9270
+ },
9271
+ "prop-types": {
9272
+ "version": "15.7.2",
9273
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
9274
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
9275
+ "dev": true,
9276
+ "requires": {
9277
+ "loose-envify": "^1.4.0",
9278
+ "object-assign": "^4.1.1",
9279
+ "react-is": "^16.8.1"
9280
+ }
9281
+ },
9282
+ "prop-types-exact": {
9283
+ "version": "1.2.0",
9284
+ "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
9285
+ "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
9286
+ "dev": true,
9287
+ "requires": {
9288
+ "has": "^1.0.3",
9289
+ "object.assign": "^4.1.0",
9290
+ "reflect.ownkeys": "^0.2.0"
9291
+ }
9292
+ },
9293
+ "proxy-addr": {
9294
+ "version": "2.0.5",
9295
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
9296
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
9297
+ "dev": true,
9298
+ "requires": {
9299
+ "forwarded": "~0.1.2",
9300
+ "ipaddr.js": "1.9.0"
9301
+ }
9302
+ },
9303
+ "proxy-from-env": {
9304
+ "version": "1.0.0",
9305
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
9306
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
9307
+ "dev": true
9308
+ },
9309
+ "prr": {
9310
+ "version": "1.0.1",
9311
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
9312
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
9313
+ "dev": true
9314
+ },
9315
+ "pseudomap": {
9316
+ "version": "1.0.2",
9317
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
9318
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
9319
+ "dev": true
9320
+ },
9321
+ "psl": {
9322
+ "version": "1.1.33",
9323
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz",
9324
+ "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==",
9325
+ "dev": true
9326
+ },
9327
+ "public-encrypt": {
9328
+ "version": "4.0.3",
9329
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
9330
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
9331
+ "dev": true,
9332
+ "requires": {
9333
+ "bn.js": "^4.1.0",
9334
+ "browserify-rsa": "^4.0.0",
9335
+ "create-hash": "^1.1.0",
9336
+ "parse-asn1": "^5.0.0",
9337
+ "randombytes": "^2.0.1",
9338
+ "safe-buffer": "^5.1.2"
9339
+ }
9340
+ },
9341
+ "pump": {
9342
+ "version": "2.0.1",
9343
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
9344
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
9345
+ "dev": true,
9346
+ "requires": {
9347
+ "end-of-stream": "^1.1.0",
9348
+ "once": "^1.3.1"
9349
+ }
9350
+ },
9351
+ "pumpify": {
9352
+ "version": "1.5.1",
9353
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
9354
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
9355
+ "dev": true,
9356
+ "requires": {
9357
+ "duplexify": "^3.6.0",
9358
+ "inherits": "^2.0.3",
9359
+ "pump": "^2.0.0"
9360
+ }
9361
+ },
9362
+ "punycode": {
9363
+ "version": "2.1.1",
9364
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
9365
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
9366
+ "dev": true
9367
+ },
9368
+ "puppeteer": {
9369
+ "version": "1.6.1",
9370
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.6.1.tgz",
9371
+ "integrity": "sha512-qz6DLwK+PhlBMjJZOMOsgVCnweYLtmiqnmJYUDPT++ElMz+cQgbsCNKPw4YDVpg3RTbsRX/pqQqr20zrp0cuKw==",
9372
+ "dev": true,
9373
+ "requires": {
9374
+ "debug": "^3.1.0",
9375
+ "extract-zip": "^1.6.6",
9376
+ "https-proxy-agent": "^2.2.1",
9377
+ "mime": "^2.0.3",
9378
+ "progress": "^2.0.0",
9379
+ "proxy-from-env": "^1.0.0",
9380
+ "rimraf": "^2.6.1",
9381
+ "ws": "^5.1.1"
9382
+ },
9383
+ "dependencies": {
9384
+ "debug": {
9385
+ "version": "3.2.6",
9386
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
9387
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
9388
+ "dev": true,
9389
+ "requires": {
9390
+ "ms": "^2.1.1"
9391
+ }
9392
+ }
9393
+ }
9394
+ },
9395
+ "qs": {
9396
+ "version": "6.5.2",
9397
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
9398
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
9399
+ "dev": true
9400
+ },
9401
+ "querystring": {
9402
+ "version": "0.2.0",
9403
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
9404
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
9405
+ "dev": true
9406
+ },
9407
+ "querystring-es3": {
9408
+ "version": "0.2.1",
9409
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
9410
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
9411
+ "dev": true
9412
+ },
9413
+ "quick-lru": {
9414
+ "version": "1.1.0",
9415
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
9416
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
9417
+ "dev": true
9418
+ },
9419
+ "raf": {
9420
+ "version": "3.4.1",
9421
+ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
9422
+ "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
9423
+ "dev": true,
9424
+ "requires": {
9425
+ "performance-now": "^2.1.0"
9426
+ }
9427
+ },
9428
+ "railroad-diagrams": {
9429
+ "version": "1.0.0",
9430
+ "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
9431
+ "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
9432
+ "dev": true
9433
+ },
9434
+ "randexp": {
9435
+ "version": "0.4.6",
9436
+ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
9437
+ "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
9438
+ "dev": true,
9439
+ "requires": {
9440
+ "discontinuous-range": "1.0.0",
9441
+ "ret": "~0.1.10"
9442
+ }
9443
+ },
9444
+ "randombytes": {
9445
+ "version": "2.1.0",
9446
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
9447
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
9448
+ "dev": true,
9449
+ "requires": {
9450
+ "safe-buffer": "^5.1.0"
9451
+ }
9452
+ },
9453
+ "randomfill": {
9454
+ "version": "1.0.4",
9455
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
9456
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
9457
+ "dev": true,
9458
+ "requires": {
9459
+ "randombytes": "^2.0.5",
9460
+ "safe-buffer": "^5.1.0"
9461
+ }
9462
+ },
9463
+ "range-parser": {
9464
+ "version": "1.2.1",
9465
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
9466
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
9467
+ "dev": true
9468
+ },
9469
+ "raw-body": {
9470
+ "version": "2.4.0",
9471
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
9472
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
9473
+ "dev": true,
9474
+ "requires": {
9475
+ "bytes": "3.1.0",
9476
+ "http-errors": "1.7.2",
9477
+ "iconv-lite": "0.4.24",
9478
+ "unpipe": "1.0.0"
9479
+ }
9480
+ },
9481
+ "react-is": {
9482
+ "version": "16.8.6",
9483
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
9484
+ "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
9485
+ "dev": true
9486
+ },
9487
+ "react-test-renderer": {
9488
+ "version": "16.8.6",
9489
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz",
9490
+ "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==",
9491
+ "dev": true,
9492
+ "requires": {
9493
+ "object-assign": "^4.1.1",
9494
+ "prop-types": "^15.6.2",
9495
+ "react-is": "^16.8.6",
9496
+ "scheduler": "^0.13.6"
9497
+ }
9498
+ },
9499
+ "read-pkg": {
9500
+ "version": "3.0.0",
9501
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
9502
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
9503
+ "dev": true,
9504
+ "requires": {
9505
+ "load-json-file": "^4.0.0",
9506
+ "normalize-package-data": "^2.3.2",
9507
+ "path-type": "^3.0.0"
9508
+ }
9509
+ },
9510
+ "read-pkg-up": {
9511
+ "version": "1.0.1",
9512
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
9513
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
9514
+ "dev": true,
9515
+ "requires": {
9516
+ "find-up": "^1.0.0",
9517
+ "read-pkg": "^1.0.0"
9518
+ },
9519
+ "dependencies": {
9520
+ "find-up": {
9521
+ "version": "1.1.2",
9522
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
9523
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
9524
+ "dev": true,
9525
+ "requires": {
9526
+ "path-exists": "^2.0.0",
9527
+ "pinkie-promise": "^2.0.0"
9528
+ }
9529
+ },
9530
+ "load-json-file": {
9531
+ "version": "1.1.0",
9532
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
9533
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
9534
+ "dev": true,
9535
+ "requires": {
9536
+ "graceful-fs": "^4.1.2",
9537
+ "parse-json": "^2.2.0",
9538
+ "pify": "^2.0.0",
9539
+ "pinkie-promise": "^2.0.0",
9540
+ "strip-bom": "^2.0.0"
9541
+ }
9542
+ },
9543
+ "parse-json": {
9544
+ "version": "2.2.0",
9545
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
9546
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
9547
+ "dev": true,
9548
+ "requires": {
9549
+ "error-ex": "^1.2.0"
9550
+ }
9551
+ },
9552
+ "path-exists": {
9553
+ "version": "2.1.0",
9554
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
9555
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
9556
+ "dev": true,
9557
+ "requires": {
9558
+ "pinkie-promise": "^2.0.0"
9559
+ }
9560
+ },
9561
+ "path-type": {
9562
+ "version": "1.1.0",
9563
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
9564
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
9565
+ "dev": true,
9566
+ "requires": {
9567
+ "graceful-fs": "^4.1.2",
9568
+ "pify": "^2.0.0",
9569
+ "pinkie-promise": "^2.0.0"
9570
+ }
9571
+ },
9572
+ "pify": {
9573
+ "version": "2.3.0",
9574
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
9575
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
9576
+ "dev": true
9577
+ },
9578
+ "read-pkg": {
9579
+ "version": "1.1.0",
9580
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
9581
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
9582
+ "dev": true,
9583
+ "requires": {
9584
+ "load-json-file": "^1.0.0",
9585
+ "normalize-package-data": "^2.3.2",
9586
+ "path-type": "^1.0.0"
9587
+ }
9588
+ },
9589
+ "strip-bom": {
9590
+ "version": "2.0.0",
9591
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
9592
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
9593
+ "dev": true,
9594
+ "requires": {
9595
+ "is-utf8": "^0.2.0"
9596
+ }
9597
+ }
9598
+ }
9599
+ },
9600
+ "readable-stream": {
9601
+ "version": "2.3.6",
9602
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
9603
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
9604
+ "dev": true,
9605
+ "requires": {
9606
+ "core-util-is": "~1.0.0",
9607
+ "inherits": "~2.0.3",
9608
+ "isarray": "~1.0.0",
9609
+ "process-nextick-args": "~2.0.0",
9610
+ "safe-buffer": "~5.1.1",
9611
+ "string_decoder": "~1.1.1",
9612
+ "util-deprecate": "~1.0.1"
9613
+ }
9614
+ },
9615
+ "readdirp": {
9616
+ "version": "2.2.1",
9617
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
9618
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
9619
+ "dev": true,
9620
+ "requires": {
9621
+ "graceful-fs": "^4.1.11",
9622
+ "micromatch": "^3.1.10",
9623
+ "readable-stream": "^2.0.2"
9624
+ }
9625
+ },
9626
+ "realpath-native": {
9627
+ "version": "1.1.0",
9628
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
9629
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
9630
+ "dev": true,
9631
+ "requires": {
9632
+ "util.promisify": "^1.0.0"
9633
+ }
9634
+ },
9635
+ "redent": {
9636
+ "version": "2.0.0",
9637
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
9638
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
9639
+ "dev": true,
9640
+ "requires": {
9641
+ "indent-string": "^3.0.0",
9642
+ "strip-indent": "^2.0.0"
9643
+ }
9644
+ },
9645
+ "reflect.ownkeys": {
9646
+ "version": "0.2.0",
9647
+ "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
9648
+ "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
9649
+ "dev": true
9650
+ },
9651
+ "regenerate": {
9652
+ "version": "1.4.0",
9653
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
9654
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
9655
+ "dev": true
9656
+ },
9657
+ "regenerate-unicode-properties": {
9658
+ "version": "8.1.0",
9659
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
9660
+ "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
9661
+ "dev": true,
9662
+ "requires": {
9663
+ "regenerate": "^1.4.0"
9664
+ }
9665
+ },
9666
+ "regenerator-runtime": {
9667
+ "version": "0.13.2",
9668
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz",
9669
+ "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==",
9670
+ "dev": true
9671
+ },
9672
+ "regenerator-transform": {
9673
+ "version": "0.14.0",
9674
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz",
9675
+ "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==",
9676
+ "dev": true,
9677
+ "requires": {
9678
+ "private": "^0.1.6"
9679
+ }
9680
+ },
9681
+ "regex-not": {
9682
+ "version": "1.0.2",
9683
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
9684
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
9685
+ "dev": true,
9686
+ "requires": {
9687
+ "extend-shallow": "^3.0.2",
9688
+ "safe-regex": "^1.1.0"
9689
+ }
9690
+ },
9691
+ "regexp-tree": {
9692
+ "version": "0.1.10",
9693
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz",
9694
+ "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==",
9695
+ "dev": true
9696
+ },
9697
+ "regexpp": {
9698
+ "version": "2.0.1",
9699
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
9700
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
9701
+ "dev": true
9702
+ },
9703
+ "regexpu-core": {
9704
+ "version": "4.5.4",
9705
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
9706
+ "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
9707
+ "dev": true,
9708
+ "requires": {
9709
+ "regenerate": "^1.4.0",
9710
+ "regenerate-unicode-properties": "^8.0.2",
9711
+ "regjsgen": "^0.5.0",
9712
+ "regjsparser": "^0.6.0",
9713
+ "unicode-match-property-ecmascript": "^1.0.4",
9714
+ "unicode-match-property-value-ecmascript": "^1.1.0"
9715
+ }
9716
+ },
9717
+ "regjsgen": {
9718
+ "version": "0.5.0",
9719
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
9720
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
9721
+ "dev": true
9722
+ },
9723
+ "regjsparser": {
9724
+ "version": "0.6.0",
9725
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
9726
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
9727
+ "dev": true,
9728
+ "requires": {
9729
+ "jsesc": "~0.5.0"
9730
+ },
9731
+ "dependencies": {
9732
+ "jsesc": {
9733
+ "version": "0.5.0",
9734
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
9735
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
9736
+ "dev": true
9737
+ }
9738
+ }
9739
+ },
9740
+ "remark": {
9741
+ "version": "10.0.1",
9742
+ "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz",
9743
+ "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==",
9744
+ "dev": true,
9745
+ "requires": {
9746
+ "remark-parse": "^6.0.0",
9747
+ "remark-stringify": "^6.0.0",
9748
+ "unified": "^7.0.0"
9749
+ }
9750
+ },
9751
+ "remark-parse": {
9752
+ "version": "6.0.3",
9753
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz",
9754
+ "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==",
9755
+ "dev": true,
9756
+ "requires": {
9757
+ "collapse-white-space": "^1.0.2",
9758
+ "is-alphabetical": "^1.0.0",
9759
+ "is-decimal": "^1.0.0",
9760
+ "is-whitespace-character": "^1.0.0",
9761
+ "is-word-character": "^1.0.0",
9762
+ "markdown-escapes": "^1.0.0",
9763
+ "parse-entities": "^1.1.0",
9764
+ "repeat-string": "^1.5.4",
9765
+ "state-toggle": "^1.0.0",
9766
+ "trim": "0.0.1",
9767
+ "trim-trailing-lines": "^1.0.0",
9768
+ "unherit": "^1.0.4",
9769
+ "unist-util-remove-position": "^1.0.0",
9770
+ "vfile-location": "^2.0.0",
9771
+ "xtend": "^4.0.1"
9772
+ }
9773
+ },
9774
+ "remark-stringify": {
9775
+ "version": "6.0.4",
9776
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz",
9777
+ "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==",
9778
+ "dev": true,
9779
+ "requires": {
9780
+ "ccount": "^1.0.0",
9781
+ "is-alphanumeric": "^1.0.0",
9782
+ "is-decimal": "^1.0.0",
9783
+ "is-whitespace-character": "^1.0.0",
9784
+ "longest-streak": "^2.0.1",
9785
+ "markdown-escapes": "^1.0.0",
9786
+ "markdown-table": "^1.1.0",
9787
+ "mdast-util-compact": "^1.0.0",
9788
+ "parse-entities": "^1.0.2",
9789
+ "repeat-string": "^1.5.4",
9790
+ "state-toggle": "^1.0.0",
9791
+ "stringify-entities": "^1.0.1",
9792
+ "unherit": "^1.0.4",
9793
+ "xtend": "^4.0.1"
9794
+ }
9795
+ },
9796
+ "remove-trailing-separator": {
9797
+ "version": "1.1.0",
9798
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
9799
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
9800
+ "dev": true
9801
+ },
9802
+ "repeat-element": {
9803
+ "version": "1.1.3",
9804
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
9805
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
9806
+ "dev": true
9807
+ },
9808
+ "repeat-string": {
9809
+ "version": "1.6.1",
9810
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
9811
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
9812
+ "dev": true
9813
+ },
9814
+ "repeating": {
9815
+ "version": "2.0.1",
9816
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
9817
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
9818
+ "dev": true,
9819
+ "requires": {
9820
+ "is-finite": "^1.0.0"
9821
+ }
9822
+ },
9823
+ "replace-ext": {
9824
+ "version": "1.0.0",
9825
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
9826
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
9827
+ "dev": true
9828
+ },
9829
+ "request": {
9830
+ "version": "2.88.0",
9831
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
9832
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
9833
+ "dev": true,
9834
+ "requires": {
9835
+ "aws-sign2": "~0.7.0",
9836
+ "aws4": "^1.8.0",
9837
+ "caseless": "~0.12.0",
9838
+ "combined-stream": "~1.0.6",
9839
+ "extend": "~3.0.2",
9840
+ "forever-agent": "~0.6.1",
9841
+ "form-data": "~2.3.2",
9842
+ "har-validator": "~5.1.0",
9843
+ "http-signature": "~1.2.0",
9844
+ "is-typedarray": "~1.0.0",
9845
+ "isstream": "~0.1.2",
9846
+ "json-stringify-safe": "~5.0.1",
9847
+ "mime-types": "~2.1.19",
9848
+ "oauth-sign": "~0.9.0",
9849
+ "performance-now": "^2.1.0",
9850
+ "qs": "~6.5.2",
9851
+ "safe-buffer": "^5.1.2",
9852
+ "tough-cookie": "~2.4.3",
9853
+ "tunnel-agent": "^0.6.0",
9854
+ "uuid": "^3.3.2"
9855
+ },
9856
+ "dependencies": {
9857
+ "punycode": {
9858
+ "version": "1.4.1",
9859
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
9860
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
9861
+ "dev": true
9862
+ },
9863
+ "tough-cookie": {
9864
+ "version": "2.4.3",
9865
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
9866
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
9867
+ "dev": true,
9868
+ "requires": {
9869
+ "psl": "^1.1.24",
9870
+ "punycode": "^1.4.1"
9871
+ }
9872
+ }
9873
+ }
9874
+ },
9875
+ "request-promise-core": {
9876
+ "version": "1.1.2",
9877
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
9878
+ "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
9879
+ "dev": true,
9880
+ "requires": {
9881
+ "lodash": "^4.17.11"
9882
+ }
9883
+ },
9884
+ "request-promise-native": {
9885
+ "version": "1.0.7",
9886
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
9887
+ "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
9888
+ "dev": true,
9889
+ "requires": {
9890
+ "request-promise-core": "1.1.2",
9891
+ "stealthy-require": "^1.1.1",
9892
+ "tough-cookie": "^2.3.3"
9893
+ }
9894
+ },
9895
+ "require-directory": {
9896
+ "version": "2.1.1",
9897
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
9898
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
9899
+ "dev": true
9900
+ },
9901
+ "require-main-filename": {
9902
+ "version": "2.0.0",
9903
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
9904
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
9905
+ "dev": true
9906
+ },
9907
+ "requireindex": {
9908
+ "version": "1.2.0",
9909
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
9910
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
9911
+ "dev": true
9912
+ },
9913
+ "resolve": {
9914
+ "version": "1.11.1",
9915
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
9916
+ "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
9917
+ "dev": true,
9918
+ "requires": {
9919
+ "path-parse": "^1.0.6"
9920
+ }
9921
+ },
9922
+ "resolve-bin": {
9923
+ "version": "0.4.0",
9924
+ "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.0.tgz",
9925
+ "integrity": "sha1-RxMiSYkRAa+xmZH+k3ywpfBy5dk=",
9926
+ "dev": true,
9927
+ "requires": {
9928
+ "find-parent-dir": "~0.3.0"
9929
+ }
9930
+ },
9931
+ "resolve-cwd": {
9932
+ "version": "2.0.0",
9933
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
9934
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
9935
+ "dev": true,
9936
+ "requires": {
9937
+ "resolve-from": "^3.0.0"
9938
+ },
9939
+ "dependencies": {
9940
+ "resolve-from": {
9941
+ "version": "3.0.0",
9942
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
9943
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
9944
+ "dev": true
9945
+ }
9946
+ }
9947
+ },
9948
+ "resolve-dir": {
9949
+ "version": "0.1.1",
9950
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
9951
+ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
9952
+ "dev": true,
9953
+ "requires": {
9954
+ "expand-tilde": "^1.2.2",
9955
+ "global-modules": "^0.2.3"
9956
+ }
9957
+ },
9958
+ "resolve-from": {
9959
+ "version": "4.0.0",
9960
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
9961
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
9962
+ "dev": true
9963
+ },
9964
+ "resolve-url": {
9965
+ "version": "0.2.1",
9966
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
9967
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
9968
+ "dev": true
9969
+ },
9970
+ "restore-cursor": {
9971
+ "version": "2.0.0",
9972
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
9973
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
9974
+ "dev": true,
9975
+ "requires": {
9976
+ "onetime": "^2.0.0",
9977
+ "signal-exit": "^3.0.2"
9978
+ }
9979
+ },
9980
+ "ret": {
9981
+ "version": "0.1.15",
9982
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
9983
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
9984
+ "dev": true
9985
+ },
9986
+ "rimraf": {
9987
+ "version": "2.6.3",
9988
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
9989
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
9990
+ "dev": true,
9991
+ "requires": {
9992
+ "glob": "^7.1.3"
9993
+ }
9994
+ },
9995
+ "ripemd160": {
9996
+ "version": "2.0.2",
9997
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
9998
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
9999
+ "dev": true,
10000
+ "requires": {
10001
+ "hash-base": "^3.0.0",
10002
+ "inherits": "^2.0.1"
10003
+ }
10004
+ },
10005
+ "rst-selector-parser": {
10006
+ "version": "2.2.3",
10007
+ "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
10008
+ "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
10009
+ "dev": true,
10010
+ "requires": {
10011
+ "lodash.flattendeep": "^4.4.0",
10012
+ "nearley": "^2.7.10"
10013
+ }
10014
+ },
10015
+ "rsvp": {
10016
+ "version": "4.8.5",
10017
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
10018
+ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
10019
+ "dev": true
10020
+ },
10021
+ "run-async": {
10022
+ "version": "2.3.0",
10023
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
10024
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
10025
+ "dev": true,
10026
+ "requires": {
10027
+ "is-promise": "^2.1.0"
10028
+ }
10029
+ },
10030
+ "run-parallel": {
10031
+ "version": "1.1.9",
10032
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
10033
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
10034
+ "dev": true
10035
+ },
10036
+ "run-queue": {
10037
+ "version": "1.0.3",
10038
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
10039
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
10040
+ "dev": true,
10041
+ "requires": {
10042
+ "aproba": "^1.1.1"
10043
+ }
10044
+ },
10045
+ "rx": {
10046
+ "version": "4.1.0",
10047
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
10048
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=",
10049
+ "dev": true
10050
+ },
10051
+ "rxjs": {
10052
+ "version": "6.5.2",
10053
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
10054
+ "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
10055
+ "dev": true,
10056
+ "requires": {
10057
+ "tslib": "^1.9.0"
10058
+ }
10059
+ },
10060
+ "safe-buffer": {
10061
+ "version": "5.1.2",
10062
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
10063
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
10064
+ "dev": true
10065
+ },
10066
+ "safe-json-parse": {
10067
+ "version": "1.0.1",
10068
+ "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
10069
+ "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
10070
+ "dev": true
10071
+ },
10072
+ "safe-regex": {
10073
+ "version": "1.1.0",
10074
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
10075
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
10076
+ "dev": true,
10077
+ "requires": {
10078
+ "ret": "~0.1.10"
10079
+ }
10080
+ },
10081
+ "safer-buffer": {
10082
+ "version": "2.1.2",
10083
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
10084
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
10085
+ "dev": true
10086
+ },
10087
+ "sane": {
10088
+ "version": "4.1.0",
10089
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
10090
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
10091
+ "dev": true,
10092
+ "requires": {
10093
+ "@cnakazawa/watch": "^1.0.3",
10094
+ "anymatch": "^2.0.0",
10095
+ "capture-exit": "^2.0.0",
10096
+ "exec-sh": "^0.3.2",
10097
+ "execa": "^1.0.0",
10098
+ "fb-watchman": "^2.0.0",
10099
+ "micromatch": "^3.1.4",
10100
+ "minimist": "^1.1.1",
10101
+ "walker": "~1.0.5"
10102
+ }
10103
+ },
10104
+ "sass-graph": {
10105
+ "version": "2.2.4",
10106
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
10107
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
10108
+ "dev": true,
10109
+ "requires": {
10110
+ "glob": "^7.0.0",
10111
+ "lodash": "^4.0.0",
10112
+ "scss-tokenizer": "^0.2.3",
10113
+ "yargs": "^7.0.0"
10114
+ },
10115
+ "dependencies": {
10116
+ "ansi-regex": {
10117
+ "version": "2.1.1",
10118
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
10119
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
10120
+ "dev": true
10121
+ },
10122
+ "camelcase": {
10123
+ "version": "3.0.0",
10124
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
10125
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
10126
+ "dev": true
10127
+ },
10128
+ "cliui": {
10129
+ "version": "3.2.0",
10130
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
10131
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
10132
+ "dev": true,
10133
+ "requires": {
10134
+ "string-width": "^1.0.1",
10135
+ "strip-ansi": "^3.0.1",
10136
+ "wrap-ansi": "^2.0.0"
10137
+ }
10138
+ },
10139
+ "invert-kv": {
10140
+ "version": "1.0.0",
10141
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
10142
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
10143
+ "dev": true
10144
+ },
10145
+ "is-fullwidth-code-point": {
10146
+ "version": "1.0.0",
10147
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
10148
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
10149
+ "dev": true,
10150
+ "requires": {
10151
+ "number-is-nan": "^1.0.0"
10152
+ }
10153
+ },
10154
+ "lcid": {
10155
+ "version": "1.0.0",
10156
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
10157
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
10158
+ "dev": true,
10159
+ "requires": {
10160
+ "invert-kv": "^1.0.0"
10161
+ }
10162
+ },
10163
+ "os-locale": {
10164
+ "version": "1.4.0",
10165
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
10166
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
10167
+ "dev": true,
10168
+ "requires": {
10169
+ "lcid": "^1.0.0"
10170
+ }
10171
+ },
10172
+ "require-main-filename": {
10173
+ "version": "1.0.1",
10174
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
10175
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
10176
+ "dev": true
10177
+ },
10178
+ "string-width": {
10179
+ "version": "1.0.2",
10180
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
10181
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
10182
+ "dev": true,
10183
+ "requires": {
10184
+ "code-point-at": "^1.0.0",
10185
+ "is-fullwidth-code-point": "^1.0.0",
10186
+ "strip-ansi": "^3.0.0"
10187
+ }
10188
+ },
10189
+ "strip-ansi": {
10190
+ "version": "3.0.1",
10191
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
10192
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
10193
+ "dev": true,
10194
+ "requires": {
10195
+ "ansi-regex": "^2.0.0"
10196
+ }
10197
+ },
10198
+ "which-module": {
10199
+ "version": "1.0.0",
10200
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
10201
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
10202
+ "dev": true
10203
+ },
10204
+ "y18n": {
10205
+ "version": "3.2.1",
10206
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
10207
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
10208
+ "dev": true
10209
+ },
10210
+ "yargs": {
10211
+ "version": "7.1.0",
10212
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
10213
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
10214
+ "dev": true,
10215
+ "requires": {
10216
+ "camelcase": "^3.0.0",
10217
+ "cliui": "^3.2.0",
10218
+ "decamelize": "^1.1.1",
10219
+ "get-caller-file": "^1.0.1",
10220
+ "os-locale": "^1.4.0",
10221
+ "read-pkg-up": "^1.0.1",
10222
+ "require-directory": "^2.1.1",
10223
+ "require-main-filename": "^1.0.1",
10224
+ "set-blocking": "^2.0.0",
10225
+ "string-width": "^1.0.2",
10226
+ "which-module": "^1.0.0",
10227
+ "y18n": "^3.2.1",
10228
+ "yargs-parser": "^5.0.0"
10229
+ }
10230
+ },
10231
+ "yargs-parser": {
10232
+ "version": "5.0.0",
10233
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
10234
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
10235
+ "dev": true,
10236
+ "requires": {
10237
+ "camelcase": "^3.0.0"
10238
+ }
10239
+ }
10240
+ }
10241
+ },
10242
+ "sass-loader": {
10243
+ "version": "7.1.0",
10244
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
10245
+ "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
10246
+ "dev": true,
10247
+ "requires": {
10248
+ "clone-deep": "^2.0.1",
10249
+ "loader-utils": "^1.0.1",
10250
+ "lodash.tail": "^4.1.1",
10251
+ "neo-async": "^2.5.0",
10252
+ "pify": "^3.0.0",
10253
+ "semver": "^5.5.0"
10254
+ },
10255
+ "dependencies": {
10256
+ "clone-deep": {
10257
+ "version": "2.0.2",
10258
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
10259
+ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
10260
+ "dev": true,
10261
+ "requires": {
10262
+ "for-own": "^1.0.0",
10263
+ "is-plain-object": "^2.0.4",
10264
+ "kind-of": "^6.0.0",
10265
+ "shallow-clone": "^1.0.0"
10266
+ }
10267
+ },
10268
+ "for-own": {
10269
+ "version": "1.0.0",
10270
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
10271
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
10272
+ "dev": true,
10273
+ "requires": {
10274
+ "for-in": "^1.0.1"
10275
+ }
10276
+ },
10277
+ "shallow-clone": {
10278
+ "version": "1.0.0",
10279
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz",
10280
+ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==",
10281
+ "dev": true,
10282
+ "requires": {
10283
+ "is-extendable": "^0.1.1",
10284
+ "kind-of": "^5.0.0",
10285
+ "mixin-object": "^2.0.1"
10286
+ },
10287
+ "dependencies": {
10288
+ "kind-of": {
10289
+ "version": "5.1.0",
10290
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
10291
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
10292
+ "dev": true
10293
+ }
10294
+ }
10295
+ }
10296
+ }
10297
+ },
10298
+ "sax": {
10299
+ "version": "1.2.4",
10300
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
10301
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
10302
+ "dev": true
10303
+ },
10304
+ "scheduler": {
10305
+ "version": "0.13.6",
10306
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
10307
+ "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
10308
+ "dev": true,
10309
+ "requires": {
10310
+ "loose-envify": "^1.1.0",
10311
+ "object-assign": "^4.1.1"
10312
+ }
10313
+ },
10314
+ "schema-utils": {
10315
+ "version": "0.4.7",
10316
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
10317
+ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
10318
+ "dev": true,
10319
+ "requires": {
10320
+ "ajv": "^6.1.0",
10321
+ "ajv-keywords": "^3.1.0"
10322
+ }
10323
+ },
10324
+ "scss-tokenizer": {
10325
+ "version": "0.2.3",
10326
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
10327
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
10328
+ "dev": true,
10329
+ "requires": {
10330
+ "js-base64": "^2.1.8",
10331
+ "source-map": "^0.4.2"
10332
+ },
10333
+ "dependencies": {
10334
+ "source-map": {
10335
+ "version": "0.4.4",
10336
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
10337
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
10338
+ "dev": true,
10339
+ "requires": {
10340
+ "amdefine": ">=0.0.4"
10341
+ }
10342
+ }
10343
+ }
10344
+ },
10345
+ "semver": {
10346
+ "version": "5.7.0",
10347
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
10348
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
10349
+ "dev": true
10350
+ },
10351
+ "send": {
10352
+ "version": "0.17.1",
10353
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
10354
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
10355
+ "dev": true,
10356
+ "requires": {
10357
+ "debug": "2.6.9",
10358
+ "depd": "~1.1.2",
10359
+ "destroy": "~1.0.4",
10360
+ "encodeurl": "~1.0.2",
10361
+ "escape-html": "~1.0.3",
10362
+ "etag": "~1.8.1",
10363
+ "fresh": "0.5.2",
10364
+ "http-errors": "~1.7.2",
10365
+ "mime": "1.6.0",
10366
+ "ms": "2.1.1",
10367
+ "on-finished": "~2.3.0",
10368
+ "range-parser": "~1.2.1",
10369
+ "statuses": "~1.5.0"
10370
+ },
10371
+ "dependencies": {
10372
+ "debug": {
10373
+ "version": "2.6.9",
10374
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
10375
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
10376
+ "dev": true,
10377
+ "requires": {
10378
+ "ms": "2.0.0"
10379
+ },
10380
+ "dependencies": {
10381
+ "ms": {
10382
+ "version": "2.0.0",
10383
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
10384
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
10385
+ "dev": true
10386
+ }
10387
+ }
10388
+ },
10389
+ "mime": {
10390
+ "version": "1.6.0",
10391
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
10392
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
10393
+ "dev": true
10394
+ },
10395
+ "ms": {
10396
+ "version": "2.1.1",
10397
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
10398
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
10399
+ "dev": true
10400
+ }
10401
+ }
10402
+ },
10403
+ "serialize-javascript": {
10404
+ "version": "1.7.0",
10405
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
10406
+ "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
10407
+ "dev": true
10408
+ },
10409
+ "serve-static": {
10410
+ "version": "1.14.1",
10411
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
10412
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
10413
+ "dev": true,
10414
+ "requires": {
10415
+ "encodeurl": "~1.0.2",
10416
+ "escape-html": "~1.0.3",
10417
+ "parseurl": "~1.3.3",
10418
+ "send": "0.17.1"
10419
+ }
10420
+ },
10421
+ "set-blocking": {
10422
+ "version": "2.0.0",
10423
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
10424
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
10425
+ "dev": true
10426
+ },
10427
+ "set-value": {
10428
+ "version": "2.0.0",
10429
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
10430
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
10431
+ "dev": true,
10432
+ "requires": {
10433
+ "extend-shallow": "^2.0.1",
10434
+ "is-extendable": "^0.1.1",
10435
+ "is-plain-object": "^2.0.3",
10436
+ "split-string": "^3.0.1"
10437
+ },
10438
+ "dependencies": {
10439
+ "extend-shallow": {
10440
+ "version": "2.0.1",
10441
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
10442
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
10443
+ "dev": true,
10444
+ "requires": {
10445
+ "is-extendable": "^0.1.0"
10446
+ }
10447
+ }
10448
+ }
10449
+ },
10450
+ "setimmediate": {
10451
+ "version": "1.0.5",
10452
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
10453
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
10454
+ "dev": true
10455
+ },
10456
+ "setprototypeof": {
10457
+ "version": "1.1.1",
10458
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
10459
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
10460
+ "dev": true
10461
+ },
10462
+ "sha.js": {
10463
+ "version": "2.4.11",
10464
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
10465
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
10466
+ "dev": true,
10467
+ "requires": {
10468
+ "inherits": "^2.0.1",
10469
+ "safe-buffer": "^5.0.1"
10470
+ }
10471
+ },
10472
+ "shallow-clone": {
10473
+ "version": "0.1.2",
10474
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
10475
+ "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
10476
+ "dev": true,
10477
+ "requires": {
10478
+ "is-extendable": "^0.1.1",
10479
+ "kind-of": "^2.0.1",
10480
+ "lazy-cache": "^0.2.3",
10481
+ "mixin-object": "^2.0.1"
10482
+ },
10483
+ "dependencies": {
10484
+ "kind-of": {
10485
+ "version": "2.0.1",
10486
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
10487
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
10488
+ "dev": true,
10489
+ "requires": {
10490
+ "is-buffer": "^1.0.2"
10491
+ }
10492
+ },
10493
+ "lazy-cache": {
10494
+ "version": "0.2.7",
10495
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
10496
+ "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
10497
+ "dev": true
10498
+ }
10499
+ }
10500
+ },
10501
+ "shebang-command": {
10502
+ "version": "1.2.0",
10503
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
10504
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
10505
+ "dev": true,
10506
+ "requires": {
10507
+ "shebang-regex": "^1.0.0"
10508
+ }
10509
+ },
10510
+ "shebang-regex": {
10511
+ "version": "1.0.0",
10512
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
10513
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
10514
+ "dev": true
10515
+ },
10516
+ "shellwords": {
10517
+ "version": "0.1.1",
10518
+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
10519
+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
10520
+ "dev": true
10521
+ },
10522
+ "signal-exit": {
10523
+ "version": "3.0.2",
10524
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
10525
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
10526
+ "dev": true
10527
+ },
10528
+ "sisteransi": {
10529
+ "version": "1.0.0",
10530
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz",
10531
+ "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==",
10532
+ "dev": true
10533
+ },
10534
+ "slash": {
10535
+ "version": "2.0.0",
10536
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
10537
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
10538
+ "dev": true
10539
+ },
10540
+ "slice-ansi": {
10541
+ "version": "2.1.0",
10542
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
10543
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
10544
+ "dev": true,
10545
+ "requires": {
10546
+ "ansi-styles": "^3.2.0",
10547
+ "astral-regex": "^1.0.0",
10548
+ "is-fullwidth-code-point": "^2.0.0"
10549
+ }
10550
+ },
10551
+ "snapdragon": {
10552
+ "version": "0.8.2",
10553
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
10554
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
10555
+ "dev": true,
10556
+ "requires": {
10557
+ "base": "^0.11.1",
10558
+ "debug": "^2.2.0",
10559
+ "define-property": "^0.2.5",
10560
+ "extend-shallow": "^2.0.1",
10561
+ "map-cache": "^0.2.2",
10562
+ "source-map": "^0.5.6",
10563
+ "source-map-resolve": "^0.5.0",
10564
+ "use": "^3.1.0"
10565
+ },
10566
+ "dependencies": {
10567
+ "debug": {
10568
+ "version": "2.6.9",
10569
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
10570
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
10571
+ "dev": true,
10572
+ "requires": {
10573
+ "ms": "2.0.0"
10574
+ }
10575
+ },
10576
+ "define-property": {
10577
+ "version": "0.2.5",
10578
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
10579
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
10580
+ "dev": true,
10581
+ "requires": {
10582
+ "is-descriptor": "^0.1.0"
10583
+ }
10584
+ },
10585
+ "extend-shallow": {
10586
+ "version": "2.0.1",
10587
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
10588
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
10589
+ "dev": true,
10590
+ "requires": {
10591
+ "is-extendable": "^0.1.0"
10592
+ }
10593
+ },
10594
+ "ms": {
10595
+ "version": "2.0.0",
10596
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
10597
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
10598
+ "dev": true
10599
+ }
10600
+ }
10601
+ },
10602
+ "snapdragon-node": {
10603
+ "version": "2.1.1",
10604
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
10605
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
10606
+ "dev": true,
10607
+ "requires": {
10608
+ "define-property": "^1.0.0",
10609
+ "isobject": "^3.0.0",
10610
+ "snapdragon-util": "^3.0.1"
10611
+ },
10612
+ "dependencies": {
10613
+ "define-property": {
10614
+ "version": "1.0.0",
10615
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
10616
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
10617
+ "dev": true,
10618
+ "requires": {
10619
+ "is-descriptor": "^1.0.0"
10620
+ }
10621
+ },
10622
+ "is-accessor-descriptor": {
10623
+ "version": "1.0.0",
10624
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
10625
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
10626
+ "dev": true,
10627
+ "requires": {
10628
+ "kind-of": "^6.0.0"
10629
+ }
10630
+ },
10631
+ "is-data-descriptor": {
10632
+ "version": "1.0.0",
10633
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
10634
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
10635
+ "dev": true,
10636
+ "requires": {
10637
+ "kind-of": "^6.0.0"
10638
+ }
10639
+ },
10640
+ "is-descriptor": {
10641
+ "version": "1.0.2",
10642
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
10643
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
10644
+ "dev": true,
10645
+ "requires": {
10646
+ "is-accessor-descriptor": "^1.0.0",
10647
+ "is-data-descriptor": "^1.0.0",
10648
+ "kind-of": "^6.0.2"
10649
+ }
10650
+ }
10651
+ }
10652
+ },
10653
+ "snapdragon-util": {
10654
+ "version": "3.0.1",
10655
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
10656
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
10657
+ "dev": true,
10658
+ "requires": {
10659
+ "kind-of": "^3.2.0"
10660
+ },
10661
+ "dependencies": {
10662
+ "kind-of": {
10663
+ "version": "3.2.2",
10664
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
10665
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
10666
+ "dev": true,
10667
+ "requires": {
10668
+ "is-buffer": "^1.1.5"
10669
+ }
10670
+ }
10671
+ }
10672
+ },
10673
+ "source-list-map": {
10674
+ "version": "2.0.1",
10675
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
10676
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
10677
+ "dev": true
10678
+ },
10679
+ "source-map": {
10680
+ "version": "0.5.7",
10681
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
10682
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
10683
+ "dev": true
10684
+ },
10685
+ "source-map-loader": {
10686
+ "version": "0.2.4",
10687
+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz",
10688
+ "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==",
10689
+ "dev": true,
10690
+ "requires": {
10691
+ "async": "^2.5.0",
10692
+ "loader-utils": "^1.1.0"
10693
+ }
10694
+ },
10695
+ "source-map-resolve": {
10696
+ "version": "0.5.2",
10697
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
10698
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
10699
+ "dev": true,
10700
+ "requires": {
10701
+ "atob": "^2.1.1",
10702
+ "decode-uri-component": "^0.2.0",
10703
+ "resolve-url": "^0.2.1",
10704
+ "source-map-url": "^0.4.0",
10705
+ "urix": "^0.1.0"
10706
+ }
10707
+ },
10708
+ "source-map-support": {
10709
+ "version": "0.5.12",
10710
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
10711
+ "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
10712
+ "dev": true,
10713
+ "requires": {
10714
+ "buffer-from": "^1.0.0",
10715
+ "source-map": "^0.6.0"
10716
+ },
10717
+ "dependencies": {
10718
+ "source-map": {
10719
+ "version": "0.6.1",
10720
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
10721
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
10722
+ "dev": true
10723
+ }
10724
+ }
10725
+ },
10726
+ "source-map-url": {
10727
+ "version": "0.4.0",
10728
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
10729
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
10730
+ "dev": true
10731
+ },
10732
+ "spawnd": {
10733
+ "version": "4.0.0",
10734
+ "resolved": "https://registry.npmjs.org/spawnd/-/spawnd-4.0.0.tgz",
10735
+ "integrity": "sha512-ql3qhJnhAkvXpaqKBWOqou1rUTSQhFRaZkyOT+MTFB4xY3X+brgw6LTWV2wHuE9A6YPhrNe1cbg7S+jAYnbC0Q==",
10736
+ "dev": true,
10737
+ "requires": {
10738
+ "exit": "^0.1.2",
10739
+ "signal-exit": "^3.0.2",
10740
+ "tree-kill": "^1.2.1",
10741
+ "wait-port": "^0.2.2"
10742
+ }
10743
+ },
10744
+ "spdx-correct": {
10745
+ "version": "3.1.0",
10746
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
10747
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
10748
+ "dev": true,
10749
+ "requires": {
10750
+ "spdx-expression-parse": "^3.0.0",
10751
+ "spdx-license-ids": "^3.0.0"
10752
+ }
10753
+ },
10754
+ "spdx-exceptions": {
10755
+ "version": "2.2.0",
10756
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
10757
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
10758
+ "dev": true
10759
+ },
10760
+ "spdx-expression-parse": {
10761
+ "version": "3.0.0",
10762
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
10763
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
10764
+ "dev": true,
10765
+ "requires": {
10766
+ "spdx-exceptions": "^2.1.0",
10767
+ "spdx-license-ids": "^3.0.0"
10768
+ }
10769
+ },
10770
+ "spdx-license-ids": {
10771
+ "version": "3.0.4",
10772
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
10773
+ "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
10774
+ "dev": true
10775
+ },
10776
+ "specificity": {
10777
+ "version": "0.4.1",
10778
+ "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
10779
+ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
10780
+ "dev": true
10781
+ },
10782
+ "split-string": {
10783
+ "version": "3.1.0",
10784
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
10785
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
10786
+ "dev": true,
10787
+ "requires": {
10788
+ "extend-shallow": "^3.0.0"
10789
+ }
10790
+ },
10791
+ "sprintf-js": {
10792
+ "version": "1.0.3",
10793
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
10794
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
10795
+ "dev": true
10796
+ },
10797
+ "sshpk": {
10798
+ "version": "1.16.1",
10799
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
10800
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
10801
+ "dev": true,
10802
+ "requires": {
10803
+ "asn1": "~0.2.3",
10804
+ "assert-plus": "^1.0.0",
10805
+ "bcrypt-pbkdf": "^1.0.0",
10806
+ "dashdash": "^1.12.0",
10807
+ "ecc-jsbn": "~0.1.1",
10808
+ "getpass": "^0.1.1",
10809
+ "jsbn": "~0.1.0",
10810
+ "safer-buffer": "^2.0.2",
10811
+ "tweetnacl": "~0.14.0"
10812
+ }
10813
+ },
10814
+ "ssri": {
10815
+ "version": "5.3.0",
10816
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
10817
+ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
10818
+ "dev": true,
10819
+ "requires": {
10820
+ "safe-buffer": "^5.1.1"
10821
+ }
10822
+ },
10823
+ "stack-utils": {
10824
+ "version": "1.0.2",
10825
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
10826
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
10827
+ "dev": true
10828
+ },
10829
+ "state-toggle": {
10830
+ "version": "1.0.2",
10831
+ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz",
10832
+ "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==",
10833
+ "dev": true
10834
+ },
10835
+ "static-extend": {
10836
+ "version": "0.1.2",
10837
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
10838
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
10839
+ "dev": true,
10840
+ "requires": {
10841
+ "define-property": "^0.2.5",
10842
+ "object-copy": "^0.1.0"
10843
+ },
10844
+ "dependencies": {
10845
+ "define-property": {
10846
+ "version": "0.2.5",
10847
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
10848
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
10849
+ "dev": true,
10850
+ "requires": {
10851
+ "is-descriptor": "^0.1.0"
10852
+ }
10853
+ }
10854
+ }
10855
+ },
10856
+ "statuses": {
10857
+ "version": "1.5.0",
10858
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
10859
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
10860
+ "dev": true
10861
+ },
10862
+ "stdout-stream": {
10863
+ "version": "1.4.1",
10864
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
10865
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
10866
+ "dev": true,
10867
+ "requires": {
10868
+ "readable-stream": "^2.0.1"
10869
+ }
10870
+ },
10871
+ "stealthy-require": {
10872
+ "version": "1.1.1",
10873
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
10874
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
10875
+ "dev": true
10876
+ },
10877
+ "stream-browserify": {
10878
+ "version": "2.0.2",
10879
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
10880
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
10881
+ "dev": true,
10882
+ "requires": {
10883
+ "inherits": "~2.0.1",
10884
+ "readable-stream": "^2.0.2"
10885
+ }
10886
+ },
10887
+ "stream-each": {
10888
+ "version": "1.2.3",
10889
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
10890
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
10891
+ "dev": true,
10892
+ "requires": {
10893
+ "end-of-stream": "^1.1.0",
10894
+ "stream-shift": "^1.0.0"
10895
+ }
10896
+ },
10897
+ "stream-http": {
10898
+ "version": "2.8.3",
10899
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
10900
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
10901
+ "dev": true,
10902
+ "requires": {
10903
+ "builtin-status-codes": "^3.0.0",
10904
+ "inherits": "^2.0.1",
10905
+ "readable-stream": "^2.3.6",
10906
+ "to-arraybuffer": "^1.0.0",
10907
+ "xtend": "^4.0.0"
10908
+ }
10909
+ },
10910
+ "stream-shift": {
10911
+ "version": "1.0.0",
10912
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
10913
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
10914
+ "dev": true
10915
+ },
10916
+ "string-length": {
10917
+ "version": "2.0.0",
10918
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
10919
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
10920
+ "dev": true,
10921
+ "requires": {
10922
+ "astral-regex": "^1.0.0",
10923
+ "strip-ansi": "^4.0.0"
10924
+ }
10925
+ },
10926
+ "string-template": {
10927
+ "version": "0.2.1",
10928
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
10929
+ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
10930
+ "dev": true
10931
+ },
10932
+ "string-width": {
10933
+ "version": "2.1.1",
10934
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
10935
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
10936
+ "dev": true,
10937
+ "requires": {
10938
+ "is-fullwidth-code-point": "^2.0.0",
10939
+ "strip-ansi": "^4.0.0"
10940
+ }
10941
+ },
10942
+ "string.prototype.trim": {
10943
+ "version": "1.1.2",
10944
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
10945
+ "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
10946
+ "dev": true,
10947
+ "requires": {
10948
+ "define-properties": "^1.1.2",
10949
+ "es-abstract": "^1.5.0",
10950
+ "function-bind": "^1.0.2"
10951
+ }
10952
+ },
10953
+ "string_decoder": {
10954
+ "version": "1.1.1",
10955
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
10956
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
10957
+ "dev": true,
10958
+ "requires": {
10959
+ "safe-buffer": "~5.1.0"
10960
+ }
10961
+ },
10962
+ "stringify-entities": {
10963
+ "version": "1.3.2",
10964
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
10965
+ "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
10966
+ "dev": true,
10967
+ "requires": {
10968
+ "character-entities-html4": "^1.0.0",
10969
+ "character-entities-legacy": "^1.0.0",
10970
+ "is-alphanumerical": "^1.0.0",
10971
+ "is-hexadecimal": "^1.0.0"
10972
+ }
10973
+ },
10974
+ "strip-ansi": {
10975
+ "version": "4.0.0",
10976
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
10977
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
10978
+ "dev": true,
10979
+ "requires": {
10980
+ "ansi-regex": "^3.0.0"
10981
+ },
10982
+ "dependencies": {
10983
+ "ansi-regex": {
10984
+ "version": "3.0.0",
10985
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
10986
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
10987
+ "dev": true
10988
+ }
10989
+ }
10990
+ },
10991
+ "strip-bom": {
10992
+ "version": "3.0.0",
10993
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
10994
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
10995
+ "dev": true
10996
+ },
10997
+ "strip-eof": {
10998
+ "version": "1.0.0",
10999
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
11000
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
11001
+ "dev": true
11002
+ },
11003
+ "strip-indent": {
11004
+ "version": "2.0.0",
11005
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
11006
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
11007
+ "dev": true
11008
+ },
11009
+ "strip-json-comments": {
11010
+ "version": "2.0.1",
11011
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
11012
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
11013
+ "dev": true
11014
+ },
11015
+ "style-loader": {
11016
+ "version": "0.23.1",
11017
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
11018
+ "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
11019
+ "dev": true,
11020
+ "requires": {
11021
+ "loader-utils": "^1.1.0",
11022
+ "schema-utils": "^1.0.0"
11023
+ },
11024
+ "dependencies": {
11025
+ "schema-utils": {
11026
+ "version": "1.0.0",
11027
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
11028
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
11029
+ "dev": true,
11030
+ "requires": {
11031
+ "ajv": "^6.1.0",
11032
+ "ajv-errors": "^1.0.0",
11033
+ "ajv-keywords": "^3.1.0"
11034
+ }
11035
+ }
11036
+ }
11037
+ },
11038
+ "style-search": {
11039
+ "version": "0.1.0",
11040
+ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
11041
+ "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
11042
+ "dev": true
11043
+ },
11044
+ "stylelint": {
11045
+ "version": "9.10.1",
11046
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-9.10.1.tgz",
11047
+ "integrity": "sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==",
11048
+ "dev": true,
11049
+ "requires": {
11050
+ "autoprefixer": "^9.0.0",
11051
+ "balanced-match": "^1.0.0",
11052
+ "chalk": "^2.4.1",
11053
+ "cosmiconfig": "^5.0.0",
11054
+ "debug": "^4.0.0",
11055
+ "execall": "^1.0.0",
11056
+ "file-entry-cache": "^4.0.0",
11057
+ "get-stdin": "^6.0.0",
11058
+ "global-modules": "^2.0.0",
11059
+ "globby": "^9.0.0",
11060
+ "globjoin": "^0.1.4",
11061
+ "html-tags": "^2.0.0",
11062
+ "ignore": "^5.0.4",
11063
+ "import-lazy": "^3.1.0",
11064
+ "imurmurhash": "^0.1.4",
11065
+ "known-css-properties": "^0.11.0",
11066
+ "leven": "^2.1.0",
11067
+ "lodash": "^4.17.4",
11068
+ "log-symbols": "^2.0.0",
11069
+ "mathml-tag-names": "^2.0.1",
11070
+ "meow": "^5.0.0",
11071
+ "micromatch": "^3.1.10",
11072
+ "normalize-selector": "^0.2.0",
11073
+ "pify": "^4.0.0",
11074
+ "postcss": "^7.0.13",
11075
+ "postcss-html": "^0.36.0",
11076
+ "postcss-jsx": "^0.36.0",
11077
+ "postcss-less": "^3.1.0",
11078
+ "postcss-markdown": "^0.36.0",
11079
+ "postcss-media-query-parser": "^0.2.3",
11080
+ "postcss-reporter": "^6.0.0",
11081
+ "postcss-resolve-nested-selector": "^0.1.1",
11082
+ "postcss-safe-parser": "^4.0.0",
11083
+ "postcss-sass": "^0.3.5",
11084
+ "postcss-scss": "^2.0.0",
11085
+ "postcss-selector-parser": "^3.1.0",
11086
+ "postcss-syntax": "^0.36.2",
11087
+ "postcss-value-parser": "^3.3.0",
11088
+ "resolve-from": "^4.0.0",
11089
+ "signal-exit": "^3.0.2",
11090
+ "slash": "^2.0.0",
11091
+ "specificity": "^0.4.1",
11092
+ "string-width": "^3.0.0",
11093
+ "style-search": "^0.1.0",
11094
+ "sugarss": "^2.0.0",
11095
+ "svg-tags": "^1.0.0",
11096
+ "table": "^5.0.0"
11097
+ },
11098
+ "dependencies": {
11099
+ "file-entry-cache": {
11100
+ "version": "4.0.0",
11101
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-4.0.0.tgz",
11102
+ "integrity": "sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==",
11103
+ "dev": true,
11104
+ "requires": {
11105
+ "flat-cache": "^2.0.1"
11106
+ }
11107
+ },
11108
+ "global-modules": {
11109
+ "version": "2.0.0",
11110
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
11111
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
11112
+ "dev": true,
11113
+ "requires": {
11114
+ "global-prefix": "^3.0.0"
11115
+ }
11116
+ },
11117
+ "global-prefix": {
11118
+ "version": "3.0.0",
11119
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
11120
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
11121
+ "dev": true,
11122
+ "requires": {
11123
+ "ini": "^1.3.5",
11124
+ "kind-of": "^6.0.2",
11125
+ "which": "^1.3.1"
11126
+ }
11127
+ },
11128
+ "ignore": {
11129
+ "version": "5.1.2",
11130
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz",
11131
+ "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==",
11132
+ "dev": true
11133
+ },
11134
+ "pify": {
11135
+ "version": "4.0.1",
11136
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
11137
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
11138
+ "dev": true
11139
+ },
11140
+ "string-width": {
11141
+ "version": "3.1.0",
11142
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
11143
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
11144
+ "dev": true,
11145
+ "requires": {
11146
+ "emoji-regex": "^7.0.1",
11147
+ "is-fullwidth-code-point": "^2.0.0",
11148
+ "strip-ansi": "^5.1.0"
11149
+ }
11150
+ },
11151
+ "strip-ansi": {
11152
+ "version": "5.2.0",
11153
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
11154
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
11155
+ "dev": true,
11156
+ "requires": {
11157
+ "ansi-regex": "^4.1.0"
11158
+ }
11159
+ }
11160
+ }
11161
+ },
11162
+ "stylelint-config-recommended": {
11163
+ "version": "2.2.0",
11164
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz",
11165
+ "integrity": "sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==",
11166
+ "dev": true
11167
+ },
11168
+ "stylelint-config-recommended-scss": {
11169
+ "version": "3.3.0",
11170
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-3.3.0.tgz",
11171
+ "integrity": "sha512-BvuuLYwoet8JutOP7K1a8YaiENN+0HQn390eDi0SWe1h7Uhx6O3GUQ6Ubgie9b/AmHX4Btmp+ZzVGbzriFTBcA==",
11172
+ "dev": true,
11173
+ "requires": {
11174
+ "stylelint-config-recommended": "^2.2.0"
11175
+ }
11176
+ },
11177
+ "stylelint-config-wordpress": {
11178
+ "version": "13.1.0",
11179
+ "resolved": "https://registry.npmjs.org/stylelint-config-wordpress/-/stylelint-config-wordpress-13.1.0.tgz",
11180
+ "integrity": "sha512-dpKj2/d3/XjDVoOvQzd54GoM8Rj5zldluOZKkVhBCc4JYMc6r1VYL5hpcgIjqy/i2Hyqg4Rh7zTafE/2AWq//w==",
11181
+ "dev": true,
11182
+ "requires": {
11183
+ "stylelint-config-recommended": "^2.1.0",
11184
+ "stylelint-config-recommended-scss": "^3.2.0",
11185
+ "stylelint-scss": "^3.3.0"
11186
+ }
11187
+ },
11188
+ "stylelint-scss": {
11189
+ "version": "3.8.0",
11190
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.8.0.tgz",
11191
+ "integrity": "sha512-J55tNmxXEh/ymhz5BiscIiUcHgPmJ2Nv+0+zgnqTqdQBe1URQbrdjlAyK3xq+7i2nVpWr2wlRj25SjoonZFcHg==",
11192
+ "dev": true,
11193
+ "requires": {
11194
+ "lodash": "^4.17.11",
11195
+ "postcss-media-query-parser": "^0.2.3",
11196
+ "postcss-resolve-nested-selector": "^0.1.1",
11197
+ "postcss-selector-parser": "^6.0.2",
11198
+ "postcss-value-parser": "^3.3.1"
11199
+ },
11200
+ "dependencies": {
11201
+ "postcss-selector-parser": {
11202
+ "version": "6.0.2",
11203
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
11204
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
11205
+ "dev": true,
11206
+ "requires": {
11207
+ "cssesc": "^3.0.0",
11208
+ "indexes-of": "^1.0.1",
11209
+ "uniq": "^1.0.1"
11210
+ }
11211
+ }
11212
+ }
11213
+ },
11214
+ "sugarss": {
11215
+ "version": "2.0.0",
11216
+ "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
11217
+ "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
11218
+ "dev": true,
11219
+ "requires": {
11220
+ "postcss": "^7.0.2"
11221
+ }
11222
+ },
11223
+ "supports-color": {
11224
+ "version": "5.5.0",
11225
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
11226
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
11227
+ "dev": true,
11228
+ "requires": {
11229
+ "has-flag": "^3.0.0"
11230
+ }
11231
+ },
11232
+ "svg-tags": {
11233
+ "version": "1.0.0",
11234
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
11235
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
11236
+ "dev": true
11237
+ },
11238
+ "symbol-tree": {
11239
+ "version": "3.2.4",
11240
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
11241
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
11242
+ "dev": true
11243
+ },
11244
+ "table": {
11245
+ "version": "5.4.1",
11246
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz",
11247
+ "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==",
11248
+ "dev": true,
11249
+ "requires": {
11250
+ "ajv": "^6.9.1",
11251
+ "lodash": "^4.17.11",
11252
+ "slice-ansi": "^2.1.0",
11253
+ "string-width": "^3.0.0"
11254
+ },
11255
+ "dependencies": {
11256
+ "string-width": {
11257
+ "version": "3.1.0",
11258
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
11259
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
11260
+ "dev": true,
11261
+ "requires": {
11262
+ "emoji-regex": "^7.0.1",
11263
+ "is-fullwidth-code-point": "^2.0.0",
11264
+ "strip-ansi": "^5.1.0"
11265
+ }
11266
+ },
11267
+ "strip-ansi": {
11268
+ "version": "5.2.0",
11269
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
11270
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
11271
+ "dev": true,
11272
+ "requires": {
11273
+ "ansi-regex": "^4.1.0"
11274
+ }
11275
+ }
11276
+ }
11277
+ },
11278
+ "tapable": {
11279
+ "version": "1.1.3",
11280
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
11281
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
11282
+ "dev": true
11283
+ },
11284
+ "tar": {
11285
+ "version": "2.2.2",
11286
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
11287
+ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
11288
+ "dev": true,
11289
+ "requires": {
11290
+ "block-stream": "*",
11291
+ "fstream": "^1.0.12",
11292
+ "inherits": "2"
11293
+ }
11294
+ },
11295
+ "test-exclude": {
11296
+ "version": "5.2.3",
11297
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
11298
+ "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
11299
+ "dev": true,
11300
+ "requires": {
11301
+ "glob": "^7.1.3",
11302
+ "minimatch": "^3.0.4",
11303
+ "read-pkg-up": "^4.0.0",
11304
+ "require-main-filename": "^2.0.0"
11305
+ },
11306
+ "dependencies": {
11307
+ "find-up": {
11308
+ "version": "3.0.0",
11309
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
11310
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
11311
+ "dev": true,
11312
+ "requires": {
11313
+ "locate-path": "^3.0.0"
11314
+ }
11315
+ },
11316
+ "locate-path": {
11317
+ "version": "3.0.0",
11318
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
11319
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
11320
+ "dev": true,
11321
+ "requires": {
11322
+ "p-locate": "^3.0.0",
11323
+ "path-exists": "^3.0.0"
11324
+ }
11325
+ },
11326
+ "p-limit": {
11327
+ "version": "2.2.0",
11328
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
11329
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
11330
+ "dev": true,
11331
+ "requires": {
11332
+ "p-try": "^2.0.0"
11333
+ }
11334
+ },
11335
+ "p-locate": {
11336
+ "version": "3.0.0",
11337
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
11338
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
11339
+ "dev": true,
11340
+ "requires": {
11341
+ "p-limit": "^2.0.0"
11342
+ }
11343
+ },
11344
+ "p-try": {
11345
+ "version": "2.2.0",
11346
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
11347
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
11348
+ "dev": true
11349
+ },
11350
+ "read-pkg-up": {
11351
+ "version": "4.0.0",
11352
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
11353
+ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
11354
+ "dev": true,
11355
+ "requires": {
11356
+ "find-up": "^3.0.0",
11357
+ "read-pkg": "^3.0.0"
11358
+ }
11359
+ }
11360
+ }
11361
+ },
11362
+ "text-table": {
11363
+ "version": "0.2.0",
11364
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
11365
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
11366
+ "dev": true
11367
+ },
11368
+ "thread-loader": {
11369
+ "version": "2.1.2",
11370
+ "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz",
11371
+ "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==",
11372
+ "dev": true,
11373
+ "requires": {
11374
+ "loader-runner": "^2.3.1",
11375
+ "loader-utils": "^1.1.0",
11376
+ "neo-async": "^2.6.0"
11377
+ }
11378
+ },
11379
+ "throat": {
11380
+ "version": "4.1.0",
11381
+ "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
11382
+ "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
11383
+ "dev": true
11384
+ },
11385
+ "through": {
11386
+ "version": "2.3.8",
11387
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
11388
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
11389
+ "dev": true
11390
+ },
11391
+ "through2": {
11392
+ "version": "2.0.5",
11393
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
11394
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
11395
+ "dev": true,
11396
+ "requires": {
11397
+ "readable-stream": "~2.3.6",
11398
+ "xtend": "~4.0.1"
11399
+ }
11400
+ },
11401
+ "timers-browserify": {
11402
+ "version": "2.0.10",
11403
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
11404
+ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
11405
+ "dev": true,
11406
+ "requires": {
11407
+ "setimmediate": "^1.0.4"
11408
+ }
11409
+ },
11410
+ "tiny-lr": {
11411
+ "version": "1.1.1",
11412
+ "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
11413
+ "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
11414
+ "dev": true,
11415
+ "requires": {
11416
+ "body": "^5.1.0",
11417
+ "debug": "^3.1.0",
11418
+ "faye-websocket": "~0.10.0",
11419
+ "livereload-js": "^2.3.0",
11420
+ "object-assign": "^4.1.0",
11421
+ "qs": "^6.4.0"
11422
+ },
11423
+ "dependencies": {
11424
+ "debug": {
11425
+ "version": "3.2.6",
11426
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
11427
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
11428
+ "dev": true,
11429
+ "requires": {
11430
+ "ms": "^2.1.1"
11431
+ }
11432
+ }
11433
+ }
11434
+ },
11435
+ "tmp": {
11436
+ "version": "0.0.33",
11437
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
11438
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
11439
+ "dev": true,
11440
+ "requires": {
11441
+ "os-tmpdir": "~1.0.2"
11442
+ }
11443
+ },
11444
+ "tmpl": {
11445
+ "version": "1.0.4",
11446
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
11447
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
11448
+ "dev": true
11449
+ },
11450
+ "to-arraybuffer": {
11451
+ "version": "1.0.1",
11452
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
11453
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
11454
+ "dev": true
11455
+ },
11456
+ "to-fast-properties": {
11457
+ "version": "2.0.0",
11458
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
11459
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
11460
+ "dev": true
11461
+ },
11462
+ "to-object-path": {
11463
+ "version": "0.3.0",
11464
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
11465
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
11466
+ "dev": true,
11467
+ "requires": {
11468
+ "kind-of": "^3.0.2"
11469
+ },
11470
+ "dependencies": {
11471
+ "kind-of": {
11472
+ "version": "3.2.2",
11473
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
11474
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
11475
+ "dev": true,
11476
+ "requires": {
11477
+ "is-buffer": "^1.1.5"
11478
+ }
11479
+ }
11480
+ }
11481
+ },
11482
+ "to-regex": {
11483
+ "version": "3.0.2",
11484
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
11485
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
11486
+ "dev": true,
11487
+ "requires": {
11488
+ "define-property": "^2.0.2",
11489
+ "extend-shallow": "^3.0.2",
11490
+ "regex-not": "^1.0.2",
11491
+ "safe-regex": "^1.1.0"
11492
+ }
11493
+ },
11494
+ "to-regex-range": {
11495
+ "version": "2.1.1",
11496
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
11497
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
11498
+ "dev": true,
11499
+ "requires": {
11500
+ "is-number": "^3.0.0",
11501
+ "repeat-string": "^1.6.1"
11502
+ }
11503
+ },
11504
+ "toidentifier": {
11505
+ "version": "1.0.0",
11506
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
11507
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
11508
+ "dev": true
11509
+ },
11510
+ "topo": {
11511
+ "version": "3.0.3",
11512
+ "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
11513
+ "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
11514
+ "dev": true,
11515
+ "requires": {
11516
+ "hoek": "6.x.x"
11517
+ },
11518
+ "dependencies": {
11519
+ "hoek": {
11520
+ "version": "6.1.3",
11521
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz",
11522
+ "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==",
11523
+ "dev": true
11524
+ }
11525
+ }
11526
+ },
11527
+ "tough-cookie": {
11528
+ "version": "2.5.0",
11529
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
11530
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
11531
+ "dev": true,
11532
+ "requires": {
11533
+ "psl": "^1.1.28",
11534
+ "punycode": "^2.1.1"
11535
+ }
11536
+ },
11537
+ "tr46": {
11538
+ "version": "1.0.1",
11539
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
11540
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
11541
+ "dev": true,
11542
+ "requires": {
11543
+ "punycode": "^2.1.0"
11544
+ }
11545
+ },
11546
+ "tree-kill": {
11547
+ "version": "1.2.1",
11548
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
11549
+ "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==",
11550
+ "dev": true
11551
+ },
11552
+ "trim": {
11553
+ "version": "0.0.1",
11554
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
11555
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
11556
+ "dev": true
11557
+ },
11558
+ "trim-newlines": {
11559
+ "version": "2.0.0",
11560
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
11561
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
11562
+ "dev": true
11563
+ },
11564
+ "trim-right": {
11565
+ "version": "1.0.1",
11566
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
11567
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
11568
+ "dev": true
11569
+ },
11570
+ "trim-trailing-lines": {
11571
+ "version": "1.1.2",
11572
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz",
11573
+ "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==",
11574
+ "dev": true
11575
+ },
11576
+ "trough": {
11577
+ "version": "1.0.4",
11578
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz",
11579
+ "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==",
11580
+ "dev": true
11581
+ },
11582
+ "true-case-path": {
11583
+ "version": "1.0.3",
11584
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
11585
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
11586
+ "dev": true,
11587
+ "requires": {
11588
+ "glob": "^7.1.2"
11589
+ }
11590
+ },
11591
+ "tryer": {
11592
+ "version": "1.0.1",
11593
+ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
11594
+ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
11595
+ "dev": true
11596
+ },
11597
+ "tslib": {
11598
+ "version": "1.10.0",
11599
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
11600
+ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
11601
+ "dev": true
11602
+ },
11603
+ "tty-browserify": {
11604
+ "version": "0.0.0",
11605
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
11606
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
11607
+ "dev": true
11608
+ },
11609
+ "tunnel-agent": {
11610
+ "version": "0.6.0",
11611
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
11612
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
11613
+ "dev": true,
11614
+ "requires": {
11615
+ "safe-buffer": "^5.0.1"
11616
+ }
11617
+ },
11618
+ "tweetnacl": {
11619
+ "version": "0.14.5",
11620
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
11621
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
11622
+ "dev": true
11623
+ },
11624
+ "type-check": {
11625
+ "version": "0.3.2",
11626
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
11627
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
11628
+ "dev": true,
11629
+ "requires": {
11630
+ "prelude-ls": "~1.1.2"
11631
+ }
11632
+ },
11633
+ "type-is": {
11634
+ "version": "1.6.18",
11635
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
11636
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
11637
+ "dev": true,
11638
+ "requires": {
11639
+ "media-typer": "0.3.0",
11640
+ "mime-types": "~2.1.24"
11641
+ }
11642
+ },
11643
+ "typedarray": {
11644
+ "version": "0.0.6",
11645
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
11646
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
11647
+ "dev": true
11648
+ },
11649
+ "uglify-es": {
11650
+ "version": "3.3.9",
11651
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz",
11652
+ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==",
11653
+ "dev": true,
11654
+ "requires": {
11655
+ "commander": "~2.13.0",
11656
+ "source-map": "~0.6.1"
11657
+ },
11658
+ "dependencies": {
11659
+ "source-map": {
11660
+ "version": "0.6.1",
11661
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
11662
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
11663
+ "dev": true
11664
+ }
11665
+ }
11666
+ },
11667
+ "uglifyjs-webpack-plugin": {
11668
+ "version": "1.3.0",
11669
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz",
11670
+ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==",
11671
+ "dev": true,
11672
+ "requires": {
11673
+ "cacache": "^10.0.4",
11674
+ "find-cache-dir": "^1.0.0",
11675
+ "schema-utils": "^0.4.5",
11676
+ "serialize-javascript": "^1.4.0",
11677
+ "source-map": "^0.6.1",
11678
+ "uglify-es": "^3.3.4",
11679
+ "webpack-sources": "^1.1.0",
11680
+ "worker-farm": "^1.5.2"
11681
+ },
11682
+ "dependencies": {
11683
+ "source-map": {
11684
+ "version": "0.6.1",
11685
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
11686
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
11687
+ "dev": true
11688
+ }
11689
+ }
11690
+ },
11691
+ "unherit": {
11692
+ "version": "1.1.2",
11693
+ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz",
11694
+ "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==",
11695
+ "dev": true,
11696
+ "requires": {
11697
+ "inherits": "^2.0.1",
11698
+ "xtend": "^4.0.1"
11699
+ }
11700
+ },
11701
+ "unicode-canonical-property-names-ecmascript": {
11702
+ "version": "1.0.4",
11703
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
11704
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
11705
+ "dev": true
11706
+ },
11707
+ "unicode-match-property-ecmascript": {
11708
+ "version": "1.0.4",
11709
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
11710
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
11711
+ "dev": true,
11712
+ "requires": {
11713
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
11714
+ "unicode-property-aliases-ecmascript": "^1.0.4"
11715
+ }
11716
+ },
11717
+ "unicode-match-property-value-ecmascript": {
11718
+ "version": "1.1.0",
11719
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
11720
+ "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
11721
+ "dev": true
11722
+ },
11723
+ "unicode-property-aliases-ecmascript": {
11724
+ "version": "1.0.5",
11725
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
11726
+ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
11727
+ "dev": true
11728
+ },
11729
+ "unified": {
11730
+ "version": "7.1.0",
11731
+ "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz",
11732
+ "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==",
11733
+ "dev": true,
11734
+ "requires": {
11735
+ "@types/unist": "^2.0.0",
11736
+ "@types/vfile": "^3.0.0",
11737
+ "bail": "^1.0.0",
11738
+ "extend": "^3.0.0",
11739
+ "is-plain-obj": "^1.1.0",
11740
+ "trough": "^1.0.0",
11741
+ "vfile": "^3.0.0",
11742
+ "x-is-string": "^0.1.0"
11743
+ }
11744
+ },
11745
+ "union-value": {
11746
+ "version": "1.0.0",
11747
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
11748
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
11749
+ "dev": true,
11750
+ "requires": {
11751
+ "arr-union": "^3.1.0",
11752
+ "get-value": "^2.0.6",
11753
+ "is-extendable": "^0.1.1",
11754
+ "set-value": "^0.4.3"
11755
+ },
11756
+ "dependencies": {
11757
+ "extend-shallow": {
11758
+ "version": "2.0.1",
11759
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
11760
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
11761
+ "dev": true,
11762
+ "requires": {
11763
+ "is-extendable": "^0.1.0"
11764
+ }
11765
+ },
11766
+ "set-value": {
11767
+ "version": "0.4.3",
11768
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
11769
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
11770
+ "dev": true,
11771
+ "requires": {
11772
+ "extend-shallow": "^2.0.1",
11773
+ "is-extendable": "^0.1.1",
11774
+ "is-plain-object": "^2.0.1",
11775
+ "to-object-path": "^0.3.0"
11776
+ }
11777
+ }
11778
+ }
11779
+ },
11780
+ "uniq": {
11781
+ "version": "1.0.1",
11782
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
11783
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
11784
+ "dev": true
11785
+ },
11786
+ "unique-filename": {
11787
+ "version": "1.1.1",
11788
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
11789
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
11790
+ "dev": true,
11791
+ "requires": {
11792
+ "unique-slug": "^2.0.0"
11793
+ }
11794
+ },
11795
+ "unique-slug": {
11796
+ "version": "2.0.2",
11797
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
11798
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
11799
+ "dev": true,
11800
+ "requires": {
11801
+ "imurmurhash": "^0.1.4"
11802
+ }
11803
+ },
11804
+ "unist-util-find-all-after": {
11805
+ "version": "1.0.4",
11806
+ "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz",
11807
+ "integrity": "sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ==",
11808
+ "dev": true,
11809
+ "requires": {
11810
+ "unist-util-is": "^3.0.0"
11811
+ }
11812
+ },
11813
+ "unist-util-is": {
11814
+ "version": "3.0.0",
11815
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz",
11816
+ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==",
11817
+ "dev": true
11818
+ },
11819
+ "unist-util-remove-position": {
11820
+ "version": "1.1.3",
11821
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz",
11822
+ "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==",
11823
+ "dev": true,
11824
+ "requires": {
11825
+ "unist-util-visit": "^1.1.0"
11826
+ }
11827
+ },
11828
+ "unist-util-stringify-position": {
11829
+ "version": "1.1.2",
11830
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
11831
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
11832
+ "dev": true
11833
+ },
11834
+ "unist-util-visit": {
11835
+ "version": "1.4.1",
11836
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz",
11837
+ "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==",
11838
+ "dev": true,
11839
+ "requires": {
11840
+ "unist-util-visit-parents": "^2.0.0"
11841
+ }
11842
+ },
11843
+ "unist-util-visit-parents": {
11844
+ "version": "2.1.2",
11845
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz",
11846
+ "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==",
11847
+ "dev": true,
11848
+ "requires": {
11849
+ "unist-util-is": "^3.0.0"
11850
+ }
11851
+ },
11852
+ "unpipe": {
11853
+ "version": "1.0.0",
11854
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
11855
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
11856
+ "dev": true
11857
+ },
11858
+ "unset-value": {
11859
+ "version": "1.0.0",
11860
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
11861
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
11862
+ "dev": true,
11863
+ "requires": {
11864
+ "has-value": "^0.3.1",
11865
+ "isobject": "^3.0.0"
11866
+ },
11867
+ "dependencies": {
11868
+ "has-value": {
11869
+ "version": "0.3.1",
11870
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
11871
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
11872
+ "dev": true,
11873
+ "requires": {
11874
+ "get-value": "^2.0.3",
11875
+ "has-values": "^0.1.4",
11876
+ "isobject": "^2.0.0"
11877
+ },
11878
+ "dependencies": {
11879
+ "isobject": {
11880
+ "version": "2.1.0",
11881
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
11882
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
11883
+ "dev": true,
11884
+ "requires": {
11885
+ "isarray": "1.0.0"
11886
+ }
11887
+ }
11888
+ }
11889
+ },
11890
+ "has-values": {
11891
+ "version": "0.1.4",
11892
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
11893
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
11894
+ "dev": true
11895
+ }
11896
+ }
11897
+ },
11898
+ "upath": {
11899
+ "version": "1.1.2",
11900
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
11901
+ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
11902
+ "dev": true
11903
+ },
11904
+ "uri-js": {
11905
+ "version": "4.2.2",
11906
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
11907
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
11908
+ "dev": true,
11909
+ "requires": {
11910
+ "punycode": "^2.1.0"
11911
+ }
11912
+ },
11913
+ "urix": {
11914
+ "version": "0.1.0",
11915
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
11916
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
11917
+ "dev": true
11918
+ },
11919
+ "url": {
11920
+ "version": "0.11.0",
11921
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
11922
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
11923
+ "dev": true,
11924
+ "requires": {
11925
+ "punycode": "1.3.2",
11926
+ "querystring": "0.2.0"
11927
+ },
11928
+ "dependencies": {
11929
+ "punycode": {
11930
+ "version": "1.3.2",
11931
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
11932
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
11933
+ "dev": true
11934
+ }
11935
+ }
11936
+ },
11937
+ "use": {
11938
+ "version": "3.1.1",
11939
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
11940
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
11941
+ "dev": true
11942
+ },
11943
+ "util": {
11944
+ "version": "0.11.1",
11945
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
11946
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
11947
+ "dev": true,
11948
+ "requires": {
11949
+ "inherits": "2.0.3"
11950
+ },
11951
+ "dependencies": {
11952
+ "inherits": {
11953
+ "version": "2.0.3",
11954
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
11955
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
11956
+ "dev": true
11957
+ }
11958
+ }
11959
+ },
11960
+ "util-deprecate": {
11961
+ "version": "1.0.2",
11962
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
11963
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
11964
+ "dev": true
11965
+ },
11966
+ "util.promisify": {
11967
+ "version": "1.0.0",
11968
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
11969
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
11970
+ "dev": true,
11971
+ "requires": {
11972
+ "define-properties": "^1.1.2",
11973
+ "object.getownpropertydescriptors": "^2.0.3"
11974
+ }
11975
+ },
11976
+ "utils-merge": {
11977
+ "version": "1.0.1",
11978
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
11979
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
11980
+ "dev": true
11981
+ },
11982
+ "uuid": {
11983
+ "version": "3.3.2",
11984
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
11985
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
11986
+ "dev": true
11987
+ },
11988
+ "v8-compile-cache": {
11989
+ "version": "2.0.3",
11990
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
11991
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
11992
+ "dev": true
11993
+ },
11994
+ "validate-npm-package-license": {
11995
+ "version": "3.0.4",
11996
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
11997
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
11998
+ "dev": true,
11999
+ "requires": {
12000
+ "spdx-correct": "^3.0.0",
12001
+ "spdx-expression-parse": "^3.0.0"
12002
+ }
12003
+ },
12004
+ "validator": {
12005
+ "version": "10.11.0",
12006
+ "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
12007
+ "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==",
12008
+ "dev": true
12009
+ },
12010
+ "vary": {
12011
+ "version": "1.1.2",
12012
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
12013
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
12014
+ "dev": true
12015
+ },
12016
+ "verror": {
12017
+ "version": "1.10.0",
12018
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
12019
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
12020
+ "dev": true,
12021
+ "requires": {
12022
+ "assert-plus": "^1.0.0",
12023
+ "core-util-is": "1.0.2",
12024
+ "extsprintf": "^1.2.0"
12025
+ }
12026
+ },
12027
+ "vfile": {
12028
+ "version": "3.0.1",
12029
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz",
12030
+ "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==",
12031
+ "dev": true,
12032
+ "requires": {
12033
+ "is-buffer": "^2.0.0",
12034
+ "replace-ext": "1.0.0",
12035
+ "unist-util-stringify-position": "^1.0.0",
12036
+ "vfile-message": "^1.0.0"
12037
+ },
12038
+ "dependencies": {
12039
+ "is-buffer": {
12040
+ "version": "2.0.3",
12041
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
12042
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
12043
+ "dev": true
12044
+ }
12045
+ }
12046
+ },
12047
+ "vfile-location": {
12048
+ "version": "2.0.5",
12049
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz",
12050
+ "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==",
12051
+ "dev": true
12052
+ },
12053
+ "vfile-message": {
12054
+ "version": "1.1.1",
12055
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz",
12056
+ "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==",
12057
+ "dev": true,
12058
+ "requires": {
12059
+ "unist-util-stringify-position": "^1.1.1"
12060
+ }
12061
+ },
12062
+ "vm-browserify": {
12063
+ "version": "1.1.0",
12064
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
12065
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
12066
+ "dev": true
12067
+ },
12068
+ "w3c-hr-time": {
12069
+ "version": "1.0.1",
12070
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
12071
+ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
12072
+ "dev": true,
12073
+ "requires": {
12074
+ "browser-process-hrtime": "^0.1.2"
12075
+ }
12076
+ },
12077
+ "wait-on": {
12078
+ "version": "3.2.0",
12079
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-3.2.0.tgz",
12080
+ "integrity": "sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg==",
12081
+ "dev": true,
12082
+ "requires": {
12083
+ "core-js": "^2.5.7",
12084
+ "joi": "^13.0.0",
12085
+ "minimist": "^1.2.0",
12086
+ "request": "^2.88.0",
12087
+ "rx": "^4.1.0"
12088
+ }
12089
+ },
12090
+ "wait-port": {
12091
+ "version": "0.2.2",
12092
+ "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.2.tgz",
12093
+ "integrity": "sha1-1RpJHkhKF791qUfnEaLwErTm8uM=",
12094
+ "dev": true,
12095
+ "requires": {
12096
+ "chalk": "^1.1.3",
12097
+ "commander": "^2.9.0",
12098
+ "debug": "^2.6.6"
12099
+ },
12100
+ "dependencies": {
12101
+ "ansi-regex": {
12102
+ "version": "2.1.1",
12103
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
12104
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
12105
+ "dev": true
12106
+ },
12107
+ "ansi-styles": {
12108
+ "version": "2.2.1",
12109
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
12110
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
12111
+ "dev": true
12112
+ },
12113
+ "chalk": {
12114
+ "version": "1.1.3",
12115
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
12116
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
12117
+ "dev": true,
12118
+ "requires": {
12119
+ "ansi-styles": "^2.2.1",
12120
+ "escape-string-regexp": "^1.0.2",
12121
+ "has-ansi": "^2.0.0",
12122
+ "strip-ansi": "^3.0.0",
12123
+ "supports-color": "^2.0.0"
12124
+ }
12125
+ },
12126
+ "debug": {
12127
+ "version": "2.6.9",
12128
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
12129
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
12130
+ "dev": true,
12131
+ "requires": {
12132
+ "ms": "2.0.0"
12133
+ }
12134
+ },
12135
+ "ms": {
12136
+ "version": "2.0.0",
12137
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
12138
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
12139
+ "dev": true
12140
+ },
12141
+ "strip-ansi": {
12142
+ "version": "3.0.1",
12143
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
12144
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
12145
+ "dev": true,
12146
+ "requires": {
12147
+ "ansi-regex": "^2.0.0"
12148
+ }
12149
+ },
12150
+ "supports-color": {
12151
+ "version": "2.0.0",
12152
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
12153
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
12154
+ "dev": true
12155
+ }
12156
+ }
12157
+ },
12158
+ "walker": {
12159
+ "version": "1.0.7",
12160
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
12161
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
12162
+ "dev": true,
12163
+ "requires": {
12164
+ "makeerror": "1.0.x"
12165
+ }
12166
+ },
12167
+ "watchpack": {
12168
+ "version": "1.6.0",
12169
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
12170
+ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
12171
+ "dev": true,
12172
+ "requires": {
12173
+ "chokidar": "^2.0.2",
12174
+ "graceful-fs": "^4.1.2",
12175
+ "neo-async": "^2.5.0"
12176
+ }
12177
+ },
12178
+ "webassemblyjs": {
12179
+ "version": "1.4.3",
12180
+ "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.4.3.tgz",
12181
+ "integrity": "sha512-4lOV1Lv6olz0PJkDGQEp82HempAn147e6BXijWDzz9g7/2nSebVP9GVg62Fz5ZAs55mxq13GA0XLyvY8XkyDjg==",
12182
+ "dev": true,
12183
+ "requires": {
12184
+ "@webassemblyjs/ast": "1.4.3",
12185
+ "@webassemblyjs/validation": "1.4.3",
12186
+ "@webassemblyjs/wasm-parser": "1.4.3",
12187
+ "@webassemblyjs/wast-parser": "1.4.3",
12188
+ "long": "^3.2.0"
12189
+ }
12190
+ },
12191
+ "webidl-conversions": {
12192
+ "version": "4.0.2",
12193
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
12194
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
12195
+ "dev": true
12196
+ },
12197
+ "webpack": {
12198
+ "version": "4.8.3",
12199
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.3.tgz",
12200
+ "integrity": "sha512-/hfAjBISycdK597lxONjKEFX7dSIU1PsYwC3XlXUXoykWBlv9QV5HnO+ql3HvrrgfBJ7WXdnjO9iGPR2aAc5sw==",
12201
+ "dev": true,
12202
+ "requires": {
12203
+ "@webassemblyjs/ast": "1.4.3",
12204
+ "@webassemblyjs/wasm-edit": "1.4.3",
12205
+ "@webassemblyjs/wasm-parser": "1.4.3",
12206
+ "acorn": "^5.0.0",
12207
+ "acorn-dynamic-import": "^3.0.0",
12208
+ "ajv": "^6.1.0",
12209
+ "ajv-keywords": "^3.1.0",
12210
+ "chrome-trace-event": "^0.1.1",
12211
+ "enhanced-resolve": "^4.0.0",
12212
+ "eslint-scope": "^3.7.1",
12213
+ "loader-runner": "^2.3.0",
12214
+ "loader-utils": "^1.1.0",
12215
+ "memory-fs": "~0.4.1",
12216
+ "micromatch": "^3.1.8",
12217
+ "mkdirp": "~0.5.0",
12218
+ "neo-async": "^2.5.0",
12219
+ "node-libs-browser": "^2.0.0",
12220
+ "schema-utils": "^0.4.4",
12221
+ "tapable": "^1.0.0",
12222
+ "uglifyjs-webpack-plugin": "^1.2.4",
12223
+ "watchpack": "^1.5.0",
12224
+ "webpack-sources": "^1.0.1"
12225
+ }
12226
+ },
12227
+ "webpack-bundle-analyzer": {
12228
+ "version": "3.3.2",
12229
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz",
12230
+ "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==",
12231
+ "dev": true,
12232
+ "requires": {
12233
+ "acorn": "^6.0.7",
12234
+ "acorn-walk": "^6.1.1",
12235
+ "bfj": "^6.1.1",
12236
+ "chalk": "^2.4.1",
12237
+ "commander": "^2.18.0",
12238
+ "ejs": "^2.6.1",
12239
+ "express": "^4.16.3",
12240
+ "filesize": "^3.6.1",
12241
+ "gzip-size": "^5.0.0",
12242
+ "lodash": "^4.17.10",
12243
+ "mkdirp": "^0.5.1",
12244
+ "opener": "^1.5.1",
12245
+ "ws": "^6.0.0"
12246
+ },
12247
+ "dependencies": {
12248
+ "acorn": {
12249
+ "version": "6.1.1",
12250
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
12251
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
12252
+ "dev": true
12253
+ },
12254
+ "commander": {
12255
+ "version": "2.20.0",
12256
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
12257
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
12258
+ "dev": true
12259
+ },
12260
+ "ws": {
12261
+ "version": "6.2.1",
12262
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
12263
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
12264
+ "dev": true,
12265
+ "requires": {
12266
+ "async-limiter": "~1.0.0"
12267
+ }
12268
+ }
12269
+ }
12270
+ },
12271
+ "webpack-cli": {
12272
+ "version": "3.3.5",
12273
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.5.tgz",
12274
+ "integrity": "sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ==",
12275
+ "dev": true,
12276
+ "requires": {
12277
+ "chalk": "2.4.2",
12278
+ "cross-spawn": "6.0.5",
12279
+ "enhanced-resolve": "4.1.0",
12280
+ "findup-sync": "3.0.0",
12281
+ "global-modules": "2.0.0",
12282
+ "import-local": "2.0.0",
12283
+ "interpret": "1.2.0",
12284
+ "loader-utils": "1.2.3",
12285
+ "supports-color": "6.1.0",
12286
+ "v8-compile-cache": "2.0.3",
12287
+ "yargs": "13.2.4"
12288
+ },
12289
+ "dependencies": {
12290
+ "cliui": {
12291
+ "version": "5.0.0",
12292
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
12293
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
12294
+ "dev": true,
12295
+ "requires": {
12296
+ "string-width": "^3.1.0",
12297
+ "strip-ansi": "^5.2.0",
12298
+ "wrap-ansi": "^5.1.0"
12299
+ }
12300
+ },
12301
+ "cross-spawn": {
12302
+ "version": "6.0.5",
12303
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
12304
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
12305
+ "dev": true,
12306
+ "requires": {
12307
+ "nice-try": "^1.0.4",
12308
+ "path-key": "^2.0.1",
12309
+ "semver": "^5.5.0",
12310
+ "shebang-command": "^1.2.0",
12311
+ "which": "^1.2.9"
12312
+ }
12313
+ },
12314
+ "find-up": {
12315
+ "version": "3.0.0",
12316
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
12317
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
12318
+ "dev": true,
12319
+ "requires": {
12320
+ "locate-path": "^3.0.0"
12321
+ }
12322
+ },
12323
+ "get-caller-file": {
12324
+ "version": "2.0.5",
12325
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
12326
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
12327
+ "dev": true
12328
+ },
12329
+ "global-modules": {
12330
+ "version": "2.0.0",
12331
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
12332
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
12333
+ "dev": true,
12334
+ "requires": {
12335
+ "global-prefix": "^3.0.0"
12336
+ }
12337
+ },
12338
+ "global-prefix": {
12339
+ "version": "3.0.0",
12340
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
12341
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
12342
+ "dev": true,
12343
+ "requires": {
12344
+ "ini": "^1.3.5",
12345
+ "kind-of": "^6.0.2",
12346
+ "which": "^1.3.1"
12347
+ }
12348
+ },
12349
+ "locate-path": {
12350
+ "version": "3.0.0",
12351
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
12352
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
12353
+ "dev": true,
12354
+ "requires": {
12355
+ "p-locate": "^3.0.0",
12356
+ "path-exists": "^3.0.0"
12357
+ }
12358
+ },
12359
+ "p-limit": {
12360
+ "version": "2.2.0",
12361
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
12362
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
12363
+ "dev": true,
12364
+ "requires": {
12365
+ "p-try": "^2.0.0"
12366
+ }
12367
+ },
12368
+ "p-locate": {
12369
+ "version": "3.0.0",
12370
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
12371
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
12372
+ "dev": true,
12373
+ "requires": {
12374
+ "p-limit": "^2.0.0"
12375
+ }
12376
+ },
12377
+ "p-try": {
12378
+ "version": "2.2.0",
12379
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
12380
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
12381
+ "dev": true
12382
+ },
12383
+ "string-width": {
12384
+ "version": "3.1.0",
12385
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
12386
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
12387
+ "dev": true,
12388
+ "requires": {
12389
+ "emoji-regex": "^7.0.1",
12390
+ "is-fullwidth-code-point": "^2.0.0",
12391
+ "strip-ansi": "^5.1.0"
12392
+ }
12393
+ },
12394
+ "strip-ansi": {
12395
+ "version": "5.2.0",
12396
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
12397
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
12398
+ "dev": true,
12399
+ "requires": {
12400
+ "ansi-regex": "^4.1.0"
12401
+ }
12402
+ },
12403
+ "supports-color": {
12404
+ "version": "6.1.0",
12405
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
12406
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
12407
+ "dev": true,
12408
+ "requires": {
12409
+ "has-flag": "^3.0.0"
12410
+ }
12411
+ },
12412
+ "wrap-ansi": {
12413
+ "version": "5.1.0",
12414
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
12415
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
12416
+ "dev": true,
12417
+ "requires": {
12418
+ "ansi-styles": "^3.2.0",
12419
+ "string-width": "^3.0.0",
12420
+ "strip-ansi": "^5.0.0"
12421
+ }
12422
+ },
12423
+ "yargs": {
12424
+ "version": "13.2.4",
12425
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
12426
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
12427
+ "dev": true,
12428
+ "requires": {
12429
+ "cliui": "^5.0.0",
12430
+ "find-up": "^3.0.0",
12431
+ "get-caller-file": "^2.0.1",
12432
+ "os-locale": "^3.1.0",
12433
+ "require-directory": "^2.1.1",
12434
+ "require-main-filename": "^2.0.0",
12435
+ "set-blocking": "^2.0.0",
12436
+ "string-width": "^3.0.0",
12437
+ "which-module": "^2.0.0",
12438
+ "y18n": "^4.0.0",
12439
+ "yargs-parser": "^13.1.0"
12440
+ }
12441
+ },
12442
+ "yargs-parser": {
12443
+ "version": "13.1.1",
12444
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
12445
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
12446
+ "dev": true,
12447
+ "requires": {
12448
+ "camelcase": "^5.0.0",
12449
+ "decamelize": "^1.2.0"
12450
+ }
12451
+ }
12452
+ }
12453
+ },
12454
+ "webpack-livereload-plugin": {
12455
+ "version": "2.2.0",
12456
+ "resolved": "https://registry.npmjs.org/webpack-livereload-plugin/-/webpack-livereload-plugin-2.2.0.tgz",
12457
+ "integrity": "sha512-sx9xA5mHoNOUgLQI0PmXT3KV9ecsVmUaTgr+fsoL69qAOHw/7VzkL1+ZMDQ8n0dPbWounswK6cBRSgMod7Nhgg==",
12458
+ "dev": true,
12459
+ "requires": {
12460
+ "portfinder": "^1.0.17",
12461
+ "tiny-lr": "^1.1.1"
12462
+ }
12463
+ },
12464
+ "webpack-sources": {
12465
+ "version": "1.3.0",
12466
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
12467
+ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
12468
+ "dev": true,
12469
+ "requires": {
12470
+ "source-list-map": "^2.0.0",
12471
+ "source-map": "~0.6.1"
12472
+ },
12473
+ "dependencies": {
12474
+ "source-map": {
12475
+ "version": "0.6.1",
12476
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
12477
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
12478
+ "dev": true
12479
+ }
12480
+ }
12481
+ },
12482
+ "websocket-driver": {
12483
+ "version": "0.7.3",
12484
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
12485
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
12486
+ "dev": true,
12487
+ "requires": {
12488
+ "http-parser-js": ">=0.4.0 <0.4.11",
12489
+ "safe-buffer": ">=5.1.0",
12490
+ "websocket-extensions": ">=0.1.1"
12491
+ }
12492
+ },
12493
+ "websocket-extensions": {
12494
+ "version": "0.1.3",
12495
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
12496
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
12497
+ "dev": true
12498
+ },
12499
+ "whatwg-encoding": {
12500
+ "version": "1.0.5",
12501
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
12502
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
12503
+ "dev": true,
12504
+ "requires": {
12505
+ "iconv-lite": "0.4.24"
12506
+ }
12507
+ },
12508
+ "whatwg-mimetype": {
12509
+ "version": "2.3.0",
12510
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
12511
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
12512
+ "dev": true
12513
+ },
12514
+ "whatwg-url": {
12515
+ "version": "6.5.0",
12516
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
12517
+ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
12518
+ "dev": true,
12519
+ "requires": {
12520
+ "lodash.sortby": "^4.7.0",
12521
+ "tr46": "^1.0.1",
12522
+ "webidl-conversions": "^4.0.2"
12523
+ }
12524
+ },
12525
+ "which": {
12526
+ "version": "1.3.1",
12527
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
12528
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
12529
+ "dev": true,
12530
+ "requires": {
12531
+ "isexe": "^2.0.0"
12532
+ }
12533
+ },
12534
+ "which-module": {
12535
+ "version": "2.0.0",
12536
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
12537
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
12538
+ "dev": true
12539
+ },
12540
+ "wide-align": {
12541
+ "version": "1.1.3",
12542
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
12543
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
12544
+ "dev": true,
12545
+ "requires": {
12546
+ "string-width": "^1.0.2 || 2"
12547
+ }
12548
+ },
12549
+ "wordwrap": {
12550
+ "version": "1.0.0",
12551
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
12552
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
12553
+ "dev": true
12554
+ },
12555
+ "worker-farm": {
12556
+ "version": "1.7.0",
12557
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
12558
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
12559
+ "dev": true,
12560
+ "requires": {
12561
+ "errno": "~0.1.7"
12562
+ }
12563
+ },
12564
+ "wrap-ansi": {
12565
+ "version": "2.1.0",
12566
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
12567
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
12568
+ "dev": true,
12569
+ "requires": {
12570
+ "string-width": "^1.0.1",
12571
+ "strip-ansi": "^3.0.1"
12572
+ },
12573
+ "dependencies": {
12574
+ "ansi-regex": {
12575
+ "version": "2.1.1",
12576
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
12577
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
12578
+ "dev": true
12579
+ },
12580
+ "is-fullwidth-code-point": {
12581
+ "version": "1.0.0",
12582
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
12583
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
12584
+ "dev": true,
12585
+ "requires": {
12586
+ "number-is-nan": "^1.0.0"
12587
+ }
12588
+ },
12589
+ "string-width": {
12590
+ "version": "1.0.2",
12591
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
12592
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
12593
+ "dev": true,
12594
+ "requires": {
12595
+ "code-point-at": "^1.0.0",
12596
+ "is-fullwidth-code-point": "^1.0.0",
12597
+ "strip-ansi": "^3.0.0"
12598
+ }
12599
+ },
12600
+ "strip-ansi": {
12601
+ "version": "3.0.1",
12602
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
12603
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
12604
+ "dev": true,
12605
+ "requires": {
12606
+ "ansi-regex": "^2.0.0"
12607
+ }
12608
+ }
12609
+ }
12610
+ },
12611
+ "wrappy": {
12612
+ "version": "1.0.2",
12613
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
12614
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
12615
+ "dev": true
12616
+ },
12617
+ "write": {
12618
+ "version": "1.0.3",
12619
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
12620
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
12621
+ "dev": true,
12622
+ "requires": {
12623
+ "mkdirp": "^0.5.1"
12624
+ }
12625
+ },
12626
+ "write-file-atomic": {
12627
+ "version": "2.4.1",
12628
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
12629
+ "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
12630
+ "dev": true,
12631
+ "requires": {
12632
+ "graceful-fs": "^4.1.11",
12633
+ "imurmurhash": "^0.1.4",
12634
+ "signal-exit": "^3.0.2"
12635
+ }
12636
+ },
12637
+ "ws": {
12638
+ "version": "5.2.2",
12639
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
12640
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
12641
+ "dev": true,
12642
+ "requires": {
12643
+ "async-limiter": "~1.0.0"
12644
+ }
12645
+ },
12646
+ "x-is-string": {
12647
+ "version": "0.1.0",
12648
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
12649
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
12650
+ "dev": true
12651
+ },
12652
+ "xml-name-validator": {
12653
+ "version": "3.0.0",
12654
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
12655
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
12656
+ "dev": true
12657
+ },
12658
+ "xtend": {
12659
+ "version": "4.0.1",
12660
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
12661
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
12662
+ "dev": true
12663
+ },
12664
+ "y18n": {
12665
+ "version": "4.0.0",
12666
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
12667
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
12668
+ "dev": true
12669
+ },
12670
+ "yallist": {
12671
+ "version": "2.1.2",
12672
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
12673
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
12674
+ "dev": true
12675
+ },
12676
+ "yargs": {
12677
+ "version": "12.0.5",
12678
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
12679
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
12680
+ "dev": true,
12681
+ "requires": {
12682
+ "cliui": "^4.0.0",
12683
+ "decamelize": "^1.2.0",
12684
+ "find-up": "^3.0.0",
12685
+ "get-caller-file": "^1.0.1",
12686
+ "os-locale": "^3.0.0",
12687
+ "require-directory": "^2.1.1",
12688
+ "require-main-filename": "^1.0.1",
12689
+ "set-blocking": "^2.0.0",
12690
+ "string-width": "^2.0.0",
12691
+ "which-module": "^2.0.0",
12692
+ "y18n": "^3.2.1 || ^4.0.0",
12693
+ "yargs-parser": "^11.1.1"
12694
+ },
12695
+ "dependencies": {
12696
+ "find-up": {
12697
+ "version": "3.0.0",
12698
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
12699
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
12700
+ "dev": true,
12701
+ "requires": {
12702
+ "locate-path": "^3.0.0"
12703
+ }
12704
+ },
12705
+ "locate-path": {
12706
+ "version": "3.0.0",
12707
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
12708
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
12709
+ "dev": true,
12710
+ "requires": {
12711
+ "p-locate": "^3.0.0",
12712
+ "path-exists": "^3.0.0"
12713
+ }
12714
+ },
12715
+ "p-limit": {
12716
+ "version": "2.2.0",
12717
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
12718
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
12719
+ "dev": true,
12720
+ "requires": {
12721
+ "p-try": "^2.0.0"
12722
+ }
12723
+ },
12724
+ "p-locate": {
12725
+ "version": "3.0.0",
12726
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
12727
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
12728
+ "dev": true,
12729
+ "requires": {
12730
+ "p-limit": "^2.0.0"
12731
+ }
12732
+ },
12733
+ "p-try": {
12734
+ "version": "2.2.0",
12735
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
12736
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
12737
+ "dev": true
12738
+ },
12739
+ "require-main-filename": {
12740
+ "version": "1.0.1",
12741
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
12742
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
12743
+ "dev": true
12744
+ }
12745
+ }
12746
+ },
12747
+ "yargs-parser": {
12748
+ "version": "11.1.1",
12749
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
12750
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
12751
+ "dev": true,
12752
+ "requires": {
12753
+ "camelcase": "^5.0.0",
12754
+ "decamelize": "^1.2.0"
12755
+ }
12756
+ },
12757
+ "yauzl": {
12758
+ "version": "2.4.1",
12759
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
12760
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
12761
+ "dev": true,
12762
+ "requires": {
12763
+ "fd-slicer": "~1.0.1"
12764
+ }
12765
+ }
12766
+ }
12767
+ }
package.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "pretty-link",
3
+ "version": "2.1.9",
4
+ "description": "Shrink, track and share any URL on the Internet from your WordPress website!",
5
+ "main": "index.js",
6
+ "directories": {
7
+ "test": "tests"
8
+ },
9
+ "scripts": {
10
+ "build": "wp-scripts build",
11
+ "start": "wp-scripts start"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/caseproof/pretty-link.git"
16
+ },
17
+ "keywords": [],
18
+ "author": "Caseproof, LLC",
19
+ "license": "GPLv2",
20
+ "devDependencies": {
21
+ "@wordpress/scripts": "^3.2.1",
22
+ "classnames": "^2.2.6",
23
+ "css-loader": "^2.1.1",
24
+ "node-sass": "^4.12.0",
25
+ "postcss-loader": "^3.0.0",
26
+ "sass-loader": "^7.1.0",
27
+ "style-loader": "^0.23.1"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/caseproof/pretty-link/issues"
31
+ },
32
+ "homepage": "https://github.com/caseproof/pretty-link#readme",
33
+ "dependencies": {
34
+ "dom-scroll-into-view": "^1.2.1",
35
+ "lodash": "^4.17.11"
36
+ }
37
+ }
phpunit.xml.dist ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <phpunit
3
+ bootstrap="tests/bootstrap.php"
4
+ backupGlobals="false"
5
+ colors="true"
6
+ convertErrorsToExceptions="true"
7
+ convertNoticesToExceptions="true"
8
+ convertWarningsToExceptions="true"
9
+ >
10
+ <testsuites>
11
+ <testsuite name="tests">
12
+ <directory prefix="Test" suffix=".php">./tests/</directory>
13
+ </testsuite>
14
+ </testsuites>
15
+ </phpunit>
pretty-link.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Pretty Links
4
  Plugin URI: https://prettylinks.com/pl/plugin-uri
5
  Description: Shrink, track and share any URL using your website and brand!
6
- Version: 3.2.1
7
  Author: Pretty Links
8
  Author URI: http://prettylinks.com
9
  Text Domain: pretty-link
@@ -55,7 +55,7 @@ define('PRLI_VENDOR_LIB_URL',PRLI_URL.'/vendor/lib');
55
  define('PRLI_BROWSER_URL','https://d14715w921jdje.cloudfront.net/browser');
56
  define('PRLI_OS_URL','https://d14715w921jdje.cloudfront.net/os');
57
 
58
- define('PRLI_EDITION', 'pretty-link-lite');
59
 
60
  // Let's give pretty link plenty of room to work with
61
  $mem = abs(intval(@ini_get('memory_limit')));
3
  Plugin Name: Pretty Links
4
  Plugin URI: https://prettylinks.com/pl/plugin-uri
5
  Description: Shrink, track and share any URL using your website and brand!
6
+ Version: 3.2.2
7
  Author: Pretty Links
8
  Author URI: http://prettylinks.com
9
  Text Domain: pretty-link
55
  define('PRLI_BROWSER_URL','https://d14715w921jdje.cloudfront.net/browser');
56
  define('PRLI_OS_URL','https://d14715w921jdje.cloudfront.net/os');
57
 
58
+ define('PRLI_EDITION', 'pretty-link-pro');
59
 
60
  // Let's give pretty link plenty of room to work with
61
  $mem = abs(intval(@ini_get('memory_limit')));
pro/README ADDED
File without changes
pro/app/controllers/PlpAppController.php ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpAppController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action('admin_menu', array($this, 'admin_menu'));
6
+ add_action('prli_load_admin_scripts', array($this, 'enqueue_admin_scripts'), 10, 2);
7
+ add_action('init', array($this,'route_standalone_request'));
8
+ }
9
+
10
+ public function admin_menu() {
11
+ global $plp_options;
12
+
13
+ $role = 'administrator';
14
+
15
+ if(isset($plp_options->min_role)) {
16
+ $role = $plp_options->min_role;
17
+ }
18
+
19
+ do_action('plp_admin_menu', $role);
20
+ }
21
+
22
+ public function enqueue_admin_scripts($hook, $page_vars) {
23
+ global $prli_link, $prli_options, $prli_link_meta, $current_screen;
24
+
25
+ extract($page_vars);
26
+
27
+ if( preg_match('/_page_plp-reports$/', $hook) ) {
28
+ wp_enqueue_style('plp-reports', PLP_CSS_URL.'/admin_reports.css', null, PRLI_VERSION);
29
+ wp_register_script('plp-google-vis', 'https://www.gstatic.com/charts/loader.js', array(), PRLI_VERSION);
30
+
31
+ // TODO: We actually want localize script for the data and separate js files for these
32
+ if(isset($_GET['action']) && $_GET['action'] == 'display-custom-report') {
33
+ global $plp_report;
34
+ wp_enqueue_script('plp-draw-report', PLP_JS_URL.'/admin_draw_report.js', array('jquery','plp-google-vis'), PRLI_VERSION);
35
+ wp_localize_script('plp-draw-report', 'PlpReport', $plp_report->custom_report_vars());
36
+ }
37
+ else if(isset($_GET['action']) && $_GET['action'] == 'display-split-test-report') {
38
+ global $plp_report;
39
+ wp_enqueue_script('plp-draw-report', PLP_JS_URL.'/admin_draw_report.js', array('jquery','plp-google-vis'), PRLI_VERSION);
40
+ wp_localize_script('plp-draw-report', 'PlpReport', $plp_report->split_test_report_vars());
41
+ }
42
+ else {
43
+ wp_enqueue_script('plp-reports', PLP_JS_URL.'/admin_reports.js', array('jquery'), PRLI_VERSION);
44
+ }
45
+ }
46
+
47
+ if( preg_match('/_page_pretty-link-options$/', $hook) ) {
48
+ wp_register_style('plp-spectrum', PLP_VENDOR_URL.'/spectrum/spectrum.min.css', array(), '1.8.0');
49
+ wp_register_script('plp-spectrum', PLP_VENDOR_URL.'/spectrum/spectrum.min.js', array(), '1.8.0', true);
50
+
51
+ wp_enqueue_style('plp-options', PLP_CSS_URL.'/admin_options.css', array('pl-options','plp-spectrum'), PRLI_VERSION);
52
+ wp_enqueue_script('plp-options', PLP_JS_URL.'/admin_options.js', array('jquery','pl-options','plp-spectrum'), PRLI_VERSION);
53
+ }
54
+
55
+ if( preg_match('/_page_pretty-link-tools$/', $hook) ) {
56
+ wp_enqueue_style('plp-bookmarklet', PLP_CSS_URL.'/admin_bookmarklet.css', null, PRLI_VERSION);
57
+ wp_enqueue_script('plp-bookmarklet', PLP_JS_URL.'/admin_bookmarklet.js', array('jquery'), PRLI_VERSION);
58
+ wp_localize_script('plp-bookmarklet', 'PlpBookmarklet', array( 'url' => site_url("index.php?action=prli_bookmarklet&k={$prli_options->bookmarklet_auth}") ));
59
+ }
60
+
61
+ if( in_array( $hook, array('post-new.php','post.php') ) ) {
62
+ global $post;
63
+ wp_enqueue_style('plp-post', PLP_CSS_URL.'/admin_post.css', null, PRLI_VERSION);
64
+ wp_enqueue_script('plp-post', PLP_JS_URL.'/admin_post.js', array('jquery'), PRLI_VERSION);
65
+ wp_localize_script('plp-post', 'PlpPost', array( 'post_id' => $post->ID ));
66
+ }
67
+
68
+ if( $is_link_edit_page || $is_link_new_page ) {
69
+ global $post;
70
+
71
+ wp_enqueue_style('jquery-ui-timepicker-addon', PLP_CSS_URL.'/jquery-ui-timepicker-addon.css', array('pl-ui-smoothness'), PRLI_VERSION);
72
+
73
+ wp_register_script('plp-timepicker-js', PLP_JS_URL.'/jquery-ui-timepicker-addon.js', array('jquery-ui-datepicker'));
74
+ wp_register_script('plp-datepicker', PLP_JS_URL.'/date_picker.js', array('plp-timepicker-js'), PRLI_VERSION);
75
+
76
+ ob_start();
77
+ PlpLinksHelper::rotation_row('',0);
78
+ $rotation_row_html = ob_get_clean();
79
+
80
+ ob_start();
81
+ PlpLinksHelper::geo_row();
82
+ $geo_row_html = ob_get_clean();
83
+
84
+ ob_start();
85
+ PlpLinksHelper::tech_row();
86
+ $tech_row_html = ob_get_clean();
87
+
88
+ ob_start();
89
+ PlpLinksHelper::time_row();
90
+ $time_row_html = ob_get_clean();
91
+
92
+ $link_id = 0;
93
+ if(isset($post) && isset($post->ID)) {
94
+ $link_id = $prli_link->get_link_from_cpt($post->ID);
95
+ }
96
+
97
+ if(!empty($link_id) &&
98
+ empty($_POST['prli_geo_url']) &&
99
+ empty($_POST['prli_geo_countries'])) {
100
+ $geo_url = $prli_link_meta->get_link_meta($link_id, 'geo_url');
101
+ $geo_countries = $prli_link_meta->get_link_meta($link_id, 'geo_countries');
102
+ }
103
+ else {
104
+ $geo_url = isset($_POST['prli_geo_url']) && is_array($_POST['prli_geo_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_geo_url']))) : array();
105
+ $geo_countries = isset($_POST['prli_geo_countries']) && is_array($_POST['prli_geo_countries']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_geo_countries'])) : array();
106
+ }
107
+
108
+ if(!empty($link_id) && empty($_POST['prli_tech_url']) &&
109
+ empty($_POST['prli_tech_device']) &&
110
+ empty($_POST['prli_tech_os']) &&
111
+ empty($_POST['prli_tech_browser'])) {
112
+ $tech_url = $prli_link_meta->get_link_meta($link_id, 'tech_url');
113
+ $tech_device = $prli_link_meta->get_link_meta($link_id, 'tech_device');
114
+ $tech_os = $prli_link_meta->get_link_meta($link_id, 'tech_os');
115
+ $tech_browser = $prli_link_meta->get_link_meta($link_id, 'tech_browser');
116
+ }
117
+ else {
118
+ $tech_url = isset($_POST['prli_tech_url']) && is_array($_POST['prli_tech_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_tech_url']))) : array();
119
+ $tech_device = isset($_POST['prli_tech_device']) && is_array($_POST['prli_tech_device']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_device'])) : array();
120
+ $tech_os = isset($_POST['prli_tech_os']) && is_array($_POST['prli_tech_os']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_os'])) : array();
121
+ $tech_browser = isset($_POST['prli_tech_browser']) && is_array($_POST['prli_tech_browser']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_browser'])) : array();
122
+ }
123
+
124
+ if(!empty($link_id) && empty($_POST['prli_time_url']) &&
125
+ empty($_POST['prli_time_start']) &&
126
+ empty($_POST['prli_time_end'])) {
127
+ $time_url = $prli_link_meta->get_link_meta($link_id, 'time_url');
128
+ $time_start = $prli_link_meta->get_link_meta($link_id, 'time_start');
129
+ $time_end = $prli_link_meta->get_link_meta($link_id, 'time_end');
130
+ }
131
+ else {
132
+ $time_url = isset($_POST['prli_time_url']) && is_array($_POST['prli_time_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_time_url']))) : array();
133
+ $time_start = isset($_POST['prli_time_start']) && is_array($_POST['prli_time_start']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_time_start'])) : array();
134
+ $time_end = isset($_POST['prli_time_end']) && is_array($_POST['prli_time_end']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_time_end'])) : array();
135
+ }
136
+
137
+ wp_enqueue_script('plp-admin-links', PLP_JS_URL.'/admin_links.js', array('jquery','prli-admin-links','suggest','plp-datepicker'), PRLI_VERSION);
138
+ wp_localize_script('plp-admin-links', 'PlpLink', array(
139
+ 'l10n_print_after' => 'PlpLink = ' . wp_json_encode(compact('rotation_row_html','geo_row_html','geo_url','geo_countries','tech_row_html','tech_url','tech_device','tech_os','tech_browser','time_row_html','time_url','time_start','time_end'))
140
+ ));
141
+ }
142
+ }
143
+
144
+ public function route_standalone_request() {
145
+ $plugin = (isset($_REQUEST['plugin'])?sanitize_key(stripslashes($_REQUEST['plugin'])):'');
146
+ $controller = (isset($_REQUEST['controller'])?sanitize_key(stripslashes($_REQUEST['controller'])):'');
147
+ $action = (isset($_REQUEST['action'])?sanitize_key(stripslashes($_REQUEST['action'])):'');
148
+
149
+ if( $plugin && $plugin=='pretty-link-pro' && $controller && $action ) {
150
+ if($controller && $controller=='links') {
151
+ if($action && $action=='prettybar') {
152
+ PlpPrettyBarHelper::render_prettybar(sanitize_text_field(stripslashes($_REQUEST['s'])));
153
+ }
154
+ }
155
+ exit;
156
+ }
157
+ else if( $action == 'prli_endpoint_url' ) {
158
+ global $prli_options;
159
+
160
+ $key = sanitize_key(stripslashes($_REQUEST['k']));
161
+ $url = esc_url_raw(trim(stripslashes($_REQUEST['url'])));
162
+
163
+ if($key == $prli_options->bookmarklet_auth) {
164
+ $pretty_link_id = prli_create_pretty_link( $url );
165
+ if( $pretty_link = prli_get_pretty_link_url( $pretty_link_id ) ) {
166
+ echo esc_url($pretty_link);
167
+ }
168
+ else {
169
+ esc_html_e('ERROR: Your Pretty Link was unable to be created', 'pretty-link');
170
+ }
171
+ }
172
+ else {
173
+ esc_html_e('Unauthorized', 'pretty-link');
174
+ }
175
+
176
+ exit;
177
+ }
178
+ }
179
+ }
pro/app/controllers/PlpDbController.php ADDED
@@ -0,0 +1,282 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpDbController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action('init', array($this,'install'), 11);
6
+ }
7
+
8
+ public function install() {
9
+ if($this->should_install_pro_db()) {
10
+ // For some reason, install gets called multiple times so we're basically
11
+ // adding a mutex here (ala a transient) to ensure this only gets run once
12
+ $is_installing = get_transient('plp_installing');
13
+ if($is_installing) {
14
+ return;
15
+ }
16
+ else {
17
+ // 30 minutes
18
+ set_transient('plp_installing', 1, 60*30);
19
+ }
20
+
21
+ @ignore_user_abort(true);
22
+ @set_time_limit(0);
23
+ $this->install_pro_db();
24
+
25
+ delete_transient('plp_installing');
26
+ }
27
+ }
28
+
29
+ public function should_install_pro_db() {
30
+ global $plp_db_version;
31
+ $old_pro_db_version = get_option('prlipro_db_version');
32
+
33
+ if($plp_db_version != $old_pro_db_version) { return true; }
34
+
35
+ return false;
36
+ }
37
+
38
+ public function install_pro_db() {
39
+ global $wpdb, $plp_db_version;
40
+
41
+ $upgrade_path = ABSPATH . 'wp-admin/includes/upgrade.php';
42
+ require_once($upgrade_path);
43
+
44
+ // Pretty Links Pro Tables
45
+ $keywords_table = "{$wpdb->prefix}prli_keywords";
46
+ $post_keywords_table = "{$wpdb->prefix}prli_post_keywords";
47
+ $post_urls_table = "{$wpdb->prefix}prli_post_urls";
48
+ $reports_table = "{$wpdb->prefix}prli_reports";
49
+ $report_links_table = "{$wpdb->prefix}prli_report_links";
50
+ $link_rotations_table = "{$wpdb->prefix}prli_link_rotations";
51
+ $clicks_rotations_table = "{$wpdb->prefix}prli_clicks_rotations";
52
+
53
+ // This was introduced in WordPress 3.5
54
+ // $char_col = $wpdb->get_charset_collate(); //This doesn't work for most non english setups
55
+ $char_col = "";
56
+ $collation = $wpdb->get_row("SHOW FULL COLUMNS FROM {$wpdb->posts} WHERE field = 'post_content'");
57
+
58
+ if(isset($collation->Collation)) {
59
+ $charset = explode('_', $collation->Collation);
60
+
61
+ if(is_array($charset) && count($charset) > 1) {
62
+ $charset = $charset[0]; //Get the charset from the collation
63
+ $char_col = "DEFAULT CHARACTER SET {$charset} COLLATE {$collation->Collation}";
64
+ }
65
+ }
66
+
67
+ //Fine we'll try it your way this time
68
+ if(empty($char_col)) { $char_col = $wpdb->get_charset_collate(); }
69
+
70
+ //Fix for large indexes
71
+ //$wpdb->query("SET GLOBAL innodb_large_prefix=1");
72
+
73
+ /* Create/Upgrade Keywords Table */
74
+ $sql = "
75
+ CREATE TABLE {$keywords_table} (
76
+ id int(11) NOT NULL auto_increment,
77
+ text varchar(255) NOT NULL,
78
+ link_id int(11) NOT NULL,
79
+ created_at datetime NOT NULL,
80
+ PRIMARY KEY (id),
81
+ KEY link_id (link_id),
82
+ KEY text (text(191))
83
+ ) {$char_col};
84
+ ";
85
+
86
+ dbDelta($sql);
87
+
88
+ /* Create/Upgrade Keywords Table */
89
+ $sql = "
90
+ CREATE TABLE {$post_keywords_table} (
91
+ id int(11) NOT NULL auto_increment,
92
+ keyword_id int(11) NOT NULL,
93
+ post_id int(11) NOT NULL,
94
+ PRIMARY KEY (id),
95
+ KEY keyword_id (keyword_id),
96
+ KEY post_id (post_id),
97
+ UNIQUE KEY post_keyword_index (keyword_id,post_id)
98
+ ) {$char_col};
99
+ ";
100
+
101
+ dbDelta($sql);
102
+
103
+ /* Create/Upgrade URLs Table */
104
+ $sql = "
105
+ CREATE TABLE {$post_urls_table} (
106
+ id int(11) NOT NULL auto_increment,
107
+ url_id int(11) NOT NULL,
108
+ post_id int(11) NOT NULL,
109
+ PRIMARY KEY (id),
110
+ KEY url_id (url_id),
111
+ KEY post_id (post_id),
112
+ UNIQUE KEY post_url_index (url_id,post_id)
113
+ ) {$char_col};
114
+ ";
115
+
116
+ dbDelta($sql);
117
+
118
+ /* Create/Upgrade Reports Table */
119
+ $sql = "
120
+ CREATE TABLE {$reports_table} (
121
+ id int(11) NOT NULL auto_increment,
122
+ name varchar(255) NOT NULL,
123
+ goal_link_id int(11) default NULL,
124
+ created_at datetime NOT NULL,
125
+ PRIMARY KEY (id),
126
+ KEY goal_link_id (goal_link_id),
127
+ KEY name (name(191))
128
+ ) {$char_col};
129
+ ";
130
+
131
+ dbDelta($sql);
132
+
133
+ /* Create/Upgrade Reports Table */
134
+ $sql = "
135
+ CREATE TABLE {$report_links_table} (
136
+ id int(11) NOT NULL auto_increment,
137
+ report_id int(11) NOT NULL,
138
+ link_id int(11) NOT NULL,
139
+ created_at datetime NOT NULL,
140
+ PRIMARY KEY (id),
141
+ KEY report_id (report_id),
142
+ KEY link_id (link_id)
143
+ ) {$char_col};
144
+ ";
145
+
146
+ dbDelta($sql);
147
+
148
+ /* Create/Upgrade Link Rotations Table */
149
+ $sql = "
150
+ CREATE TABLE {$link_rotations_table} (
151
+ id int(11) NOT NULL auto_increment,
152
+ url varchar(255) default NULL,
153
+ weight int(11) default 0,
154
+ r_index int(11) default 0,
155
+ link_id int(11) NOT NULL,
156
+ created_at datetime NOT NULL,
157
+ PRIMARY KEY (id),
158
+ KEY link_id (link_id),
159
+ KEY url (url(191)),
160
+ KEY weight (weight),
161
+ KEY r_index (r_index)
162
+ ) {$char_col};
163
+ ";
164
+
165
+ dbDelta($sql);
166
+
167
+ /* Create/Upgrade Clicks / Rotations Table */
168
+ $sql = "
169
+ CREATE TABLE {$clicks_rotations_table} (
170
+ id int(11) NOT NULL auto_increment,
171
+ click_id int(11) NOT NULL,
172
+ link_id int(11) NOT NULL,
173
+ url text NOT NULL,
174
+ PRIMARY KEY (id),
175
+ KEY click_id (click_id),
176
+ KEY link_id (link_id)
177
+ ) {$char_col};
178
+ ";
179
+
180
+ dbDelta($sql);
181
+
182
+ $this->migrate_after_db_upgrade($plp_db_version);
183
+
184
+ /***** SAVE DB VERSION *****/
185
+ update_option('prlipro_db_version', $plp_db_version);
186
+ wp_cache_delete('alloptions', 'options');
187
+ }
188
+
189
+ public function migrate_after_db_upgrade($db_version) {
190
+ global $wpdb;
191
+
192
+ $prli_db = new PrliDb();
193
+
194
+ $group_table = "{$wpdb->prefix}prli_groups";
195
+ if(get_option('prlipro_db_version') <= 10 && $prli_db->table_exists($group_table)) {
196
+ $ctax = PlpLinkCategoriesController::$ctax;
197
+ $group_category_map = array();
198
+
199
+ $q = "SELECT * FROM {$group_table}";
200
+ $groups = $wpdb->get_results($q);
201
+
202
+ // for each group
203
+ foreach($groups as $group) {
204
+
205
+ // Skip this group if term already exists
206
+ if (term_exists($group->name, $ctax)) {
207
+ continue;
208
+ }
209
+
210
+ // - Add group as category
211
+ $term = wp_insert_term(
212
+ $group->name,
213
+ $ctax,
214
+ array( 'description' => $group->description )
215
+ );
216
+
217
+ if(is_wp_error($term)) {
218
+ continue;
219
+ }
220
+
221
+ // - Save the group to category mapping to migrate Auto-Create groups
222
+ $group_category_map[$group->id] = $term['term_id'];
223
+
224
+ $q = $wpdb->prepare("SELECT link_cpt_id FROM {$wpdb->prefix}prli_links WHERE group_id=%d", $group->id);
225
+ $link_cpt_ids = $wpdb->get_col($q);
226
+
227
+ // - Add links associated with group to new category
228
+ foreach($link_cpt_ids as $link_cpt_id) {
229
+ $wpdb->insert(
230
+ $wpdb->term_relationships,
231
+ array(
232
+ 'object_id' => $link_cpt_id,
233
+ 'term_taxonomy_id' => $term['term_taxonomy_id']
234
+ ),
235
+ array( '%d', '%d' )
236
+ );
237
+ }
238
+
239
+ // Update the term_taxonomy count
240
+ $q = $wpdb->prepare("
241
+ UPDATE {$wpdb->term_taxonomy}
242
+ SET `count`=%d
243
+ WHERE `term_taxonomy_id`=%d
244
+ ",
245
+ count($link_cpt_ids),
246
+ $term['term_taxonomy_id']
247
+ );
248
+
249
+ $wpdb->query($q);
250
+ }
251
+
252
+ // - Migrate Auto-Create groups to category
253
+ global $plp_options;
254
+
255
+ if (isset($plp_options->posts_group) && !empty($plp_options->posts_group) && isset($group_category_map[$plp_options->posts_group])) {
256
+ $plp_options->posts_category = $group_category_map[$plp_options->posts_group];
257
+ }
258
+
259
+ if (isset($plp_options->pages_group) && !empty($plp_options->pages_group) && isset($group_category_map[$plp_options->pages_group])) {
260
+ $plp_options->pages_category = $group_category_map[$plp_options->pages_group];
261
+ }
262
+
263
+ // - CPTs
264
+ if (is_array($plp_options->autocreate)) {
265
+ foreach ($plp_options->autocreate as $post_type => $options) {
266
+ if (isset($options['group'])) {
267
+ if (is_numeric($options['group']) && isset($group_category_map[$options['group']])) {
268
+ $category = $group_category_map[$options['group']];
269
+ } else {
270
+ $category = '';
271
+ }
272
+
273
+ $plp_options->autocreate[$post_type]['category'] = $category;
274
+ }
275
+ }
276
+ }
277
+
278
+ $plp_options->store();
279
+ }
280
+ }
281
+ }
282
+
pro/app/controllers/PlpImportExportController.php ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpImportExportController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action('wp_ajax_plp-export-links', array($this, 'export'));
6
+ add_action('plp_admin_menu', array($this, 'admin_menu'), 10, 1);
7
+ }
8
+
9
+ public function admin_menu($role) {
10
+ $pl_link_cpt = PrliLink::$cpt;
11
+
12
+ add_submenu_page(
13
+ "edit.php?post_type={$pl_link_cpt}",
14
+ esc_html__('Pretty Links Pro | Import / Export', 'pretty-link'),
15
+ esc_html__('Import / Export', 'pretty-link'),
16
+ $role, 'plp-import-export',
17
+ array($this, 'route')
18
+ );
19
+ }
20
+
21
+ public function route() {
22
+ if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'import') {
23
+ $this->import();
24
+ }
25
+ else {
26
+ require_once(PLP_VIEWS_PATH.'/import-export/form.php');
27
+ }
28
+ }
29
+
30
+ public function import() {
31
+ global $prli_link, $prli_link_meta, $plp_keyword, $plp_options, $prli_error_messages;
32
+
33
+ if(empty($_FILES['importedfile']['tmp_name']) || !is_string($_FILES['importedfile']['tmp_name'])) {
34
+ $error = __('Import file not found.', 'pretty-link');
35
+ require_once PLP_VIEWS_PATH . '/import-export/import-error.php';
36
+ return;
37
+ }
38
+
39
+ // Helps with CSV's that don't use DOS style line endings
40
+ @ini_set("auto_detect_line_endings", true);
41
+
42
+ $filename = $_FILES['importedfile']['tmp_name'];
43
+ $headers = array();
44
+ $csvdata = array();
45
+ $row = -1;
46
+ $delimeter = $this->get_file_delimeter($filename);
47
+ $handle = fopen($filename, 'r');
48
+
49
+ if(!$handle) {
50
+ $error = __('Import file could not be opened.', 'pretty-link');
51
+ require_once PLP_VIEWS_PATH . '/import-export/import-error.php';
52
+ return;
53
+ }
54
+
55
+ while(($data = fgetcsv($handle, 0, $delimeter)) !== FALSE) {
56
+ $num = count($data);
57
+ for ($c=0; $c < $num; $c++) {
58
+ if($row < 0) {
59
+ $headers[] = $data[$c];
60
+ }
61
+ else if($row >= 0) {
62
+ $csvdata[$row][$headers[$c]] = $data[$c];
63
+ }
64
+ }
65
+
66
+ $row++;
67
+ }
68
+
69
+ fclose($handle);
70
+
71
+ $total_row_count = count($csvdata);
72
+
73
+ $successful_update_count = 0;
74
+ $successful_create_count = 0;
75
+ $no_action_taken_count = 0;
76
+
77
+ $creation_errors = array();
78
+ $update_errors = array();
79
+
80
+ foreach($csvdata as $csvrow) {
81
+ if(!empty($csvrow['id'])) {
82
+ $record = $prli_link->get_link_min($csvrow['id'], ARRAY_A);
83
+
84
+ if($record) {
85
+ $update_record = false; // assume there aren't any changes
86
+ $update_keywords = false; // assume there aren't any changes
87
+ foreach($csvrow as $csvkey => $csvval) {
88
+ // We'll get to the keywords in a sec for now ignore them
89
+ if($csvkey == 'keywords') { continue; }
90
+
91
+ // If there's a change, flag for update
92
+ if(isset($record[$csvkey]) && $csvval != $record[$csvkey]) {
93
+ $update_record = true;
94
+ break;
95
+ }
96
+ }
97
+
98
+ // Add Keywords
99
+ if( $plp_options->keyword_replacement_is_on ) {
100
+ $keyword_str = $plp_keyword->getTextByLinkId( $csvrow['id'] );
101
+ $keywords = explode( ",", $keyword_str );
102
+ $new_keywords = explode(",",$csvrow['keywords']);
103
+
104
+ if(count($keywords) == count($new_keywords)) {
105
+ for($i=0;$i < count($keywords);$i++) {
106
+ $keywords[$i] = trim($keywords[$i]);
107
+ }
108
+
109
+ sort($keywords);
110
+
111
+ for($i=0;$i < count($new_keywords);$i++) {
112
+ $new_keywords[$i] = trim($new_keywords[$i]);
113
+ }
114
+
115
+ sort($new_keywords);
116
+
117
+ for($i=0; $i < count($new_keywords); $i++) {
118
+ if($keywords[$i] != $new_keywords[$i]) {
119
+ $update_keywords = true;
120
+ break;
121
+ }
122
+ }
123
+ }
124
+ else {
125
+ $update_keywords = true;
126
+ }
127
+ }
128
+
129
+ $record_updated = false;
130
+
131
+ if($update_record) {
132
+ if( $record_updated =
133
+ prli_update_pretty_link(
134
+ $csvrow['id'],
135
+ trim($csvrow['url']),
136
+ $csvrow['slug'],
137
+ $csvrow['name'],
138
+ (isset($csvrow['description']))?$csvrow['description']:'',
139
+ null,// group_id deprecated
140
+ $csvrow['track_me'],
141
+ $csvrow['nofollow'],
142
+ $csvrow['sponsored'],
143
+ $csvrow['redirect_type'],
144
+ $csvrow['param_forwarding'],
145
+ '' /*param_struct*/ ) ) {
146
+ $successful_update_count++;
147
+ $prli_link_meta->update_link_meta($csvrow['id'], 'delay', (isset($csvrow['delay']))?(int)$csvrow['delay']:0);
148
+ $prli_link_meta->update_link_meta($csvrow['id'], 'google_tracking', (isset($csvrow['google_tracking']))?(bool)$csvrow['google_tracking']:false);
149
+
150
+ if(isset($csvrow['link_categories'])) {
151
+ $this->import_link_categories($csvrow['id'], $csvrow['link_categories']);
152
+ }
153
+
154
+ if(isset($csvrow['link_tags'])) {
155
+ $this->import_link_tags($csvrow['id'], $csvrow['link_tags']);
156
+ }
157
+ }
158
+ else {
159
+ $update_errors[] = array('id' => $csvrow['id'], 'errors' => $prli_error_messages);
160
+ }
161
+ }
162
+
163
+ if($update_keywords) {
164
+ // We don't want to update the keywords if there was an error
165
+ // in the record's update that is, if the record was updated
166
+ if($record_updated || !$update_record) {
167
+ $plp_keyword->updateLinkKeywords($csvrow['id'], stripslashes($csvrow['keywords']));
168
+
169
+ // If the record was never updated then increment the count
170
+ if(!$update_record) {
171
+ $successful_update_count++;
172
+ }
173
+ }
174
+ }
175
+
176
+ if(!$update_record && !$update_keywords) {
177
+ $no_action_taken_count++;
178
+ }
179
+ }
180
+ }
181
+ else {
182
+ if( $newid =
183
+ prli_create_pretty_link(
184
+ trim($csvrow['url']),
185
+ $csvrow['slug'],
186
+ $csvrow['name'],
187
+ (isset($csvrow['description']))?$csvrow['description']:'',
188
+ null, // group_id is deprecated
189
+ $csvrow['track_me'],
190
+ $csvrow['nofollow'],
191
+ $csvrow['sponsored'],
192
+ $csvrow['redirect_type'],
193
+ $csvrow['param_forwarding'],
194
+ '' /*param_struct*/ ) ) {
195
+ $successful_create_count++;
196
+ $prli_link_meta->update_link_meta($newid, 'delay', (isset($csvrow['delay']))?(int)$csvrow['delay']:0);
197
+ $prli_link_meta->update_link_meta($newid, 'google_tracking', (isset($csvrow['google_tracking']))?(bool)$csvrow['google_tracking']:false);
198
+
199
+ if(isset($csvrow['link_categories'])) {
200
+ $this->import_link_categories($newid, $csvrow['link_categories']);
201
+ }
202
+
203
+ if(isset($csvrow['link_tags'])) {
204
+ $this->import_link_tags($newid, $csvrow['link_tags']);
205
+ }
206
+
207
+ if( $plp_options->keyword_replacement_is_on && !empty($csvrow['keywords']) ) {
208
+ $plp_keyword->updateLinkKeywords($newid, stripslashes($csvrow['keywords']));
209
+ }
210
+ }
211
+ else {
212
+ $creation_errors[] = array('slug' => $csvrow['slug'], 'errors' => $prli_error_messages);
213
+ }
214
+ }
215
+
216
+ $prli_error_messages = array();
217
+ }
218
+
219
+ require_once(PLP_VIEWS_PATH.'/import-export/import.php');
220
+ }
221
+
222
+ public function export() {
223
+ global $wpdb, $prli_link, $prli_link_meta, $plp_options, $plp_keyword;
224
+
225
+ if(!PrliUtils::is_authorized()) {
226
+ echo "Why you creepin?";
227
+ die();
228
+ }
229
+
230
+ $q = $wpdb->prepare("
231
+ SELECT l.id, l.url, l.slug, l.name, l.redirect_type,
232
+ l.track_me, l.nofollow, l.sponsored, l.param_forwarding,
233
+ gt.meta_value AS google_tracking, d.meta_value AS delay,
234
+ l.created_at AS created_at, l.updated_at AS last_updated_at ,
235
+ (SELECT GROUP_CONCAT(DISTINCT t.slug ORDER BY t.slug ASC SEPARATOR ',')
236
+ FROM {$wpdb->terms} AS t
237
+ JOIN {$wpdb->term_taxonomy} AS tt
238
+ ON t.term_id = tt.term_id
239
+ AND tt.taxonomy = %s
240
+ JOIN {$wpdb->term_relationships} AS tr
241
+ ON tr.term_taxonomy_id = tt.term_taxonomy_id
242
+ WHERE tr.object_id=p.ID) AS link_categories,
243
+ (SELECT GROUP_CONCAT(DISTINCT t.slug ORDER BY t.slug ASC SEPARATOR ',')
244
+ FROM {$wpdb->terms} AS t
245
+ JOIN {$wpdb->term_taxonomy} AS tt
246
+ ON t.term_id = tt.term_id
247
+ AND tt.taxonomy = %s
248
+ JOIN {$wpdb->term_relationships} AS tr
249
+ ON tr.term_taxonomy_id = tt.term_taxonomy_id
250
+ WHERE tr.object_id=p.ID) AS link_tags
251
+ FROM {$prli_link->table_name} AS l
252
+ LEFT JOIN {$prli_link_meta->table_name} AS gt
253
+ ON l.id = gt.link_id AND gt.meta_key = 'google_tracking'
254
+ LEFT JOIN {$prli_link_meta->table_name} AS d
255
+ ON l.id = d.link_id AND d.meta_key = 'delay'
256
+ JOIN {$wpdb->posts} AS p
257
+ ON p.ID = l.link_cpt_id
258
+ WHERE l.link_status='enabled'
259
+ ",
260
+ PlpLinkCategoriesController::$ctax,
261
+ PlpLinkTagsController::$ctax
262
+ );
263
+
264
+ $links = $wpdb->get_results($q, ARRAY_A);
265
+
266
+ // Maybe Add Keywords
267
+ if( $plp_options->keyword_replacement_is_on ) {
268
+ for($i=0; $i < count($links); $i++) {
269
+ $link_id = $links[$i]['id'];
270
+ $links[$i]['keywords'] = $plp_keyword->getTextByLinkId( $link_id );
271
+ }
272
+ }
273
+
274
+ $filename = date('ymdHis',time()) . '_pretty_links.csv';
275
+ header('Content-Type: text/x-csv');
276
+ header("Content-Disposition: attachment; filename=\"{$filename}\"");
277
+ header('Expires: '.gmdate('D, d M Y H:i:s', mktime(date('H')+2, date('i'), date('s'), date('m'), date('d'), date('Y'))).' GMT');
278
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
279
+ header('Cache-Control: no-cache, must-revalidate');
280
+ header('Pragma: no-cache');
281
+
282
+ if($links[0]) {
283
+ // print the header
284
+ echo '"'.implode('","',array_keys($links[0]))."\"\n";
285
+ }
286
+
287
+ foreach($links as $link) {
288
+ $first = true;
289
+ foreach($link as $value) {
290
+ if($first) {
291
+ echo '"';
292
+ $first = false;
293
+ }
294
+ else {
295
+ echo '","';
296
+ }
297
+
298
+ echo preg_replace('/\"/', '""', PrliClicksHelper::esc_spreadsheet_cell( stripslashes($value) ));
299
+ }
300
+
301
+ echo "\"\n";
302
+ }
303
+
304
+ exit;
305
+ }
306
+
307
+ /** Import link categories into the link. NOTE: This will overwrite link categories so
308
+ * whatever categories you have here will be the ONLY categories the link will belong
309
+ * to after this runs
310
+ *
311
+ * @param $link_id The id of the link we want to associate categories with
312
+ * @param $link_categories This should be either an array of category slugs or a
313
+ * comma-separated values string of categories.
314
+ *
315
+ * @return Same as https://codex.wordpress.org/Function_Reference/wp_set_object_terms
316
+ */
317
+ private function import_link_categories($link_id, $link_categories) {
318
+ global $prli_link;
319
+
320
+ if(!is_array($link_categories)) {
321
+ $link_categories = array_map('trim',explode(',',$link_categories));
322
+ }
323
+
324
+ $link = $prli_link->getOne($link_id);
325
+ return wp_set_object_terms( $link->link_cpt_id, $link_categories, PlpLinkCategoriesController::$ctax );
326
+ }
327
+
328
+ /** Import link tags into the link. NOTE: This will overwrite link tags so
329
+ * whatever tags you have here will be the ONLY tags the link will belong
330
+ * to after this runs
331
+ *
332
+ * @param $link_id The id of the link we want to associate tags with
333
+ * @param $link_tags This should be either an array of tag slugs or a
334
+ * comma-separated values string of tags.
335
+ *
336
+ * @return Same as https://codex.wordpress.org/Function_Reference/wp_set_object_terms
337
+ */
338
+ private function import_link_tags($link_id, $link_tags) {
339
+ global $prli_link;
340
+
341
+ if(!is_array($link_tags)) {
342
+ $link_tags = array_map('trim',explode(',',$link_tags));
343
+ }
344
+
345
+ $link = $prli_link->getOne($link_id);
346
+ return wp_set_object_terms( $link->link_cpt_id, $link_tags, PlpLinkTagsController::$ctax );
347
+ }
348
+
349
+ private function get_file_delimeter($filepath) {
350
+ $delimiters = apply_filters(
351
+ 'plp-importer-delimiters',
352
+ array(
353
+ ';' => 0,
354
+ ',' => 0,
355
+ "\t" => 0,
356
+ "|" => 0
357
+ ),
358
+ $filepath
359
+ );
360
+
361
+ $handle = fopen($filepath, "r");
362
+
363
+ if($handle) {
364
+ $first_line = fgets($handle);
365
+ fclose($handle);
366
+
367
+ foreach ($delimiters as $delimiter => &$count) {
368
+ $count = count(str_getcsv($first_line, $delimiter));
369
+ }
370
+
371
+ if (max($delimiters) > 0) {
372
+ return array_search(max($delimiters), $delimiters);
373
+ }
374
+ }
375
+
376
+ return ','; // Default to comma
377
+ }
378
+ }
pro/app/controllers/PlpKeywordsController.php ADDED
@@ -0,0 +1,513 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpKeywordsController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ global $plp_options;
6
+
7
+ //Go no further if keywords are off
8
+ if(!$plp_options->keyword_replacement_is_on) { return; }
9
+
10
+ // add_filter('widget_text', array($this, 'replace_keywords'), 999999);
11
+ // NOTE - This priority must be lower than social buttons bar
12
+ $priority = apply_filters('prli_keywords_content_filter_priority', 999);
13
+ add_filter('the_content', array($this, 'replace_keywords'), $priority);
14
+
15
+ // BBPress integration
16
+ add_filter('bbp_get_reply_content', array($this, 'replace_bbpress_keywords'), 11, 2);
17
+
18
+ // WooCommerce short descriptions
19
+ add_filter('woocommerce_short_description', array($this, 'replace_keywords'), 11);
20
+
21
+ if($plp_options->replace_keywords_in_feeds) {
22
+ add_filter('the_content_feed', array($this,'replace_keywords'), 1);
23
+ }
24
+
25
+ if($plp_options->replace_keywords_in_comments) {
26
+ add_filter('comment_text', array($this,'replace_keywords_in_comments'), 1);
27
+ }
28
+
29
+ if($plp_options->replace_keywords_in_feeds && $plp_options->replace_keywords_in_comments) {
30
+ add_filter('comment_text_rss', array($this,'replace_keywords_in_comments'), 1);
31
+ }
32
+
33
+ add_action('wp_enqueue_scripts', array($this,'keyword_link_style'));
34
+
35
+ add_filter('prli_link_column_keywords', array($this,'keyword_link_column_row'), 10, 2);
36
+
37
+ add_filter('get_the_excerpt', array($this, 'excerpt_remove_keyword_replacement'), 1);
38
+
39
+ $index_keywords = get_option('plp_index_keywords', false);
40
+ if($plp_options->keyword_replacement_is_on && $index_keywords) {
41
+ add_filter('cron_schedules', array($this,'intervals'));
42
+
43
+ $num_builders = 2;
44
+ $separation_t = MINUTE_IN_SECONDS;
45
+
46
+ for($i=0; $i<$num_builders; $i++) {
47
+ if (!wp_next_scheduled("plp_post_build_index{$i}")) {
48
+ wp_schedule_event( (time() + ($separation_t * $i)), 'plp_post_build_index_interval', "plp_post_build_index{$i}" );
49
+ }
50
+
51
+ add_action("plp_post_build_index{$i}", array($this,'post_index_builder'));
52
+ }
53
+
54
+ if($plp_options->replace_keywords_in_comments) {
55
+ add_action('wp_insert_comment', array($this, 'comment_inserted'), 10, 2);
56
+ add_action('wp_set_comment_status', array($this, 'set_comment_status'), 10, 2);
57
+ }
58
+ }
59
+ }
60
+
61
+ public function intervals ($schedules) {
62
+ $interval = 1 * MINUTE_IN_SECONDS;
63
+ return array_merge(
64
+ $schedules,
65
+ array(
66
+ 'plp_post_build_index_interval' => array(
67
+ 'interval' => $interval,
68
+ 'display' => __('Pretty Link Post Build Index', 'pretty-link')
69
+ ),
70
+ )
71
+ );
72
+ }
73
+
74
+ public function set_comment_status ($comment_id, $status) {
75
+ if($status=='approve') {
76
+ delete_comment_meta($comment_id, '_plp_comment_keywords_updated_at');
77
+ delete_comment_meta($comment_id, '_plp_comment_urls_updated_at');
78
+ }
79
+ }
80
+
81
+ public function comment_inserted ($comment_id, $c) {
82
+ if($c->comment_approved) {
83
+ delete_comment_meta($comment_id, '_plp_comment_keywords_updated_at');
84
+ delete_comment_meta($comment_id, '_plp_comment_urls_updated_at');
85
+ }
86
+ }
87
+
88
+ public function post_index_builder () {
89
+ global $plp_options, $plp_keyword, $plp_url_replacement;
90
+
91
+ $max_count = 2;
92
+
93
+ $index_keywords = get_option('plp_index_keywords', false);
94
+ if($plp_options->keyword_replacement_is_on && $index_keywords) {
95
+
96
+ // Index Keywords for Posts
97
+ $post_ids = $plp_keyword->get_indexable_posts($max_count);
98
+ if(!empty($post_ids)) {
99
+ for ($i=0; ($i < count($post_ids)); $i++) {
100
+ $plp_keyword->index_post($post_ids[$i]);
101
+ }
102
+ return; // Short circuit
103
+ }
104
+
105
+ // Index URLs for Posts
106
+ $post_ids = $plp_url_replacement->get_indexable_posts($max_count);
107
+ if(!empty($post_ids)) {
108
+ for ($i=0; ($i < count($post_ids)); $i++) {
109
+ $plp_url_replacement->index_post($post_ids[$i]);
110
+ }
111
+ return; // Short circuit
112
+ }
113
+
114
+ if($plp_options->replace_keywords_in_comments) {
115
+
116
+ // Index Kewords for Comments
117
+ $comment_ids = $plp_keyword->get_indexable_comments($max_count);
118
+ if(!empty($comment_ids)) {
119
+ for ($i=0; ($i < count($comment_ids)); $i++) {
120
+ $plp_keyword->index_comment($comment_ids[$i]);
121
+ }
122
+ return; // Short circuit
123
+ }
124
+
125
+ // Index URLs for Comments
126
+ $comment_ids = $plp_url_replacement->get_indexable_comments($max_count);
127
+ if(!empty($comment_ids)) {
128
+ for ($i=0; ($i < count($comment_ids)); $i++) {
129
+ $plp_url_replacement->index_comment($comment_ids[$i]);
130
+ }
131
+ return; // Short circuit
132
+ }
133
+
134
+ }
135
+
136
+ }
137
+ }
138
+
139
+ // Removes keyword replacement from excerpts
140
+ public function excerpt_remove_keyword_replacement($excerpt) {
141
+ remove_filter('the_content', array($this, 'replace_keywords'));
142
+ return $excerpt;
143
+ }
144
+
145
+ //Wrapper for replace_keywords() for bbPress
146
+ public function replace_bbpress_keywords($content, $id) {
147
+ return $this->replace_keywords($content,'',false);
148
+ }
149
+
150
+ public function replace_keywords($content, $request_uri = '', $allow_header_footer = true) {
151
+ global $post, $prli_link, $prli_blogurl, $plp_keyword, $plp_url_replacement, $plp_options;
152
+
153
+ if(!isset($post) || !isset($post->ID)) { return $content; }
154
+
155
+ //*************************** the_content static caching ***************************//
156
+ // the_content CAN be run more than once per page load
157
+ // so this static var prevents stuff from happening twice
158
+ // like cancelling a subscr or resuming etc...
159
+ static $already_run = array();
160
+ static $new_content = array();
161
+ static $content_length = array();
162
+
163
+ //Init this post's static values
164
+ if(!isset($new_content[$post->ID]) || empty($new_content[$post->ID])) {
165
+ $already_run[$post->ID] = false;
166
+ $new_content[$post->ID] = '';
167
+ $content_length[$post->ID] = -1;
168
+ }
169
+
170
+ //Have we been here before?
171
+ if($already_run[$post->ID] && strlen($content) == $content_length[$post->ID]) {
172
+ return $new_content[$post->ID];
173
+ }
174
+
175
+ $content_length[$post->ID] = strlen($content);
176
+ $already_run[$post->ID] = true;
177
+ //************************* end the_content static caching *************************//
178
+
179
+ //Needed to get around an issue with some plugins and themes that add random &nbsp;'s all over the place
180
+ if(apply_filters('plp_keywords_replace_nbsp', false)) {
181
+ $content = str_replace('&nbsp;', ' ', $content);
182
+ }
183
+
184
+ //Revert WP apostrophe and ampersand formatting
185
+ $content = str_replace(array('&#8217;'), array("'"), $content);
186
+ $content = str_replace(array('&amp;'), array("&"), $content); //Keywords with & will finally work
187
+
188
+ $replacements_happened = false;
189
+
190
+ if($plp_options->keyword_replacement_is_on) {
191
+ $plp_post_options = PlpPostOptions::get_options($post->ID);
192
+
193
+ // Make sure keyword replacements haven't been disabled on this page / post
194
+ if( !$plp_post_options->disable_replacements ) {
195
+ // If post password required and it doesn't match the cookie.
196
+ // Just return the content unaltered -- we don't want to cache the password form.
197
+ if(post_password_required($post)) {
198
+ $new_content[$post->ID] = $content;
199
+ return $new_content[$post->ID];
200
+ }
201
+
202
+ // do a keyword replacement per post and per request_uri
203
+ // so we can handle <!--more--> tags, feeds, etc.
204
+ if($request_uri == '') {
205
+ $request_uri = $_SERVER['REQUEST_URI'];
206
+ }
207
+
208
+ // URL Replacements go first
209
+ if(($urls_to_links = $plp_url_replacement->getURLToLinksArray())) {
210
+ foreach($urls_to_links as $url => $links) {
211
+ $urlrep = $links[array_rand($links)];
212
+
213
+ // if the url is blank then skip it
214
+ if(preg_match("#^\s*$#",$url)) { continue; }
215
+
216
+ $urlregex = '#'.preg_quote($url,'#').'#';
217
+
218
+ // If any url matches then we know there were replacements
219
+ if(!$replacements_happened && preg_match( $urlregex, $content )) {
220
+ $replacements_happened = true;
221
+ }
222
+
223
+ $content = preg_replace($urlregex, $urlrep, $content);
224
+ }
225
+ }
226
+
227
+ // Grab keywords to links list
228
+ if(($keyword_to_links = apply_filters('plp_get_post_keywords_lookup', $plp_keyword->get_post_keywords_lookup($post->ID), $post))) {
229
+ // Pull out issue prone html code that keywords could appear in
230
+ $keyword_ignores = array();
231
+ $shortcode_ignore = '#(\[.*?\])#';
232
+ $html_tags_remove = '#(\<(a|h\d|pre|script|iframe|code|applet|audio|canvas|button|textarea).*?\>.*?\</(a|h\d|pre|script|iframe|code|applet|audio|canvas|button|textarea)\>)#';
233
+ $self_close_ignore = '#(\<[^\>]*?/\>)#'; //Should capture img tags and the likes
234
+ $gen_ignore = '#(\</?.*?/?\>)#'; //Clean up
235
+
236
+ $i = 0;
237
+
238
+ // Pull shortcodes
239
+ preg_match_all($shortcode_ignore,$content,$shortcode_matches);
240
+
241
+ foreach($shortcode_matches[1] as $shortcode_match) {
242
+ $placeholder = "||!prliignore".$i++."||";
243
+ $keyword_ignores[] = array('html' => $shortcode_match, 'placeholder' => $placeholder);
244
+ $content = preg_replace($shortcode_ignore,$placeholder,$content,1);
245
+ }
246
+
247
+ // Pull certain html tags completely out
248
+ // We need to make sure we pull full anchors out before we pull general and self closing tags
249
+ preg_match_all($html_tags_remove,$content,$tags_matches);
250
+
251
+ foreach($tags_matches[1] as $tag_match) {
252
+ $placeholder = "||!prliignore".$i++."||";
253
+ $keyword_ignores[] = array('html' => $tag_match, 'placeholder' => $placeholder);
254
+ $content = preg_replace($html_tags_remove,$placeholder,$content,1);
255
+ }
256
+
257
+ // Pull self closing html tags
258
+ preg_match_all($self_close_ignore,$content,$self_close_matches);
259
+
260
+ foreach($self_close_matches[1] as $self_close) {
261
+ $placeholder = "||!prliignore".$i++."||";
262
+ $keyword_ignores[] = array('html' => $self_close, 'placeholder' => $placeholder);
263
+ $content = preg_replace($self_close_ignore,$placeholder,$content,1);
264
+ }
265
+
266
+ // Pull other html tags
267
+ preg_match_all($gen_ignore,$content,$gen_matches);
268
+
269
+ foreach($gen_matches[1] as $gen_match) {
270
+ $placeholder = "||!prliignore".$i++."||";
271
+ $keyword_ignores[] = array('html' => $gen_match, 'placeholder' => $placeholder);
272
+ $content = preg_replace($gen_ignore,$placeholder,$content,1);
273
+ }
274
+
275
+ // Now sort through keyword array and do the actual replacements
276
+ $keywords = array_keys($keyword_to_links);
277
+
278
+ // Sort by stringlength so larger words get replaced first and we get our counts right
279
+ $keywords = PlpUtils::sort_by_stringlen($keywords,'DESC');
280
+
281
+ // Set the keyword links per page to unlimited if we're not using thresholds
282
+ $keyword_links_per_page = (($plp_options->set_keyword_thresholds)?$plp_options->keyword_links_per_page:-1);
283
+ $keywords_per_page = (($plp_options->set_keyword_thresholds)?$plp_options->keywords_per_page:-1);
284
+
285
+ $i = 0;
286
+ $keyword_count = 0;
287
+ $keyword_matches = array();
288
+
289
+ // First, see what keywords match in the post
290
+ foreach($keywords as $keyword) {
291
+ // if the keyword is blank then skip it
292
+ if(preg_match("#^\s*$#",$keyword)) { continue; }
293
+
294
+ //Fix for UTF-8 characters
295
+ if(function_exists('mb_detect_encoding') && mb_detect_encoding($keyword) != 'ASCII') {
296
+ $regex = '/\b('.preg_quote($keyword,'/').')\b/iu'; // add u modifer for UTF-8 or other encodings
297
+ }
298
+ else {
299
+ $regex = '/\b('.preg_quote($keyword,'/').')\b/i'; //For most people ASCII matching should be fine
300
+ }
301
+
302
+ $keyword_instances = array();
303
+
304
+ if(preg_match_all($regex,$content,$keyword_instances)) {
305
+ // If any keyword matches then we know there were replacements
306
+ if(!$replacements_happened) {
307
+ $replacements_happened = true;
308
+ }
309
+
310
+ $key_rep_count = $url_index = 0; // array_rand($keyword_to_links[$keyword]);
311
+ $kw_obj = $keyword_to_links[$keyword][$url_index];
312
+ $url = $kw_obj->url;
313
+ $title = htmlentities($kw_obj->title, ENT_QUOTES);
314
+
315
+ // Determine which keyword instances will be replaced
316
+ $keyword_instance_count = count($keyword_instances[1]);
317
+ $instance_indices = array();
318
+ for($ind = 0; $ind < $keyword_instance_count; $ind++) {
319
+ $instance_indices[] = $ind;
320
+ }
321
+
322
+ // Randomize the replacement indices if thresholds are set
323
+ // This only works because in the instance_indices array
324
+ // the keys are the same as the values (0=>0,1=>1,2=>2,etc.)
325
+ if($keyword_links_per_page != -1 && ($keyword_instance_count > $keyword_links_per_page)) {
326
+ $instance_indices = array_slice(array_keys($instance_indices), 0, $keyword_links_per_page); // array_rand($instance_indices, $keyword_links_per_page);
327
+ }
328
+
329
+ // Force this to be an array ... even though array_rand will sometimes return a scalar var
330
+ if(!is_array($instance_indices)) {
331
+ $instance_indices = array($instance_indices);
332
+ }
333
+
334
+ $index = 0;
335
+ foreach($keyword_instances[1] as $keyword_instance) {
336
+ $placeholder = "||!prlikeyword".$i++."||";
337
+
338
+ // if we're replacing this index with a link then do it -- but
339
+ // if not, then just replace it with itself later on. :)
340
+ if(in_array($index,$instance_indices)) {
341
+ $rel = 'rel="';
342
+ if($plp_options->keyword_links_nofollow) { $rel .= 'nofollow '; }
343
+ if($plp_options->keyword_links_sponsored) { $rel .= 'sponsored '; }
344
+ $rel .= '"';
345
+
346
+ $link_html = "<a href=\"{$url}\" title=\"{$title}\" class=\"pretty-link-keyword\"".$rel.(($plp_options->keyword_links_open_new_window)?" target=\"_blank\"":'').">{$keyword_instance}".($plp_options->enable_keyword_link_disclosures?" {$plp_options->keyword_link_disclosure}":'')."</a>";
347
+ $keyword_matches[] = array('html' => $link_html, 'placeholder' => $placeholder);
348
+ $content = preg_replace($regex, $placeholder, $content, 1, $key_rep_count);
349
+ }
350
+ else {
351
+ $keyword_matches[] = array('html' => $keyword_instance, 'placeholder' => $placeholder);
352
+ $content = preg_replace($regex, $placeholder, $content, 1, $key_rep_count);
353
+ }
354
+
355
+ $index++;
356
+ }
357
+
358
+ $keyword_count++;
359
+ }
360
+
361
+ // Short circuit once we've reached the keywords_per_page
362
+ if($keywords_per_page != -1 && $keyword_count >= $keywords_per_page) {
363
+ break;
364
+ }
365
+ }
366
+
367
+ $regexes = array();
368
+ // Put back the ignores putting the onion back together in reverse order
369
+ foreach(array_reverse($keyword_ignores) as $keyword_ignore) {
370
+ // Replace $'s so pcre doesn't think we've got back references
371
+ $ignore_text = str_replace('$','\$',$keyword_ignore['html']);
372
+ $ignores_regex = '#'. preg_quote($keyword_ignore['placeholder'], '#') . '#';
373
+ $regexes[] = $ignores_regex;
374
+ $content = preg_replace($ignores_regex,$ignore_text,$content);
375
+ }
376
+
377
+ // Put back the matches putting the onion back together in reverse order
378
+ foreach(array_reverse($keyword_matches) as $keyword_match) {
379
+ // Replace $'s so pcre doesn't think we've got back references
380
+ $keyword_text = str_replace('$','\$',$keyword_match['html']);
381
+ $matches_regex = '#'. preg_quote($keyword_match['placeholder'], '#') . '#';
382
+ $regexes[] = $matches_regex;
383
+ $content = preg_replace($matches_regex,$keyword_text,$content);
384
+ }
385
+ }
386
+
387
+ // Any remaining non-pretty links will now be pretty linked if url/pretty link
388
+ // replacement has been enabled on this blog
389
+ if($plp_options->replace_urls_with_pretty_links) {
390
+ if(apply_filters('prli_replace_urls_decode_content', true, $content)) {
391
+ $content = html_entity_decode(rawurldecode($content));
392
+ }
393
+
394
+ preg_match_all('#<a.*?href\s*?=\s*?[\'"](https?://.*?)[\'"]#mi', $content, $matches);
395
+
396
+ //Filter out our blacklist domains so they don't get replaced
397
+ if(!empty($plp_options->replace_urls_with_pretty_links_blacklist) && !empty($matches[1])) {
398
+ $blacklist = preg_split('/[\r\n]+/', $plp_options->replace_urls_with_pretty_links_blacklist, -1, PREG_SPLIT_NO_EMPTY);
399
+
400
+ foreach($blacklist as $bl_url) {
401
+ $bl_url_host = parse_url($bl_url, PHP_URL_HOST);
402
+
403
+ foreach($matches[1] as $key => $rep_url) {
404
+ $rep_url_host = parse_url($rep_url, PHP_URL_HOST);
405
+
406
+ if($bl_url_host == $rep_url_host) {
407
+ unset($matches[1][$key]);
408
+ }
409
+ }
410
+ }
411
+
412
+ //reindex the array
413
+ $matches[1] = array_values($matches[1]);
414
+ }
415
+
416
+ $prli_lookup = $prli_link->get_target_to_pretty_urls( $matches[1], true );
417
+
418
+ if($prli_lookup !== false && is_array($prli_lookup)) {
419
+ //Using this one to prevent partial url replacements -- seems to be working but I'm not 100% sure about the # of escapes on the double quote's
420
+ $url_patterns = array_map(
421
+ function($target_url) {
422
+ return '#["\']' . preg_quote($target_url, '#') . '["\']#';
423
+ },
424
+ array_keys($prli_lookup)
425
+ );
426
+
427
+ $url_replacements = array_values(array_map(
428
+ function($pretty_urls) {
429
+ return $pretty_urls[0];
430
+ },
431
+ $prli_lookup
432
+ ));
433
+
434
+ if($plp_options->keyword_links_open_new_window) {
435
+ $url_patterns[] = "#<a\s#";
436
+ $url_replacements[] = '<a target="_blank" ';
437
+ }
438
+
439
+ $content = preg_replace($url_patterns, $url_replacements, $content);
440
+ }
441
+ }
442
+ }
443
+ }
444
+
445
+ if($allow_header_footer && $replacements_happened && $plp_options->enable_link_to_disclosures) {
446
+ ob_start();
447
+
448
+ ?>
449
+ <div class="prli-link-to-disclosures">
450
+ <a href="<?php echo esc_url($plp_options->disclosures_link_url); ?>"><?php echo esc_html($plp_options->disclosures_link_text); ?></a>
451
+ </div>
452
+ <?php
453
+
454
+ $disclosure_link = ob_get_clean();
455
+
456
+ if($plp_options->disclosures_link_position=='top') {
457
+ $content = $disclosure_link.$content;
458
+ }
459
+ else if($plp_options->disclosures_link_position=='top_and_bottom') {
460
+ $content = $disclosure_link.$content.$disclosure_link;
461
+ }
462
+ else {
463
+ $content = $content.$disclosure_link;
464
+ }
465
+ }
466
+
467
+ $new_content[$post->ID] = $content;
468
+ return $new_content[$post->ID];
469
+ }
470
+
471
+ public function replace_keywords_in_comments( $content ) {
472
+ //global $comment;
473
+ // We don't care if it's a real uri -- it's used as an index
474
+ //$request_uri = "#prli-comment-{$comment->comment_ID}";
475
+ $request_uri = '#prli-comment-' . PlpUtils::base36_encode(mt_rand());
476
+
477
+ return $this->replace_keywords( $content, $request_uri, false );
478
+ }
479
+
480
+ // TODO: There must be a cleaner way to do this -- Blair Williams 11/2014
481
+ public function keyword_link_style() {
482
+ global $plp_options;
483
+
484
+ if ($plp_options->keyword_replacement_is_on) {
485
+ $css = '';
486
+
487
+ if (!empty($plp_options->keyword_link_custom_css)) {
488
+ $css .= sprintf('a.pretty-link-keyword { %s }', esc_html($plp_options->keyword_link_custom_css));
489
+ }
490
+
491
+ if (!empty($plp_options->keyword_link_hover_custom_css)) {
492
+ $css .= sprintf('a.pretty-link-keyword:hover { %s }', esc_html($plp_options->keyword_link_hover_custom_css));
493
+ }
494
+
495
+ if ($css) {
496
+ wp_register_style('plp-keywords', false);
497
+ wp_enqueue_style('plp-keywords');
498
+ wp_add_inline_style('plp-keywords', $css);
499
+ }
500
+ }
501
+ }
502
+
503
+ public function keyword_link_column_row($content, $link_id) {
504
+ global $plp_keyword, $plp_options;
505
+
506
+ if( $plp_options->keyword_replacement_is_on ) {
507
+ return $plp_keyword->getTextByLinkId( $link_id );
508
+ }
509
+
510
+ return '';
511
+ }
512
+ }
513
+
pro/app/controllers/PlpLinkCategoriesController.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpLinkCategoriesController extends PrliBaseController {
4
+ public static $ctax = 'pretty-link-category';
5
+
6
+ public function load_hooks() {
7
+ add_action('init', array($this,'register_taxonomy'));
8
+ }
9
+
10
+ public function register_taxonomy() {
11
+ $role = PrliUtils::get_minimum_role();
12
+
13
+ $args = array(
14
+ 'labels' => array(
15
+ 'name' => esc_html_x( 'Link Categories', 'taxonomy general name', 'pretty-link' ),
16
+ 'singular_name' => esc_html_x( 'Link Category', 'taxonomy singular name', 'pretty-link' ),
17
+ 'search_items' => esc_html__( 'Search Link Categories', 'pretty-link' ),
18
+ 'all_items' => esc_html__( 'All Link Categories', 'pretty-link' ),
19
+ 'parent_item' => esc_html__( 'Parent Link Category', 'pretty-link' ),
20
+ 'parent_item_colon' => esc_html__( 'Parent Link Category:', 'pretty-link' ),
21
+ 'edit_item' => esc_html__( 'Edit Link Category', 'pretty-link' ),
22
+ 'update_item' => esc_html__( 'Update Link Category', 'pretty-link' ),
23
+ 'add_new_item' => esc_html__( 'Add New Link Category', 'pretty-link' ),
24
+ 'new_item_name' => esc_html__( 'New Link Category Name', 'pretty-link' ),
25
+ 'menu_name' => esc_html__( 'Categories', 'pretty-link' ),
26
+ ),
27
+ 'hierarchical' => true,
28
+ 'show_ui' => true,
29
+ 'show_admin_column' => true,
30
+ 'query_var' => false,
31
+ 'rewrite' => false,
32
+ 'capabilities' => array(
33
+ 'manage_terms' => $role,
34
+ 'edit_terms' => $role,
35
+ 'delete_terms' => $role,
36
+ 'assign_terms' => $role
37
+ )
38
+ );
39
+
40
+ register_taxonomy( self::$ctax, PrliLink::$cpt, $args );
41
+ }
42
+ }
43
+
pro/app/controllers/PlpLinkTagsController.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpLinkTagsController extends PrliBaseController {
4
+ public static $ctax = 'pretty-link-tag';
5
+
6
+ public function load_hooks() {
7
+ add_action('init', array($this,'register_taxonomy'));
8
+ }
9
+
10
+ public function register_taxonomy() {
11
+ $role = PrliUtils::get_minimum_role();
12
+
13
+ $args = array(
14
+ 'labels' => array(
15
+ 'name' => esc_html_x( 'Link Tags', 'taxonomy general name', 'pretty-link' ),
16
+ 'singular_name' => esc_html_x( 'Link Tag', 'taxonomy singular name', 'pretty-link' ),
17
+ 'search_items' => esc_html__( 'Search Link Tags', 'pretty-link' ),
18
+ 'all_items' => esc_html__( 'All Link Tags', 'pretty-link' ),
19
+ 'parent_item' => null,
20
+ 'parent_item_colon' => null,
21
+ 'edit_item' => esc_html__( 'Edit Link Tag', 'pretty-link' ),
22
+ 'update_item' => esc_html__( 'Update Link Tag', 'pretty-link' ),
23
+ 'add_new_item' => esc_html__( 'Add New Link Tag', 'pretty-link' ),
24
+ 'new_item_name' => esc_html__( 'New Link Tag Name', 'pretty-link' ),
25
+ 'separate_items_with_commas' => esc_html__( 'Separate Link Tags with commas', 'pretty-link' ),
26
+ 'add_or_remove_items' => esc_html__( 'Add or remove Link Tags', 'pretty-link' ),
27
+ 'choose_from_most_used' => esc_html__( 'Choose from the most used Link Tags', 'pretty-link' ),
28
+ 'not_found' => esc_html__( 'No Link Tags found.', 'pretty-link' ),
29
+ 'menu_name' => esc_html__( 'Tags', 'pretty-link' ),
30
+ ),
31
+ 'hierarchical' => false,
32
+ 'show_ui' => true,
33
+ 'show_admin_column' => true,
34
+ 'update_count_callback' => '_update_post_term_count',
35
+ 'query_var' => false,
36
+ 'rewrite' => false,
37
+ 'capabilities' => array(
38
+ 'manage_terms' => $role,
39
+ 'edit_terms' => $role,
40
+ 'delete_terms' => $role,
41
+ 'assign_terms' => $role
42
+ )
43
+ );
44
+
45
+
46
+ register_taxonomy( self::$ctax, PrliLink::$cpt, $args );
47
+ }
48
+ }
49
+
50
+
pro/app/controllers/PlpLinksController.php ADDED
@@ -0,0 +1,892 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpLinksController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action('prli_link_fields', array($this,'display_link_options'));
6
+ add_action('prli_record_click', array($this,'record_rotation_click'));
7
+ add_action('prli_update_link', array($this,'update_link_options'));
8
+ add_filter('prli_validate_link', array($this,'validate_link_options'));
9
+ add_filter('prli_target_url', array($this,'customize_target_url'), 99);
10
+ add_action('wp_head', array($this,'shorturl_autodiscover'));
11
+
12
+ add_action('prli_redirection_types', array($this,'redirection_types'), 10, 2);
13
+ add_action('prli_issue_cloaked_redirect', array($this,'issue_cloaked_redirect'), 10, 4);
14
+ add_action('prli_default_redirection_types',array($this,'default_redirection_options'));
15
+ add_action('prli_delete_link', array($this,'delete_link'));
16
+ add_action('prli_custom_link_options', array($this,'custom_link_options'));
17
+ add_action('prli-store-options', array($this,'store_link_options'));
18
+ add_action('prli-create-link', array($this,'create_link'), 10, 2);
19
+
20
+ add_filter('prli-check-if-slug', array($this,'generate_qr_code'),10,2);
21
+
22
+ add_action('prli_list_end_icon', array($this,'link_list_end_icons'));
23
+
24
+ add_action('prli-redirect-header', array($this, 'maybe_add_scripts_to_head'));
25
+
26
+ add_action('wp_ajax_prli_search_countries', array($this, 'ajax_search_countries'));
27
+ }
28
+
29
+ public function maybe_add_scripts_to_head() {
30
+ global $wpdb, $plp_options, $prli_link, $prli_link_meta;
31
+
32
+ //Global scripts
33
+ if(!empty($plp_options->global_head_scripts)) {
34
+ echo stripslashes($plp_options->global_head_scripts) . "\n";
35
+ }
36
+
37
+ //Per link scripts
38
+ $request_uri = preg_replace('#/(\?.*)?$#', '$1', rawurldecode($_SERVER['REQUEST_URI']));
39
+
40
+ if($link_info = $prli_link->is_pretty_link($request_uri, false)) {
41
+ $link_id = $link_info['pretty_link_found']->id;
42
+ $head_scripts = stripslashes($prli_link_meta->get_link_meta($link_id, 'head_scripts', true));
43
+
44
+ if(!empty($head_scripts)) {
45
+ echo stripslashes($head_scripts);
46
+ }
47
+ }
48
+ }
49
+
50
+ /************ DISPLAY & UPDATE PRO LINK OPTIONS ************/
51
+ public function display_link_options($link_id) {
52
+ global $prli_link, $prli_link_meta, $plp_keyword, $plp_link_rotation, $plp_options;
53
+
54
+ if( $plp_options->keyword_replacement_is_on ) {
55
+ if(empty($_POST['keywords']) && $link_id) {
56
+ $keywords = $plp_keyword->getTextByLinkId( $link_id );
57
+ }
58
+ else {
59
+ $keywords = isset($_POST['keywords']) && is_string($_POST['keywords']) ? sanitize_text_field(stripslashes($_POST['keywords'])) : '';
60
+ }
61
+
62
+ if(empty($_POST['url_replacements']) && $link_id) {
63
+ $url_replacements = $prli_link_meta->get_link_meta( $link_id, 'prli-url-replacements' );
64
+
65
+ if(is_array($url_replacements)) {
66
+ $url_replacements = implode(', ', $url_replacements);
67
+ }
68
+ else {
69
+ $url_replacements = '';
70
+ }
71
+ }
72
+ else {
73
+ $url_replacements = isset($_POST['url_replacements']) && is_string($_POST['url_replacements']) ? sanitize_text_field(stripslashes($_POST['url_replacements'])) : '';
74
+ }
75
+ }
76
+
77
+ if(empty($_POST['head-scripts']) && $link_id) {
78
+ $head_scripts = stripslashes($prli_link_meta->get_link_meta($link_id, 'head_scripts', true));
79
+ }
80
+ else {
81
+ $head_scripts = isset($_POST['head-scripts']) && is_string($_POST['head-scripts']) ? PrliUtils::sanitize_html(stripslashes($_POST['head-scripts'])) : '';
82
+ }
83
+
84
+ if(empty($_POST['dynamic_redirection']) && $link_id) {
85
+ $dynamic_redirection = $prli_link_meta->get_link_meta($link_id, 'prli_dynamic_redirection', true);
86
+
87
+ // Ensure reverse compatibility
88
+ if(empty($dynamic_redirection) &&
89
+ $plp_link_rotation->there_are_rotations_for_this_link($link_id)) {
90
+ $dynamic_redirection = 'rotate';
91
+ }
92
+ }
93
+ else {
94
+ $dynamic_redirection = isset($_POST['dynamic_redirection']) && is_string($_POST['dynamic_redirection']) ? sanitize_key(stripslashes($_POST['dynamic_redirection'])) : 'none';
95
+ }
96
+
97
+ if(empty($_POST['url_rotations']) && $link_id) {
98
+ $url_rotations = $plp_link_rotation->get_rotations( $link_id );
99
+ $url_rotation_weights = $plp_link_rotation->get_weights( $link_id );
100
+
101
+ if(!is_array($url_rotations)) {
102
+ $url_rotations = array('','','','');
103
+ }
104
+
105
+ if(!is_array($url_rotation_weights)) {
106
+ $url_rotation_weights = array('','','','');
107
+ }
108
+ }
109
+ else {
110
+ $url_rotations = isset($_POST['url_rotations']) && is_array($_POST['url_rotations']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['url_rotations']))) : array();
111
+ $url_rotation_weights = isset($_POST['url_rotation_weights']) && is_array($_POST['url_rotation_weights']) ? array_map(function ($value) { return PrliUtils::clamp((int) $value, 0, 100); }, wp_unslash($_POST['url_rotation_weights'])) : array();
112
+ }
113
+
114
+ if(empty($_POST['url']) && $link_id) {
115
+ $link = $prli_link->getOne($link_id);
116
+ $target_url = $link->url;
117
+ }
118
+ else {
119
+ $target_url = isset($_POST['url']) && is_string($_POST['url']) ? esc_url_raw(trim(stripslashes($_POST['url']))) : '';
120
+ }
121
+
122
+ if(!$link_id || !($target_url_weight = $prli_link_meta->get_link_meta($link_id, 'prli-target-url-weight', true))) {
123
+ $target_url_weight = 0;
124
+ }
125
+
126
+ if(!empty($_POST) && !isset($_POST['enable_split_test']) || (empty($link_id) || !$link_id)) {
127
+ $enable_split_test = isset($_POST['enable_split_test']);
128
+ }
129
+ else {
130
+ $enable_split_test = $prli_link_meta->get_link_meta($link_id, 'prli-enable-split-test', true);
131
+ }
132
+
133
+ if(isset($_POST['split_test_goal_link']) || (empty($link_id) || !$link_id)) {
134
+ $split_test_goal_link = isset($_POST['split_test_goal_link']) && is_numeric($_POST['split_test_goal_link']) ? (int) $_POST['split_test_goal_link'] : '';
135
+ }
136
+ else {
137
+ $split_test_goal_link = $prli_link_meta->get_link_meta($link_id, 'prli-split-test-goal-link', true);
138
+ }
139
+
140
+ $links = $prli_link->getAll('',' ORDER BY li.name');
141
+
142
+ if(isset($_POST['enable_expire']) || (empty($link_id) || !$link_id)) {
143
+ $enable_expire = isset($_POST['enable_expire']);
144
+ }
145
+ else {
146
+ $enable_expire = $prli_link_meta->get_link_meta($link_id, 'enable_expire', true);
147
+ }
148
+
149
+ if(isset($_POST['expire_type']) || (empty($link_id) || !$link_id)) {
150
+ $expire_type = isset($_POST['expire_type']) && is_string($_POST['expire_type']) ? sanitize_key(stripslashes($_POST['expire_type'])) : 'date';
151
+ }
152
+ else {
153
+ $expire_type = $prli_link_meta->get_link_meta($link_id, 'expire_type', true);
154
+ }
155
+
156
+ if(isset($_POST['expire_date']) || (empty($link_id) || !$link_id)) {
157
+ $expire_date = isset($_POST['expire_date']) && is_string($_POST['expire_date']) ? sanitize_text_field(stripslashes($_POST['expire_date'])) : '';
158
+ }
159
+ else {
160
+ $expire_date = $prli_link_meta->get_link_meta($link_id, 'expire_date', true);
161
+ }
162
+
163
+ if(isset($_POST['expire_clicks']) || (empty($link_id) || !$link_id)) {
164
+ $expire_clicks = isset($_POST['expire_clicks']) && is_numeric($_POST['expire_clicks']) ? (int) $_POST['expire_clicks'] : 0;
165
+ }
166
+ else {
167
+ $expire_clicks = $prli_link_meta->get_link_meta($link_id, 'expire_clicks', true);
168
+ }
169
+
170
+ if(isset($_POST['enable_expired_url']) || (empty($link_id) || !$link_id)) {
171
+ $enable_expired_url = isset($_POST['enable_expired_url']);
172
+ }
173
+ else {
174
+ $enable_expired_url = $prli_link_meta->get_link_meta($link_id, 'enable_expired_url', true);
175
+ }
176
+
177
+ if(isset($_POST['expired_url']) || (empty($link_id) || !$link_id)) {
178
+ $expired_url = isset($_POST['expired_url']) && is_string($_POST['expired_url']) ? esc_url_raw(trim(stripslashes($_POST['expired_url']))) : '';
179
+ }
180
+ else {
181
+ $expired_url = $prli_link_meta->get_link_meta($link_id, 'expired_url', true);
182
+ }
183
+
184
+ require_once(PLP_VIEWS_PATH.'/links/form.php');
185
+ }
186
+
187
+ public function validate_link_options($errors) {
188
+ global $prli_link_meta, $plp_options;
189
+
190
+ if( $plp_options->keyword_replacement_is_on ) {
191
+ if( !empty($_POST[ 'url_replacements' ]) ) {
192
+ $replacements = explode(',', $_POST['url_replacements']);
193
+ foreach($replacements as $replacement) {
194
+ if(!PrliUtils::is_url(trim($replacement))) {
195
+ $errors[] = __('Your URL Replacements must be formatted as a comma separated list of properly formatted URLs (http[s]://example.com/whatever)', 'pretty-link');
196
+ break;
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ if(isset($_POST['enable_expire'])) {
203
+ if(isset($_POST['expire_type']) && $_POST['expire_type']=='date') {
204
+ $_POST['expire_date'] = trim($_POST['expire_date']);
205
+ if(!PrliUtils::is_date($_POST['expire_date'])) {
206
+ $errors[] = __('Date must be valid and formatted YYYY-MM-DD.', 'pretty-link');
207
+ }
208
+ }
209
+ else if(isset($_POST['expire_type']) && $_POST['expire_type']=='clicks') {
210
+ $_POST['expire_clicks'] = trim($_POST['expire_clicks']);
211
+
212
+ // If they have clicks set here then we force tracking on for the link
213
+ // TODO: Is this the best way to do this?
214
+ $_POST['track_me'] = 'on';
215
+
216
+ if( !is_numeric($_POST['expire_clicks']) ||
217
+ (int)$_POST['expire_clicks'] <= 0 ) {
218
+ $errors[] = __('Expire Clicks must be a number greater than zero.', 'pretty-link');
219
+ }
220
+ }
221
+
222
+ if(isset($_POST['enable_expired_url'])) {
223
+ $_POST['expired_url'] = isset($_POST['expired_url']) && is_string($_POST['expired_url']) ? trim($_POST['expired_url']) : '';
224
+ if(!PrliUtils::is_url($_POST['expired_url'])) {
225
+ $errors[] = __('Expired URL must be a valid URL.', 'pretty-link');
226
+ }
227
+ }
228
+ }
229
+
230
+ if( !empty($_POST['dynamic_redirection']) && $_POST['dynamic_redirection']=='rotate' ) {
231
+ if( !empty($_POST[ 'url_rotations' ]) ) {
232
+ $num_active_links = 0;
233
+ $weight_sum = (int)$_POST['target_url_weight'];
234
+ foreach($_POST['url_rotations'] as $i => $rotation) {
235
+ if(!empty($rotation)) {
236
+ if(!PrliUtils::is_url($rotation)) {
237
+ $errors[] = __('Your URL Rotations must all be properly formatted URLs.', 'pretty-link');
238
+ }
239
+
240
+ $num_active_links++;
241
+ $weight_sum += (int)$_POST['url_rotation_weights'][$i];
242
+ }
243
+ }
244
+
245
+ if($num_active_links > 0 && $weight_sum != 100) {
246
+ $errors[] = __('Your Link Rotation Weights must add up to 100%.', 'pretty-link');
247
+ }
248
+ }
249
+ }
250
+
251
+ if( !empty($_POST['dynamic_redirection']) && $_POST['dynamic_redirection']=='geo' ) {
252
+ if( !empty($_POST['prli_geo_url']) ) {
253
+ foreach($_POST['prli_geo_url'] as $i => $geo_url) {
254
+ if(!empty($geo_url)) {
255
+ if(!PrliUtils::is_url($geo_url)) {
256
+ $errors[] = __('Your Geographic Redirect URLs must all be properly formatted.', 'pretty-link');
257
+ }
258
+ }
259
+ else {
260
+ $errors[] = __('Your Geographic Redirects URLs must not be empty.', 'pretty-link');
261
+ }
262
+
263
+ if(empty($_POST['prli_geo_countries']) || empty($_POST['prli_geo_countries'][$i])) {
264
+ $errors[] = __('Your Geographic Redirect Countries must not be empty.', 'pretty-link');
265
+ }
266
+ }
267
+ }
268
+ }
269
+
270
+ if( !empty($_POST['dynamic_redirection']) && $_POST['dynamic_redirection']=='tech' ) {
271
+ if( !empty($_POST['prli_tech_url']) ) {
272
+ foreach($_POST['prli_tech_url'] as $i => $tech_url) {
273
+ if(!empty($tech_url)) {
274
+ if(!PrliUtils::is_url($tech_url)) {
275
+ $errors[] = __('Your Technology Redirect URLs must all be properly formatted.', 'pretty-link');
276
+ }
277
+ }
278
+ else {
279
+ $errors[] = __('Your Technology Redirects URLs must not be empty.', 'pretty-link');
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ if( !empty($_POST['dynamic_redirection']) && $_POST['dynamic_redirection']=='time' ) {
286
+ if( !empty($_POST['prli_time_url']) ) {
287
+ foreach($_POST['prli_time_url'] as $i => $time_url) {
288
+ if(!empty($time_url)) {
289
+ if(!PrliUtils::is_url($time_url)) {
290
+ $errors[] = __('Your Time Period Redirect URLs must all be properly formatted.', 'pretty-link');
291
+ }
292
+ }
293
+ else {
294
+ $errors[] = __('Your Time Period Redirects URLs must not be empty.', 'pretty-link');
295
+ }
296
+
297
+ if(!empty($_POST['prli_time_start'])) {
298
+ if(empty($_POST['prli_time_start'][$i])) {
299
+ $errors[] = __('Your Time Period Redirect start time must not be empty.', 'pretty-link');
300
+ }
301
+ else if(!PrliUtils::is_date($_POST['prli_time_start'][$i])) {
302
+ $errors[] = __('Your Time Period Redirect start time must be a properly formatted date.', 'pretty-link');
303
+ }
304
+ }
305
+
306
+ if(!empty($_POST['prli_time_end'])) {
307
+ if(empty($_POST['prli_time_end'][$i])) {
308
+ $errors[] = __('Your Time Period Redirect end time must not be empty.', 'pretty-link');
309
+ }
310
+ else if(!PrliUtils::is_date($_POST['prli_time_end'][$i])) {
311
+ $errors[] = __('Your Time Period Redirect end time must be a properly formatted date.', 'pretty-link');
312
+ }
313
+ }
314
+
315
+ if(!empty($_POST['prli_time_start']) && !empty($_POST['prli_time_end']) &&
316
+ PrliUtils::is_date($_POST['prli_time_start'][$i]) && PrliUtils::is_date($_POST['prli_time_end'][$i]) &&
317
+ ($time_start = strtotime($_POST['prli_time_start'][$i])) && ($time_end = strtotime($_POST['prli_time_end'][$i])) &&
318
+ $time_start > $time_end ) {
319
+ $errors[] = __('Your Time Period Redirect start time must come before the end time.', 'pretty-link');
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ if(isset($_POST['delay']) && !empty($_POST['delay'])) {
326
+ if(!is_numeric($_POST['delay'])) {
327
+ $errors[] = __('Delay Redirect must be a number', 'pretty-link');
328
+ }
329
+ }
330
+
331
+ return $errors;
332
+ }
333
+
334
+ public function update_link_options($link_id) {
335
+ global $prli_link_meta, $plp_link_rotation, $plp_keyword, $plp_options;
336
+
337
+ if($plp_options->keyword_replacement_is_on) {
338
+ if (isset($_POST['keywords']) && is_string($_POST['keywords'])) {
339
+ //Keywords first
340
+ $plp_keyword->updateLinkKeywords($link_id, sanitize_text_field(stripslashes($_POST['keywords'])));
341
+ }
342
+
343
+ if (isset($_POST['url_replacements']) && is_string($_POST['url_replacements'])) {
344
+ //Now URL replacements
345
+ $replacements = explode(',', sanitize_text_field(stripslashes($_POST['url_replacements'])));
346
+
347
+ for ($i = 0; $i < count($replacements); $i++) {
348
+ $replacements[$i] = esc_url_raw(trim($replacements[$i]));
349
+ }
350
+
351
+ //No point filling the meta table with a bunch of empty crap
352
+ if (count($replacements) == 1 && empty($replacements[0])) {
353
+ $prli_link_meta->delete_link_meta($link_id, 'prli-url-replacements');
354
+ } else {
355
+ $prli_link_meta->update_link_meta($link_id, 'prli-url-replacements', $replacements);
356
+ }
357
+ }
358
+ }
359
+
360
+ $dynamic_redirection = (isset($_POST['dynamic_redirection']) && is_string($_POST['dynamic_redirection']) ? sanitize_key(stripslashes($_POST['dynamic_redirection'])) : 'none');
361
+ $prli_link_meta->update_link_meta($link_id, 'prli_dynamic_redirection', $dynamic_redirection);
362
+
363
+ $target_url_weight = 100;
364
+ $url_rotations = $url_rotation_weights = array();
365
+ $enable_split_test = false;
366
+ $split_test_goal_link = '';
367
+
368
+ if($dynamic_redirection == 'rotate') {
369
+ $target_url_weight = isset($_POST['target_url_weight']) && is_numeric($_POST['target_url_weight']) ? PrliUtils::clamp((int) $_POST['target_url_weight'], 0, 100) : 100;
370
+ $url_rotations = isset($_POST['url_rotations']) && is_array($_POST['url_rotations']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['url_rotations']))) : array();
371
+ $url_rotation_weights = isset($_POST['url_rotation_weights']) && is_array($_POST['url_rotation_weights']) ? array_map(function ($value) { return PrliUtils::clamp((int) $value, 0, 100); }, wp_unslash($_POST['url_rotation_weights'])) : array();
372
+ $enable_split_test = isset($_POST['enable_split_test']);
373
+ $split_test_goal_link = isset($_POST['split_test_goal_link']) && is_numeric($_POST['split_test_goal_link']) ? (int) $_POST['split_test_goal_link'] : '';
374
+ }
375
+
376
+ $prli_link_meta->update_link_meta($link_id, 'prli-target-url-weight', $target_url_weight);
377
+ $plp_link_rotation->updateLinkRotations($link_id, $url_rotations, $url_rotation_weights);
378
+ $prli_link_meta->update_link_meta($link_id, 'prli-enable-split-test', $enable_split_test);
379
+ $prli_link_meta->update_link_meta($link_id, 'prli-split-test-goal-link', $split_test_goal_link);
380
+
381
+ $geo_url = $geo_countries = array();
382
+
383
+ if($dynamic_redirection == 'geo') {
384
+ $geo_url = isset($_POST['prli_geo_url']) && is_array($_POST['prli_geo_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_geo_url']))) : array();
385
+ $geo_countries = isset($_POST['prli_geo_countries']) && is_array($_POST['prli_geo_countries']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_geo_countries'])) : array();
386
+ }
387
+
388
+ $prli_link_meta->update_link_meta($link_id, 'geo_url', $geo_url);
389
+ $prli_link_meta->update_link_meta($link_id, 'geo_countries', $geo_countries);
390
+
391
+ $tech_url = $tech_device = $tech_os = $tech_browser = array();
392
+
393
+ if($dynamic_redirection == 'tech') {
394
+ $tech_url = isset($_POST['prli_tech_url']) && is_array($_POST['prli_tech_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_tech_url']))) : array();
395
+ $tech_device = isset($_POST['prli_tech_device']) && is_array($_POST['prli_tech_device']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_device'])) : array();
396
+ $tech_os = isset($_POST['prli_tech_os']) && is_array($_POST['prli_tech_os']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_os'])) : array();
397
+ $tech_browser = isset($_POST['prli_tech_browser']) && is_array($_POST['prli_tech_browser']) ? array_map('sanitize_key', wp_unslash($_POST['prli_tech_browser'])) : array();
398
+ }
399
+
400
+ $prli_link_meta->update_link_meta($link_id, 'tech_url', $tech_url);
401
+ $prli_link_meta->update_link_meta($link_id, 'tech_device', $tech_device);
402
+ $prli_link_meta->update_link_meta($link_id, 'tech_os', $tech_os);
403
+ $prli_link_meta->update_link_meta($link_id, 'tech_browser', $tech_browser);
404
+
405
+ $time_url = $time_start = $time_end = array();
406
+
407
+ if($dynamic_redirection == 'time') {
408
+ $time_url = isset($_POST['prli_time_url']) && is_array($_POST['prli_time_url']) ? array_map('esc_url_raw', array_map('trim', wp_unslash($_POST['prli_time_url']))) : array();
409
+ $time_start = isset($_POST['prli_time_start']) && is_array($_POST['prli_time_start']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_time_start'])) : array();
410
+ $time_end = isset($_POST['prli_time_end']) && is_array($_POST['prli_time_end']) ? array_map('sanitize_text_field', wp_unslash($_POST['prli_time_end'])) : array();
411
+ }
412
+
413
+ $prli_link_meta->update_link_meta($link_id, 'time_url', $time_url);
414
+ $prli_link_meta->update_link_meta($link_id, 'time_start', $time_start);
415
+ $prli_link_meta->update_link_meta($link_id, 'time_end', $time_end);
416
+
417
+ $prli_link_meta->update_link_meta($link_id, 'google_tracking', isset($_POST['google_tracking']));
418
+ $prli_link_meta->update_link_meta($link_id, 'delay', isset($_POST['delay']) && is_numeric($_POST['delay']) ? (int) $_POST['delay'] : 0);
419
+ $prli_link_meta->update_link_meta($link_id, 'head_scripts', isset($_POST['head-scripts']) && is_string($_POST['head-scripts']) ? PrliUtils::sanitize_html(stripslashes($_POST['head-scripts'])) : '');
420
+
421
+ $prli_link_meta->update_link_meta($link_id, 'enable_expire', isset($_POST['enable_expire']));
422
+ $prli_link_meta->update_link_meta($link_id, 'expire_type', isset($_POST['expire_type']) && is_string($_POST['expire_type']) ? sanitize_key(stripslashes($_POST['expire_type'])) : 'date');
423
+ $prli_link_meta->update_link_meta($link_id, 'expire_date', isset($_POST['expire_date']) && is_string($_POST['expire_date']) ? sanitize_text_field(stripslashes($_POST['expire_date'])) : '');
424
+ $prli_link_meta->update_link_meta($link_id, 'expire_clicks', isset($_POST['expire_clicks']) && is_numeric($_POST['expire_clicks']) ? (int) $_POST['expire_clicks'] : 0);
425
+ $prli_link_meta->update_link_meta($link_id, 'enable_expired_url', isset($_POST['enable_expired_url']));
426
+ $prli_link_meta->update_link_meta($link_id, 'expired_url', isset($_POST['expired_url']) && is_string($_POST['expired_url']) ? esc_url_raw(trim(stripslashes($_POST['expired_url']))) : '');
427
+ }
428
+
429
+ /** This is where we do link rotation or geolocated redirects */
430
+ public function customize_target_url($target) {
431
+ global $plp_link_rotation, $prli_link_meta, $prli_utils, $prli_link;
432
+
433
+ if(($expired_url = PlpUtils::is_link_expired($target['link_id']))) {
434
+ if($expired_url==404) {
435
+ // TODO: Not totally sure how to ensure this will use the WordPress 404 mechanism...figure it out
436
+ // For now just throw a 404 and render our page here
437
+ status_header(404);
438
+
439
+ wp_register_style('prli-bootstrap', PRLI_VENDOR_LIB_URL . '/bootstrap/bootstrap.min.css', array(), '3.3.6');
440
+ wp_register_style('prli-bootstrap-theme', PRLI_VENDOR_LIB_URL . '/bootstrap/bootstrap-theme.min.css', array('prli-bootstrap'), '3.3.6');
441
+
442
+ wp_add_inline_style('prli-bootstrap-theme', 'body { background-color: #dedede; } p { font-size: 120%; }');
443
+
444
+ require(PLP_VIEWS_PATH.'/links/link-has-expired.php');
445
+ exit;
446
+ }
447
+ else {
448
+ return array('url' => $expired_url, 'link_id' => $target['link_id']);
449
+ }
450
+ }
451
+
452
+ $dynamic_redirection = $prli_link_meta->get_link_meta($target['link_id'], 'prli_dynamic_redirection', true);
453
+
454
+ if((empty($dynamic_redirection) || $dynamic_redirection=='rotate') &&
455
+ $plp_link_rotation->there_are_rotations_for_this_link($target['link_id'])) {
456
+ return array('url' => $plp_link_rotation->get_target_url($target['link_id']), 'link_id' => $target['link_id']);
457
+ }
458
+ else if(!empty($dynamic_redirection) && $dynamic_redirection=='geo') {
459
+ $lookup = $this->get_country_lookup($target['link_id']);
460
+ $country = PlpUtils::country_by_ip($prli_utils->get_current_client_ip());
461
+
462
+ if(!empty($country) && isset($lookup[$country]) && !empty($lookup[$country])) {
463
+ return array('url' => $lookup[$country], 'link_id' => $target['link_id']);
464
+ }
465
+ }
466
+ else if(!empty($dynamic_redirection) && $dynamic_redirection=='tech') {
467
+ $binfo = $prli_utils->php_get_browser();
468
+
469
+ $tech_urls = $prli_link_meta->get_link_meta($target['link_id'], 'tech_url');
470
+ $tech_devices = $prli_link_meta->get_link_meta($target['link_id'], 'tech_device');
471
+ $tech_oses = $prli_link_meta->get_link_meta($target['link_id'], 'tech_os');
472
+ $tech_browsers = $prli_link_meta->get_link_meta($target['link_id'], 'tech_browser');
473
+
474
+ if(is_array($tech_urls) && !empty($tech_urls)) {
475
+ $ti = $this->get_tech_info($binfo);
476
+ foreach($tech_urls as $i => $tech_url) {
477
+ if(in_array($tech_devices[$i],$ti['devices']) &&
478
+ in_array($tech_oses[$i],$ti['oses']) &&
479
+ in_array($tech_browsers[$i],$ti['browsers'])) {
480
+ return array('url' => $tech_url, 'link_id' => $target['link_id']);
481
+ }
482
+ }
483
+ }
484
+ }
485
+ else if(!empty($dynamic_redirection) && $dynamic_redirection=='time') {
486
+ if(($time_url = PlpUtils::is_link_time_redirect_active($target['link_id']))) {
487
+ return array('url' => $time_url, 'link_id' => $target['link_id']);
488
+ }
489
+ }
490
+
491
+ return $target;
492
+ }
493
+
494
+ /** Return a single array able to lookup a target url from a country code based
495
+ * on the values entered with the geo-location specific redirects.
496
+ */
497
+ private function get_country_lookup($link_id) {
498
+ global $prli_link_meta;
499
+
500
+ $dynamic_redirection = $prli_link_meta->get_link_meta($link_id, 'prli_dynamic_redirection', true);
501
+ if(!empty($dynamic_redirection) && $dynamic_redirection=='geo') {
502
+ $geo_url = $prli_link_meta->get_link_meta($link_id, 'geo_url');
503
+ $geo_countries = $prli_link_meta->get_link_meta($link_id, 'geo_countries');
504
+
505
+ $lookup = array();
506
+ foreach($geo_countries as $i => $cstr) {
507
+ $cs = explode(',', $cstr);
508
+ foreach($cs as $ci => $country) {
509
+ if(!empty($country) &&
510
+ preg_match('/\[([a-zA-Z]+)\]/i', $country, $m) &&
511
+ !empty($m[1]) &&
512
+ !isset($lookup[$m[1]])) { // First country set wins
513
+ $lookup[strtoupper($m[1])] = $geo_url[$i];
514
+ }
515
+ }
516
+ }
517
+
518
+ return $lookup;
519
+ }
520
+
521
+ return false;
522
+ }
523
+
524
+ private function get_tech_info($info) {
525
+ // Devices
526
+ $devices=array('any');
527
+
528
+ if($info['ismobiledevice']===true ||
529
+ $info['ismobiledevice']==='true') {
530
+ $devices[]='mobile';
531
+ }
532
+
533
+ if($info['istablet']===true ||
534
+ $info['istablet']==='true') {
535
+ $devices[]='tablet';
536
+ }
537
+ if(($info['istablet']===false ||
538
+ $info['istablet']==='false') &&
539
+ ($info['ismobiledevice']===true ||
540
+ $info['ismobiledevice']==='true')) {
541
+ $devices[]='phone';
542
+ }
543
+
544
+ if(($info['istablet']===false ||
545
+ $info['istablet']==='false') &&
546
+ ($info['ismobiledevice']===false ||
547
+ $info['ismobiledevice']==='false')) {
548
+ $devices[]='desktop';
549
+ }
550
+
551
+ // Operating Systems
552
+ $oses = array('any');
553
+ $info_os = strtolower($info['platform']);
554
+ $windows_oses = array( 'win10', 'win32', 'win7', 'win8', 'win8.1', 'winnt', 'winvista' );
555
+ $other_oses = array('android', 'linux', 'ios', 'macosx');
556
+
557
+ // map macos to macosx for now
558
+ $info_os = (($info_os=='macos') ? 'macosx' : $info_os);
559
+
560
+ if(in_array($info_os, $other_oses)) {
561
+ $oses[] = $info_os;
562
+ }
563
+ else if(in_array($info_os, $windows_oses)) {
564
+ $oses[] = 'win';
565
+ }
566
+
567
+ $browsers = array('any');
568
+ $info_browser = strtolower($info['browser']);
569
+ $android_browsers = array('android', 'android webview');
570
+ $ie_browsers = array('fake ie', 'ie');
571
+ $other_browsers = array('chrome', 'chromium', 'coast', 'edge', 'firefox', 'opera', 'safari', 'silk', 'kindle');
572
+
573
+ if(in_array($info_browser, $other_browsers)) {
574
+ $browsers[] = $info_browser;
575
+ }
576
+ else if(in_array($info_browser, $ie_browsers)) {
577
+ $browsers[] = 'ie';
578
+ }
579
+ else if(in_array($info_browser, $android_browsers)) {
580
+ $browsers[] = 'android';
581
+ }
582
+
583
+ return compact('devices','oses','browsers');
584
+ }
585
+
586
+ public function record_rotation_click($args) {
587
+ $link_id = $args['link_id'];
588
+ $click_id = $args['click_id'];
589
+ $target_url = $args['url'];
590
+
591
+ global $plp_link_rotation;
592
+ if($plp_link_rotation->there_are_rotations_for_this_link($link_id)) {
593
+ $plp_link_rotation->record_click($click_id,$link_id,$target_url);
594
+ }
595
+ }
596
+
597
+ /***** ADD SHORTLINK AUTO-DISCOVERY *****/
598
+ public function shorturl_autodiscover() {
599
+ global $post;
600
+
601
+ if(!is_object($post)) { return; }
602
+
603
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post->ID,"_pretty-link",true);
604
+
605
+ if($pretty_link_id && (is_single() || is_page())) {
606
+ $shorturl = prli_get_pretty_link_url($pretty_link_id);
607
+
608
+ if($shorturl && !empty($shorturl)) {
609
+ ?><link rel="shorturl" href="<?php echo esc_url($shorturl); ?>" /><?php
610
+ }
611
+ }
612
+ }
613
+
614
+ /***************** ADD PRETTY BAR, PIXEL and CLOAKED REDIRECTION *********************/
615
+ public function redirection_types($v, $selected = false) {
616
+ $prettybar = isset($v['redirect_type']['prettybar']) ? $v['redirect_type']['prettybar'] : '';
617
+ $cloak = isset($v['redirect_type']['cloak']) ? $v['redirect_type']['cloak'] : '';
618
+ $pixel = isset($v['redirect_type']['pixel']) ? $v['redirect_type']['pixel'] : '';
619
+ $metarefresh = isset($v['redirect_type']['metarefresh']) ? $v['redirect_type']['metarefresh'] : '';
620
+ $javascript = isset($v['redirect_type']['javascript']) ? $v['redirect_type']['javascript'] : '';
621
+
622
+ ?>
623
+ <option value="prettybar"<?php echo $prettybar; ?> <?php if($selected) { selected('prettybar', $selected); } ?>><?php esc_html_e('Pretty Bar', 'pretty-link'); ?>&nbsp;</option>
624
+ <option value="cloak"<?php echo $cloak; ?> <?php if($selected) { selected('cloak', $selected); } ?>><?php esc_html_e('Cloaked', 'pretty-link'); ?>&nbsp;</option>
625
+ <option value="pixel"<?php echo $pixel; ?> <?php if($selected) { selected('pixel', $selected); } ?>><?php esc_html_e('Pixel', 'pretty-link'); ?>&nbsp;</option>
626
+ <option value="metarefresh"<?php echo $metarefresh; ?> <?php if($selected) { selected('metarefresh', $selected); } ?>><?php esc_html_e('Meta Refresh', 'pretty-link'); ?>&nbsp;</option>
627
+ <option value="javascript"<?php echo $javascript; ?> <?php if($selected) { selected('javascript', $selected); } ?>><?php esc_html_e('Javascript', 'pretty-link'); ?>&nbsp;</option>
628
+ <?php
629
+ }
630
+
631
+ public function issue_cloaked_redirect($redirect_type, $pretty_link, $pretty_link_url, $param_string) {
632
+ global $prli_blogurl, $prli_link_meta, $prli_blogname;
633
+
634
+ $google_tracking = (($prli_link_meta->get_link_meta($pretty_link->id, 'google_tracking', true) == 1)?true:false);
635
+ $delay = $prli_link_meta->get_link_meta($pretty_link->id, 'delay', true);
636
+
637
+ header("Content-Type: text/html", true);
638
+ header("HTTP/1.1 200 OK", true);
639
+
640
+ switch($redirect_type) {
641
+ case 'pixel':
642
+ break;
643
+ case 'prettybar':
644
+ require_once(PLP_VIEWS_PATH . '/links/prettybar-redirect.php');
645
+ break;
646
+ case 'cloak':
647
+ wp_register_style('prli-cloaked-redirect', PRLI_CSS_URL . '/cloaked-redirect.css', array(), PRLI_VERSION);
648
+ require_once(PLP_VIEWS_PATH . '/links/cloaked-redirect.php');
649
+ break;
650
+ case 'metarefresh':
651
+ require_once(PLP_VIEWS_PATH . '/links/metarefresh-redirect.php');
652
+ break;
653
+ case 'javascript':
654
+ wp_register_script('plp-javascript-redirect', PLP_JS_URL . '/javascript-redirect.js', array(), PRLI_VERSION);
655
+ wp_localize_script('plp-javascript-redirect', 'plpJsRedirectL10n', array(
656
+ 'url' => esc_url_raw($pretty_link_url . $param_string),
657
+ 'delay' => ((int) $delay) * 1000
658
+ ));
659
+ require_once(PLP_VIEWS_PATH . '/links/javascript-redirect.php');
660
+ break;
661
+ default:
662
+ wp_redirect("{$pretty_link_url}{$param_string}", 302);
663
+ exit;
664
+ }
665
+ }
666
+
667
+ public function default_redirection_options($link_redirect_type) {
668
+ ?>
669
+ <option value="prettybar" <?php echo (($link_redirect_type == 'prettybar')?' selected="selected"':''); ?>><?php esc_html_e('Pretty Bar', 'pretty-link'); ?></option>
670
+ <option value="cloak" <?php echo (($link_redirect_type == 'cloak')?' selected="selected"':''); ?>><?php esc_html_e('Cloak', 'pretty-link'); ?></option>
671
+ <option value="pixel" <?php echo (($link_redirect_type == 'pixel')?' selected="selected"':''); ?>><?php esc_html_e('Pixel', 'pretty-link'); ?></option>
672
+ <option value="metarefresh" <?php echo (($link_redirect_type == 'metarefresh')?' selected="selected"':''); ?>><?php esc_html_e('Meta Refresh', 'pretty-link'); ?></option>
673
+ <option value="javascript" <?php echo (($link_redirect_type == 'javascript')?' selected="selected"':''); ?>><?php esc_html_e('Javascript', 'pretty-link'); ?></option>
674
+ <?php
675
+ }
676
+
677
+ /** Deletes all the pro-specific meta about a link right before the link is deleted.
678
+ * TODO: Relocate most of this to a model asap
679
+ */
680
+ public function delete_link($id) {
681
+ global $wpdb, $plp_keyword, $plp_report, $plp_link_rotation;
682
+ $query = $wpdb->prepare("DELETE FROM {$plp_keyword->table_name} WHERE link_id=%d", $id);
683
+ $wpdb->query($query);
684
+
685
+ $query = $wpdb->prepare("UPDATE {$plp_report->table_name} SET goal_link_id=NULL WHERE goal_link_id=%d", $id);
686
+ $wpdb->query($query);
687
+
688
+ $query = $wpdb->prepare("DELETE FROM {$plp_report->links_table_name} WHERE link_id=%d", $id);
689
+ $wpdb->query($query);
690
+
691
+ $query = $wpdb->prepare("DELETE FROM {$plp_link_rotation->table_name} WHERE link_id=%d", $id);
692
+ $wpdb->query($query);
693
+
694
+ $query = $wpdb->prepare("DELETE FROM {$plp_link_rotation->cr_table_name} WHERE link_id=%d", $id);
695
+ $wpdb->query($query);
696
+
697
+ $query = $wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE meta_key=%s AND meta_value=%s", '_pretty-link', $id);
698
+ $wpdb->query($query);
699
+ }
700
+
701
+ public function custom_link_options() {
702
+ global $plp_options;
703
+ require( PLP_VIEWS_PATH . '/links/link-options.php');
704
+ }
705
+
706
+ public function store_link_options() {
707
+ global $plp_options;
708
+
709
+ $plp_options->google_tracking = (int)isset($_REQUEST[ $plp_options->google_tracking_str ]);
710
+ $plp_options->generate_qr_codes = (int)isset($_REQUEST[ $plp_options->generate_qr_codes_str ]);
711
+ $plp_options->qr_code_links = (int)isset($_REQUEST[ $plp_options->qr_code_links_str ]);
712
+ $plp_options->global_head_scripts = isset($_REQUEST[$plp_options->global_head_scripts_str]) && is_string($_REQUEST[$plp_options->global_head_scripts_str]) ? PrliUtils::sanitize_html(stripslashes($_REQUEST[$plp_options->global_head_scripts_str])) : '';
713
+ $plp_options->base_slug_prefix = isset($_REQUEST[$plp_options->base_slug_prefix_str]) && is_string($_REQUEST[$plp_options->base_slug_prefix_str]) ? sanitize_title(stripslashes($_REQUEST[$plp_options->base_slug_prefix_str]), '') : '';
714
+ $plp_options->num_slug_chars = isset($_REQUEST[$plp_options->num_slug_chars_str]) && is_numeric($_REQUEST[$plp_options->num_slug_chars_str]) ? PrliUtils::clamp((int) $_REQUEST[$plp_options->num_slug_chars_str], 0, 500) : 4;
715
+
716
+ // Save the posted value in the database
717
+ $plp_options->store();
718
+ }
719
+
720
+ public function create_link($link_id, $values) {
721
+ global $plp_options, $prli_link_meta;
722
+
723
+ if(!isset($values['google_tracking'])) {
724
+ $prli_link_meta->update_link_meta($link_id, 'google_tracking', $plp_options->google_tracking);
725
+ }
726
+ }
727
+
728
+ public function qr_code_link($pretty_link_id) {
729
+ global $plp_options;
730
+ $pretty_link_url = prli_get_pretty_link_url($pretty_link_id);
731
+
732
+ ob_start();
733
+
734
+ if($plp_options->qr_code_links):
735
+ ?><a href="<?php echo esc_url($pretty_link_url . '/qr.png'); ?>" title="<?php echo esc_attr(sprintf(__('View QR Code for this link: %s', 'pretty-link'), $pretty_link_url)); ?>" target="_blank"><?php esc_html_e('QR Code', 'pretty-link'); ?></a><?php
736
+ endif;
737
+
738
+ if($plp_options->generate_qr_codes):
739
+ ?><a href="<?php echo esc_url($pretty_link_url . '/qr.png?download=' . wp_create_nonce('prli-generate-qr-code')); ?>" title="<?php echo esc_attr(sprintf(__('Download QR Code for this link: %s', 'pretty-link'), $pretty_link_url)); ?>"><?php esc_html_e('QR Code', 'pretty-link'); ?></a><?php
740
+ endif;
741
+
742
+ return ob_get_clean();
743
+ }
744
+
745
+ public function generate_qr_code($pretty_link_id, $slug) {
746
+ global $prli_link, $plp_options;
747
+
748
+ if( $plp_options->qr_code_links or
749
+ ( $plp_options->generate_qr_codes and
750
+ isset($_REQUEST['download']) and
751
+ wp_verify_nonce($_REQUEST['download'], 'prli-generate-qr-code') ) ) {
752
+
753
+ $qr_regexp = '#/qr\.png$#';
754
+
755
+ if(!$pretty_link_id and preg_match($qr_regexp, $slug)) {
756
+ $slug_sans_qr = preg_replace($qr_regexp, '', $slug);
757
+
758
+ if($pretty_link = $prli_link->getOneFromSlug( $slug_sans_qr )) {
759
+ $pretty_link_url = prli_get_pretty_link_url($pretty_link->id);
760
+
761
+ header("Content-Type: image/png");
762
+
763
+ if(isset($_REQUEST['download']) and wp_verify_nonce($_REQUEST['download'], 'prli-generate-qr-code')) {
764
+ header("HTTP/1.1 200 OK"); // Have to hard code this for some reason?
765
+ header("Content-Disposition: attachment;filename=\"" . $slug_sans_qr . "_qr.png\"");
766
+ header("Content-Transfer-Encoding: binary");
767
+ //header("Pragma: public");
768
+ }
769
+
770
+ @include PLP_VENDOR_PATH."/phpqrcode/qrlib.php";
771
+
772
+ QRcode::png($pretty_link_url, false, QR_ECLEVEL_L, 20, 2);
773
+
774
+ exit;
775
+ }
776
+ }
777
+ }
778
+
779
+ return $pretty_link_id;
780
+ }
781
+
782
+ public function link_list_end_icons($link) {
783
+ global $prli_link_meta, $plp_link_rotation;
784
+
785
+ $dynamic_redirection = $prli_link_meta->get_link_meta($link->id, 'prli_dynamic_redirection', true);
786
+ $enable_expire = $prli_link_meta->get_link_meta($link->id, 'enable_expire', true);
787
+ $expire_type = $prli_link_meta->get_link_meta($link->id, 'expire_type', true);
788
+
789
+ // Ensure reverse compatibility
790
+ if(empty($dynamic_redirection)) {
791
+ $dynamic_redirection = 'none';
792
+
793
+ if($plp_link_rotation->there_are_rotations_for_this_link($link->id)) {
794
+ $dynamic_redirection = 'rotate';
795
+ }
796
+ }
797
+
798
+ if(empty($enable_expire) || empty($expire_type)) {
799
+ $enable_expire = false;
800
+ $expire_type = 'none';
801
+ }
802
+
803
+ if($enable_expire) {
804
+ if($expire_type=='date') {
805
+ $expire_date = $prli_link_meta->get_link_meta($link->id, 'expire_date', true);
806
+ $expire_icon = 'history';
807
+ $expire_class = '';
808
+
809
+ if(($expired_url = PlpUtils::is_link_expired($link->id))) {
810
+ $expire_class = 'prli-red';
811
+ if($expired_url==404) {
812
+ $expire_message = sprintf(__('This link expired on %1$s and will now cause a 404 error when visited', 'pretty-link'), $expire_date);
813
+ }
814
+ else {
815
+ $expire_message = sprintf(__('This link expired on %1$s and now redirects to %2$s', 'pretty-link'), $expire_date, $expired_url);
816
+ }
817
+ }
818
+ else {
819
+ $expire_message = sprintf(__('This link is set to expire after the date %s', 'pretty-link'), $expire_date);
820
+ }
821
+ }
822
+ else if($expire_type=='clicks') {
823
+ $expire_clicks = $prli_link_meta->get_link_meta($link->id, 'expire_clicks', true);
824
+ $expire_icon = 'ccw';
825
+ $expire_class = '';
826
+
827
+ if(($expired_url = PlpUtils::is_link_expired($link->id))) {
828
+ $expire_class = 'prli-red';
829
+ if($expired_url==404) {
830
+ $expire_message = sprintf(__('This link expired after %d clicks and will now cause a 404 error when visited', 'pretty-link'), $expire_clicks);
831
+ }
832
+ else {
833
+ $expire_message = sprintf(__('This link expired after %1$d clicks and now redirects to %2$s', 'pretty-link'), $expire_clicks, $expired_url);
834
+ }
835
+ }
836
+ else {
837
+ $expire_message = sprintf(__('This link is set to expire after %d clicks', 'pretty-link'), $expire_clicks);
838
+ }
839
+ }
840
+
841
+ ?><i class="pl-list-icon pl-icon-<?php echo $expire_icon; ?> <?php echo $expire_class; ?>" title="<?php echo esc_attr($expire_message); ?>"></i><?php
842
+ }
843
+
844
+ if($dynamic_redirection=='rotate') {
845
+ ?><i class="pl-list-icon pl-icon-shuffle" title="<?php esc_attr_e('This link has additional Target URL rotations', 'pretty-link'); ?>"></i><?php
846
+ }
847
+ else if($dynamic_redirection=='geo') {
848
+ ?><i class="pl-list-icon pl-icon-globe" title="<?php esc_attr_e('This link has additional Geographic Target URLs', 'pretty-link'); ?>"></i><?php
849
+ }
850
+ else if($dynamic_redirection=='tech') {
851
+ ?><i class="pl-list-icon pl-icon-mobile" title="<?php esc_attr_e('This link has additional Technology Dependent Conditional Target URLs', 'pretty-link'); ?>"></i><?php
852
+ }
853
+ else if($dynamic_redirection=='time') {
854
+ $time_class = '';
855
+ if(($time_url = PlpUtils::is_link_time_redirect_active($link->id))) {
856
+ $time_message = sprintf(__('A Time Period Redirect is currently active for this link. When visited it will currently redirect to %s rather than the Target URL unless the link is expired.', 'pretty-link'), $time_url);
857
+ $time_class = 'prli-green';
858
+ }
859
+ else {
860
+ $time_message = __('Time Period Redirects have been setup for this link but the current time is not within any of them currently.', 'pretty-link');
861
+ }
862
+
863
+ ?><i class="pl-list-icon pl-icon-clock <?php echo $time_class; ?>" title="<?php echo esc_attr($time_message); ?>"></i><?php
864
+ }
865
+ }
866
+
867
+ public function ajax_search_countries() {
868
+ if(!PrliUtils::is_authorized()) {
869
+ echo "Why you creepin?";
870
+ die();
871
+ }
872
+
873
+ if(isset($_REQUEST['q']) && !empty($_REQUEST['q']) && is_string($_REQUEST['q'])) {
874
+ $res = '';
875
+ $countries = require(PLP_I18N_PATH.'/countries.php');
876
+
877
+ $q = sanitize_text_field(stripslashes($_REQUEST['q']));
878
+
879
+ foreach($countries as $code => $name) {
880
+ if(preg_match('/'.preg_quote($q).'/i', $code) ||
881
+ preg_match('/'.preg_quote($q).'/i', $name)) {
882
+ $res .= "{$name} [{$code}]\n";
883
+ }
884
+ }
885
+
886
+ echo $res;
887
+ }
888
+
889
+ exit;
890
+ }
891
+ }
892
+
pro/app/controllers/PlpOptionsController.php ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpOptionsController extends PrliBaseController {
5
+ public $opt_fields;
6
+
7
+ public function load_hooks() {
8
+ add_action('prli_admin_general_options', array($this, 'general'));
9
+ add_action('prli_admin_options_pages', array($this, 'display'));
10
+
11
+ add_filter( 'prli-validate-options', array($this, 'validate') );
12
+ add_filter( 'prli-update-options', array($this, 'update') );
13
+ add_filter( 'prli-store-options', array($this, 'store') );
14
+
15
+ $this->opt_fields = array(
16
+ 'hidden_field_name' => 'prlipro_update_options',
17
+ 'pages_auto' => 'prli_pages_auto',
18
+ 'posts_auto' => 'prli_posts_auto',
19
+ 'pages_category' => 'prli_pages_category',
20
+ 'posts_category' => 'prli_posts_category',
21
+ 'autocreate' => 'prli_autocreate',
22
+ 'social_buttons' => 'prli_social_buttons',
23
+ 'social_buttons_placement' => 'prli_social_buttons_placement',
24
+ 'social_buttons_padding' => 'prli_social_buttons_padding',
25
+ 'social_buttons_show_in_feed' => 'prli_social_buttons_show_in_feed',
26
+ 'social_posts_buttons' => 'prli_social_posts_buttons',
27
+ 'social_pages_buttons' => 'prli_social_pages_buttons',
28
+ 'keyword_replacement_is_on' => 'prli_keyword_replacement_is_on',
29
+ 'keywords_per_page' => 'prli_keywords_per_page',
30
+ 'keyword_links_per_page' => 'prli_keyword_links_per_page',
31
+ 'keyword_links_open_new_window' => 'prli_keyword_links_open_new_window',
32
+ 'keyword_links_nofollow' => 'prli_keyword_links_nofollow',
33
+ 'keyword_links_sponsored' => 'prli_keyword_links_sponsored',
34
+ 'keyword_link_custom_css' => 'prli_keyword_link_custom_css',
35
+ 'keyword_link_hover_custom_css' => 'prli_keyword_link_hover_custom_css',
36
+ 'set_keyword_thresholds' => 'prli_set_keyword_thresholds',
37
+ 'replace_urls_with_pretty_links' => 'prli_replace_urls_with_pretty_links',
38
+ 'replace_urls_with_pretty_links_blacklist' => 'prli_replace_urls_with_pretty_links_blacklist',
39
+ 'replace_keywords_in_comments' => 'prli_replace_keywords_in_comments',
40
+ 'replace_keywords_in_feeds' => 'prli_replace_keywords_in_feeds',
41
+ 'enable_link_to_disclosures' => 'prli_enable_link_to_disclosures',
42
+ 'disclosures_link_url' => 'prli_disclosures_link_url',
43
+ 'disclosures_link_text' => 'prli_disclosures_link_text',
44
+ 'disclosures_link_position' => 'prli_disclosures_link_position',
45
+ 'enable_keyword_link_disclosures' => 'prli_enable_keyword_link_disclosures',
46
+ 'keyword_link_disclosure' => 'prli_keyword_link_disclosure',
47
+ 'use_prettylink_url' => 'prli_use_prettylink_url',
48
+ 'prettylink_url' => 'prli_prettylink_url',
49
+ 'minimum_access_role' => 'prli_min_role',
50
+ 'allow_public_link_creation' => 'prli_allow_public_link_creation',
51
+ 'use_public_link_display_page' => 'prli_use_public_link_display_page',
52
+ 'public_link_display_page' => 'prli_public_link_display_page',
53
+ 'prettybar_image_url' => 'prli_prettybar_image_url',
54
+ 'prettybar_background_image_url' => 'prli_prettybar_background_image_url',
55
+ 'prettybar_color' => 'prli_prettybar_color',
56
+ 'prettybar_text_color' => 'prli_prettybar_text_color',
57
+ 'prettybar_link_color' => 'prli_prettybar_link_color',
58
+ 'prettybar_hover_color' => 'prli_prettybar_hover_color',
59
+ 'prettybar_visited_color' => 'prli_prettybar_visited_color',
60
+ 'prettybar_show_title' => 'prli_prettybar_show_title',
61
+ 'prettybar_show_description' => 'prli_prettybar_show_description',
62
+ 'prettybar_show_share_links' => 'prli_prettybar_show_share_links',
63
+ 'prettybar_show_target_url_link' => 'prli_prettybar_show_target_url_link',
64
+ 'prettybar_title_limit' => 'prli_prettybar_title_limit',
65
+ 'prettybar_desc_limit' => 'prli_prettybar_desc_limit',
66
+ 'prettybar_link_limit' => 'prli_prettybar_link_limit',
67
+ 'prettybar_hide_attrib_link' => 'prettybar_hide_attrib_link',
68
+ 'prettybar_attrib_url' => 'prettybar_attrib_url'
69
+ );
70
+ }
71
+
72
+ public function display() {
73
+ global $prli_options, $plp_options;
74
+
75
+ extract($this->opt_fields);
76
+
77
+ $index_keywords = get_option('plp_index_keywords', false);
78
+
79
+ require_once(PLP_VIEWS_PATH.'/options/form.php');
80
+ }
81
+
82
+ public function general() {
83
+ global $plp_options;
84
+
85
+ extract($this->opt_fields);
86
+
87
+ require_once(PLP_VIEWS_PATH.'/options/general.php');
88
+ }
89
+
90
+ public function validate($errors=array()) {
91
+ extract( $this->opt_fields );
92
+
93
+ // Validate This
94
+ //if( !empty($params[ $prettybar_link_limit ]) && !preg_match( "#^[0-9]*$#", $params[ $prettybar_link_limit ] ) )
95
+ // $errors[] = __("PrettyBar Link Character Limit must be a number", 'pretty-link');
96
+
97
+ if( isset($_POST[$set_keyword_thresholds]) && empty($_POST[ $keywords_per_page ]) ) {
98
+ $errors[] = __('Keywords Per Page is required', 'pretty-link');
99
+ }
100
+
101
+ if( isset($_POST[$set_keyword_thresholds]) && empty($_POST[ $keyword_links_per_page ]) ) {
102
+ $errors[] = __('Keyword Links Per Page is required', 'pretty-link');
103
+ }
104
+
105
+ if( isset($_POST[ $use_prettylink_url ]) &&
106
+ !preg_match('/^http.?:\/\/.*\..*[^\/]$/', $_POST[ $prettylink_url ] )) {
107
+ $errors[] = __('You need to enter a valid Pretty Link Base URL now that you have selected "Use an alternate base url for your Pretty Links"', 'pretty-link');
108
+ }
109
+
110
+ if( isset($_POST[ $use_public_link_display_page ]) &&
111
+ !preg_match('/^http.?:\/\/.*\..*[^\/]$/', $_POST[ $public_link_display_page ] ) ) {
112
+ $errors[] = __('You need to enter a valid Public Link Display URL now that you have selected "Use a custom public link display page"', 'pretty-link');
113
+ }
114
+
115
+ if( !isset($_POST['prettybar_hide_attrib_link']) &&
116
+ !empty($_POST['prlipro-attrib-url']) &&
117
+ !preg_match('/^http.?:\/\/.*\..*$/', $_POST['prlipro-attrib-url'] ) ) {
118
+ $errors[] = __("Pretty Bar Attribution URL must be a correctly formatted URL", 'pretty-link');
119
+ }
120
+
121
+ return $errors;
122
+ }
123
+
124
+ public function update($params) {
125
+ global $prli_options, $plp_options;
126
+
127
+ extract( $this->opt_fields );
128
+
129
+ // Read their posted value
130
+ $plp_options->pages_auto = (int)isset($params[ $pages_auto ]);
131
+ $plp_options->posts_auto = (int)isset($params[ $posts_auto ]);
132
+ $plp_options->pages_category = isset($params[ $pages_category ]) && is_numeric($params[ $pages_category ]) ? (int) $params[ $pages_category ] : '';
133
+ $plp_options->posts_category = isset($params[ $posts_category ]) && is_numeric($params[ $posts_category ]) ? (int) $params[ $posts_category ] : '';
134
+
135
+ // This won't be set if the user has no public CPTs in place
136
+ $plp_options->autocreate = array();
137
+
138
+ if (isset($params[$autocreate]) && is_array($params[$autocreate])) {
139
+ foreach ($params[$autocreate] as $post_type => $fields) {
140
+ $post_type = sanitize_key($post_type);
141
+
142
+ if ($post_type) {
143
+ $plp_options->autocreate[$post_type] = array(
144
+ 'enabled' => isset($fields['enabled']),
145
+ 'category' => isset($fields['category']) && is_numeric($fields['category']) ? (int) $fields['category'] : '',
146
+ 'socbtns' => isset($fields['socbtns'])
147
+ );
148
+ }
149
+ }
150
+ }
151
+
152
+ //$plp_options->social_buttons = $params[ $social_buttons ];
153
+ $new_social_buttons = $plp_options->default_social_buttons;
154
+ foreach( $new_social_buttons as $btn_name => $btn ) {
155
+ $new_social_buttons[$btn_name]['checked']=false;
156
+ }
157
+
158
+ if(isset($params[$social_buttons]) && is_array($params[$social_buttons])) {
159
+ foreach( array_reverse( $params[ $social_buttons ] ) as $btn_name => $btn_checked ) {
160
+ if (isset($new_social_buttons[$btn_name])) {
161
+ $btn = $new_social_buttons[$btn_name];
162
+ $btn['checked'] = true;
163
+ unset($new_social_buttons[$btn_name]);
164
+ array_unshift($new_social_buttons, $btn);
165
+ }
166
+ }
167
+ }
168
+
169
+ $plp_options->social_buttons = array_values($new_social_buttons);
170
+ $plp_options->social_buttons_placement = isset($params[ $social_buttons_placement ]) && is_string($params[ $social_buttons_placement ]) ? sanitize_key(stripslashes($params[ $social_buttons_placement ])) : '';
171
+ $plp_options->social_buttons_show_in_feed = (int)isset($params[ $social_buttons_show_in_feed ]);
172
+ //$plp_options->social_buttons_padding = $params[ $social_buttons_padding ];
173
+ $plp_options->social_posts_buttons = (int)isset($params[ $social_posts_buttons ]);
174
+ $plp_options->social_pages_buttons = (int)isset($params[ $social_pages_buttons ]);
175
+ $plp_options->keyword_replacement_is_on = (int)isset($params[ $keyword_replacement_is_on ]);
176
+ $plp_options->keyword_links_open_new_window = (int)isset($params[ $keyword_links_open_new_window ]);
177
+ $plp_options->keyword_links_nofollow = (int)isset($params[ $keyword_links_nofollow ]);
178
+ $plp_options->keyword_links_sponsored = (int)isset($params[ $keyword_links_sponsored ]);
179
+ $plp_options->keyword_link_custom_css = isset($params[ $keyword_link_custom_css ]) && is_string($params[ $keyword_link_custom_css ]) ? wp_strip_all_tags(stripslashes($params[ $keyword_link_custom_css ])) : '';
180
+ $plp_options->keyword_link_hover_custom_css = isset($params[ $keyword_link_hover_custom_css ]) && is_string($params[ $keyword_link_hover_custom_css ]) ? wp_strip_all_tags(stripslashes($params[ $keyword_link_hover_custom_css ])) : '';
181
+ $plp_options->replace_urls_with_pretty_links = (int)isset($params[ $replace_urls_with_pretty_links ]);
182
+
183
+ $plp_options->replace_urls_with_pretty_links_blacklist = isset($params[ $replace_urls_with_pretty_links_blacklist ]) && is_string($params[ $replace_urls_with_pretty_links_blacklist ]) ? sanitize_textarea_field(stripslashes($params[ $replace_urls_with_pretty_links_blacklist ])) : '';
184
+ $this->filter_domain_blacklist(); //Get rid of user entered garbage to make sure out input is valid
185
+
186
+ $plp_options->replace_keywords_in_comments = (int)isset($params[ $replace_keywords_in_comments ]);
187
+ $plp_options->replace_keywords_in_feeds = (int)isset($params[ $replace_keywords_in_feeds ]);
188
+ $plp_options->enable_link_to_disclosures = (int)isset($params[ $enable_link_to_disclosures ]);
189
+ $plp_options->disclosures_link_url = isset($params[ $disclosures_link_url ]) && is_string($params[ $disclosures_link_url ]) ? esc_url_raw(trim(stripslashes($params[ $disclosures_link_url ]))) : '';
190
+ $plp_options->disclosures_link_text = isset($params[ $disclosures_link_text ]) && is_string($params[ $disclosures_link_text ]) ? sanitize_text_field(stripslashes($params[ $disclosures_link_text ])) : '';
191
+ $plp_options->disclosures_link_position = isset($params[ $disclosures_link_position ]) && is_string($params[ $disclosures_link_position ]) ? sanitize_key(stripslashes($params[ $disclosures_link_position ])) : '';
192
+ $plp_options->enable_keyword_link_disclosures = (int)isset($params[$enable_keyword_link_disclosures]);
193
+ $plp_options->keyword_link_disclosure = isset($params[$keyword_link_disclosure]) && is_string($params[$keyword_link_disclosure]) ? sanitize_text_field(stripslashes($params[$keyword_link_disclosure])): '';
194
+ $plp_options->set_keyword_thresholds = (int)isset($params[ $set_keyword_thresholds ]);
195
+ $plp_options->keywords_per_page = isset($params[ $keywords_per_page ]) && is_numeric($params[ $keywords_per_page ]) ? max((int) $params[ $keywords_per_page ], 0) : 3;
196
+ $plp_options->keyword_links_per_page = isset($params[ $keyword_links_per_page ]) && is_numeric($params[ $keyword_links_per_page ]) ? max((int) $params[ $keyword_links_per_page ], 0) : 2;
197
+ $plp_options->use_prettylink_url = (int)isset($params[ $use_prettylink_url ]);
198
+ $plp_options->prettylink_url = isset($params[ $prettylink_url ]) && is_string($params[ $prettylink_url ]) ? esc_url_raw(trim(stripslashes($params[ $prettylink_url ]))) : '';
199
+ $plp_options->min_role = isset($params[ $minimum_access_role ]) && is_string($params[ $minimum_access_role ]) ? sanitize_key(stripslashes($params[ $minimum_access_role ])) : 'manage_options';
200
+ $plp_options->allow_public_link_creation = (int)isset($params[ $allow_public_link_creation ]);
201
+ $plp_options->use_public_link_display_page = (int)isset($params[ $use_public_link_display_page ]);
202
+ $plp_options->public_link_display_page = isset($params[ $public_link_display_page ]) && is_string($params[ $public_link_display_page ]) ? esc_url_raw(trim(stripslashes($params[ $public_link_display_page ]))) : '';
203
+ $prli_options->prettybar_image_url = isset($_POST[ $prettybar_image_url ]) && is_string($_POST[ $prettybar_image_url ]) ? esc_url_raw(trim(stripslashes($_POST[ $prettybar_image_url ]))) : '';
204
+ $prli_options->prettybar_background_image_url = isset($_POST[ $prettybar_background_image_url ]) && is_string($_POST[ $prettybar_background_image_url ]) ? esc_url_raw(trim(stripslashes($_POST[ $prettybar_background_image_url ]))) : '';
205
+ $prli_options->prettybar_color = isset($_POST[ $prettybar_color ]) && is_string($_POST[ $prettybar_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_color ])) : '';
206
+ $prli_options->prettybar_text_color = isset($_POST[ $prettybar_text_color ]) && is_string($_POST[ $prettybar_text_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_text_color ])) : '';
207
+ $prli_options->prettybar_link_color = isset($_POST[ $prettybar_link_color ]) && is_string($_POST[ $prettybar_link_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_link_color ])) : '';
208
+ $prli_options->prettybar_hover_color = isset($_POST[ $prettybar_hover_color ]) && is_string($_POST[ $prettybar_hover_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_hover_color ])) : '';
209
+ $prli_options->prettybar_visited_color = isset($_POST[ $prettybar_visited_color ]) && is_string($_POST[ $prettybar_visited_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_visited_color ])) : '';
210
+ $prli_options->prettybar_show_title = (int)isset($_POST[ $prettybar_show_title ]);
211
+ $prli_options->prettybar_show_description = (int)isset($_POST[ $prettybar_show_description ]);
212
+ $prli_options->prettybar_show_share_links = (int)isset($_POST[ $prettybar_show_share_links ]);
213
+ $prli_options->prettybar_show_target_url_link = (int)isset($_POST[ $prettybar_show_target_url_link ]);
214
+ $prli_options->prettybar_title_limit = isset($_POST[ $prettybar_title_limit ]) && is_numeric($_POST[ $prettybar_title_limit ]) ? (int) $_POST[ $prettybar_title_limit ] : 25;
215
+ $prli_options->prettybar_desc_limit = isset($_POST[ $prettybar_desc_limit ]) && is_numeric($_POST[ $prettybar_desc_limit ]) ? (int) $_POST[ $prettybar_desc_limit ] : 30;
216
+ $prli_options->prettybar_link_limit = isset($_POST[ $prettybar_link_limit ]) && is_numeric($_POST[ $prettybar_link_limit ]) ? (int) $_POST[ $prettybar_link_limit ] : 30;
217
+ $plp_options->prettybar_hide_attrib_link = (int)isset($params[ $prettybar_hide_attrib_link ]);
218
+ $plp_options->prettybar_attrib_url = isset($params[ $prettybar_attrib_url ]) && is_string($params[ $prettybar_attrib_url ]) ? esc_url_raw(trim(stripslashes($params[ $prettybar_attrib_url ]))) : '';
219
+
220
+ update_option('plp_index_keywords', isset($params['plp_index_keywords']));
221
+ wp_cache_delete('alloptions', 'options');
222
+ }
223
+
224
+ //Filters the user entered garbage to make sure these are valid domains
225
+ public function filter_domain_blacklist() {
226
+ global $plp_options;
227
+
228
+ $new_ops = '';
229
+ $lines = preg_split('/[\r\n]+/', $plp_options->replace_urls_with_pretty_links_blacklist, -1, PREG_SPLIT_NO_EMPTY);
230
+
231
+ if(!empty($lines)) {
232
+ foreach($lines as $line) {
233
+ if($domain = parse_url($line, PHP_URL_HOST)) {
234
+ $scheme = parse_url($line, PHP_URL_SCHEME) . "://";
235
+ $new_ops .= $scheme.$domain."\n";
236
+ }
237
+ }
238
+ }
239
+
240
+ $plp_options->replace_urls_with_pretty_links_blacklist = $new_ops;
241
+ }
242
+
243
+ public function store() {
244
+ global $plp_options;
245
+
246
+ // Save the posted value in the database
247
+ $plp_options->store();
248
+ }
249
+ } //End class
pro/app/controllers/PlpPostsController.php ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpPostsController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_filter('the_content', array($this, 'run_autocreate'), 9); //This priority should be lower than social button bars
6
+ add_action('save_post', array($this,'save_postdata'), 10, 3); // Manual update post
7
+ add_action('transition_post_status', array($this,'transition_post_status'), 10, 3); // Publishing Scheduled content, etc.
8
+ add_action('xmlrpc_publish_post', array($this,'xmlrpc_publish_post'), 10, 1); // Publishing Via XML-RPC
9
+ add_action('wp_enqueue_scripts', array($this,'enqueue_scripts'));
10
+ add_shortcode('post-pretty-link', array($this,'get_pretty_link'));
11
+
12
+ //This trim_empty_replacement_rows can go at some point in the future after we think everyone has upgraded to 2.0.0+
13
+ //This is an attempt to boost some query performance on keyword/url replacements
14
+ add_action('admin_init', array($this, 'trim_empty_replacement_rows'));
15
+
16
+ add_action('plp_admin_menu', array($this, 'admin_menu'), 10, 1);
17
+ }
18
+
19
+ public function enqueue_scripts() {
20
+ global $post, $plp_options;
21
+
22
+ if(!isset($post)) { return; }
23
+
24
+ $post_types = $plp_options->get_post_types();
25
+
26
+ $ac = $plp_options->autocreate_option($post->post_type);
27
+
28
+ if($ac->enabled && $ac->socbtns) {
29
+ wp_enqueue_style('prli-fontello-animation',
30
+ PRLI_VENDOR_LIB_URL.'/fontello/css/animation.css',
31
+ array(), PRLI_VERSION);
32
+ wp_enqueue_style('prli-fontello-pretty-link',
33
+ PRLI_VENDOR_LIB_URL.'/fontello/css/pretty-link.css',
34
+ array('prli-fontello-animation'), PRLI_VERSION);
35
+ wp_enqueue_style('prlipro-post', PLP_CSS_URL . '/prlipro-post.css');
36
+ wp_enqueue_style('prlipro-social', PRLI_CSS_URL . '/social_buttons.css', array('prli-fontello-animation','prli-fontello-pretty-link'));
37
+ }
38
+ }
39
+
40
+ public function admin_menu($role) {
41
+ global $plp_options;
42
+
43
+ $post_types = $plp_options->get_post_types();
44
+
45
+ foreach($post_types as $post_type) {
46
+ $ac = $plp_options->autocreate_option($post_type);
47
+
48
+ // Show the meta box on post edit pages for auto generated pretty links
49
+ if($ac->enabled) {
50
+ add_meta_box('prlipro', esc_html__('Pretty Links Pro', 'pretty-link'), 'PlpPostsHelper::post_sidebar', $post_type, 'side', 'high');
51
+ }
52
+
53
+ if(($ac->enabled && $ac->socbtns) || $plp_options->keyword_replacement_is_on) {
54
+ add_meta_box('prlipro_options', esc_html__('Pretty Links Pro Options', 'pretty-link'), 'PlpPostsHelper::post_options', $post_type, 'normal');
55
+ }
56
+ }
57
+ }
58
+
59
+ public function transition_post_status($new_status, $old_status, $post) {
60
+ if($old_status != $new_status && $new_status == 'publish') {
61
+ $this->publish_post($post->ID, 'auto');
62
+ }
63
+ }
64
+
65
+ public function xmlrpc_publish_post($post_id) {
66
+ $this->publish_post($post_id, 'auto');
67
+ }
68
+
69
+ public function publish_post($post_id, $type = 'manual') {
70
+ $post = get_post($post_id);
71
+ $this->save_postdata($post_id, $post, false, $type);
72
+ $permalink = get_permalink($post_id); //Not sure what this is for?
73
+ }
74
+
75
+ public function save_postdata($post_id, $post, $update, $type = 'manual') {
76
+ global $plp_options, $plp_keyword;
77
+
78
+ if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
79
+ return $post_id;
80
+ }
81
+
82
+ if(defined('DOING_AJAX')) {
83
+ $type = 'auto';
84
+ }
85
+
86
+ if(!$post_id || !isset($post->ID) || !$post->ID) { return $post_id; }
87
+
88
+ if(!current_user_can('edit_post', $post_id) && $type != 'auto') { return $post_id; }
89
+
90
+ // Make sure a nonce is set so we don't wipe these options out when the post is being bulk edited
91
+ if(!wp_verify_nonce((isset($_POST['plp_nonce']))?$_POST['plp_nonce']:'', 'plp_nonce'.wp_salt())) { return $post_id; }
92
+
93
+ $ac = $plp_options->autocreate_option($post->post_type);
94
+ $plp_post_options = PlpPostOptions::get_options($post_id);
95
+ $plp_post_options->requested_slug = isset($_REQUEST['prli_req_slug']) && is_string($_REQUEST['prli_req_slug'])?sanitize_text_field(stripslashes($_REQUEST['prli_req_slug'])):$plp_post_options->requested_slug;
96
+
97
+ $plp_post_options->hide_social_buttons = isset($_REQUEST['hide_social_buttons']);
98
+ $plp_post_options->disable_replacements = isset($_REQUEST['disable_replacements']);
99
+
100
+ $plp_post_options->store($post_id);
101
+
102
+ $this->auto_create_pretty_link($post_id, $post);
103
+
104
+ // Delete all the post keywords for this link to be rebuilt by our wp-cron task
105
+ $plp_keyword->delete_post_keywords_by_post_id($post_id);
106
+
107
+ delete_post_meta($post_id, '_plp_post_keywords_updated_at');
108
+ delete_post_meta($post_id, '_plp_post_urls_updated_at');
109
+ }
110
+
111
+ public function auto_create_pretty_link($post_id, $post) {
112
+ global $plp_options, $prli_link, $prli_utils, $plp_options, $prli_link_meta;
113
+
114
+ $ac = $plp_options->autocreate_option($post->post_type);
115
+
116
+ if(!$ac->enabled) { return; }
117
+
118
+ if($post && $post->post_status == "publish") {
119
+ $plp_post_options = PlpPostOptions::get_options($post_id);
120
+
121
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post_id,"_pretty-link",true);
122
+
123
+ $new_link = false;
124
+ // Try to find a pretty link that is using this link already
125
+ if(!$pretty_link_id) {
126
+ $new_link = true;
127
+ $pretty_link_id = $prli_link->find_first_target_url(get_permalink($post_id));
128
+ }
129
+
130
+ $pretty_link = $prli_link->getOne($pretty_link_id);
131
+
132
+ if(empty($pretty_link) || !$pretty_link) {
133
+ $slug_available = $prli_utils->is_slug_available($plp_post_options->requested_slug);
134
+
135
+ $slug = (is_wp_error($slug_available) ? '' : $plp_post_options->requested_slug);
136
+
137
+ $pl_insert_id = prli_create_pretty_link( get_permalink($post_id),
138
+ $slug, // slug should be default?
139
+ !empty($post->post_title) ? addslashes($post->post_title) : __('Untitled', 'pretty-link'),
140
+ addslashes($post->post_excerpt)
141
+ );
142
+
143
+ $new_pretty_link = $prli_link->getOne($pl_insert_id);
144
+
145
+ if(isset($post->ID) && !empty($post->ID) && $post->ID) {
146
+ PrliUtils::update_prli_post_meta($post->ID,'_pretty-link',$new_pretty_link->id,true);
147
+ }
148
+
149
+ $link_cpt_id = $new_pretty_link->link_cpt_id;
150
+ }
151
+ else {
152
+ prli_update_pretty_link( $pretty_link_id,
153
+ get_permalink($post_id),
154
+ $pretty_link->slug,
155
+ !empty($post->post_title) ? addslashes($post->post_title) : __('Untitled', 'pretty-link'),
156
+ addslashes($post->post_excerpt)
157
+ );
158
+
159
+ // Still update the post meta
160
+ if(isset($post_id) && !empty($post_id) && $post_id) {
161
+ PrliUtils::update_prli_post_meta($post_id,'_pretty-link',$pretty_link_id,true);
162
+ }
163
+
164
+ $link_cpt_id = $pretty_link->link_cpt_id;
165
+ }
166
+
167
+ if ($ac->category) {
168
+ wp_set_object_terms($link_cpt_id, $ac->category, PlpLinkCategoriesController::$ctax);
169
+ }
170
+ }
171
+ }
172
+
173
+ // shortcode for displaying the pretty link for the post/page
174
+ public function get_pretty_link() {
175
+ global $post, $plp_options, $prli_blogurl, $prli_link, $wp_query, $prli_link_meta;
176
+
177
+ $ac = $plp_options->autocreate_option($post->post_type);
178
+
179
+ // Don't show until published
180
+ if($post->post_status != 'publish' ||
181
+ // only show button if enabled and links are being generated
182
+ ((is_single() || is_archive() || $wp_query->is_posts_page) && !$ac->enabled)) {
183
+ return '';
184
+ }
185
+
186
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post->ID,"_pretty-link",true);
187
+ $pretty_link = $prli_link->getOne($pretty_link_id);
188
+ $shorturl = $prli_blogurl.PrliUtils::get_permalink_pre_slug_uri().$pretty_link->slug;
189
+
190
+ return $shorturl;
191
+ }
192
+
193
+ //This trim_empty_replacement_rows can go at some point in the future after we think everyone has upgraded to 2.0.0+
194
+ //This is an attempt to boost some query performance on keyword/url replacements
195
+ public function trim_empty_replacement_rows() {
196
+ global $wpdb, $prli_link_meta, $plp_keyword;
197
+
198
+ //This only ever needs to be run once, since I fixed the code that was causing the blank rows in the first place
199
+ if(!get_option('prli_empty_replacement_rows_cleanup', false)) {
200
+ $wpdb->query("DELETE FROM {$plp_keyword->table_name} WHERE text IS NULL OR text = ''");
201
+ $wpdb->query("DELETE FROM {$prli_link_meta->table_name} WHERE meta_key = 'prli-url-replacements' AND (meta_value IS NULL OR meta_value = '')");
202
+ update_option('prli_empty_replacement_rows_cleanup', true);
203
+ wp_cache_delete('alloptions', 'options');
204
+ }
205
+ }
206
+
207
+ //Should move this to WP CRON at some point and have this done in batches, instead of one at a time via the_content like it is currently happening
208
+ public function run_autocreate($content = '') {
209
+ global $post, $prli_utils, $prli_link, $prli_link_meta, $plp_options;
210
+
211
+ //No post object or type or published status?
212
+ if(!isset($post) || !$post instanceof WP_Post || (int)$post->ID <= 0 || !isset($post->post_type) || $post->post_status != "publish" || defined('REST_REQUEST')) {
213
+ return $content;
214
+ }
215
+
216
+ $ac = $plp_options->autocreate_option($post->post_type);
217
+
218
+ if($ac->enabled) {
219
+ $plp_post_options = PlpPostOptions::get_options($post->ID);
220
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post->ID, '_pretty-link', true);
221
+
222
+ // Try to find a pretty link that is using this link already
223
+ if(!$pretty_link_id) {
224
+ $pretty_link_id = $prli_link->find_first_target_url(get_permalink($post->ID));
225
+ }
226
+
227
+ $pretty_link = $prli_link->getOne($pretty_link_id);
228
+
229
+ if(empty($pretty_link) or !$pretty_link) {
230
+ $slug_available = $prli_utils->is_slug_available($plp_post_options->requested_slug);
231
+
232
+ $slug = (is_wp_error($slug_available) ? '' : $plp_post_options->requested_slug);
233
+
234
+ $pl_insert_id = prli_create_pretty_link(
235
+ get_permalink($post->ID),
236
+ $slug,
237
+ !empty($post->post_title) ? addslashes($post->post_title) : __('Untitled', 'pretty-link'),
238
+ addslashes($post->post_excerpt)
239
+ );
240
+ $new_pretty_link = $prli_link->getOne($pl_insert_id);
241
+
242
+ PrliUtils::update_prli_post_meta($post->ID, '_pretty-link', $new_pretty_link->id, true);
243
+ $link_cpt_id = $new_pretty_link->link_cpt_id;
244
+
245
+ if ($ac->category) {
246
+ wp_set_object_terms($link_cpt_id, $ac->category, PlpLinkCategoriesController::$ctax);
247
+ }
248
+ }
249
+ }
250
+
251
+ return $content;
252
+ }
253
+ } //End Class
254
+
255
+ // Template Tag for displaying the pretty link for the post/page
256
+ function the_prettylink() {
257
+ $ctrl = new PlpPostsController();
258
+ echo $ctrl->get_pretty_link();
259
+ }
pro/app/controllers/PlpPrettyBarController.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ // PrettyBar stuff here of course
4
+ class PlpPrettyBarController extends PrliBaseController {
5
+ public $field_names;
6
+
7
+ public function __construct() {
8
+ $this->field_names = array(
9
+ 'prettybar_image_url' => 'prli_prettybar_image_url',
10
+ 'prettybar_background_image_url' => 'prli_prettybar_background_image_url',
11
+ 'prettybar_color' => 'prli_prettybar_color',
12
+ 'prettybar_text_color' => 'prli_prettybar_text_color',
13
+ 'prettybar_link_color' => 'prli_prettybar_link_color',
14
+ 'prettybar_hover_color' => 'prli_prettybar_hover_color',
15
+ 'prettybar_visited_color' => 'prli_prettybar_visited_color',
16
+ 'prettybar_show_title' => 'prli_prettybar_show_title',
17
+ 'prettybar_show_description' => 'prli_prettybar_show_description',
18
+ 'prettybar_show_share_links' => 'prli_prettybar_show_share_links',
19
+ 'prettybar_show_target_url_link' => 'prli_prettybar_show_target_url_link',
20
+ 'prettybar_title_limit' => 'prli_prettybar_title_limit',
21
+ 'prettybar_desc_limit' => 'prli_prettybar_desc_limit',
22
+ 'prettybar_link_limit' => 'prli_prettybar_link_limit'
23
+ );
24
+ }
25
+
26
+ public function load_hooks() {
27
+ add_filter('prli-display-attrib-link', array($this,'display_attrib_link'));
28
+ add_filter('prli-validate-options', array($this,'validate'));
29
+ add_action('prli-store-options', array($this,'update'));
30
+ }
31
+
32
+ public function display_attrib_link($link_html) {
33
+ global $plp_options;
34
+
35
+ if( $plp_options->prettybar_hide_attrib_link == 1 ) { return ''; }
36
+
37
+ if( !empty($plp_options->prettybar_attrib_url) ) {
38
+ $link_html = preg_replace("#https://prettylinks.com/plp/pretty-bar/powered-by#",$plp_options->prettybar_attrib_url,$link_html);
39
+ }
40
+
41
+ return $link_html;
42
+ }
43
+
44
+ public function validate($errors) {
45
+ global $prli_options;
46
+
47
+ extract($this->field_names);
48
+
49
+ if( !empty($_POST[$prettybar_image_url]) && !preg_match('/^http.?:\/\/.*\..*$/', $_POST[$prettybar_image_url] ) ) {
50
+ $errors[] = __("Logo Image URL must be a correctly formatted URL", 'pretty-link');
51
+ }
52
+
53
+ if( !empty($_POST[$prettybar_background_image_url]) && !preg_match('/^http.?:\/\/.*\..*$/', $_POST[$prettybar_background_image_url] ) ) {
54
+ $errors[] = __("Background Image URL must be a correctly formatted URL", 'pretty-link');
55
+ }
56
+
57
+ $color_pattern = "/^#?[0-9a-fA-F]{6}$/";
58
+
59
+ if( !empty($_POST[ $prettybar_color ]) && !preg_match( $color_pattern, $_POST[ $prettybar_color ] ) ) {
60
+ $errors[] = __("PrettyBar Background Color must be an actual RGB Value", 'pretty-link');
61
+ }
62
+
63
+ if( !empty($_POST[ $prettybar_text_color ]) && !preg_match( $color_pattern, $_POST[ $prettybar_text_color ] ) ) {
64
+ $errors[] = __("PrettyBar Text Color must be an actual RGB Value", 'pretty-link');
65
+ }
66
+
67
+ if( !empty($_POST[ $prettybar_link_color ]) && !preg_match( $color_pattern, $_POST[ $prettybar_link_color ] ) ) {
68
+ $errors[] = __("PrettyBar Link Color must be an actual RGB Value", 'pretty-link');
69
+ }
70
+
71
+ if( !empty($_POST[ $prettybar_hover_color ]) && !preg_match( $color_pattern, $_POST[ $prettybar_hover_color ] ) ) {
72
+ $errors[] = __("PrettyBar Hover Color must be an actual RGB Value", 'pretty-link');
73
+ }
74
+
75
+ if( !empty($_POST[ $prettybar_visited_color ]) && !preg_match( $color_pattern, $_POST[ $prettybar_visited_color ] ) ) {
76
+ $errors[] = __("PrettyBar Hover Color must be an actual RGB Value", 'pretty-link');
77
+ }
78
+
79
+ if( empty($_POST[ $prettybar_title_limit ]) ) {
80
+ $errors[] = __("PrettyBar Title Character Limit must not be blank", 'pretty-link');
81
+ }
82
+
83
+ if( empty($_POST[ $prettybar_desc_limit ]) ) {
84
+ $errors[] = __("PrettyBar Description Character Limit must not be blank", 'pretty-link');
85
+ }
86
+
87
+ if( empty($_POST[ $prettybar_link_limit ]) ) {
88
+ $errors[] = __("PrettyBar Link Character Limit must not be blank", 'pretty-link');
89
+ }
90
+
91
+ if( !empty($_POST[ $prettybar_title_limit ]) && !preg_match( "#^[0-9]*$#", $_POST[ $prettybar_title_limit ] ) ) {
92
+ $errors[] = __("PrettyBar Title Character Limit must be a number", 'pretty-link');
93
+ }
94
+
95
+ if( !empty($_POST[ $prettybar_desc_limit ]) && !preg_match( "#^[0-9]*$#", $_POST[ $prettybar_desc_limit ] ) ) {
96
+ $errors[] = __("PrettyBar Description Character Limit must be a number", 'pretty-link');
97
+ }
98
+
99
+ if( !empty($_POST[ $prettybar_link_limit ]) && !preg_match( "#^[0-9]*$#", $_POST[ $prettybar_link_limit ] ) ) {
100
+ $errors[] = __("PrettyBar Link Character Limit must be a number", 'pretty-link');
101
+ }
102
+
103
+ return $errors;
104
+ }
105
+
106
+ public function update($errors) {
107
+ global $prli_options;
108
+
109
+ extract($this->field_names);
110
+
111
+ $prli_options->prettybar_image_url = isset($_POST[ $prettybar_image_url ]) && is_string($_POST[ $prettybar_image_url ]) ? esc_url_raw(trim(stripslashes($_POST[ $prettybar_image_url ]))) : '';
112
+ $prli_options->prettybar_background_image_url = isset($_POST[ $prettybar_background_image_url ]) && is_string($_POST[ $prettybar_background_image_url ]) ? esc_url_raw(trim(stripslashes($_POST[ $prettybar_background_image_url ]))) : '';
113
+ $prli_options->prettybar_color = isset($_POST[ $prettybar_color ]) && is_string($_POST[ $prettybar_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_color ])) : '';
114
+ $prli_options->prettybar_text_color = isset($_POST[ $prettybar_text_color ]) && is_string($_POST[ $prettybar_text_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_text_color ])) : '';
115
+ $prli_options->prettybar_link_color = isset($_POST[ $prettybar_link_color ]) && is_string($_POST[ $prettybar_link_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_link_color ])) : '';
116
+ $prli_options->prettybar_hover_color = isset($_POST[ $prettybar_hover_color ]) && is_string($_POST[ $prettybar_hover_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_hover_color ])) : '';
117
+ $prli_options->prettybar_visited_color = isset($_POST[ $prettybar_visited_color ]) && is_string($_POST[ $prettybar_visited_color ]) ? sanitize_hex_color(stripslashes($_POST[ $prettybar_visited_color ])) : '';
118
+ $prli_options->prettybar_show_title = (int)isset($_POST[ $prettybar_show_title ]);
119
+ $prli_options->prettybar_show_description = (int)isset($_POST[ $prettybar_show_description ]);
120
+ $prli_options->prettybar_show_share_links = (int)isset($_POST[ $prettybar_show_share_links ]);
121
+ $prli_options->prettybar_show_target_url_link = (int)isset($_POST[ $prettybar_show_target_url_link ]);
122
+ $prli_options->prettybar_title_limit = isset($_POST[ $prettybar_title_limit ]) && is_numeric($_POST[ $prettybar_title_limit ]) ? (int) $_POST[ $prettybar_title_limit ] : 25;
123
+ $prli_options->prettybar_desc_limit = isset($_POST[ $prettybar_desc_limit ]) && is_numeric($_POST[ $prettybar_desc_limit ]) ? (int) $_POST[ $prettybar_desc_limit ] : 30;
124
+ $prli_options->prettybar_link_limit = isset($_POST[ $prettybar_link_limit ]) && is_numeric($_POST[ $prettybar_link_limit ]) ? (int) $_POST[ $prettybar_link_limit ] : 30;
125
+ }
126
+ }
127
+
pro/app/controllers/PlpPublicLinksController.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpPublicLinksController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ global $plp_options;
6
+
7
+ if($plp_options->allow_public_link_creation) {
8
+ add_action( 'widgets_init', array($this, 'register_widget') );
9
+
10
+ // Current, actual endpoint
11
+ add_action( 'wp_ajax_plp-create-public-link', array( $this, 'create' ) );
12
+ add_action( 'wp_ajax_nopriv_plp-create-public-link', array( $this, 'create' ) );
13
+
14
+ }
15
+
16
+ add_shortcode('prli_create_form', array($this,'public_create_form'));
17
+ add_shortcode('prli_create_display', array($this,'public_link_display'));
18
+ add_shortcode('prli_public_link_url', array($this,'public_link_display'));
19
+ add_shortcode('prli_public_link_title', array($this,'public_link_title_display'));
20
+ add_shortcode('prli_public_link_target_url', array($this,'public_link_target_url_display'));
21
+ add_shortcode('prli_public_link_social_buttons', array($this,'public_link_social_buttons_display'));
22
+ }
23
+
24
+ public function register_widget() {
25
+ return register_widget('PlpPublicLinksWidget');
26
+ }
27
+
28
+ public function create() {
29
+ global $plp_options, $prli_options, $prli_link, $prli_blogurl;
30
+
31
+ if($plp_options->allow_public_link_creation) {
32
+ $_POST['slug'] = (isset($_POST['slug']) && is_string($_POST['slug']) && !empty($_POST['slug'])) ? sanitize_text_field(stripslashes($_POST['slug'])) : $prli_link->generateValidSlug();
33
+
34
+ $errors = array();
35
+
36
+ if (!isset($_POST['_wpnonce']) || !is_string($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'plp-create-public-link')) {
37
+ $errors = array(__('Security check failed', 'pretty-link'));
38
+ }
39
+
40
+ $errors = array_merge($errors, $prli_link->validate($_POST));
41
+
42
+ if( count($errors) > 0 ) {
43
+ $url_param = ((!empty($url))?'&url='.urlencode(esc_url_raw(trim(stripslashes($_POST['url'])))):'');
44
+ $referral_url = isset($_POST['referral-url']) && is_string($_POST['referral-url']) ? esc_url_raw(trim(stripslashes($_POST['referral-url']))) : home_url();
45
+ header("Location: {$referral_url}?errors=" . urlencode(serialize($errors)).$url_param);
46
+ }
47
+ else {
48
+ $redirect_type = isset($_POST['redirect_type']) && is_string($_POST['redirect_type']) ? sanitize_key($_POST['redirect_type']) : '307';
49
+ $track = isset($_POST['track']) && is_numeric($_POST['track']) ? (int) $_POST['track'] : -1;
50
+
51
+
52
+ unset($_POST['param_forwarding']);
53
+ $_POST['param_struct'] = '';
54
+ $_POST['name'] = '';
55
+ $_POST['description'] = '';
56
+
57
+ if($redirect_type == '-1') {
58
+ $_POST['redirect_type'] = $prli_options->link_redirect_type;
59
+ }
60
+
61
+ if($track == '-1') {
62
+ if( $prli_options->link_track_me ) {
63
+ $_POST['track_me'] = 'on';
64
+ }
65
+ }
66
+ else if( $track == '1' ) {
67
+ $_POST['track_me'] = 'on';
68
+ }
69
+
70
+ if( $prli_options->link_nofollow ) {
71
+ $_POST['nofollow'] = 'on';
72
+ }
73
+
74
+ if( $prli_options->link_sponsored ) {
75
+ $_POST['sponsored'] = 'on';
76
+ }
77
+
78
+ $record = $prli_link->create( $_POST );
79
+ $link = $prli_link->getOne($record);
80
+
81
+ $category = isset($_POST['category']) && is_numeric($_POST['category']) ? (int) $_POST['category'] : -1;
82
+
83
+ if ($category != -1) {
84
+ wp_set_object_terms($link->link_cpt_id, $category, PlpLinkCategoriesController::$ctax);
85
+ }
86
+
87
+ if($plp_options->use_public_link_display_page) {
88
+ header("Location: {$plp_options->public_link_display_page}?slug=".urlencode($link->slug));
89
+ }
90
+ else {
91
+ $pretty_link = prli_get_pretty_link_url($link->id);
92
+ $target_url = $link->url;
93
+ $target_url_title = $link->name;
94
+ $pretty_link_id = $link->id;
95
+
96
+ require_once(PRLI_VIEWS_PATH . '/shared/public_link.php');
97
+ }
98
+ }
99
+ }
100
+ else {
101
+ wp_redirect($prli_blogurl);
102
+ }
103
+
104
+ exit;
105
+ }
106
+
107
+ /**************** PUBLIC FACING URL CREATION SHORTCODES **********************/
108
+ public function public_create_form($atts) {
109
+ extract(shortcode_atts(array(
110
+ 'label' => __('Enter a URL:', 'pretty-link'),
111
+ 'button' => __('Shrink', 'pretty-link'),
112
+ 'redirect_type' => '-1',
113
+ 'track' => '-1',
114
+ 'category' => '-1',
115
+ ), $atts));
116
+
117
+ return PlpPublicLinksHelper::display_form($label,$button,$redirect_type,$track,$category);
118
+ }
119
+
120
+ public function public_link_display()
121
+ {
122
+ if(isset($_GET['slug']) && is_string($_GET['slug'])) {
123
+ $slug = sanitize_text_field(stripslashes($_GET['slug']));
124
+ $link = prli_get_link_from_slug($slug);
125
+ $url = prli_get_pretty_link_url($link->id);
126
+ return sprintf('<a href="%1$s">%2$s</a>', esc_url($url), esc_html($url));
127
+ }
128
+ }
129
+
130
+ public function public_link_title_display() {
131
+ if(isset($_GET['slug']) && is_string($_GET['slug'])) {
132
+ $slug = sanitize_text_field(stripslashes($_GET['slug']));
133
+ $link = prli_get_link_from_slug($slug);
134
+ return esc_html($link->name);
135
+ }
136
+ }
137
+
138
+ public function public_link_target_url_display() {
139
+ if(isset($_GET['slug']) && is_string($_GET['slug'])) {
140
+ $slug = sanitize_text_field(stripslashes($_GET['slug']));
141
+ $link = prli_get_link_from_slug($slug);
142
+ return esc_url($link->url);
143
+ }
144
+ }
145
+
146
+ public function public_link_social_buttons_display() {
147
+ if(isset($_GET['slug']) && is_string($_GET['slug'])) {
148
+ $slug = sanitize_text_field(stripslashes($_GET['slug']));
149
+ $link = prli_get_link_from_slug($slug);
150
+ return PlpSocialButtonsHelper::get_social_buttons_bar($link->id);
151
+ }
152
+ }
153
+ }
154
+
pro/app/controllers/PlpReportsController.php ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpReportsController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action('prli-link-action', array($this, 'split_test_link'), 10, 1);
6
+ add_action('plp_admin_menu', array($this, 'admin_menu'), 10, 1);
7
+ }
8
+
9
+ public function admin_menu($role) {
10
+ $pl_link_cpt = PrliLink::$cpt;
11
+
12
+ add_submenu_page(
13
+ "edit.php?post_type={$pl_link_cpt}",
14
+ esc_html__('Pretty Links Pro | Reports', 'pretty-link'),
15
+ esc_html__('Reports', 'pretty-link'),
16
+ $role, 'plp-reports',
17
+ array( $this, 'route' )
18
+ );
19
+ }
20
+
21
+ public function route() {
22
+ global $plp_report;
23
+ $params = $plp_report->get_params_array();
24
+
25
+ $action = isset($params['action']) ? $params['action'] : null;
26
+
27
+ switch($action) {
28
+ case 'new':
29
+ $this->new_report($params);
30
+ break;
31
+ case 'create':
32
+ $this->create($params);
33
+ break;
34
+ case 'edit':
35
+ $this->edit($params);
36
+ break;
37
+ case 'update':
38
+ $this->update($params);
39
+ break;
40
+ case 'destroy':
41
+ $this->destroy($params);
42
+ break;
43
+ case 'display-custom-report':
44
+ $this->display_custom_report($params);
45
+ break;
46
+ case 'display-split-test-report':
47
+ $this->display_split_test_report($params);
48
+ break;
49
+ case 'list':
50
+ default:
51
+ $prli_message = esc_html__('Create a custom link report and analyze your data.', 'pretty-link');
52
+ $this->display_reports_list($params, $prli_message);
53
+ }
54
+ }
55
+
56
+ public function split_test_link($link_id) {
57
+ global $prli_link, $prli_link_meta;
58
+
59
+ $link = $prli_link->getOne($link_id);
60
+
61
+ if( $prli_link_meta->get_link_meta($link_id, 'prli-enable-split-test', true) ) {
62
+ ?><a href="<?php echo esc_url(admin_url("admin.php?page=plp-reports&action=display-split-test-report&id={$link->id}")); ?>" title="<?php echo esc_attr(sprintf( __('View the Split Test Report for %s'), stripslashes($link->name) )); ?>"><i class="pl-list-icon pl-icon-chart-pie"></i></a><?php
63
+ }
64
+ }
65
+
66
+ private function new_report($params) {
67
+ global $prli_link;
68
+
69
+ $links = $prli_link->getAll('',' ORDER BY li.name');
70
+ $report_links = array();
71
+
72
+ require_once(PLP_VIEWS_PATH.'/reports/new.php');
73
+ }
74
+
75
+ private function create($params) {
76
+ global $prli_link, $plp_report;
77
+
78
+ $values = array(
79
+ 'name' => isset($_POST['name']) && is_string($_POST['name']) ? sanitize_text_field(stripslashes($_POST['name'])) : '',
80
+ 'link' => isset($_POST['link']) && is_array($_POST['link']) ? array_map('intval', array_keys($_POST['link'])) : array(),
81
+ 'goal_link_id' => isset($_POST['goal_link_id']) && is_numeric($_POST['goal_link_id']) ? (int) $_POST['goal_link_id'] : 0
82
+ );
83
+
84
+ $errors = $plp_report->validate($values);
85
+
86
+ if( count($errors) > 0 ) {
87
+ $links = $prli_link->getAll('',' ORDER BY li.name');
88
+ $report_links = array();
89
+ require_once(PLP_VIEWS_PATH.'/reports/new.php');
90
+ }
91
+ else {
92
+ $insert_id = $plp_report->create( $values );
93
+ $plp_report->update_report_links($insert_id, $values['link']);
94
+ $prli_message = esc_html__("Your Pretty Link Report was Successfully Created", 'pretty-link');
95
+ $this->display_reports_list($params, $prli_message, '', 1);
96
+ }
97
+ }
98
+
99
+ private function edit($params) {
100
+ global $prli_link, $plp_report;
101
+
102
+ $record = $plp_report->getOne( $params['id'] );
103
+ $id = $params['id'];
104
+ $links = $prli_link->getAll('',' ORDER BY li.name');
105
+ $report_links = $plp_report->get_report_links_array($id);
106
+
107
+ require_once(PLP_VIEWS_PATH.'/reports/edit.php');
108
+ }
109
+
110
+ private function update($params) {
111
+ global $prli_link, $plp_report;
112
+
113
+ $values = array(
114
+ 'name' => isset($_POST['name']) && is_string($_POST['name']) ? sanitize_text_field(stripslashes($_POST['name'])) : '',
115
+ 'link' => isset($_POST['link']) && is_array($_POST['link']) ? array_map('intval', array_keys($_POST['link'])) : array(),
116
+ 'goal_link_id' => isset($_POST['goal_link_id']) && is_numeric($_POST['goal_link_id']) ? (int) $_POST['goal_link_id'] : 0
117
+ );
118
+
119
+ $errors = $plp_report->validate($values);
120
+ $id = isset($_POST['id']) ? (int) $_POST['id'] : 0;
121
+
122
+ if( count($errors) > 0 ) {
123
+ $links = $prli_link->getAll('',' ORDER BY li.name');
124
+ $report_links = $plp_report->get_report_links_array($id);
125
+ require_once(PLP_VIEWS_PATH.'/reports/edit.php');
126
+ }
127
+ else {
128
+ $record = $plp_report->update( $id, $values );
129
+ $plp_report->update_report_links($id, $values['link']);
130
+ $prli_message = esc_html__("Your Pretty Link Report was Successfully Updated", 'pretty-link');
131
+ $this->display_reports_list($params, $prli_message, '', 1);
132
+ }
133
+ }
134
+
135
+ private function destroy($params) {
136
+ global $plp_report;
137
+
138
+ $plp_report->destroy( $params['id'] );
139
+ $prli_message = esc_html__('Your Pretty Link Report was Successfully Deleted', 'pretty-link');
140
+
141
+ $this->display_reports_list($params, $prli_message, '', 1);
142
+ }
143
+
144
+ private function display_custom_report($params) {
145
+ global $prli_utils, $plp_report, $prli_link;
146
+
147
+ $id = $params['id'];
148
+
149
+ $start_timestamp = $prli_utils->get_start_date($params);
150
+ $end_timestamp = $prli_utils->get_end_date($params);
151
+
152
+ $start_timestamp = mktime(0, 0, 0, date('n', $start_timestamp), date('j', $start_timestamp), date('Y', $start_timestamp));
153
+ $end_timestamp = mktime(0, 0, 0, date('n', $end_timestamp), date('j', $end_timestamp), date('Y', $end_timestamp) );
154
+
155
+ $report = $plp_report->getOne($id);
156
+
157
+ $links = $plp_report->get_report_links_array($id);
158
+ $labels = $plp_report->get_labels_by_links($start_timestamp, $end_timestamp, $links);
159
+ $hits = $plp_report->get_clicks_by_links($start_timestamp, $end_timestamp, $links);
160
+ $uniques = $plp_report->get_clicks_by_links($start_timestamp, $end_timestamp, $links, true);
161
+
162
+ $top_hits = $prli_utils->getTopValue($hits);
163
+ $top_uniques = $prli_utils->getTopValue($uniques);
164
+
165
+ if( !empty($report->goal_link_id) ) {
166
+ $goal_link = $prli_link->getOne($report->goal_link_id);
167
+ $conversions = $plp_report->get_conversions_by_links($start_timestamp,$end_timestamp,$links,$report->goal_link_id);
168
+
169
+ $conv_rates = array();
170
+ for($i=0; $i<count($links); $i++) {
171
+ $conv_rates[] = (($hits[$i] > 0)?sprintf( "%0.2f", (float)($conversions[$i] / $hits[$i] * 100.0) ):'0.00');
172
+ }
173
+
174
+ $top_conversions = $prli_utils->getTopValue(array_values($conversions));
175
+ $top_conv_rate = $prli_utils->getTopValue(array_values($conv_rates));
176
+ }
177
+ else {
178
+ $goal_link = false;
179
+ $conversions = $conv_rates = array();
180
+ $top_conversions = $top_conv_rate = 0;
181
+ }
182
+
183
+ require_once(PLP_VIEWS_PATH.'/reports/custom-report.php');
184
+ }
185
+
186
+ private function display_split_test_report($params) {
187
+ global $prli_utils, $plp_report, $prli_link, $prli_link_meta;
188
+
189
+ $link_id = $params['id'];
190
+
191
+ $goal_link_id = $prli_link_meta->get_link_meta($link_id, 'prli-split-test-goal-link', true);
192
+
193
+ $link = $prli_link->getOne($link_id);
194
+
195
+ $start_timestamp = $prli_utils->get_start_date($params);
196
+ $end_timestamp = $prli_utils->get_end_date($params);
197
+
198
+ $start_timestamp = mktime(0, 0, 0, date('n', $start_timestamp), date('j', $start_timestamp), date('Y', $start_timestamp));
199
+ $end_timestamp = mktime(0, 0, 0, date('n', $end_timestamp), date('j', $end_timestamp), date('Y', $end_timestamp) );
200
+
201
+ $links = $plp_report->get_split_report_links_array($link_id);
202
+ $labels = $links;
203
+ $hits_array = $plp_report->get_split_clicks($start_timestamp,$end_timestamp,$link_id);
204
+ $uniques_array = $plp_report->get_split_clicks($start_timestamp,$end_timestamp,$link_id,true);
205
+
206
+ $hits = array();
207
+ $uniques = array();
208
+
209
+ for($i=0;$i<count($links);$i++) {
210
+ $hits[$i] = ((is_array($hits_array) && isset($hits_array[$links[$i]]) && !empty($hits_array[$links[$i]]))?$hits_array[$links[$i]]:0);
211
+ $uniques[$i] = ((is_array($uniques_array) && isset($uniques_array[$links[$i]]) && !empty($uniques_array[$links[$i]]))?$uniques_array[$links[$i]]:0);
212
+ }
213
+
214
+ $top_hits = (($hits && is_array($hits))?$prli_utils->getTopValue($hits):0);
215
+ $top_uniques = (($uniques && is_array($uniques))?$prli_utils->getTopValue($uniques):0);
216
+
217
+ if( !empty($goal_link_id) && $goal_link_id ) {
218
+ $goal_link = $prli_link->getOne($goal_link_id);
219
+ $conversions_array = $plp_report->get_split_conversions($start_timestamp,$end_timestamp,$link_id,$goal_link_id);
220
+
221
+ $conversions = array();
222
+ for($i=0;$i<count($links);$i++) {
223
+ $conversions[$i] = ((is_array($conversions_array) && isset($conversions_array[$links[$i]]) && !empty($conversions_array[$links[$i]]))?$conversions_array[$links[$i]]:0);
224
+ }
225
+
226
+ $conv_rates = array();
227
+ for($i=0; $i<count($links); $i++) {
228
+ $conv_rates[] = (($uniques[$i] > 0)?sprintf( "%0.2f", (float)($conversions[$i] / $uniques[$i] * 100.0) ):'0.00');
229
+ }
230
+
231
+ $top_conversions = $prli_utils->getTopValue(array_values($conversions));
232
+ $top_conv_rate = $prli_utils->getTopValue(array_values($conv_rates));
233
+ }
234
+
235
+ require_once(PLP_VIEWS_PATH . '/reports/split-test-report.php');
236
+ }
237
+
238
+ private function display_reports_list( $params,
239
+ $prli_message,
240
+ $page_params_ov=false,
241
+ $current_page_ov=false ) {
242
+ global $wpdb, $prli_utils, $plp_report, $page_size;
243
+
244
+ $report_vars = $this->get_report_sort_vars($params);
245
+
246
+ if($current_page_ov) {
247
+ $current_page = $current_page_ov;
248
+ }
249
+ else {
250
+ $current_page = $params['paged'];
251
+ }
252
+
253
+ $page_params = '&action=list';
254
+
255
+ if($page_params_ov) {
256
+ $page_params .= $page_params_ov;
257
+ }
258
+ else {
259
+ $page_params .= $report_vars['page_params'];
260
+ }
261
+
262
+ $sort_str = $report_vars['sort_str'];
263
+ $sdir_str = $report_vars['sdir_str'];
264
+ $search_str = $report_vars['search_str'];
265
+
266
+ $record_count = $plp_report->getRecordCount($report_vars['where_clause']);
267
+ $page_count = $plp_report->getPageCount($page_size,$report_vars['where_clause']);
268
+ $reports = $plp_report->getPage($current_page,$page_size,$report_vars['where_clause'],$report_vars['order_by']);
269
+ $page_last_record = $prli_utils->getLastRecordNum($record_count,$current_page,$page_size);
270
+ $page_first_record = $prli_utils->getFirstRecordNum($record_count,$current_page,$page_size);
271
+
272
+ require_once(PLP_VIEWS_PATH . '/reports/list.php');
273
+ }
274
+
275
+ private function get_report_sort_vars($params,$where_clause = '') {
276
+ $order_by = '';
277
+ $page_params = '';
278
+
279
+ // These will have to work with both get and post
280
+ $sort_str = $params['sort'];
281
+ $sdir_str = $params['sdir'];
282
+ $search_str = $params['search'];
283
+
284
+ // Insert search string
285
+ if(!empty($search_str)) {
286
+ global $wpdb;
287
+ $search_params = explode(" ", $search_str);
288
+
289
+ foreach($search_params as $search_param) {
290
+ if(!empty($where_clause)) {
291
+ $where_clause .= " AND";
292
+ }
293
+
294
+ $search_param = '%' . $wpdb->esc_like($search_param) . '%';
295
+
296
+ //goal_link_name doesn't exist any longer
297
+ $where_clause .= $wpdb->prepare(
298
+ " (rp.name like %s OR rp.created_at like %s)",
299
+ $search_param,
300
+ $search_param
301
+ );
302
+ }
303
+
304
+ $page_params .="&search=$search_str";
305
+ }
306
+
307
+ // make sure page params stay correct
308
+ if(!empty($sort_str)) {
309
+ $page_params .="&sort=$sort_str";
310
+ }
311
+
312
+ if(!empty($sdir_str)) {
313
+ $page_params .= "&sdir=$sdir_str";
314
+ }
315
+
316
+ // Add order by clause
317
+ switch($sort_str) {
318
+ case 'name':
319
+ case 'goal_link_name':
320
+ case 'link_count':
321
+ $order_by .= " ORDER BY {$sort_str}";
322
+ break;
323
+ default:
324
+ $order_by .= ' ORDER BY created_at';
325
+ }
326
+
327
+ // Toggle ascending / descending
328
+ if((empty($sort_str) and empty($sdir_str)) or $sdir_str == 'desc') {
329
+ $order_by .= ' DESC';
330
+ $sdir_str = 'desc';
331
+ }
332
+ else {
333
+ $sdir_str = 'asc';
334
+ }
335
+
336
+ return array( 'order_by' => $order_by,
337
+ 'sort_str' => $sort_str,
338
+ 'sdir_str' => $sdir_str,
339
+ 'search_str' => $search_str,
340
+ 'where_clause' => $where_clause,
341
+ 'page_params' => $page_params );
342
+ }
343
+ }
344
+
pro/app/controllers/PlpSocialButtonsController.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpSocialButtonsController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_filter('the_content', array($this, 'add_social_buttons_to_content'), 1000); //WARNING - This priority must be higher than keyword replacements
6
+ add_filter('get_the_excerpt', array($this, 'excerpt_remove_social_buttons'), 1);
7
+ add_shortcode('social_buttons_bar', array($this,'social_buttons_bar'));
8
+ }
9
+
10
+ public function social_buttons_bar() {
11
+ global $post, $plp_options, $wp_query;
12
+
13
+ if(!isset($post) || !isset($post->ID)) { return ''; }
14
+
15
+ $plp_post_options = PlpPostOptions::get_options($post->ID);
16
+ $ac = $plp_options->autocreate_option($post->post_type);
17
+
18
+ if(get_post_status($post->ID) != 'publish' || // Don't show until published
19
+ $plp_post_options->hide_social_buttons || // Don't show if post is hidden
20
+ (is_feed() && !$plp_options->social_buttons_show_in_feed) || // Only show in feed if option checked
21
+ !$ac->enabled || !$ac->socbtns) // Only show if links enabled and social button
22
+ { return ''; }
23
+
24
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post->ID,"_pretty-link",true);
25
+
26
+ return PlpSocialButtonsHelper::get_social_buttons_bar($pretty_link_id);
27
+ }
28
+
29
+ // Puts a tweet this button on each post
30
+ public function add_social_buttons_to_content($content) {
31
+ global $plp_options;
32
+
33
+ //Don't run this more than once
34
+ static $here;
35
+ if(isset($here) && $here === true) { return $content; }
36
+ $here = true;
37
+
38
+ if($plp_options->social_buttons_placement == 'none') {
39
+ return $content;
40
+ }
41
+
42
+ $social_buttons = $this->social_buttons_bar();
43
+
44
+ if(!empty($social_buttons)) {
45
+ if($plp_options->social_buttons_placement == 'bottom') {
46
+ return "{$content}{$social_buttons}";
47
+ }
48
+ else if($plp_options->social_buttons_placement == 'top') {
49
+ return "{$social_buttons}{$content}";
50
+ }
51
+ else if($plp_options->social_buttons_placement == 'top-and-bottom') {
52
+ return "{$social_buttons}{$content}{$social_buttons}";
53
+ }
54
+ }
55
+ else {
56
+ return $content;
57
+ }
58
+ }
59
+
60
+ public function excerpt_remove_social_buttons($excerpt) {
61
+ if(!is_feed()) { remove_filter('the_content', array($this,'add_social_buttons_to_content')); }
62
+ return $excerpt;
63
+ }
64
+ }
65
+
66
+ // The template tag for social buttons
67
+ function the_social_buttons_bar() {
68
+ $ctrl = new PlpSocialButtonsController();
69
+ echo $ctrl->social_buttons_bar();
70
+ }
71
+
pro/app/controllers/PlpToolsController.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpToolsController extends PrliBaseController {
4
+ public function load_hooks() {
5
+ add_action( 'prli_admin_tools_nav', array( $this, 'bookmarklet_nav' ) );
6
+ add_action( 'prli_admin_tools_pages', array( $this, 'bookmarklet_generator' ) );
7
+ }
8
+
9
+ public function bookmarklet_generator() {
10
+ global $prli_blogurl, $prli_options;
11
+ require( PLP_VIEWS_PATH . '/tools/generator.php' );
12
+ }
13
+
14
+ public function bookmarklet_nav() {
15
+ require( PLP_VIEWS_PATH . '/tools/nav.php' );
16
+ }
17
+ }
18
+
pro/app/controllers/PlpTwitterController.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ // DEPRECATED
5
+ class PlpTwitterController extends PrliBaseController {
6
+ public function load_hooks() {
7
+ // Gracefully deprecated shortcode
8
+ add_shortcode('tweetbadge', array($this,'the_tweetbadge'));
9
+ }
10
+ }
11
+
12
+ // Template Tag for Tweet Badge
13
+ function the_tweetbadge() {
14
+ // No longer supported
15
+ }
16
+
17
+ // Template Tag for Tweet Comments
18
+ // Gracefully ignore comments if this tag is in use
19
+ function the_tweet_comments() {
20
+ // No longer supported
21
+ }
22
+
pro/app/controllers/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/helpers/PlpLinksHelper.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpLinksHelper {
4
+ public static function rotation_weight_dropdown($rotation_weight, $select_name="url_rotation_weights[]") {
5
+ ?>
6
+ <select name="<?php echo esc_attr($select_name); ?>">
7
+ <?php for($p=0; $p<=100; $p+=1) { ?>
8
+ <option value="<?php echo esc_attr($p); ?>"<?php selected((int)$p, (int)$rotation_weight); ?>><?php echo esc_html($p); ?>%&nbsp;</option>
9
+ <?php } ?>
10
+ </select>
11
+ <?php
12
+ }
13
+
14
+ public static function rotation_row($rotation, $weight, $select_name="url_rotations[]", $weight_select_name="url_rotation_weights[]") {
15
+ ?>
16
+ <li>
17
+ <input type="text" class="regular-text" name="<?php echo esc_attr($select_name); ?>" value="<?php echo esc_attr($rotation); ?>" />
18
+ <?php esc_html_e('weight:', 'pretty-link'); ?>
19
+ <?php self::rotation_weight_dropdown($weight); ?>
20
+ </li>
21
+ <?php
22
+ }
23
+
24
+ public static function geo_row($geo_url='', $geo_countries='') {
25
+ require(PLP_VIEWS_PATH.'/links/geo_row.php');
26
+ }
27
+
28
+ public static function tech_row($tech_url='', $tech_device='', $tech_os='', $tech_browser='') {
29
+ require(PLP_VIEWS_PATH.'/links/tech_row.php');
30
+ }
31
+
32
+ public static function time_row($time_url='', $time_start='', $time_end='') {
33
+ require(PLP_VIEWS_PATH.'/links/time_row.php');
34
+ }
35
+ }
36
+
pro/app/helpers/PlpOptionsHelper.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) die('You are not allowed to call this page directly.');
2
+
3
+ class PlpOptionsHelper {
4
+ public static function autocreate_post_options($post_type, $option, $category, $socbtns) {
5
+ // For reverse-compatibility
6
+ if($post_type=='post' || $post_type=='page') {
7
+ $option_name = "prli_{$post_type}s_auto";
8
+ $category_name = "prli_{$post_type}s_category";
9
+ $socbtns_name = "prli_social_{$post_type}s_buttons";
10
+ }
11
+ else {
12
+ $option_name = "prli_autocreate[{$post_type}][enabled]";
13
+ $category_name = "prli_autocreate[{$post_type}][category]";
14
+ $socbtns_name = "prli_autocreate[{$post_type}][socbtns]";
15
+ }
16
+
17
+ $p = get_post_type_object($post_type);
18
+
19
+ require(PLP_VIEWS_PATH . '/options/autocreate.php');
20
+ }
21
+
22
+ public static function autocreate_all_cpt_options() {
23
+ global $plp_options;
24
+
25
+ $post_types = $plp_options->get_post_types(false);
26
+
27
+ foreach($post_types as $post_type) {
28
+ $option = !empty($plp_options->autocreate[$post_type]['enabled']);
29
+ $category = !empty($plp_options->autocreate[$post_type]['category']) ? $plp_options->autocreate[$post_type]['category'] : '';
30
+ $socbtns = !empty($plp_options->autocreate[$post_type]['socbtns']);
31
+
32
+ self::autocreate_post_options($post_type, $option, $category, $socbtns);
33
+ }
34
+ }
35
+ }
36
+
pro/app/helpers/PlpPostsHelper.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpPostsHelper {
4
+ public static function post_options($post) {
5
+ global $plp_options;
6
+
7
+ $plp_post_options = PlpPostOptions::get_options($post->ID);
8
+ $ac = $plp_options->autocreate_option($post->post_type);
9
+ $post_types = $plp_options->get_post_types();
10
+
11
+ ?>
12
+ <!-- The NONCE below prevents post meta from being blanked on move to trash -->
13
+ <input type="hidden" name="plp_nonce" value="<?php echo wp_create_nonce('plp_nonce'.wp_salt()); ?>" />
14
+ <?php
15
+
16
+ if( $ac->socbtns ) {
17
+ $checked = $plp_post_options->hide_social_buttons;
18
+ ?>
19
+ <span><input type="checkbox" name="hide_social_buttons" id="hide_social_buttons"<?php checked($checked); ?> />&nbsp;<?php esc_html_e('Hide Social Buttons on this post.', 'pretty-link'); ?></span><br/>
20
+ <?php
21
+ }
22
+
23
+ if(in_array($post->post_type, $post_types) && $plp_options->keyword_replacement_is_on ) {
24
+ $checked = $plp_post_options->disable_replacements;
25
+ ?>
26
+ <span><input type="checkbox" name="disable_replacements" id="disable_replacements"<?php checked($checked); ?> />&nbsp;<?php esc_html_e('Disable Keyword Replacements on this post.', 'pretty-link'); ?></span><br/>
27
+ <?php
28
+ }
29
+ }
30
+
31
+ public static function post_sidebar($post) {
32
+ global $prli_blogurl, $plp_options, $prli_link, $prli_link_meta;
33
+
34
+ $plp_post_options = PlpPostOptions::get_options($post->ID);
35
+ $ac = $plp_options->autocreate_option($post->post_type);
36
+
37
+ do_action('prlipro_sidebar_top');
38
+
39
+ // Make sure the prli process routines are called on submit
40
+ ?><input type="hidden" name="prli_process_tweet_form" id="prli_process_tweet_form" value="Y" /><?php
41
+
42
+ if($post->post_status != 'publish') {
43
+ ?>
44
+ <div><?php esc_html_e('A Pretty Link will be created on Publish', 'pretty-link'); ?></div>
45
+ <div>
46
+ <strong><?php echo esc_url($prli_blogurl . PrliUtils::get_permalink_pre_slug_uri()); ?></strong>
47
+ <input type="text" style="width: 100px;" name="prli_req_slug" id="prli_req_slug" value="<?php echo esc_attr((!empty($plp_post_options->requested_slug))?$plp_post_options->requested_slug:$prli_link->generateValidSlug()); ?>" />
48
+ </div>
49
+ <?php
50
+ }
51
+ else {
52
+ $pretty_link_id = PrliUtils::get_prli_post_meta($post->ID,"_pretty-link",true);
53
+ $pretty_link = $prli_link->getOne($pretty_link_id, OBJECT, true);
54
+
55
+ if(!empty($pretty_link) && $pretty_link) {
56
+ $pretty_link_url = $prli_blogurl.PrliUtils::get_permalink_pre_slug_uri().$pretty_link->slug;
57
+
58
+ ?>
59
+ <p>
60
+ <span style="font-size: 24px;"><?php echo esc_html((empty($pretty_link->clicks) || $pretty_link->clicks===false)?0:$pretty_link->clicks); ?></span>
61
+ <?php esc_html_e('Clicks', 'pretty-link'); ?>&nbsp;&nbsp;
62
+ <span style="font-size: 24px;"><?php echo esc_html((empty($pretty_link->uniques) || $pretty_link->uniques===false)?0:$pretty_link->uniques); ?></span>
63
+ <?php esc_html_e('Uniques', 'pretty-link'); ?>
64
+ </p>
65
+ <p>
66
+ <?php esc_html_e('Pretty Link:', 'pretty-link'); ?><br/>
67
+ <strong><?php echo esc_url($pretty_link_url); ?></strong><br/>
68
+ <a href="<?php echo esc_url(admin_url("post.php?post={$pretty_link->link_cpt_id}&action=edit")); ?>"><?php esc_html_e('edit', 'pretty-link'); ?></a>
69
+ |
70
+ <a href="<?php echo esc_url($pretty_link_url); ?>" target="_blank" title="<?php esc_attr_e('Visit Pretty Link:', 'pretty-link'); echo esc_html($pretty_link_url); esc_html_e('in a New Window', 'pretty-link'); ?>"><?php esc_html_e('visit', 'pretty-link'); ?></a>
71
+ </p>
72
+ <?php
73
+ }
74
+ else {
75
+ ?>
76
+ <p><?php esc_html_e('A Pretty Link hasn\'t been generated for this entry yet. Click "Update Post" to generate.', 'pretty-link'); ?></p>
77
+ <p><strong><?php echo esc_url($prli_blogurl . PrliUtils::get_permalink_pre_slug_uri()); ?></strong><input type="text" style="width: 100px;" name="prli_req_slug" id="prli_req_slug" value="<?php echo esc_attr((!empty($plp_post_options->requested_slug))?$plp_post_options->requested_slug:$prli_link->generateValidSlug()); ?>" />
78
+ </p>
79
+ <?php
80
+ }
81
+ }
82
+ }
83
+ }
84
+
pro/app/helpers/PlpPrettyBarHelper.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ // PrettyBar stuff here of course
4
+ class PlpPrettyBarHelper {
5
+ public static function render_prettybar($slug) {
6
+ global $prli_blogurl, $prli_link, $prli_options, $prli_blogname, $prli_blogdescription, $target_url;
7
+
8
+ if($link = $prli_link->getOneFromSlug( $slug )) {
9
+ $bar_image = $prli_options->prettybar_image_url;
10
+ $bar_background_image = $prli_options->prettybar_background_image_url;
11
+ $bar_color = $prli_options->prettybar_color;
12
+ $bar_text_color = $prli_options->prettybar_text_color;
13
+ $bar_link_color = $prli_options->prettybar_link_color;
14
+ $bar_visited_color = $prli_options->prettybar_visited_color;
15
+ $bar_hover_color = $prli_options->prettybar_hover_color;
16
+ $bar_show_title = $prli_options->prettybar_show_title;
17
+ $bar_show_description = $prli_options->prettybar_show_description;
18
+ $bar_show_share_links = $prli_options->prettybar_show_share_links;
19
+ $bar_show_target_url_link = $prli_options->prettybar_show_target_url_link;
20
+ $bar_title_limit = (int)$prli_options->prettybar_title_limit;
21
+ $bar_desc_limit = (int)$prli_options->prettybar_desc_limit;
22
+ $bar_link_limit = (int)$prli_options->prettybar_link_limit;
23
+
24
+ $target_url = $link->url;
25
+
26
+ $shortened_title = stripslashes(substr($prli_blogname,0,$bar_title_limit));
27
+ $shortened_desc = stripslashes(substr($prli_blogdescription,0,$bar_desc_limit));
28
+ $shortened_link = stripslashes(substr($target_url,0,$bar_link_limit));
29
+
30
+ if(strlen($prli_blogname) > $bar_title_limit) {
31
+ $shortened_title .= "...";
32
+ }
33
+
34
+ if(strlen($prli_blogdescription) > $bar_desc_limit) {
35
+ $shortened_desc .= "...";
36
+ }
37
+
38
+ if(strlen($target_url) > $bar_link_limit) {
39
+ $shortened_link .= "...";
40
+ }
41
+
42
+ wp_register_style('fontello-animation', PRLI_VENDOR_LIB_URL.'/fontello/css/animation.css', array(), PRLI_VERSION);
43
+ wp_register_style('fontello-pretty-link', PRLI_VENDOR_LIB_URL.'/fontello/css/pretty-link.css', array(), PRLI_VERSION);
44
+ wp_register_style('prli-prettybar', PLP_CSS_URL.'/prettybar.css', array(), PRLI_VERSION);
45
+
46
+ $css = '';
47
+
48
+ if(!empty($bar_background_image) && $bar_background_image) {
49
+ $css .= sprintf('html, body { background-image: url(%s); background-repeat: repeat-x; }', esc_url($bar_background_image));
50
+ } else {
51
+ $css .= sprintf('html, body { background-color: %s; }', esc_html($bar_color));
52
+ }
53
+
54
+ $css .= sprintf('html, body { color: %s; }', esc_html($bar_text_color));
55
+ $css .= sprintf('a { color: %s; }', esc_html($bar_link_color));
56
+ $css .= sprintf('a:visited { color: %s; }', esc_html($bar_visited_color));
57
+ $css .= sprintf('a:hover { color: %s; }', esc_html($bar_hover_color));
58
+
59
+ wp_add_inline_style('prli-prettybar', $css);
60
+
61
+ require(PLP_VIEWS_PATH . '/links/prettybar.php');
62
+ }
63
+ }
64
+ }
65
+
pro/app/helpers/PlpPublicLinksHelper.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpPublicLinksHelper {
5
+ public static function display_form($label=null, $button=null, $redirect_type=null, $track=null, $category=null) {
6
+ $label = is_null($label)?__('Enter a URL:', 'pretty-link'):$label;
7
+ $button = is_null($button)?__('Shrink', 'pretty-link'):$button;
8
+ $track = is_null($track)?'-1':$track;
9
+ $category = is_null($category)?'-1':$category;
10
+ $redirect_type = is_null($redirect_type)?'-1':$redirect_type;
11
+
12
+ ob_start();
13
+ require(PLP_VIEWS_PATH . '/public/form.php');
14
+ $formhtml = ob_get_clean();
15
+
16
+ return $formhtml;
17
+ }
18
+ }
19
+
pro/app/helpers/PlpSocialButtonsHelper.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpSocialButtonsHelper {
5
+ public static function get_social_buttons_bar($pretty_link_id) {
6
+ global $prli_blogurl, $plp_options, $prli_link, $prli_link_meta;
7
+
8
+ $pretty_link = $prli_link->getOne($pretty_link_id);
9
+
10
+ if(is_object($pretty_link)) {
11
+ $shorturl = apply_filters(
12
+ 'prli_social_bar_url',
13
+ $prli_blogurl.PrliUtils::get_permalink_pre_slug_uri().$pretty_link->slug,
14
+ $pretty_link_id
15
+ );
16
+ }
17
+ else {
18
+ return '';
19
+ }
20
+
21
+ // If there's no short url then don't show the badge
22
+ if(empty($shorturl)) { return ''; }
23
+
24
+ $tweet_message = PlpTwitterHelper::get_twitter_status_message($shorturl,$pretty_link->name);
25
+ $tweet_message = urlencode(trim(strip_tags($tweet_message)));
26
+
27
+ $encoded_url = urlencode($shorturl);
28
+ $encoded_title = urlencode($pretty_link->name);
29
+
30
+ $patterns = array( '/\{\{encoded_url\}\}/', '/\{\{encoded_title\}\}/', '/\{\{tweet_message\}\}/' );
31
+ $replacements = compact( 'encoded_url', 'encoded_title', 'tweet_message' );
32
+
33
+ $show_bar = false;
34
+
35
+ $social_buttons = apply_filters('prli_social_bar_obj', $plp_options->social_buttons, $pretty_link, $shorturl, $replacements);
36
+
37
+ ob_start();
38
+ ?>
39
+ <ul class="prli-social-buttons">
40
+ <?php
41
+
42
+ foreach($social_buttons as $b) {
43
+ if( $b['checked'] ) {
44
+ $show_bar = true; // if we have even one button, we show the social bar
45
+ $button_url = preg_replace( $patterns, $replacements, $b['url'] );
46
+ ?>
47
+ <li>
48
+ <a class="pl-social-<?php echo esc_attr($b['slug']); ?>-button" href="<?php echo esc_url($button_url); ?>" rel="nofollow" target="_blank" onclick="javascript:window.open(this.href, '', 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600');return false;">
49
+ <i class="<?php echo esc_attr($b['icon']); ?>"> </i>
50
+ </a>
51
+ </li>
52
+ <?php
53
+ }
54
+ }
55
+
56
+ ?>
57
+ </ul>
58
+ <?php
59
+
60
+ $social_buttons = $show_bar ? ob_get_clean() : '';
61
+
62
+ return apply_filters('prli_social_bar_html', $social_buttons, $pretty_link, $shorturl, $replacements);
63
+ }
64
+ }
65
+
pro/app/helpers/PlpTwitterHelper.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpTwitterHelper {
5
+ public static function get_twitter_status_message($pretty_link_url, $pretty_link_name, $tweet_format="{%title%} {%url%}") {
6
+ global $plp_options;
7
+
8
+ //ADDED BY PAUL 1.5.5 - fix for $29.99 being in post title
9
+ $pretty_link_name = str_replace("$", "%24", $pretty_link_name);
10
+
11
+ $tweet_message = preg_replace("#\{\%title\%\}#", stripslashes($pretty_link_name), $tweet_format);
12
+ $tweet_message = preg_replace("#\{\%url\%\}#", $pretty_link_url, $tweet_message);
13
+
14
+ // 120 to leave room for retweeting a 140 char tweet
15
+ if(strlen($tweet_message) > 120) {
16
+ $non_title_size = strlen($tweet_message) - strlen($pretty_link_name);
17
+ $title_size = 120 - $non_title_size;
18
+ $link_title = substr($pretty_link_name, 0, $title_size);
19
+ $tweet_message = preg_replace("#\{\%title\%\}#", stripslashes($link_title), $tweet_format);
20
+ $tweet_message = preg_replace("#\{\%url\%\}#", $pretty_link_url, $tweet_message);
21
+ }
22
+
23
+ return $tweet_message;
24
+ }
25
+ }
26
+
pro/app/helpers/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/models/PlpKeyword.php ADDED
@@ -0,0 +1,724 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpKeyword {
5
+ public $table_name, $post_keywords_table_name;
6
+
7
+ public function __construct() {
8
+ global $wpdb;
9
+ $this->table_name = "{$wpdb->prefix}prli_keywords";
10
+ $this->post_keywords_table_name = "{$wpdb->prefix}prli_post_keywords";
11
+ }
12
+
13
+ public function create($keyword,$link_id) {
14
+ global $wpdb;
15
+
16
+ $query_str = "
17
+ INSERT INTO {$this->table_name}
18
+ (text, link_id, created_at)
19
+ VALUES
20
+ (%s,%d,NOW())
21
+ ";
22
+
23
+ $query = $wpdb->prepare(
24
+ $query_str,
25
+ $keyword,
26
+ $link_id
27
+ );
28
+
29
+ $query_results = $wpdb->query($query);
30
+
31
+ if($query_results) {
32
+ return $wpdb->insert_id;
33
+ }
34
+ else {
35
+ return false;
36
+ }
37
+ }
38
+
39
+ public function get_removed_keywords($link_id, $keywords) {
40
+ global $wpdb;
41
+
42
+ $keywords = array_map(
43
+ function($kw) {
44
+ return trim($kw);
45
+ },
46
+ $keywords
47
+
48
+ );
49
+
50
+ $q = $wpdb->prepare("
51
+ SELECT kw.*
52
+ FROM {$this->table_name} AS kw
53
+ WHERE kw.link_id=%d
54
+ ",
55
+ $link_id
56
+ );
57
+ $kws = $wpdb->get_results($q);
58
+
59
+ $removed_ids = array();
60
+ if(is_array($kws) && !empty($kws)) {
61
+ foreach($kws as $kw) {
62
+ if(!in_array($kw->text, $keywords)) {
63
+ $removed_ids[] = $kw->id;
64
+ }
65
+ }
66
+ }
67
+
68
+ return $removed_ids;
69
+ }
70
+
71
+ public function delete_removed_keywords($link_id, $keywords) {
72
+ global $wpdb;
73
+
74
+ $keywords = explode(',',$keywords);
75
+
76
+ $removed_ids = $this->get_removed_keywords($link_id, $keywords);
77
+
78
+ if(!empty($removed_ids)) {
79
+ $idstr = implode(',', $removed_ids);
80
+
81
+ // Clear the index of these keywords
82
+ $q = "
83
+ DELETE FROM {$this->post_keywords_table_name}
84
+ WHERE keyword_id IN ({$idstr})
85
+ ";
86
+ $wpdb->query($q);
87
+
88
+ // Clear the keywords themselves
89
+ $q = "
90
+ DELETE FROM {$this->table_name}
91
+ WHERE id IN ({$idstr})
92
+ ";
93
+ $wpdb->query($q);
94
+ }
95
+ }
96
+
97
+ public function get_added_keywords($link_id, $keywords) {
98
+ global $wpdb;
99
+
100
+ $keywords = array_map(
101
+ function($kw) {
102
+ return trim($kw);
103
+ },
104
+ $keywords
105
+ );
106
+
107
+ $q = $wpdb->prepare("
108
+ SELECT text
109
+ FROM {$this->table_name} AS kw
110
+ WHERE kw.link_id=%d
111
+ ",
112
+ $link_id
113
+ );
114
+ $kws = $wpdb->get_col($q);
115
+
116
+ return array_diff($keywords, $kws);
117
+ }
118
+
119
+ public function create_added_keywords($link_id, $keywords) {
120
+ $keywords = explode(',',$keywords);
121
+
122
+ $added_keywords = $this->get_added_keywords($link_id, $keywords);
123
+
124
+ // Create the new keywords
125
+ foreach($added_keywords as $added_keyword) {
126
+ if(!empty($added_keyword)) { //Don't save an empty keyword
127
+ $this->create(trim($added_keyword), $link_id);
128
+ }
129
+ }
130
+ }
131
+
132
+ public function updateLinkKeywords($link_id,$keywords) {
133
+ // Get rid of the old keywords
134
+ //$this->destroyByLinkId($link_id);
135
+
136
+ $this->delete_removed_keywords($link_id, $keywords);
137
+ $this->create_added_keywords($link_id, $keywords);
138
+ }
139
+
140
+ public function destroy( $id ) {
141
+ global $wpdb;
142
+ $query_str = "DELETE FROM {$this->table_name} WHERE id=%d";
143
+ $query = $wpdb->prepare($query_str,$id);
144
+ return $wpdb->query($query);
145
+ }
146
+
147
+ public function destroyByLinkId( $link_id ) {
148
+ global $wpdb;
149
+ $query_str = "DELETE FROM {$this->table_name} WHERE link_id=%d";
150
+ $query = $wpdb->prepare($query_str,$link_id);
151
+ return $wpdb->query($query);
152
+ }
153
+
154
+ public function getOne( $id, $return_type = OBJECT ) {
155
+ global $wpdb;
156
+ $query_str = "SELECT * FROM {$this->table_name} WHERE id=%d";
157
+ $query = $wpdb->prepare($query_str,$id);
158
+ return $wpdb->get_row($query, $return_type);
159
+ }
160
+
161
+ public function getAllByLinkId( $link_id, $return_type = OBJECT ) {
162
+ global $wpdb;
163
+ $query_str = "SELECT * FROM {$this->table_name} WHERE link_id=%d ORDER BY text";
164
+ $query = $wpdb->prepare($query_str,$link_id);
165
+ return $wpdb->get_results($query, $return_type);
166
+ }
167
+
168
+ public function getTextByLinkId( $link_id ) {
169
+ $keywords = $this->getAllByLinkId( $link_id );
170
+
171
+ $keywords_array = array();
172
+ foreach($keywords as $keyword)
173
+ $keywords_array[] = stripslashes(htmlspecialchars($keyword->text));
174
+
175
+ return implode( ', ', $keywords_array );
176
+ }
177
+
178
+ public function getAllUniqueKeywordsText() {
179
+ global $wpdb;
180
+ $query = "SELECT DISTINCT text FROM {$this->table_name}";
181
+ return $wpdb->get_col($query, 0);
182
+ }
183
+
184
+ public function getAll($where = '', $return_type = OBJECT) {
185
+ global $wpdb, $prli_utils;
186
+ $query_str = "SELECT * FROM {$this->table_name}" . $prli_utils->prepend_and_or_where(' WHERE', $where) . " ORDER BY text";
187
+ return $wpdb->get_results($query_str, $return_type);
188
+ }
189
+
190
+ // Returns an array of links that have this keyword
191
+ public function getLinksByKeyword($keyword) {
192
+ global $wpdb;
193
+ $query_str = "SELECT link_id FROM {$this->table_name} WHERE text=%s";
194
+ $query = $wpdb->prepare($query_str,$keyword);
195
+ return $wpdb->get_col($query,0);
196
+ }
197
+
198
+ public function request_url_matches_url($url) {
199
+ $url_pattern = $url;
200
+ $url_pattern = preg_replace('!^https?!','^https?',$url_pattern); // http / https
201
+ $url_pattern = preg_replace('!\/\\?!','/?\\?',$url_pattern); // optional trailing slash
202
+ $url_pattern = preg_replace('!\/$!','/?',$url_pattern); // optional trailing slash
203
+
204
+ $request_url = PrliUtils::full_request_url();
205
+
206
+ return preg_match('!' . preg_quote($url_pattern, '!') . '!', $request_url);
207
+ }
208
+
209
+ private function format_keywords_array($keywords) {
210
+ $links_array = array();
211
+
212
+ if(!is_null($keywords)) {
213
+ foreach($keywords as $keyword) {
214
+ // Filter out keywords that have a url matching the current uri
215
+ if(!$this->request_url_matches_url($keyword->link_url)) {
216
+ if(!isset($links_array[$keyword->keyword])) {
217
+ $links_array[$keyword->keyword] = array();
218
+ }
219
+
220
+ $links_array[$keyword->keyword][] = (object)array('url' => $keyword->url, 'title' => stripslashes($keyword->title));
221
+ }
222
+ }
223
+ }
224
+
225
+ return $links_array;
226
+ }
227
+
228
+ /** This will get all of the keywords to urls for the given post.
229
+ * This is also where our smart-caching will come into play.
230
+ */
231
+ public function get_post_keywords_lookup($post_id) {
232
+ static $kws;
233
+
234
+ if(!isset($kws)) {
235
+ $kws = array();
236
+ }
237
+
238
+ if(!isset($kws[$post_id])) {
239
+ $index_keywords = get_option('plp_index_keywords', false);
240
+ if(empty($index_keywords)) { return $this->getKeywordToLinksArray($post_id); }
241
+
242
+ global $wpdb, $prli_link, $prli_blogurl;
243
+
244
+ $q = "
245
+ SELECT kw.text as keyword,
246
+ li.name as title,
247
+ li.url as link_url,
248
+ li.id as link_id,
249
+ CONCAT(%s,li.slug) AS url
250
+ FROM {$prli_link->table_name} li
251
+ JOIN {$this->table_name} kw
252
+ ON li.id=kw.link_id
253
+ JOIN {$this->post_keywords_table_name} AS pkw
254
+ ON kw.id = pkw.keyword_id
255
+ WHERE pkw.post_id=%d
256
+ AND kw.text <> %s
257
+ AND li.link_status='enabled'
258
+ ORDER BY CHAR_LENGTH(kw.text) DESC,
259
+ kw.text ASC
260
+ ";
261
+
262
+ $struct = PrliUtils::get_permalink_pre_slug_uri();
263
+ $q = $wpdb->prepare($q, $prli_blogurl.$struct, $post_id, '');
264
+
265
+ $keywords = $wpdb->get_results($q);
266
+
267
+ $kws[$post_id] = $this->format_keywords_array($keywords);
268
+ }
269
+
270
+ return $kws[$post_id];
271
+ }
272
+
273
+ public function getKeywordToLinksArray($post_id = false) {
274
+ static $kws;
275
+
276
+ if(!isset($kws)) {
277
+ global $wpdb, $prli_link, $plp_keyword, $prli_blogurl;
278
+
279
+ //Don't return keywords that link back to the current post
280
+ if($post_id) {
281
+ $post_url_path = parse_url(get_permalink($post_id), PHP_URL_PATH);
282
+ $post_url_path = '%' . $wpdb->esc_like($post_url_path);
283
+ $and_str = $wpdb->prepare("AND li.url NOT LIKE %s", $post_url_path);
284
+ } else {
285
+ $and_str = '';
286
+ }
287
+
288
+ $struct = PrliUtils::get_permalink_pre_slug_uri();
289
+ $query = "
290
+ SELECT kw.text as keyword,
291
+ li.name as title,
292
+ li.url as link_url,
293
+ li.id as link_id,
294
+ CONCAT(%s,li.slug) AS url
295
+ FROM {$prli_link->table_name} li
296
+ JOIN {$plp_keyword->table_name} kw
297
+ ON li.id=kw.link_id
298
+ WHERE kw.text <> %s
299
+ AND li.link_status='enabled'
300
+ {$and_str}
301
+ ORDER BY CHAR_LENGTH(kw.text) DESC,
302
+ kw.text ASC
303
+ ";
304
+
305
+ $query = $wpdb->prepare($query, $prli_blogurl.$struct, '');
306
+ $keywords = $wpdb->get_results($query);
307
+
308
+ $kws = $this->format_keywords_array($keywords);
309
+ }
310
+
311
+ return $kws;
312
+ }
313
+
314
+ public function post_has_post_keywords($post_id) {
315
+ global $wpdb;
316
+
317
+ $q = "
318
+ SELECT COUNT(*)
319
+ FROM {$this->post_keywords_table_name}
320
+ WHERE post_id=%d
321
+ ";
322
+ $q = $wpdb->prepare($q, $post_id);
323
+ $count = (int)$wpdb->get_var($q);
324
+
325
+ return ($count > 0);
326
+ }
327
+
328
+ public function link_has_post_keywords($link_id) {
329
+ global $wpdb;
330
+
331
+ $q = "
332
+ SELECT COUNT(*)
333
+ FROM {$this->post_keywords_table_name} AS pkw
334
+ WHERE pkw.keyword_id IN (
335
+ SELECT kw.id
336
+ FROM {$this->table_name} AS kw
337
+ WHERE kw.link_id=%d
338
+ )
339
+ ";
340
+ $q = $wpdb->prepare($q, $link_id);
341
+ $count = (int)$wpdb->get_var($q);
342
+
343
+ return ($count > 0);
344
+ }
345
+
346
+ public function delete_post_keywords_by_post_id($post_id) {
347
+ global $wpdb;
348
+
349
+ $q = "
350
+ DELETE FROM {$this->post_keywords_table_name}
351
+ WHERE post_id=%d
352
+ ";
353
+ $q = $wpdb->prepare($q, $post_id);
354
+
355
+ return $wpdb->query($q);
356
+ }
357
+
358
+ public function delete_post_keywords_by_link_id($link_id) {
359
+ global $wpdb, $prli_link_meta;
360
+
361
+ // Delete ALL postmeta so we can start updating for this link
362
+ //delete_post_meta($post_id, '_plp_post_keywords_updated_at');
363
+
364
+ $q = "
365
+ DELETE FROM {$this->post_keywords_table_name} AS pkw
366
+ WHERE pkw.keyword_id IN (
367
+ SELECT kw.id
368
+ FROM {$this->table_name} AS kw
369
+ WHERE kw.link_id=%d
370
+ )
371
+ ";
372
+ $q = $wpdb->prepare($q, $link_id);
373
+
374
+ return $wpdb->query($q);
375
+ }
376
+
377
+ // ENSURE NO LINKS WITH NULL updated_at
378
+ // SET any links with null as updated_at to current time
379
+ public function update_links_with_null_updated_at () {
380
+ global $wpdb, $prli_link;
381
+
382
+ $now = date('Y-m-d H:i:s');
383
+
384
+ $q = "
385
+ UPDATE {$prli_link->table_name}
386
+ SET updated_at=%s
387
+ WHERE updated_at IS NULL
388
+ ";
389
+ $q = $wpdb->prepare($q, $now);
390
+
391
+ return $wpdb->query($q);
392
+ }
393
+
394
+ // SELECT posts where updated_at < than max link updated_at
395
+ public function get_indexable_posts ($max_count=100) {
396
+ global $wpdb, $plp_options, $prli_link;
397
+
398
+ $this->update_links_with_null_updated_at();
399
+
400
+ $valid_types = $plp_options->autocreate_valid_types();
401
+ $valid_types = "'".implode("', '", $valid_types)."'";
402
+
403
+ $q = "
404
+ SELECT max(kw.created_at)
405
+ FROM {$this->table_name} AS kw
406
+ ";
407
+ $max_updated_at = $wpdb->get_var($q);
408
+
409
+ // Order to get oldest / null entries updated first
410
+ $q = $wpdb->prepare("
411
+ SELECT ID
412
+ FROM {$wpdb->posts} AS p
413
+ LEFT JOIN {$wpdb->postmeta} AS pm
414
+ ON p.ID=pm.post_id
415
+ AND pm.meta_key='_plp_post_keywords_updated_at'
416
+ WHERE p.post_status = 'publish'
417
+ AND p.post_type IN ({$valid_types})
418
+ AND (
419
+ pm.meta_value IS NULL
420
+ OR pm.meta_value < %s
421
+ )
422
+ ORDER BY pm.meta_value ASC,p.post_date DESC
423
+ LIMIT %d
424
+ ",
425
+ $max_updated_at,
426
+ $max_count
427
+ );
428
+ $posts = $wpdb->get_col($q);
429
+
430
+ return $posts;
431
+ }
432
+
433
+ // SELECT posts where updated_at < than max link updated_at
434
+ public function get_indexable_comments ($max_count=100) {
435
+ global $wpdb, $plp_options, $prli_link;
436
+
437
+ $this->update_links_with_null_updated_at();
438
+
439
+ $valid_types = $plp_options->autocreate_valid_types();
440
+ $valid_types = "'".implode("', '", $valid_types)."'";
441
+
442
+ $q = "
443
+ SELECT max(kw.created_at)
444
+ FROM {$this->table_name} AS kw
445
+ ";
446
+ $max_updated_at = $wpdb->get_var($q);
447
+
448
+ // Order to get oldest / null entries updated first
449
+ $q = $wpdb->prepare("
450
+ SELECT c.comment_ID
451
+ FROM {$wpdb->comments} AS c
452
+ INNER JOIN {$wpdb->posts} AS p
453
+ ON c.comment_post_ID=p.ID
454
+ AND p.post_status = 'publish'
455
+ AND p.post_type IN ({$valid_types})
456
+ LEFT JOIN {$wpdb->commentmeta} AS cm
457
+ ON c.comment_ID=cm.comment_id
458
+ AND cm.meta_key='_plp_comment_keywords_updated_at'
459
+ WHERE c.comment_approved=1
460
+ AND (
461
+ cm.meta_value IS NULL
462
+ OR cm.meta_value < %s
463
+ )
464
+ ORDER BY cm.meta_value ASC,c.comment_date DESC
465
+ LIMIT 100
466
+ ",
467
+ $max_updated_at
468
+ );
469
+ $comments = $wpdb->get_col($q);
470
+
471
+ return $comments;
472
+ }
473
+
474
+ private function get_post_grouped_keywords ($post_id) {
475
+ static $kws;
476
+
477
+ if(!isset($kws)) {
478
+ $kws = array();
479
+ }
480
+
481
+ if(!isset($kws[$post_id])) {
482
+ global $wpdb, $prli_link, $plp_options;
483
+
484
+ $valid_types = $plp_options->autocreate_valid_types();
485
+ $valid_types = "'".implode("', '", $valid_types)."'";
486
+
487
+ $q = "
488
+ SELECT * FROM (
489
+ SELECT kw.text, MIN(kw.id) AS id
490
+ FROM {$this->table_name} AS kw
491
+ JOIN {$wpdb->posts} AS p
492
+ ON p.ID=%d
493
+ LEFT JOIN {$wpdb->postmeta} AS pm
494
+ ON pm.post_id=p.ID
495
+ AND pm.meta_key='_plp_post_keywords_updated_at'
496
+ WHERE p.post_status='publish'
497
+ AND p.post_type IN ({$valid_types})
498
+ AND (
499
+ pm.meta_value IS NULL
500
+ OR pm.meta_value < kw.created_at
501
+ )
502
+ GROUP BY kw.text
503
+ ) as k
504
+ ORDER BY CHAR_LENGTH(k.text) DESC, k.text ASC
505
+ ";
506
+ $q = $wpdb->prepare($q, $post_id);
507
+
508
+ $kws[$post_id] = $wpdb->get_results($q);
509
+ }
510
+
511
+ return $kws[$post_id];
512
+ }
513
+
514
+ private function get_comment_grouped_keywords ($comment_id) {
515
+ static $kws;
516
+
517
+ if(!isset($kws)) {
518
+ $kws = array();
519
+ }
520
+
521
+ if(!isset($kws[$comment_id])) {
522
+ global $wpdb, $prli_link, $plp_options;
523
+
524
+ $valid_types = $plp_options->autocreate_valid_types();
525
+ $valid_types = "'".implode("', '", $valid_types)."'";
526
+
527
+ $q = "
528
+ SELECT * FROM (
529
+ SELECT kw.text, MIN(kw.id) AS id
530
+ FROM {$this->table_name} AS kw
531
+ JOIN {$wpdb->comments} AS c
532
+ ON c.comment_ID=%d
533
+ JOIN {$wpdb->posts} AS p
534
+ ON p.ID=c.comment_post_ID
535
+ LEFT JOIN {$wpdb->commentmeta} AS cm
536
+ ON cm.comment_id=c.comment_ID
537
+ AND cm.meta_key='_plp_comment_keywords_updated_at'
538
+ WHERE c.comment_approved=1
539
+ AND p.post_status='publish'
540
+ AND p.post_type IN ({$valid_types})
541
+ AND (
542
+ cm.meta_value IS NULL
543
+ OR cm.meta_value < kw.created_at
544
+ )
545
+ GROUP BY kw.text
546
+ ) as k
547
+ ORDER BY CHAR_LENGTH(k.text) DESC, k.text ASC
548
+ ";
549
+ $q = $wpdb->prepare($q, $comment_id);
550
+
551
+ $kws[$comment_id] = $wpdb->get_results($q);
552
+ }
553
+
554
+ return $kws[$comment_id];
555
+ }
556
+
557
+ // Figure out keywords applicable to this post and index them appropriately
558
+ public function index_post ($post_id) {
559
+ global $plp_options;
560
+ $kws = $this->get_post_grouped_keywords($post_id);
561
+ $post_content = strip_tags(PrliUtils::get_post_content($post_id));
562
+ $this->index_content($post_id, $kws, $post_content);
563
+ update_post_meta($post_id, '_plp_post_keywords_updated_at', PrliUtils::now());
564
+ }
565
+
566
+ public function index_comment ($comment_id) {
567
+ global $plp_options;
568
+ $kws = $this->get_comment_grouped_keywords($comment_id);
569
+ $comment_content = strip_tags(get_comment_text($comment_id));
570
+ $comment = get_comment($comment_id);
571
+ $this->index_content($comment->comment_post_ID, $kws, $comment_content);
572
+ update_comment_meta($comment_id, '_plp_comment_keywords_updated_at', PrliUtils::now());
573
+ }
574
+
575
+ private function index_content ($post_id, &$kws, &$content) {
576
+ $kw_ids = array();
577
+ foreach($kws as $kw) {
578
+ if(preg_match('/\b'.preg_quote($kw->text).'\b/i', $content)) {
579
+ $kw_ids[] = $kw->id;
580
+ }
581
+ }
582
+
583
+ // Add all keywords in one swath
584
+ return $this->add_post_keywords($post_id, $kw_ids);
585
+ }
586
+
587
+ public function get_post_keywords_by_post_id ($post_id) {
588
+ global $wpdb;
589
+
590
+ $q = "
591
+ SELECT pkw.keyword_id
592
+ FROM {$this->post_keywords_table_name} AS pkw
593
+ WHERE pkw.post_id=%d
594
+ ";
595
+ $q = $wpdb->prepare($q, $post_id);
596
+
597
+ return $wpdb->get_col($q);
598
+ }
599
+
600
+ public function add_post_keywords ($post_id, $keyword_ids) {
601
+ global $wpdb;
602
+
603
+ if(empty($keyword_ids)) { return false; }
604
+
605
+ // We got a unique index folks so we just ignore dups yo
606
+ // But we just want to grab one random keyword to insert here
607
+ $q = "
608
+ INSERT IGNORE INTO {$this->post_keywords_table_name}
609
+ (post_id, keyword_id)
610
+ VALUES
611
+ ";
612
+
613
+ $vals = array();
614
+ foreach($keyword_ids as $keyword_id) {
615
+ // Not sure how this would ever be un-true but let's make sure it doesn't happen
616
+ if($keyword_id > 0 && $post_id > 0) {
617
+ $vals[] = $wpdb->prepare("(%d, %d)", $post_id, $keyword_id);
618
+ }
619
+ }
620
+
621
+ // No values to insert? Let's bail.
622
+ if(empty($vals)) { return false; }
623
+
624
+ $q .= implode(',',$vals);
625
+
626
+ return $wpdb->query($q);
627
+ }
628
+
629
+ // How many posts out of all are indexed
630
+ public function posts_indexed () {
631
+ global $wpdb, $prli_link, $plp_options;
632
+
633
+ $valid_types = $plp_options->autocreate_valid_types();
634
+ $valid_types = "'".implode("', '", $valid_types)."'";
635
+
636
+ $q = "
637
+ SELECT max(kw.created_at)
638
+ FROM {$this->table_name} AS kw
639
+ ";
640
+ $max_updated_at = $wpdb->get_var($q);
641
+
642
+ // Num un-indexed posts
643
+ $q = $wpdb->prepare("
644
+ SELECT COUNT(*)
645
+ FROM {$wpdb->posts} AS p
646
+ LEFT JOIN {$wpdb->postmeta} AS pm
647
+ ON p.ID=pm.post_id
648
+ AND pm.meta_key='_plp_post_keywords_updated_at'
649
+ WHERE p.post_status = 'publish'
650
+ AND p.post_type IN ({$valid_types})
651
+ AND (
652
+ pm.meta_value IS NULL
653
+ OR pm.meta_value < %s
654
+ )
655
+ ORDER BY pm.meta_value
656
+ ",
657
+ $max_updated_at
658
+ );
659
+ $unindexed = $wpdb->get_var($q);
660
+
661
+ $q = "
662
+ SELECT COUNT(*)
663
+ FROM {$wpdb->posts} AS p
664
+ WHERE p.post_status = 'publish'
665
+ AND p.post_type IN ({$valid_types})
666
+ ";
667
+ $total = $wpdb->get_var($q);
668
+
669
+ $indexed = ($total - $unindexed);
670
+
671
+ return (object)compact('total', 'indexed', 'unindexed');
672
+ }
673
+
674
+ // How many comments out of all are indexed
675
+ public function comments_indexed () {
676
+ global $wpdb, $prli_link, $plp_options;
677
+
678
+ $valid_types = $plp_options->autocreate_valid_types();
679
+ $valid_types = "'".implode("', '", $valid_types)."'";
680
+
681
+ $q = "
682
+ SELECT max(kw.created_at)
683
+ FROM {$this->table_name} AS kw
684
+ ";
685
+ $max_updated_at = $wpdb->get_var($q);
686
+
687
+ // Num un-indexed posts
688
+ $q = $wpdb->prepare("
689
+ SELECT COUNT(*)
690
+ FROM {$wpdb->comments} AS c
691
+ INNER JOIN {$wpdb->posts} AS p
692
+ ON c.comment_post_ID=p.ID
693
+ AND p.post_status = 'publish'
694
+ AND p.post_type IN ({$valid_types})
695
+ LEFT JOIN {$wpdb->commentmeta} AS cm
696
+ ON c.comment_ID=cm.comment_id
697
+ AND cm.meta_key='_plp_comment_keywords_updated_at'
698
+ WHERE c.comment_approved=1
699
+ AND (
700
+ cm.meta_value IS NULL
701
+ OR cm.meta_value < %s
702
+ )
703
+ ORDER BY cm.meta_value
704
+ ",
705
+ $max_updated_at
706
+ );
707
+ $unindexed = $wpdb->get_var($q);
708
+
709
+ $q = "
710
+ SELECT COUNT(*)
711
+ FROM {$wpdb->comments} AS c
712
+ INNER JOIN {$wpdb->posts} AS p
713
+ ON c.comment_post_ID=p.ID
714
+ AND p.post_status = 'publish'
715
+ AND p.post_type IN ({$valid_types})
716
+ WHERE c.comment_approved=1
717
+ ";
718
+ $total = $wpdb->get_var($q);
719
+
720
+ $indexed = ($total - $unindexed);
721
+
722
+ return (object)compact('total', 'indexed', 'unindexed');
723
+ }
724
+ }
pro/app/models/PlpLinkRotation.php ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH'))
3
+ die('You are not allowed to call this page directly.');
4
+
5
+ class PlpLinkRotation {
6
+ public $table_name;
7
+ public $cr_table_name;
8
+
9
+ public function __construct() {
10
+ global $wpdb;
11
+ $this->table_name = "{$wpdb->prefix}prli_link_rotations";
12
+ $this->cr_table_name = "{$wpdb->prefix}prli_clicks_rotations";
13
+ }
14
+
15
+ public function create( $url, $weight, $r_index, $link_id ) {
16
+ global $wpdb;
17
+
18
+ $query_str = "INSERT INTO {$this->table_name} " .
19
+ '(url,' .
20
+ 'weight,' .
21
+ 'r_index,' .
22
+ 'link_id,' .
23
+ 'created_at) ' .
24
+ 'VALUES ' .
25
+ '(%s,%d,%d,%d,NOW())';
26
+
27
+ $query = $wpdb->prepare( $query_str,
28
+ $url,
29
+ $weight,
30
+ $r_index,
31
+ $link_id );
32
+
33
+ $query_results = $wpdb->query($query);
34
+
35
+ if($query_results)
36
+ return $wpdb->insert_id;
37
+ else
38
+ return false;
39
+ }
40
+
41
+ public function update( $url, $weight, $r_index, $link_id ) {
42
+ global $wpdb;
43
+
44
+ $query_str = "UPDATE {$this->table_name} SET " .
45
+ 'url=%s, ' .
46
+ 'weight=%d ' .
47
+ 'WHERE ' .
48
+ 'link_id=%d AND ' .
49
+ 'r_index=%d';
50
+
51
+ $query = $wpdb->prepare( $query_str,
52
+ $url,
53
+ $weight,
54
+ $link_id,
55
+ $r_index );
56
+
57
+ $query_results = $wpdb->query($query);
58
+
59
+ return $query_results;
60
+ }
61
+
62
+ public function record_click( $click_id, $link_id, $url ) {
63
+ global $wpdb;
64
+
65
+ $query_str = "INSERT INTO {$this->cr_table_name} " .
66
+ '(click_id,' .
67
+ 'link_id,' .
68
+ 'url) ' .
69
+ 'VALUES ' .
70
+ '(%d,%d,%s)';
71
+
72
+ $query = $wpdb->prepare( $query_str,
73
+ $click_id,
74
+ $link_id,
75
+ $url );
76
+
77
+ $query_results = $wpdb->query($query);
78
+
79
+ if($query_results)
80
+ return $wpdb->insert_id;
81
+ else
82
+ return false;
83
+ }
84
+
85
+ public function updateLinkRotations($link_id,$link_rotations,$link_weights) {
86
+ $existing_rotations = $this->getAllByLinkId( $link_id );
87
+
88
+ $max_count = ((count($existing_rotations) > count($link_rotations))?count($existing_rotations):count($link_rotations));
89
+ for($i=0;$i<$max_count;$i++)
90
+ {
91
+ if(isset($existing_rotations[$i]) and isset($link_rotations[$i]))
92
+ {
93
+ if(empty($link_rotations[$i]) or preg_match("#^\s*$#",$link_rotations[$i]))
94
+ $this->destroy($link_id,$i);
95
+ else
96
+ $this->update(trim($link_rotations[$i]), trim($link_weights[$i]), $i, $link_id);
97
+ }
98
+ else if(isset($link_rotations[$i]) and !preg_match("#^\s*$#",$link_rotations[$i]))
99
+ $this->create(trim($link_rotations[$i]), trim($link_weights[$i]), $i, $link_id);
100
+ else if(isset($existing_rotations[$i]))
101
+ $this->destroy($link_id,$i);
102
+ }
103
+ }
104
+
105
+ public function destroy( $link_id, $r_index ) {
106
+ global $wpdb;
107
+ $query_str = "DELETE FROM {$this->table_name} WHERE link_id=%d AND r_index=%d";
108
+ $query = $wpdb->prepare($query_str,$link_id,$r_index);
109
+ return $wpdb->query($query);
110
+ }
111
+
112
+ public function destroyByLinkId( $link_id ) {
113
+ global $wpdb;
114
+ $query_str = "DELETE FROM {$this->table_name} WHERE link_id=%d";
115
+ $query = $wpdb->prepare($query_str,$link_id);
116
+ return $wpdb->query($query);
117
+ }
118
+
119
+ public function getOne( $id, $return_type = OBJECT ) {
120
+ global $wpdb;
121
+ $query_str = "SELECT * FROM {$this->table_name} WHERE id=%d";
122
+ $query = $wpdb->prepare($query_str,$id);
123
+ return $wpdb->get_row($query, $return_type);
124
+ }
125
+
126
+ public function getAllByLinkId( $link_id, $return_type = OBJECT ) {
127
+ global $wpdb;
128
+ $query_str = "SELECT * FROM {$this->table_name} WHERE link_id=%d ORDER BY r_index";
129
+ $query = $wpdb->prepare($query_str,$link_id);
130
+ return $wpdb->get_results($query, $return_type);
131
+ }
132
+
133
+ public function getAll($where = '', $return_type = OBJECT) {
134
+ global $wpdb, $prli_utils;
135
+ $query_str = "SELECT * FROM {$this->table_name}" . $prli_utils->prepend_and_or_where(' WHERE', $where) . " ORDER BY link_id,r_index";
136
+ return $wpdb->get_results($query_str, $return_type);
137
+ }
138
+
139
+ public function get_rotations($link_id) {
140
+ global $wpdb;
141
+ $query_str = "SELECT url FROM {$this->table_name} WHERE link_id=%d ORDER BY r_index";
142
+ $query = $wpdb->prepare($query_str,$link_id);
143
+ return $wpdb->get_col($query, 0);
144
+ }
145
+
146
+ public function get_weights($link_id) {
147
+ global $wpdb;
148
+ $query_str = "SELECT weight FROM {$this->table_name} WHERE link_id=%d ORDER BY r_index";
149
+ $query = $wpdb->prepare($query_str,$link_id);
150
+ return $wpdb->get_col($query, 0);
151
+ }
152
+
153
+ public function get_target_url($link_id) {
154
+ global $prli_link, $prli_link_meta;
155
+
156
+ $link = $prli_link->getOne($link_id);
157
+
158
+ $rotation_urls = $this->get_rotations($link_id);
159
+ $rotation_urls[] = $link->url;
160
+
161
+ $weights = $this->get_weights($link_id);
162
+ $weights[] = $prli_link_meta->get_link_meta($link_id,'prli-target-url-weight',true);
163
+
164
+ $index = PlpUtils::w_rand($weights);
165
+
166
+ // Just double check that we aren't returning an empty URL ...
167
+ // At the very least we can return the target url.
168
+ $target_url = (empty($rotation_urls[$index])?$link->url:$rotation_urls[$index]);
169
+
170
+ return $target_url;
171
+ }
172
+
173
+ public function there_are_rotations_for_this_link($link_id) {
174
+ global $wpdb;
175
+ $query_str = "SELECT * FROM {$this->table_name} WHERE link_id=%d";
176
+ $query = $wpdb->prepare($query_str,$link_id);
177
+ $url_rotations = $wpdb->get_results($query);
178
+
179
+ foreach($url_rotations as $rot) {
180
+ if(!preg_match('#^/s*?#',$rot->url))
181
+ return true; // short circuit when we find the first rotation
182
+ }
183
+
184
+ return false;
185
+ }
186
+ }
pro/app/models/PlpOptions.php ADDED
@@ -0,0 +1,407 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) die('You are not allowed to call this page directly.');
3
+
4
+ class PlpOptions {
5
+ public $pages_auto;
6
+ public $posts_auto;
7
+ public $pages_category;
8
+ public $posts_category;
9
+ public $autocreate;
10
+
11
+ public $default_social_buttons;
12
+ public $social_buttons;
13
+ public $social_buttons_placement;
14
+ public $social_buttons_show_in_feed;
15
+ public $social_buttons_padding;
16
+ public $social_posts_buttons;
17
+ public $social_pages_buttons;
18
+
19
+ public $keyword_replacement_is_on;
20
+ public $keywords_per_page;
21
+ public $keyword_links_per_page;
22
+ public $keyword_links_open_new_window;
23
+ public $keyword_links_nofollow;
24
+ public $keyword_links_sponsored;
25
+ public $keyword_link_custom_css;
26
+ public $keyword_link_hover_custom_css;
27
+ public $set_keyword_thresholds;
28
+ public $keyword_enable_content_cache; // DEPRECATED
29
+ public $replace_urls_with_pretty_links;
30
+ public $replace_urls_with_pretty_links_blacklist;
31
+ public $replace_keywords_in_comments;
32
+ public $replace_keywords_in_feeds;
33
+ public $enable_link_to_disclosures;
34
+ public $disclosures_link_url;
35
+ public $disclosures_link_text;
36
+ public $disclosures_link_position;
37
+ public $enable_keyword_link_disclosures;
38
+ public $keyword_link_disclosure;
39
+
40
+ public $use_prettylink_url;
41
+ public $prettylink_url;
42
+
43
+ public $min_role;
44
+
45
+ public $allow_public_link_creation;
46
+ public $use_public_link_display_page;
47
+ public $public_link_display_page;
48
+
49
+ public $prettybar_hide_attrib_link;
50
+ public $prettybar_attrib_url;
51
+
52
+ public $google_tracking;
53
+ public $google_tracking_str;
54
+
55
+ public $generate_qr_codes_str;
56
+ public $generate_qr_codes;
57
+
58
+ public $qr_code_links_str;
59
+ public $qr_code_links;
60
+
61
+ public $global_head_scripts_str;
62
+ public $global_head_scripts;
63
+
64
+ //Use a base slug prefix on all new links like out/ or go/ etc.
65
+ public $base_slug_prefix_str;
66
+ public $base_slug_prefix;
67
+
68
+ //The number of characters to use in random slug generation.
69
+ public $num_slug_chars_str;
70
+ public $num_slug_chars;
71
+
72
+ public function __construct($options_array=array()) {
73
+ // Set values from array
74
+ foreach($options_array as $key => $value) {
75
+ $this->{$key} = $value;
76
+ }
77
+
78
+ $this->set_default_options();
79
+ }
80
+
81
+ public function set_default_options() {
82
+ if(!isset($this->pages_auto))
83
+ $this->pages_auto = 0;
84
+
85
+ if(!isset($this->posts_auto))
86
+ $this->posts_auto = 0;
87
+
88
+ if(!isset($this->pages_category))
89
+ $this->pages_category= '';
90
+
91
+ if(!isset($this->posts_category))
92
+ $this->posts_category = '';
93
+
94
+ if(!isset($this->autocreate)) {
95
+ $this->autocreate = array();
96
+ }
97
+
98
+ $this->default_social_buttons = array(
99
+ 'facebook' => array(
100
+ 'label' => __('Facebook', 'pretty-link'),
101
+ 'checked' => false,
102
+ 'slug' => 'facebook',
103
+ 'icon' => 'pl-icon-facebook',
104
+ 'url' => 'http://www.facebook.com/sharer.php?u={{encoded_url}}&t={{encoded_title}}'
105
+ ),
106
+ 'twitter' => array(
107
+ 'label' => __('Twitter', 'pretty-link'),
108
+ 'checked' => false,
109
+ 'slug' => 'twitter',
110
+ 'icon' => 'pl-icon-twitter',
111
+ 'url' => 'https://twitter.com/intent/tweet?text={{tweet_message}}'
112
+ ),
113
+ 'gplus' => array(
114
+ 'label' => __('Google+', 'pretty-link'),
115
+ 'checked' => false,
116
+ 'slug' => 'gplus',
117
+ 'icon' => 'pl-icon-gplus',
118
+ 'url' => 'https://plus.google.com/share?url={{encoded_url}}'
119
+ ),
120
+ 'pinterest' => array(
121
+ 'label' => __('Pinterest', 'pretty-link'),
122
+ 'checked' => false,
123
+ 'slug' => 'pinterest',
124
+ 'icon' => 'pl-icon-pinterest',
125
+ 'url' => 'http://pinterest.com/pin/create/button/?url={{encoded_url}}&description={{encoded_title}}"'
126
+ ),
127
+ 'linkedin' => array(
128
+ 'label' => __('LinkedIn', 'pretty-link'),
129
+ 'checked' => false,
130
+ 'slug' => 'linkedin',
131
+ 'icon' => 'pl-icon-linkedin',
132
+ 'url' => 'http://www.linkedin.com/shareArticle?mini=true&url={{encoded_url}}&title={{encoded_title}}'
133
+ ),
134
+ 'reddit' => array(
135
+ 'label' => __('Reddit', 'pretty-link'),
136
+ 'checked' => false,
137
+ 'slug' => 'reddit',
138
+ 'icon' => 'pl-icon-reddit',
139
+ 'url' => 'http://reddit.com/submit?url={{encoded_url}}&title={{encoded_title}}'
140
+ ),
141
+ 'stumbleupon' => array(
142
+ 'label' => __('StumbleUpon', 'pretty-link'),
143
+ 'checked' => false,
144
+ 'slug' => 'stumbleupon',
145
+ 'icon' => 'pl-icon-stumbleupon',
146
+ 'url' => 'http://www.stumbleupon.com/submit?url={{encoded_url}}&title={{encoded_title}}'
147
+ ),
148
+ 'digg' => array(
149
+ 'label' => __('Digg', 'pretty-link'),
150
+ 'checked' => false,
151
+ 'slug' => 'digg',
152
+ 'icon' => 'pl-icon-digg',
153
+ 'url' => 'http://digg.com/submit?phase=2&url={{encoded_url}}&title={{encoded_title}}'
154
+ ),
155
+ 'email' => array(
156
+ 'label' => __('Email', 'pretty-link'),
157
+ 'checked' => false,
158
+ 'slug' => 'email',
159
+ 'icon' => 'pl-icon-email',
160
+ 'url' => 'mailto:?subject={{encoded_title}}&body={{encoded_title}}%20{{encoded_url}}'
161
+ )
162
+ );
163
+
164
+ if(!isset($this->social_buttons)) {
165
+ $this->social_buttons = array_values( $this->default_social_buttons );
166
+ }
167
+ else {
168
+ // If it's the old-style array then refactor it
169
+ if( isset($this->social_buttons['facebook']) ) {
170
+ $new_social_buttons = array_values( $this->default_social_buttons );
171
+
172
+ foreach( $new_social_buttons as $i => $values ) {
173
+ if( isset( $this->social_buttons[$values['slug']] ) ) {
174
+ $new_social_buttons[$i]['checked'] = ($values==='on');
175
+ }
176
+ }
177
+
178
+ $this->social_buttons = $new_social_buttons;
179
+ }
180
+ }
181
+
182
+ if(!isset($this->social_buttons_placement))
183
+ $this->social_buttons_placement = 'bottom';
184
+
185
+ if(!isset($this->social_buttons_show_in_feed))
186
+ $this->social_buttons_show_in_feed = 0;
187
+
188
+ if(!isset($this->social_buttons_padding))
189
+ $this->social_buttons_padding = '10';
190
+
191
+ if(!isset($this->social_posts_buttons))
192
+ $this->social_posts_buttons = 0;
193
+
194
+ if(!isset($this->social_pages_buttons))
195
+ $this->social_pages_buttons = 0;
196
+
197
+ if(!isset($this->keyword_replacement_is_on))
198
+ $this->keyword_replacement_is_on = 1;
199
+
200
+ if(!isset($this->keywords_per_page))
201
+ $this->keywords_per_page = 3;
202
+
203
+ if(!isset($this->keyword_links_per_page))
204
+ $this->keyword_links_per_page = 2;
205
+
206
+ if(!isset($this->keyword_links_open_new_window))
207
+ $this->keyword_links_open_new_window = 0;
208
+
209
+ if(!isset($this->keyword_links_nofollow))
210
+ $this->keyword_links_nofollow = 0;
211
+
212
+ if(!isset($this->keyword_links_sponsored))
213
+ $this->keyword_links_sponsored = 0;
214
+
215
+ if(!isset($this->keyword_link_custom_css))
216
+ $this->keyword_link_custom_css = '';
217
+
218
+ if(!isset($this->keyword_link_hover_custom_css))
219
+ $this->keyword_link_hover_custom_css = '';
220
+
221
+ if(!isset($this->set_keyword_thresholds))
222
+ $this->set_keyword_thresholds = 0;
223
+
224
+ // DEPRECATED
225
+ $this->keyword_enable_content_cache = 0;
226
+
227
+ if(!isset($this->replace_urls_with_pretty_links))
228
+ $this->replace_urls_with_pretty_links = 0;
229
+ if(!isset($this->replace_urls_with_pretty_links_blacklist))
230
+ $this->replace_urls_with_pretty_links_blacklist = '';
231
+ if(!isset($this->replace_keywords_in_comments))
232
+ $this->replace_keywords_in_comments = 0;
233
+ if(!isset($this->replace_keywords_in_feeds))
234
+ $this->replace_keywords_in_feeds = 0;
235
+ if(!isset($this->enable_link_to_disclosures)) {
236
+ $this->enable_link_to_disclosures = 0;
237
+ }
238
+ if(!isset($this->disclosures_link_url)) {
239
+ $this->disclosures_link_url = '';
240
+ }
241
+ if(!isset($this->disclosures_link_text)) {
242
+ $this->disclosures_link_text = __('Affiliate Link Disclosures','pretty-link');
243
+ }
244
+ if(!isset($this->disclosures_link_position)) {
245
+ $this->disclosures_link_position = 'bottom';
246
+ }
247
+ if(!isset($this->enable_keyword_link_disclosures)) {
248
+ $this->enable_keyword_link_disclosures = 0;
249
+ }
250
+ if(!isset($this->keyword_link_disclosure)) {
251
+ $this->keyword_link_disclosure = __('(aff)', 'pretty-link');
252
+ }
253
+
254
+ if(!isset($this->use_prettylink_url))
255
+ $this->use_prettylink_url = 0;
256
+
257
+ if(!isset($this->prettylink_url))
258
+ $this->prettylink_url = '';
259
+
260
+ //manage_options = ADMIN
261
+ //delete_pages = EDITOR
262
+ //publish_posts = AUTHOR
263
+ //edit_posts = CONTRIBUTOR
264
+ //read = SUBSCRIBER
265
+ if(!isset($this->min_role) || $this->min_role == 'add_users') {
266
+ $this->min_role = 'manage_options';
267
+ }
268
+
269
+ if(!isset($this->allow_public_link_creation))
270
+ $this->allow_public_link_creation = 0;
271
+
272
+ if(!isset($this->use_public_link_display_page))
273
+ $this->use_public_link_display_page = 0;
274
+
275
+ if(!isset($this->public_link_display_page))
276
+ $this->public_link_display_page = '';
277
+
278
+ if(!isset($this->prettybar_hide_attrib_link))
279
+ $this->prettybar_hide_attrib_link = 0;
280
+
281
+ if(!isset($this->prettybar_attrib_url))
282
+ $this->prettybar_attrib_url = '';
283
+
284
+ $this->google_tracking_str = 'prlipro-google-tracking';
285
+ if(!isset($this->google_tracking))
286
+ $this->google_tracking = 0;
287
+
288
+ $this->generate_qr_codes_str = 'prlipro-generate-qr-codes';
289
+ if(!isset($this->generate_qr_codes))
290
+ $this->generate_qr_codes = 0;
291
+
292
+ $this->qr_code_links_str = 'prlipro-code-links';
293
+ $this->qr_code_links = 0;
294
+ /* TODO: We're going to just comment this out for now
295
+ if(!isset($this->qr_code_links))
296
+ $this->qr_code_links = 0;
297
+ */
298
+
299
+ $this->global_head_scripts_str = 'prlipro-global-head-scripts';
300
+ if(!isset($this->global_head_scripts) || empty($this->global_head_scripts))
301
+ $this->global_head_scripts = '';
302
+
303
+ $this->base_slug_prefix_str = 'prlipro-base-slug-prefix';
304
+ if(!isset($this->base_slug_prefix))
305
+ $this->base_slug_prefix = '';
306
+
307
+ $this->num_slug_chars_str = 'prlipro-num-slug-chars';
308
+ if(!isset($this->num_slug_chars))
309
+ $this->num_slug_chars = 4;
310
+ }
311
+
312
+ public function store() {
313
+ $storage_array = (array)$this;
314
+ update_option( 'prlipro_options', $storage_array );
315
+ wp_cache_delete('alloptions', 'options');
316
+ }
317
+
318
+ public function autocreate_option($post_type='post') {
319
+ $opt = array(
320
+ 'enabled' => false,
321
+ 'category' => '',
322
+ 'socbtns' => false
323
+ );
324
+
325
+ if($post_type=='post') {
326
+ $opt['enabled'] = !empty($this->posts_auto);
327
+ $opt['category'] = $this->posts_category;
328
+ $opt['socbtns'] = !empty($this->social_posts_buttons);
329
+ }
330
+ else if($post_type=='page') {
331
+ $opt['enabled'] = !empty($this->pages_auto);
332
+ $opt['category'] = $this->pages_category;
333
+ $opt['socbtns'] = !empty($this->social_pages_buttons);
334
+ }
335
+ else {
336
+ if(isset($this->autocreate[$post_type])) {
337
+ $ac = $this->autocreate[$post_type];
338
+ $opt['enabled'] = isset($ac['enabled']) && !empty($ac['enabled']);
339
+ $opt['category'] = isset($ac['category']) ? $ac['category'] : '';
340
+ $opt['socbtns'] = isset($ac['socbtns']) && !empty($ac['socbtns']);
341
+ }
342
+ }
343
+
344
+ return (object)$opt;
345
+ }
346
+
347
+ public function autocreate_options() {
348
+ $opts = array();
349
+ $post_types = $this->get_post_types();
350
+
351
+ foreach($post_types as $post_type) {
352
+ $opts[$post_type] = $this->autocreate_option($post_type);
353
+ }
354
+
355
+ return (object)$opts;
356
+ }
357
+
358
+ public function autocreate_valid_types() {
359
+ $valid_opts = array();
360
+ $opts = $this->autocreate_options();
361
+
362
+ foreach($opts as $post_type => $opt) {
363
+ if($opt->enabled) {
364
+ $valid_opts[] = $post_type;
365
+ }
366
+ }
367
+
368
+ return $valid_opts;
369
+ }
370
+
371
+ public function get_post_types($include_page_and_post=true) {
372
+ $post_types = get_post_types(array('_builtin'=>false,'public'=>true),'names','and');
373
+
374
+ if($include_page_and_post) {
375
+ $post_types['post'] = 'post';
376
+ $post_types['page'] = 'page';
377
+ }
378
+
379
+ return $post_types;
380
+ }
381
+
382
+ public static function get_options() {
383
+ $plp_options = get_option('prlipro_options');
384
+
385
+ if($plp_options) {
386
+ if(is_string($plp_options)) {
387
+ $plp_options = unserialize($plp_options);
388
+ }
389
+
390
+ if(is_object($plp_options) && is_a($plp_options,'PlpOptions')) {
391
+ $plp_options->set_default_options();
392
+ $plp_options->store(); // store will convert this back into an array
393
+ }
394
+ else if(is_array($plp_options)) {
395
+ $plp_options = new PlpOptions($plp_options);
396
+ }
397
+ else {
398
+ $plp_options = new PlpOptions();
399
+ }
400
+ }
401
+ else {
402
+ $plp_options = new PlpOptions();
403
+ }
404
+
405
+ return $plp_options;
406
+ }
407
+ }
pro/app/models/PlpPostOptions.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
2
+
3
+ class PlpPostOptions {
4
+ public $requested_slug;
5
+
6
+ public $hide_social_buttons;
7
+ public $disable_replacements;
8
+
9
+ public function __construct($options_array = array()) {
10
+ // Set values from array
11
+ foreach($options_array as $key => $value)
12
+ $this->{$key} = $value;
13
+
14
+ $this->set_default_options();
15
+ }
16
+
17
+ public function set_default_options() {
18
+ if(!isset($this->requested_slug))
19
+ $this->requested_slug = '';
20
+
21
+ if(!isset($this->hide_social_buttons))
22
+ $this->hide_social_buttons = 0;
23
+
24
+ if(!isset($this->disable_replacements))
25
+ $this->disable_replacements = 0;
26
+ }
27
+
28
+ public function validate() {
29
+ global $prli_utils;
30
+ $errors = array();
31
+
32
+ if(!empty($this->requested_slug)) {
33
+ $slug_available = $prli_utils->is_slug_available($this->requested_slug);
34
+ if(is_wp_error($slug_available)) {
35
+ $errors[] = $slug_available->get_error_message();
36
+ }
37
+ }
38
+
39
+ return $errors;
40
+ }
41
+
42
+ // Just here as an alias for reverse compatibility
43
+ public function get_stored_object($post_id) {
44
+ return PlpOptions::get_options($post_id);
45
+ }
46
+
47
+ public function store($post_id) {
48
+ if(!empty($post_id) and $post_id) {
49
+ $storage_array = (array)$this;
50
+ PrliUtils::update_prli_post_meta($post_id, '_prlipro-post-options', $storage_array);
51
+ }
52
+ }
53
+
54
+ public static function get_options($post_id) {
55
+ if(!empty($post_id) and $post_id) {
56
+ $plp_post_options = PrliUtils::get_prli_post_meta($post_id,"_prlipro-post-options",true);
57
+
58
+ if($plp_post_options) {
59
+ if(is_string($plp_post_options))
60
+ $plp_post_options = unserialize($plp_post_options);
61
+
62
+ if(is_a($plp_post_options,'PlpPostOptions')) {
63
+ $plp_post_options->set_default_options();
64
+ $plp_post_options->store($post_id); // store will convert this back into an array
65
+ }
66
+ else if(is_array($plp_post_options))
67
+ $plp_post_options = new PlpPostOptions($plp_post_options);
68
+ else
69
+ $plp_post_options = new PlpPostOptions();
70
+ }
71
+ else
72
+ $plp_post_options = new PlpPostOptions();
73
+ }
74
+ else
75
+ $plp_post_options = new PlpPostOptions();
76
+
77
+ return $plp_post_options;
78
+ }
79
+ }
pro/app/models/PlpReport.php ADDED
@@ -0,0 +1,497 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpReport
5
+ {
6
+ public $table_name;
7
+ public $links_table_name;
8
+
9
+ public function __construct() {
10
+ global $wpdb;
11
+ $this->table_name = "{$wpdb->prefix}prli_reports";
12
+ $this->links_table_name = "{$wpdb->prefix}prli_report_links";
13
+ }
14
+
15
+ public function create( $values ) {
16
+ global $wpdb;
17
+
18
+ $goal_link_id = isset($values['goal_link_id']) ? $values['goal_link_id'] : 0;
19
+ $query_str = "INSERT INTO {$this->table_name} ".
20
+ '(name,goal_link_id,created_at) ' .
21
+ 'VALUES (%s,%d,NOW())';
22
+ $query = $wpdb->prepare( $query_str, $values['name'], $goal_link_id );
23
+ $query_results = $wpdb->query($query);
24
+ return $wpdb->insert_id;
25
+ }
26
+
27
+ public function update( $id, $values ) {
28
+ global $wpdb;
29
+
30
+ $goal_link_id = isset($values['goal_link_id']) ? $values['goal_link_id'] : 0;
31
+ $query_str = "UPDATE {$this->table_name} " .
32
+ 'SET name=%s, goal_link_id=%d ' .
33
+ 'WHERE id=%d';
34
+ $query = $wpdb->prepare($query_str,$values['name'],$goal_link_id,$id);
35
+ $query_results = $wpdb->query($query);
36
+ return $query_results;
37
+ }
38
+
39
+ public function get_report_links($report_id, $return_type = OBJECT) {
40
+ global $wpdb;
41
+ $query_str = "SELECT * FROM {$this->links_table_name} WHERE report_id=%d";
42
+ $query = $wpdb->prepare($query_str, $report_id);
43
+ return $wpdb->get_results($query, $return_type);
44
+ }
45
+
46
+ public function get_report_links_array($report_id) {
47
+ global $wpdb;
48
+ $links_table = $wpdb->prefix . 'prli_links';
49
+ $query_str = "SELECT link_id FROM {$this->links_table_name} LEFT JOIN {$links_table} links ON link_id = links.id WHERE report_id=%d AND link_status='enabled'";
50
+ $query = $wpdb->prepare($query_str, $report_id);
51
+ return $wpdb->get_col($query,0);
52
+ }
53
+
54
+ public function update_report_links($report_id, $link_ids) {
55
+ global $wpdb;
56
+
57
+ // Delete all records associated with this report
58
+ $query_str = "DELETE FROM {$this->links_table_name} WHERE report_id=%d";
59
+ $query = $wpdb->prepare($query_str, $report_id);
60
+ $wpdb->query($query);
61
+
62
+ // Rebuild link IDs from the array of link_ids
63
+ foreach($link_ids as $link_id) {
64
+ $query_str = "INSERT INTO {$this->links_table_name} ".
65
+ '(report_id,'.
66
+ 'link_id,'.
67
+ 'created_at) ' .
68
+ 'VALUES (%d,%d,NOW())';
69
+ $query = $wpdb->prepare( $query_str, $report_id, $link_id );
70
+ $query_results = $wpdb->query($query);
71
+ }
72
+ }
73
+
74
+ public function destroy( $id ) {
75
+ global $wpdb;
76
+ $query_str = "DELETE FROM {$this->table_name} WHERE id=%d";
77
+ $query = $wpdb->prepare($query_str, $id);
78
+ return $wpdb->query($query);
79
+ }
80
+
81
+ public function getOne( $id ) {
82
+ global $wpdb;
83
+ $query_str = "SELECT * FROM {$this->table_name} WHERE id=%d";
84
+ $query = $wpdb->prepare($query_str, $id);
85
+ return $wpdb->get_row($query);
86
+ }
87
+
88
+ public function getAll( $where = '', $order_by = '', $return_type = OBJECT ) {
89
+ global $wpdb, $prli_utils;
90
+ $query = "SELECT rp.*, " .
91
+ "li.name as goal_link_name, " .
92
+ "(SELECT COUNT(*) " .
93
+ "FROM {$this->links_table_name} rpl " .
94
+ "WHERE rpl.report_id = rp.id) as link_count " .
95
+ "FROM {$this->table_name} rp " .
96
+ "LEFT OUTER JOIN {$prli_link->table_name} li ON li.id = rp.goal_link_id AND li.link_status='enabled'" .
97
+ $prli_utils->prepend_and_or_where(' WHERE', $where) . $order_by;
98
+ return $wpdb->get_results($query, $return_type);
99
+ }
100
+
101
+ // Pagination Methods
102
+ public function getRecordCount($where='') {
103
+ global $wpdb, $prli_utils;
104
+ $query = "SELECT COUNT(*) FROM {$this->table_name} rp" . $prli_utils->prepend_and_or_where(' WHERE', $where);
105
+ return $wpdb->get_var($query);
106
+ }
107
+
108
+ public function getPageCount($p_size, $where="") {
109
+ return ceil((int)$this->getRecordCount($where) / (int)$p_size);
110
+ }
111
+
112
+ public function getPage($current_p,$p_size, $where = "", $order_by = '') {
113
+ global $wpdb, $prli_link, $prli_utils, $prli_link;
114
+ $end_index = $current_p * $p_size;
115
+ $start_index = $end_index - $p_size;
116
+ $query = "SELECT rp.*, " .
117
+ "li.name as goal_link_name, " .
118
+ "(SELECT COUNT(*) " .
119
+ "FROM {$this->links_table_name} rpl " .
120
+ "WHERE rpl.report_id = rp.id) as link_count " .
121
+ "FROM {$this->table_name} rp " .
122
+ "LEFT OUTER JOIN {$prli_link->table_name} li ON li.id = rp.goal_link_id AND li.link_status='enabled'" .
123
+ $prli_utils->prepend_and_or_where(' WHERE', $where) . "{$order_by} " .
124
+ "LIMIT {$start_index},{$p_size}";
125
+ $results = $wpdb->get_results($query);
126
+ return $results;
127
+ }
128
+
129
+ // Set defaults and grab get or post of each possible param
130
+ public function get_params_array() {
131
+ $values = array(
132
+ 'action' => sanitize_key(stripslashes(isset($_GET['action'])?$_GET['action']:(isset($_POST['action'])?$_POST['action']:''))),
133
+ 'id' => (isset($_GET['id'])?(int)$_GET['id']:(isset($_POST['id'])?(int)$_POST['id']:'')),
134
+ 'sdate' => sanitize_text_field(stripslashes(isset($_GET['sdate'])?$_GET['sdate']:(isset($_POST['sdate'])?$_POST['sdate']:''))),
135
+ 'edate' => sanitize_text_field(stripslashes(isset($_GET['edate'])?$_GET['edate']:(isset($_POST['edate'])?$_POST['edate']:''))),
136
+ 'paged' => (isset($_GET['paged'])?(int)$_GET['paged']:(isset($_POST['paged'])?(int)$_POST['paged']:1)),
137
+ 'search' => sanitize_text_field(stripslashes(isset($_GET['search'])?$_GET['search']:(isset($_POST['search'])?$_POST['search']:''))),
138
+ 'sort' => sanitize_key(stripslashes(isset($_GET['sort'])?$_GET['sort']:(isset($_POST['sort'])?$_POST['sort']:''))),
139
+ 'sdir' => sanitize_key(stripslashes(isset($_GET['sdir'])?$_GET['sdir']:(isset($_POST['sdir'])?$_POST['sdir']:'')))
140
+ );
141
+
142
+ return $values;
143
+ }
144
+
145
+ public function validate( $values ) {
146
+ global $wpdb, $prli_utils;
147
+
148
+ $errors = array();
149
+ if( empty($values['name']) ) {
150
+ $errors[] = __("Report must have a name.", 'pretty-link');
151
+ }
152
+
153
+ if( empty($values['link']) ) {
154
+ $errors[] = __("At least one link must be selected for analysis.", 'pretty-link');
155
+ }
156
+
157
+ return $errors;
158
+ }
159
+
160
+ public function get_labels_by_links($start_timestamp,$end_timestamp,$links,$uniques = false) {
161
+ global $wpdb, $prli_click, $prli_blogurl, $prli_link, $prli_utils;
162
+
163
+ if (!count($links)) {
164
+ return array();
165
+ }
166
+
167
+ $query_str = "
168
+ SELECT li.name as label
169
+ FROM {$prli_link->table_name} AS li
170
+ WHERE li.id IN (".implode(',',$links).")
171
+ AND li.link_status='enabled'
172
+ ORDER BY li.name
173
+ ";
174
+ $records = $wpdb->get_results($query_str);
175
+
176
+ $link_labels = array();
177
+ foreach($records as $record) {
178
+ $link_labels[] = $record->label;
179
+ }
180
+
181
+ return $link_labels;
182
+ }
183
+
184
+ public function get_clicks_by_links($start_timestamp,$end_timestamp,$links,$uniques = false) {
185
+ global $wpdb, $prli_click, $prli_blogurl, $prli_link, $prli_utils;
186
+
187
+ if (!count($links)) {
188
+ return array();
189
+ }
190
+
191
+ $query_str = "SELECT li.id as id, " .
192
+ "(SELECT COUNT(*) FROM {$prli_click->table_name} cl " .
193
+ "WHERE cl.link_id = li.id" . $prli_click->get_exclude_where_clause( ' AND' ) . " " .
194
+ (($uniques)?'AND cl.first_click=1 ':'') .
195
+ "AND cl.created_at BETWEEN %s AND %s) as clicks " .
196
+ "FROM {$prli_link->table_name} li " .
197
+ "WHERE li.id IN (".implode(',',$links).") " .
198
+ "AND li.link_status='enabled' " .
199
+ "ORDER BY li.name";
200
+ $query = $wpdb->prepare( $query_str, date("Y-n-j 00:00:00",$start_timestamp), date("Y-n-j 23:59:59",$end_timestamp) );
201
+ $records = $wpdb->get_results($query);
202
+
203
+ $link_clicks = array();
204
+ foreach($records as $record) {
205
+ $link_clicks[] = $record->clicks;
206
+ }
207
+
208
+ return $link_clicks;
209
+ }
210
+
211
+ public function get_conversions_by_links($start_timestamp,$end_timestamp,$links,$goal_link_id) {
212
+ global $wpdb, $prli_click, $prli_blogurl, $prli_link, $prli_utils;
213
+
214
+ $sdate = date("Y-n-j 00:00:00",$start_timestamp);
215
+ $edate = date("Y-n-j 23:59:59",$end_timestamp);
216
+
217
+ $query_str = "SELECT li.id as id, " .
218
+ "(SELECT COUNT(DISTINCT cl.vuid) FROM {$prli_click->table_name} cl " .
219
+ "WHERE cl.link_id = li.id" . $prli_click->get_exclude_where_clause( ' AND' ) . " " .
220
+ "AND cl.vuid IN (SELECT DISTINCT cl2.vuid " .
221
+ "FROM {$prli_click->table_name} cl2 " .
222
+ "WHERE cl2.link_id=%d " .
223
+ "AND cl.created_at < cl2.created_at " .
224
+ "AND cl2.created_at BETWEEN %s AND %s" .
225
+ $prli_click->get_exclude_where_clause( ' AND' ) . ") " .
226
+ "AND cl.created_at BETWEEN %s AND %s" .
227
+ ") as conversions " .
228
+ "FROM {$prli_link->table_name} li " .
229
+ "WHERE li.id IN (".implode(',',$links).") " .
230
+ "AND li.link_status='enabled' " .
231
+ "ORDER BY li.name";
232
+
233
+ $query = $wpdb->prepare( $query_str, $goal_link_id, $sdate, $edate, $sdate, $edate );
234
+ $records = $wpdb->get_results($query);
235
+
236
+ $link_conversions = array();
237
+ foreach($records as $record) {
238
+ $link_conversions[] = $record->conversions;
239
+ }
240
+
241
+ return $link_conversions;
242
+ }
243
+
244
+ public function get_chart_height($report_id,$line_height = 30) {
245
+ $links = $this->get_report_links_array($report_id);
246
+ return $line_height * count($links);
247
+ }
248
+
249
+ public function setupClicksByLinkBarGraph($start_timestamp, $end_timestamp, $report_id, $title_only = false) {
250
+ global $wpdb, $prli_utils, $prli_link, $prli_click;
251
+
252
+ $report = $this->getOne($report_id);
253
+ $links = $this->get_report_links_array($report_id);
254
+ $labels_array = $this->get_labels_by_links($start_timestamp, $end_timestamp, $links);
255
+ $clicks_array = $this->get_clicks_by_links($start_timestamp, $end_timestamp, $links);
256
+ $uniques_array = $this->get_clicks_by_links($start_timestamp, $end_timestamp, $links, true);
257
+
258
+ if($title_only) {
259
+ return __("Pretty Links Pro: Clicks for", 'pretty-link').' '.stripslashes($report->name).' '.__('report between', 'pretty-link').' '.date("Y-n-j",$start_timestamp).' '.__('and', 'pretty-link').' '.date("Y-n-j", $end_timestamp);
260
+ }
261
+
262
+ //Setup conversions
263
+ if(!empty($report->goal_link_id)) {
264
+ $conversions_array = $this->get_conversions_by_links($start_timestamp, $end_timestamp, $links, $report->goal_link_id);
265
+
266
+ $chart_data = array('cols' => array(array("label" => __('Link', 'pretty-link'), 'type' => 'string'), array("label" => __('All Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Unique Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Conversions', 'pretty-link'), 'type' => 'number')));
267
+
268
+ foreach($labels_array as $key => $value) {
269
+ $label = substr(addslashes($value),0,40);
270
+
271
+ $chart_data['rows'][] = array('c' => array(array('v' => $label, 'f' => null), array('v' => (int)$clicks_array[$key], 'f' => null), array('v' => (int)$uniques_array[$key], 'f' => null), array('v' => (int)$conversions_array[$key], 'f' => null)));
272
+ }
273
+ }
274
+ else { //Setup the clicks w/out conversions
275
+ $chart_data = array('cols' => array(array("label" => __('Link', 'pretty-link'), 'type' => 'string'), array("label" => __('All Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Unique Clicks', 'pretty-link'), 'type' => 'number')));
276
+
277
+ foreach($labels_array as $key => $value) {
278
+ $label = substr(addslashes($value),0,40);
279
+
280
+ $chart_data['rows'][] = array('c' => array(array('v' => $label, 'f' => null), array('v' => (int)$clicks_array[$key], 'f' => null), array('v' => (int)$uniques_array[$key], 'f' => null)));
281
+ }
282
+ }
283
+
284
+ return $chart_data;
285
+ }
286
+
287
+ // SPLIT TEST REPORT FUNCTIONS
288
+ public function get_split_report_links_array($link_id) {
289
+ global $prli_link,$plp_link_rotation;
290
+
291
+ $link = $prli_link->getOne($link_id);
292
+
293
+ $rotation_urls = $plp_link_rotation->get_rotations($link_id);
294
+
295
+ if($rotation_urls and is_array($rotation_urls)) {
296
+ array_unshift($rotation_urls,$link->url);
297
+ }
298
+ else {
299
+ $rotation_urls = array($link->url);
300
+ }
301
+
302
+ $new_rotation_urls = array();
303
+ foreach($rotation_urls as $rotation_url) {
304
+ if(!empty($rotation_url)) {
305
+ $new_rotation_urls[] = $rotation_url;
306
+ }
307
+ }
308
+
309
+ return $new_rotation_urls;
310
+ }
311
+
312
+ public function get_split_labels($link_id) {
313
+ $urls = $this->get_split_report_links_array($link_id);
314
+
315
+ $new_urls = array();
316
+ foreach($urls as $url) {
317
+ $new_urls[] = substr($url,0,40);
318
+ }
319
+
320
+ return $new_urls;
321
+ }
322
+
323
+ public function get_split_clicks($start_timestamp,$end_timestamp,$link_id,$uniques=false) {
324
+ global $wpdb, $prli_click, $plp_link_rotation;
325
+ $query_str = "SELECT cr.url as url, COUNT(".(($uniques)?'DISTINCT cl.vuid':'cl.id').") as clicks FROM {$prli_click->table_name} cl " .
326
+ "JOIN {$plp_link_rotation->cr_table_name} cr ON cl.id=cr.click_id " .
327
+ "WHERE cl.link_id=%d" .
328
+ $prli_click->get_exclude_where_clause( ' AND' ) . " " .
329
+ "AND cl.created_at BETWEEN %s AND %s " .
330
+ "GROUP BY cr.url";
331
+ $query = $wpdb->prepare( $query_str, $link_id, date("Y-n-j 00:00:00",$start_timestamp), date("Y-n-j 23:59:59",$end_timestamp) );
332
+ $records = $wpdb->get_results($query, ARRAY_A);
333
+
334
+ if($records and is_array($records)) {
335
+ $link_records = array();
336
+ foreach($records as $record) {
337
+ $link_records[$record['url']] = $record['clicks'];
338
+ }
339
+
340
+ return $link_records;
341
+ }
342
+ else {
343
+ return false;
344
+ }
345
+ }
346
+
347
+ public function get_split_conversions($start_timestamp,$end_timestamp,$link_id,$goal_link_id) {
348
+ global $wpdb, $prli_click, $plp_link_rotation;
349
+
350
+ $sdate = date("Y-n-j 00:00:00",$start_timestamp);
351
+ $edate = date("Y-n-j 23:59:59",$end_timestamp);
352
+
353
+ $query_str = "SELECT cr.url as url, COUNT(DISTINCT cl.vuid) as conversions " .
354
+ "FROM {$prli_click->table_name} cl " .
355
+ "JOIN {$plp_link_rotation->cr_table_name} cr ON cl.id=cr.click_id " .
356
+ "WHERE cl.link_id=%d" . $prli_click->get_exclude_where_clause( ' AND' ) . " " .
357
+ "AND cl.vuid IN (SELECT DISTINCT cl2.vuid " .
358
+ "FROM {$prli_click->table_name} cl2 " .
359
+ "WHERE cl2.link_id=%d " .
360
+ "AND cl.created_at < cl2.created_at " .
361
+ $prli_click->get_exclude_where_clause( ' AND','cl2' ) . ") " .
362
+ "AND cl.created_at BETWEEN %s AND %s " .
363
+ "GROUP BY cr.url";
364
+
365
+ $query = $wpdb->prepare( $query_str, $link_id, $goal_link_id, $sdate, $edate );
366
+ $records = $wpdb->get_results($query, ARRAY_A);
367
+
368
+ if($records and is_array($records)) {
369
+ $link_records = array();
370
+ foreach($records as $record) {
371
+ $link_records[$record['url']] = $record['conversions'];
372
+ }
373
+
374
+ return $link_records;
375
+ }
376
+ else {
377
+ return false;
378
+ }
379
+ }
380
+
381
+ public function split_test_chart_data($start_timestamp, $end_timestamp, $link_id, $title_only = false) {
382
+ global $wpdb, $prli_utils, $prli_link, $prli_link_meta, $prli_click;
383
+
384
+ $link = $prli_link->getOne($link_id);
385
+ $links = $this->get_split_report_links_array($link_id);
386
+ $goal_link_id = $prli_link_meta->get_link_meta($link_id, 'prli-split-test-goal-link', true);
387
+
388
+ $labels_array = $links;
389
+ $hits_array = $this->get_split_clicks($start_timestamp, $end_timestamp, $link_id);
390
+ $uniques_array = $this->get_split_clicks($start_timestamp, $end_timestamp, $link_id, true);
391
+
392
+ $hits = array();
393
+ $uniques = array();
394
+ for($i=0;$i<count($links);$i++) {
395
+ $hits[$i] = ((is_array($hits_array) and isset($hits_array[$links[$i]]) and !empty($hits_array[$links[$i]]))?$hits_array[$links[$i]]:0);
396
+ $uniques[$i] = ((is_array($uniques_array) and isset($uniques_array[$links[$i]]) and !empty($uniques_array[$links[$i]]))?$uniques_array[$links[$i]]:0);
397
+ }
398
+
399
+ if($title_only) {
400
+ return __("Pretty Links Pro: Split Report for", 'pretty-link')." ".stripslashes($link->name)." ".__("between", 'pretty-link')." ".date("Y-n-j",$start_timestamp).' '.__('and', 'pretty-link').' '.date("Y-n-j", $end_timestamp);
401
+ }
402
+
403
+ //Setup conversions
404
+ if(!empty($goal_link_id) and $goal_link_id) {
405
+ $conversions_array = $this->get_split_conversions($start_timestamp, $end_timestamp, $link_id, $goal_link_id);
406
+ $conversions = array();
407
+
408
+ for($i = 0; $i < count($links); $i++) {
409
+ $conversions[$i] = ((is_array($conversions_array) and isset($conversions_array[$links[$i]]) and !empty($conversions_array[$links[$i]]))?$conversions_array[$links[$i]]:0);
410
+ }
411
+
412
+ $chart_data = array('cols' => array(array("label" => __('Rotation', 'pretty-link'), 'type' => 'string'), array("label" => __('All Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Unique Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Conversions', 'pretty-link'), 'type' => 'number')));
413
+
414
+ foreach($labels_array as $key => $value) {
415
+ $chart_data['rows'][] = array('c' => array(array('v' => $value, 'f' => null), array('v' => (int)$hits[$key], 'f' => null), array('v' => (int)$uniques[$key], 'f' => null), array('v' => (int)$conversions[$key], 'f' => null)));
416
+ }
417
+ }
418
+ else { //Setup the clicks w/out conversions
419
+ $chart_data = array('cols' => array(array("label" => __('Rotation', 'pretty-link'), 'type' => 'string'), array("label" => __('All Clicks', 'pretty-link'), 'type' => 'number'), array("label" => __('Unique Clicks', 'pretty-link'), 'type' => 'number')));
420
+
421
+ foreach($labels_array as $key => $value) {
422
+ $chart_data['rows'][] = array('c' => array(array('v' => $value, 'f' => null), array('v' => (int)$hits[$key], 'f' => null), array('v' => (int)$uniques[$key], 'f' => null)));
423
+ }
424
+ }
425
+
426
+ return $chart_data;
427
+ }
428
+
429
+ private function common_report_vars() {
430
+ global $prli_siteurl, $prli_utils;
431
+
432
+ $params = $this->get_params_array();
433
+ $first_click = $prli_utils->getFirstClickDate();
434
+
435
+ // Adjust for the first click
436
+ if(isset($first_click)) {
437
+ $min_date = (int)((time()-$first_click)/60/60/24);
438
+
439
+ if($min_date < 30) {
440
+ $start_timestamp = $prli_utils->get_start_date($params,$min_date);
441
+ }
442
+ else {
443
+ $start_timestamp = $prli_utils->get_start_date($params,30);
444
+ }
445
+
446
+ $end_timestamp = $prli_utils->get_end_date($params);
447
+ }
448
+ else {
449
+ $min_date = 0;
450
+ $start_timestamp = time();
451
+ $end_timestamp = time();
452
+ }
453
+
454
+ return array(
455
+ 'id' => $params['id'],
456
+ 'first_click' => $first_click,
457
+ 'min_date' => ($min_date * -1),
458
+ 'start_timestamp' => $start_timestamp,
459
+ 'end_timestamp' => $end_timestamp
460
+ );
461
+ }
462
+
463
+ /* Add header to prli-custom-report page */
464
+ public function custom_report_vars() {
465
+ $vars = $this->common_report_vars();
466
+
467
+ extract($vars);
468
+
469
+ $report = $this->getOne($id);
470
+ $data = $this->setupClicksByLinkBarGraph($start_timestamp, $end_timestamp, $id);
471
+ $title = $this->setupClicksByLinkBarGraph($start_timestamp, $end_timestamp, $id, true);
472
+
473
+ return array_merge(
474
+ compact( 'title', 'data', 'report' ),
475
+ $vars
476
+ );
477
+ }
478
+
479
+ /* Add header to prli-split-test-report page */
480
+ public function split_test_report_vars() {
481
+ global $prli_link;
482
+
483
+ $vars = $this->common_report_vars();
484
+
485
+ extract($vars);
486
+
487
+ $link = $prli_link->getOne($id);
488
+ $data = $this->split_test_chart_data($start_timestamp, $end_timestamp, $id);
489
+ $title = $this->split_test_chart_data($start_timestamp, $end_timestamp, $id, true);
490
+
491
+ return array_merge(
492
+ compact( 'title', 'data', 'link' ),
493
+ $vars
494
+ );
495
+ }
496
+ }
497
+
pro/app/models/PlpUrlReplacement.php ADDED
@@ -0,0 +1,409 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpUrlReplacement {
5
+ public $post_urls_table_name;
6
+
7
+ public function __construct() {
8
+ global $wpdb;
9
+ $this->post_urls_table_name = "{$wpdb->prefix}prli_post_urls";
10
+ }
11
+
12
+ /** This will get all of the keywords to urls for the given post.
13
+ * This is also where our smart-caching will come into play.
14
+ */
15
+ public function get_post_urls_lookup($post_id) {
16
+ static $urls;
17
+
18
+ if(!isset($urls)) {
19
+ $urls = array();
20
+ }
21
+
22
+ if(!isset($urls[$post_id])) {
23
+ $index_keywords = get_option('plp_index_keywords', false);
24
+ if(empty($index_keywords)) { return $this->getURLToLinksArray(); }
25
+
26
+ global $wpdb, $prli_blogurl, $prli_link, $prli_link_meta;
27
+
28
+ $q = "
29
+ SELECT plm.meta_value AS replacement_url,
30
+ CONCAT(%s,li.slug) AS url
31
+ FROM {$prli_link->table_name} AS li
32
+ JOIN {$prli_link_meta->table_name} AS plm
33
+ ON li.id=plm.link_id
34
+ AND plm.meta_key='prli-url-replacements'
35
+ JOIN {$this->post_urls_table_name} AS pu
36
+ ON plm.id = pu.url_id
37
+ WHERE pu.post_id=%d
38
+ AND plm.meta_value <> %s
39
+ AND li.link_status='enabled'
40
+ ";
41
+
42
+ $struct = PrliUtils::get_permalink_pre_slug_uri();
43
+ $q = $wpdb->prepare($q, $prli_blogurl.$struct, $post_id, '');
44
+
45
+ $replacement_urls = $wpdb->get_results($q);
46
+
47
+ $urls[$post_id] = $this->format_urls_array($replacement_urls);
48
+ }
49
+
50
+ return $urls[$post_id];
51
+ }
52
+
53
+ public function getURLToLinksArray() {
54
+ static $urls;
55
+
56
+ if(!isset($urls)) {
57
+ global $wpdb, $prli_blogurl, $prli_link, $prli_link_meta;
58
+
59
+ $struct = PrliUtils::get_permalink_pre_slug_uri();
60
+ $query = "
61
+ SELECT plm.meta_value as replacement_url,
62
+ CONCAT(%s,li.slug) AS url
63
+ FROM {$prli_link->table_name} li
64
+ JOIN {$prli_link_meta->table_name} plm
65
+ ON li.id = plm.link_id
66
+ WHERE plm.meta_key='prli-url-replacements'
67
+ AND plm.meta_value <> %s
68
+ AND li.link_status='enabled'
69
+ ";
70
+
71
+ $query = $wpdb->prepare($query, $prli_blogurl . $struct, '');
72
+ $replacement_urls = $wpdb->get_results($query);
73
+
74
+ $urls = $this->format_urls_array($replacement_urls);
75
+ }
76
+
77
+ return $urls;
78
+ }
79
+
80
+ private function format_urls_array($replacement_urls) {
81
+ if(!is_array($replacement_urls) || empty($replacement_urls)) { return array(); }
82
+
83
+ $links_array = array();
84
+
85
+ foreach($replacement_urls as $replacement_url) {
86
+ if(isset($links_array[$replacement_url->replacement_url])) {
87
+ $links_array[$replacement_url->replacement_url][] = $replacement_url->url;
88
+ }
89
+ else {
90
+ $links_array[$replacement_url->replacement_url] = array($replacement_url->url);
91
+ }
92
+ }
93
+
94
+ return $links_array;
95
+ }
96
+
97
+ private function get_post_grouped_urls ($post_id) {
98
+ global $wpdb, $plp_options, $prli_link, $prli_link_meta;
99
+
100
+ $valid_types = $plp_options->autocreate_valid_types();
101
+ $valid_types = "'".implode("', '", $valid_types)."'";
102
+
103
+ $q = "
104
+ SELECT * FROM (
105
+ SELECT plm.meta_value AS url,
106
+ MIN(plm.id) AS id
107
+ FROM {$prli_link_meta->table_name} AS plm
108
+ JOIN {$wpdb->posts} AS p
109
+ ON p.ID=%d
110
+ LEFT JOIN {$wpdb->postmeta} AS pm
111
+ ON pm.post_id=p.ID
112
+ AND pm.meta_key='_plp_post_urls_updated_at'
113
+ WHERE plm.meta_key='prli-url-replacements'
114
+ AND p.post_status='publish'
115
+ AND p.post_type IN ({$valid_types})
116
+ AND (
117
+ pm.meta_value IS NULL
118
+ OR pm.meta_value < plm.created_at
119
+ )
120
+ GROUP BY plm.meta_value
121
+ ) AS u
122
+ ORDER BY CHAR_LENGTH(u.url) DESC, u.url ASC
123
+ ";
124
+ $q = $wpdb->prepare($q, $post_id);
125
+
126
+ $urls = $wpdb->get_results($q);
127
+
128
+ return $urls;
129
+ }
130
+
131
+ private function get_comment_grouped_urls ($comment_id) {
132
+ global $wpdb, $plp_options, $prli_link, $prli_link_meta;
133
+
134
+ $valid_types = $plp_options->autocreate_valid_types();
135
+ $valid_types = "'".implode("', '", $valid_types)."'";
136
+
137
+ $q = "
138
+ SELECT * FROM (
139
+ SELECT plm.meta_value AS url,
140
+ MIN(plm.id) AS id
141
+ FROM {$prli_link_meta->table_name} AS plm
142
+ JOIN {$wpdb->comments} AS c
143
+ ON c.comment_ID=%d
144
+ JOIN {$wpdb->posts} AS p
145
+ ON p.ID=c.comment_post_ID
146
+ LEFT JOIN {$wpdb->commentmeta} AS cm
147
+ ON cm.comment_id=c.comment_ID
148
+ AND cm.meta_key='_plp_comment_urls_updated_at'
149
+ WHERE plm.meta_key='prli-url-replacements'
150
+ AND c.comment_approved=1
151
+ AND p.post_status='publish'
152
+ AND p.post_type IN ({$valid_types})
153
+ AND (
154
+ cm.meta_value IS NULL
155
+ OR cm.meta_value < plm.created_at
156
+ )
157
+ GROUP BY plm.meta_value
158
+ ) AS u
159
+ ORDER BY CHAR_LENGTH(u.url) DESC, u.url ASC
160
+ ";
161
+ $q = $wpdb->prepare($q, $comment_id);
162
+
163
+ $urls = $wpdb->get_results($q);
164
+
165
+ return $urls;
166
+ }
167
+
168
+ public function index_post ($post_id) {
169
+ global $plp_options;
170
+ $urls = $this->get_post_grouped_urls($post_id);
171
+ $post_content = PrliUtils::get_post_content($post_id);
172
+ $this->index_content($post_id, $urls, $post_content);
173
+ update_post_meta($post_id, '_plp_post_urls_updated_at', PrliUtils::now());
174
+ }
175
+
176
+ public function index_comment ($comment_id) {
177
+ global $plp_options;
178
+ $urls = $this->get_comment_grouped_urls($comment_id);
179
+ $comment_content = get_comment_text($comment_id);
180
+ $comment = get_comment($comment_id);
181
+ $this->index_content($comment->comment_post_ID, $urls, $comment_content);
182
+ update_comment_meta($comment_id, '_plp_comment_urls_updated_at', PrliUtils::now());
183
+ }
184
+
185
+ private function index_content ($post_id, &$urls, &$content) {
186
+ $url_ids = array();
187
+
188
+ foreach($urls as $url) {
189
+ if(preg_match('!\b'.preg_quote($url->url,'!').'\b!i', $content)) {
190
+ $url_ids[] = $url->id;
191
+ }
192
+ }
193
+
194
+ // Add all keywords in one swath
195
+ return $this->add_post_urls($post_id, $url_ids);
196
+ }
197
+
198
+ private function add_post_urls ($post_id, $url_ids) {
199
+ global $wpdb;
200
+
201
+ if(empty($url_ids)) { return false; }
202
+
203
+ // We got a unique index folks so we just ignore dups yo
204
+ // But we just want to grab one random url to insert here
205
+ $q = "
206
+ INSERT IGNORE INTO {$this->post_urls_table_name}
207
+ (post_id, url_id)
208
+ VALUES
209
+ ";
210
+
211
+ $vals = array();
212
+ foreach($url_ids as $url_id) {
213
+ // Not sure how this would ever be un-true but let's make sure it doesn't happen
214
+ if($url_id > 0 && $post_id > 0) {
215
+ $vals[] = $wpdb->prepare("(%d, %d)", $post_id, $url_id);
216
+ }
217
+ }
218
+
219
+ // No values to insert? Let's bail.
220
+ if(empty($vals)) { return false; }
221
+
222
+ $q .= implode(',',$vals);
223
+
224
+ return $wpdb->query($q);
225
+ }
226
+
227
+ // SELECT posts where updated_at < than max link updated_at
228
+ public function get_indexable_posts ($max_count=100) {
229
+ global $wpdb, $plp_options, $prli_link, $prli_link_meta, $plp_keyword;
230
+
231
+ $plp_keyword->update_links_with_null_updated_at();
232
+
233
+ $valid_types = $plp_options->autocreate_valid_types();
234
+ $valid_types = "'".implode("', '", $valid_types)."'";
235
+
236
+ $q = "
237
+ SELECT max(plm.created_at)
238
+ FROM {$prli_link_meta->table_name} AS plm
239
+ WHERE plm.meta_key='prli-url-replacements'
240
+ ";
241
+ $max_updated_at = $wpdb->get_var($q);
242
+
243
+ // Order to get oldest / null entries updated first
244
+ $q = $wpdb->prepare("
245
+ SELECT ID
246
+ FROM {$wpdb->posts} AS p
247
+ LEFT JOIN {$wpdb->postmeta} AS pm
248
+ ON p.ID=pm.post_id
249
+ AND pm.meta_key='_plp_post_urls_updated_at'
250
+ WHERE p.post_status = 'publish'
251
+ AND p.post_type IN ({$valid_types})
252
+ AND (
253
+ pm.meta_value IS NULL
254
+ OR pm.meta_value < %s
255
+ )
256
+ ORDER BY pm.meta_value ASC,
257
+ p.post_date DESC
258
+ LIMIT %d
259
+ ",
260
+ $max_updated_at,
261
+ $max_count
262
+ );
263
+ $posts = $wpdb->get_col($q);
264
+
265
+ return $posts;
266
+ }
267
+
268
+ // SELECT posts where updated_at < than max link updated_at
269
+ public function get_indexable_comments ($max_count=100) {
270
+ global $wpdb, $plp_options, $prli_link, $prli_link_meta, $plp_keyword;
271
+
272
+ $plp_keyword->update_links_with_null_updated_at();
273
+
274
+ $valid_types = $plp_options->autocreate_valid_types();
275
+ $valid_types = "'".implode("', '", $valid_types)."'";
276
+
277
+ $q = "
278
+ SELECT max(plm.created_at)
279
+ FROM {$prli_link_meta->table_name} AS plm
280
+ WHERE plm.meta_key='prli-url-replacements'
281
+ ";
282
+ $max_updated_at = $wpdb->get_var($q);
283
+
284
+ // Order to get oldest / null entries updated first
285
+ $q = $wpdb->prepare("
286
+ SELECT c.comment_ID
287
+ FROM {$wpdb->comments} AS c
288
+ INNER JOIN {$wpdb->posts} AS p
289
+ ON c.comment_post_ID=p.ID
290
+ AND p.post_status = 'publish'
291
+ AND p.post_type IN ({$valid_types})
292
+ LEFT JOIN {$wpdb->commentmeta} AS cm
293
+ ON c.comment_ID=cm.comment_id
294
+ AND cm.meta_key='_plp_comment_urls_updated_at'
295
+ WHERE c.comment_approved=1
296
+ AND (
297
+ cm.meta_value IS NULL
298
+ OR cm.meta_value < %s
299
+ )
300
+ ORDER BY cm.meta_value ASC,c.comment_date DESC
301
+ LIMIT %d
302
+ ",
303
+ $max_updated_at,
304
+ $max_count
305
+ );
306
+ $comments = $wpdb->get_col($q);
307
+
308
+ return $comments;
309
+ }
310
+
311
+ // How many posts out of all are indexed
312
+ public function posts_indexed () {
313
+ global $wpdb, $prli_link, $plp_options, $prli_link_meta;
314
+
315
+ $valid_types = $plp_options->autocreate_valid_types();
316
+ $valid_types = "'".implode("', '", $valid_types)."'";
317
+
318
+ $q = "
319
+ SELECT max(plm.created_at)
320
+ FROM {$prli_link_meta->table_name} AS plm
321
+ WHERE plm.meta_key='prli-url-replacements'
322
+ ";
323
+ $max_updated_at = $wpdb->get_var($q);
324
+
325
+ // Num un-indexed posts
326
+ $q = $wpdb->prepare("
327
+ SELECT COUNT(*)
328
+ FROM {$wpdb->posts} AS p
329
+ LEFT JOIN {$wpdb->postmeta} AS pm
330
+ ON p.ID=pm.post_id
331
+ AND pm.meta_key='_plp_post_urls_updated_at'
332
+ WHERE p.post_status = 'publish'
333
+ AND p.post_type IN ({$valid_types})
334
+ AND (
335
+ pm.meta_value IS NULL
336
+ OR pm.meta_value < %s
337
+ )
338
+ ORDER BY pm.meta_value
339
+ ",
340
+ $max_updated_at
341
+ );
342
+ $unindexed = $wpdb->get_var($q);
343
+
344
+ $q = "
345
+ SELECT COUNT(*)
346
+ FROM {$wpdb->posts} AS p
347
+ WHERE p.post_status = 'publish'
348
+ AND p.post_type IN ({$valid_types})
349
+ ";
350
+ $total = $wpdb->get_var($q);
351
+
352
+ $indexed = ($total - $unindexed);
353
+
354
+ return (object)compact('total', 'indexed', 'unindexed');
355
+ }
356
+
357
+ // How many comments out of all are indexed
358
+ public function comments_indexed () {
359
+ global $wpdb, $prli_link, $plp_options, $prli_link_meta;
360
+
361
+ $valid_types = $plp_options->autocreate_valid_types();
362
+ $valid_types = "'".implode("', '", $valid_types)."'";
363
+
364
+ $q = "
365
+ SELECT max(plm.created_at)
366
+ FROM {$prli_link_meta->table_name} AS plm
367
+ WHERE plm.meta_key='prli-url-replacements'
368
+ ";
369
+ $max_updated_at = $wpdb->get_var($q);
370
+
371
+ // Num un-indexed posts
372
+ $q = $wpdb->prepare("
373
+ SELECT COUNT(*)
374
+ FROM {$wpdb->comments} AS c
375
+ INNER JOIN {$wpdb->posts} AS p
376
+ ON c.comment_post_ID=p.ID
377
+ AND p.post_status = 'publish'
378
+ AND p.post_type IN ({$valid_types})
379
+ LEFT JOIN {$wpdb->commentmeta} AS cm
380
+ ON c.comment_ID=cm.comment_id
381
+ AND cm.meta_key='_plp_comment_urls_updated_at'
382
+ WHERE c.comment_approved=1
383
+ AND (
384
+ cm.meta_value IS NULL
385
+ OR cm.meta_value < %s
386
+ )
387
+ ORDER BY cm.meta_value
388
+ ",
389
+ $max_updated_at
390
+ );
391
+ $unindexed = $wpdb->get_var($q);
392
+
393
+ $q = "
394
+ SELECT COUNT(*)
395
+ FROM {$wpdb->comments} AS c
396
+ INNER JOIN {$wpdb->posts} AS p
397
+ ON c.comment_post_ID=p.ID
398
+ AND p.post_status = 'publish'
399
+ AND p.post_type IN ({$valid_types})
400
+ WHERE c.comment_approved=1
401
+ ";
402
+ $total = $wpdb->get_var($q);
403
+
404
+ $indexed = ($total - $unindexed);
405
+
406
+ return (object)compact('total', 'indexed', 'unindexed');
407
+ }
408
+ }
409
+
pro/app/models/PlpUtils.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); }
3
+
4
+ class PlpUtils {
5
+ public static function sort_by_stringlen($word_array,$dir = 'ASC')
6
+ {
7
+ if( $dir == "ASC" ) {
8
+ uasort($word_array, 'PlpUtils::compare_stringlen_asc');
9
+ }
10
+ else if( $dir == "DESC" ) {
11
+ uasort($word_array, 'PlpUtils::compare_stringlen_desc');
12
+ }
13
+
14
+ return $word_array;
15
+ }
16
+
17
+ /**
18
+ * This function expects an array of weights in integer
19
+ * form [ 35, 25, 15, 50 ] that add up to 100.
20
+ */
21
+ public static function w_rand($weights) {
22
+ $r = mt_rand(1,1000);
23
+ $offset = 0;
24
+ foreach ($weights as $k => $w) {
25
+ $offset += $w*10;
26
+ if ($r <= $offset) { return $k; }
27
+ }
28
+ }
29
+
30
+ public static function ga_installed() {
31
+ if(!function_exists('is_plugin_active')) {
32
+ require(ABSPATH . '/wp-admin/includes/plugin.php');
33
+ }
34
+
35
+ if(is_plugin_active('google-analyticator/google-analyticator.php')) {
36
+ return array('name' => __('Google Analyticator', 'pretty-link'), 'slug' => 'google-analyticator');
37
+ }
38
+ // DEPRECATED support on Jan 2020
39
+ // else if(is_plugin_active('google-analytics-for-wordpress/googleanalytics.php')) {
40
+ // return array('name' => __('Google Analytics by MonsterInsights', 'pretty-link'), 'slug' => 'google-analytics-for-wordpress');
41
+ // }
42
+ // else if(is_plugin_active('googleanalytics/googleanalytics.php')) {
43
+ // return array('name' => __('Google Analytics', 'pretty-link'), 'slug' => 'google-analytics');
44
+ // }
45
+ else {
46
+ return false;
47
+ }
48
+ }
49
+
50
+ public static function ga_tracking_code($ga_plugin_slug) {
51
+ ob_start();
52
+
53
+ if($ga_plugin_slug == 'google-analyticator' && function_exists('add_google_analytics')) {
54
+ add_google_analytics();
55
+ }
56
+ // DEPRECATED support on Jan 2020
57
+ // elseif($ga_plugin_slug == 'google-analytics-for-wordpress' && class_exists('Yoast_GA_JS') && class_exists('Yoast_GA_Options') && class_exists('Yoast_GA_Universal')) {
58
+ // //Working as of vs 5.4.9 of the GA plugin by MonsterInsights -- they keep changing this though :(
59
+ // $yoast_ops = Yoast_GA_Options::instance()->options;
60
+
61
+ // if(isset($yoast_ops->options['enable_universal']) && $yoast_ops->options['enable_universal'] == 1) {
62
+ // $tracking = new Yoast_GA_Universal;
63
+ // } else {
64
+ // $tracking = new Yoast_GA_JS;
65
+ // }
66
+
67
+ // $tracking->tracking();
68
+ // }
69
+ // elseif($ga_plugin_slug == 'google-analytics' && class_exists('Ga_Frontend')) {
70
+ // Ga_Frontend::googleanalytics();
71
+ // }
72
+
73
+ return ob_get_clean();
74
+ }
75
+
76
+ // Utility functions not part of this class //
77
+ public static function compare_stringlen_asc($val_1, $val_2) {
78
+ // initialize the return value to zero
79
+ $retVal = 0;
80
+
81
+ // compare lengths
82
+ $firstVal = strlen($val_1);
83
+ $secondVal = strlen($val_2);
84
+
85
+ if($firstVal > $secondVal) {
86
+ $retVal = 1;
87
+ }
88
+ else if($firstVal < $secondVal) {
89
+ $retVal = -1;
90
+ }
91
+
92
+ return $retVal;
93
+ }
94
+
95
+ public static function compare_stringlen_desc($val_1, $val_2) {
96
+ // initialize the return value to zero
97
+ $retVal = 0;
98
+
99
+ // compare lengths
100
+ $firstVal = strlen($val_1);
101
+ $secondVal = strlen($val_2);
102
+
103
+ if($firstVal > $secondVal) {
104
+ $retVal = -1;
105
+ }
106
+ else if($firstVal < $secondVal) {
107
+ $retVal = 1;
108
+ }
109
+
110
+ return $retVal;
111
+ }
112
+
113
+ public static function locate_by_ip($ip=null, $source='caseproof') {
114
+ global $prli_utils;
115
+ $ip = (is_null($ip)?$prli_utils->get_current_client_ip():$ip);
116
+
117
+ if(!self::is_ip($ip)) { return false; }
118
+
119
+ $lockey = 'pl_locate_by_ip_' . md5($ip.$source);
120
+ $loc = get_transient($lockey);
121
+
122
+ if(false===$loc) {
123
+ if($source=='caseproof') {
124
+ $url = "https://cspf-locate.herokuapp.com?ip={$ip}";
125
+ $cindex = 'country_code';
126
+ }
127
+ elseif($source=='freegeoip') {
128
+ $url = "https://freegeoip.net/json/{$ip}";
129
+ $cindex = 'country_code';
130
+ }
131
+ else { // geoplugin
132
+ $url = "http://www.geoplugin.net/json.gp?ip={$ip}";
133
+ $cindex = 'geoplugin_countryCode';
134
+ }
135
+
136
+ $res = wp_remote_get($url);
137
+ if(is_wp_error($res)) { return ''; }
138
+ $obj = json_decode($res['body']);
139
+ $country = (isset($obj->{$cindex})?$obj->{$cindex}:'');
140
+
141
+ $loc = (object)compact('country');
142
+ set_transient($lockey,$loc,DAY_IN_SECONDS);
143
+ }
144
+
145
+ return $loc;
146
+ }
147
+
148
+ public static function is_ip($ip, $version='any') {
149
+ $ipv4_pattern = '#^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$#i';
150
+ $ipv6_pattern = '/^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})\z/i';
151
+
152
+ return (
153
+ ($version==4 && preg_match($ipv4_pattern,$ip)) ||
154
+ ($version==6 && preg_match($ipv6_pattern,$ip)) ||
155
+ ($version=='any' && (preg_match($ipv4_pattern,$ip) || preg_match($ipv6_pattern,$ip)))
156
+ );
157
+ }
158
+
159
+ public static function country_by_ip($ip=null, $source='geoplugin') {
160
+ return (($loc = self::locate_by_ip()) ? $loc->country : '' );
161
+ }
162
+
163
+ public static function base36_encode($base10) {
164
+ return base_convert($base10, 10, 36);
165
+ }
166
+
167
+ public static function base36_decode($base36) {
168
+ return base_convert($base36, 36, 10);
169
+ }
170
+
171
+ public static function is_link_expired($link_id) {
172
+ global $prli_link, $prli_link_meta;
173
+
174
+ $expire_enabled = $prli_link_meta->get_link_meta($link_id, 'enable_expire', true);
175
+
176
+ if(!empty($expire_enabled)) {
177
+ $expire_type = $prli_link_meta->get_link_meta($link_id, 'expire_type', true);
178
+ $expired = false;
179
+
180
+ if($expire_type=='date') {
181
+ $expire_date = $prli_link_meta->get_link_meta($link_id, 'expire_date', true);
182
+ $now_ts = strtotime(gmdate('c')); //Make sure it's UTC
183
+ $expire_ts = strtotime($expire_date); // Expire AFTER the date
184
+ $expired = ($now_ts > $expire_ts);
185
+ }
186
+ else if($expire_type=='clicks') {
187
+ $expire_clicks = $prli_link_meta->get_link_meta($link_id, 'expire_clicks', true);
188
+ $link = $prli_link->getOne($link_id, OBJECT, true);
189
+ $num_clicks = $link->uniques;
190
+ //echo "Num Clicks: {$num_clicks} / Expire Clicks: {$expire_clicks}"; exit;
191
+ $expired = ($num_clicks >= $expire_clicks);
192
+ }
193
+
194
+ if($expired) {
195
+ $enable_expired_url = $prli_link_meta->get_link_meta($link_id, 'enable_expired_url', true);
196
+ $expired_url = $prli_link_meta->get_link_meta($link_id, 'expired_url', true);
197
+
198
+ if(!empty($enable_expired_url)) {
199
+ return $expired_url;
200
+ }
201
+ else {
202
+ return 404;
203
+ }
204
+ }
205
+ }
206
+
207
+ return false;
208
+ }
209
+
210
+ public static function is_link_time_redirect_active($link_id) {
211
+ global $prli_link_meta;
212
+
213
+ $time_urls = $prli_link_meta->get_link_meta($link_id, 'time_url');
214
+ $time_starts = $prli_link_meta->get_link_meta($link_id, 'time_start');
215
+ $time_ends = $prli_link_meta->get_link_meta($link_id, 'time_end');
216
+
217
+ $now = time();
218
+ foreach($time_urls as $i => $time_url) {
219
+ $time_start = strtotime($time_starts[$i]);
220
+ $time_end = strtotime($time_ends[$i]);
221
+ if($time_start <= $now && $time_end >= $now) {
222
+ return $time_url;
223
+ }
224
+ }
225
+
226
+ return false;
227
+ }
228
+
229
+ /** Get link categories
230
+ *
231
+ * @param $link_id The id of the link we want to get categories for
232
+ *
233
+ * @return Array of strings -- category slugs
234
+ */
235
+ public static function get_link_categories($link_id) {
236
+ return self::get_link_terms($link_id, PlpLinkCategoriesController::$ctax);
237
+ }
238
+
239
+ /** Get link tags
240
+ *
241
+ * @param $link_id The id of the link we want to get tags for
242
+ *
243
+ * @return Array of strings -- tag slugs
244
+ */
245
+ public static function get_link_tags($link_id) {
246
+ return self::get_link_terms($link_id, PlpLinkTagsController::$ctax);
247
+ }
248
+
249
+ /** Get link terms
250
+ *
251
+ * @param $link_id The id of the link we want to get terms for
252
+ * @param $taxonomy The name of the taxonomy
253
+ *
254
+ * @return Array of strings -- term slugs
255
+ */
256
+ private static function get_link_terms($link_id, $taxonomy) {
257
+ global $prli_link;
258
+
259
+ $link = $prli_link->getOne($link_id);
260
+ $terms = wp_get_object_terms(array($link->link_cpt_id), array($taxonomy));
261
+
262
+ if(is_wp_error($terms)) {
263
+ error_log('** Error in PlpUtils::get_link_terms: '. $terms->get_error_message());
264
+ $terms = array();
265
+ }
266
+
267
+ return array_map(
268
+ function ($term) {
269
+ return $term->slug;
270
+ },
271
+ $terms
272
+ );
273
+ }
274
+
275
+ } //End class
276
+
pro/app/models/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/views/import-export/form.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
+
3
+ <div class="wrap">
4
+ <?php PrliAppHelper::page_title(__('Import / Export Links', 'pretty-link')); ?>
5
+ <table class="form-table">
6
+ <tbody>
7
+ <tr>
8
+ <th scope="row">
9
+ <?php esc_html_e('Export Pretty Links', 'pretty-link'); ?>
10
+ <?php PrliAppHelper::info_tooltip(
11
+ 'plp-export-links',
12
+ esc_html__('Export Pretty Links', 'pretty-link'),
13
+ esc_html__('Export Links to a CSV File', 'pretty-link')
14
+ ); ?>
15
+ </th>
16
+ <td>
17
+ <a href="<?php echo esc_url(admin_url('admin-ajax.php?action=plp-export-links')); ?>" class="button button-primary"><?php esc_html_e('Export', 'pretty-link'); ?></a>
18
+ </td>
19
+ </tr>
20
+ <tr>
21
+ <th scope="row">
22
+ <?php esc_html_e('Import Pretty Links', 'pretty-link'); ?>
23
+ <?php PrliAppHelper::info_tooltip(
24
+ 'plp-import-links',
25
+ esc_html__('Import Pretty Links', 'pretty-link'),
26
+ sprintf(
27
+ esc_html__('There are two ways to import a file.%1$s%1$s1) Importing to update existing links and%1$s%1$s2) Importing to generate new links. When Importing to generate new links, you must delete the "id" column from the CSV before importing. If the "id" column is present, Pretty Links Pro will attempt to update existing links.', 'pretty-link'),
28
+ '<br>'
29
+ )
30
+ ); ?>
31
+ </th>
32
+ <td>
33
+ <form enctype="multipart/form-data" action="<?php echo esc_url(str_replace( '%7E', '~', $_SERVER['REQUEST_URI'])); ?>" method="POST">
34
+ <?php wp_nonce_field('update-options'); ?>
35
+ <input type="hidden" name="action" value="import">
36
+ <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
37
+ <input name="importedfile" type="file" />
38
+ <br/>
39
+ <input type="submit" class="button button-primary" value="<?php esc_attr_e('Import', 'pretty-link'); ?>" />
40
+ <?php PrliAppHelper::info_tooltip(
41
+ 'plp-import-links-select-file',
42
+ esc_html__('Links Import File', 'pretty-link'),
43
+ esc_html__('Select a file that has been formatted as a Pretty Link CSV import file and click "Import"', 'pretty-link')
44
+ ); ?>
45
+ </form>
46
+ </td>
47
+ </tr>
48
+ </tbody>
49
+ </table>
50
+
51
+ <p><a href="https://prettylinks.com/plp/import-export/um/importing-and-exporting-your-links" class="button button-primary"><?php esc_html_e('Import/Export Help', 'pretty-link'); ?></a></p>
52
+ </div>
pro/app/views/import-export/import-error.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
+
3
+ <div class="wrap">
4
+ <?php PrliAppHelper::page_title(__('Import Error', 'pretty-link')); ?>
5
+ <div class="error inline">
6
+ <p>
7
+ <?php echo esc_html($error); ?>
8
+ <a href="<?php echo esc_url(admin_url('edit.php?post_type=' . PrliLink::$cpt . '&page=plp-import-export')); ?>"><?php esc_html_e('&larr; Go back', 'pretty-link'); ?></a>
9
+ </p>
10
+ </div>
11
+ </div>
pro/app/views/import-export/import.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
+
3
+ <div class="wrap">
4
+ <?php PrliAppHelper::page_title(__('Import Results', 'pretty-link')); ?>
5
+ <p><?php echo esc_html(sprintf(__('Total Rows: %s', 'pretty-link'), number_format_i18n($total_row_count))); ?></p>
6
+
7
+ <p><?php echo esc_html(sprintf(__('%s Pretty Links were Successfully Created', 'pretty-link'), number_format_i18n($successful_create_count))); ?></p>
8
+ <p><?php echo esc_html(sprintf(__('%s Pretty Links were Successfully Updated', 'pretty-link'), number_format_i18n($successful_update_count))); ?></p>
9
+
10
+ <?php
11
+ if(count($creation_errors) > 0) {
12
+ ?>
13
+ <p><?php echo esc_html(sprintf(__('Pretty Links were unable to be Created: %s', 'pretty-link'), number_format_i18n(count($creation_errors)))); ?></p>
14
+ <?php
15
+ foreach($creation_errors as $creation_error) {
16
+ ?>
17
+ <p class="wp-error"><?php echo esc_html(sprintf(__('Error(s) for Pretty Link with Slug: %s', 'pretty-link'), $creation_error['slug'])); ?><br/>
18
+ <?php
19
+ foreach( $creation_error['errors'] as $error ) {
20
+ ?>
21
+ &nbsp;&nbsp;&nbsp;&nbsp;<?php echo esc_html($error); ?><br/>
22
+ <?php
23
+ }
24
+ ?>
25
+ </p>
26
+ <?php
27
+ }
28
+ }
29
+
30
+ if(count($update_errors) > 0) {
31
+ ?>
32
+ <p><?php echo esc_html(sprintf(__('Pretty Links were unable to be Updated: %s', 'pretty-link'), number_format_i18n(count($update_errors)))); ?></p>
33
+ <?php
34
+ foreach($update_errors as $update_error) {
35
+ ?>
36
+ <p class="wp-error"><?php echo esc_html(sprintf(__('Error(s) for Pretty Link with id: %s', 'pretty-link'), $update_error['id'])); ?><br/>
37
+ <?php
38
+ foreach( $update_error['errors'] as $error ) {
39
+ ?>
40
+ &nbsp;&nbsp;&nbsp;&nbsp;<?php echo esc_html($error); ?><br/>
41
+ <?php
42
+ }
43
+ ?>
44
+ </p>
45
+ <?php
46
+ }
47
+ }
48
+ ?>
49
+
50
+ </div>
51
+
pro/app/views/import-export/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/views/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /* Silence will fall */ ?>
2
+
pro/app/views/links/bulk-edit.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!defined('ABSPATH'))
3
+ die('You are not allowed to call this page directly.');
4
+ ?>
5
+ <div class="inline-edit-group advanced-link-options">
6
+ <h4><?php esc_html_e('Advanced Link Options', 'pretty-link'); ?></h4>
7
+ <div id="prli_google_analytics" style="display: none;">
8
+ <?php
9
+ if($ga_info = PlpUtils::ga_installed()):
10
+ PrliLinksHelper::bulk_action_checkbox_dropdown('bu[google_tracking]', __('Google Analytics', 'pretty-link'), 'bulk-edit-select'); ?>
11
+ <?php endif; ?>
12
+ </div>
13
+ </div>
14
+ <?php /*
15
+ <div class="inline-edit-group keyword-replacements">
16
+ <?php global $plp_options; ?>
17
+ <?php if( $plp_options->keyword_replacement_is_on ): ?>
18
+ <h4><?php esc_html_e('Keyword Replacements', 'pretty-link'); ?></h4>
19
+ <?php global $plp_options; ?>
20
+ <input type="text" name="bu[keywords]" class="bulk-edit-text" />
21
+ <br/>
22
+ <h4><?php esc_html_e('URL Replacements', 'pretty-link'); ?></h4>
23
+ <input type="text" name="bu[url_replacements]" class="bulk-edit-text" />
24
+ <br/>
25
+ <?php endif; ?>
26
+ <div id="prli_time_delay" style="display: none;">
27
+ <h4><?php esc_html_e('Redirect Delay', 'pretty-link'); ?></h4>
28
+ <input type="text" name="delay" value="0" />
29
+ </div>
30
+ </div>
31
+ */ ?>
pro/app/views/links/cloaked-redirect.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <title><?php echo esc_html(stripslashes($pretty_link->name)); ?></title>
6
+
7
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
8
+ <meta name="description" content="<?php echo esc_attr(stripslashes($pretty_link->description)); ?>" />
9
+ <meta name="robots" content="noindex" />
10
+
11
+ <?php wp_print_styles('prli-cloaked-redirect'); ?>
12
+
13
+ <?php if(!empty($google_tracking) && $google_tracking && ($ga_info = PlpUtils::ga_installed())) { echo PlpUtils::ga_tracking_code($ga_info['slug']); } ?>
14
+
15
+ <?php do_action('prli-redirect-header'); ?>
16
+ </head>
17
+ <body>
18
+ <iframe src="<?php echo esc_url($pretty_link_url.$param_string); ?>">
19
+ <?php esc_html_e('Your browser does not support frames.', 'pretty-link'); ?> Click <a href="<?php echo esc_url($pretty_link_url.$param_string); ?>">here</a> to view the page.
20
+ </iframe>
21
+ </body>
22
+ </html>
pro/app/views/links/form.php ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if(!defined('ABSPATH')) { die('You are not allowed to call this page directly.'); } ?>
2
+
3
+ <table class="form-table">
4
+ <tr>
5
+ <th scope="row">
6
+ <?php esc_html_e('Expire', 'pretty-link'); ?>
7
+ <?php PrliAppHelper::info_tooltip(
8
+ 'plp-expire',
9
+ esc_html__('Expire Link', 'pretty-link'),
10
+ esc_html__('Set this link to expire after a specific date or number of clicks.', 'pretty-link')
11
+ ); ?>
12
+ </th>
13
+ <td>
14
+ <input class="prli-toggle-checkbox" data-box="plp-expire" type="checkbox" name="enable_expire" <?php checked($enable_expire != 0); ?> />
15
+ </td>
16
+ </tr>
17
+ </table>
18
+ <div class="prli-sub-box plp-expire">
19
+ <div class="prli-arrow prli-gray prli-up prli-sub-box-arrow"> </div>
20
+ <table class="form-table">
21
+ <tr>
22
+ <th scope="row">
23
+ <?php esc_html_e('Expire After', 'pretty-link'); ?>
24
+ <?php PrliAppHelper::info_tooltip(
25
+ 'plp-expire-type',
26
+ esc_html__('Expiration Type', 'pretty-link'),
27
+ sprintf(
28
+ // translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
29
+ esc_html__('Select the type of expiration you want for this link.%1$s%1$s%2$sDate%3$s Select this option if you\'d like to expire your link after a certain date.%1%s%1$s%2$sClicks%3$s: Select this option to expire this link after it has been clicked a specific number of times.', 'pretty-link'),
30
+ '<br>',
31
+ '<b>',
32
+ '</b>'
33
+ )
34
+ ); ?>
35
+ </th>
36
+ <td>
37
+ <select id="plp_expire_type" name="expire_type" class="prli-toggle-select" data-date-box="plp-date-expire" data-clicks-box="plp-clicks-expire">
38
+ <option value="date" <?php selected($expire_type, 'date'); ?>><?php esc_html_e('Date', 'pretty-link'); ?></option>
39
+ <option value="clicks" <?php selected($expire_type, 'clicks'); ?>><?php esc_html_e('Clicks', 'pretty-link'); ?></option>
40
+ </select>
41
+ </td>
42
+ </tr>
43
+ </table>
44
+ <div class="prli-sub-box-white plp-clicks-expire">
45
+ <div class="prli-arrow prli-white prli-up prli-sub-box-arrow"> </div>
46
+ <table class="form-table">
47
+ <tr>
48
+ <th scope="row">
49
+ <?php esc_html_e('Clicks', 'pretty-link'); ?>
50
+ <?php PrliAppHelper::info_tooltip(
51
+ 'plp-clicks-expire',
52
+ esc_html__('Number of Clicks', 'pretty-link'),
53
+ sprintf(
54
+ // translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
55
+ esc_html__('Enter the number of times this link can be clicked before it expires.%1$s%1$s%2$sNote: Expirations based on clicks wouldn\'t work properly if you had tracking turned off for this link so as long as this is set to Clicks, Pretty Link will ensure tracking is turned on for this link as well.%3$s', 'pretty-link'),
56
+ '<br>',
57
+ '<b>',
58
+ '</b>'
59
+ )
60
+ ); ?>
61
+ </th>
62
+ <td>
63
+ <input type="number" name="expire_clicks" class="small-text" value="<?php echo esc_attr($expire_clicks); ?>" />
64
+ </td>
65
+ </tr>
66
+ </table>
67
+ </div>
68
+ <div class="prli-sub-box-white plp-date-expire">
69
+ <div class="prli-arrow prli-white prli-up prli-sub-box-arrow"> </div>
70
+ <table class="form-table">
71
+ <tr>
72
+ <th scope="row">
73
+ <?php esc_html_e('Date', 'pretty-link'); ?>
74
+ <?php PrliAppHelper::info_tooltip(
75
+ 'plp-expire-date',
76
+ esc_html__('Expiration Date', 'pretty-link'),
77
+ esc_html__('Enter a date here in the format YYYY-MM-DD to set when this link should expire.', 'pretty-link')
78
+ ); ?>
79
+ </th>
80
+ <td>
81
+ <input type="text" class="prli-date-picker regular-text" name="expire_date" value="<?php echo esc_attr($expire_date); ?>" />
82
+ </td>
83
+ </tr>
84
+ </table>
85
+ </div>
86
+
87
+
88
+ <table class="form-table">
89
+ <tr>
90
+ <th scope="row">
91
+ <?php esc_html_e('Expired Redirect', 'pretty-link'); ?>
92
+ <?php PrliAppHelper::info_tooltip(
93
+ 'plp-enable-expired-url',
94
+ esc_html__('Redirect to URL when Expired', 'pretty-link'),
95
+ sprintf(
96
+ // translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
97
+ esc_html__('When this link expires, do you want to redirect to a specific URL. You can use this to redirect to a page you\'ve setup to indicate that the link is expired.%1$s%1$s%2$sNote: If this is not set the link will throw a 404 error when expired%3$s.', 'pretty-link'),
98
+ '<br>',
99
+ '<b>',
100
+ '</b>'
101
+ )
102
+ ); ?>
103
+ </th>
104
+ <td>
105
+ <input class="prli-toggle-checkbox" data-box="plp-expired-url" type="checkbox" name="enable_expired_url" <?php checked($enable_expired_url != 0); ?> />
106
+ </td>
107
+ </tr>
108
+ </table>
109
+ <div class="prli-sub-box-white plp-expired-url">
110
+ <div class="prli-arrow prli-white prli-up prli-sub-box-arrow"> </div>
111
+ <table class="form-table">
112
+ <tr>
113
+ <th scope="row">
114
+ <?php esc_html_e('URL', 'pretty-link'); ?>
115
+ <?php PrliAppHelper::info_tooltip(
116
+ 'plp-expired-url',
117
+ esc_html__('Expired URL', 'pretty-link'),
118
+ esc_html__('This is the URL that this link will redirect to after the expiration date above.', 'pretty-link')
119
+ ); ?>
120
+ </th>
121
+ <td>
122
+ <input type="text" name="expired_url" class="large-text" value="<?php echo esc_attr($expired_url); ?>" />
123
+ </td>
124
+ </tr>
125
+ </table>
126
+ </div>
127
+ </div>
128
+
129
+ <?php if( $plp_options->keyword_replacement_is_on ): ?>
130
+ <table class="form-table">
131
+ <tr>
132
+ <th scope="row">
133
+ <?php esc_html_e('Keywords', 'pretty-link'); ?>
134
+ <?php PrliAppHelper::info_tooltip(
135
+ 'prli-link-pro-options-keywords',
136
+ esc_html__('Auto-Replace Keywords', 'pretty-link'),
137
+ esc_html__('Enter a comma separated list of keywords / keyword phrases that you\'d like to replace with this link in your Posts &amp; Pages.', 'pretty-link')); ?>
138
+ </th>
139
+ <td>
140
+ <input type="text" name="keywords" class="large-text" value="<?php echo esc_attr($keywords); ?>" />
141
+ </td>
142
+ </tr>
143
+ <tr>
144
+ <th scope="row">
145
+ <?php esc_html_e('URL Replacements', 'pretty-link'); ?>
146
+ <?php PrliAppHelper::info_tooltip(
147
+ 'prli-link-pro-options-url-replacements',
148
+ esc_html__('Auto-Replace URLs', 'pretty-link'),
149
+ sprintf(
150
+ // translators: %1$s: open code tag, %2$s: close code tag
151
+ esc_html__('Enter a comma separated list of the URLs that you\'d like to replace with this Pretty Link in your Posts &amp; Pages. These must be formatted as URLs for example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s', 'pretty-link'),
152
+ '<code>',
153
+ '</code>'
154
+ )
155
+ ); ?>
156
+ </th>
157
+ <td>
158
+ <input type="text" name="url_replacements" class="large-text" value="<?php echo esc_attr($url_replacements); ?>" />
159
+ </td>
160
+ </tr>
161
+ </table>
162
+ <?php endif; ?>
163
+
164
+ <table class="form-table">
165
+ <tr>
166
+ <th scope="row">
167
+ <?php esc_html_e('Head Scripts', 'pretty-link'); ?>
168
+ <?php PrliAppHelper::info_tooltip(
169
+ 'prli-link-pro-options-head-scripts',
170
+ esc_html__('Head Scripts', 'pretty-link'),
171
+ sprintf(
172
+ // translators: %1$s: br tag, %2$s: open b tag, %3$s close b tag
173
+ esc_html__('Useful for adding Google Analytics tracking, Facebook retargeting pixels, or any other kind of tracking script to the HTML head for this pretty link.%1$s%1$sThese scripts will be in addition to any global one\'s you\'ve defined in the options.%1$s%1$s%2$sNOTE:%3$s This does NOT work with 301, 302 and 307 type redirects.', 'pretty-link'),
174
+ '<br>',
175
+ '<b>',
176
+ '</b>'
177
+ )
178
+ ); ?>
179
+ </th>
180
+ <td>
181
+ <textarea name="head-scripts" class="large-text"><?php echo esc_textarea($head_scripts); ?></textarea>
182
+ </td>
183
+ </tr>
184
+ </table>
185
+
186
+ <table class="form-table">
187
+ <tr>
188
+ <th scope="row">
189
+ <?php esc_html_e('Dynamic Redirection', 'pretty-link'); ?>
190
+ <?php PrliAppHelper::info_tooltip(
191
+ 'prli-link-pro-options-dynamic-redirection-options',
192
+ esc_html__('Dynamic Redirection Options', 'pretty-link'),
193
+ esc_html__('These powerful options are available to give you dynamic control over redirection for this pretty link.', 'pretty-link')
194
+ ); ?>
195
+ </th>
196
+ <td>
197
+ <select id="plp_dynamic_redirection" name="dynamic_redirection" class="prli-toggle-select" data-rotate-box="prli-link-rotate" data-geo-box="prli-link-geo" data-tech-box="prli-link-tech" data-time-box="prli-link-time">
198
+ <option value="none" <?php selected($dynamic_redirection, 'none'); ?>><?php esc_html_e('None', 'pretty-link'); ?></option>
199
+ <option value="rotate" <?php selected($dynamic_redirection, 'rotate'); ?>><?php esc_html_e('Rotation', 'pretty-link'); ?></option>
200
+ <option value="geo" <?php selected($dynamic_redirection, 'geo'); ?>><?php esc_html_e('Geographic', 'pretty-link'); ?></option>
201
+ <option value="tech" <?php selected($dynamic_redirection, 'tech'); ?>><?php esc_html_e('Technology', 'pretty-link'); ?></option>
202
+ <option value="time" <?php selected($dynamic_redirection, 'time'); ?>><?php esc_html_e('Time', 'pretty-link'); ?></option>
203
+ </select>
204
+ </td>
205
+ </tr>
206
+ </table>
207
+
208
+ <div class="prli-sub-box prli-link-rotate">
209
+ <div class="prli-arrow prli-gray prli-up prli-sub-box-arrow"> </div>
210
+ <h3>
211
+ <?php esc_html_e('Target URL Rotations', 'pretty-link'); ?>
212
+ <?php PrliAppHelper::info_tooltip(
213
+ 'prli-link-pro-target-url-rotations',
214
+ esc_html__('Target URL Rotations', 'pretty-link'),
215
+ sprintf(
216
+ // translators: %1$s: open code tag, %2$s: close code tag
217
+ esc_html__('Enter the Target URLs that you\'d like to rotate through when this Pretty Link is Clicked. These must be formatted as URLs example: %1$shttp://example.com%2$s or %1$shttp://example.com?product_id=53%2$s', 'pretty-link'),
218
+ '<code>',
219
+ '</code>'
220
+ )
221
+ ); ?>
222
+ </h3>
223
+ <ol id="prli_link_rotations">
224
+ <li>
225
+ <input readonly="true" type="text" class="regular-text" value="<?php echo (!empty($target_url)?esc_attr($target_url):esc_attr__('Target URL (above)', 'pretty-link')); ?>" />
226
+ <?php esc_html_e('weight:', 'pretty-link'); ?>
227
+ <?php PlpLinksHelper::rotation_weight_dropdown((($target_url_weight == 0 || !empty($target_url_weight))?$target_url_weight:'100'),'target_url_weight'); ?>
228
+ </li>
229
+ <?php
230
+ for($i=0;$i<count($url_rotations);$i++) {
231
+ $rotation = ((isset($url_rotations[$i]) && !empty($url_rotations[$i]))?$url_rotations[$i]:'');
232
+ $weight = (isset($url_rotation_weights[$i])?$url_rotation_weights[$i]:0);
233
+ PlpLinksHelper::rotation_row($rotation, $weight, 'url_rotations[]', 'url_rotation_weights[]');
234
+ }
235
+ ?>
236
+ </ol>
237
+ <div><a id="prli_add_link_rotation" href=""><?php esc_html_e('Add Link Rotation', 'pretty-link'); ?></a></div>
238
+
239
+ <table class="form-table">
240
+ <tr>
241
+ <th scope="row">
242
+ <?php esc_html_e('Split Test', 'pretty-link'); ?>
243
+ <?php PrliAppHelper::info_tooltip(
244
+ 'prli-link-pro-split-test',
245
+ esc_html__('Split Test This Link', 'pretty-link'),
246
+ esc_html__('Split testing will enable you to track the effectiveness of several links against each other. This works best when you have multiple link rotation URLs entered.', 'pretty-link')
247
+ ); ?>
248
+ </th>
249
+ <td>
250
+ <input class="prli-toggle-checkbox" data-box="p