The Events Calendar - Version 4.9.8

Version Description

Download this release

Release Info

Developer ModernTribe
Plugin Icon The Events Calendar
Version 4.9.8
Comparing to
See all releases

Code changes from version 4.9.7 to 4.9.8

Files changed (147) hide show
  1. common/lang/tribe-common-de_DE.mo +0 -0
  2. common/lang/tribe-common.pot +36 -32
  3. common/src/Tribe/Assets.php +21 -3
  4. common/src/Tribe/Field.php +7 -0
  5. common/src/Tribe/Image/Uploader.php +13 -0
  6. common/src/Tribe/Log.php +3 -0
  7. common/src/Tribe/Log/Action_Logger.php +125 -0
  8. common/src/Tribe/Log/Canonical_Formatter.php +101 -0
  9. common/src/Tribe/Log/Monolog_Logger.php +54 -0
  10. common/src/Tribe/Log/README.md +154 -0
  11. common/src/Tribe/Log/Service_Provider.php +148 -0
  12. common/src/Tribe/Main.php +2 -13
  13. common/src/Tribe/Process/Handler.php +40 -0
  14. common/src/Tribe/Process/Post_Thumbnail_Setter.php +48 -2
  15. common/src/Tribe/Service_Providers/Tooltip.php +10 -2
  16. common/src/Tribe/Utils/Collection_Interface.php +1 -1
  17. common/src/Tribe/Utils/Lazy_Collection.php +9 -0
  18. common/src/Tribe/Utils/Lazy_Events.php +168 -0
  19. common/src/Tribe/Utils/Lazy_String.php +141 -0
  20. common/src/Tribe/Utils/Post_Thumbnail.php +61 -8
  21. common/src/resources/css/tribe-common-admin.css +109 -102
  22. common/src/resources/css/tribe-common-admin.min.css +1 -1
  23. common/src/resources/images/mascot.png +0 -0
  24. common/src/resources/js/tooltip.js +6 -5
  25. common/src/resources/js/tooltip.min.js +1 -1
  26. common/src/resources/postcss/tribe-common-admin.pcss +160 -128
  27. common/src/resources/postcss/utilities/variables/_box-shadows.pcss +1 -0
  28. common/src/resources/postcss/utilities/variables/_colors.pcss +1 -0
  29. common/src/resources/postcss/utilities/variables/_grids.pcss +1 -1
  30. common/src/resources/postcss/utilities/variables/_z-index.pcss +3 -0
  31. common/vendor/autoload.php +1 -1
  32. common/vendor/autoload_52.php +1 -1
  33. common/vendor/composer/autoload_classmap.php +110 -0
  34. common/vendor/composer/autoload_commands_classmap.php +0 -105
  35. common/vendor/composer/autoload_commands_real.php +0 -34
  36. common/vendor/composer/autoload_framework_classmap.php +0 -2700
  37. common/vendor/composer/autoload_framework_real.php +0 -34
  38. common/vendor/composer/autoload_psr4.php +2 -0
  39. common/vendor/composer/autoload_real.php +4 -4
  40. common/vendor/composer/autoload_real_52.php +3 -3
  41. common/vendor/composer/autoload_static.php +131 -5
  42. common/vendor/composer/installed.json +133 -4
  43. common/vendor/monolog/monolog/src/Monolog/ErrorHandler.php +239 -0
  44. common/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php +78 -0
  45. common/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php +89 -0
  46. common/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php +116 -0
  47. common/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php +86 -0
  48. common/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php +36 -0
  49. common/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +138 -0
  50. common/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php +141 -0
  51. common/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php +214 -0
  52. common/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +181 -0
  53. common/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php +47 -0
  54. common/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php +166 -0
  55. common/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php +107 -0
  56. common/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +314 -0
  57. common/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php +48 -0
  58. common/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php +113 -0
  59. common/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php +196 -0
  60. common/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php +68 -0
  61. common/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php +101 -0
  62. common/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php +148 -0
  63. common/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +240 -0
  64. common/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php +129 -0
  65. common/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php +211 -0
  66. common/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php +72 -0
  67. common/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php +151 -0
  68. common/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php +57 -0
  69. common/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php +169 -0
  70. common/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php +45 -0
  71. common/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php +107 -0
  72. common/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php +128 -0
  73. common/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php +82 -0
  74. common/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php +140 -0
  75. common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php +28 -0
  76. common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php +59 -0
  77. common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php +34 -0
  78. common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +177 -0
  79. common/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php +195 -0
  80. common/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php +126 -0
  81. common/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +127 -0
  82. common/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php +65 -0
  83. common/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php +116 -0
  84. common/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php +90 -0
  85. common/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php +116 -0
  86. common/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php +365 -0
  87. common/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php +69 -0
  88. common/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php +62 -0
  89. common/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php +55 -0
  90. common/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php +102 -0
  91. common/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php +67 -0
  92. common/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +68 -0
  93. common/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php +21 -0
  94. common/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php +59 -0
  95. common/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php +185 -0
  96. common/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php +204 -0
  97. common/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php +45 -0
  98. common/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php +242 -0
  99. common/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php +56 -0
  100. common/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php +185 -0
  101. common/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php +232 -0
  102. common/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php +97 -0
  103. common/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php +144 -0
  104. common/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php +190 -0
  105. common/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php +82 -0
  106. common/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php +294 -0
  107. common/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php +220 -0
  108. common/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php +120 -0
  109. common/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php +80 -0
  110. common/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php +385 -0
  111. common/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php +176 -0
  112. common/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php +111 -0
  113. common/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php +67 -0
  114. common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php +56 -0
  115. common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php +103 -0
  116. common/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php +164 -0
  117. common/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php +71 -0
  118. common/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php +95 -0
  119. common/vendor/monolog/monolog/src/Monolog/Logger.php +791 -0
  120. common/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php +64 -0
  121. common/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php +112 -0
  122. common/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php +35 -0
  123. common/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php +63 -0
  124. common/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php +35 -0
  125. common/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php +63 -0
  126. common/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php +31 -0
  127. common/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php +25 -0
  128. common/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php +50 -0
  129. common/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php +44 -0
  130. common/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php +59 -0
  131. common/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php +113 -0
  132. common/vendor/monolog/monolog/src/Monolog/Registry.php +134 -0
  133. common/vendor/monolog/monolog/src/Monolog/ResettableInterface.php +31 -0
  134. common/vendor/monolog/monolog/src/Monolog/SignalHandler.php +115 -0
  135. common/vendor/monolog/monolog/src/Monolog/Utils.php +25 -0
  136. common/vendor/psr/log/Psr/Log/AbstractLogger.php +128 -0
  137. common/vendor/psr/log/Psr/Log/InvalidArgumentException.php +7 -0
  138. common/vendor/psr/log/Psr/Log/LogLevel.php +18 -0
  139. common/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +18 -0
  140. common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +26 -0
  141. common/vendor/psr/log/Psr/Log/LoggerInterface.php +123 -0
  142. common/vendor/psr/log/Psr/Log/LoggerTrait.php +140 -0
  143. common/vendor/psr/log/Psr/Log/NullLogger.php +28 -0
  144. common/vendor/tooltipster/tooltipster.bundle.css +388 -0
  145. common/vendor/tooltipster/tooltipster.bundle.js +4273 -0
  146. common/vendor/tooltipster/tooltipster.bundle.min.css +1 -0
  147. common/vendor/tooltipster/tooltipster.bundle.min.js +2 -0
common/lang/tribe-common-de_DE.mo CHANGED
Binary file
common/lang/tribe-common.pot CHANGED
@@ -2,13 +2,13 @@
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Tribe Common 4.9.13\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2019-07-24 15:19:56+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2019-07-24 15:19\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
@@ -457,15 +457,15 @@ msgstr ""
457
  msgid "Invalid field type specified"
458
  msgstr ""
459
 
460
- #: src/Tribe/Field.php:532
461
  msgid "No radio options specified"
462
  msgstr ""
463
 
464
- #: src/Tribe/Field.php:568
465
  msgid "No checkbox options specified"
466
  msgstr ""
467
 
468
- #: src/Tribe/Field.php:626
469
  msgid "No select options specified"
470
  msgstr ""
471
 
@@ -1641,6 +1641,10 @@ msgstr ""
1641
  msgid "Wyoming"
1642
  msgstr ""
1643
 
 
 
 
 
1644
  #: src/Tribe/Log/Admin.php:133
1645
  msgctxt "log selector"
1646
  msgid "None currently available"
@@ -1659,107 +1663,107 @@ msgstr ""
1659
  msgid "Null logger (will log nothing)"
1660
  msgstr ""
1661
 
1662
- #: src/Tribe/Log.php:286
1663
  msgid "Cannot set %s as the current logging engine"
1664
  msgstr ""
1665
 
1666
- #: src/Tribe/Log.php:385
1667
  msgid "Disabled"
1668
  msgstr ""
1669
 
1670
- #: src/Tribe/Log.php:386
1671
  msgid "Only errors"
1672
  msgstr ""
1673
 
1674
- #: src/Tribe/Log.php:387
1675
  msgid "Warnings and errors"
1676
  msgstr ""
1677
 
1678
- #: src/Tribe/Log.php:388
1679
  msgid "Full debug (all events)"
1680
  msgstr ""
1681
 
1682
- #: src/Tribe/Main.php:293
1683
  msgid ": activate to sort column ascending"
1684
  msgstr ""
1685
 
1686
- #: src/Tribe/Main.php:294
1687
  msgid ": activate to sort column descending"
1688
  msgstr ""
1689
 
1690
- #: src/Tribe/Main.php:296
1691
  msgid "Show _MENU_ entries"
1692
  msgstr ""
1693
 
1694
- #: src/Tribe/Main.php:297
1695
  msgid "No data available in table"
1696
  msgstr ""
1697
 
1698
- #: src/Tribe/Main.php:298
1699
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1700
  msgstr ""
1701
 
1702
- #: src/Tribe/Main.php:299
1703
  msgid "Showing 0 to 0 of 0 entries"
1704
  msgstr ""
1705
 
1706
- #: src/Tribe/Main.php:300
1707
  msgid "(filtered from _MAX_ total entries)"
1708
  msgstr ""
1709
 
1710
- #: src/Tribe/Main.php:301
1711
  msgid "No matching records found"
1712
  msgstr ""
1713
 
1714
- #: src/Tribe/Main.php:302
1715
  msgid "Search:"
1716
  msgstr ""
1717
 
1718
- #: src/Tribe/Main.php:303
1719
  msgid "All items on this page were selected. "
1720
  msgstr ""
1721
 
1722
- #: src/Tribe/Main.php:304
1723
  msgid "Select all pages"
1724
  msgstr ""
1725
 
1726
- #: src/Tribe/Main.php:305
1727
  msgid "Clear Selection."
1728
  msgstr ""
1729
 
1730
- #: src/Tribe/Main.php:307
1731
  msgid "All"
1732
  msgstr ""
1733
 
1734
- #: src/Tribe/Main.php:308 src/Tribe/Main.php:325
1735
  msgid "Next"
1736
  msgstr ""
1737
 
1738
- #: src/Tribe/Main.php:309
1739
  msgid "Previous"
1740
  msgstr ""
1741
 
1742
- #: src/Tribe/Main.php:314
1743
  msgid ": Selected %d rows"
1744
  msgstr ""
1745
 
1746
- #: src/Tribe/Main.php:315
1747
  msgid ": Selected 1 row"
1748
  msgstr ""
1749
 
1750
- #: src/Tribe/Main.php:326
1751
  msgid "Prev"
1752
  msgstr ""
1753
 
1754
- #: src/Tribe/Main.php:327 src/Tribe/Main.php:329
1755
  msgid "Today"
1756
  msgstr ""
1757
 
1758
- #: src/Tribe/Main.php:328
1759
  msgid "Done"
1760
  msgstr ""
1761
 
1762
- #: src/Tribe/Main.php:330
1763
  msgid "Clear"
1764
  msgstr ""
1765
 
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Tribe Common 4.9.15.1\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2019-08-30 19:44:26+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2019-08-30 19:44\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
457
  msgid "Invalid field type specified"
458
  msgstr ""
459
 
460
+ #: src/Tribe/Field.php:539
461
  msgid "No radio options specified"
462
  msgstr ""
463
 
464
+ #: src/Tribe/Field.php:575
465
  msgid "No checkbox options specified"
466
  msgstr ""
467
 
468
+ #: src/Tribe/Field.php:633
469
  msgid "No select options specified"
470
  msgstr ""
471
 
1641
  msgid "Wyoming"
1642
  msgstr ""
1643
 
1644
+ #: src/Tribe/Log/Action_Logger.php:39
1645
+ msgid "Action-based Logger"
1646
+ msgstr ""
1647
+
1648
  #: src/Tribe/Log/Admin.php:133
1649
  msgctxt "log selector"
1650
  msgid "None currently available"
1663
  msgid "Null logger (will log nothing)"
1664
  msgstr ""
1665
 
1666
+ #: src/Tribe/Log.php:289
1667
  msgid "Cannot set %s as the current logging engine"
1668
  msgstr ""
1669
 
1670
+ #: src/Tribe/Log.php:388
1671
  msgid "Disabled"
1672
  msgstr ""
1673
 
1674
+ #: src/Tribe/Log.php:389
1675
  msgid "Only errors"
1676
  msgstr ""
1677
 
1678
+ #: src/Tribe/Log.php:390
1679
  msgid "Warnings and errors"
1680
  msgstr ""
1681
 
1682
+ #: src/Tribe/Log.php:391
1683
  msgid "Full debug (all events)"
1684
  msgstr ""
1685
 
1686
+ #: src/Tribe/Main.php:281
1687
  msgid ": activate to sort column ascending"
1688
  msgstr ""
1689
 
1690
+ #: src/Tribe/Main.php:282
1691
  msgid ": activate to sort column descending"
1692
  msgstr ""
1693
 
1694
+ #: src/Tribe/Main.php:284
1695
  msgid "Show _MENU_ entries"
1696
  msgstr ""
1697
 
1698
+ #: src/Tribe/Main.php:285
1699
  msgid "No data available in table"
1700
  msgstr ""
1701
 
1702
+ #: src/Tribe/Main.php:286
1703
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1704
  msgstr ""
1705
 
1706
+ #: src/Tribe/Main.php:287
1707
  msgid "Showing 0 to 0 of 0 entries"
1708
  msgstr ""
1709
 
1710
+ #: src/Tribe/Main.php:288
1711
  msgid "(filtered from _MAX_ total entries)"
1712
  msgstr ""
1713
 
1714
+ #: src/Tribe/Main.php:289
1715
  msgid "No matching records found"
1716
  msgstr ""
1717
 
1718
+ #: src/Tribe/Main.php:290
1719
  msgid "Search:"
1720
  msgstr ""
1721
 
1722
+ #: src/Tribe/Main.php:291
1723
  msgid "All items on this page were selected. "
1724
  msgstr ""
1725
 
1726
+ #: src/Tribe/Main.php:292
1727
  msgid "Select all pages"
1728
  msgstr ""
1729
 
1730
+ #: src/Tribe/Main.php:293
1731
  msgid "Clear Selection."
1732
  msgstr ""
1733
 
1734
+ #: src/Tribe/Main.php:295
1735
  msgid "All"
1736
  msgstr ""
1737
 
1738
+ #: src/Tribe/Main.php:296 src/Tribe/Main.php:313
1739
  msgid "Next"
1740
  msgstr ""
1741
 
1742
+ #: src/Tribe/Main.php:297
1743
  msgid "Previous"
1744
  msgstr ""
1745
 
1746
+ #: src/Tribe/Main.php:302
1747
  msgid ": Selected %d rows"
1748
  msgstr ""
1749
 
1750
+ #: src/Tribe/Main.php:303
1751
  msgid ": Selected 1 row"
1752
  msgstr ""
1753
 
1754
+ #: src/Tribe/Main.php:314
1755
  msgid "Prev"
1756
  msgstr ""
1757
 
1758
+ #: src/Tribe/Main.php:315 src/Tribe/Main.php:317
1759
  msgid "Today"
1760
  msgstr ""
1761
 
1762
+ #: src/Tribe/Main.php:316
1763
  msgid "Done"
1764
  msgstr ""
1765
 
1766
+ #: src/Tribe/Main.php:318
1767
  msgid "Clear"
1768
  msgstr ""
1769
 
common/src/Tribe/Assets.php CHANGED
@@ -59,14 +59,32 @@ class Tribe__Assets {
59
  uasort( $assets, [ $this, 'order_by_priority' ] );
60
 
61
  foreach ( $assets as $asset ) {
 
 
 
 
 
62
  if ( 'js' === $asset->type ) {
 
 
 
 
 
63
  wp_register_script( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->in_footer );
 
 
 
64
  } else {
 
 
 
 
 
65
  wp_register_style( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->media );
66
- }
67
 
68
- // Register that this asset is actually registered on the WP methods.
69
- $asset->is_registered = true;
 
70
 
71
  // If we don't have an action we don't even register the action to enqueue.
72
  if ( empty( $asset->action ) ) {
59
  uasort( $assets, [ $this, 'order_by_priority' ] );
60
 
61
  foreach ( $assets as $asset ) {
62
+ // Asset is already registered.
63
+ if ( $asset->is_registered ) {
64
+ continue;
65
+ }
66
+
67
  if ( 'js' === $asset->type ) {
68
+ // Script is already registered.
69
+ if ( wp_script_is( $asset->slug, 'registered' ) ) {
70
+ continue;
71
+ }
72
+
73
  wp_register_script( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->in_footer );
74
+
75
+ // Register that this asset is actually registered on the WP methods.
76
+ $asset->is_registered = wp_script_is( $asset->slug, 'registered' );
77
  } else {
78
+ // Style is already registered.
79
+ if ( wp_style_is( $asset->slug, 'registered' ) ) {
80
+ continue;
81
+ }
82
+
83
  wp_register_style( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->media );
 
84
 
85
+ // Register that this asset is actually registered on the WP methods.
86
+ $asset->is_registered = wp_style_is( $asset->slug, 'registered' );
87
+ }
88
 
89
  // If we don't have an action we don't even register the action to enqueue.
90
  if ( empty( $asset->action ) ) {
common/src/Tribe/Field.php CHANGED
@@ -521,8 +521,15 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
521
  $field .= $this->do_field_div_start();
522
  if ( is_array( $this->options ) ) {
523
  foreach ( $this->options as $option_id => $title ) {
 
 
 
 
 
 
524
  $field .= '<label title="' . esc_attr( strip_tags( $title ) ) . '">';
525
  $field .= '<input type="radio"';
 
526
  $field .= $this->do_field_name();
527
  $field .= ' value="' . esc_attr( $option_id ) . '" ' . checked( $this->value, $option_id, false ) . '/>';
528
  $field .= $title;
521
  $field .= $this->do_field_div_start();
522
  if ( is_array( $this->options ) ) {
523
  foreach ( $this->options as $option_id => $title ) {
524
+ $field_id = sprintf(
525
+ '%1$s-%2$s',
526
+ sanitize_html_class( trim( $this->id ) ),
527
+ sanitize_html_class( trim( $option_id ) )
528
+ );
529
+
530
  $field .= '<label title="' . esc_attr( strip_tags( $title ) ) . '">';
531
  $field .= '<input type="radio"';
532
+ $field .= ' id="tribe-field-' . esc_attr( $field_id ) . '"';
533
  $field .= $this->do_field_name();
534
  $field .= ' value="' . esc_attr( $option_id ) . '" ' . checked( $this->value, $option_id, false ) . '/>';
535
  $field .= $title;
common/src/Tribe/Image/Uploader.php CHANGED
@@ -43,6 +43,8 @@ class Tribe__Image__Uploader {
43
  return false;
44
  }
45
 
 
 
46
  if ( is_string( $this->featured_image ) && ! is_numeric( $this->featured_image ) ) {
47
  $existing = $this->get_attachment_ID_from_url( $this->featured_image );
48
  $id = $existing ? $existing : $this->upload_file( $this->featured_image );
@@ -52,6 +54,17 @@ class Tribe__Image__Uploader {
52
  $id = false;
53
  }
54
 
 
 
 
 
 
 
 
 
 
 
 
55
  return $id;
56
  }
57
 
43
  return false;
44
  }
45
 
46
+ $existing = false;
47
+
48
  if ( is_string( $this->featured_image ) && ! is_numeric( $this->featured_image ) ) {
49
  $existing = $this->get_attachment_ID_from_url( $this->featured_image );
50
  $id = $existing ? $existing : $this->upload_file( $this->featured_image );
54
  $id = false;
55
  }
56
 
57
+ do_action(
58
+ 'tribe_log',
59
+ 'debug',
60
+ __CLASS__,
61
+ [
62
+ 'featured_image' => $this->featured_image,
63
+ 'exists' => (bool) $existing,
64
+ 'id' => $id,
65
+ ]
66
+ );
67
+
68
  return $id;
69
  }
70
 
common/src/Tribe/Log.php CHANGED
@@ -282,6 +282,9 @@ class Tribe__Log {
282
  public function set_current_logger( $engine ) {
283
  $available_engines = $this->get_logging_engines();
284
 
 
 
 
285
  if ( ! isset( $available_engines[ $engine ] ) ) {
286
  throw new Exception( sprintf( __( 'Cannot set %s as the current logging engine', 'tribe-common' ), $engine ) );
287
  }
282
  public function set_current_logger( $engine ) {
283
  $available_engines = $this->get_logging_engines();
284
 
285
+ // Make sure to de-duplicate the slashes on class names.
286
+ $engine = str_replace( '\\\\', '\\', $engine );
287
+
288
  if ( ! isset( $available_engines[ $engine ] ) ) {
289
  throw new Exception( sprintf( __( 'Cannot set %s as the current logging engine', 'tribe-common' ), $engine ) );
290
  }
common/src/Tribe/Log/Action_Logger.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Hooks the `tribe_log` action based logger under the existing one for back-compatibility.
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @package Tribe\Log
8
+ */
9
+
10
+ namespace Tribe\Log;
11
+
12
+ use Monolog\Logger;
13
+ use Tribe__Log;
14
+
15
+ /**
16
+ * Class Action_Logger
17
+ *
18
+ * @since 4.9.16
19
+ *
20
+ * @package Tribe\Log
21
+ */
22
+ class Action_Logger implements \Tribe__Log__Logger {
23
+
24
+ /**
25
+ * {@inheritDoc}
26
+ *
27
+ * @since 4.9.16
28
+ */
29
+ public function is_available() {
30
+ return true;
31
+ }
32
+
33
+ /**
34
+ * {@inheritDoc}
35
+ *
36
+ * @since 4.9.16
37
+ */
38
+ public function get_name() {
39
+ return __( 'Action-based Logger', 'tribe-common' );
40
+ }
41
+
42
+ /**
43
+ * {@inheritDoc}
44
+ *
45
+ * @since 4.9.16
46
+ */
47
+ public function log( $entry, $type = Tribe__Log::DEBUG, $src = '' ) {
48
+ $message = empty( $src ) ? $entry : $src . ': ' . $entry;
49
+
50
+ do_action( 'tribe_log', $this->translate_log_level( $type ), $message );
51
+ }
52
+
53
+ /**
54
+ * Translates the log types used by `Tribe__Log` to those used by Monolog.
55
+ *
56
+ * @since 4.9.16
57
+ *
58
+ * @param string $type The `Tribe__Log` log type.
59
+ *
60
+ * @return int The Monolog equivalent of the current level.
61
+ */
62
+ protected function translate_log_level( $type ) {
63
+ switch ( $type ) {
64
+ case Tribe__Log::DEBUG:
65
+ return Logger::DEBUG;
66
+ case Tribe__Log::ERROR:
67
+ return Logger::ERROR;
68
+ case Tribe__Log::WARNING:
69
+ return Logger::WARNING;
70
+ case Tribe__Log::SUCCESS:
71
+ default:
72
+ return Logger::INFO;
73
+ }
74
+ }
75
+
76
+ /**
77
+ * {@inheritDoc}
78
+ *
79
+ * @since 4.9.16
80
+ */
81
+ public function retrieve( $limit = 0, array $args = array() ) {
82
+ return [
83
+ [
84
+ 'message' => __(
85
+ 'The Action Logger will dispatch any logging message using the "tribe_log" action writing, by ' .
86
+ 'default, to the PHP error log.',
87
+ 'tribe-common' )
88
+ ],
89
+ ];
90
+ }
91
+
92
+ /**
93
+ * {@inheritDoc}
94
+ *
95
+ * @since 4.9.16
96
+ */
97
+ public function list_available_logs() {
98
+ return [];
99
+ }
100
+
101
+ /**
102
+ * Changes the Monolog logger channel to the specified one.
103
+ *
104
+ * @since 4.9.16
105
+ *
106
+ * @param string $log_identifier The channel to switch to.
107
+ * @param bool $create Unused by this class.
108
+ *
109
+ * @return bool The exit status of the channel change.
110
+ *
111
+ * @uses \Tribe\Log\Monolog_Logger::set_channel().
112
+ */
113
+ public function use_log( $log_identifier, $create = false ) {
114
+ return tribe( 'monolog' )->set_global_channel( $log_identifier );
115
+ }
116
+
117
+ /**
118
+ * {@inheritDoc}
119
+ *
120
+ * @since 4.9.16
121
+ */
122
+ public function cleanup() {
123
+ return true;
124
+ }
125
+ }
common/src/Tribe/Log/Canonical_Formatter.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ${CARET}
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @package Tribe\Log
8
+ */
9
+
10
+
11
+ namespace Tribe\Log;
12
+
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+
16
+ class Canonical_Formatter extends LineFormatter {
17
+
18
+ /**
19
+ * Formats a log record.
20
+ *
21
+ * @since 4.9.16
22
+ *
23
+ * @param array $record A record to format.
24
+ *
25
+ * @return mixed The formatted record.
26
+ */
27
+ public function format( array $record ) {
28
+ $has_context = ! empty( $record['context'] );
29
+
30
+ if ( $has_context ) {
31
+ $record['message'] = $this->format_record_message( $record );
32
+
33
+ $this->format = 'tribe-canonical-line channel=%channel% %message%';
34
+ } else {
35
+ // Fall-back on a standard format if the message does not have a context.
36
+ $this->format = 'tribe.%channel%.%level_name%: %message%';
37
+ }
38
+
39
+ return parent::format( $record );
40
+ }
41
+
42
+ /**
43
+ * Formats the record to the canonical format.
44
+ *
45
+ * @since 4.9.16
46
+ *
47
+ * @param array $record The record to process.
48
+ *
49
+ * @return string The formatted message, as built from the record context and message, in the format `<key>=<value>`.
50
+ */
51
+ protected function format_record_message( array $record ) {
52
+ $message = [];
53
+ $extra = [];
54
+
55
+ $extra['level'] = isset( $record['level_name'] ) ? strtolower( $record['level_name'] ) : 'debug';
56
+
57
+ if ( ! empty( $record['message'] ) ) {
58
+ // Use the message as the source.
59
+ $extra['source'] = $this->escape_quotes( $record['message'] );
60
+ }
61
+
62
+ $context = $record['context'];
63
+ $context = array_merge( $extra, $context );
64
+
65
+ foreach ( $context as $key => $value ) {
66
+ $escape = false;
67
+
68
+ if ( is_bool( $value ) ) {
69
+ $value = $value ? 'true' : 'false';
70
+ } elseif ( ! is_scalar( $value ) ) {
71
+ $value = json_encode( $value );
72
+ if ( false === $value ) {
73
+ $value = 'malformed';
74
+ } else {
75
+ $escape = true;
76
+ }
77
+ }
78
+
79
+ if ( $escape || ( is_string( $value ) && preg_match( '~[\\\\/\\s]+~', $value ) ) ) {
80
+ $value = '"' . $this->escape_quotes( $value ) . '"';
81
+ }
82
+
83
+ $message[] = "{$key}={$value}";
84
+ }
85
+
86
+ return implode( ' ', $message );
87
+ }
88
+
89
+ /**
90
+ * Escapes the double quotes in a string.
91
+ *
92
+ * @since 4.9.16
93
+ *
94
+ * @param string $string The string to escape the quotes in.
95
+ *
96
+ * @return string The string, with the quotes escaped.
97
+ */
98
+ protected function escape_quotes( $string ) {
99
+ return str_replace( '"', '\\"', $string ) ;
100
+ }
101
+ }
common/src/Tribe/Log/Monolog_Logger.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * An extension of the base Monolog logger to add our need to replace the instance, and global, loggers.
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @package Tribe\Log
8
+ */
9
+
10
+ namespace Tribe\Log;
11
+
12
+ use Monolog\Logger;
13
+
14
+ /**
15
+ * Class Monolog_Logger
16
+ *
17
+ * @since 4.9.16
18
+ *
19
+ * @package Tribe\Log
20
+ */
21
+ class Monolog_Logger extends Logger {
22
+ /**
23
+ * @since 4.9.16
24
+ */
25
+ const DEFAULT_CHANNEL = 'default';
26
+
27
+ /**
28
+ * Resets the global channel to the default one.
29
+ *
30
+ * @since 4.9.16
31
+ *
32
+ * @return bool Whether the channel reset
33
+ */
34
+ public function reset_global_channel() {
35
+ return $this->set_global_channel( static::DEFAULT_CHANNEL );
36
+ }
37
+
38
+ /**
39
+ * Clones this logger and replaces it in the `tribe` container.
40
+ *
41
+ * @since 4.9.16
42
+ *
43
+ * @param string $channel The new logger name, also referred to as "channel" (hence the method name).
44
+ *
45
+ * @return bool Whether the channel change was successful or not.
46
+ */
47
+ public function set_global_channel( $channel ) {
48
+ $new = $this->withName( $channel );
49
+ tribe_register( Logger::class, $new );
50
+ tribe_register( 'monolog', $new );
51
+
52
+ return $channel === tribe( 'monolog' )->getName();
53
+ }
54
+ }
common/src/Tribe/Log/README.md ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Monolog-based logging
2
+
3
+ We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
4
+ You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
5
+
6
+ ## When should I log?
7
+
8
+ Whenever you feel you might have to debug this in the future and could use that information.
9
+
10
+ > Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
11
+
12
+ Worried about "spamming" the logs? [Read here](#logging-levels--or-stuff-does-not-appear-in-the-log).
13
+
14
+ ## This will deprecate the old logger, but not yet
15
+
16
+ At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
17
+ The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
18
+
19
+ To be clear: this is what we mean by "old" or "legacy" logger:
20
+
21
+ ```php
22
+ <?php
23
+ tribe( 'logger' )->log_debug( 'Some debug information', 'The source' );
24
+ tribe( 'logger' )->log( 'Some information', Tribe__Log::DEBUG, 'The source' );
25
+ ```
26
+
27
+ ### Intercepting legacy logger logs with the new Monolog logger
28
+
29
+ The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
30
+
31
+ You can activate this function with this code:
32
+
33
+ ```php
34
+ <?php
35
+ add_filter( 'tribe_log_use_action_logger', '__return_true' );
36
+ ```
37
+
38
+ Once this is in your code any call to the legacy logger wil be redirected to the new one.
39
+
40
+ ## Using the logger
41
+
42
+ The new logger listens on the `tribe_log` action.
43
+ By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
44
+
45
+ So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
46
+
47
+ ```php
48
+ <?php
49
+ do_action(
50
+ 'tribe_log',
51
+ 'debug',
52
+ 'ea_client',
53
+ [ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
54
+ );
55
+ ```
56
+
57
+ The logger listening on the action will consume three parameters:
58
+
59
+ 1. `level` - `debug` in the example; is the level of the log; available levels, in increasing value of urgency are: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`. Use each level wisely.
60
+ 2. `source` - `ea_client` in this example; is the source of the log; this is a human-readable value; consistency is king here.
61
+ 3. `context` - the array in this example; this is an associative array that will be logged to define the context of the log. Think of this as something that will provide the details required to unpack what **was** happening when the log entry was created. Provide enough context to make it clear, but avoid bloating it.
62
+
63
+ ## Where are my logs?
64
+
65
+ The initial implementation of the new logger will write, by default, to the **PHP error** log.
66
+
67
+ We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
68
+ By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
69
+
70
+ The output format of the example above would be this:
71
+
72
+ ```
73
+ [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
74
+ ```
75
+
76
+ What about legacy logs?
77
+ Their format would not be formatted to the canonical line style:
78
+
79
+ ```
80
+ [22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
81
+ ```
82
+
83
+ ### Logging levels ( or "stuff does not appear in the log")
84
+
85
+ By default we're only logging Warnings and above.
86
+ This means all your `debug` level logs are being ignored.
87
+
88
+ In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
89
+
90
+ You can control the logging level with the `tribe_log_level` filter:
91
+
92
+ ```php
93
+ <?php
94
+ add_filter(
95
+ 'tribe_log_level',
96
+ static function () {
97
+ // Only log errors or above.
98
+ return Monolog\Logger::ERROR;
99
+ }
100
+ );
101
+ ```
102
+
103
+ ### Logging channels
104
+
105
+ The default logging channel is `default`, you've seen that in the example log lines above.
106
+
107
+ But how can I change the channel?
108
+
109
+ Easy:
110
+
111
+ ```php
112
+ <?php
113
+ tribe( 'monolog' )->set_global_channel( 'my_channel' );
114
+ do_action( 'tribe_log', 'debug', 'my_source', [ 'foo' => 'bar' ] );
115
+ tribe( 'logger' )->log_debug( 'Some debug information', 'My source' );
116
+ ```
117
+
118
+ You can do the same using the legacy logger, [if enabled][0527-0003]:
119
+
120
+ ```php
121
+ <?php
122
+ tribe( 'logger' )->use_log( 'my_channel' );
123
+ ```
124
+
125
+ Any log produced after the call will log to the `my_channel` channel; this will apply to the legacy logger too ([if redirected][0527-0003]):
126
+
127
+ ```
128
+ [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
129
+ [22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
130
+ [22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
131
+ ```
132
+
133
+ ## I want to use this right now to debug my code
134
+
135
+ Copy and paste this in a plugin, or must-use plugin.
136
+ If you're using a plugin remember to activate it.
137
+
138
+ ```php
139
+ <?php
140
+ /**
141
+ * Plugin Name: Modern Tribe Logger Control
142
+ * Plugin Description: Control the behavior of Modern Tribe Monolog-based logger.
143
+ */
144
+ add_filter(
145
+ 'tribe_log_level',
146
+ static function () {
147
+ // Control the min level of logging.
148
+ return Monolog\Logger::DEBUG;
149
+ }
150
+ );
151
+
152
+ // Redirect legacy logger calls.
153
+ add_filter( 'tribe_log_use_action_logger', '__return_true' );
154
+ ```
common/src/Tribe/Log/Service_Provider.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ${CARET}
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @package Tribe\Log
8
+ */
9
+
10
+
11
+ namespace Tribe\Log;
12
+
13
+
14
+ use Monolog\Handler\ErrorLogHandler;
15
+ use Monolog\Logger;
16
+
17
+ class Service_Provider extends \tad_DI52_ServiceProvider {
18
+
19
+ /**
20
+ * Binds and sets up implementations.
21
+ *
22
+ * @since 4.9.16
23
+ */
24
+ public function register() {
25
+ $this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
26
+ $this->container->singleton( 'monolog',
27
+ function () {
28
+ return $this->container->make( Logger::class );
29
+ }
30
+ );
31
+
32
+ add_action( 'tribe_log', [ $this, 'dispatch_log' ], 10, 3 );
33
+
34
+ /**
35
+ * Filters whether to make the Action Logger available as logger or not.
36
+ *
37
+ * @since 4.9.16
38
+ *
39
+ * @param bool $use_action_logger Whether to allow logging messages from the \Tribe\Log\Logger class using the
40
+ * `tribe_log` action or not.
41
+ */
42
+ $use_action_logger = apply_filters( 'tribe_log_use_action_logger', false );
43
+
44
+ if ( $use_action_logger ) {
45
+ add_filter( 'tribe_common_logging_engines', [ $this, 'add_logging_engine' ] );
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Builds and returns the Monolog Logger instance that will listen to the `tribe_log` action.
51
+ *
52
+ * To avoid the over-head introduced by filtering the filters are applied here, only once, when the instance is
53
+ * first built. Any later call will use the singleton instance stored in the container.
54
+ *
55
+ * @since 4.9.16
56
+ *
57
+ * @return Logger
58
+ */
59
+ public function build_logger() {
60
+ /**
61
+ * Filters the level of the messages that will be logged.
62
+ *
63
+ * The threshold is inclusive of the level; it default to log any warning and above.
64
+ *
65
+ * @since 4.9.16
66
+ *
67
+ * @param int The threshold level; if the level of a message is this level or above, then it will be logged.
68
+ *
69
+ * @see \Monolog\Logger for possible levels.
70
+ */
71
+ $level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
72
+
73
+ $error_log_handler = new ErrorLogHandler( null, $level_threshold );
74
+
75
+ /**
76
+ * Filters whether to use canonical format for the logs or not.
77
+ *
78
+ * @since 4.9.16
79
+ *
80
+ * @param bool $use_canonical_format Whether to use canonical format for the logs or not; defaults to `true`.
81
+ */
82
+ $use_canonical_format = apply_filters( 'tribe_log_canonical', true );
83
+
84
+ if ( $use_canonical_format ) {
85
+ $error_log_handler->setFormatter( new Canonical_Formatter() );
86
+ }
87
+
88
+ $handlers = [
89
+ 'default' => $error_log_handler
90
+ ];
91
+
92
+ /**
93
+ * Filters the list of handlers that will handle dispatched log messages.
94
+ *
95
+ * All handlers should implement the `\Monolog\Handler\HandlerInterface`.
96
+ *
97
+ * @since 4.9.16
98
+ *
99
+ * @param array $handlers An array of default log handlers.
100
+ */
101
+ $handlers = apply_filters( 'tribe_log_handlers', $handlers );
102
+
103
+ // Monolog will log to stderr when no handlers are set.
104
+ $logger = new Monolog_Logger( Monolog_Logger::DEFAULT_CHANNEL );
105
+
106
+ $logger->setHandlers( $handlers );
107
+
108
+ return $logger;
109
+ }
110
+
111
+ /**
112
+ * Dispatch a message of a specific level.
113
+ *
114
+ * Available levels are: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`.
115
+ *
116
+ * @since 4.9.16
117
+ *
118
+ * @param string|int $level Either the log level or the log pretty name, see long description.
119
+ * @param string $message The message to log.
120
+ * @param array $context An array of values to define the context.
121
+ *
122
+ * @see \Monolog\Logger for the log level constants and names.
123
+ */
124
+ public function dispatch_log( $level = 'debug', $message = '', array $context = [] ) {
125
+ // Goes from something like `debug` to `100`.
126
+ $level = is_numeric( $level ) ? $level : Logger::toMonologLevel( $level );
127
+
128
+ /** @var Logger $logger */
129
+ $logger = $this->container->make( Logger::class );
130
+
131
+ $logger->log( $level, $message, $context );
132
+ }
133
+
134
+ /**
135
+ * Makes the action-based logging engine available in the backend.
136
+ *
137
+ * @since 4.9.16
138
+ *
139
+ * @param array $logging_engines An array of available logging engines.
140
+ *
141
+ * @return array The updated array of logging engines.
142
+ */
143
+ public function add_logging_engine( array $logging_engines = [] ) {
144
+ $logging_engines[ Action_Logger::class ] = new Action_Logger();
145
+
146
+ return $logging_engines;
147
+ }
148
+ }
common/src/Tribe/Main.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.9.14';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
@@ -263,18 +263,6 @@ class Tribe__Main {
263
  ]
264
  );
265
 
266
- tribe_asset(
267
- $this,
268
- 'tribe-tooltip',
269
- 'tooltip.js',
270
- [ 'tribe-common' ],
271
- 'admin_enqueue_scripts',
272
- [
273
- 'conditionals' => [ $this, 'should_load_common_admin_css' ],
274
- 'priority' => 10,
275
- ]
276
- );
277
-
278
  tribe( Tribe__Admin__Help_Page::class )->register_assets();
279
  }
280
 
@@ -596,6 +584,7 @@ class Tribe__Main {
596
  tribe_register_provider( Tribe__Service_Providers__Tooltip::class );
597
 
598
  tribe_register_provider( Tribe\Service_Providers\PUE::class );
 
599
  }
600
 
601
  /************************
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.9.16';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
263
  ]
264
  );
265
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  tribe( Tribe__Admin__Help_Page::class )->register_assets();
267
  }
268
 
584
  tribe_register_provider( Tribe__Service_Providers__Tooltip::class );
585
 
586
  tribe_register_provider( Tribe\Service_Providers\PUE::class );
587
+ tribe_register_provider( Tribe\Log\Service_Provider::class );
588
  }
589
 
590
  /************************
common/src/Tribe/Process/Handler.php CHANGED
@@ -147,6 +147,22 @@ abstract class Tribe__Process__Handler {
147
 
148
  check_ajax_referer( $this->identifier, 'nonce' );
149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  $this->handle( $data_source );
151
 
152
  wp_die();
@@ -159,6 +175,12 @@ abstract class Tribe__Process__Handler {
159
  */
160
  wp_clear_scheduled_hook( $this->healthcheck_cron_hook_id, [ $data_source ] );
161
 
 
 
 
 
 
 
162
  $this->handle( $data_source );
163
  }
164
 
@@ -176,6 +198,8 @@ abstract class Tribe__Process__Handler {
176
  ( defined( 'TRIBE_NO_ASYNC' ) && true === TRIBE_NO_ASYNC )
177
  || true === (bool) getenv( 'TRIBE_NO_ASYNC' )
178
  ) {
 
 
179
  return $this->sync_handle( $this->data );
180
  }
181
 
@@ -183,6 +207,8 @@ abstract class Tribe__Process__Handler {
183
  $url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
184
  $args = $this->get_post_args();
185
 
 
 
186
  return wp_remote_post( esc_url_raw( $url ), $args );
187
  }
188
 
@@ -201,7 +227,21 @@ abstract class Tribe__Process__Handler {
201
  $class = get_class( $this );
202
  $src = call_user_func( [ $class, 'action' ] );
203
  $logger->log( 'Could not schedule event for cron-based handling', Tribe__Log::ERROR, $src );
 
 
 
 
 
 
 
204
  }
 
 
 
 
 
 
 
205
  }
206
 
207
  return true;
147
 
148
  check_ajax_referer( $this->identifier, 'nonce' );
149
 
150
+ // Let's make sure to hydrate date from the request if not set.
151
+ if ( count( array_filter( $data_source ) ) < 1 ) {
152
+ $data_source = $_POST;
153
+ }
154
+
155
+ do_action(
156
+ 'tribe_log',
157
+ 'debug',
158
+ $this->identifier,
159
+ [
160
+ 'action' => 'async_handling',
161
+ 'data_source' => $data_source,
162
+ 'payload' => $_POST,
163
+ ]
164
+ );
165
+
166
  $this->handle( $data_source );
167
 
168
  wp_die();
175
  */
176
  wp_clear_scheduled_hook( $this->healthcheck_cron_hook_id, [ $data_source ] );
177
 
178
+ do_action(
179
+ 'tribe_log',
180
+ 'debug',
181
+ $this->identifier,
182
+ array_merge( [ 'action' => 'cron_handling' ], $data_source ) );
183
+
184
  $this->handle( $data_source );
185
  }
186
 
198
  ( defined( 'TRIBE_NO_ASYNC' ) && true === TRIBE_NO_ASYNC )
199
  || true === (bool) getenv( 'TRIBE_NO_ASYNC' )
200
  ) {
201
+ do_action( 'tribe_log', 'debug', $this->identifier, [ 'action' => 'sync_handle', 'data' => $this->data ] );
202
+
203
  return $this->sync_handle( $this->data );
204
  }
205
 
207
  $url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
208
  $args = $this->get_post_args();
209
 
210
+ do_action( 'tribe_log', 'debug', $this->identifier, [ 'action' => 'async_dispatch', 'data' => $this->data ] );
211
+
212
  return wp_remote_post( esc_url_raw( $url ), $args );
213
  }
214
 
227
  $class = get_class( $this );
228
  $src = call_user_func( [ $class, 'action' ] );
229
  $logger->log( 'Could not schedule event for cron-based handling', Tribe__Log::ERROR, $src );
230
+
231
+ do_action(
232
+ 'tribe_log',
233
+ 'error',
234
+ $this->identifier,
235
+ [ 'action' => 'schedule_cron', 'data' => $this->data ]
236
+ );
237
  }
238
+
239
+ do_action(
240
+ 'tribe_log',
241
+ 'debug',
242
+ $this->identifier,
243
+ [ 'action' => 'schedule_cron', 'data' => $this->data ]
244
+ );
245
  }
246
 
247
  return true;
common/src/Tribe/Process/Post_Thumbnail_Setter.php CHANGED
@@ -42,7 +42,14 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
42
  throw new InvalidArgumentException( 'Post ID and featured image should be set before trying to dispatch.' );
43
  }
44
 
45
- $this->data( array( 'post_id' => $this->post_id, 'post_thumbnail' => trim( $this->post_thumbnail ) ) );
 
 
 
 
 
 
 
46
 
47
  return parent::dispatch();
48
  }
@@ -101,6 +108,8 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
101
  $data_source = isset( $data_source ) ? $data_source : $_POST;
102
 
103
  if ( ! isset( $data_source['post_id'], $data_source['post_thumbnail'] ) ) {
 
 
104
  return 0;
105
  }
106
 
@@ -112,19 +121,56 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
112
  $thumbnail_id = tribe_upload_image( $post_thumbnail );
113
 
114
  if ( false === $thumbnail_id ) {
 
 
 
 
 
 
 
 
 
 
115
  $logger->log_debug( "(ID: {$this->identifier}) - could not fetch {$post_thumbnail} for post {$id}, done.", $log_src );
116
 
117
  return 0;
118
  }
119
 
120
- $set = set_post_thumbnail( $id, $thumbnail_id );
 
 
 
121
 
122
  if ( false === $set ) {
 
 
 
 
 
 
 
 
 
 
 
 
123
  $logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, unable to set thumbnail for post {$id}, done.", $log_src );
124
 
125
  return $thumbnail_id;
126
  }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  $logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, set thumbnail for post {$id}, done.", $log_src );
129
 
130
  return $thumbnail_id;
42
  throw new InvalidArgumentException( 'Post ID and featured image should be set before trying to dispatch.' );
43
  }
44
 
45
+ $data = [
46
+ 'post_id' => $this->post_id,
47
+ 'post_thumbnail' => trim( $this->post_thumbnail ),
48
+ ];
49
+
50
+ $this->data( $data );
51
+
52
+ do_action( 'tribe_log', 'debug', __CLASS__, $data );
53
 
54
  return parent::dispatch();
55
  }
108
  $data_source = isset( $data_source ) ? $data_source : $_POST;
109
 
110
  if ( ! isset( $data_source['post_id'], $data_source['post_thumbnail'] ) ) {
111
+ do_action( 'tribe_log', 'error', $this->identifier, [ 'data' => $data_source, ] );
112
+
113
  return 0;
114
  }
115
 
121
  $thumbnail_id = tribe_upload_image( $post_thumbnail );
122
 
123
  if ( false === $thumbnail_id ) {
124
+ do_action(
125
+ 'tribe_log',
126
+ 'error',
127
+ $this->identifier,
128
+ [
129
+ 'action' => 'fetch',
130
+ 'post_thumbnail' => $post_thumbnail,
131
+ 'post_id' => $id,
132
+ ]
133
+ );
134
  $logger->log_debug( "(ID: {$this->identifier}) - could not fetch {$post_thumbnail} for post {$id}, done.", $log_src );
135
 
136
  return 0;
137
  }
138
 
139
+ $set = true;
140
+ if ( (int) get_post_thumbnail_id( $id ) !== (int) $thumbnail_id ) {
141
+ $set = set_post_thumbnail( $id, $thumbnail_id );
142
+ }
143
 
144
  if ( false === $set ) {
145
+ do_action(
146
+ 'tribe_log',
147
+ 'error',
148
+ $this->identifier,
149
+ [
150
+ 'action' => 'set',
151
+ 'post_thumbnail' => $post_thumbnail,
152
+ 'attachment_id' => $thumbnail_id,
153
+ 'post_id' => $id,
154
+ ]
155
+ );
156
+
157
  $logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, unable to set thumbnail for post {$id}, done.", $log_src );
158
 
159
  return $thumbnail_id;
160
  }
161
 
162
+ do_action(
163
+ 'tribe_log',
164
+ 'debug',
165
+ $this->identifier,
166
+ [
167
+ 'action' => 'set',
168
+ 'post_thumbnail' => $post_thumbnail,
169
+ 'attachment_id' => $thumbnail_id,
170
+ 'post_id' => $id,
171
+ ]
172
+ );
173
+
174
  $logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, set thumbnail for post {$id}, done.", $log_src );
175
 
176
  return $thumbnail_id;
common/src/Tribe/Service_Providers/Tooltip.php CHANGED
@@ -37,9 +37,17 @@ class Tribe__Service_Providers__Tooltip extends tad_DI52_ServiceProvider {
37
  public function add_tooltip_assets() {
38
  tribe_asset(
39
  Tribe__Main::instance(),
40
- 'tribe-tooltip',
41
  'tooltip.css',
42
- [],
 
 
 
 
 
 
 
 
43
  [ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
44
  );
45
  }
37
  public function add_tooltip_assets() {
38
  tribe_asset(
39
  Tribe__Main::instance(),
40
+ 'tribe-tooltip-css',
41
  'tooltip.css',
42
+ [ 'tribe-common-style' ],
43
+ [ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
44
+ );
45
+
46
+ tribe_asset(
47
+ Tribe__Main::instance(),
48
+ 'tribe-tooltip-js',
49
+ 'tooltip.js',
50
+ [ 'jquery', 'tribe-common' ],
51
  [ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
52
  );
53
  }
common/src/Tribe/Utils/Collection_Interface.php CHANGED
@@ -16,7 +16,7 @@ namespace Tribe\Utils;
16
  * @since 4.9.14
17
  * @package Tribe\Utils
18
  */
19
- interface Collection_Interface extends \ArrayAccess, \SeekableIterator, \Countable, \Serializable {
20
  /**
21
  * Returns all the items in the collection.
22
  *
16
  * @since 4.9.14
17
  * @package Tribe\Utils
18
  */
19
+ interface Collection_Interface extends \ArrayAccess, \SeekableIterator, \Countable, \Serializable, \JsonSerializable {
20
  /**
21
  * Returns all the items in the collection.
22
  *
common/src/Tribe/Utils/Lazy_Collection.php CHANGED
@@ -33,6 +33,7 @@ namespace Tribe\Utils;
33
  */
34
  class Lazy_Collection implements Collection_Interface {
35
  use Collection_Trait;
 
36
 
37
  /**
38
  * The callback in charge of providing the elements.
@@ -84,6 +85,7 @@ class Lazy_Collection implements Collection_Interface {
84
 
85
  $items = call_user_func( $this->callback );
86
  $this->items = (array) $items;
 
87
  }
88
 
89
  /**
@@ -105,4 +107,11 @@ class Lazy_Collection implements Collection_Interface {
105
 
106
  return null;
107
  }
 
 
 
 
 
 
 
108
  }
33
  */
34
  class Lazy_Collection implements Collection_Interface {
35
  use Collection_Trait;
36
+ use Lazy_Events;
37
 
38
  /**
39
  * The callback in charge of providing the elements.
85
 
86
  $items = call_user_func( $this->callback );
87
  $this->items = (array) $items;
88
+ $this->resolved();
89
  }
90
 
91
  /**
107
 
108
  return null;
109
  }
110
+
111
+ /**
112
+ * {@inheritDoc}
113
+ */
114
+ public function jsonSerialize() {
115
+ return $this->all();
116
+ }
117
  }
common/src/Tribe/Utils/Lazy_Events.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Provides methods for "lazy" objects to act upon life cycle events.
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @example
8
+ * ```php
9
+ * class Lazy_List_Of_Stuff {
10
+ * use Tribe\Utils\Lazy_Events;
11
+ *
12
+ * protected $list;
13
+ *
14
+ * public function fetch_list(){
15
+ * $cached = wp_cache_get( 'list_of_stuff_one' );
16
+ *
17
+ * if( false !== $cached ){
18
+ * return $cached;
19
+ *
20
+ * if( null === $this->list ){
21
+ * $this->list = really_expensive_calculation();
22
+ * }
23
+ *
24
+ * $this->resolved();
25
+ * }
26
+ *
27
+ * return $this->list;
28
+ * }
29
+ * }
30
+ *
31
+ * class Lazy_Value {
32
+ * use Tribe\Utils\Lazy_Events;
33
+ *
34
+ * protected $value;
35
+ *
36
+ * public function calculate_value(){
37
+ * $cached = wp_cache_get( 'expensive_value' );
38
+ *
39
+ * if( false !== $cached ){
40
+ * return $cached;
41
+ *
42
+ * if( null === $this->value ){
43
+ * $this->value = really_expensive_calculation();
44
+ * }
45
+ *
46
+ * $this->resolved();
47
+ * }
48
+ *
49
+ * return $this->value;
50
+ * }
51
+ * }
52
+ *
53
+ * class List_And_Value {
54
+ * protected $list;
55
+ * protected $value;
56
+ *
57
+ * public function __construct( Lazy_List_Of_Stuff $list, Lazy_Value $value ){
58
+ * $this->list = $list;
59
+ * $this->value = $value;
60
+ * $this->list->on_resolve( [ $this, 'cache' ] );
61
+ * $this->value->on_resolve( [ $this, 'cache' ] );
62
+ * }
63
+ *
64
+ * public function cache(){
65
+ * wp_cache_set( 'list_and_value', [
66
+ * 'list' => $this->list->fetch_list(),
67
+ * 'value' => $this->value->calculate_value(),
68
+ * ]);
69
+ * }
70
+ *
71
+ * public function get_list(){
72
+ * $cached = wp_cache_get( 'list_and_value' );
73
+ *
74
+ * return $cached ? $cached['list'] : $this->list->fetch_list();
75
+ * }
76
+ *
77
+ * public function get_value(){
78
+ * $cached = wp_cache_get( 'list_and_value' );
79
+ *
80
+ * return $cached ? $cached['value'] : $this->value->fetch_value();
81
+ * }
82
+ * }
83
+ *
84
+ *
85
+ * $list = new Lazy_List_Of_Stuff();
86
+ * $value = new Lazy_Value();
87
+ * $list_and_value = new List_And_Value( $list, $value );
88
+ *
89
+ * // Accessing `value` will make it so that `list` too will be cached.
90
+ * $list_and_value->get_value();
91
+ * ````
92
+ *
93
+ * @package Tribe\Utils
94
+ */
95
+
96
+ namespace Tribe\Utils;
97
+
98
+ /**
99
+ * Trait Lazy_Events
100
+ *
101
+ * @since 4.9.16
102
+ *
103
+ * @package Tribe\Utils
104
+ *
105
+ * @property string $lazy_resolve_action The action to which the trait will hook to run the callback if the object
106
+ * resolved. Using classes should define the property if the default `shutdown`
107
+ * one is not correct.
108
+ * @property int $lazy_resolve_priority The priority at which the resolution callback will be hooked on the
109
+ * `$lazy_resolve_action`; defaults to `10`.
110
+ */
111
+ trait Lazy_Events {
112
+
113
+ /**
114
+ * The callback that will be called when, and if, the lazy object resolved at least once.
115
+ *
116
+ * @since 4.9.16
117
+ *
118
+ * @var
119
+ */
120
+ protected $lazy_resolve_callback;
121
+
122
+ /**
123
+ * Sets the callback that will be hooked to the resolve action when, and if, the `resolved` method is called.
124
+ *
125
+ * @since 4.9.16
126
+ *
127
+ * @param callable $callback The callback that will be hooked on the `$lazy_resolve_action` (defaults to `shutdown`)
128
+ * if the `resolved` method is called.
129
+ *
130
+ * @return static The object instance.
131
+ *
132
+ * @see Lazy_Events::resolved()
133
+ */
134
+ public function on_resolve( callable $callback ) {
135
+ $this->lazy_resolve_callback = $callback;
136
+
137
+ return $this;
138
+ }
139
+
140
+ /**
141
+ * Hooks the `$lazy_resolve_callback` to the `$lazy_resolve_action` with the `$lazy_resolve_priority` if set.
142
+ *
143
+ * @since 4.9.16
144
+ */
145
+ protected function resolved() {
146
+ if ( empty( $this->lazy_resolve_callback ) ) {
147
+ return;
148
+ }
149
+
150
+ $action = property_exists( $this, 'lazy_resolve_action' ) ?
151
+ $this->lazy_resolve_action
152
+ : 'shutdown';
153
+ $priority = property_exists( $this, 'lazy_resolve_priority' ) ?
154
+ $this->lazy_resolve_priority
155
+ : 10;
156
+
157
+ $hooked = has_action( $action, $this->lazy_resolve_callback );
158
+
159
+ // Let's play it safe and move the resoloution as late as possible.
160
+ $new_priority = false !== $hooked ? max( $hooked, $priority ) : $priority;
161
+
162
+ if ( is_numeric( $hooked ) && $hooked !== $new_priority ) {
163
+ remove_action( $action, $this->lazy_resolve_callback, $hooked );
164
+ }
165
+
166
+ add_action( $action, $this->lazy_resolve_callback, $new_priority );
167
+ }
168
+ }
common/src/Tribe/Utils/Lazy_String.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * A string lazily built, suited to any string value that might be costly to be built.
4
+ *
5
+ * @since 4.9.16
6
+ *
7
+ * @package Tribe\Utils
8
+ */
9
+
10
+
11
+ namespace Tribe\Utils;
12
+
13
+
14
+ class Lazy_String implements \Serializable, \JsonSerializable {
15
+ use Lazy_Events;
16
+
17
+ /**
18
+ * The string value produced by the callback, cached.
19
+ *
20
+ * @since 4.9.16
21
+ *
22
+ * @var string
23
+ */
24
+ protected $string;
25
+
26
+ /**
27
+ * The callback that will be used to set the string value when called the first time.
28
+ *
29
+ * @since 4.9.16
30
+ *
31
+ * @var callable
32
+ */
33
+ protected $value_callback;
34
+
35
+ /**
36
+ * The callback that will be used to escape the string in the `escaped()` method..
37
+ *
38
+ * @since 4.9.16
39
+ *
40
+ * @var callable
41
+ */
42
+ protected $escape_callback;
43
+
44
+ /**
45
+ * The escaped string value.
46
+ *
47
+ * @since 4.9.16
48
+ *
49
+ * @var string
50
+ */
51
+ protected $escaped;
52
+
53
+ /**
54
+ * Lazy_String constructor.
55
+ *
56
+ * @param callable $callback The callback that will be used to populate the string on the first fetch.
57
+ * @param string|false $escape_callback The callback that will be used to escape the string in the `escaped`
58
+ * method.
59
+ */
60
+ public function __construct( callable $callback, $escape_callback = 'esc_html' ) {
61
+ $this->value_callback = $callback;
62
+ $this->escape_callback = $escape_callback;
63
+ }
64
+
65
+ /**
66
+ * Inits, and returns, the string value of the string.
67
+ *
68
+ * @since 4.9.16
69
+ *
70
+ * @return string The unescaped string value.
71
+ */
72
+ public function __toString() {
73
+ if ( null === $this->string ) {
74
+ $this->string = call_user_func( $this->value_callback );
75
+ $this->resolved();
76
+ }
77
+
78
+ return $this->string;
79
+ }
80
+
81
+ /**
82
+ * Returns the HTML ready, escaped version of the string.
83
+ *
84
+ * @since 4.9.16
85
+ *
86
+ * @return string The escaped version of the string.
87
+ */
88
+ public function escaped() {
89
+ if ( null !== $this->escaped ) {
90
+ return $this->escaped;
91
+ }
92
+
93
+ $this->escaped = empty( $this->escape_callback )
94
+ ? $this->__toString()
95
+ : call_user_func( $this->escape_callback, $this->__toString() );
96
+
97
+ return $this->escaped;
98
+ }
99
+
100
+ /**
101
+ * Returns the string value, just a proxy of the `__toString` method.
102
+ *
103
+ * @since 4.9.16
104
+ *
105
+ * @return string The string value.
106
+ */
107
+ public function value() {
108
+ return $this->__toString();
109
+ }
110
+
111
+ /**
112
+ * {@inheritDoc}
113
+ *
114
+ * @since 4.9.16
115
+ */
116
+ public function serialize() {
117
+ $serialized = serialize( [ $this->__toString(), $this->escaped() ] );
118
+
119
+ unset( $this->value_callback, $this->escape_callback );
120
+
121
+ return $serialized;
122
+ }
123
+
124
+ /**
125
+ * {@inheritDoc}
126
+ *
127
+ * @since 4.9.16
128
+ */
129
+ public function unserialize( $serialized ) {
130
+ list( $string, $escaped ) = unserialize( $serialized );
131
+ $this->string = $string;
132
+ $this->escaped = $escaped;
133
+ }
134
+
135
+ /**
136
+ * {@inheritDoc}
137
+ */
138
+ public function jsonSerialize() {
139
+ return $this->value();
140
+ }
141
+ }
common/src/Tribe/Utils/Post_Thumbnail.php CHANGED
@@ -28,6 +28,8 @@ use Tribe__Utils__Array as Arr;
28
  * @package Tribe\Utils
29
  */
30
  class Post_Thumbnail implements \ArrayAccess, \Serializable {
 
 
31
  /**
32
  * An array of the site image sizes, including the `full` one.
33
  *
@@ -55,6 +57,24 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
55
  */
56
  protected $data;
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  /**
59
  * Post_Images constructor.
60
  *
@@ -68,6 +88,10 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
68
  * {@inheritDoc}
69
  */
70
  public function __get( $property ) {
 
 
 
 
71
  return $this->offsetGet( $property );
72
  }
73
 
@@ -75,6 +99,10 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
75
  * {@inheritDoc}
76
  */
77
  public function __set( $property, $value ) {
 
 
 
 
78
  $this->offsetSet( $property, $value );
79
  }
80
 
@@ -119,18 +147,17 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
119
  * @return array An array of objects containing the post thumbnail data.
120
  */
121
  public function fetch_data() {
 
 
 
 
122
  if ( null !== $this->data ) {
123
  return $this->data;
124
  }
125
 
126
- $post_id = $this->post_id;
127
- $image_sizes = $this->get_image_sizes();
128
-
129
- $thumbnail_id = get_post_thumbnail_id( $post_id );
130
-
131
- if ( empty( $thumbnail_id ) ) {
132
- return [];
133
- }
134
 
135
  $thumbnail_data = array_combine(
136
  $image_sizes,
@@ -173,6 +200,8 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
173
  */
174
  $thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $thumbnail_data, $post_id );
175
 
 
 
176
  return $thumbnail_data;
177
  }
178
 
@@ -247,4 +276,28 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
247
  unset( $data['post_id'] );
248
  $this->data = $data;
249
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  }
28
  * @package Tribe\Utils
29
  */
30
  class Post_Thumbnail implements \ArrayAccess, \Serializable {
31
+ use Lazy_Events;
32
+
33
  /**
34
  * An array of the site image sizes, including the `full` one.
35
  *
57
  */
58
  protected $data;
59
 
60
+ /**
61
+ * A flag property indicating whether the post thumbnail for the post exists or not.
62
+ *
63
+ * @since 4.9.16
64
+ *
65
+ * @var bool
66
+ */
67
+ protected $exists;
68
+
69
+ /**
70
+ * The post ID, if any, of the post thumbnail.
71
+ *
72
+ * @since 4.9.16
73
+ *
74
+ * @var int
75
+ */
76
+ protected $thumbnail_id;
77
+
78
  /**
79
  * Post_Images constructor.
80
  *
88
  * {@inheritDoc}
89
  */
90
  public function __get( $property ) {
91
+ if ( 'exists' === $property ) {
92
+ return $this->exists();
93
+ }
94
+
95
  return $this->offsetGet( $property );
96
  }
97
 
99
  * {@inheritDoc}
100
  */
101
  public function __set( $property, $value ) {
102
+ if ( 'exists' === $property ) {
103
+ throw new \InvalidArgumentException( 'The `Post_Thumbnail::exists` property cannot be set.' );
104
+ }
105
+
106
  $this->offsetSet( $property, $value );
107
  }
108
 
147
  * @return array An array of objects containing the post thumbnail data.
148
  */
149
  public function fetch_data() {
150
+ if ( ! $this->exists() ) {
151
+ return [];
152
+ }
153
+
154
  if ( null !== $this->data ) {
155
  return $this->data;
156
  }
157
 
158
+ $post_id = $this->post_id;
159
+ $image_sizes = $this->get_image_sizes();
160
+ $thumbnail_id = $this->thumbnail_id;
 
 
 
 
 
161
 
162
  $thumbnail_data = array_combine(
163
  $image_sizes,
200
  */
201
  $thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $thumbnail_data, $post_id );
202
 
203
+ $this->resolved();
204
+
205
  return $thumbnail_data;
206
  }
207
 
276
  unset( $data['post_id'] );
277
  $this->data = $data;
278
  }
279
+
280
+ /**
281
+ * Returns whether a post thumbnail is set for the post or not.
282
+ *
283
+ * @since 4.9.16
284
+ *
285
+ * @return bool Whether a post thumbnail is set for the post or not.
286
+ */
287
+ public function exists() {
288
+ if ( null !== $this->exists ) {
289
+ return $this->exists;
290
+ }
291
+
292
+ $thumbnail_id = get_post_thumbnail_id( $this->post_id );
293
+
294
+ if ( empty( $thumbnail_id ) ) {
295
+ $this->exists = false;
296
+ } else {
297
+ $this->thumbnail_id = $thumbnail_id;
298
+ $this->exists = true;
299
+ }
300
+
301
+ return $this->exists;
302
+ }
303
  }
common/src/resources/css/tribe-common-admin.css CHANGED
@@ -24,8 +24,20 @@
24
  cursor: text;
25
  padding: 4px 4px 4px 4px;
26
  }
27
- input:placeholder,
28
- textarea:placeholder {
 
 
 
 
 
 
 
 
 
 
 
 
29
  color: #999;
30
  }
31
  input::-webkit-input-placeholder,
@@ -36,7 +48,7 @@ textarea::-webkit-input-placeholder {
36
  -khtml-border-radius: 3px;
37
  background-color: #f9f9f9;
38
  border-color: #dfdfdf;
39
- border-radius: 3px;
40
  border-spacing: 0;
41
  border-style: solid;
42
  border-style: solid;
@@ -55,7 +67,7 @@ td.tribe_message {
55
  width: 200px;
56
  }
57
  .tribe_brand {
58
- font-family: Georgia !important;
59
  font-size: 17px !important;
60
  font-weight: normal;
61
  margin: 8px 0;
@@ -65,14 +77,14 @@ td.tribe_message {
65
  #tribe-upgrade {
66
  background: #f6f6f6;
67
  border: 1px solid #ccc;
68
- border-radius: 5px;
69
  margin: 20px 0 30px;
70
  padding: 0 20px 20px;
71
  }
72
  #tribe-upgrade .message {
73
  background-color: #ffffe0;
74
  border-color: #e6db55;
75
- border-radius: 3px;
76
  border-style: solid;
77
  border-width: 1px;
78
  padding: 6px 12px;
@@ -80,121 +92,119 @@ td.tribe_message {
80
  /* = Plugin Screen
81
  =============================================*/
82
  table.plugins .tribe-plugin-update-message {
83
- background: #d54e21; /* taken from colour scheme in list-tables.css */
84
- color: white;
85
- display: inline-table;
86
- margin: 6px 0;
87
- padding: 10px 12px;
88
- }
89
  table.plugins .tribe-plugin-update-message h4 {
90
- display: inline;
91
- font-weight: bold;
92
- margin-right: 8px;
93
- }
94
  table.plugins .tribe-plugin-update-message h4:after {
95
- content: ' \00BB ';
96
- }
97
  table.plugins .tribe-plugin-update-message a {
98
- color: white;
99
- text-decoration: underline;
100
- }
101
  /* = Settings Screen
102
  =============================================*/
103
  .tribe-settings-form {
104
  max-width: 1000px;
105
  }
106
  .tribe-settings-form fieldset {
107
- clear: both;
108
- display: inline-block;
109
- padding: 10px 0;
110
- }
111
- .tribe-settings-form legend {
112
- float: left;
113
- font-weight: bold;
114
- margin-right: 20px;
115
- width: 220px;
116
- }
117
  .tribe-settings-form fieldset.tribe-field-license_key legend {
118
- width: auto;
119
- }
 
 
 
 
 
 
120
  .tribe-settings-form .tribe-field-wrap {
121
- float: left;
122
- max-width: 500px;
123
- }
124
- .tribe-settings-form .tribe-field-wrap *:first-child {
125
- margin-top: 0;
126
  }
127
- .tribe-settings-form .tribe-field-radio label,
128
- .tribe-settings-form .tribe-field-checkbox_list label {
129
- display: block;
130
- margin: 5px 0 5px 20px;
131
- text-indent: -20px;
132
- }
133
- .tribe-settings-form .tribe-field-radio label input,
134
- .tribe-settings-form .tribe-field-checkbox_list label input {
135
- margin-right: 5px;
136
- }
 
 
 
 
 
137
  .tribe-settings-form .tribe-settings-form-wrap fieldset,
138
- .tribe-settings-form .tribe-settings-form-wrap .description,
139
- .tribe-settings-form fieldset[id^='tribe-field-geoloc_'] {
140
- padding-left: 12px;
141
- }
142
  .tribe-settings-form .tribe-settings-form-wrap fieldset .description {
143
- margin-left: 0;
144
- max-width: 450px;
145
- padding-left: 0;
146
- }
 
 
 
147
  .tribe-settings-form .tribe-settings-form-wrap h3 {
148
- background-color: #f9f9f9;
149
- margin-bottom: 10px;
150
- padding: 6px 0 6px 12px;
151
- }
152
  .tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,
153
- .tribe-settings-form .tribe-settings-form-wrap .system-info,
154
- .tribe-settings-form .tribe-settings-form-wrap h3 + p,
155
- .tribe-settings-form .tribe-settings-form-wrap .contained {
156
- margin: 0 0 10px;
157
- padding-left: 12px;
158
- }
 
 
 
159
  .tribe_settings .tribe-field-indent {
160
- margin-left: 245px;
161
- }
162
  .tribe_settings #pu_dashboard_message {
163
- display: none;
164
- }
165
  .tribe_settings .tribe-errors-list {
166
- margin-left: 15px;
167
- }
168
  .tribe_settings .expiring-license {
169
- color: red;
170
- }
171
  .tribe_settings .tribe-error {
172
- border: 1px solid #f00;
173
- }
174
  .tribe_settings .tribe-field-description {
175
- margin-bottom: 0;
176
- position: relative;
177
- top: -12px;
178
- }
179
  .tribe_settings #ical-link {
180
- top: -14px;
181
- }
182
- .tribe-settings-form #tribe-field-stylesheetOption label {
183
- margin-left: 20px;
184
- }
185
- .tribe-settings-form #tribe-field-stylesheetOption input {
186
- margin-left: -20px;
187
- margin-right: 8px;
188
- }
189
- .tribe-settings-form #tribe-field-stylesheetOption p.description {
190
- color: #999;
191
- }
192
  /* Modern Tribe box */
193
  #modern-tribe-info {
194
  -khtml-border-radius: 4px;
195
  background-color: #f9f9f9;
196
  border: 1px solid #ccc;
197
- border-radius: 4px;
198
  margin: 20px 0;
199
  padding: 8px 20px 12px;
200
  }
@@ -326,7 +336,7 @@ table.plugins .tribe-plugin-update-message a {
326
  -khtml-border-radius: 4px;
327
  background-color: #f9f9f9;
328
  border: 1px solid #ccc;
329
- border-radius: 4px;
330
  float: left;
331
  margin: 20px 0;
332
  padding: 0 20px 15px;
@@ -336,7 +346,7 @@ table.plugins .tribe-plugin-update-message a {
336
  -khtml-border-radius: 4px;
337
  background-color: #f9f9f9;
338
  border: 1px solid #ccc;
339
- border-radius: 4px;
340
  float: right;
341
  margin: 20px 0;
342
  padding: 0 20px 15px;
@@ -378,9 +388,6 @@ table.plugins .tribe-plugin-update-message a {
378
  .tribe_events_active_filter_type_options label {
379
  margin: 7px 0;
380
  }
381
- .tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection {
382
- margin-bottom: 18px;
383
- }
384
  .OrganizerInfo td small,
385
  #event_organizer td small {
386
  display: block;
@@ -436,7 +443,7 @@ table.plugins .tribe-plugin-update-message a {
436
  -khtml-border-radius: 4px;
437
  background-color: #f9f9f9;
438
  border: 1px solid #ccc;
439
- border-radius: 4px;
440
  padding: 8px 20px 12px;
441
  }
442
  .tribe-section-type-box img {
@@ -493,11 +500,11 @@ table.plugins .tribe-plugin-update-message a {
493
  padding-left: 10px;
494
  }
495
  .system-info-copy .system-info-copy-btn {
496
- padding: 6px;
497
  }
498
  .system-info-copy .system-info-copy-btn .dashicons {
499
- padding-right: 10px;
500
- }
501
  .template-updates-wrapper p {
502
  margin-top: 0;
503
  }
24
  cursor: text;
25
  padding: 4px 4px 4px 4px;
26
  }
27
+ input::-webkit-input-placeholder,
28
+ textarea::-webkit-input-placeholder {
29
+ color: #999;
30
+ }
31
+ input:-ms-input-placeholder,
32
+ textarea:-ms-input-placeholder {
33
+ color: #999;
34
+ }
35
+ input::-ms-input-placeholder,
36
+ textarea::-ms-input-placeholder {
37
+ color: #999;
38
+ }
39
+ input::placeholder,
40
+ textarea::placeholder {
41
  color: #999;
42
  }
43
  input::-webkit-input-placeholder,
48
  -khtml-border-radius: 3px;
49
  background-color: #f9f9f9;
50
  border-color: #dfdfdf;
51
+ border-radius: 3px;
52
  border-spacing: 0;
53
  border-style: solid;
54
  border-style: solid;
67
  width: 200px;
68
  }
69
  .tribe_brand {
70
+ font-family: Georgia, serif !important;
71
  font-size: 17px !important;
72
  font-weight: normal;
73
  margin: 8px 0;
77
  #tribe-upgrade {
78
  background: #f6f6f6;
79
  border: 1px solid #ccc;
80
+ border-radius: 5px;
81
  margin: 20px 0 30px;
82
  padding: 0 20px 20px;
83
  }
84
  #tribe-upgrade .message {
85
  background-color: #ffffe0;
86
  border-color: #e6db55;
87
+ border-radius: 3px;
88
  border-style: solid;
89
  border-width: 1px;
90
  padding: 6px 12px;
92
  /* = Plugin Screen
93
  =============================================*/
94
  table.plugins .tribe-plugin-update-message {
95
+ background: #D54E21; /* taken from colour scheme in list-tables.css */
96
+ color: white;
97
+ display: inline-table;
98
+ margin: 6px 0;
99
+ padding: 10px 12px;
100
+ }
101
  table.plugins .tribe-plugin-update-message h4 {
102
+ display: inline;
103
+ font-weight: bold;
104
+ margin-right: 8px;
105
+ }
106
  table.plugins .tribe-plugin-update-message h4:after {
107
+ content: ' \00BB ';
108
+ }
109
  table.plugins .tribe-plugin-update-message a {
110
+ color: white;
111
+ text-decoration: underline;
112
+ }
113
  /* = Settings Screen
114
  =============================================*/
115
  .tribe-settings-form {
116
  max-width: 1000px;
117
  }
118
  .tribe-settings-form fieldset {
119
+ clear: both;
120
+ display: inline-block;
121
+ padding: 10px 0;
122
+ }
 
 
 
 
 
 
123
  .tribe-settings-form fieldset.tribe-field-license_key legend {
124
+ width: auto;
125
+ }
126
+ .tribe-settings-form legend {
127
+ float: left;
128
+ font-weight: bold;
129
+ margin-right: 20px;
130
+ width: 220px;
131
+ }
132
  .tribe-settings-form .tribe-field-wrap {
133
+ float: left;
134
+ max-width: 500px;
 
 
 
135
  }
136
+ .tribe-settings-form .tribe-field-wrap *:first-child {
137
+ margin-top: 0;
138
+ }
139
+ .tribe-settings-form .tribe-field-radio label, .tribe-settings-form .tribe-field-checkbox_list label {
140
+ display: block;
141
+ margin: 5px 0 5px 20px;
142
+ text-indent: -20px;
143
+ }
144
+ .tribe-settings-form .tribe-field-radio label > p, .tribe-settings-form .tribe-field-checkbox_list label > p {
145
+ text-indent: 0;
146
+ margin-left: 1px;
147
+ }
148
+ .tribe-settings-form .tribe-field-radio label input, .tribe-settings-form .tribe-field-checkbox_list label input {
149
+ margin-right: 5px;
150
+ }
151
  .tribe-settings-form .tribe-settings-form-wrap fieldset,
152
+ .tribe-settings-form .tribe-settings-form-wrap .description,
153
+ .tribe-settings-form fieldset[id^='tribe-field-geoloc_'] {
154
+ padding-left: 12px;
155
+ }
156
  .tribe-settings-form .tribe-settings-form-wrap fieldset .description {
157
+ margin-left: 0;
158
+ max-width: 450px;
159
+ padding-left: 0;
160
+ }
161
+ .tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection {
162
+ margin-bottom: 18px;
163
+ }
164
  .tribe-settings-form .tribe-settings-form-wrap h3 {
165
+ background-color: #f9f9f9;
166
+ margin-bottom: 10px;
167
+ padding: 6px 0 6px 12px;
168
+ }
169
  .tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,
170
+ .tribe-settings-form .tribe-settings-form-wrap .system-info,
171
+ .tribe-settings-form .tribe-settings-form-wrap h3 + p,
172
+ .tribe-settings-form .tribe-settings-form-wrap .contained {
173
+ margin: 0 0 10px;
174
+ padding-left: 12px;
175
+ }
176
+ .tribe-settings-form #tribe-field-stylesheetOption p.description {
177
+ color: #999;
178
+ }
179
  .tribe_settings .tribe-field-indent {
180
+ margin-left: 245px;
181
+ }
182
  .tribe_settings #pu_dashboard_message {
183
+ display: none;
184
+ }
185
  .tribe_settings .tribe-errors-list {
186
+ margin-left: 15px;
187
+ }
188
  .tribe_settings .expiring-license {
189
+ color: red;
190
+ }
191
  .tribe_settings .tribe-error {
192
+ border: 1px solid #f00;
193
+ }
194
  .tribe_settings .tribe-field-description {
195
+ margin-bottom: 0;
196
+ position: relative;
197
+ top: -12px;
198
+ }
199
  .tribe_settings #ical-link {
200
+ top: -14px;
201
+ }
 
 
 
 
 
 
 
 
 
 
202
  /* Modern Tribe box */
203
  #modern-tribe-info {
204
  -khtml-border-radius: 4px;
205
  background-color: #f9f9f9;
206
  border: 1px solid #ccc;
207
+ border-radius: 4px;
208
  margin: 20px 0;
209
  padding: 8px 20px 12px;
210
  }
336
  -khtml-border-radius: 4px;
337
  background-color: #f9f9f9;
338
  border: 1px solid #ccc;
339
+ border-radius: 4px;
340
  float: left;
341
  margin: 20px 0;
342
  padding: 0 20px 15px;
346
  -khtml-border-radius: 4px;
347
  background-color: #f9f9f9;
348
  border: 1px solid #ccc;
349
+ border-radius: 4px;
350
  float: right;
351
  margin: 20px 0;
352
  padding: 0 20px 15px;
388
  .tribe_events_active_filter_type_options label {
389
  margin: 7px 0;
390
  }
 
 
 
391
  .OrganizerInfo td small,
392
  #event_organizer td small {
393
  display: block;
443
  -khtml-border-radius: 4px;
444
  background-color: #f9f9f9;
445
  border: 1px solid #ccc;
446
+ border-radius: 4px;
447
  padding: 8px 20px 12px;
448
  }
449
  .tribe-section-type-box img {
500
  padding-left: 10px;
501
  }
502
  .system-info-copy .system-info-copy-btn {
503
+ padding: 6px;
504
  }
505
  .system-info-copy .system-info-copy-btn .dashicons {
506
+ padding-right: 10px;
507
+ }
508
  .template-updates-wrapper p {
509
  margin-top: 0;
510
  }
common/src/resources/css/tribe-common-admin.min.css CHANGED
@@ -1 +1 @@
1
- .invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input:placeholder,textarea:placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{-khtml-border-radius:3px;background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;border-style:solid;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}.tribe-settings-form #tribe-field-stylesheetOption label{margin-left:20px}.tribe-settings-form #tribe-field-stylesheetOption input{margin-left:-20px;margin-right:8px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}#modern-tribe-info{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;-webkit-border-radius:5px;-moz-border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;webkit-transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.select2-container .select2-choice abbr{top:6px}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container-active .select2-choice,.tribe-ea-dropdown.select2-container-active .select2-choice{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-dropdown-open .select2-choice,.tribe-ea-dropdown.select2-dropdown-open .select2-choice{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown .select2-choice,.tribe-ea-dropdown .select2-choice{background-image:none;border-radius:3px;border:1px solid #ccc}.tribe-dropdown .select2-choice>.select2-chosen,.tribe-ea-dropdown .select2-choice>.select2-chosen{white-space:normal}.tribe-dropdown .select2-choice .select2-arrow,.tribe-ea-dropdown .select2-choice .select2-arrow{background-image:none;background:transparent;border-left:0}.tribe-dropdown .select2-choice div,.tribe-ea-dropdown .select2-choice div{background-image:none;background:none;border-left:0}.tribe-dropdown.select2-container-multi .select2-choices,.tribe-ea-dropdown.select2-container-multi .select2-choices{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field{line-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field input,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field input{padding-top:0;padding-bottom:0}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice div,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice div{line-height:inherit}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice-close,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice-close{top:3px;left:4px;transition-property:border,color}.select2-results .select2-selected{display:block}.select2-results .select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:400}.select2-results li.select2-result-with-children.select2-selected,.select2-results li.select2-result-with-children.select2-selected .select2-result{display:block}.select2-results li.select2-result-with-children.select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children.select2-result-unselectable>.select2-result-label{color:#939393;font-weight:400}.wp-core-ui .button-red{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5);background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-choice .select2-arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
1
+ .invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{-khtml-border-radius:3px;background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;border-style:solid;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;-webkit-border-radius:5px;-moz-border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;webkit-transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.select2-container .select2-choice abbr{top:6px}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container-active .select2-choice,.tribe-ea-dropdown.select2-container-active .select2-choice{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-dropdown-open .select2-choice,.tribe-ea-dropdown.select2-dropdown-open .select2-choice{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown .select2-choice,.tribe-ea-dropdown .select2-choice{background-image:none;border-radius:3px;border:1px solid #ccc}.tribe-dropdown .select2-choice>.select2-chosen,.tribe-ea-dropdown .select2-choice>.select2-chosen{white-space:normal}.tribe-dropdown .select2-choice .select2-arrow,.tribe-ea-dropdown .select2-choice .select2-arrow{background-image:none;background:transparent;border-left:0}.tribe-dropdown .select2-choice div,.tribe-ea-dropdown .select2-choice div{background-image:none;background:none;border-left:0}.tribe-dropdown.select2-container-multi .select2-choices,.tribe-ea-dropdown.select2-container-multi .select2-choices{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field{line-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field input,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field input{padding-top:0;padding-bottom:0}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice div,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice div{line-height:inherit}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice-close,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice-close{top:3px;left:4px;transition-property:border,color}.select2-results .select2-selected{display:block}.select2-results .select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:400}.select2-results li.select2-result-with-children.select2-selected,.select2-results li.select2-result-with-children.select2-selected .select2-result{display:block}.select2-results li.select2-result-with-children.select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children.select2-result-unselectable>.select2-result-label{color:#939393;font-weight:400}.wp-core-ui .button-red{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5);background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-choice .select2-arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
common/src/resources/images/mascot.png CHANGED
Binary file
common/src/resources/js/tooltip.js CHANGED
@@ -1,3 +1,4 @@
 
1
  tribe.tooltip = tribe.tooltip || {};
2
 
3
  ( function ( $, obj ) {
@@ -14,7 +15,7 @@ tribe.tooltip = tribe.tooltip || {};
14
  */
15
  obj.selectors = {
16
  tooltip: '.tribe-tooltip',
17
- active: '.active',
18
  };
19
 
20
  /**
@@ -38,17 +39,17 @@ tribe.tooltip = tribe.tooltip || {};
38
  */
39
  obj.onClick = function () {
40
  var $tooltip = $( this ).closest( obj.selectors.tooltip );
41
- var add = ! $tooltip.hasClass( obj.selectors.active.className );
42
 
43
  $( obj.selectors.tooltip ).each( function () {
44
- $( this ).removeClass( obj.selectors.active.className ).attr( 'aria-expanded', false );
45
  } );
46
 
47
  if ( add ) {
48
- $( $tooltip ).addClass( obj.selectors.active.className ).attr( 'aria-expanded', true );
49
  }
50
  };
51
 
52
  $document.ready( obj.setup );
53
 
54
- } )( jQuery, tribe.tooltip );
1
+ var tribe = tribe || {};
2
  tribe.tooltip = tribe.tooltip || {};
3
 
4
  ( function ( $, obj ) {
15
  */
16
  obj.selectors = {
17
  tooltip: '.tribe-tooltip',
18
+ active: 'active',
19
  };
20
 
21
  /**
39
  */
40
  obj.onClick = function () {
41
  var $tooltip = $( this ).closest( obj.selectors.tooltip );
42
+ var add = ! $tooltip.hasClass( obj.selectors.active );
43
 
44
  $( obj.selectors.tooltip ).each( function () {
45
+ $( this ).removeClass( obj.selectors.active ).attr( 'aria-expanded', false );
46
  } );
47
 
48
  if ( add ) {
49
+ $( $tooltip ).addClass( obj.selectors.active ).attr( 'aria-expanded', true );
50
  }
51
  };
52
 
53
  $document.ready( obj.setup );
54
 
55
+ } )( jQuery, tribe.tooltip );
common/src/resources/js/tooltip.min.js CHANGED
@@ -1 +1 @@
1
- tribe.tooltip=tribe.tooltip||{},function(t,e){"use strict";var s=t(document);e.selectors={tooltip:".tribe-tooltip",active:".active"},e.setup=function(){s.on("click",e.selectors.tooltip,e.onClick)},e.onClick=function(){var s=t(this).closest(e.selectors.tooltip),o=!s.hasClass(e.selectors.active.className);t(e.selectors.tooltip).each(function(){t(this).removeClass(e.selectors.active.className).attr("aria-expanded",!1)}),o&&t(s).addClass(e.selectors.active.className).attr("aria-expanded",!0)},s.ready(e.setup)}(jQuery,tribe.tooltip);
1
+ var tribe=tribe||{};tribe.tooltip=tribe.tooltip||{},function(t,e){"use strict";var o=t(document);e.selectors={tooltip:".tribe-tooltip",active:"active"},e.setup=function(){o.on("click",e.selectors.tooltip,e.onClick)},e.onClick=function(){var o=t(this).closest(e.selectors.tooltip),i=!o.hasClass(e.selectors.active);t(e.selectors.tooltip).each(function(){t(this).removeClass(e.selectors.active).attr("aria-expanded",!1)}),i&&t(o).addClass(e.selectors.active).attr("aria-expanded",!0)},o.ready(e.setup)}(jQuery,tribe.tooltip);
common/src/resources/postcss/tribe-common-admin.pcss CHANGED
@@ -14,8 +14,8 @@
14
  cursor: text;
15
  padding: 4px 4px 4px 4px;
16
  }
17
- input:placeholder,
18
- textarea:placeholder {
19
  color: #999;
20
  }
21
  input::-webkit-input-placeholder,
@@ -28,7 +28,7 @@ textarea::-webkit-input-placeholder {
28
  border-color: #dfdfdf;
29
  -webkit-border-radius: 3px;
30
  -moz-border-radius: 3px;
31
- border-radius: 3px;
32
  border-spacing: 0;
33
  border-style: solid;
34
  border-style: solid;
@@ -48,7 +48,7 @@ td.tribe_message {
48
  width: 200px;
49
  }
50
  .tribe_brand {
51
- font-family: Georgia !important;
52
  font-size: 17px !important;
53
  font-weight: normal;
54
  margin: 8px 0;
@@ -61,7 +61,7 @@ td.tribe_message {
61
  border: 1px solid #ccc;
62
  -webkit-border-radius: 5px;
63
  -moz-border-radius: 5px;
64
- border-radius: 5px;
65
  margin: 20px 0 30px;
66
  padding: 0 20px 20px;
67
  }
@@ -70,7 +70,7 @@ td.tribe_message {
70
  border-color: #e6db55;
71
  -webkit-border-radius: 3px;
72
  -moz-border-radius: 3px;
73
- border-radius: 3px;
74
  border-style: solid;
75
  border-width: 1px;
76
  padding: 6px 12px;
@@ -78,122 +78,153 @@ td.tribe_message {
78
 
79
  /* = Plugin Screen
80
  =============================================*/
81
- table.plugins .tribe-plugin-update-message {
82
- background: #d54e21; /* taken from colour scheme in list-tables.css */
83
- color: white;
84
- display: inline-table;
85
- margin: 6px 0;
86
- padding: 10px 12px;
87
- }
88
-
89
- table.plugins .tribe-plugin-update-message h4 {
90
- display: inline;
91
- font-weight: bold;
92
- margin-right: 8px;
93
- }
94
-
95
- table.plugins .tribe-plugin-update-message h4:after {
96
- content: ' \00BB ';
97
- }
98
 
 
 
 
 
99
 
100
- table.plugins .tribe-plugin-update-message a {
101
- color: white;
102
- text-decoration: underline;
 
 
103
  }
104
 
105
  /* = Settings Screen
106
  =============================================*/
107
  .tribe-settings-form {
108
  max-width: 1000px;
109
- }
110
- .tribe-settings-form fieldset {
111
- clear: both;
112
- display: inline-block;
113
- padding: 10px 0;
114
- }
115
- .tribe-settings-form legend {
116
- float: left;
117
- font-weight: bold;
118
- margin-right: 20px;
119
- width: 220px;
120
- }
121
- .tribe-settings-form fieldset.tribe-field-license_key legend {
122
- width: auto;
123
- }
124
- .tribe-settings-form .tribe-field-wrap {
125
- float: left;
126
- max-width: 500px;
127
 
128
- *:first-child {
129
- margin-top: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  }
131
  }
132
- .tribe-settings-form .tribe-field-radio label,
133
- .tribe-settings-form .tribe-field-checkbox_list label {
134
- display: block;
135
- margin: 5px 0 5px 20px;
136
- text-indent: -20px;
137
- }
138
- .tribe-settings-form .tribe-field-radio label input,
139
- .tribe-settings-form .tribe-field-checkbox_list label input {
140
- margin-right: 5px;
141
- }
142
- .tribe-settings-form .tribe-settings-form-wrap fieldset,
143
- .tribe-settings-form .tribe-settings-form-wrap .description,
144
- .tribe-settings-form fieldset[id^='tribe-field-geoloc_'] {
145
- padding-left: 12px;
146
- }
147
- .tribe-settings-form .tribe-settings-form-wrap fieldset .description {
148
- margin-left: 0;
149
- max-width: 450px;
150
- padding-left: 0;
151
- }
152
- .tribe-settings-form .tribe-settings-form-wrap h3 {
153
- background-color: #f9f9f9;
154
- margin-bottom: 10px;
155
- padding: 6px 0 6px 12px;
156
- }
157
- .tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,
158
- .tribe-settings-form .tribe-settings-form-wrap .system-info,
159
- .tribe-settings-form .tribe-settings-form-wrap h3 + p,
160
- .tribe-settings-form .tribe-settings-form-wrap .contained {
161
- margin: 0 0 10px;
162
- padding-left: 12px;
163
- }
164
- .tribe_settings .tribe-field-indent {
165
- margin-left: 245px;
166
- }
167
- .tribe_settings #pu_dashboard_message {
168
- display: none;
169
- }
170
- .tribe_settings .tribe-errors-list {
171
- margin-left: 15px;
172
- }
173
- .tribe_settings .expiring-license {
174
- color: red;
175
- }
176
- .tribe_settings .tribe-error {
177
- border: 1px solid #f00;
178
- }
179
- .tribe_settings .tribe-field-description {
180
- margin-bottom: 0;
181
- position: relative;
182
- top: -12px;
183
- }
184
- .tribe_settings #ical-link {
185
- top: -14px;
186
- }
187
- .tribe-settings-form #tribe-field-stylesheetOption label {
188
- margin-left: 20px;
189
- }
190
- .tribe-settings-form #tribe-field-stylesheetOption input {
191
- margin-left: -20px;
192
- margin-right: 8px;
193
- }
194
- .tribe-settings-form #tribe-field-stylesheetOption p.description {
195
- color: #999;
196
  }
 
197
  /* Modern Tribe box */
198
  #modern-tribe-info {
199
  -khtml-border-radius: 4px;
@@ -201,20 +232,23 @@ table.plugins .tribe-plugin-update-message a {
201
  border: 1px solid #ccc;
202
  -webkit-border-radius: 4px;
203
  -moz-border-radius: 4px;
204
- -o-border-radius: 4px;
205
- border-radius: 4px;
206
  margin: 20px 0;
207
  padding: 8px 20px 12px;
208
  }
 
209
  #modern-tribe-info img {
210
  height: 18px;
211
  margin: 10px 0;
212
  width: 250px;
213
  }
 
214
  #modern-tribe-info ul {
215
  list-style: disc;
216
  margin-left: 20px;
217
  }
 
218
  #modern-tribe-info ul ul {
219
  list-style: circle;
220
  }
@@ -354,8 +388,8 @@ table.plugins .tribe-plugin-update-message a {
354
  border: 1px solid #ccc;
355
  -webkit-border-radius: 4px;
356
  -moz-border-radius: 4px;
357
- -o-border-radius: 4px;
358
- border-radius: 4px;
359
  float: left;
360
  margin: 20px 0;
361
  padding: 0 20px 15px;
@@ -367,8 +401,8 @@ table.plugins .tribe-plugin-update-message a {
367
  border: 1px solid #ccc;
368
  -webkit-border-radius: 4px;
369
  -moz-border-radius: 4px;
370
- -o-border-radius: 4px;
371
- border-radius: 4px;
372
  float: right;
373
  margin: 20px 0;
374
  padding: 0 20px 15px;
@@ -381,7 +415,7 @@ table.plugins .tribe-plugin-update-message a {
381
  .tribe-arrangeable-item {
382
  border: 1px solid lightGrey;
383
  -moz-border-radius: 3px;
384
- border-radius: 3px;
385
  }
386
  .tribe-arrangeable-item .ui-state-default {
387
  border: none;
@@ -411,9 +445,7 @@ table.plugins .tribe-plugin-update-message a {
411
  .tribe_events_active_filter_type_options label {
412
  margin: 7px 0;
413
  }
414
- .tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection {
415
- margin-bottom: 18px;
416
- }
417
  .OrganizerInfo td small,
418
  #event_organizer td small {
419
  display: block;
@@ -483,8 +515,8 @@ table.plugins .tribe-plugin-update-message a {
483
  border: 1px solid #ccc;
484
  -webkit-border-radius: 4px;
485
  -moz-border-radius: 4px;
486
- -o-border-radius: 4px;
487
- border-radius: 4px;
488
  padding: 8px 20px 12px;
489
  }
490
 
@@ -553,11 +585,11 @@ table.plugins .tribe-plugin-update-message a {
553
 
554
  .system-info-copy {
555
  .system-info-copy-btn {
556
- padding: 6px;
557
 
558
- .dashicons {
559
- padding-right: 10px;
560
- }
561
  }
562
  }
563
 
@@ -805,7 +837,7 @@ table.plugins .tribe-plugin-update-message a {
805
  -moz-transition: all 1s linear;
806
  -ms-transition: all 1s linear;
807
  -o-transition: all 1s linear;
808
- transition: all 1s linear;
809
  webkit-transition: all 1s linear;
810
  width: 100%;
811
  z-index: 4;
@@ -814,7 +846,7 @@ table.plugins .tribe-plugin-update-message a {
814
  #tribe-loading span {
815
  background: url(../images/tribe-loading.gif) 0 0 no-repeat;
816
  -webkit-background-size: 32px 32px;
817
- background-size: 32px 32px;
818
  height: 32px;
819
  left: 50%;
820
  margin: -16px 0 0 -16px;
14
  cursor: text;
15
  padding: 4px 4px 4px 4px;
16
  }
17
+ input::placeholder,
18
+ textarea::placeholder {
19
  color: #999;
20
  }
21
  input::-webkit-input-placeholder,
28
  border-color: #dfdfdf;
29
  -webkit-border-radius: 3px;
30
  -moz-border-radius: 3px;
31
+ border-radius: 3px;
32
  border-spacing: 0;
33
  border-style: solid;
34
  border-style: solid;
48
  width: 200px;
49
  }
50
  .tribe_brand {
51
+ font-family: Georgia, serif !important;
52
  font-size: 17px !important;
53
  font-weight: normal;
54
  margin: 8px 0;
61
  border: 1px solid #ccc;
62
  -webkit-border-radius: 5px;
63
  -moz-border-radius: 5px;
64
+ border-radius: 5px;
65
  margin: 20px 0 30px;
66
  padding: 0 20px 20px;
67
  }
70
  border-color: #e6db55;
71
  -webkit-border-radius: 3px;
72
  -moz-border-radius: 3px;
73
+ border-radius: 3px;
74
  border-style: solid;
75
  border-width: 1px;
76
  padding: 6px 12px;
78
 
79
  /* = Plugin Screen
80
  =============================================*/
81
+ table.plugins {
82
+ .tribe-plugin-update-message {
83
+ background: #D54E21; /* taken from colour scheme in list-tables.css */
84
+ color: white;
85
+ display: inline-table;
86
+ margin: 6px 0;
87
+ padding: 10px 12px;
88
+
89
+ h4 {
90
+ display: inline;
91
+ font-weight: bold;
92
+ margin-right: 8px;
 
 
 
 
 
93
 
94
+ &:after {
95
+ content: ' \00BB ';
96
+ }
97
+ }
98
 
99
+ a {
100
+ color: white;
101
+ text-decoration: underline;
102
+ }
103
+ }
104
  }
105
 
106
  /* = Settings Screen
107
  =============================================*/
108
  .tribe-settings-form {
109
  max-width: 1000px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
 
111
+ fieldset {
112
+ clear: both;
113
+ display: inline-block;
114
+ padding: 10px 0;
115
+
116
+ &.tribe-field-license_key legend {
117
+ width: auto;
118
+ }
119
+ }
120
+
121
+ legend {
122
+ float: left;
123
+ font-weight: bold;
124
+ margin-right: 20px;
125
+ width: 220px;
126
+ }
127
+
128
+ .tribe-field-wrap {
129
+ float: left;
130
+ max-width: 500px;
131
+
132
+ *:first-child {
133
+ margin-top: 0;
134
+ }
135
+ }
136
+
137
+ .tribe-field-radio,
138
+ .tribe-field-checkbox_list {
139
+ label {
140
+ display: block;
141
+ margin: 5px 0 5px 20px;
142
+ text-indent: -20px;
143
+
144
+ > p {
145
+ text-indent: 0;
146
+ margin-left: 1px;
147
+ }
148
+
149
+ input {
150
+ margin-right: 5px;
151
+ }
152
+ }
153
+ }
154
+
155
+ .tribe-settings-form-wrap fieldset,
156
+ .tribe-settings-form-wrap .description,
157
+ fieldset[id^='tribe-field-geoloc_'] {
158
+ padding-left: 12px;
159
+ }
160
+
161
+ .tribe-settings-form-wrap {
162
+ fieldset {
163
+ .description {
164
+ margin-left: 0;
165
+ max-width: 450px;
166
+ padding-left: 0;
167
+ }
168
+
169
+ .tribe-style-selection {
170
+ margin-bottom: 18px;
171
+ }
172
+ }
173
+
174
+ h3 {
175
+ background-color: #f9f9f9;
176
+ margin-bottom: 10px;
177
+ padding: 6px 0 6px 12px;
178
+ }
179
+
180
+ .tribe-sysinfo-optin-msg,
181
+ .system-info,
182
+ h3 + p,
183
+ .contained {
184
+ margin: 0 0 10px;
185
+ padding-left: 12px;
186
+ }
187
+ }
188
+
189
+ #tribe-field-stylesheetOption {
190
+ p.description {
191
+ color: #999;
192
+ }
193
  }
194
  }
195
+
196
+ .tribe_settings {
197
+ .tribe-field-indent {
198
+ margin-left: 245px;
199
+ }
200
+
201
+ #pu_dashboard_message {
202
+ display: none;
203
+ }
204
+
205
+ .tribe-errors-list {
206
+ margin-left: 15px;
207
+ }
208
+
209
+ .expiring-license {
210
+ color: red;
211
+ }
212
+
213
+ .tribe-error {
214
+ border: 1px solid #f00;
215
+ }
216
+
217
+ .tribe-field-description {
218
+ margin-bottom: 0;
219
+ position: relative;
220
+ top: -12px;
221
+ }
222
+
223
+ #ical-link {
224
+ top: -14px;
225
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  }
227
+
228
  /* Modern Tribe box */
229
  #modern-tribe-info {
230
  -khtml-border-radius: 4px;
232
  border: 1px solid #ccc;
233
  -webkit-border-radius: 4px;
234
  -moz-border-radius: 4px;
235
+ -o-border-radius: 4px;
236
+ border-radius: 4px;
237
  margin: 20px 0;
238
  padding: 8px 20px 12px;
239
  }
240
+
241
  #modern-tribe-info img {
242
  height: 18px;
243
  margin: 10px 0;
244
  width: 250px;
245
  }
246
+
247
  #modern-tribe-info ul {
248
  list-style: disc;
249
  margin-left: 20px;
250
  }
251
+
252
  #modern-tribe-info ul ul {
253
  list-style: circle;
254
  }
388
  border: 1px solid #ccc;
389
  -webkit-border-radius: 4px;
390
  -moz-border-radius: 4px;
391
+ -o-border-radius: 4px;
392
+ border-radius: 4px;
393
  float: left;
394
  margin: 20px 0;
395
  padding: 0 20px 15px;
401
  border: 1px solid #ccc;
402
  -webkit-border-radius: 4px;
403
  -moz-border-radius: 4px;
404
+ -o-border-radius: 4px;
405
+ border-radius: 4px;
406
  float: right;
407
  margin: 20px 0;
408
  padding: 0 20px 15px;
415
  .tribe-arrangeable-item {
416
  border: 1px solid lightGrey;
417
  -moz-border-radius: 3px;
418
+ border-radius: 3px;
419
  }
420
  .tribe-arrangeable-item .ui-state-default {
421
  border: none;
445
  .tribe_events_active_filter_type_options label {
446
  margin: 7px 0;
447
  }
448
+
 
 
449
  .OrganizerInfo td small,
450
  #event_organizer td small {
451
  display: block;
515
  border: 1px solid #ccc;
516
  -webkit-border-radius: 4px;
517
  -moz-border-radius: 4px;
518
+ -o-border-radius: 4px;
519
+ border-radius: 4px;
520
  padding: 8px 20px 12px;
521
  }
522
 
585
 
586
  .system-info-copy {
587
  .system-info-copy-btn {
588
+ padding: 6px;
589
 
590
+ .dashicons {
591
+ padding-right: 10px;
592
+ }
593
  }
594
  }
595
 
837
  -moz-transition: all 1s linear;
838
  -ms-transition: all 1s linear;
839
  -o-transition: all 1s linear;
840
+ transition: all 1s linear;
841
  webkit-transition: all 1s linear;
842
  width: 100%;
843
  z-index: 4;
846
  #tribe-loading span {
847
  background: url(../images/tribe-loading.gif) 0 0 no-repeat;
848
  -webkit-background-size: 32px 32px;
849
+ background-size: 32px 32px;
850
  height: 32px;
851
  left: 50%;
852
  margin: -16px 0 0 -16px;
common/src/resources/postcss/utilities/variables/_box-shadows.pcss CHANGED
@@ -5,5 +5,6 @@
5
 
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
 
8
  }
9
 
5
 
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
8
+ --box-shadow-card: 0 1px 6px 2px var(--color-box-shadow);
9
  }
10
 
common/src/resources/postcss/utilities/variables/_colors.pcss CHANGED
@@ -40,6 +40,7 @@
40
 
41
  --color-border-default: #D5D5D5;
42
  --color-border-secondary: #E4E4E4;
 
43
  --color-border-active: #141827;
44
  --color-background: #FFFFFF;
45
  --color-background-transparent: rgba(var(--color-background), 0.6);
40
 
41
  --color-border-default: #D5D5D5;
42
  --color-border-secondary: #E4E4E4;
43
+ --color-border-hover: #727272;
44
  --color-border-active: #141827;
45
  --color-background: #FFFFFF;
46
  --color-background-transparent: rgba(var(--color-background), 0.6);
common/src/resources/postcss/utilities/variables/_grids.pcss CHANGED
@@ -30,7 +30,7 @@
30
  /* -----------------------------------------------------------------------------
31
  * Grid Width - Relative
32
  * ----------------------------------------------------------------------------- */
33
-
34
  --grid-width-1-of-2: 50%;
35
  --grid-width-1-of-3: 33.333%;
36
  --grid-width-1-of-4: 25%;
30
  /* -----------------------------------------------------------------------------
31
  * Grid Width - Relative
32
  * ----------------------------------------------------------------------------- */
33
+
34
  --grid-width-1-of-2: 50%;
35
  --grid-width-1-of-3: 33.333%;
36
  --grid-width-1-of-4: 25%;
common/src/resources/postcss/utilities/variables/_z-index.pcss CHANGED
@@ -5,8 +5,11 @@
5
 
6
  --z-index-spinner-container: 100;
7
  --z-index-views-selector: 30;
 
8
  --z-index-events-bar-button: 20;
9
  --z-index-search: 10;
 
10
  --z-index-week-event-hover: 5;
11
  --z-index-map-event-hover: 5;
 
12
  }
5
 
6
  --z-index-spinner-container: 100;
7
  --z-index-views-selector: 30;
8
+ --z-index-dropdown: 30;
9
  --z-index-events-bar-button: 20;
10
  --z-index-search: 10;
11
+ --z-index-scroller: 7;
12
  --z-index-week-event-hover: 5;
13
  --z-index-map-event-hover: 5;
14
+ --z-index-multiday-event: 5;
15
  }
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea::getLoader();
common/vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -10,6 +10,114 @@ return array(
10
  'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
11
  'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
12
  'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
14
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
15
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
@@ -17,6 +125,8 @@ return array(
17
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
18
  'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
19
  'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
 
 
20
  'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
21
  'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
22
  'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
10
  'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
11
  'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
12
  'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
13
+ 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php',
14
+ 'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php',
15
+ 'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php',
16
+ 'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php',
17
+ 'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php',
18
+ 'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php',
19
+ 'Monolog\\Formatter\\GelfMessageFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php',
20
+ 'Monolog\\Formatter\\HtmlFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php',
21
+ 'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php',
22
+ 'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php',
23
+ 'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php',
24
+ 'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php',
25
+ 'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php',
26
+ 'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php',
27
+ 'Monolog\\Formatter\\ScalarFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php',
28
+ 'Monolog\\Formatter\\WildfireFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php',
29
+ 'Monolog\\Handler\\AbstractHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php',
30
+ 'Monolog\\Handler\\AbstractProcessingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php',
31
+ 'Monolog\\Handler\\AbstractSyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php',
32
+ 'Monolog\\Handler\\AmqpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php',
33
+ 'Monolog\\Handler\\BrowserConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php',
34
+ 'Monolog\\Handler\\BufferHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php',
35
+ 'Monolog\\Handler\\ChromePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php',
36
+ 'Monolog\\Handler\\CouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php',
37
+ 'Monolog\\Handler\\CubeHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php',
38
+ 'Monolog\\Handler\\Curl\\Util' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php',
39
+ 'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php',
40
+ 'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
41
+ 'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
42
+ 'Monolog\\Handler\\ElasticSearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php',
43
+ 'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
44
+ 'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
45
+ 'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php',
46
+ 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php',
47
+ 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php',
48
+ 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php',
49
+ 'Monolog\\Handler\\FirePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php',
50
+ 'Monolog\\Handler\\FleepHookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php',
51
+ 'Monolog\\Handler\\FlowdockHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php',
52
+ 'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php',
53
+ 'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php',
54
+ 'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php',
55
+ 'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php',
56
+ 'Monolog\\Handler\\HipChatHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php',
57
+ 'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php',
58
+ 'Monolog\\Handler\\InsightOpsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php',
59
+ 'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php',
60
+ 'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php',
61
+ 'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php',
62
+ 'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php',
63
+ 'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php',
64
+ 'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php',
65
+ 'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php',
66
+ 'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php',
67
+ 'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php',
68
+ 'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php',
69
+ 'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php',
70
+ 'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php',
71
+ 'Monolog\\Handler\\RavenHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php',
72
+ 'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php',
73
+ 'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php',
74
+ 'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php',
75
+ 'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php',
76
+ 'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php',
77
+ 'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php',
78
+ 'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php',
79
+ 'Monolog\\Handler\\SlackbotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php',
80
+ 'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php',
81
+ 'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php',
82
+ 'Monolog\\Handler\\SwiftMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php',
83
+ 'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php',
84
+ 'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php',
85
+ 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php',
86
+ 'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php',
87
+ 'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php',
88
+ 'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php',
89
+ 'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php',
90
+ 'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php',
91
+ 'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php',
92
+ 'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php',
93
+ 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php',
94
+ 'Monolog\\Processor\\MemoryUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php',
95
+ 'Monolog\\Processor\\MercurialProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php',
96
+ 'Monolog\\Processor\\ProcessIdProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php',
97
+ 'Monolog\\Processor\\ProcessorInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php',
98
+ 'Monolog\\Processor\\PsrLogMessageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php',
99
+ 'Monolog\\Processor\\TagProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php',
100
+ 'Monolog\\Processor\\UidProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php',
101
+ 'Monolog\\Processor\\WebProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php',
102
+ 'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php',
103
+ 'Monolog\\ResettableInterface' => $vendorDir . '/monolog/monolog/src/Monolog/ResettableInterface.php',
104
+ 'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php',
105
+ 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php',
106
+ 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
107
+ 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
108
+ 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
109
+ 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
110
+ 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
111
+ 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
112
+ 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
113
+ 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
114
+ 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
115
+ 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
116
+ 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
117
+ 'Tribe\\Log\\Action_Logger' => $baseDir . '/src/Tribe/Log/Action_Logger.php',
118
+ 'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
119
+ 'Tribe\\Log\\Monolog_Logger' => $baseDir . '/src/Tribe/Log/Monolog_Logger.php',
120
+ 'Tribe\\Log\\Service_Provider' => $baseDir . '/src/Tribe/Log/Service_Provider.php',
121
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
122
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
123
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
125
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
126
  'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
127
  'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
128
+ 'Tribe\\Utils\\Lazy_Events' => $baseDir . '/src/Tribe/Utils/Lazy_Events.php',
129
+ 'Tribe\\Utils\\Lazy_String' => $baseDir . '/src/Tribe/Utils/Lazy_String.php',
130
  'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
131
  'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
132
  'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
common/vendor/composer/autoload_commands_classmap.php DELETED
@@ -1,105 +0,0 @@
1
- <?php
2
-
3
- // autoload_commands_classmap.php @generated by Composer
4
-
5
- $vendorDir = dirname(dirname(__FILE__));
6
- $baseDir = dirname($vendorDir);
7
-
8
- return array(
9
- 'CLI_Command' => $vendorDir . '/wp-cli/wp-cli/php/commands/src/CLI_Command.php',
10
- 'Cache_Command' => $vendorDir . '/wp-cli/cache-command/src/Cache_Command.php',
11
- 'Capabilities_Command' => $vendorDir . '/wp-cli/role-command/src/Capabilities_Command.php',
12
- 'Checksum_Command' => $vendorDir . '/wp-cli/checksum-command/src/Checksum_Command.php',
13
- 'Comment_Command' => $vendorDir . '/wp-cli/entity-command/src/Comment_Command.php',
14
- 'Comment_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Comment_Meta_Command.php',
15
- 'Config_Command' => $vendorDir . '/wp-cli/config-command/src/Config_Command.php',
16
- 'Core_Command' => $vendorDir . '/wp-cli/core-command/src/Core_Command.php',
17
- 'Core_Language_Command' => $vendorDir . '/wp-cli/language-command/src/Core_Language_Command.php',
18
- 'Cron_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Command.php',
19
- 'Cron_Event_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Event_Command.php',
20
- 'Cron_Schedule_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Schedule_Command.php',
21
- 'DB_Command' => $vendorDir . '/wp-cli/db-command/src/DB_Command.php',
22
- 'EvalFile_Command' => $vendorDir . '/wp-cli/eval-command/src/EvalFile_Command.php',
23
- 'Eval_Command' => $vendorDir . '/wp-cli/eval-command/src/Eval_Command.php',
24
- 'Export_Command' => $vendorDir . '/wp-cli/export-command/src/Export_Command.php',
25
- 'Import_Command' => $vendorDir . '/wp-cli/import-command/src/Import_Command.php',
26
- 'Language_Namespace' => $vendorDir . '/wp-cli/language-command/src/Language_Namespace.php',
27
- 'Media_Command' => $vendorDir . '/wp-cli/media-command/src/Media_Command.php',
28
- 'Menu_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Command.php',
29
- 'Menu_Item_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Item_Command.php',
30
- 'Menu_Location_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Location_Command.php',
31
- 'Network_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Network_Meta_Command.php',
32
- 'Network_Namespace' => $vendorDir . '/wp-cli/entity-command/src/Network_Namespace.php',
33
- 'Option_Command' => $vendorDir . '/wp-cli/entity-command/src/Option_Command.php',
34
- 'Package_Command' => $vendorDir . '/wp-cli/package-command/src/Package_Command.php',
35
- 'Plugin_Command' => $vendorDir . '/wp-cli/extension-command/src/Plugin_Command.php',
36
- 'Post_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Command.php',
37
- 'Post_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Meta_Command.php',
38
- 'Post_Term_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Term_Command.php',
39
- 'Post_Type_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Type_Command.php',
40
- 'Rewrite_Command' => $vendorDir . '/wp-cli/rewrite-command/src/Rewrite_Command.php',
41
- 'Role_Command' => $vendorDir . '/wp-cli/role-command/src/Role_Command.php',
42
- 'Scaffold_Command' => $vendorDir . '/wp-cli/scaffold-command/src/Scaffold_Command.php',
43
- 'Search_Replace_Command' => $vendorDir . '/wp-cli/search-replace-command/src/Search_Replace_Command.php',
44
- 'Server_Command' => $vendorDir . '/wp-cli/server-command/src/Server_Command.php',
45
- 'Shell_Command' => $vendorDir . '/wp-cli/shell-command/src/Shell_Command.php',
46
- 'Sidebar_Command' => $vendorDir . '/wp-cli/widget-command/src/Sidebar_Command.php',
47
- 'Site_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Command.php',
48
- 'Site_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Meta_Command.php',
49
- 'Site_Option_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Option_Command.php',
50
- 'Super_Admin_Command' => $vendorDir . '/wp-cli/super-admin-command/src/Super_Admin_Command.php',
51
- 'Taxonomy_Command' => $vendorDir . '/wp-cli/entity-command/src/Taxonomy_Command.php',
52
- 'Term_Command' => $vendorDir . '/wp-cli/entity-command/src/Term_Command.php',
53
- 'Term_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Term_Meta_Command.php',
54
- 'Theme_Command' => $vendorDir . '/wp-cli/extension-command/src/Theme_Command.php',
55
- 'Theme_Mod_Command' => $vendorDir . '/wp-cli/extension-command/src/Theme_Mod_Command.php',
56
- 'Transient_Command' => $vendorDir . '/wp-cli/cache-command/src/Transient_Command.php',
57
- 'User_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Command.php',
58
- 'User_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Meta_Command.php',
59
- 'User_Session_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Session_Command.php',
60
- 'User_Term_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Term_Command.php',
61
- 'WP_CLI\\CommandWithDBObject' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithDBObject.php',
62
- 'WP_CLI\\CommandWithMeta' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithMeta.php',
63
- 'WP_CLI\\CommandWithTerms' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithTerms.php',
64
- 'WP_CLI\\CommandWithTranslation' => $vendorDir . '/wp-cli/language-command/src/WP_CLI/CommandWithTranslation.php',
65
- 'WP_CLI\\CommandWithUpgrade' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/CommandWithUpgrade.php',
66
- 'WP_CLI\\CoreUpgrader' => $vendorDir . '/wp-cli/core-command/src/WP_CLI/CoreUpgrader.php',
67
- 'WP_CLI\\DestructivePluginUpgrader' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/DestructivePluginUpgrader.php',
68
- 'WP_CLI\\DestructiveThemeUpgrader' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/DestructiveThemeUpgrader.php',
69
- 'WP_CLI\\Embeds\\Cache_Command' => $vendorDir . '/wp-cli/embed-command/src/Cache_Command.php',
70
- 'WP_CLI\\Embeds\\Embeds_Namespace' => $vendorDir . '/wp-cli/embed-command/src/Embeds_Namespace.php',
71
- 'WP_CLI\\Embeds\\Fetch_Command' => $vendorDir . '/wp-cli/embed-command/src/Fetch_Command.php',
72
- 'WP_CLI\\Embeds\\Handler_Command' => $vendorDir . '/wp-cli/embed-command/src/Handler_Command.php',
73
- 'WP_CLI\\Embeds\\Provider_Command' => $vendorDir . '/wp-cli/embed-command/src/Provider_Command.php',
74
- 'WP_CLI\\Embeds\\oEmbed' => $vendorDir . '/wp-cli/embed-command/src/oEmbed.php',
75
- 'WP_CLI\\Entity\\NonExistentKeyException' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/NonExistentKeyException.php',
76
- 'WP_CLI\\Entity\\RecursiveDataStructureTraverser' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/RecursiveDataStructureTraverser.php',
77
- 'WP_CLI\\Entity\\Utils' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/Utils.php',
78
- 'WP_CLI\\Fetchers\\Comment' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Comment.php',
79
- 'WP_CLI\\Fetchers\\Plugin' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/Fetchers/Plugin.php',
80
- 'WP_CLI\\Fetchers\\Post' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Post.php',
81
- 'WP_CLI\\Fetchers\\Site' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Site.php',
82
- 'WP_CLI\\Fetchers\\Theme' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/Fetchers/Theme.php',
83
- 'WP_CLI\\Fetchers\\User' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/User.php',
84
- 'WP_CLI\\Inflector' => $vendorDir . '/wp-cli/scaffold-command/src/WP_CLI/Inflector.php',
85
- 'WP_CLI\\JsonManipulator' => $vendorDir . '/wp-cli/package-command/src/WP_CLI/JsonManipulator.php',
86
- 'WP_CLI\\LanguagePackUpgrader' => $vendorDir . '/wp-cli/language-command/src/WP_CLI/LanguagePackUpgrader.php',
87
- 'WP_CLI\\NonDestructiveCoreUpgrader' => $vendorDir . '/wp-cli/core-command/src/WP_CLI/NonDestructiveCoreUpgrader.php',
88
- 'WP_CLI\\REPL' => $vendorDir . '/wp-cli/shell-command/src/WP_CLI/REPL.php',
89
- 'WP_CLI\\SearchReplacer' => $vendorDir . '/wp-cli/search-replace-command/src/WP_CLI/SearchReplacer.php',
90
- 'WP_Export_Base_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Base_Writer.php',
91
- 'WP_Export_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Exception.php',
92
- 'WP_Export_File_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_File_Writer.php',
93
- 'WP_Export_Oxymel' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Oxymel.php',
94
- 'WP_Export_Query' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Query.php',
95
- 'WP_Export_Returner' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Returner.php',
96
- 'WP_Export_Split_Files_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Split_Files_Writer.php',
97
- 'WP_Export_Stdout_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Stdout_Writer.php',
98
- 'WP_Export_Term_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Term_Exception.php',
99
- 'WP_Export_WXR_Formatter' => $vendorDir . '/wp-cli/export-command/src/WP_Export_WXR_Formatter.php',
100
- 'WP_Export_XML_Over_HTTP' => $vendorDir . '/wp-cli/export-command/src/WP_Export_XML_Over_HTTP.php',
101
- 'WP_Iterator_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Iterator_Exception.php',
102
- 'WP_Map_Iterator' => $vendorDir . '/wp-cli/export-command/src/WP_Map_Iterator.php',
103
- 'WP_Post_IDs_Iterator' => $vendorDir . '/wp-cli/export-command/src/WP_Post_IDs_Iterator.php',
104
- 'Widget_Command' => $vendorDir . '/wp-cli/widget-command/src/Widget_Command.php',
105
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/vendor/composer/autoload_commands_real.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
-
3
- // autoload_commands_real.php @generated by Composer
4
-
5
- class ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5
6
- {
7
- private static $loader;
8
-
9
- public static function loadClassLoader($class)
10
- {
11
- if ('Composer\Autoload\ClassLoader' === $class) {
12
- require __DIR__ . '/ClassLoader.php';
13
- }
14
- }
15
-
16
- public static function getLoader()
17
- {
18
- if (null !== self::$loader) {
19
- return self::$loader;
20
- }
21
-
22
- spl_autoload_register(array('ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5', 'loadClassLoader'), true, true);
23
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5', 'loadClassLoader'));
25
-
26
- $classMap = require __DIR__ . '/autoload_commands_classmap.php';
27
- if ($classMap) {
28
- $loader->addClassMap($classMap);
29
- }
30
- $loader->register(true);
31
-
32
- return $loader;
33
- }
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/vendor/composer/autoload_framework_classmap.php DELETED
@@ -1,2700 +0,0 @@
1
- <?php
2
-
3
- // autoload_framework_classmap.php @generated by Composer
4
-
5
- $vendorDir = dirname(dirname(__FILE__));
6
- $baseDir = dirname($vendorDir);
7
-
8
- return array(
9
- 'BaconStringUtils\\Filter\\Slugify' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Filter/Slugify.php',
10
- 'BaconStringUtils\\Filter\\SlugifyFactory' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Filter/SlugifyFactory.php',
11
- 'BaconStringUtils\\Module' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Module.php',
12
- 'BaconStringUtils\\Slugifier' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Slugifier.php',
13
- 'BaconStringUtils\\SlugifierFactory' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/SlugifierFactory.php',
14
- 'BaconStringUtils\\UniDecoder' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/UniDecoder.php',
15
- 'Behat\\Gherkin\\Cache\\CacheInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php',
16
- 'Behat\\Gherkin\\Cache\\FileCache' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php',
17
- 'Behat\\Gherkin\\Cache\\MemoryCache' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php',
18
- 'Behat\\Gherkin\\Exception\\CacheException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php',
19
- 'Behat\\Gherkin\\Exception\\Exception' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php',
20
- 'Behat\\Gherkin\\Exception\\LexerException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php',
21
- 'Behat\\Gherkin\\Exception\\NodeException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php',
22
- 'Behat\\Gherkin\\Exception\\ParserException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php',
23
- 'Behat\\Gherkin\\Filter\\ComplexFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php',
24
- 'Behat\\Gherkin\\Filter\\ComplexFilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php',
25
- 'Behat\\Gherkin\\Filter\\FeatureFilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php',
26
- 'Behat\\Gherkin\\Filter\\FilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php',
27
- 'Behat\\Gherkin\\Filter\\LineFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php',
28
- 'Behat\\Gherkin\\Filter\\LineRangeFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php',
29
- 'Behat\\Gherkin\\Filter\\NameFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php',
30
- 'Behat\\Gherkin\\Filter\\NarrativeFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php',
31
- 'Behat\\Gherkin\\Filter\\PathsFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php',
32
- 'Behat\\Gherkin\\Filter\\RoleFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php',
33
- 'Behat\\Gherkin\\Filter\\SimpleFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php',
34
- 'Behat\\Gherkin\\Filter\\TagFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php',
35
- 'Behat\\Gherkin\\Gherkin' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Gherkin.php',
36
- 'Behat\\Gherkin\\Keywords\\ArrayKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php',
37
- 'Behat\\Gherkin\\Keywords\\CachedArrayKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php',
38
- 'Behat\\Gherkin\\Keywords\\CucumberKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php',
39
- 'Behat\\Gherkin\\Keywords\\KeywordsDumper' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php',
40
- 'Behat\\Gherkin\\Keywords\\KeywordsInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsInterface.php',
41
- 'Behat\\Gherkin\\Lexer' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Lexer.php',
42
- 'Behat\\Gherkin\\Loader\\AbstractFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php',
43
- 'Behat\\Gherkin\\Loader\\ArrayLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php',
44
- 'Behat\\Gherkin\\Loader\\DirectoryLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php',
45
- 'Behat\\Gherkin\\Loader\\FileLoaderInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php',
46
- 'Behat\\Gherkin\\Loader\\GherkinFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php',
47
- 'Behat\\Gherkin\\Loader\\LoaderInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php',
48
- 'Behat\\Gherkin\\Loader\\YamlFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php',
49
- 'Behat\\Gherkin\\Node\\ArgumentInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php',
50
- 'Behat\\Gherkin\\Node\\BackgroundNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php',
51
- 'Behat\\Gherkin\\Node\\ExampleNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php',
52
- 'Behat\\Gherkin\\Node\\ExampleTableNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php',
53
- 'Behat\\Gherkin\\Node\\FeatureNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php',
54
- 'Behat\\Gherkin\\Node\\KeywordNodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php',
55
- 'Behat\\Gherkin\\Node\\NodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php',
56
- 'Behat\\Gherkin\\Node\\OutlineNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php',
57
- 'Behat\\Gherkin\\Node\\PyStringNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php',
58
- 'Behat\\Gherkin\\Node\\ScenarioInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php',
59
- 'Behat\\Gherkin\\Node\\ScenarioLikeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php',
60
- 'Behat\\Gherkin\\Node\\ScenarioNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php',
61
- 'Behat\\Gherkin\\Node\\StepContainerInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php',
62
- 'Behat\\Gherkin\\Node\\StepNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php',
63
- 'Behat\\Gherkin\\Node\\TableNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php',
64
- 'Behat\\Gherkin\\Node\\TaggedNodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php',
65
- 'Behat\\Gherkin\\Parser' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Parser.php',
66
- 'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
67
- 'Carbon\\CarbonImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonImmutable.php',
68
- 'Carbon\\CarbonInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterface.php',
69
- 'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php',
70
- 'Carbon\\CarbonPeriod' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonPeriod.php',
71
- 'Carbon\\CarbonTimeZone' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonTimeZone.php',
72
- 'Carbon\\Cli\\Invoker' => $vendorDir . '/nesbot/carbon/src/Carbon/Cli/Invoker.php',
73
- 'Carbon\\Exceptions\\InvalidDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php',
74
- 'Carbon\\Exceptions\\NotAPeriodException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php',
75
- 'Carbon\\Factory' => $vendorDir . '/nesbot/carbon/src/Carbon/Factory.php',
76
- 'Carbon\\FactoryImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/FactoryImmutable.php',
77
- 'Carbon\\Language' => $vendorDir . '/nesbot/carbon/src/Carbon/Language.php',
78
- 'Carbon\\Laravel\\ServiceProvider' => $vendorDir . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php',
79
- 'Carbon\\Traits\\Boundaries' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Boundaries.php',
80
- 'Carbon\\Traits\\Cast' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Cast.php',
81
- 'Carbon\\Traits\\Comparison' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Comparison.php',
82
- 'Carbon\\Traits\\Converter' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Converter.php',
83
- 'Carbon\\Traits\\Creator' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Creator.php',
84
- 'Carbon\\Traits\\Date' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Date.php',
85
- 'Carbon\\Traits\\Difference' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Difference.php',
86
- 'Carbon\\Traits\\Localization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Localization.php',
87
- 'Carbon\\Traits\\Macro' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Macro.php',
88
- 'Carbon\\Traits\\Mixin' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mixin.php',
89
- 'Carbon\\Traits\\Modifiers' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Modifiers.php',
90
- 'Carbon\\Traits\\Mutability' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mutability.php',
91
- 'Carbon\\Traits\\Options' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Options.php',
92
- 'Carbon\\Traits\\Rounding' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Rounding.php',
93
- 'Carbon\\Traits\\Serialization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Serialization.php',
94
- 'Carbon\\Traits\\Test' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Test.php',
95
- 'Carbon\\Traits\\Timestamp' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Timestamp.php',
96
- 'Carbon\\Traits\\Units' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Units.php',
97
- 'Carbon\\Traits\\Week' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Week.php',
98
- 'Carbon\\Translator' => $vendorDir . '/nesbot/carbon/src/Carbon/Translator.php',
99
- 'Codeception\\Actor' => $vendorDir . '/codeception/codeception/src/Codeception/Actor.php',
100
- 'Codeception\\Application' => $vendorDir . '/codeception/codeception/src/Codeception/Application.php',
101
- 'Codeception\\Codecept' => $vendorDir . '/codeception/codeception/src/Codeception/Codecept.php',
102
- 'Codeception\\Command\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Bootstrap.php',
103
- 'Codeception\\Command\\Build' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Build.php',
104
- 'Codeception\\Command\\Clean' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Clean.php',
105
- 'Codeception\\Command\\Completion' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Completion.php',
106
- 'Codeception\\Command\\CompletionFallback' => $vendorDir . '/codeception/codeception/src/Codeception/Command/CompletionFallback.php',
107
- 'Codeception\\Command\\ConfigValidate' => $vendorDir . '/codeception/codeception/src/Codeception/Command/ConfigValidate.php',
108
- 'Codeception\\Command\\Console' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Console.php',
109
- 'Codeception\\Command\\DryRun' => $vendorDir . '/codeception/codeception/src/Codeception/Command/DryRun.php',
110
- 'Codeception\\Command\\GenerateCept' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateCept.php',
111
- 'Codeception\\Command\\GenerateCest' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateCest.php',
112
- 'Codeception\\Command\\GenerateEnvironment' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateEnvironment.php',
113
- 'Codeception\\Command\\GenerateFeature' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateFeature.php',
114
- 'Codeception\\Command\\GenerateGroup' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateGroup.php',
115
- 'Codeception\\Command\\GenerateHelper' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateHelper.php',
116
- 'Codeception\\Command\\GeneratePageObject' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GeneratePageObject.php',
117
- 'Codeception\\Command\\GenerateScenarios' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateScenarios.php',
118
- 'Codeception\\Command\\GenerateSnapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateSnapshot.php',
119
- 'Codeception\\Command\\GenerateStepObject' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateStepObject.php',
120
- 'Codeception\\Command\\GenerateSuite' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateSuite.php',
121
- 'Codeception\\Command\\GenerateTest' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateTest.php',
122
- 'Codeception\\Command\\GenerateWPAjax' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPAjax.php',
123
- 'Codeception\\Command\\GenerateWPCanonical' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPCanonical.php',
124
- 'Codeception\\Command\\GenerateWPRestApi' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestApi.php',
125
- 'Codeception\\Command\\GenerateWPRestController' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestController.php',
126
- 'Codeception\\Command\\GenerateWPRestPostTypeController' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestPostTypeController.php',
127
- 'Codeception\\Command\\GenerateWPUnit' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPUnit.php',
128
- 'Codeception\\Command\\GenerateWPXMLRPC' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPXMLRPC.php',
129
- 'Codeception\\Command\\GherkinSnippets' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GherkinSnippets.php',
130
- 'Codeception\\Command\\GherkinSteps' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GherkinSteps.php',
131
- 'Codeception\\Command\\Init' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Init.php',
132
- 'Codeception\\Command\\Run' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Run.php',
133
- 'Codeception\\Command\\SelfUpdate' => $vendorDir . '/codeception/codeception/src/Codeception/Command/SelfUpdate.php',
134
- 'Codeception\\Command\\Shared\\Config' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/Config.php',
135
- 'Codeception\\Command\\Shared\\FileSystem' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/FileSystem.php',
136
- 'Codeception\\Command\\Shared\\Style' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/Style.php',
137
- 'Codeception\\Configuration' => $vendorDir . '/codeception/codeception/src/Codeception/Configuration.php',
138
- 'Codeception\\Coverage\\Filter' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Filter.php',
139
- 'Codeception\\Coverage\\Subscriber\\Local' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/Local.php',
140
- 'Codeception\\Coverage\\Subscriber\\LocalServer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/LocalServer.php',
141
- 'Codeception\\Coverage\\Subscriber\\Printer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/Printer.php',
142
- 'Codeception\\Coverage\\Subscriber\\RemoteServer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/RemoteServer.php',
143
- 'Codeception\\Coverage\\SuiteSubscriber' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/SuiteSubscriber.php',
144
- 'Codeception\\CustomCommandInterface' => $vendorDir . '/codeception/codeception/src/Codeception/CustomCommandInterface.php',
145
- 'Codeception\\Event\\FailEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/FailEvent.php',
146
- 'Codeception\\Event\\PrintResultEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/PrintResultEvent.php',
147
- 'Codeception\\Event\\StepEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/StepEvent.php',
148
- 'Codeception\\Event\\SuiteEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/SuiteEvent.php',
149
- 'Codeception\\Event\\TestEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/TestEvent.php',
150
- 'Codeception\\Events' => $vendorDir . '/codeception/codeception/src/Codeception/Events.php',
151
- 'Codeception\\Example' => $vendorDir . '/codeception/codeception/src/Codeception/Example.php',
152
- 'Codeception\\Exception\\ConditionalAssertionFailed' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConditionalAssertionFailed.php',
153
- 'Codeception\\Exception\\ConfigurationException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConfigurationException.php',
154
- 'Codeception\\Exception\\ConnectionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConnectionException.php',
155
- 'Codeception\\Exception\\ContentNotFound' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ContentNotFound.php',
156
- 'Codeception\\Exception\\ElementNotFound' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ElementNotFound.php',
157
- 'Codeception\\Exception\\ExtensionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ExtensionException.php',
158
- 'Codeception\\Exception\\ExternalUrlException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ExternalUrlException.php',
159
- 'Codeception\\Exception\\Fail' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Fail.php',
160
- 'Codeception\\Exception\\Incomplete' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Incomplete.php',
161
- 'Codeception\\Exception\\InjectionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/InjectionException.php',
162
- 'Codeception\\Exception\\MalformedLocatorException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/MalformedLocatorException.php',
163
- 'Codeception\\Exception\\ModuleConfigException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleConfigException.php',
164
- 'Codeception\\Exception\\ModuleConflictException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleConflictException.php',
165
- 'Codeception\\Exception\\ModuleException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleException.php',
166
- 'Codeception\\Exception\\ModuleRequireException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleRequireException.php',
167
- 'Codeception\\Exception\\ParseException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ParseException.php',
168
- 'Codeception\\Exception\\RemoteException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/RemoteException.php',
169
- 'Codeception\\Exception\\Skip' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Skip.php',
170
- 'Codeception\\Exception\\TestParseException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/TestParseException.php',
171
- 'Codeception\\Exception\\TestRuntimeException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/TestRuntimeException.php',
172
- 'Codeception\\Extension' => $vendorDir . '/codeception/codeception/src/Codeception/Extension.php',
173
- 'Codeception\\Extension\\DotReporter' => $vendorDir . '/codeception/codeception/ext/DotReporter.php',
174
- 'Codeception\\Extension\\Logger' => $vendorDir . '/codeception/codeception/ext/Logger.php',
175
- 'Codeception\\Extension\\Recorder' => $vendorDir . '/codeception/codeception/ext/Recorder.php',
176
- 'Codeception\\Extension\\RunBefore' => $vendorDir . '/codeception/codeception/ext/RunBefore.php',
177
- 'Codeception\\Extension\\RunFailed' => $vendorDir . '/codeception/codeception/ext/RunFailed.php',
178
- 'Codeception\\Extension\\RunProcess' => $vendorDir . '/codeception/codeception/ext/RunProcess.php',
179
- 'Codeception\\Extension\\SimpleReporter' => $vendorDir . '/codeception/codeception/ext/SimpleReporter.php',
180
- 'Codeception\\GroupObject' => $vendorDir . '/codeception/codeception/src/Codeception/GroupObject.php',
181
- 'Codeception\\InitTemplate' => $vendorDir . '/codeception/codeception/src/Codeception/InitTemplate.php',
182
- 'Codeception\\Lib\\Actor\\Shared\\Comment' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Actor/Shared/Comment.php',
183
- 'Codeception\\Lib\\Actor\\Shared\\Friend' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Actor/Shared/Friend.php',
184
- 'Codeception\\Lib\\Connector\\Guzzle' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Guzzle.php',
185
- 'Codeception\\Lib\\Connector\\Guzzle6' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Guzzle6.php',
186
- 'Codeception\\Lib\\Connector\\Laravel5' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Laravel5.php',
187
- 'Codeception\\Lib\\Connector\\Laravel5\\ExceptionHandlerDecorator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Laravel5/ExceptionHandlerDecorator.php',
188
- 'Codeception\\Lib\\Connector\\Lumen' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Lumen.php',
189
- 'Codeception\\Lib\\Connector\\Lumen\\DummyKernel' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Lumen/DummyKernel.php',
190
- 'Codeception\\Lib\\Connector\\Phalcon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Phalcon.php',
191
- 'Codeception\\Lib\\Connector\\Phalcon\\MemorySession' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Phalcon/MemorySession.php',
192
- 'Codeception\\Lib\\Connector\\Shared\\LaravelCommon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Shared/LaravelCommon.php',
193
- 'Codeception\\Lib\\Connector\\Shared\\PhpSuperGlobalsConverter' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Shared/PhpSuperGlobalsConverter.php',
194
- 'Codeception\\Lib\\Connector\\Symfony' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Symfony.php',
195
- 'Codeception\\Lib\\Connector\\Universal' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Universal.php',
196
- 'Codeception\\Lib\\Connector\\Yii1' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii1.php',
197
- 'Codeception\\Lib\\Connector\\Yii2' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2.php',
198
- 'Codeception\\Lib\\Connector\\Yii2\\ConnectionWatcher' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/ConnectionWatcher.php',
199
- 'Codeception\\Lib\\Connector\\Yii2\\FixturesStore' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/FixturesStore.php',
200
- 'Codeception\\Lib\\Connector\\Yii2\\Logger' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/Logger.php',
201
- 'Codeception\\Lib\\Connector\\Yii2\\TestMailer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/TestMailer.php',
202
- 'Codeception\\Lib\\Connector\\Yii2\\TransactionForcer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/TransactionForcer.php',
203
- 'Codeception\\Lib\\Connector\\ZF1' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF1.php',
204
- 'Codeception\\Lib\\Connector\\ZF2' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF2.php',
205
- 'Codeception\\Lib\\Connector\\ZF2\\PersistentServiceManager' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF2/PersistentServiceManager.php',
206
- 'Codeception\\Lib\\Connector\\ZendExpressive' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive.php',
207
- 'Codeception\\Lib\\Connector\\ZendExpressive\\ResponseCollector' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive/ResponseCollector.php',
208
- 'Codeception\\Lib\\Console\\Colorizer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Colorizer.php',
209
- 'Codeception\\Lib\\Console\\DiffFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/DiffFactory.php',
210
- 'Codeception\\Lib\\Console\\Message' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Message.php',
211
- 'Codeception\\Lib\\Console\\MessageFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/MessageFactory.php',
212
- 'Codeception\\Lib\\Console\\Output' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Output.php',
213
- 'Codeception\\Lib\\DbPopulator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/DbPopulator.php',
214
- 'Codeception\\Lib\\Di' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Di.php',
215
- 'Codeception\\Lib\\Driver\\AmazonSQS' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/AmazonSQS.php',
216
- 'Codeception\\Lib\\Driver\\Beanstalk' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Beanstalk.php',
217
- 'Codeception\\Lib\\Driver\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Db.php',
218
- 'Codeception\\Lib\\Driver\\ExtendedDbDriver' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Driver/ExtendedDbDriver.php',
219
- 'Codeception\\Lib\\Driver\\ExtendedMySql' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Driver/ExtendedMySql.php',
220
- 'Codeception\\Lib\\Driver\\Facebook' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Facebook.php',
221
- 'Codeception\\Lib\\Driver\\Iron' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Iron.php',
222
- 'Codeception\\Lib\\Driver\\MongoDb' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/MongoDb.php',
223
- 'Codeception\\Lib\\Driver\\MySql' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/MySql.php',
224
- 'Codeception\\Lib\\Driver\\Oci' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Oci.php',
225
- 'Codeception\\Lib\\Driver\\PostgreSql' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/PostgreSql.php',
226
- 'Codeception\\Lib\\Driver\\SqlSrv' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/SqlSrv.php',
227
- 'Codeception\\Lib\\Driver\\Sqlite' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Sqlite.php',
228
- 'Codeception\\Lib\\Framework' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Framework.php',
229
- 'Codeception\\Lib\\Friend' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Friend.php',
230
- 'Codeception\\Lib\\Generator\\AbstractGenerator' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/AbstractGenerator.php',
231
- 'Codeception\\Lib\\Generator\\AcceptanceSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/AcceptanceSuiteConfig.php',
232
- 'Codeception\\Lib\\Generator\\Actions' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Actions.php',
233
- 'Codeception\\Lib\\Generator\\Actor' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Actor.php',
234
- 'Codeception\\Lib\\Generator\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Cept.php',
235
- 'Codeception\\Lib\\Generator\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Cest.php',
236
- 'Codeception\\Lib\\Generator\\Feature' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Feature.php',
237
- 'Codeception\\Lib\\Generator\\FunctionalSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/FunctionalSuiteConfig.php',
238
- 'Codeception\\Lib\\Generator\\GeneratorInterface' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/GeneratorInterface.php',
239
- 'Codeception\\Lib\\Generator\\GherkinSnippets' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/GherkinSnippets.php',
240
- 'Codeception\\Lib\\Generator\\Group' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Group.php',
241
- 'Codeception\\Lib\\Generator\\Helper' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Helper.php',
242
- 'Codeception\\Lib\\Generator\\IntegrationSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/IntegrationSuiteConfig.php',
243
- 'Codeception\\Lib\\Generator\\IntegrationSuiteThemeConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/IntegrationSuiteThemeConfig.php',
244
- 'Codeception\\Lib\\Generator\\PageObject' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/PageObject.php',
245
- 'Codeception\\Lib\\Generator\\Shared\\Classname' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Shared/Classname.php',
246
- 'Codeception\\Lib\\Generator\\Snapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Snapshot.php',
247
- 'Codeception\\Lib\\Generator\\StepObject' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/StepObject.php',
248
- 'Codeception\\Lib\\Generator\\Test' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Test.php',
249
- 'Codeception\\Lib\\Generator\\WPUnit' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/WPUnit.php',
250
- 'Codeception\\Lib\\GroupManager' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/GroupManager.php',
251
- 'Codeception\\Lib\\InnerBrowser' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/InnerBrowser.php',
252
- 'Codeception\\Lib\\Interfaces\\API' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/API.php',
253
- 'Codeception\\Lib\\Interfaces\\ActiveRecord' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ActiveRecord.php',
254
- 'Codeception\\Lib\\Interfaces\\ConflictsWithModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ConflictsWithModule.php',
255
- 'Codeception\\Lib\\Interfaces\\DataMapper' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DataMapper.php',
256
- 'Codeception\\Lib\\Interfaces\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Db.php',
257
- 'Codeception\\Lib\\Interfaces\\DependsOnModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DependsOnModule.php',
258
- 'Codeception\\Lib\\Interfaces\\DoctrineProvider' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DoctrineProvider.php',
259
- 'Codeception\\Lib\\Interfaces\\ElementLocator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ElementLocator.php',
260
- 'Codeception\\Lib\\Interfaces\\MultiSession' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/MultiSession.php',
261
- 'Codeception\\Lib\\Interfaces\\ORM' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ORM.php',
262
- 'Codeception\\Lib\\Interfaces\\PageSourceSaver' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/PageSourceSaver.php',
263
- 'Codeception\\Lib\\Interfaces\\PartedModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/PartedModule.php',
264
- 'Codeception\\Lib\\Interfaces\\Queue' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Queue.php',
265
- 'Codeception\\Lib\\Interfaces\\Remote' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Remote.php',
266
- 'Codeception\\Lib\\Interfaces\\RequiresPackage' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/RequiresPackage.php',
267
- 'Codeception\\Lib\\Interfaces\\ScreenshotSaver' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ScreenshotSaver.php',
268
- 'Codeception\\Lib\\Interfaces\\SessionSnapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/SessionSnapshot.php',
269
- 'Codeception\\Lib\\Interfaces\\Web' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Web.php',
270
- 'Codeception\\Lib\\ModuleContainer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/ModuleContainer.php',
271
- 'Codeception\\Lib\\Notification' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Notification.php',
272
- 'Codeception\\Lib\\ParamsLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/ParamsLoader.php',
273
- 'Codeception\\Lib\\Parser' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Parser.php',
274
- 'Codeception\\Lib\\Shared\\LaravelCommon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Shared/LaravelCommon.php',
275
- 'Codeception\\Module' => $vendorDir . '/codeception/codeception/src/Codeception/Module.php',
276
- 'Codeception\\Module\\AMQP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/AMQP.php',
277
- 'Codeception\\Module\\AngularJS' => $vendorDir . '/codeception/codeception/src/Codeception/Module/AngularJS.php',
278
- 'Codeception\\Module\\Apc' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Apc.php',
279
- 'Codeception\\Module\\Asserts' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Asserts.php',
280
- 'Codeception\\Module\\Cli' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Cli.php',
281
- 'Codeception\\Module\\DataFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Module/DataFactory.php',
282
- 'Codeception\\Module\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Db.php',
283
- 'Codeception\\Module\\Doctrine2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Doctrine2.php',
284
- 'Codeception\\Module\\FTP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/FTP.php',
285
- 'Codeception\\Module\\Facebook' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Facebook.php',
286
- 'Codeception\\Module\\Filesystem' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Filesystem.php',
287
- 'Codeception\\Module\\Laravel5' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Laravel5.php',
288
- 'Codeception\\Module\\Lumen' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Lumen.php',
289
- 'Codeception\\Module\\Memcache' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Memcache.php',
290
- 'Codeception\\Module\\MongoDb' => $vendorDir . '/codeception/codeception/src/Codeception/Module/MongoDb.php',
291
- 'Codeception\\Module\\Phalcon' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Phalcon.php',
292
- 'Codeception\\Module\\PhpBrowser' => $vendorDir . '/codeception/codeception/src/Codeception/Module/PhpBrowser.php',
293
- 'Codeception\\Module\\Queue' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Queue.php',
294
- 'Codeception\\Module\\REST' => $vendorDir . '/codeception/codeception/src/Codeception/Module/REST.php',
295
- 'Codeception\\Module\\Redis' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Redis.php',
296
- 'Codeception\\Module\\SOAP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/SOAP.php',
297
- 'Codeception\\Module\\Sequence' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Sequence.php',
298
- 'Codeception\\Module\\Silex' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Silex.php',
299
- 'Codeception\\Module\\Symfony' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Symfony.php',
300
- 'Codeception\\Module\\WPBrowser' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPBrowser.php',
301
- 'Codeception\\Module\\WPBrowserMethods' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPBrowserMethods.php',
302
- 'Codeception\\Module\\WPCLI' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPCLI.php',
303
- 'Codeception\\Module\\WPDb' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPDb.php',
304
- 'Codeception\\Module\\WPFilesystem' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPFilesystem.php',
305
- 'Codeception\\Module\\WPLoader' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPLoader.php',
306
- 'Codeception\\Module\\WPQueries' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPQueries.php',
307
- 'Codeception\\Module\\WPWebDriver' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPWebDriver.php',
308
- 'Codeception\\Module\\WebDriver' => $vendorDir . '/codeception/codeception/src/Codeception/Module/WebDriver.php',
309
- 'Codeception\\Module\\WordPress' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WordPress.php',
310
- 'Codeception\\Module\\XMLRPC' => $vendorDir . '/codeception/codeception/src/Codeception/Module/XMLRPC.php',
311
- 'Codeception\\Module\\Yii1' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Yii1.php',
312
- 'Codeception\\Module\\Yii2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Yii2.php',
313
- 'Codeception\\Module\\ZF1' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZF1.php',
314
- 'Codeception\\Module\\ZF2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZF2.php',
315
- 'Codeception\\Module\\ZendExpressive' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZendExpressive.php',
316
- 'Codeception\\PHPUnit\\ConsolePrinter' => $vendorDir . '/codeception/phpunit-wrapper/src/ConsolePrinter.php',
317
- 'Codeception\\PHPUnit\\Constraint\\Crawler' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/Crawler.php',
318
- 'Codeception\\PHPUnit\\Constraint\\CrawlerNot' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/CrawlerNot.php',
319
- 'Codeception\\PHPUnit\\Constraint\\JsonContains' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/JsonContains.php',
320
- 'Codeception\\PHPUnit\\Constraint\\JsonType' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/JsonType.php',
321
- 'Codeception\\PHPUnit\\Constraint\\Page' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/Page.php',
322
- 'Codeception\\PHPUnit\\Constraint\\WebDriver' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/WebDriver.php',
323
- 'Codeception\\PHPUnit\\Constraint\\WebDriverNot' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/WebDriverNot.php',
324
- 'Codeception\\PHPUnit\\FilterTest' => $vendorDir . '/codeception/phpunit-wrapper/src/FilterTest.php',
325
- 'Codeception\\PHPUnit\\Init' => $vendorDir . '/codeception/phpunit-wrapper/src/Init.php',
326
- 'Codeception\\PHPUnit\\Listener' => $vendorDir . '/codeception/phpunit-wrapper/src/Listener.php',
327
- 'Codeception\\PHPUnit\\Log\\JUnit' => $vendorDir . '/codeception/phpunit-wrapper/src/Log/JUnit.php',
328
- 'Codeception\\PHPUnit\\Log\\PhpUnit' => $vendorDir . '/codeception/phpunit-wrapper/src/Log/PhpUnit.php',
329
- 'Codeception\\PHPUnit\\ResultPrinter' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter.php',
330
- 'Codeception\\PHPUnit\\ResultPrinter\\HTML' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/HTML.php',
331
- 'Codeception\\PHPUnit\\ResultPrinter\\Report' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/Report.php',
332
- 'Codeception\\PHPUnit\\ResultPrinter\\UI' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/UI.php',
333
- 'Codeception\\PHPUnit\\Runner' => $vendorDir . '/codeception/phpunit-wrapper/src/Runner.php',
334
- 'Codeception\\PHPUnit\\TestCase' => $vendorDir . '/codeception/phpunit-wrapper/src/TestCase.php',
335
- 'Codeception\\Scenario' => $vendorDir . '/codeception/codeception/src/Codeception/Scenario.php',
336
- 'Codeception\\Snapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Snapshot.php',
337
- 'Codeception\\Step' => $vendorDir . '/codeception/codeception/src/Codeception/Step.php',
338
- 'Codeception\\Step\\Action' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Action.php',
339
- 'Codeception\\Step\\Argument\\FormattedOutput' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Argument/FormattedOutput.php',
340
- 'Codeception\\Step\\Argument\\PasswordArgument' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Argument/PasswordArgument.php',
341
- 'Codeception\\Step\\Assertion' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Assertion.php',
342
- 'Codeception\\Step\\Comment' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Comment.php',
343
- 'Codeception\\Step\\Condition' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Condition.php',
344
- 'Codeception\\Step\\ConditionalAssertion' => $vendorDir . '/codeception/codeception/src/Codeception/Step/ConditionalAssertion.php',
345
- 'Codeception\\Step\\Executor' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Executor.php',
346
- 'Codeception\\Step\\Incomplete' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Incomplete.php',
347
- 'Codeception\\Step\\Meta' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Meta.php',
348
- 'Codeception\\Step\\Skip' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Skip.php',
349
- 'Codeception\\Stub' => $vendorDir . '/codeception/stub/src/Stub.php',
350
- 'Codeception\\Stub\\ConsecutiveMap' => $vendorDir . '/codeception/stub/src/Stub/ConsecutiveMap.php',
351
- 'Codeception\\Stub\\Expected' => $vendorDir . '/codeception/stub/src/Stub/Expected.php',
352
- 'Codeception\\Stub\\StubMarshaler' => $vendorDir . '/codeception/stub/src/Stub/StubMarshaler.php',
353
- 'Codeception\\Subscriber\\AutoRebuild' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/AutoRebuild.php',
354
- 'Codeception\\Subscriber\\BeforeAfterTest' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/BeforeAfterTest.php',
355
- 'Codeception\\Subscriber\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Bootstrap.php',
356
- 'Codeception\\Subscriber\\Console' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Console.php',
357
- 'Codeception\\Subscriber\\Dependencies' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Dependencies.php',
358
- 'Codeception\\Subscriber\\ErrorHandler' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/ErrorHandler.php',
359
- 'Codeception\\Subscriber\\ExtensionLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/ExtensionLoader.php',
360
- 'Codeception\\Subscriber\\FailFast' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/FailFast.php',
361
- 'Codeception\\Subscriber\\GracefulTermination' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/GracefulTermination.php',
362
- 'Codeception\\Subscriber\\Module' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Module.php',
363
- 'Codeception\\Subscriber\\PrepareTest' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/PrepareTest.php',
364
- 'Codeception\\Subscriber\\Shared\\StaticEvents' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Shared/StaticEvents.php',
365
- 'Codeception\\Suite' => $vendorDir . '/codeception/codeception/src/Codeception/Suite.php',
366
- 'Codeception\\SuiteManager' => $vendorDir . '/codeception/codeception/src/Codeception/SuiteManager.php',
367
- 'Codeception\\Template\\Acceptance' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Acceptance.php',
368
- 'Codeception\\Template\\Api' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Api.php',
369
- 'Codeception\\Template\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Bootstrap.php',
370
- 'Codeception\\Template\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Unit.php',
371
- 'Codeception\\Template\\Wpbrowser' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Template/Wpbrowser.php',
372
- 'Codeception\\TestCase\\WPAjaxTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPAjaxTestCase.php',
373
- 'Codeception\\TestCase\\WPCanonicalTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPCanonicalTestCase.php',
374
- 'Codeception\\TestCase\\WPRestApiTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestApiTestCase.php',
375
- 'Codeception\\TestCase\\WPRestControllerTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestControllerTestCase.php',
376
- 'Codeception\\TestCase\\WPRestPostTypeControllerTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php',
377
- 'Codeception\\TestCase\\WPTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPTestCase.php',
378
- 'Codeception\\TestCase\\WPXMLRPCTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPXMLRPCTestCase.php',
379
- 'Codeception\\TestInterface' => $vendorDir . '/codeception/codeception/src/Codeception/TestInterface.php',
380
- 'Codeception\\Test\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Cept.php',
381
- 'Codeception\\Test\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Cest.php',
382
- 'Codeception\\Test\\Descriptor' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Descriptor.php',
383
- 'Codeception\\Test\\Feature\\AssertionCounter' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/AssertionCounter.php',
384
- 'Codeception\\Test\\Feature\\CodeCoverage' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/CodeCoverage.php',
385
- 'Codeception\\Test\\Feature\\ErrorLogger' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/ErrorLogger.php',
386
- 'Codeception\\Test\\Feature\\IgnoreIfMetadataBlocked' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/IgnoreIfMetadataBlocked.php',
387
- 'Codeception\\Test\\Feature\\MetadataCollector' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/MetadataCollector.php',
388
- 'Codeception\\Test\\Feature\\ScenarioLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/ScenarioLoader.php',
389
- 'Codeception\\Test\\Feature\\Stub' => $vendorDir . '/codeception/stub/src/Test/Feature/Stub.php',
390
- 'Codeception\\Test\\Gherkin' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Gherkin.php',
391
- 'Codeception\\Test\\Interfaces\\Dependent' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Dependent.php',
392
- 'Codeception\\Test\\Interfaces\\Descriptive' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Descriptive.php',
393
- 'Codeception\\Test\\Interfaces\\Plain' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Plain.php',
394
- 'Codeception\\Test\\Interfaces\\Reported' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Reported.php',
395
- 'Codeception\\Test\\Interfaces\\ScenarioDriven' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/ScenarioDriven.php',
396
- 'Codeception\\Test\\Interfaces\\StrictCoverage' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/StrictCoverage.php',
397
- 'Codeception\\Test\\Loader' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader.php',
398
- 'Codeception\\Test\\Loader\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Cept.php',
399
- 'Codeception\\Test\\Loader\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Cest.php',
400
- 'Codeception\\Test\\Loader\\Gherkin' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Gherkin.php',
401
- 'Codeception\\Test\\Loader\\LoaderInterface' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/LoaderInterface.php',
402
- 'Codeception\\Test\\Loader\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Unit.php',
403
- 'Codeception\\Test\\Metadata' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Metadata.php',
404
- 'Codeception\\Test\\Test' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Test.php',
405
- 'Codeception\\Test\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Unit.php',
406
- 'Codeception\\Util\\ActionSequence' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ActionSequence.php',
407
- 'Codeception\\Util\\Annotation' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Annotation.php',
408
- 'Codeception\\Util\\ArrayContainsComparator' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ArrayContainsComparator.php',
409
- 'Codeception\\Util\\Autoload' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Autoload.php',
410
- 'Codeception\\Util\\Debug' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Debug.php',
411
- 'Codeception\\Util\\FileSystem' => $vendorDir . '/codeception/codeception/src/Codeception/Util/FileSystem.php',
412
- 'Codeception\\Util\\Fixtures' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Fixtures.php',
413
- 'Codeception\\Util\\HttpCode' => $vendorDir . '/codeception/codeception/src/Codeception/Util/HttpCode.php',
414
- 'Codeception\\Util\\JsonArray' => $vendorDir . '/codeception/codeception/src/Codeception/Util/JsonArray.php',
415
- 'Codeception\\Util\\JsonType' => $vendorDir . '/codeception/codeception/src/Codeception/Util/JsonType.php',
416
- 'Codeception\\Util\\Locator' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Locator.php',
417
- 'Codeception\\Util\\Maybe' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Maybe.php',
418
- 'Codeception\\Util\\PathResolver' => $vendorDir . '/codeception/codeception/src/Codeception/Util/PathResolver.php',
419
- 'Codeception\\Util\\PropertyAccess' => $vendorDir . '/codeception/codeception/src/Codeception/Util/PropertyAccess.php',
420
- 'Codeception\\Util\\ReflectionHelper' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ReflectionHelper.php',
421
- 'Codeception\\Util\\Shared\\Asserts' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Shared/Asserts.php',
422
- 'Codeception\\Util\\Shared\\Namespaces' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Shared/Namespaces.php',
423
- 'Codeception\\Util\\Soap' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Soap.php',
424
- 'Codeception\\Util\\Stub' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Stub.php',
425
- 'Codeception\\Util\\Template' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Template.php',
426
- 'Codeception\\Util\\Uri' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Uri.php',
427
- 'Codeception\\Util\\Xml' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Xml.php',
428
- 'Codeception\\Util\\XmlBuilder' => $vendorDir . '/codeception/codeception/src/Codeception/Util/XmlBuilder.php',
429
- 'Codeception\\Util\\XmlStructure' => $vendorDir . '/codeception/codeception/src/Codeception/Util/XmlStructure.php',
430
- 'Composer\\Autoload\\AutoloadGenerator' => $vendorDir . '/composer/composer/src/Composer/Autoload/AutoloadGenerator.php',
431
- 'Composer\\Autoload\\ClassLoader' => $vendorDir . '/composer/composer/src/Composer/Autoload/ClassLoader.php',
432
- 'Composer\\Autoload\\ClassMapGenerator' => $vendorDir . '/composer/composer/src/Composer/Autoload/ClassMapGenerator.php',
433
- 'Composer\\CaBundle\\CaBundle' => $vendorDir . '/composer/ca-bundle/src/CaBundle.php',
434
- 'Composer\\Cache' => $vendorDir . '/composer/composer/src/Composer/Cache.php',
435
- 'Composer\\Command\\AboutCommand' => $vendorDir . '/composer/composer/src/Composer/Command/AboutCommand.php',
436
- 'Composer\\Command\\ArchiveCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ArchiveCommand.php',
437
- 'Composer\\Command\\BaseCommand' => $vendorDir . '/composer/composer/src/Composer/Command/BaseCommand.php',
438
- 'Composer\\Command\\BaseDependencyCommand' => $vendorDir . '/composer/composer/src/Composer/Command/BaseDependencyCommand.php',
439
- 'Composer\\Command\\CheckPlatformReqsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/CheckPlatformReqsCommand.php',
440
- 'Composer\\Command\\ClearCacheCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ClearCacheCommand.php',
441
- 'Composer\\Command\\ConfigCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ConfigCommand.php',
442
- 'Composer\\Command\\CreateProjectCommand' => $vendorDir . '/composer/composer/src/Composer/Command/CreateProjectCommand.php',
443
- 'Composer\\Command\\DependsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DependsCommand.php',
444
- 'Composer\\Command\\DiagnoseCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DiagnoseCommand.php',
445
- 'Composer\\Command\\DumpAutoloadCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DumpAutoloadCommand.php',
446
- 'Composer\\Command\\ExecCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ExecCommand.php',
447
- 'Composer\\Command\\GlobalCommand' => $vendorDir . '/composer/composer/src/Composer/Command/GlobalCommand.php',
448
- 'Composer\\Command\\HomeCommand' => $vendorDir . '/composer/composer/src/Composer/Command/HomeCommand.php',
449
- 'Composer\\Command\\InitCommand' => $vendorDir . '/composer/composer/src/Composer/Command/InitCommand.php',
450
- 'Composer\\Command\\InstallCommand' => $vendorDir . '/composer/composer/src/Composer/Command/InstallCommand.php',
451
- 'Composer\\Command\\LicensesCommand' => $vendorDir . '/composer/composer/src/Composer/Command/LicensesCommand.php',
452
- 'Composer\\Command\\OutdatedCommand' => $vendorDir . '/composer/composer/src/Composer/Command/OutdatedCommand.php',
453
- 'Composer\\Command\\ProhibitsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ProhibitsCommand.php',
454
- 'Composer\\Command\\RemoveCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RemoveCommand.php',
455
- 'Composer\\Command\\RequireCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RequireCommand.php',
456
- 'Composer\\Command\\RunScriptCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RunScriptCommand.php',
457
- 'Composer\\Command\\ScriptAliasCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ScriptAliasCommand.php',
458
- 'Composer\\Command\\SearchCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SearchCommand.php',
459
- 'Composer\\Command\\SelfUpdateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SelfUpdateCommand.php',
460
- 'Composer\\Command\\ShowCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ShowCommand.php',
461
- 'Composer\\Command\\StatusCommand' => $vendorDir . '/composer/composer/src/Composer/Command/StatusCommand.php',
462
- 'Composer\\Command\\SuggestsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SuggestsCommand.php',
463
- 'Composer\\Command\\UpdateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/UpdateCommand.php',
464
- 'Composer\\Command\\ValidateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ValidateCommand.php',
465
- 'Composer\\Compiler' => $vendorDir . '/composer/composer/src/Composer/Compiler.php',
466
- 'Composer\\Composer' => $vendorDir . '/composer/composer/src/Composer/Composer.php',
467
- 'Composer\\Config' => $vendorDir . '/composer/composer/src/Composer/Config.php',
468
- 'Composer\\Config\\ConfigSourceInterface' => $vendorDir . '/composer/composer/src/Composer/Config/ConfigSourceInterface.php',
469
- 'Composer\\Config\\JsonConfigSource' => $vendorDir . '/composer/composer/src/Composer/Config/JsonConfigSource.php',
470
- 'Composer\\Console\\Application' => $vendorDir . '/composer/composer/src/Composer/Console/Application.php',
471
- 'Composer\\Console\\HtmlOutputFormatter' => $vendorDir . '/composer/composer/src/Composer/Console/HtmlOutputFormatter.php',
472
- 'Composer\\DependencyResolver\\Decisions' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Decisions.php',
473
- 'Composer\\DependencyResolver\\DefaultPolicy' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php',
474
- 'Composer\\DependencyResolver\\GenericRule' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/GenericRule.php',
475
- 'Composer\\DependencyResolver\\Operation\\InstallOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/InstallOperation.php',
476
- 'Composer\\DependencyResolver\\Operation\\MarkAliasInstalledOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php',
477
- 'Composer\\DependencyResolver\\Operation\\MarkAliasUninstalledOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php',
478
- 'Composer\\DependencyResolver\\Operation\\OperationInterface' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/OperationInterface.php',
479
- 'Composer\\DependencyResolver\\Operation\\SolverOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/SolverOperation.php',
480
- 'Composer\\DependencyResolver\\Operation\\UninstallOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/UninstallOperation.php',
481
- 'Composer\\DependencyResolver\\Operation\\UpdateOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/UpdateOperation.php',
482
- 'Composer\\DependencyResolver\\PolicyInterface' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/PolicyInterface.php',
483
- 'Composer\\DependencyResolver\\Pool' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Pool.php',
484
- 'Composer\\DependencyResolver\\Problem' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Problem.php',
485
- 'Composer\\DependencyResolver\\Request' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Request.php',
486
- 'Composer\\DependencyResolver\\Rule' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Rule.php',
487
- 'Composer\\DependencyResolver\\Rule2Literals' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Rule2Literals.php',
488
- 'Composer\\DependencyResolver\\RuleSet' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSet.php',
489
- 'Composer\\DependencyResolver\\RuleSetGenerator' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php',
490
- 'Composer\\DependencyResolver\\RuleSetIterator' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSetIterator.php',
491
- 'Composer\\DependencyResolver\\RuleWatchChain' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchChain.php',
492
- 'Composer\\DependencyResolver\\RuleWatchGraph' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php',
493
- 'Composer\\DependencyResolver\\RuleWatchNode' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php',
494
- 'Composer\\DependencyResolver\\Solver' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Solver.php',
495
- 'Composer\\DependencyResolver\\SolverBugException' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/SolverBugException.php',
496
- 'Composer\\DependencyResolver\\SolverProblemsException' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/SolverProblemsException.php',
497
- 'Composer\\DependencyResolver\\Transaction' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Transaction.php',
498
- 'Composer\\Downloader\\ArchiveDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/ArchiveDownloader.php',
499
- 'Composer\\Downloader\\ChangeReportInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/ChangeReportInterface.php',
500
- 'Composer\\Downloader\\DownloadManager' => $vendorDir . '/composer/composer/src/Composer/Downloader/DownloadManager.php',
501
- 'Composer\\Downloader\\DownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/DownloaderInterface.php',
502
- 'Composer\\Downloader\\DvcsDownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/DvcsDownloaderInterface.php',
503
- 'Composer\\Downloader\\FileDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/FileDownloader.php',
504
- 'Composer\\Downloader\\FilesystemException' => $vendorDir . '/composer/composer/src/Composer/Downloader/FilesystemException.php',
505
- 'Composer\\Downloader\\FossilDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/FossilDownloader.php',
506
- 'Composer\\Downloader\\GitDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/GitDownloader.php',
507
- 'Composer\\Downloader\\GzipDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/GzipDownloader.php',
508
- 'Composer\\Downloader\\HgDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/HgDownloader.php',
509
- 'Composer\\Downloader\\PathDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PathDownloader.php',
510
- 'Composer\\Downloader\\PearPackageExtractor' => $vendorDir . '/composer/composer/src/Composer/Downloader/PearPackageExtractor.php',
511
- 'Composer\\Downloader\\PerforceDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PerforceDownloader.php',
512
- 'Composer\\Downloader\\PharDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PharDownloader.php',
513
- 'Composer\\Downloader\\RarDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/RarDownloader.php',
514
- 'Composer\\Downloader\\SvnDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/SvnDownloader.php',
515
- 'Composer\\Downloader\\TarDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/TarDownloader.php',
516
- 'Composer\\Downloader\\TransportException' => $vendorDir . '/composer/composer/src/Composer/Downloader/TransportException.php',
517
- 'Composer\\Downloader\\VcsCapableDownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/VcsCapableDownloaderInterface.php',
518
- 'Composer\\Downloader\\VcsDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/VcsDownloader.php',
519
- 'Composer\\Downloader\\XzDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/XzDownloader.php',
520
- 'Composer\\Downloader\\ZipDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/ZipDownloader.php',
521
- 'Composer\\EventDispatcher\\Event' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/Event.php',
522
- 'Composer\\EventDispatcher\\EventDispatcher' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php',
523
- 'Composer\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/EventSubscriberInterface.php',
524
- 'Composer\\EventDispatcher\\ScriptExecutionException' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/ScriptExecutionException.php',
525
- 'Composer\\Exception\\NoSslException' => $vendorDir . '/composer/composer/src/Composer/Exception/NoSslException.php',
526
- 'Composer\\Factory' => $vendorDir . '/composer/composer/src/Composer/Factory.php',
527
- 'Composer\\IO\\BaseIO' => $vendorDir . '/composer/composer/src/Composer/IO/BaseIO.php',
528
- 'Composer\\IO\\BufferIO' => $vendorDir . '/composer/composer/src/Composer/IO/BufferIO.php',
529
- 'Composer\\IO\\ConsoleIO' => $vendorDir . '/composer/composer/src/Composer/IO/ConsoleIO.php',
530
- 'Composer\\IO\\IOInterface' => $vendorDir . '/composer/composer/src/Composer/IO/IOInterface.php',
531
- 'Composer\\IO\\NullIO' => $vendorDir . '/composer/composer/src/Composer/IO/NullIO.php',
532
- 'Composer\\Installer' => $vendorDir . '/composer/composer/src/Composer/Installer.php',
533
- 'Composer\\Installer\\BinaryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/BinaryInstaller.php',
534
- 'Composer\\Installer\\BinaryPresenceInterface' => $vendorDir . '/composer/composer/src/Composer/Installer/BinaryPresenceInterface.php',
535
- 'Composer\\Installer\\InstallationManager' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallationManager.php',
536
- 'Composer\\Installer\\InstallerEvent' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerEvent.php',
537
- 'Composer\\Installer\\InstallerEvents' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerEvents.php',
538
- 'Composer\\Installer\\InstallerInterface' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerInterface.php',
539
- 'Composer\\Installer\\LibraryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/LibraryInstaller.php',
540
- 'Composer\\Installer\\MetapackageInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/MetapackageInstaller.php',
541
- 'Composer\\Installer\\NoopInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/NoopInstaller.php',
542
- 'Composer\\Installer\\PackageEvent' => $vendorDir . '/composer/composer/src/Composer/Installer/PackageEvent.php',
543
- 'Composer\\Installer\\PackageEvents' => $vendorDir . '/composer/composer/src/Composer/Installer/PackageEvents.php',
544
- 'Composer\\Installer\\PearBinaryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PearBinaryInstaller.php',
545
- 'Composer\\Installer\\PearInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PearInstaller.php',
546
- 'Composer\\Installer\\PluginInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PluginInstaller.php',
547
- 'Composer\\Installer\\ProjectInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/ProjectInstaller.php',
548
- 'Composer\\Installer\\SuggestedPackagesReporter' => $vendorDir . '/composer/composer/src/Composer/Installer/SuggestedPackagesReporter.php',
549
- 'Composer\\Json\\JsonFile' => $vendorDir . '/composer/composer/src/Composer/Json/JsonFile.php',
550
- 'Composer\\Json\\JsonFormatter' => $vendorDir . '/composer/composer/src/Composer/Json/JsonFormatter.php',
551
- 'Composer\\Json\\JsonManipulator' => $vendorDir . '/composer/composer/src/Composer/Json/JsonManipulator.php',
552
- 'Composer\\Json\\JsonValidationException' => $vendorDir . '/composer/composer/src/Composer/Json/JsonValidationException.php',
553
- 'Composer\\Package\\AliasPackage' => $vendorDir . '/composer/composer/src/Composer/Package/AliasPackage.php',
554
- 'Composer\\Package\\Archiver\\ArchivableFilesFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFilter.php',
555
- 'Composer\\Package\\Archiver\\ArchivableFilesFinder' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php',
556
- 'Composer\\Package\\Archiver\\ArchiveManager' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php',
557
- 'Composer\\Package\\Archiver\\ArchiverInterface' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchiverInterface.php',
558
- 'Composer\\Package\\Archiver\\BaseExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php',
559
- 'Composer\\Package\\Archiver\\ComposerExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ComposerExcludeFilter.php',
560
- 'Composer\\Package\\Archiver\\GitExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/GitExcludeFilter.php',
561
- 'Composer\\Package\\Archiver\\HgExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/HgExcludeFilter.php',
562
- 'Composer\\Package\\Archiver\\PharArchiver' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/PharArchiver.php',
563
- 'Composer\\Package\\Archiver\\ZipArchiver' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ZipArchiver.php',
564
- 'Composer\\Package\\BasePackage' => $vendorDir . '/composer/composer/src/Composer/Package/BasePackage.php',
565
- 'Composer\\Package\\Comparer\\Comparer' => $vendorDir . '/composer/composer/src/Composer/Package/Comparer/Comparer.php',
566
- 'Composer\\Package\\CompletePackage' => $vendorDir . '/composer/composer/src/Composer/Package/CompletePackage.php',
567
- 'Composer\\Package\\CompletePackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/CompletePackageInterface.php',
568
- 'Composer\\Package\\Dumper\\ArrayDumper' => $vendorDir . '/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php',
569
- 'Composer\\Package\\Link' => $vendorDir . '/composer/composer/src/Composer/Package/Link.php',
570
- 'Composer\\Package\\LinkConstraint\\EmptyConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/EmptyConstraint.php',
571
- 'Composer\\Package\\LinkConstraint\\LinkConstraintInterface' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php',
572
- 'Composer\\Package\\LinkConstraint\\MultiConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/MultiConstraint.php',
573
- 'Composer\\Package\\LinkConstraint\\SpecificConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php',
574
- 'Composer\\Package\\LinkConstraint\\VersionConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/VersionConstraint.php',
575
- 'Composer\\Package\\Loader\\ArrayLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/ArrayLoader.php',
576
- 'Composer\\Package\\Loader\\InvalidPackageException' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/InvalidPackageException.php',
577
- 'Composer\\Package\\Loader\\JsonLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/JsonLoader.php',
578
- 'Composer\\Package\\Loader\\LoaderInterface' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/LoaderInterface.php',
579
- 'Composer\\Package\\Loader\\RootPackageLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php',
580
- 'Composer\\Package\\Loader\\ValidatingArrayLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php',
581
- 'Composer\\Package\\Locker' => $vendorDir . '/composer/composer/src/Composer/Package/Locker.php',
582
- 'Composer\\Package\\Package' => $vendorDir . '/composer/composer/src/Composer/Package/Package.php',
583
- 'Composer\\Package\\PackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/PackageInterface.php',
584
- 'Composer\\Package\\RootAliasPackage' => $vendorDir . '/composer/composer/src/Composer/Package/RootAliasPackage.php',
585
- 'Composer\\Package\\RootPackage' => $vendorDir . '/composer/composer/src/Composer/Package/RootPackage.php',
586
- 'Composer\\Package\\RootPackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/RootPackageInterface.php',
587
- 'Composer\\Package\\Version\\VersionGuesser' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionGuesser.php',
588
- 'Composer\\Package\\Version\\VersionParser' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionParser.php',
589
- 'Composer\\Package\\Version\\VersionSelector' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionSelector.php',
590
- 'Composer\\Plugin\\Capability\\Capability' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capability/Capability.php',
591
- 'Composer\\Plugin\\Capability\\CommandProvider' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capability/CommandProvider.php',
592
- 'Composer\\Plugin\\Capable' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capable.php',
593
- 'Composer\\Plugin\\CommandEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/CommandEvent.php',
594
- 'Composer\\Plugin\\PluginEvents' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginEvents.php',
595
- 'Composer\\Plugin\\PluginInterface' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginInterface.php',
596
- 'Composer\\Plugin\\PluginManager' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginManager.php',
597
- 'Composer\\Plugin\\PreCommandRunEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/PreCommandRunEvent.php',
598
- 'Composer\\Plugin\\PreFileDownloadEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/PreFileDownloadEvent.php',
599
- 'Composer\\Question\\StrictConfirmationQuestion' => $vendorDir . '/composer/composer/src/Composer/Question/StrictConfirmationQuestion.php',
600
- 'Composer\\Repository\\ArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ArrayRepository.php',
601
- 'Composer\\Repository\\ArtifactRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ArtifactRepository.php',
602
- 'Composer\\Repository\\BaseRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/BaseRepository.php',
603
- 'Composer\\Repository\\ComposerRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ComposerRepository.php',
604
- 'Composer\\Repository\\CompositeRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/CompositeRepository.php',
605
- 'Composer\\Repository\\ConfigurableRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/ConfigurableRepositoryInterface.php',
606
- 'Composer\\Repository\\FilesystemRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/FilesystemRepository.php',
607
- 'Composer\\Repository\\InstalledArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledArrayRepository.php',
608
- 'Composer\\Repository\\InstalledFilesystemRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledFilesystemRepository.php',
609
- 'Composer\\Repository\\InstalledRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledRepositoryInterface.php',
610
- 'Composer\\Repository\\InvalidRepositoryException' => $vendorDir . '/composer/composer/src/Composer/Repository/InvalidRepositoryException.php',
611
- 'Composer\\Repository\\PackageRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PackageRepository.php',
612
- 'Composer\\Repository\\PathRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PathRepository.php',
613
- 'Composer\\Repository\\PearRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PearRepository.php',
614
- 'Composer\\Repository\\Pear\\BaseChannelReader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/BaseChannelReader.php',
615
- 'Composer\\Repository\\Pear\\ChannelInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelInfo.php',
616
- 'Composer\\Repository\\Pear\\ChannelReader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelReader.php',
617
- 'Composer\\Repository\\Pear\\ChannelRest10Reader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelRest10Reader.php',
618
- 'Composer\\Repository\\Pear\\ChannelRest11Reader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelRest11Reader.php',
619
- 'Composer\\Repository\\Pear\\DependencyConstraint' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/DependencyConstraint.php',
620
- 'Composer\\Repository\\Pear\\DependencyInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/DependencyInfo.php',
621
- 'Composer\\Repository\\Pear\\PackageDependencyParser' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php',
622
- 'Composer\\Repository\\Pear\\PackageInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/PackageInfo.php',
623
- 'Composer\\Repository\\Pear\\ReleaseInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ReleaseInfo.php',
624
- 'Composer\\Repository\\PlatformRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PlatformRepository.php',
625
- 'Composer\\Repository\\RepositoryFactory' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryFactory.php',
626
- 'Composer\\Repository\\RepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryInterface.php',
627
- 'Composer\\Repository\\RepositoryManager' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryManager.php',
628
- 'Composer\\Repository\\RepositorySecurityException' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositorySecurityException.php',
629
- 'Composer\\Repository\\VcsRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/VcsRepository.php',
630
- 'Composer\\Repository\\Vcs\\BitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/BitbucketDriver.php',
631
- 'Composer\\Repository\\Vcs\\FossilDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/FossilDriver.php',
632
- 'Composer\\Repository\\Vcs\\GitBitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php',
633
- 'Composer\\Repository\\Vcs\\GitDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitDriver.php',
634
- 'Composer\\Repository\\Vcs\\GitHubDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php',
635
- 'Composer\\Repository\\Vcs\\GitLabDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitLabDriver.php',
636
- 'Composer\\Repository\\Vcs\\HgBitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php',
637
- 'Composer\\Repository\\Vcs\\HgDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/HgDriver.php',
638
- 'Composer\\Repository\\Vcs\\PerforceDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php',
639
- 'Composer\\Repository\\Vcs\\SvnDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php',
640
- 'Composer\\Repository\\Vcs\\VcsDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php',
641
- 'Composer\\Repository\\Vcs\\VcsDriverInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/VcsDriverInterface.php',
642
- 'Composer\\Repository\\VersionCacheInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/VersionCacheInterface.php',
643
- 'Composer\\Repository\\WritableArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/WritableArrayRepository.php',
644
- 'Composer\\Repository\\WritableRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/WritableRepositoryInterface.php',
645
- 'Composer\\Script\\CommandEvent' => $vendorDir . '/composer/composer/src/Composer/Script/CommandEvent.php',
646
- 'Composer\\Script\\Event' => $vendorDir . '/composer/composer/src/Composer/Script/Event.php',
647
- 'Composer\\Script\\PackageEvent' => $vendorDir . '/composer/composer/src/Composer/Script/PackageEvent.php',
648
- 'Composer\\Script\\ScriptEvents' => $vendorDir . '/composer/composer/src/Composer/Script/ScriptEvents.php',
649
- 'Composer\\SelfUpdate\\Keys' => $vendorDir . '/composer/composer/src/Composer/SelfUpdate/Keys.php',
650
- 'Composer\\SelfUpdate\\Versions' => $vendorDir . '/composer/composer/src/Composer/SelfUpdate/Versions.php',
651
- 'Composer\\Semver\\Comparator' => $vendorDir . '/composer/semver/src/Comparator.php',
652
- 'Composer\\Semver\\Constraint\\AbstractConstraint' => $vendorDir . '/composer/semver/src/Constraint/AbstractConstraint.php',
653
- 'Composer\\Semver\\Constraint\\Constraint' => $vendorDir . '/composer/semver/src/Constraint/Constraint.php',
654
- 'Composer\\Semver\\Constraint\\ConstraintInterface' => $vendorDir . '/composer/semver/src/Constraint/ConstraintInterface.php',
655
- 'Composer\\Semver\\Constraint\\EmptyConstraint' => $vendorDir . '/composer/semver/src/Constraint/EmptyConstraint.php',
656
- 'Composer\\Semver\\Constraint\\MultiConstraint' => $vendorDir . '/composer/semver/src/Constraint/MultiConstraint.php',
657
- 'Composer\\Semver\\Semver' => $vendorDir . '/composer/semver/src/Semver.php',
658
- 'Composer\\Semver\\VersionParser' => $vendorDir . '/composer/semver/src/VersionParser.php',
659
- 'Composer\\Spdx\\SpdxLicenses' => $vendorDir . '/composer/spdx-licenses/src/SpdxLicenses.php',
660
- 'Composer\\Util\\AuthHelper' => $vendorDir . '/composer/composer/src/Composer/Util/AuthHelper.php',
661
- 'Composer\\Util\\Bitbucket' => $vendorDir . '/composer/composer/src/Composer/Util/Bitbucket.php',
662
- 'Composer\\Util\\ComposerMirror' => $vendorDir . '/composer/composer/src/Composer/Util/ComposerMirror.php',
663
- 'Composer\\Util\\ConfigValidator' => $vendorDir . '/composer/composer/src/Composer/Util/ConfigValidator.php',
664
- 'Composer\\Util\\ErrorHandler' => $vendorDir . '/composer/composer/src/Composer/Util/ErrorHandler.php',
665
- 'Composer\\Util\\Filesystem' => $vendorDir . '/composer/composer/src/Composer/Util/Filesystem.php',
666
- 'Composer\\Util\\Git' => $vendorDir . '/composer/composer/src/Composer/Util/Git.php',
667
- 'Composer\\Util\\GitHub' => $vendorDir . '/composer/composer/src/Composer/Util/GitHub.php',
668
- 'Composer\\Util\\GitLab' => $vendorDir . '/composer/composer/src/Composer/Util/GitLab.php',
669
- 'Composer\\Util\\Hg' => $vendorDir . '/composer/composer/src/Composer/Util/Hg.php',
670
- 'Composer\\Util\\IniHelper' => $vendorDir . '/composer/composer/src/Composer/Util/IniHelper.php',
671
- 'Composer\\Util\\NoProxyPattern' => $vendorDir . '/composer/composer/src/Composer/Util/NoProxyPattern.php',
672
- 'Composer\\Util\\PackageSorter' => $vendorDir . '/composer/composer/src/Composer/Util/PackageSorter.php',
673
- 'Composer\\Util\\Perforce' => $vendorDir . '/composer/composer/src/Composer/Util/Perforce.php',
674
- 'Composer\\Util\\Platform' => $vendorDir . '/composer/composer/src/Composer/Util/Platform.php',
675
- 'Composer\\Util\\ProcessExecutor' => $vendorDir . '/composer/composer/src/Composer/Util/ProcessExecutor.php',
676
- 'Composer\\Util\\RemoteFilesystem' => $vendorDir . '/composer/composer/src/Composer/Util/RemoteFilesystem.php',
677
- 'Composer\\Util\\Silencer' => $vendorDir . '/composer/composer/src/Composer/Util/Silencer.php',
678
- 'Composer\\Util\\SpdxLicense' => $vendorDir . '/composer/composer/src/Composer/Util/SpdxLicense.php',
679
- 'Composer\\Util\\StreamContextFactory' => $vendorDir . '/composer/composer/src/Composer/Util/StreamContextFactory.php',
680
- 'Composer\\Util\\Svn' => $vendorDir . '/composer/composer/src/Composer/Util/Svn.php',
681
- 'Composer\\Util\\TlsHelper' => $vendorDir . '/composer/composer/src/Composer/Util/TlsHelper.php',
682
- 'Composer\\Util\\Url' => $vendorDir . '/composer/composer/src/Composer/Util/Url.php',
683
- 'Composer\\Util\\Zip' => $vendorDir . '/composer/composer/src/Composer/Util/Zip.php',
684
- 'Composer\\XdebugHandler' => $vendorDir . '/composer/composer/src/Composer/XdebugHandler.php',
685
- 'Composer\\XdebugHandler\\PhpConfig' => $vendorDir . '/composer/xdebug-handler/src/PhpConfig.php',
686
- 'Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php',
687
- 'Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php',
688
- 'Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php',
689
- 'Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin' => $vendorDir . '/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php',
690
- 'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php',
691
- 'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php',
692
- 'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php',
693
- 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php',
694
- 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php',
695
- 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php',
696
- 'DeepCopy\\Filter\\Filter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php',
697
- 'DeepCopy\\Filter\\KeepFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php',
698
- 'DeepCopy\\Filter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php',
699
- 'DeepCopy\\Filter\\SetNullFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php',
700
- 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php',
701
- 'DeepCopy\\Matcher\\Matcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php',
702
- 'DeepCopy\\Matcher\\PropertyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php',
703
- 'DeepCopy\\Matcher\\PropertyNameMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php',
704
- 'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
705
- 'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
706
- 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
707
- 'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
708
- 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
709
- 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php',
710
- 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php',
711
- 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php',
712
- 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php',
713
- 'Doctrine\\Common\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php',
714
- 'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php',
715
- 'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php',
716
- 'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php',
717
- 'Doctrine\\Instantiator\\Instantiator' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php',
718
- 'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php',
719
- 'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php',
720
- 'Dotenv\\Environment\\AbstractVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/AbstractVariables.php',
721
- 'Dotenv\\Environment\\Adapter\\AdapterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php',
722
- 'Dotenv\\Environment\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php',
723
- 'Dotenv\\Environment\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php',
724
- 'Dotenv\\Environment\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/EnvConstAdapter.php',
725
- 'Dotenv\\Environment\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/PutenvAdapter.php',
726
- 'Dotenv\\Environment\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php',
727
- 'Dotenv\\Environment\\DotenvFactory' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvFactory.php',
728
- 'Dotenv\\Environment\\DotenvVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvVariables.php',
729
- 'Dotenv\\Environment\\FactoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/FactoryInterface.php',
730
- 'Dotenv\\Environment\\VariablesInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/VariablesInterface.php',
731
- 'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php',
732
- 'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php',
733
- 'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php',
734
- 'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php',
735
- 'Dotenv\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Lines.php',
736
- 'Dotenv\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader.php',
737
- 'Dotenv\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Parser.php',
738
- 'Dotenv\\Regex\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Error.php',
739
- 'Dotenv\\Regex\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Regex.php',
740
- 'Dotenv\\Regex\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Result.php',
741
- 'Dotenv\\Regex\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Success.php',
742
- 'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php',
743
- 'Facebook\\WebDriver\\AbstractWebDriverCheckboxOrRadio' => $vendorDir . '/facebook/webdriver/lib/AbstractWebDriverCheckboxOrRadio.php',
744
- 'Facebook\\WebDriver\\Chrome\\ChromeDriver' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeDriver.php',
745
- 'Facebook\\WebDriver\\Chrome\\ChromeDriverService' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeDriverService.php',
746
- 'Facebook\\WebDriver\\Chrome\\ChromeOptions' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeOptions.php',
747
- 'Facebook\\WebDriver\\Cookie' => $vendorDir . '/facebook/webdriver/lib/Cookie.php',
748
- 'Facebook\\WebDriver\\Exception\\ElementNotSelectableException' => $vendorDir . '/facebook/webdriver/lib/Exception/ElementNotSelectableException.php',
749
- 'Facebook\\WebDriver\\Exception\\ElementNotVisibleException' => $vendorDir . '/facebook/webdriver/lib/Exception/ElementNotVisibleException.php',
750
- 'Facebook\\WebDriver\\Exception\\ExpectedException' => $vendorDir . '/facebook/webdriver/lib/Exception/ExpectedException.php',
751
- 'Facebook\\WebDriver\\Exception\\IMEEngineActivationFailedException' => $vendorDir . '/facebook/webdriver/lib/Exception/IMEEngineActivationFailedException.php',
752
- 'Facebook\\WebDriver\\Exception\\IMENotAvailableException' => $vendorDir . '/facebook/webdriver/lib/Exception/IMENotAvailableException.php',
753
- 'Facebook\\WebDriver\\Exception\\IndexOutOfBoundsException' => $vendorDir . '/facebook/webdriver/lib/Exception/IndexOutOfBoundsException.php',
754
- 'Facebook\\WebDriver\\Exception\\InvalidCookieDomainException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidCookieDomainException.php',
755
- 'Facebook\\WebDriver\\Exception\\InvalidCoordinatesException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidCoordinatesException.php',
756
- 'Facebook\\WebDriver\\Exception\\InvalidElementStateException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidElementStateException.php',
757
- 'Facebook\\WebDriver\\Exception\\InvalidSelectorException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidSelectorException.php',
758
- 'Facebook\\WebDriver\\Exception\\MoveTargetOutOfBoundsException' => $vendorDir . '/facebook/webdriver/lib/Exception/MoveTargetOutOfBoundsException.php',
759
- 'Facebook\\WebDriver\\Exception\\NoAlertOpenException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoAlertOpenException.php',
760
- 'Facebook\\WebDriver\\Exception\\NoCollectionException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoCollectionException.php',
761
- 'Facebook\\WebDriver\\Exception\\NoScriptResultException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoScriptResultException.php',
762
- 'Facebook\\WebDriver\\Exception\\NoStringException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringException.php',
763
- 'Facebook\\WebDriver\\Exception\\NoStringLengthException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringLengthException.php',
764
- 'Facebook\\WebDriver\\Exception\\NoStringWrapperException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringWrapperException.php',
765
- 'Facebook\\WebDriver\\Exception\\NoSuchCollectionException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchCollectionException.php',
766
- 'Facebook\\WebDriver\\Exception\\NoSuchDocumentException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchDocumentException.php',
767
- 'Facebook\\WebDriver\\Exception\\NoSuchDriverException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchDriverException.php',
768
- 'Facebook\\WebDriver\\Exception\\NoSuchElementException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchElementException.php',
769
- 'Facebook\\WebDriver\\Exception\\NoSuchFrameException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchFrameException.php',
770
- 'Facebook\\WebDriver\\Exception\\NoSuchWindowException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchWindowException.php',
771
- 'Facebook\\WebDriver\\Exception\\NullPointerException' => $vendorDir . '/facebook/webdriver/lib/Exception/NullPointerException.php',
772
- 'Facebook\\WebDriver\\Exception\\ScriptTimeoutException' => $vendorDir . '/facebook/webdriver/lib/Exception/ScriptTimeoutException.php',
773
- 'Facebook\\WebDriver\\Exception\\SessionNotCreatedException' => $vendorDir . '/facebook/webdriver/lib/Exception/SessionNotCreatedException.php',
774
- 'Facebook\\WebDriver\\Exception\\StaleElementReferenceException' => $vendorDir . '/facebook/webdriver/lib/Exception/StaleElementReferenceException.php',
775
- 'Facebook\\WebDriver\\Exception\\TimeOutException' => $vendorDir . '/facebook/webdriver/lib/Exception/TimeOutException.php',
776
- 'Facebook\\WebDriver\\Exception\\UnableToSetCookieException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnableToSetCookieException.php',
777
- 'Facebook\\WebDriver\\Exception\\UnexpectedAlertOpenException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedAlertOpenException.php',
778
- 'Facebook\\WebDriver\\Exception\\UnexpectedJavascriptException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedJavascriptException.php',
779
- 'Facebook\\WebDriver\\Exception\\UnexpectedTagNameException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedTagNameException.php',
780
- 'Facebook\\WebDriver\\Exception\\UnknownCommandException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnknownCommandException.php',
781
- 'Facebook\\WebDriver\\Exception\\UnknownServerException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnknownServerException.php',
782
- 'Facebook\\WebDriver\\Exception\\UnrecognizedExceptionException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnrecognizedExceptionException.php',
783
- 'Facebook\\WebDriver\\Exception\\UnsupportedOperationException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnsupportedOperationException.php',
784
- 'Facebook\\WebDriver\\Exception\\WebDriverCurlException' => $vendorDir . '/facebook/webdriver/lib/Exception/WebDriverCurlException.php',
785
- 'Facebook\\WebDriver\\Exception\\WebDriverException' => $vendorDir . '/facebook/webdriver/lib/Exception/WebDriverException.php',
786
- 'Facebook\\WebDriver\\Exception\\XPathLookupException' => $vendorDir . '/facebook/webdriver/lib/Exception/XPathLookupException.php',
787
- 'Facebook\\WebDriver\\Firefox\\FirefoxDriver' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxDriver.php',
788
- 'Facebook\\WebDriver\\Firefox\\FirefoxPreferences' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxPreferences.php',
789
- 'Facebook\\WebDriver\\Firefox\\FirefoxProfile' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxProfile.php',
790
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverButtonReleaseAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverButtonReleaseAction.php',
791
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAction.php',
792
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverClickAndHoldAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAndHoldAction.php',
793
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverContextClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverContextClickAction.php',
794
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverCoordinates' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverCoordinates.php',
795
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverDoubleClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverDoubleClickAction.php',
796
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeyDownAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyDownAction.php',
797
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeyUpAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyUpAction.php',
798
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeysRelatedAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeysRelatedAction.php',
799
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMouseAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseAction.php',
800
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMouseMoveAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseMoveAction.php',
801
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMoveToOffsetAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMoveToOffsetAction.php',
802
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverSendKeysAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverSendKeysAction.php',
803
- 'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverSingleKeyAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverSingleKeyAction.php',
804
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverDoubleTapAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverDoubleTapAction.php',
805
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverDownAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverDownAction.php',
806
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverFlickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickAction.php',
807
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverFlickFromElementAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickFromElementAction.php',
808
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverLongPressAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverLongPressAction.php',
809
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverMoveAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverMoveAction.php',
810
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverScrollAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollAction.php',
811
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverScrollFromElementAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollFromElementAction.php',
812
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTapAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTapAction.php',
813
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTouchAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchAction.php',
814
- 'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTouchScreen' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchScreen.php',
815
- 'Facebook\\WebDriver\\Interactions\\WebDriverActions' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverActions.php',
816
- 'Facebook\\WebDriver\\Interactions\\WebDriverCompositeAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverCompositeAction.php',
817
- 'Facebook\\WebDriver\\Interactions\\WebDriverTouchActions' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverTouchActions.php',
818
- 'Facebook\\WebDriver\\Internal\\WebDriverLocatable' => $vendorDir . '/facebook/webdriver/lib/Internal/WebDriverLocatable.php',
819
- 'Facebook\\WebDriver\\JavaScriptExecutor' => $vendorDir . '/facebook/webdriver/lib/JavaScriptExecutor.php',
820
- 'Facebook\\WebDriver\\Net\\URLChecker' => $vendorDir . '/facebook/webdriver/lib/Net/URLChecker.php',
821
- 'Facebook\\WebDriver\\Remote\\DesiredCapabilities' => $vendorDir . '/facebook/webdriver/lib/Remote/DesiredCapabilities.php',
822
- 'Facebook\\WebDriver\\Remote\\DriverCommand' => $vendorDir . '/facebook/webdriver/lib/Remote/DriverCommand.php',
823
- 'Facebook\\WebDriver\\Remote\\ExecuteMethod' => $vendorDir . '/facebook/webdriver/lib/Remote/ExecuteMethod.php',
824
- 'Facebook\\WebDriver\\Remote\\FileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/FileDetector.php',
825
- 'Facebook\\WebDriver\\Remote\\HttpCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/Remote/HttpCommandExecutor.php',
826
- 'Facebook\\WebDriver\\Remote\\LocalFileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/LocalFileDetector.php',
827
- 'Facebook\\WebDriver\\Remote\\RemoteExecuteMethod' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteExecuteMethod.php',
828
- 'Facebook\\WebDriver\\Remote\\RemoteKeyboard' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteKeyboard.php',
829
- 'Facebook\\WebDriver\\Remote\\RemoteMouse' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteMouse.php',
830
- 'Facebook\\WebDriver\\Remote\\RemoteTargetLocator' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteTargetLocator.php',
831
- 'Facebook\\WebDriver\\Remote\\RemoteTouchScreen' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteTouchScreen.php',
832
- 'Facebook\\WebDriver\\Remote\\RemoteWebDriver' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteWebDriver.php',
833
- 'Facebook\\WebDriver\\Remote\\RemoteWebElement' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteWebElement.php',
834
- 'Facebook\\WebDriver\\Remote\\Service\\DriverCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/Remote/Service/DriverCommandExecutor.php',
835
- 'Facebook\\WebDriver\\Remote\\Service\\DriverService' => $vendorDir . '/facebook/webdriver/lib/Remote/Service/DriverService.php',
836
- 'Facebook\\WebDriver\\Remote\\UselessFileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/UselessFileDetector.php',
837
- 'Facebook\\WebDriver\\Remote\\WebDriverBrowserType' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverBrowserType.php',
838
- 'Facebook\\WebDriver\\Remote\\WebDriverCapabilityType' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverCapabilityType.php',
839
- 'Facebook\\WebDriver\\Remote\\WebDriverCommand' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverCommand.php',
840
- 'Facebook\\WebDriver\\Remote\\WebDriverResponse' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverResponse.php',
841
- 'Facebook\\WebDriver\\Support\\Events\\EventFiringWebDriver' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebDriver.php',
842
- 'Facebook\\WebDriver\\Support\\Events\\EventFiringWebDriverNavigation' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebDriverNavigation.php',
843
- 'Facebook\\WebDriver\\Support\\Events\\EventFiringWebElement' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebElement.php',
844
- 'Facebook\\WebDriver\\Support\\XPathEscaper' => $vendorDir . '/facebook/webdriver/lib/Support/XPathEscaper.php',
845
- 'Facebook\\WebDriver\\WebDriver' => $vendorDir . '/facebook/webdriver/lib/WebDriver.php',
846
- 'Facebook\\WebDriver\\WebDriverAction' => $vendorDir . '/facebook/webdriver/lib/WebDriverAction.php',
847
- 'Facebook\\WebDriver\\WebDriverAlert' => $vendorDir . '/facebook/webdriver/lib/WebDriverAlert.php',
848
- 'Facebook\\WebDriver\\WebDriverBy' => $vendorDir . '/facebook/webdriver/lib/WebDriverBy.php',
849
- 'Facebook\\WebDriver\\WebDriverCapabilities' => $vendorDir . '/facebook/webdriver/lib/WebDriverCapabilities.php',
850
- 'Facebook\\WebDriver\\WebDriverCheckboxes' => $vendorDir . '/facebook/webdriver/lib/WebDriverCheckboxes.php',
851
- 'Facebook\\WebDriver\\WebDriverCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/WebDriverCommandExecutor.php',
852
- 'Facebook\\WebDriver\\WebDriverDimension' => $vendorDir . '/facebook/webdriver/lib/WebDriverDimension.php',
853
- 'Facebook\\WebDriver\\WebDriverDispatcher' => $vendorDir . '/facebook/webdriver/lib/WebDriverDispatcher.php',
854
- 'Facebook\\WebDriver\\WebDriverElement' => $vendorDir . '/facebook/webdriver/lib/WebDriverElement.php',
855
- 'Facebook\\WebDriver\\WebDriverEventListener' => $vendorDir . '/facebook/webdriver/lib/WebDriverEventListener.php',
856
- 'Facebook\\WebDriver\\WebDriverExpectedCondition' => $vendorDir . '/facebook/webdriver/lib/WebDriverExpectedCondition.php',
857
- 'Facebook\\WebDriver\\WebDriverHasInputDevices' => $vendorDir . '/facebook/webdriver/lib/WebDriverHasInputDevices.php',
858
- 'Facebook\\WebDriver\\WebDriverKeyboard' => $vendorDir . '/facebook/webdriver/lib/WebDriverKeyboard.php',
859
- 'Facebook\\WebDriver\\WebDriverKeys' => $vendorDir . '/facebook/webdriver/lib/WebDriverKeys.php',
860
- 'Facebook\\WebDriver\\WebDriverMouse' => $vendorDir . '/facebook/webdriver/lib/WebDriverMouse.php',
861
- 'Facebook\\WebDriver\\WebDriverNavigation' => $vendorDir . '/facebook/webdriver/lib/WebDriverNavigation.php',
862
- 'Facebook\\WebDriver\\WebDriverOptions' => $vendorDir . '/facebook/webdriver/lib/WebDriverOptions.php',
863
- 'Facebook\\WebDriver\\WebDriverPlatform' => $vendorDir . '/facebook/webdriver/lib/WebDriverPlatform.php',
864
- 'Facebook\\WebDriver\\WebDriverPoint' => $vendorDir . '/facebook/webdriver/lib/WebDriverPoint.php',
865
- 'Facebook\\WebDriver\\WebDriverRadios' => $vendorDir . '/facebook/webdriver/lib/WebDriverRadios.php',
866
- 'Facebook\\WebDriver\\WebDriverSearchContext' => $vendorDir . '/facebook/webdriver/lib/WebDriverSearchContext.php',
867
- 'Facebook\\WebDriver\\WebDriverSelect' => $vendorDir . '/facebook/webdriver/lib/WebDriverSelect.php',
868
- 'Facebook\\WebDriver\\WebDriverSelectInterface' => $vendorDir . '/facebook/webdriver/lib/WebDriverSelectInterface.php',
869
- 'Facebook\\WebDriver\\WebDriverTargetLocator' => $vendorDir . '/facebook/webdriver/lib/WebDriverTargetLocator.php',
870
- 'Facebook\\WebDriver\\WebDriverTimeouts' => $vendorDir . '/facebook/webdriver/lib/WebDriverTimeouts.php',
871
- 'Facebook\\WebDriver\\WebDriverUpAction' => $vendorDir . '/facebook/webdriver/lib/WebDriverUpAction.php',
872
- 'Facebook\\WebDriver\\WebDriverWait' => $vendorDir . '/facebook/webdriver/lib/WebDriverWait.php',
873
- 'Facebook\\WebDriver\\WebDriverWindow' => $vendorDir . '/facebook/webdriver/lib/WebDriverWindow.php',
874
- 'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
875
- 'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
876
- 'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
877
- 'Firebase\\JWT\\BeforeValidException' => $vendorDir . '/firebase/php-jwt/src/BeforeValidException.php',
878
- 'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
879
- 'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
880
- 'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
881
- 'Gumlet\\ImageResize' => $vendorDir . '/gumlet/php-image-resize/lib/ImageResize.php',
882
- 'Gumlet\\ImageResizeException' => $vendorDir . '/gumlet/php-image-resize/lib/ImageResizeException.php',
883
- 'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
884
- 'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
885
- 'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
886
- 'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
887
- 'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
888
- 'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
889
- 'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
890
- 'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
891
- 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
892
- 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
893
- 'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
894
- 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
895
- 'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
896
- 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
897
- 'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
898
- 'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
899
- 'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
900
- 'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
901
- 'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
902
- 'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
903
- 'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
904
- 'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
905
- 'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
906
- 'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
907
- 'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
908
- 'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
909
- 'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
910
- 'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
911
- 'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
912
- 'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
913
- 'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
914
- 'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
915
- 'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
916
- 'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
917
- 'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
918
- 'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
919
- 'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
920
- 'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
921
- 'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
922
- 'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
923
- 'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
924
- 'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
925
- 'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
926
- 'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
927
- 'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
928
- 'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
929
- 'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
930
- 'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
931
- 'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
932
- 'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
933
- 'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
934
- 'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
935
- 'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
936
- 'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
937
- 'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
938
- 'GuzzleHttp\\Psr7\\Rfc7230' => $vendorDir . '/guzzlehttp/psr7/src/Rfc7230.php',
939
- 'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
940
- 'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
941
- 'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
942
- 'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
943
- 'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
944
- 'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
945
- 'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
946
- 'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
947
- 'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
948
- 'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
949
- 'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
950
- 'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
951
- 'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
952
- 'Handlebars\\Arguments' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Arguments.php',
953
- 'Handlebars\\Autoloader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Autoloader.php',
954
- 'Handlebars\\BaseString' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/BaseString.php',
955
- 'Handlebars\\Cache' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache.php',
956
- 'Handlebars\\Cache\\APC' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/APC.php',
957
- 'Handlebars\\Cache\\Disk' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/Disk.php',
958
- 'Handlebars\\Cache\\Dummy' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/Dummy.php',
959
- 'Handlebars\\ChildContext' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/ChildContext.php',
960
- 'Handlebars\\Context' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Context.php',
961
- 'Handlebars\\Handlebars' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Handlebars.php',
962
- 'Handlebars\\Helper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper.php',
963
- 'Handlebars\\Helper\\BindAttrHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/BindAttrHelper.php',
964
- 'Handlebars\\Helper\\EachHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/EachHelper.php',
965
- 'Handlebars\\Helper\\IfHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/IfHelper.php',
966
- 'Handlebars\\Helper\\UnlessHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/UnlessHelper.php',
967
- 'Handlebars\\Helper\\WithHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/WithHelper.php',
968
- 'Handlebars\\Helpers' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helpers.php',
969
- 'Handlebars\\Loader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader.php',
970
- 'Handlebars\\Loader\\ArrayLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/ArrayLoader.php',
971
- 'Handlebars\\Loader\\FilesystemLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/FilesystemLoader.php',
972
- 'Handlebars\\Loader\\InlineLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/InlineLoader.php',
973
- 'Handlebars\\Loader\\StringLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/StringLoader.php',
974
- 'Handlebars\\Parser' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Parser.php',
975
- 'Handlebars\\SafeString' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/SafeString.php',
976
- 'Handlebars\\String' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/String.php',
977
- 'Handlebars\\StringWrapper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/StringWrapper.php',
978
- 'Handlebars\\Template' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Template.php',
979
- 'Handlebars\\Tokenizer' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Tokenizer.php',
980
- 'Hautelook\\Phpass\\PasswordHash' => $vendorDir . '/hautelook/phpass/src/Hautelook/Phpass/PasswordHash.php',
981
- 'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/illuminate/contracts/Auth/Access/Authorizable.php',
982
- 'Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/illuminate/contracts/Auth/Access/Gate.php',
983
- 'Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/illuminate/contracts/Auth/Authenticatable.php',
984
- 'Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/illuminate/contracts/Auth/CanResetPassword.php',
985
- 'Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/illuminate/contracts/Auth/Factory.php',
986
- 'Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/illuminate/contracts/Auth/Guard.php',
987
- 'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/illuminate/contracts/Auth/MustVerifyEmail.php',
988
- 'Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/illuminate/contracts/Auth/PasswordBroker.php',
989
- 'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/illuminate/contracts/Auth/PasswordBrokerFactory.php',
990
- 'Illuminate\\Contracts\\Auth\\StatefulGuard' => $vendorDir . '/illuminate/contracts/Auth/StatefulGuard.php',
991
- 'Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => $vendorDir . '/illuminate/contracts/Auth/SupportsBasicAuth.php',
992
- 'Illuminate\\Contracts\\Auth\\UserProvider' => $vendorDir . '/illuminate/contracts/Auth/UserProvider.php',
993
- 'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => $vendorDir . '/illuminate/contracts/Broadcasting/Broadcaster.php',
994
- 'Illuminate\\Contracts\\Broadcasting\\Factory' => $vendorDir . '/illuminate/contracts/Broadcasting/Factory.php',
995
- 'Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php',
996
- 'Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php',
997
- 'Illuminate\\Contracts\\Bus\\Dispatcher' => $vendorDir . '/illuminate/contracts/Bus/Dispatcher.php',
998
- 'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => $vendorDir . '/illuminate/contracts/Bus/QueueingDispatcher.php',
999
- 'Illuminate\\Contracts\\Cache\\Factory' => $vendorDir . '/illuminate/contracts/Cache/Factory.php',
1000
- 'Illuminate\\Contracts\\Cache\\Lock' => $vendorDir . '/illuminate/contracts/Cache/Lock.php',
1001
- 'Illuminate\\Contracts\\Cache\\LockProvider' => $vendorDir . '/illuminate/contracts/Cache/LockProvider.php',
1002
- 'Illuminate\\Contracts\\Cache\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Cache/LockTimeoutException.php',
1003
- 'Illuminate\\Contracts\\Cache\\Repository' => $vendorDir . '/illuminate/contracts/Cache/Repository.php',
1004
- 'Illuminate\\Contracts\\Cache\\Store' => $vendorDir . '/illuminate/contracts/Cache/Store.php',
1005
- 'Illuminate\\Contracts\\Config\\Repository' => $vendorDir . '/illuminate/contracts/Config/Repository.php',
1006
- 'Illuminate\\Contracts\\Console\\Application' => $vendorDir . '/illuminate/contracts/Console/Application.php',
1007
- 'Illuminate\\Contracts\\Console\\Kernel' => $vendorDir . '/illuminate/contracts/Console/Kernel.php',
1008
- 'Illuminate\\Contracts\\Container\\BindingResolutionException' => $vendorDir . '/illuminate/contracts/Container/BindingResolutionException.php',
1009
- 'Illuminate\\Contracts\\Container\\Container' => $vendorDir . '/illuminate/contracts/Container/Container.php',
1010
- 'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/contracts/Container/ContextualBindingBuilder.php',
1011
- 'Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/illuminate/contracts/Cookie/Factory.php',
1012
- 'Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/illuminate/contracts/Cookie/QueueingFactory.php',
1013
- 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/illuminate/contracts/Database/Events/MigrationEvent.php',
1014
- 'Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/illuminate/contracts/Database/ModelIdentifier.php',
1015
- 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/illuminate/contracts/Debug/ExceptionHandler.php',
1016
- 'Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/illuminate/contracts/Encryption/DecryptException.php',
1017
- 'Illuminate\\Contracts\\Encryption\\EncryptException' => $vendorDir . '/illuminate/contracts/Encryption/EncryptException.php',
1018
- 'Illuminate\\Contracts\\Encryption\\Encrypter' => $vendorDir . '/illuminate/contracts/Encryption/Encrypter.php',
1019
- 'Illuminate\\Contracts\\Events\\Dispatcher' => $vendorDir . '/illuminate/contracts/Events/Dispatcher.php',
1020
- 'Illuminate\\Contracts\\Filesystem\\Cloud' => $vendorDir . '/illuminate/contracts/Filesystem/Cloud.php',
1021
- 'Illuminate\\Contracts\\Filesystem\\Factory' => $vendorDir . '/illuminate/contracts/Filesystem/Factory.php',
1022
- 'Illuminate\\Contracts\\Filesystem\\FileExistsException' => $vendorDir . '/illuminate/contracts/Filesystem/FileExistsException.php',
1023
- 'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/illuminate/contracts/Filesystem/FileNotFoundException.php',
1024
- 'Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/illuminate/contracts/Filesystem/Filesystem.php',
1025
- 'Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/illuminate/contracts/Foundation/Application.php',
1026
- 'Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/illuminate/contracts/Hashing/Hasher.php',
1027
- 'Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/illuminate/contracts/Http/Kernel.php',
1028
- 'Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/illuminate/contracts/Mail/MailQueue.php',
1029
- 'Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/illuminate/contracts/Mail/Mailable.php',
1030
- 'Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/illuminate/contracts/Mail/Mailer.php',
1031
- 'Illuminate\\Contracts\\Notifications\\Dispatcher' => $vendorDir . '/illuminate/contracts/Notifications/Dispatcher.php',
1032
- 'Illuminate\\Contracts\\Notifications\\Factory' => $vendorDir . '/illuminate/contracts/Notifications/Factory.php',
1033
- 'Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => $vendorDir . '/illuminate/contracts/Pagination/LengthAwarePaginator.php',
1034
- 'Illuminate\\Contracts\\Pagination\\Paginator' => $vendorDir . '/illuminate/contracts/Pagination/Paginator.php',
1035
- 'Illuminate\\Contracts\\Pipeline\\Hub' => $vendorDir . '/illuminate/contracts/Pipeline/Hub.php',
1036
- 'Illuminate\\Contracts\\Pipeline\\Pipeline' => $vendorDir . '/illuminate/contracts/Pipeline/Pipeline.php',
1037
- 'Illuminate\\Contracts\\Queue\\EntityNotFoundException' => $vendorDir . '/illuminate/contracts/Queue/EntityNotFoundException.php',
1038
- 'Illuminate\\Contracts\\Queue\\EntityResolver' => $vendorDir . '/illuminate/contracts/Queue/EntityResolver.php',
1039
- 'Illuminate\\Contracts\\Queue\\Factory' => $vendorDir . '/illuminate/contracts/Queue/Factory.php',
1040
- 'Illuminate\\Contracts\\Queue\\Job' => $vendorDir . '/illuminate/contracts/Queue/Job.php',
1041
- 'Illuminate\\Contracts\\Queue\\Monitor' => $vendorDir . '/illuminate/contracts/Queue/Monitor.php',
1042
- 'Illuminate\\Contracts\\Queue\\Queue' => $vendorDir . '/illuminate/contracts/Queue/Queue.php',
1043
- 'Illuminate\\Contracts\\Queue\\QueueableCollection' => $vendorDir . '/illuminate/contracts/Queue/QueueableCollection.php',
1044
- 'Illuminate\\Contracts\\Queue\\QueueableEntity' => $vendorDir . '/illuminate/contracts/Queue/QueueableEntity.php',
1045
- 'Illuminate\\Contracts\\Queue\\ShouldQueue' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueue.php',
1046
- 'Illuminate\\Contracts\\Redis\\Connection' => $vendorDir . '/illuminate/contracts/Redis/Connection.php',
1047
- 'Illuminate\\Contracts\\Redis\\Connector' => $vendorDir . '/illuminate/contracts/Redis/Connector.php',
1048
- 'Illuminate\\Contracts\\Redis\\Factory' => $vendorDir . '/illuminate/contracts/Redis/Factory.php',
1049
- 'Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => $vendorDir . '/illuminate/contracts/Redis/LimiterTimeoutException.php',
1050
- 'Illuminate\\Contracts\\Routing\\BindingRegistrar' => $vendorDir . '/illuminate/contracts/Routing/BindingRegistrar.php',
1051
- 'Illuminate\\Contracts\\Routing\\Registrar' => $vendorDir . '/illuminate/contracts/Routing/Registrar.php',
1052
- 'Illuminate\\Contracts\\Routing\\ResponseFactory' => $vendorDir . '/illuminate/contracts/Routing/ResponseFactory.php',
1053
- 'Illuminate\\Contracts\\Routing\\UrlGenerator' => $vendorDir . '/illuminate/contracts/Routing/UrlGenerator.php',
1054
- 'Illuminate\\Contracts\\Routing\\UrlRoutable' => $vendorDir . '/illuminate/contracts/Routing/UrlRoutable.php',
1055
- 'Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/illuminate/contracts/Session/Session.php',
1056
- 'Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/illuminate/contracts/Support/Arrayable.php',
1057
- 'Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/illuminate/contracts/Support/DeferrableProvider.php',
1058
- 'Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/illuminate/contracts/Support/Htmlable.php',
1059
- 'Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/illuminate/contracts/Support/Jsonable.php',
1060
- 'Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/illuminate/contracts/Support/MessageBag.php',
1061
- 'Illuminate\\Contracts\\Support\\MessageProvider' => $vendorDir . '/illuminate/contracts/Support/MessageProvider.php',
1062
- 'Illuminate\\Contracts\\Support\\Renderable' => $vendorDir . '/illuminate/contracts/Support/Renderable.php',
1063
- 'Illuminate\\Contracts\\Support\\Responsable' => $vendorDir . '/illuminate/contracts/Support/Responsable.php',
1064
- 'Illuminate\\Contracts\\Translation\\HasLocalePreference' => $vendorDir . '/illuminate/contracts/Translation/HasLocalePreference.php',
1065
- 'Illuminate\\Contracts\\Translation\\Loader' => $vendorDir . '/illuminate/contracts/Translation/Loader.php',
1066
- 'Illuminate\\Contracts\\Translation\\Translator' => $vendorDir . '/illuminate/contracts/Translation/Translator.php',
1067
- 'Illuminate\\Contracts\\Validation\\Factory' => $vendorDir . '/illuminate/contracts/Validation/Factory.php',
1068
- 'Illuminate\\Contracts\\Validation\\ImplicitRule' => $vendorDir . '/illuminate/contracts/Validation/ImplicitRule.php',
1069
- 'Illuminate\\Contracts\\Validation\\Rule' => $vendorDir . '/illuminate/contracts/Validation/Rule.php',
1070
- 'Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => $vendorDir . '/illuminate/contracts/Validation/ValidatesWhenResolved.php',
1071
- 'Illuminate\\Contracts\\Validation\\Validator' => $vendorDir . '/illuminate/contracts/Validation/Validator.php',
1072
- 'Illuminate\\Contracts\\View\\Engine' => $vendorDir . '/illuminate/contracts/View/Engine.php',
1073
- 'Illuminate\\Contracts\\View\\Factory' => $vendorDir . '/illuminate/contracts/View/Factory.php',
1074
- 'Illuminate\\Contracts\\View\\View' => $vendorDir . '/illuminate/contracts/View/View.php',
1075
- 'Illuminate\\Support\\AggregateServiceProvider' => $vendorDir . '/illuminate/support/AggregateServiceProvider.php',
1076
- 'Illuminate\\Support\\Arr' => $vendorDir . '/illuminate/support/Arr.php',
1077
- 'Illuminate\\Support\\Carbon' => $vendorDir . '/illuminate/support/Carbon.php',
1078
- 'Illuminate\\Support\\Collection' => $vendorDir . '/illuminate/support/Collection.php',
1079
- 'Illuminate\\Support\\Composer' => $vendorDir . '/illuminate/support/Composer.php',
1080
- 'Illuminate\\Support\\ConfigurationUrlParser' => $vendorDir . '/illuminate/support/ConfigurationUrlParser.php',
1081
- 'Illuminate\\Support\\DateFactory' => $vendorDir . '/illuminate/support/DateFactory.php',
1082
- 'Illuminate\\Support\\Facades\\App' => $vendorDir . '/illuminate/support/Facades/App.php',
1083
- 'Illuminate\\Support\\Facades\\Artisan' => $vendorDir . '/illuminate/support/Facades/Artisan.php',
1084
- 'Illuminate\\Support\\Facades\\Auth' => $vendorDir . '/illuminate/support/Facades/Auth.php',
1085
- 'Illuminate\\Support\\Facades\\Blade' => $vendorDir . '/illuminate/support/Facades/Blade.php',
1086
- 'Illuminate\\Support\\Facades\\Broadcast' => $vendorDir . '/illuminate/support/Facades/Broadcast.php',
1087
- 'Illuminate\\Support\\Facades\\Bus' => $vendorDir . '/illuminate/support/Facades/Bus.php',
1088
- 'Illuminate\\Support\\Facades\\Cache' => $vendorDir . '/illuminate/support/Facades/Cache.php',
1089
- 'Illuminate\\Support\\Facades\\Config' => $vendorDir . '/illuminate/support/Facades/Config.php',
1090
- 'Illuminate\\Support\\Facades\\Cookie' => $vendorDir . '/illuminate/support/Facades/Cookie.php',
1091
- 'Illuminate\\Support\\Facades\\Crypt' => $vendorDir . '/illuminate/support/Facades/Crypt.php',
1092
- 'Illuminate\\Support\\Facades\\DB' => $vendorDir . '/illuminate/support/Facades/DB.php',
1093
- 'Illuminate\\Support\\Facades\\Date' => $vendorDir . '/illuminate/support/Facades/Date.php',
1094
- 'Illuminate\\Support\\Facades\\Event' => $vendorDir . '/illuminate/support/Facades/Event.php',
1095
- 'Illuminate\\Support\\Facades\\Facade' => $vendorDir . '/illuminate/support/Facades/Facade.php',
1096
- 'Illuminate\\Support\\Facades\\File' => $vendorDir . '/illuminate/support/Facades/File.php',
1097
- 'Illuminate\\Support\\Facades\\Gate' => $vendorDir . '/illuminate/support/Facades/Gate.php',
1098
- 'Illuminate\\Support\\Facades\\Hash' => $vendorDir . '/illuminate/support/Facades/Hash.php',
1099
- 'Illuminate\\Support\\Facades\\Input' => $vendorDir . '/illuminate/support/Facades/Input.php',
1100
- 'Illuminate\\Support\\Facades\\Lang' => $vendorDir . '/illuminate/support/Facades/Lang.php',
1101
- 'Illuminate\\Support\\Facades\\Log' => $vendorDir . '/illuminate/support/Facades/Log.php',
1102
- 'Illuminate\\Support\\Facades\\Mail' => $vendorDir . '/illuminate/support/Facades/Mail.php',
1103
- 'Illuminate\\Support\\Facades\\Notification' => $vendorDir . '/illuminate/support/Facades/Notification.php',
1104
- 'Illuminate\\Support\\Facades\\Password' => $vendorDir . '/illuminate/support/Facades/Password.php',
1105
- 'Illuminate\\Support\\Facades\\Queue' => $vendorDir . '/illuminate/support/Facades/Queue.php',
1106
- 'Illuminate\\Support\\Facades\\Redirect' => $vendorDir . '/illuminate/support/Facades/Redirect.php',
1107
- 'Illuminate\\Support\\Facades\\Redis' => $vendorDir . '/illuminate/support/Facades/Redis.php',
1108
- 'Illuminate\\Support\\Facades\\Request' => $vendorDir . '/illuminate/support/Facades/Request.php',
1109
- 'Illuminate\\Support\\Facades\\Response' => $vendorDir . '/illuminate/support/Facades/Response.php',
1110
- 'Illuminate\\Support\\Facades\\Route' => $vendorDir . '/illuminate/support/Facades/Route.php',
1111
- 'Illuminate\\Support\\Facades\\Schema' => $vendorDir . '/illuminate/support/Facades/Schema.php',
1112
- 'Illuminate\\Support\\Facades\\Session' => $vendorDir . '/illuminate/support/Facades/Session.php',
1113
- 'Illuminate\\Support\\Facades\\Storage' => $vendorDir . '/illuminate/support/Facades/Storage.php',
1114
- 'Illuminate\\Support\\Facades\\URL' => $vendorDir . '/illuminate/support/Facades/URL.php',
1115
- 'Illuminate\\Support\\Facades\\Validator' => $vendorDir . '/illuminate/support/Facades/Validator.php',
1116
- 'Illuminate\\Support\\Facades\\View' => $vendorDir . '/illuminate/support/Facades/View.php',
1117
- 'Illuminate\\Support\\Fluent' => $vendorDir . '/illuminate/support/Fluent.php',
1118
- 'Illuminate\\Support\\HigherOrderCollectionProxy' => $vendorDir . '/illuminate/support/HigherOrderCollectionProxy.php',
1119
- 'Illuminate\\Support\\HigherOrderTapProxy' => $vendorDir . '/illuminate/support/HigherOrderTapProxy.php',
1120
- 'Illuminate\\Support\\HtmlString' => $vendorDir . '/illuminate/support/HtmlString.php',
1121
- 'Illuminate\\Support\\InteractsWithTime' => $vendorDir . '/illuminate/support/InteractsWithTime.php',
1122
- 'Illuminate\\Support\\Manager' => $vendorDir . '/illuminate/support/Manager.php',
1123
- 'Illuminate\\Support\\MessageBag' => $vendorDir . '/illuminate/support/MessageBag.php',
1124
- 'Illuminate\\Support\\NamespacedItemResolver' => $vendorDir . '/illuminate/support/NamespacedItemResolver.php',
1125
- 'Illuminate\\Support\\Optional' => $vendorDir . '/illuminate/support/Optional.php',
1126
- 'Illuminate\\Support\\Pluralizer' => $vendorDir . '/illuminate/support/Pluralizer.php',
1127
- 'Illuminate\\Support\\ProcessUtils' => $vendorDir . '/illuminate/support/ProcessUtils.php',
1128
- 'Illuminate\\Support\\ServiceProvider' => $vendorDir . '/illuminate/support/ServiceProvider.php',
1129
- 'Illuminate\\Support\\Str' => $vendorDir . '/illuminate/support/Str.php',
1130
- 'Illuminate\\Support\\Testing\\Fakes\\BusFake' => $vendorDir . '/illuminate/support/Testing/Fakes/BusFake.php',
1131
- 'Illuminate\\Support\\Testing\\Fakes\\EventFake' => $vendorDir . '/illuminate/support/Testing/Fakes/EventFake.php',
1132
- 'Illuminate\\Support\\Testing\\Fakes\\MailFake' => $vendorDir . '/illuminate/support/Testing/Fakes/MailFake.php',
1133
- 'Illuminate\\Support\\Testing\\Fakes\\NotificationFake' => $vendorDir . '/illuminate/support/Testing/Fakes/NotificationFake.php',
1134
- 'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => $vendorDir . '/illuminate/support/Testing/Fakes/PendingMailFake.php',
1135
- 'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => $vendorDir . '/illuminate/support/Testing/Fakes/QueueFake.php',
1136
- 'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => $vendorDir . '/illuminate/support/Traits/CapsuleManagerTrait.php',
1137
- 'Illuminate\\Support\\Traits\\ForwardsCalls' => $vendorDir . '/illuminate/support/Traits/ForwardsCalls.php',
1138
- 'Illuminate\\Support\\Traits\\Localizable' => $vendorDir . '/illuminate/support/Traits/Localizable.php',
1139
- 'Illuminate\\Support\\Traits\\Macroable' => $vendorDir . '/illuminate/support/Traits/Macroable.php',
1140
- 'Illuminate\\Support\\Traits\\Tappable' => $vendorDir . '/illuminate/support/Traits/Tappable.php',
1141
- 'Illuminate\\Support\\ViewErrorBag' => $vendorDir . '/illuminate/support/ViewErrorBag.php',
1142
- 'JsonSchema\\Constraints\\BaseConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php',
1143
- 'JsonSchema\\Constraints\\CollectionConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php',
1144
- 'JsonSchema\\Constraints\\Constraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php',
1145
- 'JsonSchema\\Constraints\\ConstraintInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php',
1146
- 'JsonSchema\\Constraints\\EnumConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php',
1147
- 'JsonSchema\\Constraints\\Factory' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php',
1148
- 'JsonSchema\\Constraints\\FormatConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php',
1149
- 'JsonSchema\\Constraints\\NumberConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php',
1150
- 'JsonSchema\\Constraints\\ObjectConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php',
1151
- 'JsonSchema\\Constraints\\SchemaConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php',
1152
- 'JsonSchema\\Constraints\\StringConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php',
1153
- 'JsonSchema\\Constraints\\TypeCheck\\LooseTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php',
1154
- 'JsonSchema\\Constraints\\TypeCheck\\StrictTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php',
1155
- 'JsonSchema\\Constraints\\TypeCheck\\TypeCheckInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php',
1156
- 'JsonSchema\\Constraints\\TypeConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php',
1157
- 'JsonSchema\\Constraints\\UndefinedConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php',
1158
- 'JsonSchema\\Entity\\JsonPointer' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php',
1159
- 'JsonSchema\\Exception\\ExceptionInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php',
1160
- 'JsonSchema\\Exception\\InvalidArgumentException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php',
1161
- 'JsonSchema\\Exception\\InvalidConfigException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php',
1162
- 'JsonSchema\\Exception\\InvalidSchemaException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php',
1163
- 'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php',
1164
- 'JsonSchema\\Exception\\InvalidSourceUriException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php',
1165
- 'JsonSchema\\Exception\\JsonDecodingException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php',
1166
- 'JsonSchema\\Exception\\ResourceNotFoundException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php',
1167
- 'JsonSchema\\Exception\\RuntimeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php',
1168
- 'JsonSchema\\Exception\\UnresolvableJsonPointerException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php',
1169
- 'JsonSchema\\Exception\\UriResolverException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php',
1170
- 'JsonSchema\\Exception\\ValidationException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php',
1171
- 'JsonSchema\\Iterator\\ObjectIterator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php',
1172
- 'JsonSchema\\Rfc3339' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php',
1173
- 'JsonSchema\\SchemaStorage' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php',
1174
- 'JsonSchema\\SchemaStorageInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php',
1175
- 'JsonSchema\\UriResolverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php',
1176
- 'JsonSchema\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php',
1177
- 'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php',
1178
- 'JsonSchema\\Uri\\Retrievers\\Curl' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php',
1179
- 'JsonSchema\\Uri\\Retrievers\\FileGetContents' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php',
1180
- 'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php',
1181
- 'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php',
1182
- 'JsonSchema\\Uri\\UriResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php',
1183
- 'JsonSchema\\Uri\\UriRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php',
1184
- 'JsonSchema\\Validator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Validator.php',
1185
- 'MikeMcLin\\WpPassword\\Contracts\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/Contracts/WpPassword.php',
1186
- 'MikeMcLin\\WpPassword\\Facades\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/Facades/WpPassword.php',
1187
- 'MikeMcLin\\WpPassword\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/WpPassword.php',
1188
- 'MikeMcLin\\WpPassword\\WpPasswordProvider' => $vendorDir . '/mikemclin/laravel-wp-password/src/WpPasswordProvider.php',
1189
- 'Mustache_Autoloader' => $vendorDir . '/mustache/mustache/src/Mustache/Autoloader.php',
1190
- 'Mustache_Cache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache.php',
1191
- 'Mustache_Cache_AbstractCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/AbstractCache.php',
1192
- 'Mustache_Cache_FilesystemCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/FilesystemCache.php',
1193
- 'Mustache_Cache_NoopCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/NoopCache.php',
1194
- 'Mustache_Compiler' => $vendorDir . '/mustache/mustache/src/Mustache/Compiler.php',
1195
- 'Mustache_Context' => $vendorDir . '/mustache/mustache/src/Mustache/Context.php',
1196
- 'Mustache_Engine' => $vendorDir . '/mustache/mustache/src/Mustache/Engine.php',
1197
- 'Mustache_Exception' => $vendorDir . '/mustache/mustache/src/Mustache/Exception.php',
1198
- 'Mustache_Exception_InvalidArgumentException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/InvalidArgumentException.php',
1199
- 'Mustache_Exception_LogicException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/LogicException.php',
1200
- 'Mustache_Exception_RuntimeException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/RuntimeException.php',
1201
- 'Mustache_Exception_SyntaxException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/SyntaxException.php',
1202
- 'Mustache_Exception_UnknownFilterException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php',
1203
- 'Mustache_Exception_UnknownHelperException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php',
1204
- 'Mustache_Exception_UnknownTemplateException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php',
1205
- 'Mustache_HelperCollection' => $vendorDir . '/mustache/mustache/src/Mustache/HelperCollection.php',
1206
- 'Mustache_LambdaHelper' => $vendorDir . '/mustache/mustache/src/Mustache/LambdaHelper.php',
1207
- 'Mustache_Loader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader.php',
1208
- 'Mustache_Loader_ArrayLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/ArrayLoader.php',
1209
- 'Mustache_Loader_CascadingLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/CascadingLoader.php',
1210
- 'Mustache_Loader_FilesystemLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php',
1211
- 'Mustache_Loader_InlineLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/InlineLoader.php',
1212
- 'Mustache_Loader_MutableLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/MutableLoader.php',
1213
- 'Mustache_Loader_ProductionFilesystemLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/ProductionFilesystemLoader.php',
1214
- 'Mustache_Loader_StringLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/StringLoader.php',
1215
- 'Mustache_Logger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger.php',
1216
- 'Mustache_Logger_AbstractLogger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger/AbstractLogger.php',
1217
- 'Mustache_Logger_StreamLogger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger/StreamLogger.php',
1218
- 'Mustache_Parser' => $vendorDir . '/mustache/mustache/src/Mustache/Parser.php',
1219
- 'Mustache_Source' => $vendorDir . '/mustache/mustache/src/Mustache/Source.php',
1220
- 'Mustache_Source_FilesystemSource' => $vendorDir . '/mustache/mustache/src/Mustache/Source/FilesystemSource.php',
1221
- 'Mustache_Template' => $vendorDir . '/mustache/mustache/src/Mustache/Template.php',
1222
- 'Mustache_Tokenizer' => $vendorDir . '/mustache/mustache/src/Mustache/Tokenizer.php',
1223
- 'Mustangostang\\Spyc' => $vendorDir . '/wp-cli/mustangostang-spyc/src/Spyc.php',
1224
- 'MySQLDump' => $vendorDir . '/dg/mysql-dump/src/MySQLDump.php',
1225
- 'MySQLImport' => $vendorDir . '/dg/mysql-dump/src/MySQLImport.php',
1226
- 'Oxymel' => $vendorDir . '/nb/oxymel/Oxymel.php',
1227
- 'OxymelException' => $vendorDir . '/nb/oxymel/Oxymel.php',
1228
- 'OxymelTest' => $vendorDir . '/nb/oxymel/OxymelTest.php',
1229
- 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php',
1230
- 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php',
1231
- 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php',
1232
- 'PHPUnit\\Framework\\BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php',
1233
- 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php',
1234
- 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php',
1235
- 'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php',
1236
- 'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php',
1237
- 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
1238
- 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php',
1239
- 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php',
1240
- 'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php',
1241
- 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
1242
- 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php',
1243
- 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php',
1244
- 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php',
1245
- 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php',
1246
- 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php',
1247
- 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php',
1248
- 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php',
1249
- 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php',
1250
- 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
1251
- 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php',
1252
- 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php',
1253
- 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php',
1254
- 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php',
1255
- 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
1256
- 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php',
1257
- 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php',
1258
- 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php',
1259
- 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php',
1260
- 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php',
1261
- 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php',
1262
- 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php',
1263
- 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php',
1264
- 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php',
1265
- 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
1266
- 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php',
1267
- 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php',
1268
- 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php',
1269
- 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php',
1270
- 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php',
1271
- 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php',
1272
- 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php',
1273
- 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php',
1274
- 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php',
1275
- 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php',
1276
- 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php',
1277
- 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php',
1278
- 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php',
1279
- 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php',
1280
- 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php',
1281
- 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php',
1282
- 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
1283
- 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php',
1284
- 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php',
1285
- 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php',
1286
- 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php',
1287
- 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php',
1288
- 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php',
1289
- 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php',
1290
- 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php',
1291
- 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php',
1292
- 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php',
1293
- 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php',
1294
- 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php',
1295
- 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php',
1296
- 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php',
1297
- 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php',
1298
- 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Match.php',
1299
- 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php',
1300
- 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php',
1301
- 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php',
1302
- 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php',
1303
- 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php',
1304
- 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Generator.php',
1305
- 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php',
1306
- 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php',
1307
- 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php',
1308
- 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php',
1309
- 'PHPUnit\\Framework\\MockObject\\Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invokable.php',
1310
- 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher.php',
1311
- 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php',
1312
- 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php',
1313
- 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php',
1314
- 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php',
1315
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php',
1316
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php',
1317
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php',
1318
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php',
1319
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php',
1320
- 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php',
1321
- 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php',
1322
- 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php',
1323
- 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php',
1324
- 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockBuilder.php',
1325
- 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php',
1326
- 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php',
1327
- 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub.php',
1328
- 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php',
1329
- 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php',
1330
- 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php',
1331
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php',
1332
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php',
1333
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php',
1334
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php',
1335
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php',
1336
- 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php',
1337
- 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Verifiable.php',
1338
- 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php',
1339
- 'PHPUnit\\Framework\\RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php',
1340
- 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php',
1341
- 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
1342
- 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php',
1343
- 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php',
1344
- 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php',
1345
- 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php',
1346
- 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php',
1347
- 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php',
1348
- 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',
1349
- 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php',
1350
- 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php',
1351
- 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php',
1352
- 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php',
1353
- 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php',
1354
- 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
1355
- 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php',
1356
- 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php',
1357
- 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php',
1358
- 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php',
1359
- 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php',
1360
- 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
1361
- 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
1362
- 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
1363
- 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
1364
- 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
1365
- 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
1366
- 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php',
1367
- 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
1368
- 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php',
1369
- 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php',
1370
- 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php',
1371
- 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php',
1372
- 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php',
1373
- 'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php',
1374
- 'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php',
1375
- 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php',
1376
- 'PHPUnit\\Util\\Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php',
1377
- 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php',
1378
- 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php',
1379
- 'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php',
1380
- 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php',
1381
- 'PHPUnit\\Util\\InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php',
1382
- 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php',
1383
- 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php',
1384
- 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php',
1385
- 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php',
1386
- 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php',
1387
- 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php',
1388
- 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php',
1389
- 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php',
1390
- 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php',
1391
- 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php',
1392
- 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php',
1393
- 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php',
1394
- 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php',
1395
- 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php',
1396
- 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php',
1397
- 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php',
1398
- 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php',
1399
- 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php',
1400
- 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockObject.php',
1401
- 'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
1402
- 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1403
- 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1404
- 'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1405
- 'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1406
- 'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1407
- 'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1408
- 'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1409
- 'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1410
- 'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1411
- 'PHP_Token_ASYNC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1412
- 'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1413
- 'PHP_Token_AWAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1414
- 'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1415
- 'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1416
- 'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1417
- 'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1418
- 'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1419
- 'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1420
- 'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1421
- 'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1422
- 'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1423
- 'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1424
- 'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1425
- 'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1426
- 'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1427
- 'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1428
- 'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1429
- 'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1430
- 'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1431
- 'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1432
- 'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1433
- 'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1434
- 'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1435
- 'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1436
- 'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1437
- 'PHP_Token_COMPILER_HALT_OFFSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1438
- 'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1439
- 'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1440
- 'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1441
- 'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1442
- 'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1443
- 'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1444
- 'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1445
- 'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1446
- 'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1447
- 'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1448
- 'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1449
- 'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1450
- 'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1451
- 'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1452
- 'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1453
- 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1454
- 'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1455
- 'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1456
- 'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1457
- 'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1458
- 'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1459
- 'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1460
- 'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1461
- 'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1462
- 'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1463
- 'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1464
- 'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1465
- 'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1466
- 'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1467
- 'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1468
- 'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1469
- 'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1470
- 'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1471
- 'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1472
- 'PHP_Token_ENUM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1473
- 'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1474
- 'PHP_Token_EQUALS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1475
- 'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1476
- 'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1477
- 'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1478
- 'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1479
- 'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1480
- 'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1481
- 'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1482
- 'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1483
- 'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1484
- 'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1485
- 'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1486
- 'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1487
- 'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1488
- 'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1489
- 'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1490
- 'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1491
- 'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1492
- 'PHP_Token_IN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1493
- 'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1494
- 'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1495
- 'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1496
- 'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1497
- 'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1498
- 'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1499
- 'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1500
- 'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1501
- 'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1502
- 'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1503
- 'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1504
- 'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1505
- 'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1506
- 'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1507
- 'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1508
- 'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1509
- 'PHP_Token_JOIN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1510
- 'PHP_Token_LAMBDA_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1511
- 'PHP_Token_LAMBDA_CP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1512
- 'PHP_Token_LAMBDA_OP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1513
- 'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1514
- 'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1515
- 'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1516
- 'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1517
- 'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1518
- 'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1519
- 'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1520
- 'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1521
- 'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1522
- 'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1523
- 'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1524
- 'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1525
- 'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1526
- 'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1527
- 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1528
- 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1529
- 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1530
- 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1531
- 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1532
- 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1533
- 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1534
- 'PHP_Token_ONUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1535
- 'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1536
- 'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1537
- 'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1538
- 'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1539
- 'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1540
- 'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1541
- 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1542
- 'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1543
- 'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1544
- 'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1545
- 'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1546
- 'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1547
- 'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1548
- 'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1549
- 'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1550
- 'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1551
- 'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1552
- 'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1553
- 'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1554
- 'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1555
- 'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1556
- 'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1557
- 'PHP_Token_SHAPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1558
- 'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1559
- 'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1560
- 'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1561
- 'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1562
- 'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1563
- 'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1564
- 'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1565
- 'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1566
- 'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1567
- 'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1568
- 'PHP_Token_SUPER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1569
- 'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1570
- 'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream.php',
1571
- 'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php',
1572
- 'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1573
- 'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1574
- 'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1575
- 'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1576
- 'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1577
- 'PHP_Token_TYPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1578
- 'PHP_Token_TYPELIST_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1579
- 'PHP_Token_TYPELIST_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1580
- 'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1581
- 'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1582
- 'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1583
- 'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1584
- 'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1585
- 'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1586
- 'PHP_Token_WHERE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1587
- 'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1588
- 'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1589
- 'PHP_Token_XHP_ATTRIBUTE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1590
- 'PHP_Token_XHP_CATEGORY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1591
- 'PHP_Token_XHP_CATEGORY_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1592
- 'PHP_Token_XHP_CHILDREN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1593
- 'PHP_Token_XHP_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1594
- 'PHP_Token_XHP_REQUIRED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1595
- 'PHP_Token_XHP_TAG_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1596
- 'PHP_Token_XHP_TAG_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1597
- 'PHP_Token_XHP_TEXT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1598
- 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1599
- 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1600
- 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
1601
- 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php',
1602
- 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php',
1603
- 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php',
1604
- 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php',
1605
- 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
1606
- 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php',
1607
- 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
1608
- 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php',
1609
- 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php',
1610
- 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
1611
- 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php',
1612
- 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php',
1613
- 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
1614
- 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php',
1615
- 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php',
1616
- 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php',
1617
- 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php',
1618
- 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php',
1619
- 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php',
1620
- 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php',
1621
- 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php',
1622
- 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php',
1623
- 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php',
1624
- 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
1625
- 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
1626
- 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
1627
- 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php',
1628
- 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php',
1629
- 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php',
1630
- 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php',
1631
- 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php',
1632
- 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
1633
- 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php',
1634
- 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php',
1635
- 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
1636
- 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php',
1637
- 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
1638
- 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php',
1639
- 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
1640
- 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php',
1641
- 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php',
1642
- 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
1643
- 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
1644
- 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php',
1645
- 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php',
1646
- 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
1647
- 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php',
1648
- 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php',
1649
- 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php',
1650
- 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/AbstractVersionConstraint.php',
1651
- 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/AndVersionConstraintGroup.php',
1652
- 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/AnyVersionConstraint.php',
1653
- 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/ExactVersionConstraint.php',
1654
- 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/Exception.php',
1655
- 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php',
1656
- 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/InvalidVersionException.php',
1657
- 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/OrVersionConstraintGroup.php',
1658
- 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
1659
- 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php',
1660
- 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorVersionConstraint.php',
1661
- 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/UnsupportedVersionConstraintException.php',
1662
- 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php',
1663
- 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/VersionConstraint.php',
1664
- 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php',
1665
- 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php',
1666
- 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php',
1667
- 'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php',
1668
- 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php',
1669
- 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php',
1670
- 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php',
1671
- 'Prophecy\\Argument' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument.php',
1672
- 'Prophecy\\Argument\\ArgumentsWildcard' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php',
1673
- 'Prophecy\\Argument\\Token\\AnyValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php',
1674
- 'Prophecy\\Argument\\Token\\AnyValuesToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValuesToken.php',
1675
- 'Prophecy\\Argument\\Token\\ApproximateValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php',
1676
- 'Prophecy\\Argument\\Token\\ArrayCountToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayCountToken.php',
1677
- 'Prophecy\\Argument\\Token\\ArrayEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEntryToken.php',
1678
- 'Prophecy\\Argument\\Token\\ArrayEveryEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEveryEntryToken.php',
1679
- 'Prophecy\\Argument\\Token\\CallbackToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/CallbackToken.php',
1680
- 'Prophecy\\Argument\\Token\\ExactValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php',
1681
- 'Prophecy\\Argument\\Token\\IdenticalValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/IdenticalValueToken.php',
1682
- 'Prophecy\\Argument\\Token\\LogicalAndToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalAndToken.php',
1683
- 'Prophecy\\Argument\\Token\\LogicalNotToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalNotToken.php',
1684
- 'Prophecy\\Argument\\Token\\ObjectStateToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php',
1685
- 'Prophecy\\Argument\\Token\\StringContainsToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/StringContainsToken.php',
1686
- 'Prophecy\\Argument\\Token\\TokenInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TokenInterface.php',
1687
- 'Prophecy\\Argument\\Token\\TypeToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TypeToken.php',
1688
- 'Prophecy\\Call\\Call' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/Call.php',
1689
- 'Prophecy\\Call\\CallCenter' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/CallCenter.php',
1690
- 'Prophecy\\Comparator\\ClosureComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ClosureComparator.php',
1691
- 'Prophecy\\Comparator\\Factory' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/Factory.php',
1692
- 'Prophecy\\Comparator\\ProphecyComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php',
1693
- 'Prophecy\\Doubler\\CachedDoubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/CachedDoubler.php',
1694
- 'Prophecy\\Doubler\\ClassPatch\\ClassPatchInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php',
1695
- 'Prophecy\\Doubler\\ClassPatch\\DisableConstructorPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php',
1696
- 'Prophecy\\Doubler\\ClassPatch\\HhvmExceptionPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/HhvmExceptionPatch.php',
1697
- 'Prophecy\\Doubler\\ClassPatch\\KeywordPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php',
1698
- 'Prophecy\\Doubler\\ClassPatch\\MagicCallPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php',
1699
- 'Prophecy\\Doubler\\ClassPatch\\ProphecySubjectPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php',
1700
- 'Prophecy\\Doubler\\ClassPatch\\ReflectionClassNewInstancePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatch.php',
1701
- 'Prophecy\\Doubler\\ClassPatch\\SplFileInfoPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php',
1702
- 'Prophecy\\Doubler\\ClassPatch\\ThrowablePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ThrowablePatch.php',
1703
- 'Prophecy\\Doubler\\ClassPatch\\TraversablePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/TraversablePatch.php',
1704
- 'Prophecy\\Doubler\\DoubleInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/DoubleInterface.php',
1705
- 'Prophecy\\Doubler\\Doubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Doubler.php',
1706
- 'Prophecy\\Doubler\\Generator\\ClassCodeGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php',
1707
- 'Prophecy\\Doubler\\Generator\\ClassCreator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php',
1708
- 'Prophecy\\Doubler\\Generator\\ClassMirror' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php',
1709
- 'Prophecy\\Doubler\\Generator\\Node\\ArgumentNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php',
1710
- 'Prophecy\\Doubler\\Generator\\Node\\ClassNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php',
1711
- 'Prophecy\\Doubler\\Generator\\Node\\MethodNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php',
1712
- 'Prophecy\\Doubler\\Generator\\ReflectionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ReflectionInterface.php',
1713
- 'Prophecy\\Doubler\\Generator\\TypeHintReference' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/TypeHintReference.php',
1714
- 'Prophecy\\Doubler\\LazyDouble' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/LazyDouble.php',
1715
- 'Prophecy\\Doubler\\NameGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/NameGenerator.php',
1716
- 'Prophecy\\Exception\\Call\\UnexpectedCallException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Call/UnexpectedCallException.php',
1717
- 'Prophecy\\Exception\\Doubler\\ClassCreatorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php',
1718
- 'Prophecy\\Exception\\Doubler\\ClassMirrorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassMirrorException.php',
1719
- 'Prophecy\\Exception\\Doubler\\ClassNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassNotFoundException.php',
1720
- 'Prophecy\\Exception\\Doubler\\DoubleException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoubleException.php',
1721
- 'Prophecy\\Exception\\Doubler\\DoublerException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoublerException.php',
1722
- 'Prophecy\\Exception\\Doubler\\InterfaceNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/InterfaceNotFoundException.php',
1723
- 'Prophecy\\Exception\\Doubler\\MethodNotExtendableException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php',
1724
- 'Prophecy\\Exception\\Doubler\\MethodNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php',
1725
- 'Prophecy\\Exception\\Doubler\\ReturnByReferenceException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php',
1726
- 'Prophecy\\Exception\\Exception' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Exception.php',
1727
- 'Prophecy\\Exception\\InvalidArgumentException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/InvalidArgumentException.php',
1728
- 'Prophecy\\Exception\\Prediction\\AggregateException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/AggregateException.php',
1729
- 'Prophecy\\Exception\\Prediction\\FailedPredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/FailedPredictionException.php',
1730
- 'Prophecy\\Exception\\Prediction\\NoCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/NoCallsException.php',
1731
- 'Prophecy\\Exception\\Prediction\\PredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/PredictionException.php',
1732
- 'Prophecy\\Exception\\Prediction\\UnexpectedCallsCountException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsCountException.php',
1733
- 'Prophecy\\Exception\\Prediction\\UnexpectedCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsException.php',
1734
- 'Prophecy\\Exception\\Prophecy\\MethodProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/MethodProphecyException.php',
1735
- 'Prophecy\\Exception\\Prophecy\\ObjectProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ObjectProphecyException.php',
1736
- 'Prophecy\\Exception\\Prophecy\\ProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ProphecyException.php',
1737
- 'Prophecy\\PhpDocumentor\\ClassAndInterfaceTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php',
1738
- 'Prophecy\\PhpDocumentor\\ClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php',
1739
- 'Prophecy\\PhpDocumentor\\LegacyClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php',
1740
- 'Prophecy\\PhpDocumentor\\MethodTagRetrieverInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php',
1741
- 'Prophecy\\Prediction\\CallPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallPrediction.php',
1742
- 'Prophecy\\Prediction\\CallTimesPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallTimesPrediction.php',
1743
- 'Prophecy\\Prediction\\CallbackPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallbackPrediction.php',
1744
- 'Prophecy\\Prediction\\NoCallsPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php',
1745
- 'Prophecy\\Prediction\\PredictionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/PredictionInterface.php',
1746
- 'Prophecy\\Promise\\CallbackPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/CallbackPromise.php',
1747
- 'Prophecy\\Promise\\PromiseInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/PromiseInterface.php',
1748
- 'Prophecy\\Promise\\ReturnArgumentPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php',
1749
- 'Prophecy\\Promise\\ReturnPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnPromise.php',
1750
- 'Prophecy\\Promise\\ThrowPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php',
1751
- 'Prophecy\\Prophecy\\MethodProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php',
1752
- 'Prophecy\\Prophecy\\ObjectProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php',
1753
- 'Prophecy\\Prophecy\\ProphecyInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecyInterface.php',
1754
- 'Prophecy\\Prophecy\\ProphecySubjectInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecySubjectInterface.php',
1755
- 'Prophecy\\Prophecy\\Revealer' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/Revealer.php',
1756
- 'Prophecy\\Prophecy\\RevealerInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/RevealerInterface.php',
1757
- 'Prophecy\\Prophet' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophet.php',
1758
- 'Prophecy\\Util\\ExportUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php',
1759
- 'Prophecy\\Util\\StringUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php',
1760
- 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
1761
- 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
1762
- 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
1763
- 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
1764
- 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
1765
- 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
1766
- 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
1767
- 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
1768
- 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
1769
- 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
1770
- 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
1771
- 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
1772
- 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
1773
- 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
1774
- 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
1775
- 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
1776
- 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
1777
- 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
1778
- 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
1779
- 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
1780
- 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
1781
- 'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
1782
- 'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
1783
- 'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
1784
- 'Requests' => $vendorDir . '/rmccue/requests/library/Requests.php',
1785
- 'Requests_Auth' => $vendorDir . '/rmccue/requests/library/Requests/Auth.php',
1786
- 'Requests_Auth_Basic' => $vendorDir . '/rmccue/requests/library/Requests/Auth/Basic.php',
1787
- 'Requests_Cookie' => $vendorDir . '/rmccue/requests/library/Requests/Cookie.php',
1788
- 'Requests_Cookie_Jar' => $vendorDir . '/rmccue/requests/library/Requests/Cookie/Jar.php',
1789
- 'Requests_Exception' => $vendorDir . '/rmccue/requests/library/Requests/Exception.php',
1790
- 'Requests_Exception_HTTP' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP.php',
1791
- 'Requests_Exception_HTTP_304' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/304.php',
1792
- 'Requests_Exception_HTTP_305' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/305.php',
1793
- 'Requests_Exception_HTTP_306' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/306.php',
1794
- 'Requests_Exception_HTTP_400' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/400.php',
1795
- 'Requests_Exception_HTTP_401' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/401.php',
1796
- 'Requests_Exception_HTTP_402' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/402.php',
1797
- 'Requests_Exception_HTTP_403' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/403.php',
1798
- 'Requests_Exception_HTTP_404' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/404.php',
1799
- 'Requests_Exception_HTTP_405' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/405.php',
1800
- 'Requests_Exception_HTTP_406' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/406.php',
1801
- 'Requests_Exception_HTTP_407' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/407.php',
1802
- 'Requests_Exception_HTTP_408' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/408.php',
1803
- 'Requests_Exception_HTTP_409' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/409.php',
1804
- 'Requests_Exception_HTTP_410' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/410.php',
1805
- 'Requests_Exception_HTTP_411' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/411.php',
1806
- 'Requests_Exception_HTTP_412' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/412.php',
1807
- 'Requests_Exception_HTTP_413' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/413.php',
1808
- 'Requests_Exception_HTTP_414' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/414.php',
1809
- 'Requests_Exception_HTTP_415' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/415.php',
1810
- 'Requests_Exception_HTTP_416' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/416.php',
1811
- 'Requests_Exception_HTTP_417' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/417.php',
1812
- 'Requests_Exception_HTTP_418' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/418.php',
1813
- 'Requests_Exception_HTTP_428' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/428.php',
1814
- 'Requests_Exception_HTTP_429' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/429.php',
1815
- 'Requests_Exception_HTTP_431' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/431.php',
1816
- 'Requests_Exception_HTTP_500' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/500.php',
1817
- 'Requests_Exception_HTTP_501' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/501.php',
1818
- 'Requests_Exception_HTTP_502' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/502.php',
1819
- 'Requests_Exception_HTTP_503' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/503.php',
1820
- 'Requests_Exception_HTTP_504' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/504.php',
1821
- 'Requests_Exception_HTTP_505' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/505.php',
1822
- 'Requests_Exception_HTTP_511' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/511.php',
1823
- 'Requests_Exception_HTTP_Unknown' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/Unknown.php',
1824
- 'Requests_Exception_Transport' => $vendorDir . '/rmccue/requests/library/Requests/Exception/Transport.php',
1825
- 'Requests_Exception_Transport_cURL' => $vendorDir . '/rmccue/requests/library/Requests/Exception/Transport/cURL.php',
1826
- 'Requests_Hooker' => $vendorDir . '/rmccue/requests/library/Requests/Hooker.php',
1827
- 'Requests_Hooks' => $vendorDir . '/rmccue/requests/library/Requests/Hooks.php',
1828
- 'Requests_IDNAEncoder' => $vendorDir . '/rmccue/requests/library/Requests/IDNAEncoder.php',
1829
- 'Requests_IPv6' => $vendorDir . '/rmccue/requests/library/Requests/IPv6.php',
1830
- 'Requests_IRI' => $vendorDir . '/rmccue/requests/library/Requests/IRI.php',
1831
- 'Requests_Proxy' => $vendorDir . '/rmccue/requests/library/Requests/Proxy.php',
1832
- 'Requests_Proxy_HTTP' => $vendorDir . '/rmccue/requests/library/Requests/Proxy/HTTP.php',
1833
- 'Requests_Response' => $vendorDir . '/rmccue/requests/library/Requests/Response.php',
1834
- 'Requests_Response_Headers' => $vendorDir . '/rmccue/requests/library/Requests/Response/Headers.php',
1835
- 'Requests_SSL' => $vendorDir . '/rmccue/requests/library/Requests/SSL.php',
1836
- 'Requests_Session' => $vendorDir . '/rmccue/requests/library/Requests/Session.php',
1837
- 'Requests_Transport' => $vendorDir . '/rmccue/requests/library/Requests/Transport.php',
1838
- 'Requests_Transport_cURL' => $vendorDir . '/rmccue/requests/library/Requests/Transport/cURL.php',
1839
- 'Requests_Transport_fsockopen' => $vendorDir . '/rmccue/requests/library/Requests/Transport/fsockopen.php',
1840
- 'Requests_Utility_CaseInsensitiveDictionary' => $vendorDir . '/rmccue/requests/library/Requests/Utility/CaseInsensitiveDictionary.php',
1841
- 'Requests_Utility_FilteredIterator' => $vendorDir . '/rmccue/requests/library/Requests/Utility/FilteredIterator.php',
1842
- 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
1843
- 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php',
1844
- 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
1845
- 'SebastianBergmann\\CodeCoverage\\Driver\\HHVM' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/HHVM.php',
1846
- 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php',
1847
- 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php',
1848
- 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php',
1849
- 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php',
1850
- 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
1851
- 'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php',
1852
- 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
1853
- 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
1854
- 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
1855
- 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
1856
- 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
1857
- 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php',
1858
- 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
1859
- 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
1860
- 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
1861
- 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
1862
- 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
1863
- 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
1864
- 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php',
1865
- 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php',
1866
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
1867
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
1868
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
1869
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
1870
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
1871
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
1872
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
1873
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
1874
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
1875
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
1876
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
1877
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
1878
- 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
1879
- 'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php',
1880
- 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
1881
- 'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php',
1882
- 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
1883
- 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
1884
- 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php',
1885
- 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php',
1886
- 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php',
1887
- 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php',
1888
- 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php',
1889
- 'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php',
1890
- 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php',
1891
- 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php',
1892
- 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php',
1893
- 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php',
1894
- 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php',
1895
- 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php',
1896
- 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php',
1897
- 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php',
1898
- 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php',
1899
- 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php',
1900
- 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php',
1901
- 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php',
1902
- 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php',
1903
- 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
1904
- 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php',
1905
- 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
1906
- 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
1907
- 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
1908
- 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
1909
- 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
1910
- 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
1911
- 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php',
1912
- 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
1913
- 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php',
1914
- 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php',
1915
- 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php',
1916
- 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php',
1917
- 'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php',
1918
- 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php',
1919
- 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php',
1920
- 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php',
1921
- 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php',
1922
- 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php',
1923
- 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php',
1924
- 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php',
1925
- 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php',
1926
- 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php',
1927
- 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php',
1928
- 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php',
1929
- 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php',
1930
- 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php',
1931
- 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php',
1932
- 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php',
1933
- 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php',
1934
- 'Seld\\JsonLint\\DuplicateKeyException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php',
1935
- 'Seld\\JsonLint\\JsonParser' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/JsonParser.php',
1936
- 'Seld\\JsonLint\\Lexer' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Lexer.php',
1937
- 'Seld\\JsonLint\\ParsingException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/ParsingException.php',
1938
- 'Seld\\JsonLint\\Undefined' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Undefined.php',
1939
- 'Seld\\PharUtils\\Timestamps' => $vendorDir . '/seld/phar-utils/src/Timestamps.php',
1940
- 'Symfony\\Component\\BrowserKit\\AbstractBrowser' => $vendorDir . '/symfony/browser-kit/AbstractBrowser.php',
1941
- 'Symfony\\Component\\BrowserKit\\Client' => $vendorDir . '/symfony/browser-kit/Client.php',
1942
- 'Symfony\\Component\\BrowserKit\\Cookie' => $vendorDir . '/symfony/browser-kit/Cookie.php',
1943
- 'Symfony\\Component\\BrowserKit\\CookieJar' => $vendorDir . '/symfony/browser-kit/CookieJar.php',
1944
- 'Symfony\\Component\\BrowserKit\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/browser-kit/Exception/BadMethodCallException.php',
1945
- 'Symfony\\Component\\BrowserKit\\History' => $vendorDir . '/symfony/browser-kit/History.php',
1946
- 'Symfony\\Component\\BrowserKit\\HttpBrowser' => $vendorDir . '/symfony/browser-kit/HttpBrowser.php',
1947
- 'Symfony\\Component\\BrowserKit\\Request' => $vendorDir . '/symfony/browser-kit/Request.php',
1948
- 'Symfony\\Component\\BrowserKit\\Response' => $vendorDir . '/symfony/browser-kit/Response.php',
1949
- 'Symfony\\Component\\BrowserKit\\Test\\Constraint\\BrowserCookieValueSame' => $vendorDir . '/symfony/browser-kit/Test/Constraint/BrowserCookieValueSame.php',
1950
- 'Symfony\\Component\\BrowserKit\\Test\\Constraint\\BrowserHasCookie' => $vendorDir . '/symfony/browser-kit/Test/Constraint/BrowserHasCookie.php',
1951
- 'Symfony\\Component\\Config\\ConfigCache' => $vendorDir . '/symfony/config/ConfigCache.php',
1952
- 'Symfony\\Component\\Config\\ConfigCacheFactory' => $vendorDir . '/symfony/config/ConfigCacheFactory.php',
1953
- 'Symfony\\Component\\Config\\ConfigCacheFactoryInterface' => $vendorDir . '/symfony/config/ConfigCacheFactoryInterface.php',
1954
- 'Symfony\\Component\\Config\\ConfigCacheInterface' => $vendorDir . '/symfony/config/ConfigCacheInterface.php',
1955
- 'Symfony\\Component\\Config\\Definition\\ArrayNode' => $vendorDir . '/symfony/config/Definition/ArrayNode.php',
1956
- 'Symfony\\Component\\Config\\Definition\\BaseNode' => $vendorDir . '/symfony/config/Definition/BaseNode.php',
1957
- 'Symfony\\Component\\Config\\Definition\\BooleanNode' => $vendorDir . '/symfony/config/Definition/BooleanNode.php',
1958
- 'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
1959
- 'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
1960
- 'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
1961
- 'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ExprBuilder.php',
1962
- 'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
1963
- 'Symfony\\Component\\Config\\Definition\\Builder\\IntegerNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/IntegerNodeDefinition.php',
1964
- 'Symfony\\Component\\Config\\Definition\\Builder\\MergeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/MergeBuilder.php',
1965
- 'Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NodeBuilder.php',
1966
- 'Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NodeDefinition.php',
1967
- 'Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface' => $vendorDir . '/symfony/config/Definition/Builder/NodeParentInterface.php',
1968
- 'Symfony\\Component\\Config\\Definition\\Builder\\NormalizationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NormalizationBuilder.php',
1969
- 'Symfony\\Component\\Config\\Definition\\Builder\\NumericNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NumericNodeDefinition.php',
1970
- 'Symfony\\Component\\Config\\Definition\\Builder\\ParentNodeDefinitionInterface' => $vendorDir . '/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php',
1971
- 'Symfony\\Component\\Config\\Definition\\Builder\\ScalarNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ScalarNodeDefinition.php',
1972
- 'Symfony\\Component\\Config\\Definition\\Builder\\TreeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/TreeBuilder.php',
1973
- 'Symfony\\Component\\Config\\Definition\\Builder\\ValidationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ValidationBuilder.php',
1974
- 'Symfony\\Component\\Config\\Definition\\Builder\\VariableNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/VariableNodeDefinition.php',
1975
- 'Symfony\\Component\\Config\\Definition\\ConfigurationInterface' => $vendorDir . '/symfony/config/Definition/ConfigurationInterface.php',
1976
- 'Symfony\\Component\\Config\\Definition\\Dumper\\XmlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/XmlReferenceDumper.php',
1977
- 'Symfony\\Component\\Config\\Definition\\Dumper\\YamlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/YamlReferenceDumper.php',
1978
- 'Symfony\\Component\\Config\\Definition\\EnumNode' => $vendorDir . '/symfony/config/Definition/EnumNode.php',
1979
- 'Symfony\\Component\\Config\\Definition\\Exception\\DuplicateKeyException' => $vendorDir . '/symfony/config/Definition/Exception/DuplicateKeyException.php',
1980
- 'Symfony\\Component\\Config\\Definition\\Exception\\Exception' => $vendorDir . '/symfony/config/Definition/Exception/Exception.php',
1981
- 'Symfony\\Component\\Config\\Definition\\Exception\\ForbiddenOverwriteException' => $vendorDir . '/symfony/config/Definition/Exception/ForbiddenOverwriteException.php',
1982
- 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
1983
- 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
1984
- 'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidTypeException.php',
1985
- 'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => $vendorDir . '/symfony/config/Definition/Exception/UnsetKeyException.php',
1986
- 'Symfony\\Component\\Config\\Definition\\FloatNode' => $vendorDir . '/symfony/config/Definition/FloatNode.php',
1987
- 'Symfony\\Component\\Config\\Definition\\IntegerNode' => $vendorDir . '/symfony/config/Definition/IntegerNode.php',
1988
- 'Symfony\\Component\\Config\\Definition\\NodeInterface' => $vendorDir . '/symfony/config/Definition/NodeInterface.php',
1989
- 'Symfony\\Component\\Config\\Definition\\NumericNode' => $vendorDir . '/symfony/config/Definition/NumericNode.php',
1990
- 'Symfony\\Component\\Config\\Definition\\Processor' => $vendorDir . '/symfony/config/Definition/Processor.php',
1991
- 'Symfony\\Component\\Config\\Definition\\PrototypeNodeInterface' => $vendorDir . '/symfony/config/Definition/PrototypeNodeInterface.php',
1992
- 'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => $vendorDir . '/symfony/config/Definition/PrototypedArrayNode.php',
1993
- 'Symfony\\Component\\Config\\Definition\\ScalarNode' => $vendorDir . '/symfony/config/Definition/ScalarNode.php',
1994
- 'Symfony\\Component\\Config\\Definition\\VariableNode' => $vendorDir . '/symfony/config/Definition/VariableNode.php',
1995
- 'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => $vendorDir . '/symfony/config/DependencyInjection/ConfigCachePass.php',
1996
- 'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => $vendorDir . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
1997
- 'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => $vendorDir . '/symfony/config/Exception/FileLoaderLoadException.php',
1998
- 'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => $vendorDir . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
1999
- 'Symfony\\Component\\Config\\FileLocator' => $vendorDir . '/symfony/config/FileLocator.php',
2000
- 'Symfony\\Component\\Config\\FileLocatorInterface' => $vendorDir . '/symfony/config/FileLocatorInterface.php',
2001
- 'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => $vendorDir . '/symfony/config/Loader/DelegatingLoader.php',
2002
- 'Symfony\\Component\\Config\\Loader\\FileLoader' => $vendorDir . '/symfony/config/Loader/FileLoader.php',
2003
- 'Symfony\\Component\\Config\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/config/Loader/GlobFileLoader.php',
2004
- 'Symfony\\Component\\Config\\Loader\\Loader' => $vendorDir . '/symfony/config/Loader/Loader.php',
2005
- 'Symfony\\Component\\Config\\Loader\\LoaderInterface' => $vendorDir . '/symfony/config/Loader/LoaderInterface.php',
2006
- 'Symfony\\Component\\Config\\Loader\\LoaderResolver' => $vendorDir . '/symfony/config/Loader/LoaderResolver.php',
2007
- 'Symfony\\Component\\Config\\Loader\\LoaderResolverInterface' => $vendorDir . '/symfony/config/Loader/LoaderResolverInterface.php',
2008
- 'Symfony\\Component\\Config\\ResourceCheckerConfigCache' => $vendorDir . '/symfony/config/ResourceCheckerConfigCache.php',
2009
- 'Symfony\\Component\\Config\\ResourceCheckerConfigCacheFactory' => $vendorDir . '/symfony/config/ResourceCheckerConfigCacheFactory.php',
2010
- 'Symfony\\Component\\Config\\ResourceCheckerInterface' => $vendorDir . '/symfony/config/ResourceCheckerInterface.php',
2011
- 'Symfony\\Component\\Config\\Resource\\ClassExistenceResource' => $vendorDir . '/symfony/config/Resource/ClassExistenceResource.php',
2012
- 'Symfony\\Component\\Config\\Resource\\ComposerResource' => $vendorDir . '/symfony/config/Resource/ComposerResource.php',
2013
- 'Symfony\\Component\\Config\\Resource\\DirectoryResource' => $vendorDir . '/symfony/config/Resource/DirectoryResource.php',
2014
- 'Symfony\\Component\\Config\\Resource\\FileExistenceResource' => $vendorDir . '/symfony/config/Resource/FileExistenceResource.php',
2015
- 'Symfony\\Component\\Config\\Resource\\FileResource' => $vendorDir . '/symfony/config/Resource/FileResource.php',
2016
- 'Symfony\\Component\\Config\\Resource\\GlobResource' => $vendorDir . '/symfony/config/Resource/GlobResource.php',
2017
- 'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
2018
- 'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
2019
- 'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
2020
- 'Symfony\\Component\\Config\\Resource\\ResourceInterface' => $vendorDir . '/symfony/config/Resource/ResourceInterface.php',
2021
- 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
2022
- 'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
2023
- 'Symfony\\Component\\Config\\Util\\Exception\\InvalidXmlException' => $vendorDir . '/symfony/config/Util/Exception/InvalidXmlException.php',
2024
- 'Symfony\\Component\\Config\\Util\\Exception\\XmlParsingException' => $vendorDir . '/symfony/config/Util/Exception/XmlParsingException.php',
2025
- 'Symfony\\Component\\Config\\Util\\XmlUtils' => $vendorDir . '/symfony/config/Util/XmlUtils.php',
2026
- 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php',
2027
- 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php',
2028
- 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php',
2029
- 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php',
2030
- 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php',
2031
- 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php',
2032
- 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php',
2033
- 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php',
2034
- 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php',
2035
- 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php',
2036
- 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php',
2037
- 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php',
2038
- 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php',
2039
- 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php',
2040
- 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php',
2041
- 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php',
2042
- 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php',
2043
- 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php',
2044
- 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php',
2045
- 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php',
2046
- 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php',
2047
- 'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => $vendorDir . '/symfony/console/Event/ConsoleExceptionEvent.php',
2048
- 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php',
2049
- 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php',
2050
- 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php',
2051
- 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php',
2052
- 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php',
2053
- 'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php',
2054
- 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php',
2055
- 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php',
2056
- 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php',
2057
- 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php',
2058
- 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php',
2059
- 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php',
2060
- 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php',
2061
- 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php',
2062
- 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php',
2063
- 'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php',
2064
- 'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php',
2065
- 'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php',
2066
- 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php',
2067
- 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php',
2068
- 'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php',
2069
- 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php',
2070
- 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php',
2071
- 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php',
2072
- 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php',
2073
- 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php',
2074
- 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php',
2075
- 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php',
2076
- 'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php',
2077
- 'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php',
2078
- 'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php',
2079
- 'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php',
2080
- 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php',
2081
- 'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php',
2082
- 'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php',
2083
- 'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php',
2084
- 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php',
2085
- 'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php',
2086
- 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php',
2087
- 'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php',
2088
- 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php',
2089
- 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php',
2090
- 'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php',
2091
- 'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php',
2092
- 'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php',
2093
- 'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php',
2094
- 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php',
2095
- 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php',
2096
- 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php',
2097
- 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php',
2098
- 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php',
2099
- 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php',
2100
- 'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php',
2101
- 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php',
2102
- 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php',
2103
- 'Symfony\\Component\\CssSelector\\CssSelectorConverter' => $vendorDir . '/symfony/css-selector/CssSelectorConverter.php',
2104
- 'Symfony\\Component\\CssSelector\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/css-selector/Exception/ExceptionInterface.php',
2105
- 'Symfony\\Component\\CssSelector\\Exception\\ExpressionErrorException' => $vendorDir . '/symfony/css-selector/Exception/ExpressionErrorException.php',
2106
- 'Symfony\\Component\\CssSelector\\Exception\\InternalErrorException' => $vendorDir . '/symfony/css-selector/Exception/InternalErrorException.php',
2107
- 'Symfony\\Component\\CssSelector\\Exception\\ParseException' => $vendorDir . '/symfony/css-selector/Exception/ParseException.php',
2108
- 'Symfony\\Component\\CssSelector\\Exception\\SyntaxErrorException' => $vendorDir . '/symfony/css-selector/Exception/SyntaxErrorException.php',
2109
- 'Symfony\\Component\\CssSelector\\Node\\AbstractNode' => $vendorDir . '/symfony/css-selector/Node/AbstractNode.php',
2110
- 'Symfony\\Component\\CssSelector\\Node\\AttributeNode' => $vendorDir . '/symfony/css-selector/Node/AttributeNode.php',
2111
- 'Symfony\\Component\\CssSelector\\Node\\ClassNode' => $vendorDir . '/symfony/css-selector/Node/ClassNode.php',
2112
- 'Symfony\\Component\\CssSelector\\Node\\CombinedSelectorNode' => $vendorDir . '/symfony/css-selector/Node/CombinedSelectorNode.php',
2113
- 'Symfony\\Component\\CssSelector\\Node\\ElementNode' => $vendorDir . '/symfony/css-selector/Node/ElementNode.php',
2114
- 'Symfony\\Component\\CssSelector\\Node\\FunctionNode' => $vendorDir . '/symfony/css-selector/Node/FunctionNode.php',
2115
- 'Symfony\\Component\\CssSelector\\Node\\HashNode' => $vendorDir . '/symfony/css-selector/Node/HashNode.php',
2116
- 'Symfony\\Component\\CssSelector\\Node\\NegationNode' => $vendorDir . '/symfony/css-selector/Node/NegationNode.php',
2117
- 'Symfony\\Component\\CssSelector\\Node\\NodeInterface' => $vendorDir . '/symfony/css-selector/Node/NodeInterface.php',
2118
- 'Symfony\\Component\\CssSelector\\Node\\PseudoNode' => $vendorDir . '/symfony/css-selector/Node/PseudoNode.php',
2119
- 'Symfony\\Component\\CssSelector\\Node\\SelectorNode' => $vendorDir . '/symfony/css-selector/Node/SelectorNode.php',
2120
- 'Symfony\\Component\\CssSelector\\Node\\Specificity' => $vendorDir . '/symfony/css-selector/Node/Specificity.php',
2121
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\CommentHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/CommentHandler.php',
2122
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\HandlerInterface' => $vendorDir . '/symfony/css-selector/Parser/Handler/HandlerInterface.php',
2123
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\HashHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/HashHandler.php',
2124
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\IdentifierHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/IdentifierHandler.php',
2125
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\NumberHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/NumberHandler.php',
2126
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\StringHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/StringHandler.php',
2127
- 'Symfony\\Component\\CssSelector\\Parser\\Handler\\WhitespaceHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/WhitespaceHandler.php',
2128
- 'Symfony\\Component\\CssSelector\\Parser\\Parser' => $vendorDir . '/symfony/css-selector/Parser/Parser.php',
2129
- 'Symfony\\Component\\CssSelector\\Parser\\ParserInterface' => $vendorDir . '/symfony/css-selector/Parser/ParserInterface.php',
2130
- 'Symfony\\Component\\CssSelector\\Parser\\Reader' => $vendorDir . '/symfony/css-selector/Parser/Reader.php',
2131
- 'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ClassParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/ClassParser.php',
2132
- 'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ElementParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/ElementParser.php',
2133
- 'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\EmptyStringParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php',
2134
- 'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\HashParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/HashParser.php',
2135
- 'Symfony\\Component\\CssSelector\\Parser\\Token' => $vendorDir . '/symfony/css-selector/Parser/Token.php',
2136
- 'Symfony\\Component\\CssSelector\\Parser\\TokenStream' => $vendorDir . '/symfony/css-selector/Parser/TokenStream.php',
2137
- 'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\Tokenizer' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/Tokenizer.php',
2138
- 'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerEscaping' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php',
2139
- 'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerPatterns' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php',
2140
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\AbstractExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/AbstractExtension.php',
2141
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\AttributeMatchingExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php',
2142
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\CombinationExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/CombinationExtension.php',
2143
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\ExtensionInterface' => $vendorDir . '/symfony/css-selector/XPath/Extension/ExtensionInterface.php',
2144
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\FunctionExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/FunctionExtension.php',
2145
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\HtmlExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/HtmlExtension.php',
2146
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\NodeExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/NodeExtension.php',
2147
- 'Symfony\\Component\\CssSelector\\XPath\\Extension\\PseudoClassExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/PseudoClassExtension.php',
2148
- 'Symfony\\Component\\CssSelector\\XPath\\Translator' => $vendorDir . '/symfony/css-selector/XPath/Translator.php',
2149
- 'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php',
2150
- 'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php',
2151
- 'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php',
2152
- 'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php',
2153
- 'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php',
2154
- 'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php',
2155
- 'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php',
2156
- 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php',
2157
- 'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => $vendorDir . '/symfony/debug/Exception/ContextErrorException.php',
2158
- 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php',
2159
- 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php',
2160
- 'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php',
2161
- 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php',
2162
- 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/debug/Exception/SilencedErrorContext.php',
2163
- 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php',
2164
- 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php',
2165
- 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php',
2166
- 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php',
2167
- 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php',
2168
- 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php',
2169
- 'Symfony\\Component\\DependencyInjection\\Alias' => $vendorDir . '/symfony/dependency-injection/Alias.php',
2170
- 'Symfony\\Component\\DependencyInjection\\Argument\\ArgumentInterface' => $vendorDir . '/symfony/dependency-injection/Argument/ArgumentInterface.php',
2171
- 'Symfony\\Component\\DependencyInjection\\Argument\\BoundArgument' => $vendorDir . '/symfony/dependency-injection/Argument/BoundArgument.php',
2172
- 'Symfony\\Component\\DependencyInjection\\Argument\\IteratorArgument' => $vendorDir . '/symfony/dependency-injection/Argument/IteratorArgument.php',
2173
- 'Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => $vendorDir . '/symfony/dependency-injection/Argument/RewindableGenerator.php',
2174
- 'Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument' => $vendorDir . '/symfony/dependency-injection/Argument/ServiceClosureArgument.php',
2175
- 'Symfony\\Component\\DependencyInjection\\Argument\\TaggedIteratorArgument' => $vendorDir . '/symfony/dependency-injection/Argument/TaggedIteratorArgument.php',
2176
- 'Symfony\\Component\\DependencyInjection\\ChildDefinition' => $vendorDir . '/symfony/dependency-injection/ChildDefinition.php',
2177
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AbstractRecursivePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AbstractRecursivePass.php',
2178
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AnalyzeServiceReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php',
2179
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AutoAliasServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutoAliasServicePass.php',
2180
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AutowireExceptionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowireExceptionPass.php',
2181
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AutowirePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowirePass.php',
2182
- 'Symfony\\Component\\DependencyInjection\\Compiler\\AutowireRequiredMethodsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php',
2183
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckArgumentsValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php',
2184
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckCircularReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php',
2185
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckDefinitionValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php',
2186
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php',
2187
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CheckReferenceValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php',
2188
- 'Symfony\\Component\\DependencyInjection\\Compiler\\Compiler' => $vendorDir . '/symfony/dependency-injection/Compiler/Compiler.php',
2189
- 'Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/CompilerPassInterface.php',
2190
- 'Symfony\\Component\\DependencyInjection\\Compiler\\DecoratorServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/DecoratorServicePass.php',
2191
- 'Symfony\\Component\\DependencyInjection\\Compiler\\DefinitionErrorExceptionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php',
2192
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ExtensionCompilerPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php',
2193
- 'Symfony\\Component\\DependencyInjection\\Compiler\\FactoryReturnTypePass' => $vendorDir . '/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php',
2194
- 'Symfony\\Component\\DependencyInjection\\Compiler\\InlineServiceDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php',
2195
- 'Symfony\\Component\\DependencyInjection\\Compiler\\LoggingFormatter' => $vendorDir . '/symfony/dependency-injection/Compiler/LoggingFormatter.php',
2196
- 'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationContainerBuilder' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
2197
- 'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationParameterBag' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
2198
- 'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationPass' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
2199
- 'Symfony\\Component\\DependencyInjection\\Compiler\\PassConfig' => $vendorDir . '/symfony/dependency-injection/Compiler/PassConfig.php',
2200
- 'Symfony\\Component\\DependencyInjection\\Compiler\\PriorityTaggedServiceTrait' => $vendorDir . '/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php',
2201
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RegisterEnvVarProcessorsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php',
2202
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RegisterServiceSubscribersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php',
2203
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveAbstractDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php',
2204
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RemovePrivateAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php',
2205
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveUnusedDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php',
2206
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatablePassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatablePassInterface.php',
2207
- 'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatedPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatedPass.php',
2208
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ReplaceAliasByActualDefinitionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php',
2209
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveBindingsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveBindingsPass.php',
2210
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveChildDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php',
2211
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveClassPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveClassPass.php',
2212
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveDefinitionTemplatesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php',
2213
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveEnvPlaceholdersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveEnvPlaceholdersPass.php',
2214
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveFactoryClassPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveFactoryClassPass.php',
2215
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveHotPathPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveHotPathPass.php',
2216
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInstanceofConditionalsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php',
2217
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInvalidReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php',
2218
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveNamedArgumentsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php',
2219
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveParameterPlaceHoldersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php',
2220
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolvePrivatesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolvePrivatesPass.php',
2221
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveReferencesToAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php',
2222
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveServiceSubscribersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php',
2223
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveTaggedIteratorArgumentPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php',
2224
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceLocatorTagPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php',
2225
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraph' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php',
2226
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphEdge' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php',
2227
- 'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphNode' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php',
2228
- 'Symfony\\Component\\DependencyInjection\\Config\\AutowireServiceResource' => $vendorDir . '/symfony/dependency-injection/Config/AutowireServiceResource.php',
2229
- 'Symfony\\Component\\DependencyInjection\\Config\\ContainerParametersResource' => $vendorDir . '/symfony/dependency-injection/Config/ContainerParametersResource.php',
2230
- 'Symfony\\Component\\DependencyInjection\\Config\\ContainerParametersResourceChecker' => $vendorDir . '/symfony/dependency-injection/Config/ContainerParametersResourceChecker.php',
2231
- 'Symfony\\Component\\DependencyInjection\\Container' => $vendorDir . '/symfony/dependency-injection/Container.php',
2232
- 'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => $vendorDir . '/symfony/dependency-injection/ContainerAwareInterface.php',
2233
- 'Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => $vendorDir . '/symfony/dependency-injection/ContainerAwareTrait.php',
2234
- 'Symfony\\Component\\DependencyInjection\\ContainerBuilder' => $vendorDir . '/symfony/dependency-injection/ContainerBuilder.php',
2235
- 'Symfony\\Component\\DependencyInjection\\ContainerInterface' => $vendorDir . '/symfony/dependency-injection/ContainerInterface.php',
2236
- 'Symfony\\Component\\DependencyInjection\\Definition' => $vendorDir . '/symfony/dependency-injection/Definition.php',
2237
- 'Symfony\\Component\\DependencyInjection\\DefinitionDecorator' => $vendorDir . '/symfony/dependency-injection/DefinitionDecorator.php',
2238
- 'Symfony\\Component\\DependencyInjection\\Dumper\\Dumper' => $vendorDir . '/symfony/dependency-injection/Dumper/Dumper.php',
2239
- 'Symfony\\Component\\DependencyInjection\\Dumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/Dumper/DumperInterface.php',
2240
- 'Symfony\\Component\\DependencyInjection\\Dumper\\GraphvizDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/GraphvizDumper.php',
2241
- 'Symfony\\Component\\DependencyInjection\\Dumper\\PhpDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/PhpDumper.php',
2242
- 'Symfony\\Component\\DependencyInjection\\Dumper\\XmlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/XmlDumper.php',
2243
- 'Symfony\\Component\\DependencyInjection\\Dumper\\YamlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/YamlDumper.php',
2244
- 'Symfony\\Component\\DependencyInjection\\EnvVarProcessor' => $vendorDir . '/symfony/dependency-injection/EnvVarProcessor.php',
2245
- 'Symfony\\Component\\DependencyInjection\\EnvVarProcessorInterface' => $vendorDir . '/symfony/dependency-injection/EnvVarProcessorInterface.php',
2246
- 'Symfony\\Component\\DependencyInjection\\Exception\\AutowiringFailedException' => $vendorDir . '/symfony/dependency-injection/Exception/AutowiringFailedException.php',
2247
- 'Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/dependency-injection/Exception/BadMethodCallException.php',
2248
- 'Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvNotFoundException.php',
2249
- 'Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvParameterException.php',
2250
- 'Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/dependency-injection/Exception/ExceptionInterface.php',
2251
- 'Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/dependency-injection/Exception/InvalidArgumentException.php',
2252
- 'Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $vendorDir . '/symfony/dependency-injection/Exception/LogicException.php',
2253
- 'Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => $vendorDir . '/symfony/dependency-injection/Exception/OutOfBoundsException.php',
2254
- 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php',
2255
- 'Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterNotFoundException.php',
2256
- 'Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $vendorDir . '/symfony/dependency-injection/Exception/RuntimeException.php',
2257
- 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php',
2258
- 'Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceNotFoundException.php',
2259
- 'Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguage.php',
2260
- 'Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguageProvider.php',
2261
- 'Symfony\\Component\\DependencyInjection\\Extension\\ConfigurationExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php',
2262
- 'Symfony\\Component\\DependencyInjection\\Extension\\Extension' => $vendorDir . '/symfony/dependency-injection/Extension/Extension.php',
2263
- 'Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ExtensionInterface.php',
2264
- 'Symfony\\Component\\DependencyInjection\\Extension\\PrependExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/PrependExtensionInterface.php',
2265
- 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\InstantiatorInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php',
2266
- 'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\RealServiceInstantiator' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php',
2267
- 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php',
2268
- 'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\NullDumper' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php',
2269
- 'Symfony\\Component\\DependencyInjection\\LazyProxy\\ProxyHelper' => $vendorDir . '/symfony/dependency-injection/LazyProxy/ProxyHelper.php',
2270
- 'Symfony\\Component\\DependencyInjection\\Loader\\ClosureLoader' => $vendorDir . '/symfony/dependency-injection/Loader/ClosureLoader.php',
2271
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AbstractConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php',
2272
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AbstractServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php',
2273
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AliasConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php',
2274
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ContainerConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php',
2275
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\DefaultsConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php',
2276
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\InlineServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php',
2277
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\InstanceofConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php',
2278
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ParametersConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php',
2279
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\PrototypeConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php',
2280
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ReferenceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php',
2281
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php',
2282
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php',
2283
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AbstractTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php',
2284
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ArgumentTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php',
2285
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AutoconfigureTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php',
2286
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AutowireTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php',
2287
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\BindTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php',
2288
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\CallTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php',
2289
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ClassTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php',
2290
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ConfiguratorTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php',
2291
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\DecorateTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php',
2292
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\DeprecateTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php',
2293
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\FactoryTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php',
2294
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\FileTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php',
2295
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\LazyTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php',
2296
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ParentTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php',
2297
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\PropertyTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php',
2298
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\PublicTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php',
2299
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ShareTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php',
2300
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\SyntheticTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php',
2301
- 'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\TagTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php',
2302
- 'Symfony\\Component\\DependencyInjection\\Loader\\DirectoryLoader' => $vendorDir . '/symfony/dependency-injection/Loader/DirectoryLoader.php',
2303
- 'Symfony\\Component\\DependencyInjection\\Loader\\FileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/FileLoader.php',
2304
- 'Symfony\\Component\\DependencyInjection\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/GlobFileLoader.php',
2305
- 'Symfony\\Component\\DependencyInjection\\Loader\\IniFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/IniFileLoader.php',
2306
- 'Symfony\\Component\\DependencyInjection\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/PhpFileLoader.php',
2307
- 'Symfony\\Component\\DependencyInjection\\Loader\\ProtectedPhpFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/PhpFileLoader.php',
2308
- 'Symfony\\Component\\DependencyInjection\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/XmlFileLoader.php',
2309
- 'Symfony\\Component\\DependencyInjection\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/YamlFileLoader.php',
2310
- 'Symfony\\Component\\DependencyInjection\\Parameter' => $vendorDir . '/symfony/dependency-injection/Parameter.php',
2311
- 'Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php',
2312
- 'Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php',
2313
- 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBag.php',
2314
- 'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php',
2315
- 'Symfony\\Component\\DependencyInjection\\Reference' => $vendorDir . '/symfony/dependency-injection/Reference.php',
2316
- 'Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $vendorDir . '/symfony/dependency-injection/ResettableContainerInterface.php',
2317
- 'Symfony\\Component\\DependencyInjection\\ServiceLocator' => $vendorDir . '/symfony/dependency-injection/ServiceLocator.php',
2318
- 'Symfony\\Component\\DependencyInjection\\ServiceSubscriberInterface' => $vendorDir . '/symfony/dependency-injection/ServiceSubscriberInterface.php',
2319
- 'Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => $vendorDir . '/symfony/dependency-injection/TaggedContainerInterface.php',
2320
- 'Symfony\\Component\\DependencyInjection\\TypedReference' => $vendorDir . '/symfony/dependency-injection/TypedReference.php',
2321
- 'Symfony\\Component\\DependencyInjection\\Variable' => $vendorDir . '/symfony/dependency-injection/Variable.php',
2322
- 'Symfony\\Component\\DomCrawler\\AbstractUriElement' => $vendorDir . '/symfony/dom-crawler/AbstractUriElement.php',
2323
- 'Symfony\\Component\\DomCrawler\\Crawler' => $vendorDir . '/symfony/dom-crawler/Crawler.php',
2324
- 'Symfony\\Component\\DomCrawler\\Field\\ChoiceFormField' => $vendorDir . '/symfony/dom-crawler/Field/ChoiceFormField.php',
2325
- 'Symfony\\Component\\DomCrawler\\Field\\FileFormField' => $vendorDir . '/symfony/dom-crawler/Field/FileFormField.php',
2326
- 'Symfony\\Component\\DomCrawler\\Field\\FormField' => $vendorDir . '/symfony/dom-crawler/Field/FormField.php',
2327
- 'Symfony\\Component\\DomCrawler\\Field\\InputFormField' => $vendorDir . '/symfony/dom-crawler/Field/InputFormField.php',
2328
- 'Symfony\\Component\\DomCrawler\\Field\\TextareaFormField' => $vendorDir . '/symfony/dom-crawler/Field/TextareaFormField.php',
2329
- 'Symfony\\Component\\DomCrawler\\Form' => $vendorDir . '/symfony/dom-crawler/Form.php',
2330
- 'Symfony\\Component\\DomCrawler\\FormFieldRegistry' => $vendorDir . '/symfony/dom-crawler/FormFieldRegistry.php',
2331
- 'Symfony\\Component\\DomCrawler\\Image' => $vendorDir . '/symfony/dom-crawler/Image.php',
2332
- 'Symfony\\Component\\DomCrawler\\Link' => $vendorDir . '/symfony/dom-crawler/Link.php',
2333
- 'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorAttributeValueSame' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorAttributeValueSame.php',
2334
- 'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorExists' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorExists.php',
2335
- 'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorTextContains' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextContains.php',
2336
- 'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorTextSame' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextSame.php',
2337
- 'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php',
2338
- 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php',
2339
- 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php',
2340
- 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php',
2341
- 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php',
2342
- 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php',
2343
- 'Symfony\\Component\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher/Event.php',
2344
- 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php',
2345
- 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php',
2346
- 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php',
2347
- 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php',
2348
- 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php',
2349
- 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php',
2350
- 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php',
2351
- 'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php',
2352
- 'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php',
2353
- 'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php',
2354
- 'Symfony\\Component\\Filesystem\\LockHandler' => $vendorDir . '/symfony/filesystem/LockHandler.php',
2355
- 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php',
2356
- 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php',
2357
- 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php',
2358
- 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php',
2359
- 'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/finder/Exception/ExceptionInterface.php',
2360
- 'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php',
2361
- 'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php',
2362
- 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php',
2363
- 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
2364
- 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php',
2365
- 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php',
2366
- 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
2367
- 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
2368
- 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php',
2369
- 'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilterIterator.php',
2370
- 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
2371
- 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php',
2372
- 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
2373
- 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php',
2374
- 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php',
2375
- 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php',
2376
- 'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php',
2377
- 'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php',
2378
- 'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php',
2379
- 'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php',
2380
- 'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php',
2381
- 'Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php',
2382
- 'Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php',
2383
- 'Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php',
2384
- 'Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php',
2385
- 'Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php',
2386
- 'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php',
2387
- 'Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php',
2388
- 'Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php',
2389
- 'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php',
2390
- 'Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php',
2391
- 'Symfony\\Component\\Process\\ProcessBuilder' => $vendorDir . '/symfony/process/ProcessBuilder.php',
2392
- 'Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php',
2393
- 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php',
2394
- 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php',
2395
- 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php',
2396
- 'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php',
2397
- 'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => $vendorDir . '/symfony/translation/Command/XliffLintCommand.php',
2398
- 'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php',
2399
- 'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php',
2400
- 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationDumperPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationDumperPass.php',
2401
- 'Symfony\\Component\\Translation\\DependencyInjection\\TranslationExtractorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationExtractorPass.php',
2402
- 'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslatorPass.php',
2403
- 'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => $vendorDir . '/symfony/translation/Dumper/CsvFileDumper.php',
2404
- 'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => $vendorDir . '/symfony/translation/Dumper/DumperInterface.php',
2405
- 'Symfony\\Component\\Translation\\Dumper\\FileDumper' => $vendorDir . '/symfony/translation/Dumper/FileDumper.php',
2406
- 'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => $vendorDir . '/symfony/translation/Dumper/IcuResFileDumper.php',
2407
- 'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => $vendorDir . '/symfony/translation/Dumper/IniFileDumper.php',
2408
- 'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => $vendorDir . '/symfony/translation/Dumper/JsonFileDumper.php',
2409
- 'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => $vendorDir . '/symfony/translation/Dumper/MoFileDumper.php',
2410
- 'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => $vendorDir . '/symfony/translation/Dumper/PhpFileDumper.php',
2411
- 'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => $vendorDir . '/symfony/translation/Dumper/PoFileDumper.php',
2412
- 'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => $vendorDir . '/symfony/translation/Dumper/QtFileDumper.php',
2413
- 'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php',
2414
- 'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php',
2415
- 'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php',
2416
- 'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/translation/Exception/InvalidArgumentException.php',
2417
- 'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php',
2418
- 'Symfony\\Component\\Translation\\Exception\\LogicException' => $vendorDir . '/symfony/translation/Exception/LogicException.php',
2419
- 'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php',
2420
- 'Symfony\\Component\\Translation\\Exception\\RuntimeException' => $vendorDir . '/symfony/translation/Exception/RuntimeException.php',
2421
- 'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php',
2422
- 'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php',
2423
- 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php',
2424
- 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => $vendorDir . '/symfony/translation/Extractor/PhpExtractor.php',
2425
- 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => $vendorDir . '/symfony/translation/Extractor/PhpStringTokenParser.php',
2426
- 'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php',
2427
- 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => $vendorDir . '/symfony/translation/Formatter/MessageFormatter.php',
2428
- 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/MessageFormatterInterface.php',
2429
- 'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php',
2430
- 'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php',
2431
- 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php',
2432
- 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php',
2433
- 'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php',
2434
- 'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuDatFileLoader.php',
2435
- 'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuResFileLoader.php',
2436
- 'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => $vendorDir . '/symfony/translation/Loader/IniFileLoader.php',
2437
- 'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => $vendorDir . '/symfony/translation/Loader/JsonFileLoader.php',
2438
- 'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => $vendorDir . '/symfony/translation/Loader/LoaderInterface.php',
2439
- 'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => $vendorDir . '/symfony/translation/Loader/MoFileLoader.php',
2440
- 'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/translation/Loader/PhpFileLoader.php',
2441
- 'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => $vendorDir . '/symfony/translation/Loader/PoFileLoader.php',
2442
- 'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => $vendorDir . '/symfony/translation/Loader/QtFileLoader.php',
2443
- 'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => $vendorDir . '/symfony/translation/Loader/XliffFileLoader.php',
2444
- 'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/translation/Loader/YamlFileLoader.php',
2445
- 'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php',
2446
- 'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php',
2447
- 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php',
2448
- 'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php',
2449
- 'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php',
2450
- 'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php',
2451
- 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => $vendorDir . '/symfony/translation/Reader/TranslationReader.php',
2452
- 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => $vendorDir . '/symfony/translation/Reader/TranslationReaderInterface.php',
2453
- 'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php',
2454
- 'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php',
2455
- 'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php',
2456
- 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php',
2457
- 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php',
2458
- 'Symfony\\Component\\Translation\\Writer\\TranslationWriterInterface' => $vendorDir . '/symfony/translation/Writer/TranslationWriterInterface.php',
2459
- 'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php',
2460
- 'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php',
2461
- 'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php',
2462
- 'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php',
2463
- 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php',
2464
- 'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php',
2465
- 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php',
2466
- 'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php',
2467
- 'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php',
2468
- 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php',
2469
- 'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php',
2470
- 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php',
2471
- 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
2472
- 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
2473
- 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
2474
- 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php',
2475
- 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php',
2476
- 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php',
2477
- 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php',
2478
- 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php',
2479
- 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php',
2480
- 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php',
2481
- 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php',
2482
- 'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
2483
- 'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
2484
- 'Tribe\\Test\\Codeception\\Extensions\\Function_Mocker' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Codeception/Extensions/Function_Mocker.php',
2485
- 'Tribe\\Test\\PHPUnit\\Traits\\With_Post_Remapping' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/PHPUnit/Traits/With_Post_Remapping.php',
2486
- 'Tribe\\Test\\Products\\Traits\\With_Event_Data_Fetching' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/Traits/With_Event_Data_Fetching.php',
2487
- 'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\ContextMocker' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/ContextMocker.php',
2488
- 'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\HtmlPartialTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/HtmlPartialTestCase.php',
2489
- 'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\HtmlTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/HtmlTestCase.php',
2490
- 'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\TestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/TestCase.php',
2491
- 'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\ViewTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/ViewTestCase.php',
2492
- 'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
2493
- 'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
2494
- 'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
2495
- 'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
2496
- 'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
2497
- 'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
2498
- 'WP_CLI' => $vendorDir . '/wp-cli/wp-cli/php/class-wp-cli.php',
2499
- 'WP_CLI\\AutoloadSplitter' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/AutoloadSplitter.php',
2500
- 'WP_CLI\\AutoloadSplitter\\AutoloadGenerator' => $vendorDir . '/wp-cli/autoload-splitter/src/AutoloadGenerator.php',
2501
- 'WP_CLI\\AutoloadSplitter\\ComposerPlugin' => $vendorDir . '/wp-cli/autoload-splitter/src/ComposerPlugin.php',
2502
- 'WP_CLI\\Autoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Autoloader.php',
2503
- 'WP_CLI\\Bootstrap\\AutoloaderStep' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/AutoloaderStep.php',
2504
- 'WP_CLI\\Bootstrap\\BootstrapState' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/BootstrapState.php',
2505
- 'WP_CLI\\Bootstrap\\BootstrapStep' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/BootstrapStep.php',
2506
- 'WP_CLI\\Bootstrap\\ConfigureRunner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/ConfigureRunner.php',
2507
- 'WP_CLI\\Bootstrap\\DeclareAbstractBaseCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DeclareAbstractBaseCommand.php',
2508
- 'WP_CLI\\Bootstrap\\DeclareMainClass' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DeclareMainClass.php',
2509
- 'WP_CLI\\Bootstrap\\DefineProtectedCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DefineProtectedCommands.php',
2510
- 'WP_CLI\\Bootstrap\\IncludeBundledAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeBundledAutoloader.php',
2511
- 'WP_CLI\\Bootstrap\\IncludeFallbackAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFallbackAutoloader.php',
2512
- 'WP_CLI\\Bootstrap\\IncludeFrameworkAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFrameworkAutoloader.php',
2513
- 'WP_CLI\\Bootstrap\\IncludePackageAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludePackageAutoloader.php',
2514
- 'WP_CLI\\Bootstrap\\InitializeColorization' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeColorization.php',
2515
- 'WP_CLI\\Bootstrap\\InitializeLogger' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeLogger.php',
2516
- 'WP_CLI\\Bootstrap\\LaunchRunner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php',
2517
- 'WP_CLI\\Bootstrap\\LoadDispatcher' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadDispatcher.php',
2518
- 'WP_CLI\\Bootstrap\\LoadRequiredCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadRequiredCommand.php',
2519
- 'WP_CLI\\Bootstrap\\LoadUtilityFunctions' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadUtilityFunctions.php',
2520
- 'WP_CLI\\Bootstrap\\RegisterDeferredCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RegisterDeferredCommands.php',
2521
- 'WP_CLI\\Bootstrap\\RegisterFrameworkCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RegisterFrameworkCommands.php',
2522
- 'WP_CLI\\Bootstrap\\RunnerInstance' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RunnerInstance.php',
2523
- 'WP_CLI\\Completions' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Completions.php',
2524
- 'WP_CLI\\ComposerIO' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ComposerIO.php',
2525
- 'WP_CLI\\Configurator' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Configurator.php',
2526
- 'WP_CLI\\Dispatcher\\CommandAddition' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandAddition.php',
2527
- 'WP_CLI\\Dispatcher\\CommandFactory' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php',
2528
- 'WP_CLI\\Dispatcher\\CommandNamespace' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandNamespace.php',
2529
- 'WP_CLI\\Dispatcher\\CompositeCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CompositeCommand.php',
2530
- 'WP_CLI\\Dispatcher\\RootCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/RootCommand.php',
2531
- 'WP_CLI\\Dispatcher\\Subcommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php',
2532
- 'WP_CLI\\DocParser' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/DocParser.php',
2533
- 'WP_CLI\\ExitException' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ExitException.php',
2534
- 'WP_CLI\\Extractor' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Extractor.php',
2535
- 'WP_CLI\\Fetchers\\Base' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Fetchers/Base.php',
2536
- 'WP_CLI\\FileCache' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/FileCache.php',
2537
- 'WP_CLI\\Formatter' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Formatter.php',
2538
- 'WP_CLI\\Iterators\\CSV' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/CSV.php',
2539
- 'WP_CLI\\Iterators\\Exception' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Exception.php',
2540
- 'WP_CLI\\Iterators\\Query' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Query.php',
2541
- 'WP_CLI\\Iterators\\Table' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Table.php',
2542
- 'WP_CLI\\Iterators\\Transform' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Transform.php',
2543
- 'WP_CLI\\Loggers\\Base' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Base.php',
2544
- 'WP_CLI\\Loggers\\Execution' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Execution.php',
2545
- 'WP_CLI\\Loggers\\Quiet' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Quiet.php',
2546
- 'WP_CLI\\Loggers\\Regular' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Regular.php',
2547
- 'WP_CLI\\NoOp' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/NoOp.php',
2548
- 'WP_CLI\\PackageManagerEventSubscriber' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/PackageManagerEventSubscriber.php',
2549
- 'WP_CLI\\Process' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Process.php',
2550
- 'WP_CLI\\ProcessRun' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ProcessRun.php',
2551
- 'WP_CLI\\Runner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Runner.php',
2552
- 'WP_CLI\\SynopsisParser' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/SynopsisParser.php',
2553
- 'WP_CLI\\SynopsisValidator' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/SynopsisValidator.php',
2554
- 'WP_CLI\\UpgraderSkin' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/UpgraderSkin.php',
2555
- 'WP_CLI\\WpHttpCacheManager' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/WpHttpCacheManager.php',
2556
- 'WP_CLI_Command' => $vendorDir . '/wp-cli/wp-cli/php/class-wp-cli-command.php',
2557
- 'Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php',
2558
- 'cli\\Arguments' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Arguments.php',
2559
- 'cli\\Colors' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Colors.php',
2560
- 'cli\\Memoize' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Memoize.php',
2561
- 'cli\\Notify' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Notify.php',
2562
- 'cli\\Progress' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Progress.php',
2563
- 'cli\\Shell' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Shell.php',
2564
- 'cli\\Streams' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Streams.php',
2565
- 'cli\\Table' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Table.php',
2566
- 'cli\\Tree' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Tree.php',
2567
- 'cli\\arguments\\Argument' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/Argument.php',
2568
- 'cli\\arguments\\HelpScreen' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/HelpScreen.php',
2569
- 'cli\\arguments\\InvalidArguments' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/InvalidArguments.php',
2570
- 'cli\\arguments\\Lexer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/Lexer.php',
2571
- 'cli\\notify\\Dots' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/notify/Dots.php',
2572
- 'cli\\notify\\Spinner' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/notify/Spinner.php',
2573
- 'cli\\progress\\Bar' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/progress/Bar.php',
2574
- 'cli\\table\\Ascii' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Ascii.php',
2575
- 'cli\\table\\Renderer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Renderer.php',
2576
- 'cli\\table\\Tabular' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Tabular.php',
2577
- 'cli\\tree\\Ascii' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Ascii.php',
2578
- 'cli\\tree\\Markdown' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Markdown.php',
2579
- 'cli\\tree\\Renderer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Renderer.php',
2580
- 'phpDocumentor\\Reflection\\DocBlock' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock.php',
2581
- 'phpDocumentor\\Reflection\\DocBlockFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php',
2582
- 'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php',
2583
- 'phpDocumentor\\Reflection\\DocBlock\\Description' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Description.php',
2584
- 'phpDocumentor\\Reflection\\DocBlock\\DescriptionFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php',
2585
- 'phpDocumentor\\Reflection\\DocBlock\\ExampleFinder' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php',
2586
- 'phpDocumentor\\Reflection\\DocBlock\\Serializer' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php',
2587
- 'phpDocumentor\\Reflection\\DocBlock\\StandardTagFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php',
2588
- 'phpDocumentor\\Reflection\\DocBlock\\Tag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php',
2589
- 'phpDocumentor\\Reflection\\DocBlock\\TagFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php',
2590
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Author' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php',
2591
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\BaseTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php',
2592
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Covers' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php',
2593
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Deprecated' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php',
2594
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Example' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php',
2595
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\StaticMethod' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php',
2596
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\Strategy' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php',
2597
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php',
2598
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\AlignFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php',
2599
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\PassthroughFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php',
2600
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Generic' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php',
2601
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Link' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php',
2602
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Method' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php',
2603
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Param' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php',
2604
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Property' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php',
2605
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\PropertyRead' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php',
2606
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\PropertyWrite' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php',
2607
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Fqsen' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php',
2608
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Reference' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php',
2609
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Url' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php',
2610
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Return_' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php',
2611
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\See' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php',
2612
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Since' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php',
2613
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Source' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php',
2614
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Throws' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php',
2615
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Uses' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php',
2616
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Var_' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php',
2617
- 'phpDocumentor\\Reflection\\DocBlock\\Tags\\Version' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php',
2618
- 'phpDocumentor\\Reflection\\Element' => $vendorDir . '/phpdocumentor/reflection-common/src/Element.php',
2619
- 'phpDocumentor\\Reflection\\File' => $vendorDir . '/phpdocumentor/reflection-common/src/File.php',
2620
- 'phpDocumentor\\Reflection\\Fqsen' => $vendorDir . '/phpdocumentor/reflection-common/src/Fqsen.php',
2621
- 'phpDocumentor\\Reflection\\FqsenResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/FqsenResolver.php',
2622
- 'phpDocumentor\\Reflection\\Location' => $vendorDir . '/phpdocumentor/reflection-common/src/Location.php',
2623
- 'phpDocumentor\\Reflection\\Project' => $vendorDir . '/phpdocumentor/reflection-common/src/Project.php',
2624
- 'phpDocumentor\\Reflection\\ProjectFactory' => $vendorDir . '/phpdocumentor/reflection-common/src/ProjectFactory.php',
2625
- 'phpDocumentor\\Reflection\\Type' => $vendorDir . '/phpdocumentor/type-resolver/src/Type.php',
2626
- 'phpDocumentor\\Reflection\\TypeResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/TypeResolver.php',
2627
- 'phpDocumentor\\Reflection\\Types\\Array_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Array_.php',
2628
- 'phpDocumentor\\Reflection\\Types\\Boolean' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Boolean.php',
2629
- 'phpDocumentor\\Reflection\\Types\\Callable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Callable_.php',
2630
- 'phpDocumentor\\Reflection\\Types\\Compound' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Compound.php',
2631
- 'phpDocumentor\\Reflection\\Types\\Context' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Context.php',
2632
- 'phpDocumentor\\Reflection\\Types\\ContextFactory' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/ContextFactory.php',
2633
- 'phpDocumentor\\Reflection\\Types\\Float_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Float_.php',
2634
- 'phpDocumentor\\Reflection\\Types\\Integer' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Integer.php',
2635
- 'phpDocumentor\\Reflection\\Types\\Iterable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Iterable_.php',
2636
- 'phpDocumentor\\Reflection\\Types\\Mixed_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Mixed_.php',
2637
- 'phpDocumentor\\Reflection\\Types\\Null_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Null_.php',
2638
- 'phpDocumentor\\Reflection\\Types\\Nullable' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Nullable.php',
2639
- 'phpDocumentor\\Reflection\\Types\\Object_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Object_.php',
2640
- 'phpDocumentor\\Reflection\\Types\\Parent_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Parent_.php',
2641
- 'phpDocumentor\\Reflection\\Types\\Resource_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Resource_.php',
2642
- 'phpDocumentor\\Reflection\\Types\\Scalar' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Scalar.php',
2643
- 'phpDocumentor\\Reflection\\Types\\Self_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Self_.php',
2644
- 'phpDocumentor\\Reflection\\Types\\Static_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Static_.php',
2645
- 'phpDocumentor\\Reflection\\Types\\String_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/String_.php',
2646
- 'phpDocumentor\\Reflection\\Types\\This' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/This.php',
2647
- 'phpDocumentor\\Reflection\\Types\\Void_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Void_.php',
2648
- 'tad\\WPBrowser\\Adapters\\WP' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Adapters/WP.php',
2649
- 'tad\\WPBrowser\\Connector\\WordPress' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Connector/WordPress.php',
2650
- 'tad\\WPBrowser\\Documentation\\TableGenerator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Documentation/TableGenerator.php',
2651
- 'tad\\WPBrowser\\Environment\\Constants' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/Constants.php',
2652
- 'tad\\WPBrowser\\Environment\\Executor' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/Executor.php',
2653
- 'tad\\WPBrowser\\Environment\\System' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/System.php',
2654
- 'tad\\WPBrowser\\Extension\\Copier' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Extension/Copier.php',
2655
- 'tad\\WPBrowser\\Extension\\Symlinker' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Extension/Symlinker.php',
2656
- 'tad\\WPBrowser\\Filesystem\\FileReplacers\\AbstractFileReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/AbstractFileReplacer.php',
2657
- 'tad\\WPBrowser\\Filesystem\\FileReplacers\\HtaccesReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php',
2658
- 'tad\\WPBrowser\\Filesystem\\FileReplacers\\WPConfigReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacer.php',
2659
- 'tad\\WPBrowser\\Filesystem\\Filesystem' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/Filesystem.php',
2660
- 'tad\\WPBrowser\\Filesystem\\Utils' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/Utils.php',
2661
- 'tad\\WPBrowser\\Generators\\Blog' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Blog.php',
2662
- 'tad\\WPBrowser\\Generators\\Comment' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Comment.php',
2663
- 'tad\\WPBrowser\\Generators\\Date' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Date.php',
2664
- 'tad\\WPBrowser\\Generators\\Links' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Links.php',
2665
- 'tad\\WPBrowser\\Generators\\Post' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Post.php',
2666
- 'tad\\WPBrowser\\Generators\\RedirectingWPConfig' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/RedirectingWPConfig.php',
2667
- 'tad\\WPBrowser\\Generators\\SubdomainHtaccess' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/SubdomainHtaccess.php',
2668
- 'tad\\WPBrowser\\Generators\\SubfolderHtaccess' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/SubfolderHtaccess.php',
2669
- 'tad\\WPBrowser\\Generators\\Tables' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Tables.php',
2670
- 'tad\\WPBrowser\\Generators\\TemplateProviderInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/TemplateProviderInterface.php',
2671
- 'tad\\WPBrowser\\Generators\\User' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/User.php',
2672
- 'tad\\WPBrowser\\Generators\\User\\Roles' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/User/Roles.php',
2673
- 'tad\\WPBrowser\\Generators\\WpPassword' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/WpPassword.php',
2674
- 'tad\\WPBrowser\\Iterators\\Filters\\ActionsQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/ActionsQueriesFilter.php',
2675
- 'tad\\WPBrowser\\Iterators\\Filters\\ClassMethodQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/ClassMethodQueriesFilter.php',
2676
- 'tad\\WPBrowser\\Iterators\\Filters\\FactoryQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FactoryQueriesFilter.php',
2677
- 'tad\\WPBrowser\\Iterators\\Filters\\FiltersQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FiltersQueriesFilter.php',
2678
- 'tad\\WPBrowser\\Iterators\\Filters\\FunctionQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FunctionQueriesFilter.php',
2679
- 'tad\\WPBrowser\\Iterators\\Filters\\MainStatementQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/MainStatementQueriesFilter.php',
2680
- 'tad\\WPBrowser\\Iterators\\Filters\\QueriesCallerBasedFilterIterator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/QueriesCallerBasedFilterIterator.php',
2681
- 'tad\\WPBrowser\\Iterators\\Filters\\QueriesCallerBasedKeepingFilterIterator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/QueriesCallerBasedKeepingFilterIterator.php',
2682
- 'tad\\WPBrowser\\Iterators\\Filters\\SetupTearDownQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/SetupTearDownQueriesFilter.php',
2683
- 'tad\\WPBrowser\\Module\\Support\\DbDump' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/Support/DbDump.php',
2684
- 'tad\\WPBrowser\\Module\\Support\\UriToIndexMapper' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/Support/UriToIndexMapper.php',
2685
- 'tad\\WPBrowser\\Module\\WPLoader\\FactoryStore' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/FactoryStore.php',
2686
- 'tad\\WPBrowser\\Module\\WPLoader\\Filters' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/Filters.php',
2687
- 'tad\\WPBrowser\\Module\\WPLoader\\FiltersGroup' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/FiltersGroup.php',
2688
- 'tad\\WPBrowser\\Services\\Db\\MySQLDumpFactory' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpFactory.php',
2689
- 'tad\\WPBrowser\\Services\\Db\\MySQLDumpFactoryInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php',
2690
- 'tad\\WPBrowser\\Services\\Db\\MySQLDumpInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpInterface.php',
2691
- 'tad\\WPBrowser\\Services\\WP\\Bootstrapper' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/WP/Bootstrapper.php',
2692
- 'tad\\WPBrowser\\Template\\Data' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Template/Data.php',
2693
- 'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
2694
- 'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
2695
- 'tad_DI52_ProtectedValue' => $vendorDir . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
2696
- 'tad_DI52_ServiceProvider' => $vendorDir . '/lucatume/di52/src/tad/DI52/ServiceProvider.php',
2697
- 'tad_DI52_ServiceProviderInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ServiceProviderInterface.php',
2698
- 'xrstf\\Composer52\\AutoloadGenerator' => $vendorDir . '/xrstf/composer-php52/lib/xrstf/Composer52/AutoloadGenerator.php',
2699
- 'xrstf\\Composer52\\Generator' => $vendorDir . '/xrstf/composer-php52/lib/xrstf/Composer52/Generator.php',
2700
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/vendor/composer/autoload_framework_real.php DELETED
@@ -1,34 +0,0 @@
1
- <?php
2
-
3
- // autoload_framework_real.php @generated by Composer
4
-
5
- class ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e
6
- {
7
- private static $loader;
8
-
9
- public static function loadClassLoader($class)
10
- {
11
- if ('Composer\Autoload\ClassLoader' === $class) {
12
- require __DIR__ . '/ClassLoader.php';
13
- }
14
- }
15
-
16
- public static function getLoader()
17
- {
18
- if (null !== self::$loader) {
19
- return self::$loader;
20
- }
21
-
22
- spl_autoload_register(array('ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e', 'loadClassLoader'), true, true);
23
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e', 'loadClassLoader'));
25
-
26
- $classMap = require __DIR__ . '/autoload_framework_classmap.php';
27
- if ($classMap) {
28
- $loader->addClassMap($classMap);
29
- }
30
- $loader->register(true);
31
-
32
- return $loader;
33
- }
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/vendor/composer/autoload_psr4.php CHANGED
@@ -7,5 +7,7 @@ $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
  'Tribe\\' => array($baseDir . '/src/Tribe'),
 
 
10
  'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
11
  );
7
 
8
  return array(
9
  'Tribe\\' => array($baseDir . '/src/Tribe'),
10
+ 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
11
+ 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
12
  'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
13
  );
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
common/vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
common/vendor/composer/autoload_static.php CHANGED
@@ -4,13 +4,21 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
11
  array (
12
  'Tribe\\' => 6,
13
  ),
 
 
 
 
 
 
 
 
14
  'F' =>
15
  array (
16
  'Firebase\\JWT\\' => 13,
@@ -22,6 +30,14 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
22
  array (
23
  0 => __DIR__ . '/../..' . '/src/Tribe',
24
  ),
 
 
 
 
 
 
 
 
25
  'Firebase\\JWT\\' =>
26
  array (
27
  0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
@@ -50,6 +66,114 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
50
  'Firebase\\JWT\\ExpiredException' => __DIR__ . '/..' . '/firebase/php-jwt/src/ExpiredException.php',
51
  'Firebase\\JWT\\JWT' => __DIR__ . '/..' . '/firebase/php-jwt/src/JWT.php',
52
  'Firebase\\JWT\\SignatureInvalidException' => __DIR__ . '/..' . '/firebase/php-jwt/src/SignatureInvalidException.php',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
54
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
55
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
@@ -57,6 +181,8 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
57
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
58
  'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
59
  'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
 
 
60
  'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
61
  'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
62
  'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
@@ -70,10 +196,10 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
70
  public static function getInitializer(ClassLoader $loader)
71
  {
72
  return \Closure::bind(function () use ($loader) {
73
- $loader->prefixLengthsPsr4 = ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c::$prefixLengthsPsr4;
74
- $loader->prefixDirsPsr4 = ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c::$prefixDirsPsr4;
75
- $loader->prefixesPsr0 = ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c::$prefixesPsr0;
76
- $loader->classMap = ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c::$classMap;
77
 
78
  }, null, ClassLoader::class);
79
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
11
  array (
12
  'Tribe\\' => 6,
13
  ),
14
+ 'P' =>
15
+ array (
16
+ 'Psr\\Log\\' => 8,
17
+ ),
18
+ 'M' =>
19
+ array (
20
+ 'Monolog\\' => 8,
21
+ ),
22
  'F' =>
23
  array (
24
  'Firebase\\JWT\\' => 13,
30
  array (
31
  0 => __DIR__ . '/../..' . '/src/Tribe',
32
  ),
33
+ 'Psr\\Log\\' =>
34
+ array (
35
+ 0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
36
+ ),
37
+ 'Monolog\\' =>
38
+ array (
39
+ 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
40
+ ),
41
  'Firebase\\JWT\\' =>
42
  array (
43
  0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
66
  'Firebase\\JWT\\ExpiredException' => __DIR__ . '/..' . '/firebase/php-jwt/src/ExpiredException.php',
67
  'Firebase\\JWT\\JWT' => __DIR__ . '/..' . '/firebase/php-jwt/src/JWT.php',
68
  'Firebase\\JWT\\SignatureInvalidException' => __DIR__ . '/..' . '/firebase/php-jwt/src/SignatureInvalidException.php',
69
+ 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php',
70
+ 'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php',
71
+ 'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php',
72
+ 'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php',
73
+ 'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php',
74
+ 'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php',
75
+ 'Monolog\\Formatter\\GelfMessageFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php',
76
+ 'Monolog\\Formatter\\HtmlFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php',
77
+ 'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php',
78
+ 'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php',
79
+ 'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php',
80
+ 'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php',
81
+ 'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php',
82
+ 'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php',
83
+ 'Monolog\\Formatter\\ScalarFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php',
84
+ 'Monolog\\Formatter\\WildfireFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php',
85
+ 'Monolog\\Handler\\AbstractHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php',
86
+ 'Monolog\\Handler\\AbstractProcessingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php',
87
+ 'Monolog\\Handler\\AbstractSyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php',
88
+ 'Monolog\\Handler\\AmqpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php',
89
+ 'Monolog\\Handler\\BrowserConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php',
90
+ 'Monolog\\Handler\\BufferHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php',
91
+ 'Monolog\\Handler\\ChromePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php',
92
+ 'Monolog\\Handler\\CouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php',
93
+ 'Monolog\\Handler\\CubeHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php',
94
+ 'Monolog\\Handler\\Curl\\Util' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php',
95
+ 'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php',
96
+ 'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
97
+ 'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
98
+ 'Monolog\\Handler\\ElasticSearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php',
99
+ 'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
100
+ 'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
101
+ 'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php',
102
+ 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php',
103
+ 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php',
104
+ 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php',
105
+ 'Monolog\\Handler\\FirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php',
106
+ 'Monolog\\Handler\\FleepHookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php',
107
+ 'Monolog\\Handler\\FlowdockHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php',
108
+ 'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php',
109
+ 'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php',
110
+ 'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php',
111
+ 'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php',
112
+ 'Monolog\\Handler\\HipChatHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php',
113
+ 'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php',
114
+ 'Monolog\\Handler\\InsightOpsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php',
115
+ 'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php',
116
+ 'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php',
117
+ 'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php',
118
+ 'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php',
119
+ 'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php',
120
+ 'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php',
121
+ 'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php',
122
+ 'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php',
123
+ 'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php',
124
+ 'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php',
125
+ 'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php',
126
+ 'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php',
127
+ 'Monolog\\Handler\\RavenHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php',
128
+ 'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php',
129
+ 'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php',
130
+ 'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php',
131
+ 'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php',
132
+ 'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php',
133
+ 'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php',
134
+ 'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php',
135
+ 'Monolog\\Handler\\SlackbotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php',
136
+ 'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php',
137
+ 'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php',
138
+ 'Monolog\\Handler\\SwiftMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php',
139
+ 'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php',
140
+ 'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php',
141
+ 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php',
142
+ 'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php',
143
+ 'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php',
144
+ 'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php',
145
+ 'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php',
146
+ 'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php',
147
+ 'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php',
148
+ 'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php',
149
+ 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php',
150
+ 'Monolog\\Processor\\MemoryUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php',
151
+ 'Monolog\\Processor\\MercurialProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php',
152
+ 'Monolog\\Processor\\ProcessIdProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php',
153
+ 'Monolog\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php',
154
+ 'Monolog\\Processor\\PsrLogMessageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php',
155
+ 'Monolog\\Processor\\TagProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php',
156
+ 'Monolog\\Processor\\UidProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php',
157
+ 'Monolog\\Processor\\WebProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php',
158
+ 'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php',
159
+ 'Monolog\\ResettableInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ResettableInterface.php',
160
+ 'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php',
161
+ 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php',
162
+ 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
163
+ 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
164
+ 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
165
+ 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php',
166
+ 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php',
167
+ 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
168
+ 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
169
+ 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
170
+ 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
171
+ 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
172
+ 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
173
+ 'Tribe\\Log\\Action_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Action_Logger.php',
174
+ 'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
175
+ 'Tribe\\Log\\Monolog_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Monolog_Logger.php',
176
+ 'Tribe\\Log\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Log/Service_Provider.php',
177
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
178
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
179
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
181
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
182
  'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
183
  'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
184
+ 'Tribe\\Utils\\Lazy_Events' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Events.php',
185
+ 'Tribe\\Utils\\Lazy_String' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_String.php',
186
  'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
187
  'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
188
  'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
196
  public static function getInitializer(ClassLoader $loader)
197
  {
198
  return \Closure::bind(function () use ($loader) {
199
+ $loader->prefixLengthsPsr4 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixLengthsPsr4;
200
+ $loader->prefixDirsPsr4 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixDirsPsr4;
201
+ $loader->prefixesPsr0 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixesPsr0;
202
+ $loader->classMap = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$classMap;
203
 
204
  }, null, ClassLoader::class);
205
  }
common/vendor/composer/installed.json CHANGED
@@ -35,13 +35,13 @@
35
  "authors": [
36
  {
37
  "name": "Neuman Vong",
38
- "role": "Developer",
39
- "email": "neuman+pear@twilio.com"
40
  },
41
  {
42
  "name": "Anant Narayanan",
43
- "role": "Developer",
44
- "email": "anant@php.net"
45
  }
46
  ],
47
  "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
@@ -92,6 +92,135 @@
92
  ],
93
  "description": "A PHP 5.2 compatible dependency injection container."
94
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  {
96
  "name": "xrstf/composer-php52",
97
  "version": "v1.0.20",
35
  "authors": [
36
  {
37
  "name": "Neuman Vong",
38
+ "email": "neuman+pear@twilio.com",
39
+ "role": "Developer"
40
  },
41
  {
42
  "name": "Anant Narayanan",
43
+ "email": "anant@php.net",
44
+ "role": "Developer"
45
  }
46
  ],
47
  "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
92
  ],
93
  "description": "A PHP 5.2 compatible dependency injection container."
94
  },
95
+ {
96
+ "name": "monolog/monolog",
97
+ "version": "1.24.0",
98
+ "version_normalized": "1.24.0.0",
99
+ "source": {
100
+ "type": "git",
101
+ "url": "https://github.com/Seldaek/monolog.git",
102
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
103
+ },
104
+ "dist": {
105
+ "type": "zip",
106
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
107
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
108
+ "shasum": ""
109
+ },
110
+ "require": {
111
+ "php": ">=5.3.0",
112
+ "psr/log": "~1.0"
113
+ },
114
+ "provide": {
115
+ "psr/log-implementation": "1.0.0"
116
+ },
117
+ "require-dev": {
118
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
119
+ "doctrine/couchdb": "~1.0@dev",
120
+ "graylog2/gelf-php": "~1.0",
121
+ "jakub-onderka/php-parallel-lint": "0.9",
122
+ "php-amqplib/php-amqplib": "~2.4",
123
+ "php-console/php-console": "^3.1.3",
124
+ "phpunit/phpunit": "~4.5",
125
+ "phpunit/phpunit-mock-objects": "2.3.0",
126
+ "ruflin/elastica": ">=0.90 <3.0",
127
+ "sentry/sentry": "^0.13",
128
+ "swiftmailer/swiftmailer": "^5.3|^6.0"
129
+ },
130
+ "suggest": {
131
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
132
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
133
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
134
+ "ext-mongo": "Allow sending log messages to a MongoDB server",
135
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
136
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
137
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
138
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
139
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
140
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
141
+ "sentry/sentry": "Allow sending log messages to a Sentry server"
142
+ },
143
+ "time": "2018-11-05T09:00:11+00:00",
144
+ "type": "library",
145
+ "extra": {
146
+ "branch-alias": {
147
+ "dev-master": "2.0.x-dev"
148
+ }
149
+ },
150
+ "installation-source": "dist",
151
+ "autoload": {
152
+ "psr-4": {
153
+ "Monolog\\": "src/Monolog"
154
+ }
155
+ },
156
+ "notification-url": "https://packagist.org/downloads/",
157
+ "license": [
158
+ "MIT"
159
+ ],
160
+ "authors": [
161
+ {
162
+ "name": "Jordi Boggiano",
163
+ "email": "j.boggiano@seld.be",
164
+ "homepage": "http://seld.be"
165
+ }
166
+ ],
167
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
168
+ "homepage": "http://github.com/Seldaek/monolog",
169
+ "keywords": [
170
+ "log",
171
+ "logging",
172
+ "psr-3"
173
+ ]
174
+ },
175
+ {
176
+ "name": "psr/log",
177
+ "version": "1.1.0",
178
+ "version_normalized": "1.1.0.0",
179
+ "source": {
180
+ "type": "git",
181
+ "url": "https://github.com/php-fig/log.git",
182
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
183
+ },
184
+ "dist": {
185
+ "type": "zip",
186
+ "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
187
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
188
+ "shasum": ""
189
+ },
190
+ "require": {
191
+ "php": ">=5.3.0"
192
+ },
193
+ "time": "2018-11-20T15:27:04+00:00",
194
+ "type": "library",
195
+ "extra": {
196
+ "branch-alias": {
197
+ "dev-master": "1.0.x-dev"
198
+ }
199
+ },
200
+ "installation-source": "dist",
201
+ "autoload": {
202
+ "psr-4": {
203
+ "Psr\\Log\\": "Psr/Log/"
204
+ }
205
+ },
206
+ "notification-url": "https://packagist.org/downloads/",
207
+ "license": [
208
+ "MIT"
209
+ ],
210
+ "authors": [
211
+ {
212
+ "name": "PHP-FIG",
213
+ "homepage": "http://www.php-fig.org/"
214
+ }
215
+ ],
216
+ "description": "Common interface for logging libraries",
217
+ "homepage": "https://github.com/php-fig/log",
218
+ "keywords": [
219
+ "log",
220
+ "psr",
221
+ "psr-3"
222
+ ]
223
+ },
224
  {
225
  "name": "xrstf/composer-php52",
226
  "version": "v1.0.20",
common/vendor/monolog/monolog/src/Monolog/ErrorHandler.php ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ use Psr\Log\LoggerInterface;
15
+ use Psr\Log\LogLevel;
16
+ use Monolog\Handler\AbstractHandler;
17
+ use Monolog\Registry;
18
+
19
+ /**
20
+ * Monolog error handler
21
+ *
22
+ * A facility to enable logging of runtime errors, exceptions and fatal errors.
23
+ *
24
+ * Quick setup: <code>ErrorHandler::register($logger);</code>
25
+ *
26
+ * @author Jordi Boggiano <j.boggiano@seld.be>
27
+ */
28
+ class ErrorHandler
29
+ {
30
+ private $logger;
31
+
32
+ private $previousExceptionHandler;
33
+ private $uncaughtExceptionLevel;
34
+
35
+ private $previousErrorHandler;
36
+ private $errorLevelMap;
37
+ private $handleOnlyReportedErrors;
38
+
39
+ private $hasFatalErrorHandler;
40
+ private $fatalLevel;
41
+ private $reservedMemory;
42
+ private $lastFatalTrace;
43
+ private static $fatalErrors = array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR);
44
+
45
+ public function __construct(LoggerInterface $logger)
46
+ {
47
+ $this->logger = $logger;
48
+ }
49
+
50
+ /**
51
+ * Registers a new ErrorHandler for a given Logger
52
+ *
53
+ * By default it will handle errors, exceptions and fatal errors
54
+ *
55
+ * @param LoggerInterface $logger
56
+ * @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling
57
+ * @param int|false $exceptionLevel a LogLevel::* constant, or false to disable exception handling
58
+ * @param int|false $fatalLevel a LogLevel::* constant, or false to disable fatal error handling
59
+ * @return ErrorHandler
60
+ */
61
+ public static function register(LoggerInterface $logger, $errorLevelMap = array(), $exceptionLevel = null, $fatalLevel = null)
62
+ {
63
+ //Forces the autoloader to run for LogLevel. Fixes an autoload issue at compile-time on PHP5.3. See https://github.com/Seldaek/monolog/pull/929
64
+ class_exists('\\Psr\\Log\\LogLevel', true);
65
+
66
+ $handler = new static($logger);
67
+ if ($errorLevelMap !== false) {
68
+ $handler->registerErrorHandler($errorLevelMap);
69
+ }
70
+ if ($exceptionLevel !== false) {
71
+ $handler->registerExceptionHandler($exceptionLevel);
72
+ }
73
+ if ($fatalLevel !== false) {
74
+ $handler->registerFatalHandler($fatalLevel);
75
+ }
76
+
77
+ return $handler;
78
+ }
79
+
80
+ public function registerExceptionHandler($level = null, $callPrevious = true)
81
+ {
82
+ $prev = set_exception_handler(array($this, 'handleException'));
83
+ $this->uncaughtExceptionLevel = $level;
84
+ if ($callPrevious && $prev) {
85
+ $this->previousExceptionHandler = $prev;
86
+ }
87
+ }
88
+
89
+ public function registerErrorHandler(array $levelMap = array(), $callPrevious = true, $errorTypes = -1, $handleOnlyReportedErrors = true)
90
+ {
91
+ $prev = set_error_handler(array($this, 'handleError'), $errorTypes);
92
+ $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap);
93
+ if ($callPrevious) {
94
+ $this->previousErrorHandler = $prev ?: true;
95
+ }
96
+
97
+ $this->handleOnlyReportedErrors = $handleOnlyReportedErrors;
98
+ }
99
+
100
+ public function registerFatalHandler($level = null, $reservedMemorySize = 20)
101
+ {
102
+ register_shutdown_function(array($this, 'handleFatalError'));
103
+
104
+ $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize);
105
+ $this->fatalLevel = $level;
106
+ $this->hasFatalErrorHandler = true;
107
+ }
108
+
109
+ protected function defaultErrorLevelMap()
110
+ {
111
+ return array(
112
+ E_ERROR => LogLevel::CRITICAL,
113
+ E_WARNING => LogLevel::WARNING,
114
+ E_PARSE => LogLevel::ALERT,
115
+ E_NOTICE => LogLevel::NOTICE,
116
+ E_CORE_ERROR => LogLevel::CRITICAL,
117
+ E_CORE_WARNING => LogLevel::WARNING,
118
+ E_COMPILE_ERROR => LogLevel::ALERT,
119
+ E_COMPILE_WARNING => LogLevel::WARNING,
120
+ E_USER_ERROR => LogLevel::ERROR,
121
+ E_USER_WARNING => LogLevel::WARNING,
122
+ E_USER_NOTICE => LogLevel::NOTICE,
123
+ E_STRICT => LogLevel::NOTICE,
124
+ E_RECOVERABLE_ERROR => LogLevel::ERROR,
125
+ E_DEPRECATED => LogLevel::NOTICE,
126
+ E_USER_DEPRECATED => LogLevel::NOTICE,
127
+ );
128
+ }
129
+
130
+ /**
131
+ * @private
132
+ */
133
+ public function handleException($e)
134
+ {
135
+ $this->logger->log(
136
+ $this->uncaughtExceptionLevel === null ? LogLevel::ERROR : $this->uncaughtExceptionLevel,
137
+ sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()),
138
+ array('exception' => $e)
139
+ );
140
+
141
+ if ($this->previousExceptionHandler) {
142
+ call_user_func($this->previousExceptionHandler, $e);
143
+ }
144
+
145
+ exit(255);
146
+ }
147
+
148
+ /**
149
+ * @private
150
+ */
151
+ public function handleError($code, $message, $file = '', $line = 0, $context = array())
152
+ {
153
+ if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) {
154
+ return;
155
+ }
156
+
157
+ // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries
158
+ if (!$this->hasFatalErrorHandler || !in_array($code, self::$fatalErrors, true)) {
159
+ $level = isset($this->errorLevelMap[$code]) ? $this->errorLevelMap[$code] : LogLevel::CRITICAL;
160
+ $this->logger->log($level, self::codeToString($code).': '.$message, array('code' => $code, 'message' => $message, 'file' => $file, 'line' => $line));
161
+ } else {
162
+ // http://php.net/manual/en/function.debug-backtrace.php
163
+ // As of 5.3.6, DEBUG_BACKTRACE_IGNORE_ARGS option was added.
164
+ // Any version less than 5.3.6 must use the DEBUG_BACKTRACE_IGNORE_ARGS constant value '2'.
165
+ $trace = debug_backtrace((PHP_VERSION_ID < 50306) ? 2 : DEBUG_BACKTRACE_IGNORE_ARGS);
166
+ array_shift($trace); // Exclude handleError from trace
167
+ $this->lastFatalTrace = $trace;
168
+ }
169
+
170
+ if ($this->previousErrorHandler === true) {
171
+ return false;
172
+ } elseif ($this->previousErrorHandler) {
173
+ return call_user_func($this->previousErrorHandler, $code, $message, $file, $line, $context);
174
+ }
175
+ }
176
+
177
+ /**
178
+ * @private
179
+ */
180
+ public function handleFatalError()
181
+ {
182
+ $this->reservedMemory = null;
183
+
184
+ $lastError = error_get_last();
185
+ if ($lastError && in_array($lastError['type'], self::$fatalErrors, true)) {
186
+ $this->logger->log(
187
+ $this->fatalLevel === null ? LogLevel::ALERT : $this->fatalLevel,
188
+ 'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],
189
+ array('code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $this->lastFatalTrace)
190
+ );
191
+
192
+ if ($this->logger instanceof Logger) {
193
+ foreach ($this->logger->getHandlers() as $handler) {
194
+ if ($handler instanceof AbstractHandler) {
195
+ $handler->close();
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ private static function codeToString($code)
203
+ {
204
+ switch ($code) {
205
+ case E_ERROR:
206
+ return 'E_ERROR';
207
+ case E_WARNING:
208
+ return 'E_WARNING';
209
+ case E_PARSE:
210
+ return 'E_PARSE';
211
+ case E_NOTICE:
212
+ return 'E_NOTICE';
213
+ case E_CORE_ERROR:
214
+ return 'E_CORE_ERROR';
215
+ case E_CORE_WARNING:
216
+ return 'E_CORE_WARNING';
217
+ case E_COMPILE_ERROR:
218
+ return 'E_COMPILE_ERROR';
219
+ case E_COMPILE_WARNING:
220
+ return 'E_COMPILE_WARNING';
221
+ case E_USER_ERROR:
222
+ return 'E_USER_ERROR';
223
+ case E_USER_WARNING:
224
+ return 'E_USER_WARNING';
225
+ case E_USER_NOTICE:
226
+ return 'E_USER_NOTICE';
227
+ case E_STRICT:
228
+ return 'E_STRICT';
229
+ case E_RECOVERABLE_ERROR:
230
+ return 'E_RECOVERABLE_ERROR';
231
+ case E_DEPRECATED:
232
+ return 'E_DEPRECATED';
233
+ case E_USER_DEPRECATED:
234
+ return 'E_USER_DEPRECATED';
235
+ }
236
+
237
+ return 'Unknown PHP error';
238
+ }
239
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Formats a log message according to the ChromePHP array format
18
+ *
19
+ * @author Christophe Coevoet <stof@notk.org>
20
+ */
21
+ class ChromePHPFormatter implements FormatterInterface
22
+ {
23
+ /**
24
+ * Translates Monolog log levels to Wildfire levels.
25
+ */
26
+ private $logLevels = array(
27
+ Logger::DEBUG => 'log',
28
+ Logger::INFO => 'info',
29
+ Logger::NOTICE => 'info',
30
+ Logger::WARNING => 'warn',
31
+ Logger::ERROR => 'error',
32
+ Logger::CRITICAL => 'error',
33
+ Logger::ALERT => 'error',
34
+ Logger::EMERGENCY => 'error',
35
+ );
36
+
37
+ /**
38
+ * {@inheritdoc}
39
+ */
40
+ public function format(array $record)
41
+ {
42
+ // Retrieve the line and file if set and remove them from the formatted extra
43
+ $backtrace = 'unknown';
44
+ if (isset($record['extra']['file'], $record['extra']['line'])) {
45
+ $backtrace = $record['extra']['file'].' : '.$record['extra']['line'];
46
+ unset($record['extra']['file'], $record['extra']['line']);
47
+ }
48
+
49
+ $message = array('message' => $record['message']);
50
+ if ($record['context']) {
51
+ $message['context'] = $record['context'];
52
+ }
53
+ if ($record['extra']) {
54
+ $message['extra'] = $record['extra'];
55
+ }
56
+ if (count($message) === 1) {
57
+ $message = reset($message);
58
+ }
59
+
60
+ return array(
61
+ $record['channel'],
62
+ $message,
63
+ $backtrace,
64
+ $this->logLevels[$record['level']],
65
+ );
66
+ }
67
+
68
+ public function formatBatch(array $records)
69
+ {
70
+ $formatted = array();
71
+
72
+ foreach ($records as $record) {
73
+ $formatted[] = $this->format($record);
74
+ }
75
+
76
+ return $formatted;
77
+ }
78
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Elastica\Document;
15
+
16
+ /**
17
+ * Format a log message into an Elastica Document
18
+ *
19
+ * @author Jelle Vink <jelle.vink@gmail.com>
20
+ */
21
+ class ElasticaFormatter extends NormalizerFormatter
22
+ {
23
+ /**
24
+ * @var string Elastic search index name
25
+ */
26
+ protected $index;
27
+
28
+ /**
29
+ * @var string Elastic search document type
30
+ */
31
+ protected $type;
32
+
33
+ /**
34
+ * @param string $index Elastic Search index name
35
+ * @param string $type Elastic Search document type
36
+ */
37
+ public function __construct($index, $type)
38
+ {
39
+ // elasticsearch requires a ISO 8601 format date with optional millisecond precision.
40
+ parent::__construct('Y-m-d\TH:i:s.uP');
41
+
42
+ $this->index = $index;
43
+ $this->type = $type;
44
+ }
45
+
46
+ /**
47
+ * {@inheritdoc}
48
+ */
49
+ public function format(array $record)
50
+ {
51
+ $record = parent::format($record);
52
+
53
+ return $this->getDocument($record);
54
+ }
55
+
56
+ /**
57
+ * Getter index
58
+ * @return string
59
+ */
60
+ public function getIndex()
61
+ {
62
+ return $this->index;
63
+ }
64
+
65
+ /**
66
+ * Getter type
67
+ * @return string
68
+ */
69
+ public function getType()
70
+ {
71
+ return $this->type;
72
+ }
73
+
74
+ /**
75
+ * Convert a log message into an Elastica Document
76
+ *
77
+ * @param array $record Log message
78
+ * @return Document
79
+ */
80
+ protected function getDocument($record)
81
+ {
82
+ $document = new Document();
83
+ $document->setData($record);
84
+ $document->setType($this->type);
85
+ $document->setIndex($this->index);
86
+
87
+ return $document;
88
+ }
89
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * formats the record to be used in the FlowdockHandler
16
+ *
17
+ * @author Dominik Liebler <liebler.dominik@gmail.com>
18
+ */
19
+ class FlowdockFormatter implements FormatterInterface
20
+ {
21
+ /**
22
+ * @var string
23
+ */
24
+ private $source;
25
+
26
+ /**
27
+ * @var string
28
+ */
29
+ private $sourceEmail;
30
+
31
+ /**
32
+ * @param string $source
33
+ * @param string $sourceEmail
34
+ */
35
+ public function __construct($source, $sourceEmail)
36
+ {
37
+ $this->source = $source;
38
+ $this->sourceEmail = $sourceEmail;
39
+ }
40
+
41
+ /**
42
+ * {@inheritdoc}
43
+ */
44
+ public function format(array $record)
45
+ {
46
+ $tags = array(
47
+ '#logs',
48
+ '#' . strtolower($record['level_name']),
49
+ '#' . $record['channel'],
50
+ );
51
+
52
+ foreach ($record['extra'] as $value) {
53
+ $tags[] = '#' . $value;
54
+ }
55
+
56
+ $subject = sprintf(
57
+ 'in %s: %s - %s',
58
+ $this->source,
59
+ $record['level_name'],
60
+ $this->getShortMessage($record['message'])
61
+ );
62
+
63
+ $record['flowdock'] = array(
64
+ 'source' => $this->source,
65
+ 'from_address' => $this->sourceEmail,
66
+ 'subject' => $subject,
67
+ 'content' => $record['message'],
68
+ 'tags' => $tags,
69
+ 'project' => $this->source,
70
+ );
71
+
72
+ return $record;
73
+ }
74
+
75
+ /**
76
+ * {@inheritdoc}
77
+ */
78
+ public function formatBatch(array $records)
79
+ {
80
+ $formatted = array();
81
+
82
+ foreach ($records as $record) {
83
+ $formatted[] = $this->format($record);
84
+ }
85
+
86
+ return $formatted;
87
+ }
88
+
89
+ /**
90
+ * @param string $message
91
+ *
92
+ * @return string
93
+ */
94
+ public function getShortMessage($message)
95
+ {
96
+ static $hasMbString;
97
+
98
+ if (null === $hasMbString) {
99
+ $hasMbString = function_exists('mb_strlen');
100
+ }
101
+
102
+ $maxLength = 45;
103
+
104
+ if ($hasMbString) {
105
+ if (mb_strlen($message, 'UTF-8') > $maxLength) {
106
+ $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...';
107
+ }
108
+ } else {
109
+ if (strlen($message) > $maxLength) {
110
+ $message = substr($message, 0, $maxLength - 4) . ' ...';
111
+ }
112
+ }
113
+
114
+ return $message;
115
+ }
116
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * Class FluentdFormatter
16
+ *
17
+ * Serializes a log message to Fluentd unix socket protocol
18
+ *
19
+ * Fluentd config:
20
+ *
21
+ * <source>
22
+ * type unix
23
+ * path /var/run/td-agent/td-agent.sock
24
+ * </source>
25
+ *
26
+ * Monolog setup:
27
+ *
28
+ * $logger = new Monolog\Logger('fluent.tag');
29
+ * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock');
30
+ * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter());
31
+ * $logger->pushHandler($fluentHandler);
32
+ *
33
+ * @author Andrius Putna <fordnox@gmail.com>
34
+ */
35
+ class FluentdFormatter implements FormatterInterface
36
+ {
37
+ /**
38
+ * @var bool $levelTag should message level be a part of the fluentd tag
39
+ */
40
+ protected $levelTag = false;
41
+
42
+ public function __construct($levelTag = false)
43
+ {
44
+ if (!function_exists('json_encode')) {
45
+ throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
46
+ }
47
+
48
+ $this->levelTag = (bool) $levelTag;
49
+ }
50
+
51
+ public function isUsingLevelsInTag()
52
+ {
53
+ return $this->levelTag;
54
+ }
55
+
56
+ public function format(array $record)
57
+ {
58
+ $tag = $record['channel'];
59
+ if ($this->levelTag) {
60
+ $tag .= '.' . strtolower($record['level_name']);
61
+ }
62
+
63
+ $message = array(
64
+ 'message' => $record['message'],
65
+ 'context' => $record['context'],
66
+ 'extra' => $record['extra'],
67
+ );
68
+
69
+ if (!$this->levelTag) {
70
+ $message['level'] = $record['level'];
71
+ $message['level_name'] = $record['level_name'];
72
+ }
73
+
74
+ return json_encode(array($tag, $record['datetime']->getTimestamp(), $message));
75
+ }
76
+
77
+ public function formatBatch(array $records)
78
+ {
79
+ $message = '';
80
+ foreach ($records as $record) {
81
+ $message .= $this->format($record);
82
+ }
83
+
84
+ return $message;
85
+ }
86
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * Interface for formatters
16
+ *
17
+ * @author Jordi Boggiano <j.boggiano@seld.be>
18
+ */
19
+ interface FormatterInterface
20
+ {
21
+ /**
22
+ * Formats a log record.
23
+ *
24
+ * @param array $record A record to format
25
+ * @return mixed The formatted record
26
+ */
27
+ public function format(array $record);
28
+
29
+ /**
30
+ * Formats a set of log records.
31
+ *
32
+ * @param array $records A set of records to format
33
+ * @return mixed The formatted set of records
34
+ */
35
+ public function formatBatch(array $records);
36
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Monolog\Logger;
15
+ use Gelf\Message;
16
+
17
+ /**
18
+ * Serializes a log message to GELF
19
+ * @see http://www.graylog2.org/about/gelf
20
+ *
21
+ * @author Matt Lehner <mlehner@gmail.com>
22
+ */
23
+ class GelfMessageFormatter extends NormalizerFormatter
24
+ {
25
+ const DEFAULT_MAX_LENGTH = 32766;
26
+
27
+ /**
28
+ * @var string the name of the system for the Gelf log message
29
+ */
30
+ protected $systemName;
31
+
32
+ /**
33
+ * @var string a prefix for 'extra' fields from the Monolog record (optional)
34
+ */
35
+ protected $extraPrefix;
36
+
37
+ /**
38
+ * @var string a prefix for 'context' fields from the Monolog record (optional)
39
+ */
40
+ protected $contextPrefix;
41
+
42
+ /**
43
+ * @var int max length per field
44
+ */
45
+ protected $maxLength;
46
+
47
+ /**
48
+ * Translates Monolog log levels to Graylog2 log priorities.
49
+ */
50
+ private $logLevels = array(
51
+ Logger::DEBUG => 7,
52
+ Logger::INFO => 6,
53
+ Logger::NOTICE => 5,
54
+ Logger::WARNING => 4,
55
+ Logger::ERROR => 3,
56
+ Logger::CRITICAL => 2,
57
+ Logger::ALERT => 1,
58
+ Logger::EMERGENCY => 0,
59
+ );
60
+
61
+ public function __construct($systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $maxLength = null)
62
+ {
63
+ parent::__construct('U.u');
64
+
65
+ $this->systemName = $systemName ?: gethostname();
66
+
67
+ $this->extraPrefix = $extraPrefix;
68
+ $this->contextPrefix = $contextPrefix;
69
+ $this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength;
70
+ }
71
+
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ public function format(array $record)
76
+ {
77
+ $record = parent::format($record);
78
+
79
+ if (!isset($record['datetime'], $record['message'], $record['level'])) {
80
+ throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, '.var_export($record, true).' given');
81
+ }
82
+
83
+ $message = new Message();
84
+ $message
85
+ ->setTimestamp($record['datetime'])
86
+ ->setShortMessage((string) $record['message'])
87
+ ->setHost($this->systemName)
88
+ ->setLevel($this->logLevels[$record['level']]);
89
+
90
+ // message length + system name length + 200 for padding / metadata
91
+ $len = 200 + strlen((string) $record['message']) + strlen($this->systemName);
92
+
93
+ if ($len > $this->maxLength) {
94
+ $message->setShortMessage(substr($record['message'], 0, $this->maxLength));
95
+ }
96
+
97
+ if (isset($record['channel'])) {
98
+ $message->setFacility($record['channel']);
99
+ }
100
+ if (isset($record['extra']['line'])) {
101
+ $message->setLine($record['extra']['line']);
102
+ unset($record['extra']['line']);
103
+ }
104
+ if (isset($record['extra']['file'])) {
105
+ $message->setFile($record['extra']['file']);
106
+ unset($record['extra']['file']);
107
+ }
108
+
109
+ foreach ($record['extra'] as $key => $val) {
110
+ $val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
111
+ $len = strlen($this->extraPrefix . $key . $val);
112
+ if ($len > $this->maxLength) {
113
+ $message->setAdditional($this->extraPrefix . $key, substr($val, 0, $this->maxLength));
114
+ break;
115
+ }
116
+ $message->setAdditional($this->extraPrefix . $key, $val);
117
+ }
118
+
119
+ foreach ($record['context'] as $key => $val) {
120
+ $val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
121
+ $len = strlen($this->contextPrefix . $key . $val);
122
+ if ($len > $this->maxLength) {
123
+ $message->setAdditional($this->contextPrefix . $key, substr($val, 0, $this->maxLength));
124
+ break;
125
+ }
126
+ $message->setAdditional($this->contextPrefix . $key, $val);
127
+ }
128
+
129
+ if (null === $message->getFile() && isset($record['context']['exception']['file'])) {
130
+ if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) {
131
+ $message->setFile($matches[1]);
132
+ $message->setLine($matches[2]);
133
+ }
134
+ }
135
+
136
+ return $message;
137
+ }
138
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * This file is part of the Monolog package.
4
+ *
5
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
6
+ *
7
+ * For the full copyright and license information, please view the LICENSE
8
+ * file that was distributed with this source code.
9
+ */
10
+
11
+ namespace Monolog\Formatter;
12
+
13
+ use Monolog\Logger;
14
+
15
+ /**
16
+ * Formats incoming records into an HTML table
17
+ *
18
+ * This is especially useful for html email logging
19
+ *
20
+ * @author Tiago Brito <tlfbrito@gmail.com>
21
+ */
22
+ class HtmlFormatter extends NormalizerFormatter
23
+ {
24
+ /**
25
+ * Translates Monolog log levels to html color priorities.
26
+ */
27
+ protected $logLevels = array(
28
+ Logger::DEBUG => '#cccccc',
29
+ Logger::INFO => '#468847',
30
+ Logger::NOTICE => '#3a87ad',
31
+ Logger::WARNING => '#c09853',
32
+ Logger::ERROR => '#f0ad4e',
33
+ Logger::CRITICAL => '#FF7708',
34
+ Logger::ALERT => '#C12A19',
35
+ Logger::EMERGENCY => '#000000',
36
+ );
37
+
38
+ /**
39
+ * @param string $dateFormat The format of the timestamp: one supported by DateTime::format
40
+ */
41
+ public function __construct($dateFormat = null)
42
+ {
43
+ parent::__construct($dateFormat);
44
+ }
45
+
46
+ /**
47
+ * Creates an HTML table row
48
+ *
49
+ * @param string $th Row header content
50
+ * @param string $td Row standard cell content
51
+ * @param bool $escapeTd false if td content must not be html escaped
52
+ * @return string
53
+ */
54
+ protected function addRow($th, $td = ' ', $escapeTd = true)
55
+ {
56
+ $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8');
57
+ if ($escapeTd) {
58
+ $td = '<pre>'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'</pre>';
59
+ }
60
+
61
+ return "<tr style=\"padding: 4px;text-align: left;\">\n<th style=\"vertical-align: top;background: #ccc;color: #000\" width=\"100\">$th:</th>\n<td style=\"padding: 4px;text-align: left;vertical-align: top;background: #eee;color: #000\">".$td."</td>\n</tr>";
62
+ }
63
+
64
+ /**
65
+ * Create a HTML h1 tag
66
+ *
67
+ * @param string $title Text to be in the h1
68
+ * @param int $level Error level
69
+ * @return string
70
+ */
71
+ protected function addTitle($title, $level)
72
+ {
73
+ $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8');
74
+
75
+ return '<h1 style="background: '.$this->logLevels[$level].';color: #ffffff;padding: 5px;" class="monolog-output">'.$title.'</h1>';
76
+ }
77
+
78
+ /**
79
+ * Formats a log record.
80
+ *
81
+ * @param array $record A record to format
82
+ * @return mixed The formatted record
83
+ */
84
+ public function format(array $record)
85
+ {
86
+ $output = $this->addTitle($record['level_name'], $record['level']);
87
+ $output .= '<table cellspacing="1" width="100%" class="monolog-output">';
88
+
89
+ $output .= $this->addRow('Message', (string) $record['message']);
90
+ $output .= $this->addRow('Time', $record['datetime']->format($this->dateFormat));
91
+ $output .= $this->addRow('Channel', $record['channel']);
92
+ if ($record['context']) {
93
+ $embeddedTable = '<table cellspacing="1" width="100%">';
94
+ foreach ($record['context'] as $key => $value) {
95
+ $embeddedTable .= $this->addRow($key, $this->convertToString($value));
96
+ }
97
+ $embeddedTable .= '</table>';
98
+ $output .= $this->addRow('Context', $embeddedTable, false);
99
+ }
100
+ if ($record['extra']) {
101
+ $embeddedTable = '<table cellspacing="1" width="100%">';
102
+ foreach ($record['extra'] as $key => $value) {
103
+ $embeddedTable .= $this->addRow($key, $this->convertToString($value));
104
+ }
105
+ $embeddedTable .= '</table>';
106
+ $output .= $this->addRow('Extra', $embeddedTable, false);
107
+ }
108
+
109
+ return $output.'</table>';
110
+ }
111
+
112
+ /**
113
+ * Formats a set of log records.
114
+ *
115
+ * @param array $records A set of records to format
116
+ * @return mixed The formatted set of records
117
+ */
118
+ public function formatBatch(array $records)
119
+ {
120
+ $message = '';
121
+ foreach ($records as $record) {
122
+ $message .= $this->format($record);
123
+ }
124
+
125
+ return $message;
126
+ }
127
+
128
+ protected function convertToString($data)
129
+ {
130
+ if (null === $data || is_scalar($data)) {
131
+ return (string) $data;
132
+ }
133
+
134
+ $data = $this->normalize($data);
135
+ if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
136
+ return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
137
+ }
138
+
139
+ return str_replace('\\/', '/', json_encode($data));
140
+ }
141
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Exception;
15
+ use Monolog\Utils;
16
+ use Throwable;
17
+
18
+ /**
19
+ * Encodes whatever record data is passed to it as json
20
+ *
21
+ * This can be useful to log to databases or remote APIs
22
+ *
23
+ * @author Jordi Boggiano <j.boggiano@seld.be>
24
+ */
25
+ class JsonFormatter extends NormalizerFormatter
26
+ {
27
+ const BATCH_MODE_JSON = 1;
28
+ const BATCH_MODE_NEWLINES = 2;
29
+
30
+ protected $batchMode;
31
+ protected $appendNewline;
32
+
33
+ /**
34
+ * @var bool
35
+ */
36
+ protected $includeStacktraces = false;
37
+
38
+ /**
39
+ * @param int $batchMode
40
+ * @param bool $appendNewline
41
+ */
42
+ public function __construct($batchMode = self::BATCH_MODE_JSON, $appendNewline = true)
43
+ {
44
+ $this->batchMode = $batchMode;
45
+ $this->appendNewline = $appendNewline;
46
+ }
47
+
48
+ /**
49
+ * The batch mode option configures the formatting style for
50
+ * multiple records. By default, multiple records will be
51
+ * formatted as a JSON-encoded array. However, for
52
+ * compatibility with some API endpoints, alternative styles
53
+ * are available.
54
+ *
55
+ * @return int
56
+ */
57
+ public function getBatchMode()
58
+ {
59
+ return $this->batchMode;
60
+ }
61
+
62
+ /**
63
+ * True if newlines are appended to every formatted record
64
+ *
65
+ * @return bool
66
+ */
67
+ public function isAppendingNewlines()
68
+ {
69
+ return $this->appendNewline;
70
+ }
71
+
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ public function format(array $record)
76
+ {
77
+ return $this->toJson($this->normalize($record), true) . ($this->appendNewline ? "\n" : '');
78
+ }
79
+
80
+ /**
81
+ * {@inheritdoc}
82
+ */
83
+ public function formatBatch(array $records)
84
+ {
85
+ switch ($this->batchMode) {
86
+ case static::BATCH_MODE_NEWLINES:
87
+ return $this->formatBatchNewlines($records);
88
+
89
+ case static::BATCH_MODE_JSON:
90
+ default:
91
+ return $this->formatBatchJson($records);
92
+ }
93
+ }
94
+
95
+ /**
96
+ * @param bool $include
97
+ */
98
+ public function includeStacktraces($include = true)
99
+ {
100
+ $this->includeStacktraces = $include;
101
+ }
102
+
103
+ /**
104
+ * Return a JSON-encoded array of records.
105
+ *
106
+ * @param array $records
107
+ * @return string
108
+ */
109
+ protected function formatBatchJson(array $records)
110
+ {
111
+ return $this->toJson($this->normalize($records), true);
112
+ }
113
+
114
+ /**
115
+ * Use new lines to separate records instead of a
116
+ * JSON-encoded array.
117
+ *
118
+ * @param array $records
119
+ * @return string
120
+ */
121
+ protected function formatBatchNewlines(array $records)
122
+ {
123
+ $instance = $this;
124
+
125
+ $oldNewline = $this->appendNewline;
126
+ $this->appendNewline = false;
127
+ array_walk($records, function (&$value, $key) use ($instance) {
128
+ $value = $instance->format($value);
129
+ });
130
+ $this->appendNewline = $oldNewline;
131
+
132
+ return implode("\n", $records);
133
+ }
134
+
135
+ /**
136
+ * Normalizes given $data.
137
+ *
138
+ * @param mixed $data
139
+ *
140
+ * @return mixed
141
+ */
142
+ protected function normalize($data, $depth = 0)
143
+ {
144
+ if ($depth > 9) {
145
+ return 'Over 9 levels deep, aborting normalization';
146
+ }
147
+
148
+ if (is_array($data) || $data instanceof \Traversable) {
149
+ $normalized = array();
150
+
151
+ $count = 1;
152
+ foreach ($data as $key => $value) {
153
+ if ($count++ > 1000) {
154
+ $normalized['...'] = 'Over 1000 items ('.count($data).' total), aborting normalization';
155
+ break;
156
+ }
157
+
158
+ $normalized[$key] = $this->normalize($value, $depth+1);
159
+ }
160
+
161
+ return $normalized;
162
+ }
163
+
164
+ if ($data instanceof Exception || $data instanceof Throwable) {
165
+ return $this->normalizeException($data);
166
+ }
167
+
168
+ return $data;
169
+ }
170
+
171
+ /**
172
+ * Normalizes given exception with or without its own stack trace based on
173
+ * `includeStacktraces` property.
174
+ *
175
+ * @param Exception|Throwable $e
176
+ *
177
+ * @return array
178
+ */
179
+ protected function normalizeException($e)
180
+ {
181
+ // TODO 2.0 only check for Throwable
182
+ if (!$e instanceof Exception && !$e instanceof Throwable) {
183
+ throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
184
+ }
185
+
186
+ $data = array(
187
+ 'class' => Utils::getClass($e),
188
+ 'message' => $e->getMessage(),
189
+ 'code' => $e->getCode(),
190
+ 'file' => $e->getFile().':'.$e->getLine(),
191
+ );
192
+
193
+ if ($this->includeStacktraces) {
194
+ $trace = $e->getTrace();
195
+ foreach ($trace as $frame) {
196
+ if (isset($frame['file'])) {
197
+ $data['trace'][] = $frame['file'].':'.$frame['line'];
198
+ } elseif (isset($frame['function']) && $frame['function'] === '{closure}') {
199
+ // We should again normalize the frames, because it might contain invalid items
200
+ $data['trace'][] = $frame['function'];
201
+ } else {
202
+ // We should again normalize the frames, because it might contain invalid items
203
+ $data['trace'][] = $this->normalize($frame);
204
+ }
205
+ }
206
+ }
207
+
208
+ if ($previous = $e->getPrevious()) {
209
+ $data['previous'] = $this->normalizeException($previous);
210
+ }
211
+
212
+ return $data;
213
+ }
214
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Monolog\Utils;
15
+
16
+ /**
17
+ * Formats incoming records into a one-line string
18
+ *
19
+ * This is especially useful for logging to files
20
+ *
21
+ * @author Jordi Boggiano <j.boggiano@seld.be>
22
+ * @author Christophe Coevoet <stof@notk.org>
23
+ */
24
+ class LineFormatter extends NormalizerFormatter
25
+ {
26
+ const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
27
+
28
+ protected $format;
29
+ protected $allowInlineLineBreaks;
30
+ protected $ignoreEmptyContextAndExtra;
31
+ protected $includeStacktraces;
32
+
33
+ /**
34
+ * @param string $format The format of the message
35
+ * @param string $dateFormat The format of the timestamp: one supported by DateTime::format
36
+ * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries
37
+ * @param bool $ignoreEmptyContextAndExtra
38
+ */
39
+ public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false)
40
+ {
41
+ $this->format = $format ?: static::SIMPLE_FORMAT;
42
+ $this->allowInlineLineBreaks = $allowInlineLineBreaks;
43
+ $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;
44
+ parent::__construct($dateFormat);
45
+ }
46
+
47
+ public function includeStacktraces($include = true)
48
+ {
49
+ $this->includeStacktraces = $include;
50
+ if ($this->includeStacktraces) {
51
+ $this->allowInlineLineBreaks = true;
52
+ }
53
+ }
54
+
55
+ public function allowInlineLineBreaks($allow = true)
56
+ {
57
+ $this->allowInlineLineBreaks = $allow;
58
+ }
59
+
60
+ public function ignoreEmptyContextAndExtra($ignore = true)
61
+ {
62
+ $this->ignoreEmptyContextAndExtra = $ignore;
63
+ }
64
+
65
+ /**
66
+ * {@inheritdoc}
67
+ */
68
+ public function format(array $record)
69
+ {
70
+ $vars = parent::format($record);
71
+
72
+ $output = $this->format;
73
+
74
+ foreach ($vars['extra'] as $var => $val) {
75
+ if (false !== strpos($output, '%extra.'.$var.'%')) {
76
+ $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output);
77
+ unset($vars['extra'][$var]);
78
+ }
79
+ }
80
+
81
+
82
+ foreach ($vars['context'] as $var => $val) {
83
+ if (false !== strpos($output, '%context.'.$var.'%')) {
84
+ $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output);
85
+ unset($vars['context'][$var]);
86
+ }
87
+ }
88
+
89
+ if ($this->ignoreEmptyContextAndExtra) {
90
+ if (empty($vars['context'])) {
91
+ unset($vars['context']);
92
+ $output = str_replace('%context%', '', $output);
93
+ }
94
+
95
+ if (empty($vars['extra'])) {
96
+ unset($vars['extra']);
97
+ $output = str_replace('%extra%', '', $output);
98
+ }
99
+ }
100
+
101
+ foreach ($vars as $var => $val) {
102
+ if (false !== strpos($output, '%'.$var.'%')) {
103
+ $output = str_replace('%'.$var.'%', $this->stringify($val), $output);
104
+ }
105
+ }
106
+
107
+ // remove leftover %extra.xxx% and %context.xxx% if any
108
+ if (false !== strpos($output, '%')) {
109
+ $output = preg_replace('/%(?:extra|context)\..+?%/', '', $output);
110
+ }
111
+
112
+ return $output;
113
+ }
114
+
115
+ public function formatBatch(array $records)
116
+ {
117
+ $message = '';
118
+ foreach ($records as $record) {
119
+ $message .= $this->format($record);
120
+ }
121
+
122
+ return $message;
123
+ }
124
+
125
+ public function stringify($value)
126
+ {
127
+ return $this->replaceNewlines($this->convertToString($value));
128
+ }
129
+
130
+ protected function normalizeException($e)
131
+ {
132
+ // TODO 2.0 only check for Throwable
133
+ if (!$e instanceof \Exception && !$e instanceof \Throwable) {
134
+ throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
135
+ }
136
+
137
+ $previousText = '';
138
+ if ($previous = $e->getPrevious()) {
139
+ do {
140
+ $previousText .= ', '.Utils::getClass($previous).'(code: '.$previous->getCode().'): '.$previous->getMessage().' at '.$previous->getFile().':'.$previous->getLine();
141
+ } while ($previous = $previous->getPrevious());
142
+ }
143
+
144
+ $str = '[object] ('.Utils::getClass($e).'(code: '.$e->getCode().'): '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().$previousText.')';
145
+ if ($this->includeStacktraces) {
146
+ $str .= "\n[stacktrace]\n".$e->getTraceAsString()."\n";
147
+ }
148
+
149
+ return $str;
150
+ }
151
+
152
+ protected function convertToString($data)
153
+ {
154
+ if (null === $data || is_bool($data)) {
155
+ return var_export($data, true);
156
+ }
157
+
158
+ if (is_scalar($data)) {
159
+ return (string) $data;
160
+ }
161
+
162
+ if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
163
+ return $this->toJson($data, true);
164
+ }
165
+
166
+ return str_replace('\\/', '/', @json_encode($data));
167
+ }
168
+
169
+ protected function replaceNewlines($str)
170
+ {
171
+ if ($this->allowInlineLineBreaks) {
172
+ if (0 === strpos($str, '{')) {
173
+ return str_replace(array('\r', '\n'), array("\r", "\n"), $str);
174
+ }
175
+
176
+ return $str;
177
+ }
178
+
179
+ return str_replace(array("\r\n", "\r", "\n"), ' ', $str);
180
+ }
181
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * Encodes message information into JSON in a format compatible with Loggly.
16
+ *
17
+ * @author Adam Pancutt <adam@pancutt.com>
18
+ */
19
+ class LogglyFormatter extends JsonFormatter
20
+ {
21
+ /**
22
+ * Overrides the default batch mode to new lines for compatibility with the
23
+ * Loggly bulk API.
24
+ *
25
+ * @param int $batchMode
26
+ */
27
+ public function __construct($batchMode = self::BATCH_MODE_NEWLINES, $appendNewline = false)
28
+ {
29
+ parent::__construct($batchMode, $appendNewline);
30
+ }
31
+
32
+ /**
33
+ * Appends the 'timestamp' parameter for indexing by Loggly.
34
+ *
35
+ * @see https://www.loggly.com/docs/automated-parsing/#json
36
+ * @see \Monolog\Formatter\JsonFormatter::format()
37
+ */
38
+ public function format(array $record)
39
+ {
40
+ if (isset($record["datetime"]) && ($record["datetime"] instanceof \DateTime)) {
41
+ $record["timestamp"] = $record["datetime"]->format("Y-m-d\TH:i:s.uO");
42
+ // TODO 2.0 unset the 'datetime' parameter, retained for BC
43
+ }
44
+
45
+ return parent::format($record);
46
+ }
47
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * Serializes a log message to Logstash Event Format
16
+ *
17
+ * @see http://logstash.net/
18
+ * @see https://github.com/logstash/logstash/blob/master/lib/logstash/event.rb
19
+ *
20
+ * @author Tim Mower <timothy.mower@gmail.com>
21
+ */
22
+ class LogstashFormatter extends NormalizerFormatter
23
+ {
24
+ const V0 = 0;
25
+ const V1 = 1;
26
+
27
+ /**
28
+ * @var string the name of the system for the Logstash log message, used to fill the @source field
29
+ */
30
+ protected $systemName;
31
+
32
+ /**
33
+ * @var string an application name for the Logstash log message, used to fill the @type field
34
+ */
35
+ protected $applicationName;
36
+
37
+ /**
38
+ * @var string a prefix for 'extra' fields from the Monolog record (optional)
39
+ */
40
+ protected $extraPrefix;
41
+
42
+ /**
43
+ * @var string a prefix for 'context' fields from the Monolog record (optional)
44
+ */
45
+ protected $contextPrefix;
46
+
47
+ /**
48
+ * @var int logstash format version to use
49
+ */
50
+ protected $version;
51
+
52
+ /**
53
+ * @param string $applicationName the application that sends the data, used as the "type" field of logstash
54
+ * @param string $systemName the system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine
55
+ * @param string $extraPrefix prefix for extra keys inside logstash "fields"
56
+ * @param string $contextPrefix prefix for context keys inside logstash "fields", defaults to ctxt_
57
+ * @param int $version the logstash format version to use, defaults to 0
58
+ */
59
+ public function __construct($applicationName, $systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $version = self::V0)
60
+ {
61
+ // logstash requires a ISO 8601 format date with optional millisecond precision.
62
+ parent::__construct('Y-m-d\TH:i:s.uP');
63
+
64
+ $this->systemName = $systemName ?: gethostname();
65
+ $this->applicationName = $applicationName;
66
+ $this->extraPrefix = $extraPrefix;
67
+ $this->contextPrefix = $contextPrefix;
68
+ $this->version = $version;
69
+ }
70
+
71
+ /**
72
+ * {@inheritdoc}
73
+ */
74
+ public function format(array $record)
75
+ {
76
+ $record = parent::format($record);
77
+
78
+ if ($this->version === self::V1) {
79
+ $message = $this->formatV1($record);
80
+ } else {
81
+ $message = $this->formatV0($record);
82
+ }
83
+
84
+ return $this->toJson($message) . "\n";
85
+ }
86
+
87
+ protected function formatV0(array $record)
88
+ {
89
+ if (empty($record['datetime'])) {
90
+ $record['datetime'] = gmdate('c');
91
+ }
92
+ $message = array(
93
+ '@timestamp' => $record['datetime'],
94
+ '@source' => $this->systemName,
95
+ '@fields' => array(),
96
+ );
97
+ if (isset($record['message'])) {
98
+ $message['@message'] = $record['message'];
99
+ }
100
+ if (isset($record['channel'])) {
101
+ $message['@tags'] = array($record['channel']);
102
+ $message['@fields']['channel'] = $record['channel'];
103
+ }
104
+ if (isset($record['level'])) {
105
+ $message['@fields']['level'] = $record['level'];
106
+ }
107
+ if ($this->applicationName) {
108
+ $message['@type'] = $this->applicationName;
109
+ }
110
+ if (isset($record['extra']['server'])) {
111
+ $message['@source_host'] = $record['extra']['server'];
112
+ }
113
+ if (isset($record['extra']['url'])) {
114
+ $message['@source_path'] = $record['extra']['url'];
115
+ }
116
+ if (!empty($record['extra'])) {
117
+ foreach ($record['extra'] as $key => $val) {
118
+ $message['@fields'][$this->extraPrefix . $key] = $val;
119
+ }
120
+ }
121
+ if (!empty($record['context'])) {
122
+ foreach ($record['context'] as $key => $val) {
123
+ $message['@fields'][$this->contextPrefix . $key] = $val;
124
+ }
125
+ }
126
+
127
+ return $message;
128
+ }
129
+
130
+ protected function formatV1(array $record)
131
+ {
132
+ if (empty($record['datetime'])) {
133
+ $record['datetime'] = gmdate('c');
134
+ }
135
+ $message = array(
136
+ '@timestamp' => $record['datetime'],
137
+ '@version' => 1,
138
+ 'host' => $this->systemName,
139
+ );
140
+ if (isset($record['message'])) {
141
+ $message['message'] = $record['message'];
142
+ }
143
+ if (isset($record['channel'])) {
144
+ $message['type'] = $record['channel'];
145
+ $message['channel'] = $record['channel'];
146
+ }
147
+ if (isset($record['level_name'])) {
148
+ $message['level'] = $record['level_name'];
149
+ }
150
+ if ($this->applicationName) {
151
+ $message['type'] = $this->applicationName;
152
+ }
153
+ if (!empty($record['extra'])) {
154
+ foreach ($record['extra'] as $key => $val) {
155
+ $message[$this->extraPrefix . $key] = $val;
156
+ }
157
+ }
158
+ if (!empty($record['context'])) {
159
+ foreach ($record['context'] as $key => $val) {
160
+ $message[$this->contextPrefix . $key] = $val;
161
+ }
162
+ }
163
+
164
+ return $message;
165
+ }
166
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Monolog\Utils;
15
+
16
+ /**
17
+ * Formats a record for use with the MongoDBHandler.
18
+ *
19
+ * @author Florian Plattner <me@florianplattner.de>
20
+ */
21
+ class MongoDBFormatter implements FormatterInterface
22
+ {
23
+ private $exceptionTraceAsString;
24
+ private $maxNestingLevel;
25
+
26
+ /**
27
+ * @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record['context'] is 2
28
+ * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings
29
+ */
30
+ public function __construct($maxNestingLevel = 3, $exceptionTraceAsString = true)
31
+ {
32
+ $this->maxNestingLevel = max($maxNestingLevel, 0);
33
+ $this->exceptionTraceAsString = (bool) $exceptionTraceAsString;
34
+ }
35
+
36
+ /**
37
+ * {@inheritDoc}
38
+ */
39
+ public function format(array $record)
40
+ {
41
+ return $this->formatArray($record);
42
+ }
43
+
44
+ /**
45
+ * {@inheritDoc}
46
+ */
47
+ public function formatBatch(array $records)
48
+ {
49
+ foreach ($records as $key => $record) {
50
+ $records[$key] = $this->format($record);
51
+ }
52
+
53
+ return $records;
54
+ }
55
+
56
+ protected function formatArray(array $record, $nestingLevel = 0)
57
+ {
58
+ if ($this->maxNestingLevel == 0 || $nestingLevel <= $this->maxNestingLevel) {
59
+ foreach ($record as $name => $value) {
60
+ if ($value instanceof \DateTime) {
61
+ $record[$name] = $this->formatDate($value, $nestingLevel + 1);
62
+ } elseif ($value instanceof \Exception) {
63
+ $record[$name] = $this->formatException($value, $nestingLevel + 1);
64
+ } elseif (is_array($value)) {
65
+ $record[$name] = $this->formatArray($value, $nestingLevel + 1);
66
+ } elseif (is_object($value)) {
67
+ $record[$name] = $this->formatObject($value, $nestingLevel + 1);
68
+ }
69
+ }
70
+ } else {
71
+ $record = '[...]';
72
+ }
73
+
74
+ return $record;
75
+ }
76
+
77
+ protected function formatObject($value, $nestingLevel)
78
+ {
79
+ $objectVars = get_object_vars($value);
80
+ $objectVars['class'] = Utils::getClass($value);
81
+
82
+ return $this->formatArray($objectVars, $nestingLevel);
83
+ }
84
+
85
+ protected function formatException(\Exception $exception, $nestingLevel)
86
+ {
87
+ $formattedException = array(
88
+ 'class' => Utils::getClass($exception),
89
+ 'message' => $exception->getMessage(),
90
+ 'code' => $exception->getCode(),
91
+ 'file' => $exception->getFile() . ':' . $exception->getLine(),
92
+ );
93
+
94
+ if ($this->exceptionTraceAsString === true) {
95
+ $formattedException['trace'] = $exception->getTraceAsString();
96
+ } else {
97
+ $formattedException['trace'] = $exception->getTrace();
98
+ }
99
+
100
+ return $this->formatArray($formattedException, $nestingLevel);
101
+ }
102
+
103
+ protected function formatDate(\DateTime $value, $nestingLevel)
104
+ {
105
+ return new \MongoDate($value->getTimestamp());
106
+ }
107
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Exception;
15
+ use Monolog\Utils;
16
+
17
+ /**
18
+ * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets
19
+ *
20
+ * @author Jordi Boggiano <j.boggiano@seld.be>
21
+ */
22
+ class NormalizerFormatter implements FormatterInterface
23
+ {
24
+ const SIMPLE_DATE = "Y-m-d H:i:s";
25
+
26
+ protected $dateFormat;
27
+
28
+ /**
29
+ * @param string $dateFormat The format of the timestamp: one supported by DateTime::format
30
+ */
31
+ public function __construct($dateFormat = null)
32
+ {
33
+ $this->dateFormat = $dateFormat ?: static::SIMPLE_DATE;
34
+ if (!function_exists('json_encode')) {
35
+ throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
36
+ }
37
+ }
38
+
39
+ /**
40
+ * {@inheritdoc}
41
+ */
42
+ public function format(array $record)
43
+ {
44
+ return $this->normalize($record);
45
+ }
46
+
47
+ /**
48
+ * {@inheritdoc}
49
+ */
50
+ public function formatBatch(array $records)
51
+ {
52
+ foreach ($records as $key => $record) {
53
+ $records[$key] = $this->format($record);
54
+ }
55
+
56
+ return $records;
57
+ }
58
+
59
+ protected function normalize($data, $depth = 0)
60
+ {
61
+ if ($depth > 9) {
62
+ return 'Over 9 levels deep, aborting normalization';
63
+ }
64
+
65
+ if (null === $data || is_scalar($data)) {
66
+ if (is_float($data)) {
67
+ if (is_infinite($data)) {
68
+ return ($data > 0 ? '' : '-') . 'INF';
69
+ }
70
+ if (is_nan($data)) {
71
+ return 'NaN';
72
+ }
73
+ }
74
+
75
+ return $data;
76
+ }
77
+
78
+ if (is_array($data)) {
79
+ $normalized = array();
80
+
81
+ $count = 1;
82
+ foreach ($data as $key => $value) {
83
+ if ($count++ > 1000) {
84
+ $normalized['...'] = 'Over 1000 items ('.count($data).' total), aborting normalization';
85
+ break;
86
+ }
87
+
88
+ $normalized[$key] = $this->normalize($value, $depth+1);
89
+ }
90
+
91
+ return $normalized;
92
+ }
93
+
94
+ if ($data instanceof \DateTime) {
95
+ return $data->format($this->dateFormat);
96
+ }
97
+
98
+ if (is_object($data)) {
99
+ // TODO 2.0 only check for Throwable
100
+ if ($data instanceof Exception || (PHP_VERSION_ID > 70000 && $data instanceof \Throwable)) {
101
+ return $this->normalizeException($data);
102
+ }
103
+
104
+ // non-serializable objects that implement __toString stringified
105
+ if (method_exists($data, '__toString') && !$data instanceof \JsonSerializable) {
106
+ $value = $data->__toString();
107
+ } else {
108
+ // the rest is json-serialized in some way
109
+ $value = $this->toJson($data, true);
110
+ }
111
+
112
+ return sprintf("[object] (%s: %s)", Utils::getClass($data), $value);
113
+ }
114
+
115
+ if (is_resource($data)) {
116
+ return sprintf('[resource] (%s)', get_resource_type($data));
117
+ }
118
+
119
+ return '[unknown('.gettype($data).')]';
120
+ }
121
+
122
+ protected function normalizeException($e)
123
+ {
124
+ // TODO 2.0 only check for Throwable
125
+ if (!$e instanceof Exception && !$e instanceof \Throwable) {
126
+ throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
127
+ }
128
+
129
+ $data = array(
130
+ 'class' => Utils::getClass($e),
131
+ 'message' => $e->getMessage(),
132
+ 'code' => $e->getCode(),
133
+ 'file' => $e->getFile().':'.$e->getLine(),
134
+ );
135
+
136
+ if ($e instanceof \SoapFault) {
137
+ if (isset($e->faultcode)) {
138
+ $data['faultcode'] = $e->faultcode;
139
+ }
140
+
141
+ if (isset($e->faultactor)) {
142
+ $data['faultactor'] = $e->faultactor;
143
+ }
144
+
145
+ if (isset($e->detail)) {
146
+ $data['detail'] = $e->detail;
147
+ }
148
+ }
149
+
150
+ $trace = $e->getTrace();
151
+ foreach ($trace as $frame) {
152
+ if (isset($frame['file'])) {
153
+ $data['trace'][] = $frame['file'].':'.$frame['line'];
154
+ } elseif (isset($frame['function']) && $frame['function'] === '{closure}') {
155
+ // Simplify closures handling
156
+ $data['trace'][] = $frame['function'];
157
+ } else {
158
+ if (isset($frame['args'])) {
159
+ // Make sure that objects present as arguments are not serialized nicely but rather only
160
+ // as a class name to avoid any unexpected leak of sensitive information
161
+ $frame['args'] = array_map(function ($arg) {
162
+ if (is_object($arg) && !($arg instanceof \DateTime || $arg instanceof \DateTimeInterface)) {
163
+ return sprintf("[object] (%s)", Utils::getClass($arg));
164
+ }
165
+
166
+ return $arg;
167
+ }, $frame['args']);
168
+ }
169
+ // We should again normalize the frames, because it might contain invalid items
170
+ $data['trace'][] = $this->toJson($this->normalize($frame), true);
171
+ }
172
+ }
173
+
174
+ if ($previous = $e->getPrevious()) {
175
+ $data['previous'] = $this->normalizeException($previous);
176
+ }
177
+
178
+ return $data;
179
+ }
180
+
181
+ /**
182
+ * Return the JSON representation of a value
183
+ *
184
+ * @param mixed $data
185
+ * @param bool $ignoreErrors
186
+ * @throws \RuntimeException if encoding fails and errors are not ignored
187
+ * @return string
188
+ */
189
+ protected function toJson($data, $ignoreErrors = false)
190
+ {
191
+ // suppress json_encode errors since it's twitchy with some inputs
192
+ if ($ignoreErrors) {
193
+ return @$this->jsonEncode($data);
194
+ }
195
+
196
+ $json = $this->jsonEncode($data);
197
+
198
+ if ($json === false) {
199
+ $json = $this->handleJsonError(json_last_error(), $data);
200
+ }
201
+
202
+ return $json;
203
+ }
204
+
205
+ /**
206
+ * @param mixed $data
207
+ * @return string JSON encoded data or null on failure
208
+ */
209
+ private function jsonEncode($data)
210
+ {
211
+ if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
212
+ return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
213
+ }
214
+
215
+ return json_encode($data);
216
+ }
217
+
218
+ /**
219
+ * Handle a json_encode failure.
220
+ *
221
+ * If the failure is due to invalid string encoding, try to clean the
222
+ * input and encode again. If the second encoding attempt fails, the
223
+ * inital error is not encoding related or the input can't be cleaned then
224
+ * raise a descriptive exception.
225
+ *
226
+ * @param int $code return code of json_last_error function
227
+ * @param mixed $data data that was meant to be encoded
228
+ * @throws \RuntimeException if failure can't be corrected
229
+ * @return string JSON encoded data after error correction
230
+ */
231
+ private function handleJsonError($code, $data)
232
+ {
233
+ if ($code !== JSON_ERROR_UTF8) {
234
+ $this->throwEncodeError($code, $data);
235
+ }
236
+
237
+ if (is_string($data)) {
238
+ $this->detectAndCleanUtf8($data);
239
+ } elseif (is_array($data)) {
240
+ array_walk_recursive($data, array($this, 'detectAndCleanUtf8'));
241
+ } else {
242
+ $this->throwEncodeError($code, $data);
243
+ }
244
+
245
+ $json = $this->jsonEncode($data);
246
+
247
+ if ($json === false) {
248
+ $this->throwEncodeError(json_last_error(), $data);
249
+ }
250
+
251
+ return $json;
252
+ }
253
+
254
+ /**
255
+ * Throws an exception according to a given code with a customized message
256
+ *
257
+ * @param int $code return code of json_last_error function
258
+ * @param mixed $data data that was meant to be encoded
259
+ * @throws \RuntimeException
260
+ */
261
+ private function throwEncodeError($code, $data)
262
+ {
263
+ switch ($code) {
264
+ case JSON_ERROR_DEPTH:
265
+ $msg = 'Maximum stack depth exceeded';
266
+ break;
267
+ case JSON_ERROR_STATE_MISMATCH:
268
+ $msg = 'Underflow or the modes mismatch';
269
+ break;
270
+ case JSON_ERROR_CTRL_CHAR:
271
+ $msg = 'Unexpected control character found';
272
+ break;
273
+ case JSON_ERROR_UTF8:
274
+ $msg = 'Malformed UTF-8 characters, possibly incorrectly encoded';
275
+ break;
276
+ default:
277
+ $msg = 'Unknown error';
278
+ }
279
+
280
+ throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true));
281
+ }
282
+
283
+ /**
284
+ * Detect invalid UTF-8 string characters and convert to valid UTF-8.
285
+ *
286
+ * Valid UTF-8 input will be left unmodified, but strings containing
287
+ * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed
288
+ * original encoding of ISO-8859-15. This conversion may result in
289
+ * incorrect output if the actual encoding was not ISO-8859-15, but it
290
+ * will be clean UTF-8 output and will not rely on expensive and fragile
291
+ * detection algorithms.
292
+ *
293
+ * Function converts the input in place in the passed variable so that it
294
+ * can be used as a callback for array_walk_recursive.
295
+ *
296
+ * @param mixed &$data Input to check and convert if needed
297
+ * @private
298
+ */
299
+ public function detectAndCleanUtf8(&$data)
300
+ {
301
+ if (is_string($data) && !preg_match('//u', $data)) {
302
+ $data = preg_replace_callback(
303
+ '/[\x80-\xFF]+/',
304
+ function ($m) { return utf8_encode($m[0]); },
305
+ $data
306
+ );
307
+ $data = str_replace(
308
+ array('¤', '¦', '¨', '´', '¸', '¼', '½', '¾'),
309
+ array('€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'),
310
+ $data
311
+ );
312
+ }
313
+ }
314
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ /**
15
+ * Formats data into an associative array of scalar values.
16
+ * Objects and arrays will be JSON encoded.
17
+ *
18
+ * @author Andrew Lawson <adlawson@gmail.com>
19
+ */
20
+ class ScalarFormatter extends NormalizerFormatter
21
+ {
22
+ /**
23
+ * {@inheritdoc}
24
+ */
25
+ public function format(array $record)
26
+ {
27
+ foreach ($record as $key => $value) {
28
+ $record[$key] = $this->normalizeValue($value);
29
+ }
30
+
31
+ return $record;
32
+ }
33
+
34
+ /**
35
+ * @param mixed $value
36
+ * @return mixed
37
+ */
38
+ protected function normalizeValue($value)
39
+ {
40
+ $normalized = $this->normalize($value);
41
+
42
+ if (is_array($normalized) || is_object($normalized)) {
43
+ return $this->toJson($normalized, true);
44
+ }
45
+
46
+ return $normalized;
47
+ }
48
+ }
common/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Formatter;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Serializes a log message according to Wildfire's header requirements
18
+ *
19
+ * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>
20
+ * @author Christophe Coevoet <stof@notk.org>
21
+ * @author Kirill chEbba Chebunin <iam@chebba.org>
22
+ */
23
+ class WildfireFormatter extends NormalizerFormatter
24
+ {
25
+ const TABLE = 'table';
26
+
27
+ /**
28
+ * Translates Monolog log levels to Wildfire levels.
29
+ */
30
+ private $logLevels = array(
31
+ Logger::DEBUG => 'LOG',
32
+ Logger::INFO => 'INFO',
33
+ Logger::NOTICE => 'INFO',
34
+ Logger::WARNING => 'WARN',
35
+ Logger::ERROR => 'ERROR',
36
+ Logger::CRITICAL => 'ERROR',
37
+ Logger::ALERT => 'ERROR',
38
+ Logger::EMERGENCY => 'ERROR',
39
+ );
40
+
41
+ /**
42
+ * {@inheritdoc}
43
+ */
44
+ public function format(array $record)
45
+ {
46
+ // Retrieve the line and file if set and remove them from the formatted extra
47
+ $file = $line = '';
48
+ if (isset($record['extra']['file'])) {
49
+ $file = $record['extra']['file'];
50
+ unset($record['extra']['file']);
51
+ }
52
+ if (isset($record['extra']['line'])) {
53
+ $line = $record['extra']['line'];
54
+ unset($record['extra']['line']);
55
+ }
56
+
57
+ $record = $this->normalize($record);
58
+ $message = array('message' => $record['message']);
59
+ $handleError = false;
60
+ if ($record['context']) {
61
+ $message['context'] = $record['context'];
62
+ $handleError = true;
63
+ }
64
+ if ($record['extra']) {
65
+ $message['extra'] = $record['extra'];
66
+ $handleError = true;
67
+ }
68
+ if (count($message) === 1) {
69
+ $message = reset($message);
70
+ }
71
+
72
+ if (isset($record['context'][self::TABLE])) {
73
+ $type = 'TABLE';
74
+ $label = $record['channel'] .': '. $record['message'];
75
+ $message = $record['context'][self::TABLE];
76
+ } else {
77
+ $type = $this->logLevels[$record['level']];
78
+ $label = $record['channel'];
79
+ }
80
+
81
+ // Create JSON object describing the appearance of the message in the console
82
+ $json = $this->toJson(array(
83
+ array(
84
+ 'Type' => $type,
85
+ 'File' => $file,
86
+ 'Line' => $line,
87
+ 'Label' => $label,
88
+ ),
89
+ $message,
90
+ ), $handleError);
91
+
92
+ // The message itself is a serialization of the above JSON object + it's length
93
+ return sprintf(
94
+ '%s|%s|',
95
+ strlen($json),
96
+ $json
97
+ );
98
+ }
99
+
100
+ public function formatBatch(array $records)
101
+ {
102
+ throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter');
103
+ }
104
+
105
+ protected function normalize($data, $depth = 0)
106
+ {
107
+ if (is_object($data) && !$data instanceof \DateTime) {
108
+ return $data;
109
+ }
110
+
111
+ return parent::normalize($data, $depth);
112
+ }
113
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+ use Monolog\Formatter\LineFormatter;
16
+ use Monolog\Logger;
17
+ use Monolog\ResettableInterface;
18
+
19
+ /**
20
+ * Base Handler class providing the Handler structure
21
+ *
22
+ * @author Jordi Boggiano <j.boggiano@seld.be>
23
+ */
24
+ abstract class AbstractHandler implements HandlerInterface, ResettableInterface
25
+ {
26
+ protected $level = Logger::DEBUG;
27
+ protected $bubble = true;
28
+
29
+ /**
30
+ * @var FormatterInterface
31
+ */
32
+ protected $formatter;
33
+ protected $processors = array();
34
+
35
+ /**
36
+ * @param int $level The minimum logging level at which this handler will be triggered
37
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
38
+ */
39
+ public function __construct($level = Logger::DEBUG, $bubble = true)
40
+ {
41
+ $this->setLevel($level);
42
+ $this->bubble = $bubble;
43
+ }
44
+
45
+ /**
46
+ * {@inheritdoc}
47
+ */
48
+ public function isHandling(array $record)
49
+ {
50
+ return $record['level'] >= $this->level;
51
+ }
52
+
53
+ /**
54
+ * {@inheritdoc}
55
+ */
56
+ public function handleBatch(array $records)
57
+ {
58
+ foreach ($records as $record) {
59
+ $this->handle($record);
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Closes the handler.
65
+ *
66
+ * This will be called automatically when the object is destroyed
67
+ */
68
+ public function close()
69
+ {
70
+ }
71
+
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ public function pushProcessor($callback)
76
+ {
77
+ if (!is_callable($callback)) {
78
+ throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given');
79
+ }
80
+ array_unshift($this->processors, $callback);
81
+
82
+ return $this;
83
+ }
84
+
85
+ /**
86
+ * {@inheritdoc}
87
+ */
88
+ public function popProcessor()
89
+ {
90
+ if (!$this->processors) {
91
+ throw new \LogicException('You tried to pop from an empty processor stack.');
92
+ }
93
+
94
+ return array_shift($this->processors);
95
+ }
96
+
97
+ /**
98
+ * {@inheritdoc}
99
+ */
100
+ public function setFormatter(FormatterInterface $formatter)
101
+ {
102
+ $this->formatter = $formatter;
103
+
104
+ return $this;
105
+ }
106
+
107
+ /**
108
+ * {@inheritdoc}
109
+ */
110
+ public function getFormatter()
111
+ {
112
+ if (!$this->formatter) {
113
+ $this->formatter = $this->getDefaultFormatter();
114
+ }
115
+
116
+ return $this->formatter;
117
+ }
118
+
119
+ /**
120
+ * Sets minimum logging level at which this handler will be triggered.
121
+ *
122
+ * @param int|string $level Level or level name
123
+ * @return self
124
+ */
125
+ public function setLevel($level)
126
+ {
127
+ $this->level = Logger::toMonologLevel($level);
128
+
129
+ return $this;
130
+ }
131
+
132
+ /**
133
+ * Gets minimum logging level at which this handler will be triggered.
134
+ *
135
+ * @return int
136
+ */
137
+ public function getLevel()
138
+ {
139
+ return $this->level;
140
+ }
141
+
142
+ /**
143
+ * Sets the bubbling behavior.
144
+ *
145
+ * @param bool $bubble true means that this handler allows bubbling.
146
+ * false means that bubbling is not permitted.
147
+ * @return self
148
+ */
149
+ public function setBubble($bubble)
150
+ {
151
+ $this->bubble = $bubble;
152
+
153
+ return $this;
154
+ }
155
+
156
+ /**
157
+ * Gets the bubbling behavior.
158
+ *
159
+ * @return bool true means that this handler allows bubbling.
160
+ * false means that bubbling is not permitted.
161
+ */
162
+ public function getBubble()
163
+ {
164
+ return $this->bubble;
165
+ }
166
+
167
+ public function __destruct()
168
+ {
169
+ try {
170
+ $this->close();
171
+ } catch (\Exception $e) {
172
+ // do nothing
173
+ } catch (\Throwable $e) {
174
+ // do nothing
175
+ }
176
+ }
177
+
178
+ public function reset()
179
+ {
180
+ foreach ($this->processors as $processor) {
181
+ if ($processor instanceof ResettableInterface) {
182
+ $processor->reset();
183
+ }
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Gets the default formatter.
189
+ *
190
+ * @return FormatterInterface
191
+ */
192
+ protected function getDefaultFormatter()
193
+ {
194
+ return new LineFormatter();
195
+ }
196
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\ResettableInterface;
15
+
16
+ /**
17
+ * Base Handler class providing the Handler structure
18
+ *
19
+ * Classes extending it should (in most cases) only implement write($record)
20
+ *
21
+ * @author Jordi Boggiano <j.boggiano@seld.be>
22
+ * @author Christophe Coevoet <stof@notk.org>
23
+ */
24
+ abstract class AbstractProcessingHandler extends AbstractHandler
25
+ {
26
+ /**
27
+ * {@inheritdoc}
28
+ */
29
+ public function handle(array $record)
30
+ {
31
+ if (!$this->isHandling($record)) {
32
+ return false;
33
+ }
34
+
35
+ $record = $this->processRecord($record);
36
+
37
+ $record['formatted'] = $this->getFormatter()->format($record);
38
+
39
+ $this->write($record);
40
+
41
+ return false === $this->bubble;
42
+ }
43
+
44
+ /**
45
+ * Writes the record down to the log of the implementing handler
46
+ *
47
+ * @param array $record
48
+ * @return void
49
+ */
50
+ abstract protected function write(array $record);
51
+
52
+ /**
53
+ * Processes a record.
54
+ *
55
+ * @param array $record
56
+ * @return array
57
+ */
58
+ protected function processRecord(array $record)
59
+ {
60
+ if ($this->processors) {
61
+ foreach ($this->processors as $processor) {
62
+ $record = call_user_func($processor, $record);
63
+ }
64
+ }
65
+
66
+ return $record;
67
+ }
68
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\LineFormatter;
16
+
17
+ /**
18
+ * Common syslog functionality
19
+ */
20
+ abstract class AbstractSyslogHandler extends AbstractProcessingHandler
21
+ {
22
+ protected $facility;
23
+
24
+ /**
25
+ * Translates Monolog log levels to syslog log priorities.
26
+ */
27
+ protected $logLevels = array(
28
+ Logger::DEBUG => LOG_DEBUG,
29
+ Logger::INFO => LOG_INFO,
30
+ Logger::NOTICE => LOG_NOTICE,
31
+ Logger::WARNING => LOG_WARNING,
32
+ Logger::ERROR => LOG_ERR,
33
+ Logger::CRITICAL => LOG_CRIT,
34
+ Logger::ALERT => LOG_ALERT,
35
+ Logger::EMERGENCY => LOG_EMERG,
36
+ );
37
+
38
+ /**
39
+ * List of valid log facility names.
40
+ */
41
+ protected $facilities = array(
42
+ 'auth' => LOG_AUTH,
43
+ 'authpriv' => LOG_AUTHPRIV,
44
+ 'cron' => LOG_CRON,
45
+ 'daemon' => LOG_DAEMON,
46
+ 'kern' => LOG_KERN,
47
+ 'lpr' => LOG_LPR,
48
+ 'mail' => LOG_MAIL,
49
+ 'news' => LOG_NEWS,
50
+ 'syslog' => LOG_SYSLOG,
51
+ 'user' => LOG_USER,
52
+ 'uucp' => LOG_UUCP,
53
+ );
54
+
55
+ /**
56
+ * @param mixed $facility
57
+ * @param int $level The minimum logging level at which this handler will be triggered
58
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
59
+ */
60
+ public function __construct($facility = LOG_USER, $level = Logger::DEBUG, $bubble = true)
61
+ {
62
+ parent::__construct($level, $bubble);
63
+
64
+ if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
65
+ $this->facilities['local0'] = LOG_LOCAL0;
66
+ $this->facilities['local1'] = LOG_LOCAL1;
67
+ $this->facilities['local2'] = LOG_LOCAL2;
68
+ $this->facilities['local3'] = LOG_LOCAL3;
69
+ $this->facilities['local4'] = LOG_LOCAL4;
70
+ $this->facilities['local5'] = LOG_LOCAL5;
71
+ $this->facilities['local6'] = LOG_LOCAL6;
72
+ $this->facilities['local7'] = LOG_LOCAL7;
73
+ } else {
74
+ $this->facilities['local0'] = 128; // LOG_LOCAL0
75
+ $this->facilities['local1'] = 136; // LOG_LOCAL1
76
+ $this->facilities['local2'] = 144; // LOG_LOCAL2
77
+ $this->facilities['local3'] = 152; // LOG_LOCAL3
78
+ $this->facilities['local4'] = 160; // LOG_LOCAL4
79
+ $this->facilities['local5'] = 168; // LOG_LOCAL5
80
+ $this->facilities['local6'] = 176; // LOG_LOCAL6
81
+ $this->facilities['local7'] = 184; // LOG_LOCAL7
82
+ }
83
+
84
+ // convert textual description of facility to syslog constant
85
+ if (array_key_exists(strtolower($facility), $this->facilities)) {
86
+ $facility = $this->facilities[strtolower($facility)];
87
+ } elseif (!in_array($facility, array_values($this->facilities), true)) {
88
+ throw new \UnexpectedValueException('Unknown facility value "'.$facility.'" given');
89
+ }
90
+
91
+ $this->facility = $facility;
92
+ }
93
+
94
+ /**
95
+ * {@inheritdoc}
96
+ */
97
+ protected function getDefaultFormatter()
98
+ {
99
+ return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%');
100
+ }
101
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\JsonFormatter;
16
+ use PhpAmqpLib\Message\AMQPMessage;
17
+ use PhpAmqpLib\Channel\AMQPChannel;
18
+ use AMQPExchange;
19
+
20
+ class AmqpHandler extends AbstractProcessingHandler
21
+ {
22
+ /**
23
+ * @var AMQPExchange|AMQPChannel $exchange
24
+ */
25
+ protected $exchange;
26
+
27
+ /**
28
+ * @var string
29
+ */
30
+ protected $exchangeName;
31
+
32
+ /**
33
+ * @param AMQPExchange|AMQPChannel $exchange AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use
34
+ * @param string $exchangeName
35
+ * @param int $level
36
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
37
+ */
38
+ public function __construct($exchange, $exchangeName = 'log', $level = Logger::DEBUG, $bubble = true)
39
+ {
40
+ if ($exchange instanceof AMQPExchange) {
41
+ $exchange->setName($exchangeName);
42
+ } elseif ($exchange instanceof AMQPChannel) {
43
+ $this->exchangeName = $exchangeName;
44
+ } else {
45
+ throw new \InvalidArgumentException('PhpAmqpLib\Channel\AMQPChannel or AMQPExchange instance required');
46
+ }
47
+ $this->exchange = $exchange;
48
+
49
+ parent::__construct($level, $bubble);
50
+ }
51
+
52
+ /**
53
+ * {@inheritDoc}
54
+ */
55
+ protected function write(array $record)
56
+ {
57
+ $data = $record["formatted"];
58
+ $routingKey = $this->getRoutingKey($record);
59
+
60
+ if ($this->exchange instanceof AMQPExchange) {
61
+ $this->exchange->publish(
62
+ $data,
63
+ $routingKey,
64
+ 0,
65
+ array(
66
+ 'delivery_mode' => 2,
67
+ 'content_type' => 'application/json',
68
+ )
69
+ );
70
+ } else {
71
+ $this->exchange->basic_publish(
72
+ $this->createAmqpMessage($data),
73
+ $this->exchangeName,
74
+ $routingKey
75
+ );
76
+ }
77
+ }
78
+
79
+ /**
80
+ * {@inheritDoc}
81
+ */
82
+ public function handleBatch(array $records)
83
+ {
84
+ if ($this->exchange instanceof AMQPExchange) {
85
+ parent::handleBatch($records);
86
+
87
+ return;
88
+ }
89
+
90
+ foreach ($records as $record) {
91
+ if (!$this->isHandling($record)) {
92
+ continue;
93
+ }
94
+
95
+ $record = $this->processRecord($record);
96
+ $data = $this->getFormatter()->format($record);
97
+
98
+ $this->exchange->batch_basic_publish(
99
+ $this->createAmqpMessage($data),
100
+ $this->exchangeName,
101
+ $this->getRoutingKey($record)
102
+ );
103
+ }
104
+
105
+ $this->exchange->publish_batch();
106
+ }
107
+
108
+ /**
109
+ * Gets the routing key for the AMQP exchange
110
+ *
111
+ * @param array $record
112
+ * @return string
113
+ */
114
+ protected function getRoutingKey(array $record)
115
+ {
116
+ $routingKey = sprintf(
117
+ '%s.%s',
118
+ // TODO 2.0 remove substr call
119
+ substr($record['level_name'], 0, 4),
120
+ $record['channel']
121
+ );
122
+
123
+ return strtolower($routingKey);
124
+ }
125
+
126
+ /**
127
+ * @param string $data
128
+ * @return AMQPMessage
129
+ */
130
+ private function createAmqpMessage($data)
131
+ {
132
+ return new AMQPMessage(
133
+ (string) $data,
134
+ array(
135
+ 'delivery_mode' => 2,
136
+ 'content_type' => 'application/json',
137
+ )
138
+ );
139
+ }
140
+
141
+ /**
142
+ * {@inheritDoc}
143
+ */
144
+ protected function getDefaultFormatter()
145
+ {
146
+ return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);
147
+ }
148
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+
16
+ /**
17
+ * Handler sending logs to browser's javascript console with no browser extension required
18
+ *
19
+ * @author Olivier Poitrey <rs@dailymotion.com>
20
+ */
21
+ class BrowserConsoleHandler extends AbstractProcessingHandler
22
+ {
23
+ protected static $initialized = false;
24
+ protected static $records = array();
25
+
26
+ /**
27
+ * {@inheritDoc}
28
+ *
29
+ * Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format.
30
+ *
31
+ * Example of formatted string:
32
+ *
33
+ * You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white}
34
+ */
35
+ protected function getDefaultFormatter()
36
+ {
37
+ return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%');
38
+ }
39
+
40
+ /**
41
+ * {@inheritDoc}
42
+ */
43
+ protected function write(array $record)
44
+ {
45
+ // Accumulate records
46
+ static::$records[] = $record;
47
+
48
+ // Register shutdown handler if not already done
49
+ if (!static::$initialized) {
50
+ static::$initialized = true;
51
+ $this->registerShutdownFunction();
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Convert records to javascript console commands and send it to the browser.
57
+ * This method is automatically called on PHP shutdown if output is HTML or Javascript.
58
+ */
59
+ public static function send()
60
+ {
61
+ $format = static::getResponseFormat();
62
+ if ($format === 'unknown') {
63
+ return;
64
+ }
65
+
66
+ if (count(static::$records)) {
67
+ if ($format === 'html') {
68
+ static::writeOutput('<script>' . static::generateScript() . '</script>');
69
+ } elseif ($format === 'js') {
70
+ static::writeOutput(static::generateScript());
71
+ }
72
+ static::resetStatic();
73
+ }
74
+ }
75
+
76
+ public function close()
77
+ {
78
+ self::resetStatic();
79
+ }
80
+
81
+ public function reset()
82
+ {
83
+ self::resetStatic();
84
+ }
85
+
86
+ /**
87
+ * Forget all logged records
88
+ */
89
+ public static function resetStatic()
90
+ {
91
+ static::$records = array();
92
+ }
93
+
94
+ /**
95
+ * Wrapper for register_shutdown_function to allow overriding
96
+ */
97
+ protected function registerShutdownFunction()
98
+ {
99
+ if (PHP_SAPI !== 'cli') {
100
+ register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Wrapper for echo to allow overriding
106
+ *
107
+ * @param string $str
108
+ */
109
+ protected static function writeOutput($str)
110
+ {
111
+ echo $str;
112
+ }
113
+
114
+ /**
115
+ * Checks the format of the response
116
+ *
117
+ * If Content-Type is set to application/javascript or text/javascript -> js
118
+ * If Content-Type is set to text/html, or is unset -> html
119
+ * If Content-Type is anything else -> unknown
120
+ *
121
+ * @return string One of 'js', 'html' or 'unknown'
122
+ */
123
+ protected static function getResponseFormat()
124
+ {
125
+ // Check content type
126
+ foreach (headers_list() as $header) {
127
+ if (stripos($header, 'content-type:') === 0) {
128
+ // This handler only works with HTML and javascript outputs
129
+ // text/javascript is obsolete in favour of application/javascript, but still used
130
+ if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) {
131
+ return 'js';
132
+ }
133
+ if (stripos($header, 'text/html') === false) {
134
+ return 'unknown';
135
+ }
136
+ break;
137
+ }
138
+ }
139
+
140
+ return 'html';
141
+ }
142
+
143
+ private static function generateScript()
144
+ {
145
+ $script = array();
146
+ foreach (static::$records as $record) {
147
+ $context = static::dump('Context', $record['context']);
148
+ $extra = static::dump('Extra', $record['extra']);
149
+
150
+ if (empty($context) && empty($extra)) {
151
+ $script[] = static::call_array('log', static::handleStyles($record['formatted']));
152
+ } else {
153
+ $script = array_merge($script,
154
+ array(static::call_array('groupCollapsed', static::handleStyles($record['formatted']))),
155
+ $context,
156
+ $extra,
157
+ array(static::call('groupEnd'))
158
+ );
159
+ }
160
+ }
161
+
162
+ return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);";
163
+ }
164
+
165
+ private static function handleStyles($formatted)
166
+ {
167
+ $args = array(static::quote('font-weight: normal'));
168
+ $format = '%c' . $formatted;
169
+ preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
170
+
171
+ foreach (array_reverse($matches) as $match) {
172
+ $args[] = static::quote(static::handleCustomStyles($match[2][0], $match[1][0]));
173
+ $args[] = '"font-weight: normal"';
174
+
175
+ $pos = $match[0][1];
176
+ $format = substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . substr($format, $pos + strlen($match[0][0]));
177
+ }
178
+
179
+ array_unshift($args, static::quote($format));
180
+
181
+ return $args;
182
+ }
183
+
184
+ private static function handleCustomStyles($style, $string)
185
+ {
186
+ static $colors = array('blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey');
187
+ static $labels = array();
188
+
189
+ return preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function ($m) use ($string, &$colors, &$labels) {
190
+ if (trim($m[1]) === 'autolabel') {
191
+ // Format the string as a label with consistent auto assigned background color
192
+ if (!isset($labels[$string])) {
193
+ $labels[$string] = $colors[count($labels) % count($colors)];
194
+ }
195
+ $color = $labels[$string];
196
+
197
+ return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px";
198
+ }
199
+
200
+ return $m[1];
201
+ }, $style);
202
+ }
203
+
204
+ private static function dump($title, array $dict)
205
+ {
206
+ $script = array();
207
+ $dict = array_filter($dict);
208
+ if (empty($dict)) {
209
+ return $script;
210
+ }
211
+ $script[] = static::call('log', static::quote('%c%s'), static::quote('font-weight: bold'), static::quote($title));
212
+ foreach ($dict as $key => $value) {
213
+ $value = json_encode($value);
214
+ if (empty($value)) {
215
+ $value = static::quote('');
216
+ }
217
+ $script[] = static::call('log', static::quote('%s: %o'), static::quote($key), $value);
218
+ }
219
+
220
+ return $script;
221
+ }
222
+
223
+ private static function quote($arg)
224
+ {
225
+ return '"' . addcslashes($arg, "\"\n\\") . '"';
226
+ }
227
+
228
+ private static function call()
229
+ {
230
+ $args = func_get_args();
231
+ $method = array_shift($args);
232
+
233
+ return static::call_array($method, $args);
234
+ }
235
+
236
+ private static function call_array($method, array $args)
237
+ {
238
+ return 'c.' . $method . '(' . implode(', ', $args) . ');';
239
+ }
240
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\ResettableInterface;
16
+
17
+ /**
18
+ * Buffers all records until closing the handler and then pass them as batch.
19
+ *
20
+ * This is useful for a MailHandler to send only one mail per request instead of
21
+ * sending one per log message.
22
+ *
23
+ * @author Christophe Coevoet <stof@notk.org>
24
+ */
25
+ class BufferHandler extends AbstractHandler
26
+ {
27
+ protected $handler;
28
+ protected $bufferSize = 0;
29
+ protected $bufferLimit;
30
+ protected $flushOnOverflow;
31
+ protected $buffer = array();
32
+ protected $initialized = false;
33
+
34
+ /**
35
+ * @param HandlerInterface $handler Handler.
36
+ * @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
37
+ * @param int $level The minimum logging level at which this handler will be triggered
38
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
39
+ * @param bool $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded
40
+ */
41
+ public function __construct(HandlerInterface $handler, $bufferLimit = 0, $level = Logger::DEBUG, $bubble = true, $flushOnOverflow = false)
42
+ {
43
+ parent::__construct($level, $bubble);
44
+ $this->handler = $handler;
45
+ $this->bufferLimit = (int) $bufferLimit;
46
+ $this->flushOnOverflow = $flushOnOverflow;
47
+ }
48
+
49
+ /**
50
+ * {@inheritdoc}
51
+ */
52
+ public function handle(array $record)
53
+ {
54
+ if ($record['level'] < $this->level) {
55
+ return false;
56
+ }
57
+
58
+ if (!$this->initialized) {
59
+ // __destructor() doesn't get called on Fatal errors
60
+ register_shutdown_function(array($this, 'close'));
61
+ $this->initialized = true;
62
+ }
63
+
64
+ if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) {
65
+ if ($this->flushOnOverflow) {
66
+ $this->flush();
67
+ } else {
68
+ array_shift($this->buffer);
69
+ $this->bufferSize--;
70
+ }
71
+ }
72
+
73
+ if ($this->processors) {
74
+ foreach ($this->processors as $processor) {
75
+ $record = call_user_func($processor, $record);
76
+ }
77
+ }
78
+
79
+ $this->buffer[] = $record;
80
+ $this->bufferSize++;
81
+
82
+ return false === $this->bubble;
83
+ }
84
+
85
+ public function flush()
86
+ {
87
+ if ($this->bufferSize === 0) {
88
+ return;
89
+ }
90
+
91
+ $this->handler->handleBatch($this->buffer);
92
+ $this->clear();
93
+ }
94
+
95
+ public function __destruct()
96
+ {
97
+ // suppress the parent behavior since we already have register_shutdown_function()
98
+ // to call close(), and the reference contained there will prevent this from being
99
+ // GC'd until the end of the request
100
+ }
101
+
102
+ /**
103
+ * {@inheritdoc}
104
+ */
105
+ public function close()
106
+ {
107
+ $this->flush();
108
+ }
109
+
110
+ /**
111
+ * Clears the buffer without flushing any messages down to the wrapped handler.
112
+ */
113
+ public function clear()
114
+ {
115
+ $this->bufferSize = 0;
116
+ $this->buffer = array();
117
+ }
118
+
119
+ public function reset()
120
+ {
121
+ $this->flush();
122
+
123
+ parent::reset();
124
+
125
+ if ($this->handler instanceof ResettableInterface) {
126
+ $this->handler->reset();
127
+ }
128
+ }
129
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\ChromePHPFormatter;
15
+ use Monolog\Logger;
16
+
17
+ /**
18
+ * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)
19
+ *
20
+ * This also works out of the box with Firefox 43+
21
+ *
22
+ * @author Christophe Coevoet <stof@notk.org>
23
+ */
24
+ class ChromePHPHandler extends AbstractProcessingHandler
25
+ {
26
+ /**
27
+ * Version of the extension
28
+ */
29
+ const VERSION = '4.0';
30
+
31
+ /**
32
+ * Header name
33
+ */
34
+ const HEADER_NAME = 'X-ChromeLogger-Data';
35
+
36
+ /**
37
+ * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+)
38
+ */
39
+ const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}';
40
+
41
+ protected static $initialized = false;
42
+
43
+ /**
44
+ * Tracks whether we sent too much data
45
+ *
46
+ * Chrome limits the headers to 256KB, so when we sent 240KB we stop sending
47
+ *
48
+ * @var bool
49
+ */
50
+ protected static $overflowed = false;
51
+
52
+ protected static $json = array(
53
+ 'version' => self::VERSION,
54
+ 'columns' => array('label', 'log', 'backtrace', 'type'),
55
+ 'rows' => array(),
56
+ );
57
+
58
+ protected static $sendHeaders = true;
59
+
60
+ /**
61
+ * @param int $level The minimum logging level at which this handler will be triggered
62
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
63
+ */
64
+ public function __construct($level = Logger::DEBUG, $bubble = true)
65
+ {
66
+ parent::__construct($level, $bubble);
67
+ if (!function_exists('json_encode')) {
68
+ throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler');
69
+ }
70
+ }
71
+
72
+ /**
73
+ * {@inheritdoc}
74
+ */
75
+ public function handleBatch(array $records)
76
+ {
77
+ $messages = array();
78
+
79
+ foreach ($records as $record) {
80
+ if ($record['level'] < $this->level) {
81
+ continue;
82
+ }
83
+ $messages[] = $this->processRecord($record);
84
+ }
85
+
86
+ if (!empty($messages)) {
87
+ $messages = $this->getFormatter()->formatBatch($messages);
88
+ self::$json['rows'] = array_merge(self::$json['rows'], $messages);
89
+ $this->send();
90
+ }
91
+ }
92
+
93
+ /**
94
+ * {@inheritDoc}
95
+ */
96
+ protected function getDefaultFormatter()
97
+ {
98
+ return new ChromePHPFormatter();
99
+ }
100
+
101
+ /**
102
+ * Creates & sends header for a record
103
+ *
104
+ * @see sendHeader()
105
+ * @see send()
106
+ * @param array $record
107
+ */
108
+ protected function write(array $record)
109
+ {
110
+ self::$json['rows'][] = $record['formatted'];
111
+
112
+ $this->send();
113
+ }
114
+
115
+ /**
116
+ * Sends the log header
117
+ *
118
+ * @see sendHeader()
119
+ */
120
+ protected function send()
121
+ {
122
+ if (self::$overflowed || !self::$sendHeaders) {
123
+ return;
124
+ }
125
+
126
+ if (!self::$initialized) {
127
+ self::$initialized = true;
128
+
129
+ self::$sendHeaders = $this->headersAccepted();
130
+ if (!self::$sendHeaders) {
131
+ return;
132
+ }
133
+
134
+ self::$json['request_uri'] = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
135
+ }
136
+
137
+ $json = @json_encode(self::$json);
138
+ $data = base64_encode(utf8_encode($json));
139
+ if (strlen($data) > 240 * 1024) {
140
+ self::$overflowed = true;
141
+
142
+ $record = array(
143
+ 'message' => 'Incomplete logs, chrome header size limit reached',
144
+ 'context' => array(),
145
+ 'level' => Logger::WARNING,
146
+ 'level_name' => Logger::getLevelName(Logger::WARNING),
147
+ 'channel' => 'monolog',
148
+ 'datetime' => new \DateTime(),
149
+ 'extra' => array(),
150
+ );
151
+ self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);
152
+ $json = @json_encode(self::$json);
153
+ $data = base64_encode(utf8_encode($json));
154
+ }
155
+
156
+ if (trim($data) !== '') {
157
+ $this->sendHeader(self::HEADER_NAME, $data);
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Send header string to the client
163
+ *
164
+ * @param string $header
165
+ * @param string $content
166
+ */
167
+ protected function sendHeader($header, $content)
168
+ {
169
+ if (!headers_sent() && self::$sendHeaders) {
170
+ header(sprintf('%s: %s', $header, $content));
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Verifies if the headers are accepted by the current user agent
176
+ *
177
+ * @return bool
178
+ */
179
+ protected function headersAccepted()
180
+ {
181
+ if (empty($_SERVER['HTTP_USER_AGENT'])) {
182
+ return false;
183
+ }
184
+
185
+ return preg_match(self::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']);
186
+ }
187
+
188
+ /**
189
+ * BC getter for the sendHeaders property that has been made static
190
+ */
191
+ public function __get($property)
192
+ {
193
+ if ('sendHeaders' !== $property) {
194
+ throw new \InvalidArgumentException('Undefined property '.$property);
195
+ }
196
+
197
+ return static::$sendHeaders;
198
+ }
199
+
200
+ /**
201
+ * BC setter for the sendHeaders property that has been made static
202
+ */
203
+ public function __set($property, $value)
204
+ {
205
+ if ('sendHeaders' !== $property) {
206
+ throw new \InvalidArgumentException('Undefined property '.$property);
207
+ }
208
+
209
+ static::$sendHeaders = $value;
210
+ }
211
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\JsonFormatter;
15
+ use Monolog\Logger;
16
+
17
+ /**
18
+ * CouchDB handler
19
+ *
20
+ * @author Markus Bachmann <markus.bachmann@bachi.biz>
21
+ */
22
+ class CouchDBHandler extends AbstractProcessingHandler
23
+ {
24
+ private $options;
25
+
26
+ public function __construct(array $options = array(), $level = Logger::DEBUG, $bubble = true)
27
+ {
28
+ $this->options = array_merge(array(
29
+ 'host' => 'localhost',
30
+ 'port' => 5984,
31
+ 'dbname' => 'logger',
32
+ 'username' => null,
33
+ 'password' => null,
34
+ ), $options);
35
+
36
+ parent::__construct($level, $bubble);
37
+ }
38
+
39
+ /**
40
+ * {@inheritDoc}
41
+ */
42
+ protected function write(array $record)
43
+ {
44
+ $basicAuth = null;
45
+ if ($this->options['username']) {
46
+ $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']);
47
+ }
48
+
49
+ $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname'];
50
+ $context = stream_context_create(array(
51
+ 'http' => array(
52
+ 'method' => 'POST',
53
+ 'content' => $record['formatted'],
54
+ 'ignore_errors' => true,
55
+ 'max_redirects' => 0,
56
+ 'header' => 'Content-type: application/json',
57
+ ),
58
+ ));
59
+
60
+ if (false === @file_get_contents($url, null, $context)) {
61
+ throw new \RuntimeException(sprintf('Could not connect to %s', $url));
62
+ }
63
+ }
64
+
65
+ /**
66
+ * {@inheritDoc}
67
+ */
68
+ protected function getDefaultFormatter()
69
+ {
70
+ return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);
71
+ }
72
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Logs to Cube.
18
+ *
19
+ * @link http://square.github.com/cube/
20
+ * @author Wan Chen <kami@kamisama.me>
21
+ */
22
+ class CubeHandler extends AbstractProcessingHandler
23
+ {
24
+ private $udpConnection;
25
+ private $httpConnection;
26
+ private $scheme;
27
+ private $host;
28
+ private $port;
29
+ private $acceptedSchemes = array('http', 'udp');
30
+
31
+ /**
32
+ * Create a Cube handler
33
+ *
34
+ * @throws \UnexpectedValueException when given url is not a valid url.
35
+ * A valid url must consist of three parts : protocol://host:port
36
+ * Only valid protocols used by Cube are http and udp
37
+ */
38
+ public function __construct($url, $level = Logger::DEBUG, $bubble = true)
39
+ {
40
+ $urlInfo = parse_url($url);
41
+
42
+ if (!isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) {
43
+ throw new \UnexpectedValueException('URL "'.$url.'" is not valid');
44
+ }
45
+
46
+ if (!in_array($urlInfo['scheme'], $this->acceptedSchemes)) {
47
+ throw new \UnexpectedValueException(
48
+ 'Invalid protocol (' . $urlInfo['scheme'] . ').'
49
+ . ' Valid options are ' . implode(', ', $this->acceptedSchemes));
50
+ }
51
+
52
+ $this->scheme = $urlInfo['scheme'];
53
+ $this->host = $urlInfo['host'];
54
+ $this->port = $urlInfo['port'];
55
+
56
+ parent::__construct($level, $bubble);
57
+ }
58
+
59
+ /**
60
+ * Establish a connection to an UDP socket
61
+ *
62
+ * @throws \LogicException when unable to connect to the socket
63
+ * @throws MissingExtensionException when there is no socket extension
64
+ */
65
+ protected function connectUdp()
66
+ {
67
+ if (!extension_loaded('sockets')) {
68
+ throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler');
69
+ }
70
+
71
+ $this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0);
72
+ if (!$this->udpConnection) {
73
+ throw new \LogicException('Unable to create a socket');
74
+ }
75
+
76
+ if (!socket_connect($this->udpConnection, $this->host, $this->port)) {
77
+ throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port);
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Establish a connection to a http server
83
+ * @throws \LogicException when no curl extension
84
+ */
85
+ protected function connectHttp()
86
+ {
87
+ if (!extension_loaded('curl')) {
88
+ throw new \LogicException('The curl extension is needed to use http URLs with the CubeHandler');
89
+ }
90
+
91
+ $this->httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put');
92
+
93
+ if (!$this->httpConnection) {
94
+ throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port);
95
+ }
96
+
97
+ curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST");
98
+ curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true);
99
+ }
100
+
101
+ /**
102
+ * {@inheritdoc}
103
+ */
104
+ protected function write(array $record)
105
+ {
106
+ $date = $record['datetime'];
107
+
108
+ $data = array('time' => $date->format('Y-m-d\TH:i:s.uO'));
109
+ unset($record['datetime']);
110
+
111
+ if (isset($record['context']['type'])) {
112
+ $data['type'] = $record['context']['type'];
113
+ unset($record['context']['type']);
114
+ } else {
115
+ $data['type'] = $record['channel'];
116
+ }
117
+
118
+ $data['data'] = $record['context'];
119
+ $data['data']['level'] = $record['level'];
120
+
121
+ if ($this->scheme === 'http') {
122
+ $this->writeHttp(json_encode($data));
123
+ } else {
124
+ $this->writeUdp(json_encode($data));
125
+ }
126
+ }
127
+
128
+ private function writeUdp($data)
129
+ {
130
+ if (!$this->udpConnection) {
131
+ $this->connectUdp();
132
+ }
133
+
134
+ socket_send($this->udpConnection, $data, strlen($data), 0);
135
+ }
136
+
137
+ private function writeHttp($data)
138
+ {
139
+ if (!$this->httpConnection) {
140
+ $this->connectHttp();
141
+ }
142
+
143
+ curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']');
144
+ curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, array(
145
+ 'Content-Type: application/json',
146
+ 'Content-Length: ' . strlen('['.$data.']'),
147
+ ));
148
+
149
+ Curl\Util::execute($this->httpConnection, 5, false);
150
+ }
151
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\Curl;
13
+
14
+ class Util
15
+ {
16
+ private static $retriableErrorCodes = array(
17
+ CURLE_COULDNT_RESOLVE_HOST,
18
+ CURLE_COULDNT_CONNECT,
19
+ CURLE_HTTP_NOT_FOUND,
20
+ CURLE_READ_ERROR,
21
+ CURLE_OPERATION_TIMEOUTED,
22
+ CURLE_HTTP_POST_ERROR,
23
+ CURLE_SSL_CONNECT_ERROR,
24
+ );
25
+
26
+ /**
27
+ * Executes a CURL request with optional retries and exception on failure
28
+ *
29
+ * @param resource $ch curl handler
30
+ * @throws \RuntimeException
31
+ */
32
+ public static function execute($ch, $retries = 5, $closeAfterDone = true)
33
+ {
34
+ while ($retries--) {
35
+ if (curl_exec($ch) === false) {
36
+ $curlErrno = curl_errno($ch);
37
+
38
+ if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || !$retries) {
39
+ $curlError = curl_error($ch);
40
+
41
+ if ($closeAfterDone) {
42
+ curl_close($ch);
43
+ }
44
+
45
+ throw new \RuntimeException(sprintf('Curl error (code %s): %s', $curlErrno, $curlError));
46
+ }
47
+
48
+ continue;
49
+ }
50
+
51
+ if ($closeAfterDone) {
52
+ curl_close($ch);
53
+ }
54
+ break;
55
+ }
56
+ }
57
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Simple handler wrapper that deduplicates log records across multiple requests
18
+ *
19
+ * It also includes the BufferHandler functionality and will buffer
20
+ * all messages until the end of the request or flush() is called.
21
+ *
22
+ * This works by storing all log records' messages above $deduplicationLevel
23
+ * to the file specified by $deduplicationStore. When further logs come in at the end of the
24
+ * request (or when flush() is called), all those above $deduplicationLevel are checked
25
+ * against the existing stored logs. If they match and the timestamps in the stored log is
26
+ * not older than $time seconds, the new log record is discarded. If no log record is new, the
27
+ * whole data set is discarded.
28
+ *
29
+ * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers
30
+ * that send messages to people, to avoid spamming with the same message over and over in case of
31
+ * a major component failure like a database server being down which makes all requests fail in the
32
+ * same way.
33
+ *
34
+ * @author Jordi Boggiano <j.boggiano@seld.be>
35
+ */
36
+ class DeduplicationHandler extends BufferHandler
37
+ {
38
+ /**
39
+ * @var string
40
+ */
41
+ protected $deduplicationStore;
42
+
43
+ /**
44
+ * @var int
45
+ */
46
+ protected $deduplicationLevel;
47
+
48
+ /**
49
+ * @var int
50
+ */
51
+ protected $time;
52
+
53
+ /**
54
+ * @var bool
55
+ */
56
+ private $gc = false;
57
+
58
+ /**
59
+ * @param HandlerInterface $handler Handler.
60
+ * @param string $deduplicationStore The file/path where the deduplication log should be kept
61
+ * @param int $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes
62
+ * @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through
63
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
64
+ */
65
+ public function __construct(HandlerInterface $handler, $deduplicationStore = null, $deduplicationLevel = Logger::ERROR, $time = 60, $bubble = true)
66
+ {
67
+ parent::__construct($handler, 0, Logger::DEBUG, $bubble, false);
68
+
69
+ $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore;
70
+ $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel);
71
+ $this->time = $time;
72
+ }
73
+
74
+ public function flush()
75
+ {
76
+ if ($this->bufferSize === 0) {
77
+ return;
78
+ }
79
+
80
+ $passthru = null;
81
+
82
+ foreach ($this->buffer as $record) {
83
+ if ($record['level'] >= $this->deduplicationLevel) {
84
+
85
+ $passthru = $passthru || !$this->isDuplicate($record);
86
+ if ($passthru) {
87
+ $this->appendRecord($record);
88
+ }
89
+ }
90
+ }
91
+
92
+ // default of null is valid as well as if no record matches duplicationLevel we just pass through
93
+ if ($passthru === true || $passthru === null) {
94
+ $this->handler->handleBatch($this->buffer);
95
+ }
96
+
97
+ $this->clear();
98
+
99
+ if ($this->gc) {
100
+ $this->collectLogs();
101
+ }
102
+ }
103
+
104
+ private function isDuplicate(array $record)
105
+ {
106
+ if (!file_exists($this->deduplicationStore)) {
107
+ return false;
108
+ }
109
+
110
+ $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
111
+ if (!is_array($store)) {
112
+ return false;
113
+ }
114
+
115
+ $yesterday = time() - 86400;
116
+ $timestampValidity = $record['datetime']->getTimestamp() - $this->time;
117
+ $expectedMessage = preg_replace('{[\r\n].*}', '', $record['message']);
118
+
119
+ for ($i = count($store) - 1; $i >= 0; $i--) {
120
+ list($timestamp, $level, $message) = explode(':', $store[$i], 3);
121
+
122
+ if ($level === $record['level_name'] && $message === $expectedMessage && $timestamp > $timestampValidity) {
123
+ return true;
124
+ }
125
+
126
+ if ($timestamp < $yesterday) {
127
+ $this->gc = true;
128
+ }
129
+ }
130
+
131
+ return false;
132
+ }
133
+
134
+ private function collectLogs()
135
+ {
136
+ if (!file_exists($this->deduplicationStore)) {
137
+ return false;
138
+ }
139
+
140
+ $handle = fopen($this->deduplicationStore, 'rw+');
141
+ flock($handle, LOCK_EX);
142
+ $validLogs = array();
143
+
144
+ $timestampValidity = time() - $this->time;
145
+
146
+ while (!feof($handle)) {
147
+ $log = fgets($handle);
148
+ if (substr($log, 0, 10) >= $timestampValidity) {
149
+ $validLogs[] = $log;
150
+ }
151
+ }
152
+
153
+ ftruncate($handle, 0);
154
+ rewind($handle);
155
+ foreach ($validLogs as $log) {
156
+ fwrite($handle, $log);
157
+ }
158
+
159
+ flock($handle, LOCK_UN);
160
+ fclose($handle);
161
+
162
+ $this->gc = false;
163
+ }
164
+
165
+ private function appendRecord(array $record)
166
+ {
167
+ file_put_contents($this->deduplicationStore, $record['datetime']->getTimestamp() . ':' . $record['level_name'] . ':' . preg_replace('{[\r\n].*}', '', $record['message']) . "\n", FILE_APPEND);
168
+ }
169
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\NormalizerFormatter;
16
+ use Doctrine\CouchDB\CouchDBClient;
17
+
18
+ /**
19
+ * CouchDB handler for Doctrine CouchDB ODM
20
+ *
21
+ * @author Markus Bachmann <markus.bachmann@bachi.biz>
22
+ */
23
+ class DoctrineCouchDBHandler extends AbstractProcessingHandler
24
+ {
25
+ private $client;
26
+
27
+ public function __construct(CouchDBClient $client, $level = Logger::DEBUG, $bubble = true)
28
+ {
29
+ $this->client = $client;
30
+ parent::__construct($level, $bubble);
31
+ }
32
+
33
+ /**
34
+ * {@inheritDoc}
35
+ */
36
+ protected function write(array $record)
37
+ {
38
+ $this->client->postDocument($record['formatted']);
39
+ }
40
+
41
+ protected function getDefaultFormatter()
42
+ {
43
+ return new NormalizerFormatter;
44
+ }
45
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Aws\Sdk;
15
+ use Aws\DynamoDb\DynamoDbClient;
16
+ use Aws\DynamoDb\Marshaler;
17
+ use Monolog\Formatter\ScalarFormatter;
18
+ use Monolog\Logger;
19
+
20
+ /**
21
+ * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/)
22
+ *
23
+ * @link https://github.com/aws/aws-sdk-php/
24
+ * @author Andrew Lawson <adlawson@gmail.com>
25
+ */
26
+ class DynamoDbHandler extends AbstractProcessingHandler
27
+ {
28
+ const DATE_FORMAT = 'Y-m-d\TH:i:s.uO';
29
+
30
+ /**
31
+ * @var DynamoDbClient
32
+ */
33
+ protected $client;
34
+
35
+ /**
36
+ * @var string
37
+ */
38
+ protected $table;
39
+
40
+ /**
41
+ * @var int
42
+ */
43
+ protected $version;
44
+
45
+ /**
46
+ * @var Marshaler
47
+ */
48
+ protected $marshaler;
49
+
50
+ /**
51
+ * @param DynamoDbClient $client
52
+ * @param string $table
53
+ * @param int $level
54
+ * @param bool $bubble
55
+ */
56
+ public function __construct(DynamoDbClient $client, $table, $level = Logger::DEBUG, $bubble = true)
57
+ {
58
+ if (defined('Aws\Sdk::VERSION') && version_compare(Sdk::VERSION, '3.0', '>=')) {
59
+ $this->version = 3;
60
+ $this->marshaler = new Marshaler;
61
+ } else {
62
+ $this->version = 2;
63
+ }
64
+
65
+ $this->client = $client;
66
+ $this->table = $table;
67
+
68
+ parent::__construct($level, $bubble);
69
+ }
70
+
71
+ /**
72
+ * {@inheritdoc}
73
+ */
74
+ protected function write(array $record)
75
+ {
76
+ $filtered = $this->filterEmptyFields($record['formatted']);
77
+ if ($this->version === 3) {
78
+ $formatted = $this->marshaler->marshalItem($filtered);
79
+ } else {
80
+ $formatted = $this->client->formatAttributes($filtered);
81
+ }
82
+
83
+ $this->client->putItem(array(
84
+ 'TableName' => $this->table,
85
+ 'Item' => $formatted,
86
+ ));
87
+ }
88
+
89
+ /**
90
+ * @param array $record
91
+ * @return array
92
+ */
93
+ protected function filterEmptyFields(array $record)
94
+ {
95
+ return array_filter($record, function ($value) {
96
+ return !empty($value) || false === $value || 0 === $value;
97
+ });
98
+ }
99
+
100
+ /**
101
+ * {@inheritdoc}
102
+ */
103
+ protected function getDefaultFormatter()
104
+ {
105
+ return new ScalarFormatter(self::DATE_FORMAT);
106
+ }
107
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+ use Monolog\Formatter\ElasticaFormatter;
16
+ use Monolog\Logger;
17
+ use Elastica\Client;
18
+ use Elastica\Exception\ExceptionInterface;
19
+
20
+ /**
21
+ * Elastic Search handler
22
+ *
23
+ * Usage example:
24
+ *
25
+ * $client = new \Elastica\Client();
26
+ * $options = array(
27
+ * 'index' => 'elastic_index_name',
28
+ * 'type' => 'elastic_doc_type',
29
+ * );
30
+ * $handler = new ElasticSearchHandler($client, $options);
31
+ * $log = new Logger('application');
32
+ * $log->pushHandler($handler);
33
+ *
34
+ * @author Jelle Vink <jelle.vink@gmail.com>
35
+ */
36
+ class ElasticSearchHandler extends AbstractProcessingHandler
37
+ {
38
+ /**
39
+ * @var Client
40
+ */
41
+ protected $client;
42
+
43
+ /**
44
+ * @var array Handler config options
45
+ */
46
+ protected $options = array();
47
+
48
+ /**
49
+ * @param Client $client Elastica Client object
50
+ * @param array $options Handler configuration
51
+ * @param int $level The minimum logging level at which this handler will be triggered
52
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
53
+ */
54
+ public function __construct(Client $client, array $options = array(), $level = Logger::DEBUG, $bubble = true)
55
+ {
56
+ parent::__construct($level, $bubble);
57
+ $this->client = $client;
58
+ $this->options = array_merge(
59
+ array(
60
+ 'index' => 'monolog', // Elastic index name
61
+ 'type' => 'record', // Elastic document type
62
+ 'ignore_error' => false, // Suppress Elastica exceptions
63
+ ),
64
+ $options
65
+ );
66
+ }
67
+
68
+ /**
69
+ * {@inheritDoc}
70
+ */
71
+ protected function write(array $record)
72
+ {
73
+ $this->bulkSend(array($record['formatted']));
74
+ }
75
+
76
+ /**
77
+ * {@inheritdoc}
78
+ */
79
+ public function setFormatter(FormatterInterface $formatter)
80
+ {
81
+ if ($formatter instanceof ElasticaFormatter) {
82
+ return parent::setFormatter($formatter);
83
+ }
84
+ throw new \InvalidArgumentException('ElasticSearchHandler is only compatible with ElasticaFormatter');
85
+ }
86
+
87
+ /**
88
+ * Getter options
89
+ * @return array
90
+ */
91
+ public function getOptions()
92
+ {
93
+ return $this->options;
94
+ }
95
+
96
+ /**
97
+ * {@inheritDoc}
98
+ */
99
+ protected function getDefaultFormatter()
100
+ {
101
+ return new ElasticaFormatter($this->options['index'], $this->options['type']);
102
+ }
103
+
104
+ /**
105
+ * {@inheritdoc}
106
+ */
107
+ public function handleBatch(array $records)
108
+ {
109
+ $documents = $this->getFormatter()->formatBatch($records);
110
+ $this->bulkSend($documents);
111
+ }
112
+
113
+ /**
114
+ * Use Elasticsearch bulk API to send list of documents
115
+ * @param array $documents
116
+ * @throws \RuntimeException
117
+ */
118
+ protected function bulkSend(array $documents)
119
+ {
120
+ try {
121
+ $this->client->addDocuments($documents);
122
+ } catch (ExceptionInterface $e) {
123
+ if (!$this->options['ignore_error']) {
124
+ throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e);
125
+ }
126
+ }
127
+ }
128
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+ use Monolog\Logger;
16
+
17
+ /**
18
+ * Stores to PHP error_log() handler.
19
+ *
20
+ * @author Elan Ruusamäe <glen@delfi.ee>
21
+ */
22
+ class ErrorLogHandler extends AbstractProcessingHandler
23
+ {
24
+ const OPERATING_SYSTEM = 0;
25
+ const SAPI = 4;
26
+
27
+ protected $messageType;
28
+ protected $expandNewlines;
29
+
30
+ /**
31
+ * @param int $messageType Says where the error should go.
32
+ * @param int $level The minimum logging level at which this handler will be triggered
33
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
34
+ * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries
35
+ */
36
+ public function __construct($messageType = self::OPERATING_SYSTEM, $level = Logger::DEBUG, $bubble = true, $expandNewlines = false)
37
+ {
38
+ parent::__construct($level, $bubble);
39
+
40
+ if (false === in_array($messageType, self::getAvailableTypes())) {
41
+ $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true));
42
+ throw new \InvalidArgumentException($message);
43
+ }
44
+
45
+ $this->messageType = $messageType;
46
+ $this->expandNewlines = $expandNewlines;
47
+ }
48
+
49
+ /**
50
+ * @return array With all available types
51
+ */
52
+ public static function getAvailableTypes()
53
+ {
54
+ return array(
55
+ self::OPERATING_SYSTEM,
56
+ self::SAPI,
57
+ );
58
+ }
59
+
60
+ /**
61
+ * {@inheritDoc}
62
+ */
63
+ protected function getDefaultFormatter()
64
+ {
65
+ return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%');
66
+ }
67
+
68
+ /**
69
+ * {@inheritdoc}
70
+ */
71
+ protected function write(array $record)
72
+ {
73
+ if ($this->expandNewlines) {
74
+ $lines = preg_split('{[\r\n]+}', (string) $record['formatted']);
75
+ foreach ($lines as $line) {
76
+ error_log($line, $this->messageType);
77
+ }
78
+ } else {
79
+ error_log((string) $record['formatted'], $this->messageType);
80
+ }
81
+ }
82
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Simple handler wrapper that filters records based on a list of levels
18
+ *
19
+ * It can be configured with an exact list of levels to allow, or a min/max level.
20
+ *
21
+ * @author Hennadiy Verkh
22
+ * @author Jordi Boggiano <j.boggiano@seld.be>
23
+ */
24
+ class FilterHandler extends AbstractHandler
25
+ {
26
+ /**
27
+ * Handler or factory callable($record, $this)
28
+ *
29
+ * @var callable|\Monolog\Handler\HandlerInterface
30
+ */
31
+ protected $handler;
32
+
33
+ /**
34
+ * Minimum level for logs that are passed to handler
35
+ *
36
+ * @var int[]
37
+ */
38
+ protected $acceptedLevels;
39
+
40
+ /**
41
+ * Whether the messages that are handled can bubble up the stack or not
42
+ *
43
+ * @var bool
44
+ */
45
+ protected $bubble;
46
+
47
+ /**
48
+ * @param callable|HandlerInterface $handler Handler or factory callable($record, $this).
49
+ * @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided
50
+ * @param int $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array
51
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
52
+ */
53
+ public function __construct($handler, $minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY, $bubble = true)
54
+ {
55
+ $this->handler = $handler;
56
+ $this->bubble = $bubble;
57
+ $this->setAcceptedLevels($minLevelOrList, $maxLevel);
58
+
59
+ if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
60
+ throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @return array
66
+ */
67
+ public function getAcceptedLevels()
68
+ {
69
+ return array_flip($this->acceptedLevels);
70
+ }
71
+
72
+ /**
73
+ * @param int|string|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided
74
+ * @param int|string $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array
75
+ */
76
+ public function setAcceptedLevels($minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY)
77
+ {
78
+ if (is_array($minLevelOrList)) {
79
+ $acceptedLevels = array_map('Monolog\Logger::toMonologLevel', $minLevelOrList);
80
+ } else {
81
+ $minLevelOrList = Logger::toMonologLevel($minLevelOrList);
82
+ $maxLevel = Logger::toMonologLevel($maxLevel);
83
+ $acceptedLevels = array_values(array_filter(Logger::getLevels(), function ($level) use ($minLevelOrList, $maxLevel) {
84
+ return $level >= $minLevelOrList && $level <= $maxLevel;
85
+ }));
86
+ }
87
+ $this->acceptedLevels = array_flip($acceptedLevels);
88
+ }
89
+
90
+ /**
91
+ * {@inheritdoc}
92
+ */
93
+ public function isHandling(array $record)
94
+ {
95
+ return isset($this->acceptedLevels[$record['level']]);
96
+ }
97
+
98
+ /**
99
+ * {@inheritdoc}
100
+ */
101
+ public function handle(array $record)
102
+ {
103
+ if (!$this->isHandling($record)) {
104
+ return false;
105
+ }
106
+
107
+ // The same logic as in FingersCrossedHandler
108
+ if (!$this->handler instanceof HandlerInterface) {
109
+ $this->handler = call_user_func($this->handler, $record, $this);
110
+ if (!$this->handler instanceof HandlerInterface) {
111
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
112
+ }
113
+ }
114
+
115
+ if ($this->processors) {
116
+ foreach ($this->processors as $processor) {
117
+ $record = call_user_func($processor, $record);
118
+ }
119
+ }
120
+
121
+ $this->handler->handle($record);
122
+
123
+ return false === $this->bubble;
124
+ }
125
+
126
+ /**
127
+ * {@inheritdoc}
128
+ */
129
+ public function handleBatch(array $records)
130
+ {
131
+ $filtered = array();
132
+ foreach ($records as $record) {
133
+ if ($this->isHandling($record)) {
134
+ $filtered[] = $record;
135
+ }
136
+ }
137
+
138
+ $this->handler->handleBatch($filtered);
139
+ }
140
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\FingersCrossed;
13
+
14
+ /**
15
+ * Interface for activation strategies for the FingersCrossedHandler.
16
+ *
17
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
18
+ */
19
+ interface ActivationStrategyInterface
20
+ {
21
+ /**
22
+ * Returns whether the given record activates the handler.
23
+ *
24
+ * @param array $record
25
+ * @return bool
26
+ */
27
+ public function isHandlerActivated(array $record);
28
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\FingersCrossed;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Channel and Error level based monolog activation strategy. Allows to trigger activation
18
+ * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except
19
+ * for records of the 'sql' channel; those should trigger activation on level 'WARN'.
20
+ *
21
+ * Example:
22
+ *
23
+ * <code>
24
+ * $activationStrategy = new ChannelLevelActivationStrategy(
25
+ * Logger::CRITICAL,
26
+ * array(
27
+ * 'request' => Logger::ALERT,
28
+ * 'sensitive' => Logger::ERROR,
29
+ * )
30
+ * );
31
+ * $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy);
32
+ * </code>
33
+ *
34
+ * @author Mike Meessen <netmikey@gmail.com>
35
+ */
36
+ class ChannelLevelActivationStrategy implements ActivationStrategyInterface
37
+ {
38
+ private $defaultActionLevel;
39
+ private $channelToActionLevel;
40
+
41
+ /**
42
+ * @param int $defaultActionLevel The default action level to be used if the record's category doesn't match any
43
+ * @param array $channelToActionLevel An array that maps channel names to action levels.
44
+ */
45
+ public function __construct($defaultActionLevel, $channelToActionLevel = array())
46
+ {
47
+ $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel);
48
+ $this->channelToActionLevel = array_map('Monolog\Logger::toMonologLevel', $channelToActionLevel);
49
+ }
50
+
51
+ public function isHandlerActivated(array $record)
52
+ {
53
+ if (isset($this->channelToActionLevel[$record['channel']])) {
54
+ return $record['level'] >= $this->channelToActionLevel[$record['channel']];
55
+ }
56
+
57
+ return $record['level'] >= $this->defaultActionLevel;
58
+ }
59
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\FingersCrossed;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Error level based activation strategy.
18
+ *
19
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
20
+ */
21
+ class ErrorLevelActivationStrategy implements ActivationStrategyInterface
22
+ {
23
+ private $actionLevel;
24
+
25
+ public function __construct($actionLevel)
26
+ {
27
+ $this->actionLevel = Logger::toMonologLevel($actionLevel);
28
+ }
29
+
30
+ public function isHandlerActivated(array $record)
31
+ {
32
+ return $record['level'] >= $this->actionLevel;
33
+ }
34
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy;
15
+ use Monolog\Handler\FingersCrossed\ActivationStrategyInterface;
16
+ use Monolog\Logger;
17
+ use Monolog\ResettableInterface;
18
+
19
+ /**
20
+ * Buffers all records until a certain level is reached
21
+ *
22
+ * The advantage of this approach is that you don't get any clutter in your log files.
23
+ * Only requests which actually trigger an error (or whatever your actionLevel is) will be
24
+ * in the logs, but they will contain all records, not only those above the level threshold.
25
+ *
26
+ * You can find the various activation strategies in the
27
+ * Monolog\Handler\FingersCrossed\ namespace.
28
+ *
29
+ * @author Jordi Boggiano <j.boggiano@seld.be>
30
+ */
31
+ class FingersCrossedHandler extends AbstractHandler
32
+ {
33
+ protected $handler;
34
+ protected $activationStrategy;
35
+ protected $buffering = true;
36
+ protected $bufferSize;
37
+ protected $buffer = array();
38
+ protected $stopBuffering;
39
+ protected $passthruLevel;
40
+
41
+ /**
42
+ * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
43
+ * @param int|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action
44
+ * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
45
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
46
+ * @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true)
47
+ * @param int $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered
48
+ */
49
+ public function __construct($handler, $activationStrategy = null, $bufferSize = 0, $bubble = true, $stopBuffering = true, $passthruLevel = null)
50
+ {
51
+ if (null === $activationStrategy) {
52
+ $activationStrategy = new ErrorLevelActivationStrategy(Logger::WARNING);
53
+ }
54
+
55
+ // convert simple int activationStrategy to an object
56
+ if (!$activationStrategy instanceof ActivationStrategyInterface) {
57
+ $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy);
58
+ }
59
+
60
+ $this->handler = $handler;
61
+ $this->activationStrategy = $activationStrategy;
62
+ $this->bufferSize = $bufferSize;
63
+ $this->bubble = $bubble;
64
+ $this->stopBuffering = $stopBuffering;
65
+
66
+ if ($passthruLevel !== null) {
67
+ $this->passthruLevel = Logger::toMonologLevel($passthruLevel);
68
+ }
69
+
70
+ if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
71
+ throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
72
+ }
73
+ }
74
+
75
+ /**
76
+ * {@inheritdoc}
77
+ */
78
+ public function isHandling(array $record)
79
+ {
80
+ return true;
81
+ }
82
+
83
+ /**
84
+ * Manually activate this logger regardless of the activation strategy
85
+ */
86
+ public function activate()
87
+ {
88
+ if ($this->stopBuffering) {
89
+ $this->buffering = false;
90
+ }
91
+ if (!$this->handler instanceof HandlerInterface) {
92
+ $record = end($this->buffer) ?: null;
93
+
94
+ $this->handler = call_user_func($this->handler, $record, $this);
95
+ if (!$this->handler instanceof HandlerInterface) {
96
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
97
+ }
98
+ }
99
+ $this->handler->handleBatch($this->buffer);
100
+ $this->buffer = array();
101
+ }
102
+
103
+ /**
104
+ * {@inheritdoc}
105
+ */
106
+ public function handle(array $record)
107
+ {
108
+ if ($this->processors) {
109
+ foreach ($this->processors as $processor) {
110
+ $record = call_user_func($processor, $record);
111
+ }
112
+ }
113
+
114
+ if ($this->buffering) {
115
+ $this->buffer[] = $record;
116
+ if ($this->bufferSize > 0 && count($this->buffer) > $this->bufferSize) {
117
+ array_shift($this->buffer);
118
+ }
119
+ if ($this->activationStrategy->isHandlerActivated($record)) {
120
+ $this->activate();
121
+ }
122
+ } else {
123
+ $this->handler->handle($record);
124
+ }
125
+
126
+ return false === $this->bubble;
127
+ }
128
+
129
+ /**
130
+ * {@inheritdoc}
131
+ */
132
+ public function close()
133
+ {
134
+ $this->flushBuffer();
135
+ }
136
+
137
+ public function reset()
138
+ {
139
+ $this->flushBuffer();
140
+
141
+ parent::reset();
142
+
143
+ if ($this->handler instanceof ResettableInterface) {
144
+ $this->handler->reset();
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Clears the buffer without flushing any messages down to the wrapped handler.
150
+ *
151
+ * It also resets the handler to its initial buffering state.
152
+ */
153
+ public function clear()
154
+ {
155
+ $this->buffer = array();
156
+ $this->reset();
157
+ }
158
+
159
+ /**
160
+ * Resets the state of the handler. Stops forwarding records to the wrapped handler.
161
+ */
162
+ private function flushBuffer()
163
+ {
164
+ if (null !== $this->passthruLevel) {
165
+ $level = $this->passthruLevel;
166
+ $this->buffer = array_filter($this->buffer, function ($record) use ($level) {
167
+ return $record['level'] >= $level;
168
+ });
169
+ if (count($this->buffer) > 0) {
170
+ $this->handler->handleBatch($this->buffer);
171
+ }
172
+ }
173
+
174
+ $this->buffer = array();
175
+ $this->buffering = true;
176
+ }
177
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\WildfireFormatter;
15
+
16
+ /**
17
+ * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol.
18
+ *
19
+ * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>
20
+ */
21
+ class FirePHPHandler extends AbstractProcessingHandler
22
+ {
23
+ /**
24
+ * WildFire JSON header message format
25
+ */
26
+ const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2';
27
+
28
+ /**
29
+ * FirePHP structure for parsing messages & their presentation
30
+ */
31
+ const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1';
32
+
33
+ /**
34
+ * Must reference a "known" plugin, otherwise headers won't display in FirePHP
35
+ */
36
+ const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3';
37
+
38
+ /**
39
+ * Header prefix for Wildfire to recognize & parse headers
40
+ */
41
+ const HEADER_PREFIX = 'X-Wf';
42
+
43
+ /**
44
+ * Whether or not Wildfire vendor-specific headers have been generated & sent yet
45
+ */
46
+ protected static $initialized = false;
47
+
48
+ /**
49
+ * Shared static message index between potentially multiple handlers
50
+ * @var int
51
+ */
52
+ protected static $messageIndex = 1;
53
+
54
+ protected static $sendHeaders = true;
55
+
56
+ /**
57
+ * Base header creation function used by init headers & record headers
58
+ *
59
+ * @param array $meta Wildfire Plugin, Protocol & Structure Indexes
60
+ * @param string $message Log message
61
+ * @return array Complete header string ready for the client as key and message as value
62
+ */
63
+ protected function createHeader(array $meta, $message)
64
+ {
65
+ $header = sprintf('%s-%s', self::HEADER_PREFIX, join('-', $meta));
66
+
67
+ return array($header => $message);
68
+ }
69
+
70
+ /**
71
+ * Creates message header from record
72
+ *
73
+ * @see createHeader()
74
+ * @param array $record
75
+ * @return string
76
+ */
77
+ protected function createRecordHeader(array $record)
78
+ {
79
+ // Wildfire is extensible to support multiple protocols & plugins in a single request,
80
+ // but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake.
81
+ return $this->createHeader(
82
+ array(1, 1, 1, self::$messageIndex++),
83
+ $record['formatted']
84
+ );
85
+ }
86
+
87
+ /**
88
+ * {@inheritDoc}
89
+ */
90
+ protected function getDefaultFormatter()
91
+ {
92
+ return new WildfireFormatter();
93
+ }
94
+
95
+ /**
96
+ * Wildfire initialization headers to enable message parsing
97
+ *
98
+ * @see createHeader()
99
+ * @see sendHeader()
100
+ * @return array
101
+ */
102
+ protected function getInitHeaders()
103
+ {
104
+ // Initial payload consists of required headers for Wildfire
105
+ return array_merge(
106
+ $this->createHeader(array('Protocol', 1), self::PROTOCOL_URI),
107
+ $this->createHeader(array(1, 'Structure', 1), self::STRUCTURE_URI),
108
+ $this->createHeader(array(1, 'Plugin', 1), self::PLUGIN_URI)
109
+ );
110
+ }
111
+
112
+ /**
113
+ * Send header string to the client
114
+ *
115
+ * @param string $header
116
+ * @param string $content
117
+ */
118
+ protected function sendHeader($header, $content)
119
+ {
120
+ if (!headers_sent() && self::$sendHeaders) {
121
+ header(sprintf('%s: %s', $header, $content));
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Creates & sends header for a record, ensuring init headers have been sent prior
127
+ *
128
+ * @see sendHeader()
129
+ * @see sendInitHeaders()
130
+ * @param array $record
131
+ */
132
+ protected function write(array $record)
133
+ {
134
+ if (!self::$sendHeaders) {
135
+ return;
136
+ }
137
+
138
+ // WildFire-specific headers must be sent prior to any messages
139
+ if (!self::$initialized) {
140
+ self::$initialized = true;
141
+
142
+ self::$sendHeaders = $this->headersAccepted();
143
+ if (!self::$sendHeaders) {
144
+ return;
145
+ }
146
+
147
+ foreach ($this->getInitHeaders() as $header => $content) {
148
+ $this->sendHeader($header, $content);
149
+ }
150
+ }
151
+
152
+ $header = $this->createRecordHeader($record);
153
+ if (trim(current($header)) !== '') {
154
+ $this->sendHeader(key($header), current($header));
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Verifies if the headers are accepted by the current user agent
160
+ *
161
+ * @return bool
162
+ */
163
+ protected function headersAccepted()
164
+ {
165
+ if (!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) {
166
+ return true;
167
+ }
168
+
169
+ return isset($_SERVER['HTTP_X_FIREPHP_VERSION']);
170
+ }
171
+
172
+ /**
173
+ * BC getter for the sendHeaders property that has been made static
174
+ */
175
+ public function __get($property)
176
+ {
177
+ if ('sendHeaders' !== $property) {
178
+ throw new \InvalidArgumentException('Undefined property '.$property);
179
+ }
180
+
181
+ return static::$sendHeaders;
182
+ }
183
+
184
+ /**
185
+ * BC setter for the sendHeaders property that has been made static
186
+ */
187
+ public function __set($property, $value)
188
+ {
189
+ if ('sendHeaders' !== $property) {
190
+ throw new \InvalidArgumentException('Undefined property '.$property);
191
+ }
192
+
193
+ static::$sendHeaders = $value;
194
+ }
195
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+ use Monolog\Logger;
16
+
17
+ /**
18
+ * Sends logs to Fleep.io using Webhook integrations
19
+ *
20
+ * You'll need a Fleep.io account to use this handler.
21
+ *
22
+ * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation
23
+ * @author Ando Roots <ando@sqroot.eu>
24
+ */
25
+ class FleepHookHandler extends SocketHandler
26
+ {
27
+ const FLEEP_HOST = 'fleep.io';
28
+
29
+ const FLEEP_HOOK_URI = '/hook/';
30
+
31
+ /**
32
+ * @var string Webhook token (specifies the conversation where logs are sent)
33
+ */
34
+ protected $token;
35
+
36
+ /**
37
+ * Construct a new Fleep.io Handler.
38
+ *
39
+ * For instructions on how to create a new web hook in your conversations
40
+ * see https://fleep.io/integrations/webhooks/
41
+ *
42
+ * @param string $token Webhook token
43
+ * @param bool|int $level The minimum logging level at which this handler will be triggered
44
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
45
+ * @throws MissingExtensionException
46
+ */
47
+ public function __construct($token, $level = Logger::DEBUG, $bubble = true)
48
+ {
49
+ if (!extension_loaded('openssl')) {
50
+ throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler');
51
+ }
52
+
53
+ $this->token = $token;
54
+
55
+ $connectionString = 'ssl://' . self::FLEEP_HOST . ':443';
56
+ parent::__construct($connectionString, $level, $bubble);
57
+ }
58
+
59
+ /**
60
+ * Returns the default formatter to use with this handler
61
+ *
62
+ * Overloaded to remove empty context and extra arrays from the end of the log message.
63
+ *
64
+ * @return LineFormatter
65
+ */
66
+ protected function getDefaultFormatter()
67
+ {
68
+ return new LineFormatter(null, null, true, true);
69
+ }
70
+
71
+ /**
72
+ * Handles a log record
73
+ *
74
+ * @param array $record
75
+ */
76
+ public function write(array $record)
77
+ {
78
+ parent::write($record);
79
+ $this->closeSocket();
80
+ }
81
+
82
+ /**
83
+ * {@inheritdoc}
84
+ *
85
+ * @param array $record
86
+ * @return string
87
+ */
88
+ protected function generateDataStream($record)
89
+ {
90
+ $content = $this->buildContent($record);
91
+
92
+ return $this->buildHeader($content) . $content;
93
+ }
94
+
95
+ /**
96
+ * Builds the header of the API Call
97
+ *
98
+ * @param string $content
99
+ * @return string
100
+ */
101
+ private function buildHeader($content)
102
+ {
103
+ $header = "POST " . self::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n";
104
+ $header .= "Host: " . self::FLEEP_HOST . "\r\n";
105
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
106
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
107
+ $header .= "\r\n";
108
+
109
+ return $header;
110
+ }
111
+
112
+ /**
113
+ * Builds the body of API call
114
+ *
115
+ * @param array $record
116
+ * @return string
117
+ */
118
+ private function buildContent($record)
119
+ {
120
+ $dataArray = array(
121
+ 'message' => $record['formatted'],
122
+ );
123
+
124
+ return http_build_query($dataArray);
125
+ }
126
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\FlowdockFormatter;
16
+ use Monolog\Formatter\FormatterInterface;
17
+
18
+ /**
19
+ * Sends notifications through the Flowdock push API
20
+ *
21
+ * This must be configured with a FlowdockFormatter instance via setFormatter()
22
+ *
23
+ * Notes:
24
+ * API token - Flowdock API token
25
+ *
26
+ * @author Dominik Liebler <liebler.dominik@gmail.com>
27
+ * @see https://www.flowdock.com/api/push
28
+ */
29
+ class FlowdockHandler extends SocketHandler
30
+ {
31
+ /**
32
+ * @var string
33
+ */
34
+ protected $apiToken;
35
+
36
+ /**
37
+ * @param string $apiToken
38
+ * @param bool|int $level The minimum logging level at which this handler will be triggered
39
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
40
+ *
41
+ * @throws MissingExtensionException if OpenSSL is missing
42
+ */
43
+ public function __construct($apiToken, $level = Logger::DEBUG, $bubble = true)
44
+ {
45
+ if (!extension_loaded('openssl')) {
46
+ throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler');
47
+ }
48
+
49
+ parent::__construct('ssl://api.flowdock.com:443', $level, $bubble);
50
+ $this->apiToken = $apiToken;
51
+ }
52
+
53
+ /**
54
+ * {@inheritdoc}
55
+ */
56
+ public function setFormatter(FormatterInterface $formatter)
57
+ {
58
+ if (!$formatter instanceof FlowdockFormatter) {
59
+ throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly');
60
+ }
61
+
62
+ return parent::setFormatter($formatter);
63
+ }
64
+
65
+ /**
66
+ * Gets the default formatter.
67
+ *
68
+ * @return FormatterInterface
69
+ */
70
+ protected function getDefaultFormatter()
71
+ {
72
+ throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly');
73
+ }
74
+
75
+ /**
76
+ * {@inheritdoc}
77
+ *
78
+ * @param array $record
79
+ */
80
+ protected function write(array $record)
81
+ {
82
+ parent::write($record);
83
+
84
+ $this->closeSocket();
85
+ }
86
+
87
+ /**
88
+ * {@inheritdoc}
89
+ *
90
+ * @param array $record
91
+ * @return string
92
+ */
93
+ protected function generateDataStream($record)
94
+ {
95
+ $content = $this->buildContent($record);
96
+
97
+ return $this->buildHeader($content) . $content;
98
+ }
99
+
100
+ /**
101
+ * Builds the body of API call
102
+ *
103
+ * @param array $record
104
+ * @return string
105
+ */
106
+ private function buildContent($record)
107
+ {
108
+ return json_encode($record['formatted']['flowdock']);
109
+ }
110
+
111
+ /**
112
+ * Builds the header of the API Call
113
+ *
114
+ * @param string $content
115
+ * @return string
116
+ */
117
+ private function buildHeader($content)
118
+ {
119
+ $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n";
120
+ $header .= "Host: api.flowdock.com\r\n";
121
+ $header .= "Content-Type: application/json\r\n";
122
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
123
+ $header .= "\r\n";
124
+
125
+ return $header;
126
+ }
127
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Gelf\IMessagePublisher;
15
+ use Gelf\PublisherInterface;
16
+ use Gelf\Publisher;
17
+ use InvalidArgumentException;
18
+ use Monolog\Logger;
19
+ use Monolog\Formatter\GelfMessageFormatter;
20
+
21
+ /**
22
+ * Handler to send messages to a Graylog2 (http://www.graylog2.org) server
23
+ *
24
+ * @author Matt Lehner <mlehner@gmail.com>
25
+ * @author Benjamin Zikarsky <benjamin@zikarsky.de>
26
+ */
27
+ class GelfHandler extends AbstractProcessingHandler
28
+ {
29
+ /**
30
+ * @var Publisher the publisher object that sends the message to the server
31
+ */
32
+ protected $publisher;
33
+
34
+ /**
35
+ * @param PublisherInterface|IMessagePublisher|Publisher $publisher a publisher object
36
+ * @param int $level The minimum logging level at which this handler will be triggered
37
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
38
+ */
39
+ public function __construct($publisher, $level = Logger::DEBUG, $bubble = true)
40
+ {
41
+ parent::__construct($level, $bubble);
42
+
43
+ if (!$publisher instanceof Publisher && !$publisher instanceof IMessagePublisher && !$publisher instanceof PublisherInterface) {
44
+ throw new InvalidArgumentException('Invalid publisher, expected a Gelf\Publisher, Gelf\IMessagePublisher or Gelf\PublisherInterface instance');
45
+ }
46
+
47
+ $this->publisher = $publisher;
48
+ }
49
+
50
+ /**
51
+ * {@inheritdoc}
52
+ */
53
+ protected function write(array $record)
54
+ {
55
+ $this->publisher->publish($record['formatted']);
56
+ }
57
+
58
+ /**
59
+ * {@inheritDoc}
60
+ */
61
+ protected function getDefaultFormatter()
62
+ {
63
+ return new GelfMessageFormatter();
64
+ }
65
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+ use Monolog\ResettableInterface;
16
+
17
+ /**
18
+ * Forwards records to multiple handlers
19
+ *
20
+ * @author Lenar Lõhmus <lenar@city.ee>
21
+ */
22
+ class GroupHandler extends AbstractHandler
23
+ {
24
+ protected $handlers;
25
+
26
+ /**
27
+ * @param array $handlers Array of Handlers.
28
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
29
+ */
30
+ public function __construct(array $handlers, $bubble = true)
31
+ {
32
+ foreach ($handlers as $handler) {
33
+ if (!$handler instanceof HandlerInterface) {
34
+ throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.');
35
+ }
36
+ }
37
+
38
+ $this->handlers = $handlers;
39
+ $this->bubble = $bubble;
40
+ }
41
+
42
+ /**
43
+ * {@inheritdoc}
44
+ */
45
+ public function isHandling(array $record)
46
+ {
47
+ foreach ($this->handlers as $handler) {
48
+ if ($handler->isHandling($record)) {
49
+ return true;
50
+ }
51
+ }
52
+
53
+ return false;
54
+ }
55
+
56
+ /**
57
+ * {@inheritdoc}
58
+ */
59
+ public function handle(array $record)
60
+ {
61
+ if ($this->processors) {
62
+ foreach ($this->processors as $processor) {
63
+ $record = call_user_func($processor, $record);
64
+ }
65
+ }
66
+
67
+ foreach ($this->handlers as $handler) {
68
+ $handler->handle($record);
69
+ }
70
+
71
+ return false === $this->bubble;
72
+ }
73
+
74
+ /**
75
+ * {@inheritdoc}
76
+ */
77
+ public function handleBatch(array $records)
78
+ {
79
+ if ($this->processors) {
80
+ $processed = array();
81
+ foreach ($records as $record) {
82
+ foreach ($this->processors as $processor) {
83
+ $processed[] = call_user_func($processor, $record);
84
+ }
85
+ }
86
+ $records = $processed;
87
+ }
88
+
89
+ foreach ($this->handlers as $handler) {
90
+ $handler->handleBatch($records);
91
+ }
92
+ }
93
+
94
+ public function reset()
95
+ {
96
+ parent::reset();
97
+
98
+ foreach ($this->handlers as $handler) {
99
+ if ($handler instanceof ResettableInterface) {
100
+ $handler->reset();
101
+ }
102
+ }
103
+ }
104
+
105
+ /**
106
+ * {@inheritdoc}
107
+ */
108
+ public function setFormatter(FormatterInterface $formatter)
109
+ {
110
+ foreach ($this->handlers as $handler) {
111
+ $handler->setFormatter($formatter);
112
+ }
113
+
114
+ return $this;
115
+ }
116
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+
16
+ /**
17
+ * Interface that all Monolog Handlers must implement
18
+ *
19
+ * @author Jordi Boggiano <j.boggiano@seld.be>
20
+ */
21
+ interface HandlerInterface
22
+ {
23
+ /**
24
+ * Checks whether the given record will be handled by this handler.
25
+ *
26
+ * This is mostly done for performance reasons, to avoid calling processors for nothing.
27
+ *
28
+ * Handlers should still check the record levels within handle(), returning false in isHandling()
29
+ * is no guarantee that handle() will not be called, and isHandling() might not be called
30
+ * for a given record.
31
+ *
32
+ * @param array $record Partial log record containing only a level key
33
+ *
34
+ * @return bool
35
+ */
36
+ public function isHandling(array $record);
37
+
38
+ /**
39
+ * Handles a record.
40
+ *
41
+ * All records may be passed to this method, and the handler should discard
42
+ * those that it does not want to handle.
43
+ *
44
+ * The return value of this function controls the bubbling process of the handler stack.
45
+ * Unless the bubbling is interrupted (by returning true), the Logger class will keep on
46
+ * calling further handlers in the stack with a given log record.
47
+ *
48
+ * @param array $record The record to handle
49
+ * @return bool true means that this handler handled the record, and that bubbling is not permitted.
50
+ * false means the record was either not processed or that this handler allows bubbling.
51
+ */
52
+ public function handle(array $record);
53
+
54
+ /**
55
+ * Handles a set of records at once.
56
+ *
57
+ * @param array $records The records to handle (an array of record arrays)
58
+ */
59
+ public function handleBatch(array $records);
60
+
61
+ /**
62
+ * Adds a processor in the stack.
63
+ *
64
+ * @param callable $callback
65
+ * @return self
66
+ */
67
+ public function pushProcessor($callback);
68
+
69
+ /**
70
+ * Removes the processor on top of the stack and returns it.
71
+ *
72
+ * @return callable
73
+ */
74
+ public function popProcessor();
75
+
76
+ /**
77
+ * Sets the formatter.
78
+ *
79
+ * @param FormatterInterface $formatter
80
+ * @return self
81
+ */
82
+ public function setFormatter(FormatterInterface $formatter);
83
+
84
+ /**
85
+ * Gets the formatter.
86
+ *
87
+ * @return FormatterInterface
88
+ */
89
+ public function getFormatter();
90
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\ResettableInterface;
15
+ use Monolog\Formatter\FormatterInterface;
16
+
17
+ /**
18
+ * This simple wrapper class can be used to extend handlers functionality.
19
+ *
20
+ * Example: A custom filtering that can be applied to any handler.
21
+ *
22
+ * Inherit from this class and override handle() like this:
23
+ *
24
+ * public function handle(array $record)
25
+ * {
26
+ * if ($record meets certain conditions) {
27
+ * return false;
28
+ * }
29
+ * return $this->handler->handle($record);
30
+ * }
31
+ *
32
+ * @author Alexey Karapetov <alexey@karapetov.com>
33
+ */
34
+ class HandlerWrapper implements HandlerInterface, ResettableInterface
35
+ {
36
+ /**
37
+ * @var HandlerInterface
38
+ */
39
+ protected $handler;
40
+
41
+ /**
42
+ * HandlerWrapper constructor.
43
+ * @param HandlerInterface $handler
44
+ */
45
+ public function __construct(HandlerInterface $handler)
46
+ {
47
+ $this->handler = $handler;
48
+ }
49
+
50
+ /**
51
+ * {@inheritdoc}
52
+ */
53
+ public function isHandling(array $record)
54
+ {
55
+ return $this->handler->isHandling($record);
56
+ }
57
+
58
+ /**
59
+ * {@inheritdoc}
60
+ */
61
+ public function handle(array $record)
62
+ {
63
+ return $this->handler->handle($record);
64
+ }
65
+
66
+ /**
67
+ * {@inheritdoc}
68
+ */
69
+ public function handleBatch(array $records)
70
+ {
71
+ return $this->handler->handleBatch($records);
72
+ }
73
+
74
+ /**
75
+ * {@inheritdoc}
76
+ */
77
+ public function pushProcessor($callback)
78
+ {
79
+ $this->handler->pushProcessor($callback);
80
+
81
+ return $this;
82
+ }
83
+
84
+ /**
85
+ * {@inheritdoc}
86
+ */
87
+ public function popProcessor()
88
+ {
89
+ return $this->handler->popProcessor();
90
+ }
91
+
92
+ /**
93
+ * {@inheritdoc}
94
+ */
95
+ public function setFormatter(FormatterInterface $formatter)
96
+ {
97
+ $this->handler->setFormatter($formatter);
98
+
99
+ return $this;
100
+ }
101
+
102
+ /**
103
+ * {@inheritdoc}
104
+ */
105
+ public function getFormatter()
106
+ {
107
+ return $this->handler->getFormatter();
108
+ }
109
+
110
+ public function reset()
111
+ {
112
+ if ($this->handler instanceof ResettableInterface) {
113
+ return $this->handler->reset();
114
+ }
115
+ }
116
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php ADDED
@@ -0,0 +1,365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Sends notifications through the hipchat api to a hipchat room
18
+ *
19
+ * Notes:
20
+ * API token - HipChat API token
21
+ * Room - HipChat Room Id or name, where messages are sent
22
+ * Name - Name used to send the message (from)
23
+ * notify - Should the message trigger a notification in the clients
24
+ * version - The API version to use (HipChatHandler::API_V1 | HipChatHandler::API_V2)
25
+ *
26
+ * @author Rafael Dohms <rafael@doh.ms>
27
+ * @see https://www.hipchat.com/docs/api
28
+ */
29
+ class HipChatHandler extends SocketHandler
30
+ {
31
+ /**
32
+ * Use API version 1
33
+ */
34
+ const API_V1 = 'v1';
35
+
36
+ /**
37
+ * Use API version v2
38
+ */
39
+ const API_V2 = 'v2';
40
+
41
+ /**
42
+ * The maximum allowed length for the name used in the "from" field.
43
+ */
44
+ const MAXIMUM_NAME_LENGTH = 15;
45
+
46
+ /**
47
+ * The maximum allowed length for the message.
48
+ */
49
+ const MAXIMUM_MESSAGE_LENGTH = 9500;
50
+
51
+ /**
52
+ * @var string
53
+ */
54
+ private $token;
55
+
56
+ /**
57
+ * @var string
58
+ */
59
+ private $room;
60
+
61
+ /**
62
+ * @var string
63
+ */
64
+ private $name;
65
+
66
+ /**
67
+ * @var bool
68
+ */
69
+ private $notify;
70
+
71
+ /**
72
+ * @var string
73
+ */
74
+ private $format;
75
+
76
+ /**
77
+ * @var string
78
+ */
79
+ private $host;
80
+
81
+ /**
82
+ * @var string
83
+ */
84
+ private $version;
85
+
86
+ /**
87
+ * @param string $token HipChat API Token
88
+ * @param string $room The room that should be alerted of the message (Id or Name)
89
+ * @param string $name Name used in the "from" field.
90
+ * @param bool $notify Trigger a notification in clients or not
91
+ * @param int $level The minimum logging level at which this handler will be triggered
92
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
93
+ * @param bool $useSSL Whether to connect via SSL.
94
+ * @param string $format The format of the messages (default to text, can be set to html if you have html in the messages)
95
+ * @param string $host The HipChat server hostname.
96
+ * @param string $version The HipChat API version (default HipChatHandler::API_V1)
97
+ */
98
+ public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'api.hipchat.com', $version = self::API_V1)
99
+ {
100
+ if ($version == self::API_V1 && !$this->validateStringLength($name, static::MAXIMUM_NAME_LENGTH)) {
101
+ throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.');
102
+ }
103
+
104
+ $connectionString = $useSSL ? 'ssl://'.$host.':443' : $host.':80';
105
+ parent::__construct($connectionString, $level, $bubble);
106
+
107
+ $this->token = $token;
108
+ $this->name = $name;
109
+ $this->notify = $notify;
110
+ $this->room = $room;
111
+ $this->format = $format;
112
+ $this->host = $host;
113
+ $this->version = $version;
114
+ }
115
+
116
+ /**
117
+ * {@inheritdoc}
118
+ *
119
+ * @param array $record
120
+ * @return string
121
+ */
122
+ protected function generateDataStream($record)
123
+ {
124
+ $content = $this->buildContent($record);
125
+
126
+ return $this->buildHeader($content) . $content;
127
+ }
128
+
129
+ /**
130
+ * Builds the body of API call
131
+ *
132
+ * @param array $record
133
+ * @return string
134
+ */
135
+ private function buildContent($record)
136
+ {
137
+ $dataArray = array(
138
+ 'notify' => $this->version == self::API_V1 ?
139
+ ($this->notify ? 1 : 0) :
140
+ ($this->notify ? 'true' : 'false'),
141
+ 'message' => $record['formatted'],
142
+ 'message_format' => $this->format,
143
+ 'color' => $this->getAlertColor($record['level']),
144
+ );
145
+
146
+ if (!$this->validateStringLength($dataArray['message'], static::MAXIMUM_MESSAGE_LENGTH)) {
147
+ if (function_exists('mb_substr')) {
148
+ $dataArray['message'] = mb_substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]';
149
+ } else {
150
+ $dataArray['message'] = substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]';
151
+ }
152
+ }
153
+
154
+ // if we are using the legacy API then we need to send some additional information
155
+ if ($this->version == self::API_V1) {
156
+ $dataArray['room_id'] = $this->room;
157
+ }
158
+
159
+ // append the sender name if it is set
160
+ // always append it if we use the v1 api (it is required in v1)
161
+ if ($this->version == self::API_V1 || $this->name !== null) {
162
+ $dataArray['from'] = (string) $this->name;
163
+ }
164
+
165
+ return http_build_query($dataArray);
166
+ }
167
+
168
+ /**
169
+ * Builds the header of the API Call
170
+ *
171
+ * @param string $content
172
+ * @return string
173
+ */
174
+ private function buildHeader($content)
175
+ {
176
+ if ($this->version == self::API_V1) {
177
+ $header = "POST /v1/rooms/message?format=json&auth_token={$this->token} HTTP/1.1\r\n";
178
+ } else {
179
+ // needed for rooms with special (spaces, etc) characters in the name
180
+ $room = rawurlencode($this->room);
181
+ $header = "POST /v2/room/{$room}/notification?auth_token={$this->token} HTTP/1.1\r\n";
182
+ }
183
+
184
+ $header .= "Host: {$this->host}\r\n";
185
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
186
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
187
+ $header .= "\r\n";
188
+
189
+ return $header;
190
+ }
191
+
192
+ /**
193
+ * Assigns a color to each level of log records.
194
+ *
195
+ * @param int $level
196
+ * @return string
197
+ */
198
+ protected function getAlertColor($level)
199
+ {
200
+ switch (true) {
201
+ case $level >= Logger::ERROR:
202
+ return 'red';
203
+ case $level >= Logger::WARNING:
204
+ return 'yellow';
205
+ case $level >= Logger::INFO:
206
+ return 'green';
207
+ case $level == Logger::DEBUG:
208
+ return 'gray';
209
+ default:
210
+ return 'yellow';
211
+ }
212
+ }
213
+
214
+ /**
215
+ * {@inheritdoc}
216
+ *
217
+ * @param array $record
218
+ */
219
+ protected function write(array $record)
220
+ {
221
+ parent::write($record);
222
+ $this->finalizeWrite();
223
+ }
224
+
225
+ /**
226
+ * Finalizes the request by reading some bytes and then closing the socket
227
+ *
228
+ * If we do not read some but close the socket too early, hipchat sometimes
229
+ * drops the request entirely.
230
+ */
231
+ protected function finalizeWrite()
232
+ {
233
+ $res = $this->getResource();
234
+ if (is_resource($res)) {
235
+ @fread($res, 2048);
236
+ }
237
+ $this->closeSocket();
238
+ }
239
+
240
+ /**
241
+ * {@inheritdoc}
242
+ */
243
+ public function handleBatch(array $records)
244
+ {
245
+ if (count($records) == 0) {
246
+ return true;
247
+ }
248
+
249
+ $batchRecords = $this->combineRecords($records);
250
+
251
+ $handled = false;
252
+ foreach ($batchRecords as $batchRecord) {
253
+ if ($this->isHandling($batchRecord)) {
254
+ $this->write($batchRecord);
255
+ $handled = true;
256
+ }
257
+ }
258
+
259
+ if (!$handled) {
260
+ return false;
261
+ }
262
+
263
+ return false === $this->bubble;
264
+ }
265
+
266
+ /**
267
+ * Combines multiple records into one. Error level of the combined record
268
+ * will be the highest level from the given records. Datetime will be taken
269
+ * from the first record.
270
+ *
271
+ * @param $records
272
+ * @return array
273
+ */
274
+ private function combineRecords($records)
275
+ {
276
+ $batchRecord = null;
277
+ $batchRecords = array();
278
+ $messages = array();
279
+ $formattedMessages = array();
280
+ $level = 0;
281
+ $levelName = null;
282
+ $datetime = null;
283
+
284
+ foreach ($records as $record) {
285
+ $record = $this->processRecord($record);
286
+
287
+ if ($record['level'] > $level) {
288
+ $level = $record['level'];
289
+ $levelName = $record['level_name'];
290
+ }
291
+
292
+ if (null === $datetime) {
293
+ $datetime = $record['datetime'];
294
+ }
295
+
296
+ $messages[] = $record['message'];
297
+ $messageStr = implode(PHP_EOL, $messages);
298
+ $formattedMessages[] = $this->getFormatter()->format($record);
299
+ $formattedMessageStr = implode('', $formattedMessages);
300
+
301
+ $batchRecord = array(
302
+ 'message' => $messageStr,
303
+ 'formatted' => $formattedMessageStr,
304
+ 'context' => array(),
305
+ 'extra' => array(),
306
+ );
307
+
308
+ if (!$this->validateStringLength($batchRecord['formatted'], static::MAXIMUM_MESSAGE_LENGTH)) {
309
+ // Pop the last message and implode the remaining messages
310
+ $lastMessage = array_pop($messages);
311
+ $lastFormattedMessage = array_pop($formattedMessages);
312
+ $batchRecord['message'] = implode(PHP_EOL, $messages);
313
+ $batchRecord['formatted'] = implode('', $formattedMessages);
314
+
315
+ $batchRecords[] = $batchRecord;
316
+ $messages = array($lastMessage);
317
+ $formattedMessages = array($lastFormattedMessage);
318
+
319
+ $batchRecord = null;
320
+ }
321
+ }
322
+
323
+ if (null !== $batchRecord) {
324
+ $batchRecords[] = $batchRecord;
325
+ }
326
+
327
+ // Set the max level and datetime for all records
328
+ foreach ($batchRecords as &$batchRecord) {
329
+ $batchRecord = array_merge(
330
+ $batchRecord,
331
+ array(
332
+ 'level' => $level,
333
+ 'level_name' => $levelName,
334
+ 'datetime' => $datetime,
335
+ )
336
+ );
337
+ }
338
+
339
+ return $batchRecords;
340
+ }
341
+
342
+ /**
343
+ * Validates the length of a string.
344
+ *
345
+ * If the `mb_strlen()` function is available, it will use that, as HipChat
346
+ * allows UTF-8 characters. Otherwise, it will fall back to `strlen()`.
347
+ *
348
+ * Note that this might cause false failures in the specific case of using
349
+ * a valid name with less than 16 characters, but 16 or more bytes, on a
350
+ * system where `mb_strlen()` is unavailable.
351
+ *
352
+ * @param string $str
353
+ * @param int $length
354
+ *
355
+ * @return bool
356
+ */
357
+ private function validateStringLength($str, $length)
358
+ {
359
+ if (function_exists('mb_strlen')) {
360
+ return (mb_strlen($str) <= $length);
361
+ }
362
+
363
+ return (strlen($str) <= $length);
364
+ }
365
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * IFTTTHandler uses cURL to trigger IFTTT Maker actions
18
+ *
19
+ * Register a secret key and trigger/event name at https://ifttt.com/maker
20
+ *
21
+ * value1 will be the channel from monolog's Logger constructor,
22
+ * value2 will be the level name (ERROR, WARNING, ..)
23
+ * value3 will be the log record's message
24
+ *
25
+ * @author Nehal Patel <nehal@nehalpatel.me>
26
+ */
27
+ class IFTTTHandler extends AbstractProcessingHandler
28
+ {
29
+ private $eventName;
30
+ private $secretKey;
31
+
32
+ /**
33
+ * @param string $eventName The name of the IFTTT Maker event that should be triggered
34
+ * @param string $secretKey A valid IFTTT secret key
35
+ * @param int $level The minimum logging level at which this handler will be triggered
36
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
37
+ */
38
+ public function __construct($eventName, $secretKey, $level = Logger::ERROR, $bubble = true)
39
+ {
40
+ $this->eventName = $eventName;
41
+ $this->secretKey = $secretKey;
42
+
43
+ parent::__construct($level, $bubble);
44
+ }
45
+
46
+ /**
47
+ * {@inheritdoc}
48
+ */
49
+ public function write(array $record)
50
+ {
51
+ $postData = array(
52
+ "value1" => $record["channel"],
53
+ "value2" => $record["level_name"],
54
+ "value3" => $record["message"],
55
+ );
56
+ $postString = json_encode($postData);
57
+
58
+ $ch = curl_init();
59
+ curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey);
60
+ curl_setopt($ch, CURLOPT_POST, true);
61
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
62
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
63
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array(
64
+ "Content-Type: application/json",
65
+ ));
66
+
67
+ Curl\Util::execute($ch);
68
+ }
69
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Inspired on LogEntriesHandler.
18
+ *
19
+ * @author Robert Kaufmann III <rok3@rok3.me>
20
+ * @author Gabriel Machado <gabriel.ms1@hotmail.com>
21
+ */
22
+ class InsightOpsHandler extends SocketHandler
23
+ {
24
+ /**
25
+ * @var string
26
+ */
27
+ protected $logToken;
28
+
29
+ /**
30
+ * @param string $token Log token supplied by InsightOps
31
+ * @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'.
32
+ * @param bool $useSSL Whether or not SSL encryption should be used
33
+ * @param int $level The minimum logging level to trigger this handler
34
+ * @param bool $bubble Whether or not messages that are handled should bubble up the stack.
35
+ *
36
+ * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing
37
+ */
38
+ public function __construct($token, $region = 'us', $useSSL = true, $level = Logger::DEBUG, $bubble = true)
39
+ {
40
+ if ($useSSL && !extension_loaded('openssl')) {
41
+ throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler');
42
+ }
43
+
44
+ $endpoint = $useSSL
45
+ ? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443'
46
+ : $region . '.data.logs.insight.rapid7.com:80';
47
+
48
+ parent::__construct($endpoint, $level, $bubble);
49
+ $this->logToken = $token;
50
+ }
51
+
52
+ /**
53
+ * {@inheritdoc}
54
+ *
55
+ * @param array $record
56
+ * @return string
57
+ */
58
+ protected function generateDataStream($record)
59
+ {
60
+ return $this->logToken . ' ' . $record['formatted'];
61
+ }
62
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * @author Robert Kaufmann III <rok3@rok3.me>
18
+ */
19
+ class LogEntriesHandler extends SocketHandler
20
+ {
21
+ /**
22
+ * @var string
23
+ */
24
+ protected $logToken;
25
+
26
+ /**
27
+ * @param string $token Log token supplied by LogEntries
28
+ * @param bool $useSSL Whether or not SSL encryption should be used.
29
+ * @param int $level The minimum logging level to trigger this handler
30
+ * @param bool $bubble Whether or not messages that are handled should bubble up the stack.
31
+ *
32
+ * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing
33
+ */
34
+ public function __construct($token, $useSSL = true, $level = Logger::DEBUG, $bubble = true, $host = 'data.logentries.com')
35
+ {
36
+ if ($useSSL && !extension_loaded('openssl')) {
37
+ throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler');
38
+ }
39
+
40
+ $endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80';
41
+ parent::__construct($endpoint, $level, $bubble);
42
+ $this->logToken = $token;
43
+ }
44
+
45
+ /**
46
+ * {@inheritdoc}
47
+ *
48
+ * @param array $record
49
+ * @return string
50
+ */
51
+ protected function generateDataStream($record)
52
+ {
53
+ return $this->logToken . ' ' . $record['formatted'];
54
+ }
55
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\LogglyFormatter;
16
+
17
+ /**
18
+ * Sends errors to Loggly.
19
+ *
20
+ * @author Przemek Sobstel <przemek@sobstel.org>
21
+ * @author Adam Pancutt <adam@pancutt.com>
22
+ * @author Gregory Barchard <gregory@barchard.net>
23
+ */
24
+ class LogglyHandler extends AbstractProcessingHandler
25
+ {
26
+ const HOST = 'logs-01.loggly.com';
27
+ const ENDPOINT_SINGLE = 'inputs';
28
+ const ENDPOINT_BATCH = 'bulk';
29
+
30
+ protected $token;
31
+
32
+ protected $tag = array();
33
+
34
+ public function __construct($token, $level = Logger::DEBUG, $bubble = true)
35
+ {
36
+ if (!extension_loaded('curl')) {
37
+ throw new \LogicException('The curl extension is needed to use the LogglyHandler');
38
+ }
39
+
40
+ $this->token = $token;
41
+
42
+ parent::__construct($level, $bubble);
43
+ }
44
+
45
+ public function setTag($tag)
46
+ {
47
+ $tag = !empty($tag) ? $tag : array();
48
+ $this->tag = is_array($tag) ? $tag : array($tag);
49
+ }
50
+
51
+ public function addTag($tag)
52
+ {
53
+ if (!empty($tag)) {
54
+ $tag = is_array($tag) ? $tag : array($tag);
55
+ $this->tag = array_unique(array_merge($this->tag, $tag));
56
+ }
57
+ }
58
+
59
+ protected function write(array $record)
60
+ {
61
+ $this->send($record["formatted"], self::ENDPOINT_SINGLE);
62
+ }
63
+
64
+ public function handleBatch(array $records)
65
+ {
66
+ $level = $this->level;
67
+
68
+ $records = array_filter($records, function ($record) use ($level) {
69
+ return ($record['level'] >= $level);
70
+ });
71
+
72
+ if ($records) {
73
+ $this->send($this->getFormatter()->formatBatch($records), self::ENDPOINT_BATCH);
74
+ }
75
+ }
76
+
77
+ protected function send($data, $endpoint)
78
+ {
79
+ $url = sprintf("https://%s/%s/%s/", self::HOST, $endpoint, $this->token);
80
+
81
+ $headers = array('Content-Type: application/json');
82
+
83
+ if (!empty($this->tag)) {
84
+ $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag);
85
+ }
86
+
87
+ $ch = curl_init();
88
+
89
+ curl_setopt($ch, CURLOPT_URL, $url);
90
+ curl_setopt($ch, CURLOPT_POST, true);
91
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
92
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
93
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
94
+
95
+ Curl\Util::execute($ch);
96
+ }
97
+
98
+ protected function getDefaultFormatter()
99
+ {
100
+ return new LogglyFormatter();
101
+ }
102
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ /**
15
+ * Base class for all mail handlers
16
+ *
17
+ * @author Gyula Sallai
18
+ */
19
+ abstract class MailHandler extends AbstractProcessingHandler
20
+ {
21
+ /**
22
+ * {@inheritdoc}
23
+ */
24
+ public function handleBatch(array $records)
25
+ {
26
+ $messages = array();
27
+
28
+ foreach ($records as $record) {
29
+ if ($record['level'] < $this->level) {
30
+ continue;
31
+ }
32
+ $messages[] = $this->processRecord($record);
33
+ }
34
+
35
+ if (!empty($messages)) {
36
+ $this->send((string) $this->getFormatter()->formatBatch($messages), $messages);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Send a mail with the given content
42
+ *
43
+ * @param string $content formatted email body to be sent
44
+ * @param array $records the array of log records that formed this content
45
+ */
46
+ abstract protected function send($content, array $records);
47
+
48
+ /**
49
+ * {@inheritdoc}
50
+ */
51
+ protected function write(array $record)
52
+ {
53
+ $this->send((string) $record['formatted'], array($record));
54
+ }
55
+
56
+ protected function getHighestRecord(array $records)
57
+ {
58
+ $highestRecord = null;
59
+ foreach ($records as $record) {
60
+ if ($highestRecord === null || $highestRecord['level'] < $record['level']) {
61
+ $highestRecord = $record;
62
+ }
63
+ }
64
+
65
+ return $highestRecord;
66
+ }
67
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * MandrillHandler uses cURL to send the emails to the Mandrill API
18
+ *
19
+ * @author Adam Nicholson <adamnicholson10@gmail.com>
20
+ */
21
+ class MandrillHandler extends MailHandler
22
+ {
23
+ protected $message;
24
+ protected $apiKey;
25
+
26
+ /**
27
+ * @param string $apiKey A valid Mandrill API key
28
+ * @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced
29
+ * @param int $level The minimum logging level at which this handler will be triggered
30
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
31
+ */
32
+ public function __construct($apiKey, $message, $level = Logger::ERROR, $bubble = true)
33
+ {
34
+ parent::__construct($level, $bubble);
35
+
36
+ if (!$message instanceof \Swift_Message && is_callable($message)) {
37
+ $message = call_user_func($message);
38
+ }
39
+ if (!$message instanceof \Swift_Message) {
40
+ throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it');
41
+ }
42
+ $this->message = $message;
43
+ $this->apiKey = $apiKey;
44
+ }
45
+
46
+ /**
47
+ * {@inheritdoc}
48
+ */
49
+ protected function send($content, array $records)
50
+ {
51
+ $message = clone $this->message;
52
+ $message->setBody($content);
53
+ $message->setDate(time());
54
+
55
+ $ch = curl_init();
56
+
57
+ curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json');
58
+ curl_setopt($ch, CURLOPT_POST, 1);
59
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
60
+ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
61
+ 'key' => $this->apiKey,
62
+ 'raw_message' => (string) $message,
63
+ 'async' => false,
64
+ )));
65
+
66
+ Curl\Util::execute($ch);
67
+ }
68
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ /**
15
+ * Exception can be thrown if an extension for an handler is missing
16
+ *
17
+ * @author Christian Bergau <cbergau86@gmail.com>
18
+ */
19
+ class MissingExtensionException extends \Exception
20
+ {
21
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\NormalizerFormatter;
16
+
17
+ /**
18
+ * Logs to a MongoDB database.
19
+ *
20
+ * usage example:
21
+ *
22
+ * $log = new Logger('application');
23
+ * $mongodb = new MongoDBHandler(new \Mongo("mongodb://localhost:27017"), "logs", "prod");
24
+ * $log->pushHandler($mongodb);
25
+ *
26
+ * @author Thomas Tourlourat <thomas@tourlourat.com>
27
+ */
28
+ class MongoDBHandler extends AbstractProcessingHandler
29
+ {
30
+ protected $mongoCollection;
31
+
32
+ public function __construct($mongo, $database, $collection, $level = Logger::DEBUG, $bubble = true)
33
+ {
34
+ if (!($mongo instanceof \MongoClient || $mongo instanceof \Mongo || $mongo instanceof \MongoDB\Client)) {
35
+ throw new \InvalidArgumentException('MongoClient, Mongo or MongoDB\Client instance required');
36
+ }
37
+
38
+ $this->mongoCollection = $mongo->selectCollection($database, $collection);
39
+
40
+ parent::__construct($level, $bubble);
41
+ }
42
+
43
+ protected function write(array $record)
44
+ {
45
+ if ($this->mongoCollection instanceof \MongoDB\Collection) {
46
+ $this->mongoCollection->insertOne($record["formatted"]);
47
+ } else {
48
+ $this->mongoCollection->save($record["formatted"]);
49
+ }
50
+ }
51
+
52
+ /**
53
+ * {@inheritDoc}
54
+ */
55
+ protected function getDefaultFormatter()
56
+ {
57
+ return new NormalizerFormatter();
58
+ }
59
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\LineFormatter;
16
+
17
+ /**
18
+ * NativeMailerHandler uses the mail() function to send the emails
19
+ *
20
+ * @author Christophe Coevoet <stof@notk.org>
21
+ * @author Mark Garrett <mark@moderndeveloperllc.com>
22
+ */
23
+ class NativeMailerHandler extends MailHandler
24
+ {
25
+ /**
26
+ * The email addresses to which the message will be sent
27
+ * @var array
28
+ */
29
+ protected $to;
30
+
31
+ /**
32
+ * The subject of the email
33
+ * @var string
34
+ */
35
+ protected $subject;
36
+
37
+ /**
38
+ * Optional headers for the message
39
+ * @var array
40
+ */
41
+ protected $headers = array();
42
+
43
+ /**
44
+ * Optional parameters for the message
45
+ * @var array
46
+ */
47
+ protected $parameters = array();
48
+
49
+ /**
50
+ * The wordwrap length for the message
51
+ * @var int
52
+ */
53
+ protected $maxColumnWidth;
54
+
55
+ /**
56
+ * The Content-type for the message
57
+ * @var string
58
+ */
59
+ protected $contentType = 'text/plain';
60
+
61
+ /**
62
+ * The encoding for the message
63
+ * @var string
64
+ */
65
+ protected $encoding = 'utf-8';
66
+
67
+ /**
68
+ * @param string|array $to The receiver of the mail
69
+ * @param string $subject The subject of the mail
70
+ * @param string $from The sender of the mail
71
+ * @param int $level The minimum logging level at which this handler will be triggered
72
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
73
+ * @param int $maxColumnWidth The maximum column width that the message lines will have
74
+ */
75
+ public function __construct($to, $subject, $from, $level = Logger::ERROR, $bubble = true, $maxColumnWidth = 70)
76
+ {
77
+ parent::__construct($level, $bubble);
78
+ $this->to = is_array($to) ? $to : array($to);
79
+ $this->subject = $subject;
80
+ $this->addHeader(sprintf('From: %s', $from));
81
+ $this->maxColumnWidth = $maxColumnWidth;
82
+ }
83
+
84
+ /**
85
+ * Add headers to the message
86
+ *
87
+ * @param string|array $headers Custom added headers
88
+ * @return self
89
+ */
90
+ public function addHeader($headers)
91
+ {
92
+ foreach ((array) $headers as $header) {
93
+ if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) {
94
+ throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons');
95
+ }
96
+ $this->headers[] = $header;
97
+ }
98
+
99
+ return $this;
100
+ }
101
+
102
+ /**
103
+ * Add parameters to the message
104
+ *
105
+ * @param string|array $parameters Custom added parameters
106
+ * @return self
107
+ */
108
+ public function addParameter($parameters)
109
+ {
110
+ $this->parameters = array_merge($this->parameters, (array) $parameters);
111
+
112
+ return $this;
113
+ }
114
+
115
+ /**
116
+ * {@inheritdoc}
117
+ */
118
+ protected function send($content, array $records)
119
+ {
120
+ $content = wordwrap($content, $this->maxColumnWidth);
121
+ $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n");
122
+ $headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n";
123
+ if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) {
124
+ $headers .= 'MIME-Version: 1.0' . "\r\n";
125
+ }
126
+
127
+ $subject = $this->subject;
128
+ if ($records) {
129
+ $subjectFormatter = new LineFormatter($this->subject);
130
+ $subject = $subjectFormatter->format($this->getHighestRecord($records));
131
+ }
132
+
133
+ $parameters = implode(' ', $this->parameters);
134
+ foreach ($this->to as $to) {
135
+ mail($to, $subject, $content, $headers, $parameters);
136
+ }
137
+ }
138
+
139
+ /**
140
+ * @return string $contentType
141
+ */
142
+ public function getContentType()
143
+ {
144
+ return $this->contentType;
145
+ }
146
+
147
+ /**
148
+ * @return string $encoding
149
+ */
150
+ public function getEncoding()
151
+ {
152
+ return $this->encoding;
153
+ }
154
+
155
+ /**
156
+ * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML
157
+ * messages.
158
+ * @return self
159
+ */
160
+ public function setContentType($contentType)
161
+ {
162
+ if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) {
163
+ throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection');
164
+ }
165
+
166
+ $this->contentType = $contentType;
167
+
168
+ return $this;
169
+ }
170
+
171
+ /**
172
+ * @param string $encoding
173
+ * @return self
174
+ */
175
+ public function setEncoding($encoding)
176
+ {
177
+ if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) {
178
+ throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection');
179
+ }
180
+
181
+ $this->encoding = $encoding;
182
+
183
+ return $this;
184
+ }
185
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\NormalizerFormatter;
16
+
17
+ /**
18
+ * Class to record a log on a NewRelic application.
19
+ * Enabling New Relic High Security mode may prevent capture of useful information.
20
+ *
21
+ * This handler requires a NormalizerFormatter to function and expects an array in $record['formatted']
22
+ *
23
+ * @see https://docs.newrelic.com/docs/agents/php-agent
24
+ * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security
25
+ */
26
+ class NewRelicHandler extends AbstractProcessingHandler
27
+ {
28
+ /**
29
+ * Name of the New Relic application that will receive logs from this handler.
30
+ *
31
+ * @var string
32
+ */
33
+ protected $appName;
34
+
35
+ /**
36
+ * Name of the current transaction
37
+ *
38
+ * @var string
39
+ */
40
+ protected $transactionName;
41
+
42
+ /**
43
+ * Some context and extra data is passed into the handler as arrays of values. Do we send them as is
44
+ * (useful if we are using the API), or explode them for display on the NewRelic RPM website?
45
+ *
46
+ * @var bool
47
+ */
48
+ protected $explodeArrays;
49
+
50
+ /**
51
+ * {@inheritDoc}
52
+ *
53
+ * @param string $appName
54
+ * @param bool $explodeArrays
55
+ * @param string $transactionName
56
+ */
57
+ public function __construct(
58
+ $level = Logger::ERROR,
59
+ $bubble = true,
60
+ $appName = null,
61
+ $explodeArrays = false,
62
+ $transactionName = null
63
+ ) {
64
+ parent::__construct($level, $bubble);
65
+
66
+ $this->appName = $appName;
67
+ $this->explodeArrays = $explodeArrays;
68
+ $this->transactionName = $transactionName;
69
+ }
70
+
71
+ /**
72
+ * {@inheritDoc}
73
+ */
74
+ protected function write(array $record)
75
+ {
76
+ if (!$this->isNewRelicEnabled()) {
77
+ throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');
78
+ }
79
+
80
+ if ($appName = $this->getAppName($record['context'])) {
81
+ $this->setNewRelicAppName($appName);
82
+ }
83
+
84
+ if ($transactionName = $this->getTransactionName($record['context'])) {
85
+ $this->setNewRelicTransactionName($transactionName);
86
+ unset($record['formatted']['context']['transaction_name']);
87
+ }
88
+
89
+ if (isset($record['context']['exception']) && ($record['context']['exception'] instanceof \Exception || (PHP_VERSION_ID >= 70000 && $record['context']['exception'] instanceof \Throwable))) {
90
+ newrelic_notice_error($record['message'], $record['context']['exception']);
91
+ unset($record['formatted']['context']['exception']);
92
+ } else {
93
+ newrelic_notice_error($record['message']);
94
+ }
95
+
96
+ if (isset($record['formatted']['context']) && is_array($record['formatted']['context'])) {
97
+ foreach ($record['formatted']['context'] as $key => $parameter) {
98
+ if (is_array($parameter) && $this->explodeArrays) {
99
+ foreach ($parameter as $paramKey => $paramValue) {
100
+ $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue);
101
+ }
102
+ } else {
103
+ $this->setNewRelicParameter('context_' . $key, $parameter);
104
+ }
105
+ }
106
+ }
107
+
108
+ if (isset($record['formatted']['extra']) && is_array($record['formatted']['extra'])) {
109
+ foreach ($record['formatted']['extra'] as $key => $parameter) {
110
+ if (is_array($parameter) && $this->explodeArrays) {
111
+ foreach ($parameter as $paramKey => $paramValue) {
112
+ $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue);
113
+ }
114
+ } else {
115
+ $this->setNewRelicParameter('extra_' . $key, $parameter);
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Checks whether the NewRelic extension is enabled in the system.
123
+ *
124
+ * @return bool
125
+ */
126
+ protected function isNewRelicEnabled()
127
+ {
128
+ return extension_loaded('newrelic');
129
+ }
130
+
131
+ /**
132
+ * Returns the appname where this log should be sent. Each log can override the default appname, set in this
133
+ * handler's constructor, by providing the appname in it's context.
134
+ *
135
+ * @param array $context
136
+ * @return null|string
137
+ */
138
+ protected function getAppName(array $context)
139
+ {
140
+ if (isset($context['appname'])) {
141
+ return $context['appname'];
142
+ }
143
+
144
+ return $this->appName;
145
+ }
146
+
147
+ /**
148
+ * Returns the name of the current transaction. Each log can override the default transaction name, set in this
149
+ * handler's constructor, by providing the transaction_name in it's context
150
+ *
151
+ * @param array $context
152
+ *
153
+ * @return null|string
154
+ */
155
+ protected function getTransactionName(array $context)
156
+ {
157
+ if (isset($context['transaction_name'])) {
158
+ return $context['transaction_name'];
159
+ }
160
+
161
+ return $this->transactionName;
162
+ }
163
+
164
+ /**
165
+ * Sets the NewRelic application that should receive this log.
166
+ *
167
+ * @param string $appName
168
+ */
169
+ protected function setNewRelicAppName($appName)
170
+ {
171
+ newrelic_set_appname($appName);
172
+ }
173
+
174
+ /**
175
+ * Overwrites the name of the current transaction
176
+ *
177
+ * @param string $transactionName
178
+ */
179
+ protected function setNewRelicTransactionName($transactionName)
180
+ {
181
+ newrelic_name_transaction($transactionName);
182
+ }
183
+
184
+ /**
185
+ * @param string $key
186
+ * @param mixed $value
187
+ */
188
+ protected function setNewRelicParameter($key, $value)
189
+ {
190
+ if (null === $value || is_scalar($value)) {
191
+ newrelic_add_custom_parameter($key, $value);
192
+ } else {
193
+ newrelic_add_custom_parameter($key, @json_encode($value));
194
+ }
195
+ }
196
+
197
+ /**
198
+ * {@inheritDoc}
199
+ */
200
+ protected function getDefaultFormatter()
201
+ {
202
+ return new NormalizerFormatter();
203
+ }
204
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Blackhole
18
+ *
19
+ * Any record it can handle will be thrown away. This can be used
20
+ * to put on top of an existing stack to override it temporarily.
21
+ *
22
+ * @author Jordi Boggiano <j.boggiano@seld.be>
23
+ */
24
+ class NullHandler extends AbstractHandler
25
+ {
26
+ /**
27
+ * @param int $level The minimum logging level at which this handler will be triggered
28
+ */
29
+ public function __construct($level = Logger::DEBUG)
30
+ {
31
+ parent::__construct($level, false);
32
+ }
33
+
34
+ /**
35
+ * {@inheritdoc}
36
+ */
37
+ public function handle(array $record)
38
+ {
39
+ if ($record['level'] < $this->level) {
40
+ return false;
41
+ }
42
+
43
+ return true;
44
+ }
45
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Exception;
15
+ use Monolog\Formatter\LineFormatter;
16
+ use Monolog\Logger;
17
+ use PhpConsole\Connector;
18
+ use PhpConsole\Handler;
19
+ use PhpConsole\Helper;
20
+
21
+ /**
22
+ * Monolog handler for Google Chrome extension "PHP Console"
23
+ *
24
+ * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely
25
+ *
26
+ * Usage:
27
+ * 1. Install Google Chrome extension https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef
28
+ * 2. See overview https://github.com/barbushin/php-console#overview
29
+ * 3. Install PHP Console library https://github.com/barbushin/php-console#installation
30
+ * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png)
31
+ *
32
+ * $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler()));
33
+ * \Monolog\ErrorHandler::register($logger);
34
+ * echo $undefinedVar;
35
+ * $logger->addDebug('SELECT * FROM users', array('db', 'time' => 0.012));
36
+ * PC::debug($_SERVER); // PHP Console debugger for any type of vars
37
+ *
38
+ * @author Sergey Barbushin https://www.linkedin.com/in/barbushin
39
+ */
40
+ class PHPConsoleHandler extends AbstractProcessingHandler
41
+ {
42
+ private $options = array(
43
+ 'enabled' => true, // bool Is PHP Console server enabled
44
+ 'classesPartialsTraceIgnore' => array('Monolog\\'), // array Hide calls of classes started with...
45
+ 'debugTagsKeysInContext' => array(0, 'tag'), // bool Is PHP Console server enabled
46
+ 'useOwnErrorsHandler' => false, // bool Enable errors handling
47
+ 'useOwnExceptionsHandler' => false, // bool Enable exceptions handling
48
+ 'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths
49
+ 'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s')
50
+ 'serverEncoding' => null, // string|null Server internal encoding
51
+ 'headersLimit' => null, // int|null Set headers size limit for your web-server
52
+ 'password' => null, // string|null Protect PHP Console connection by password
53
+ 'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed
54
+ 'ipMasks' => array(), // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1')
55
+ 'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required)
56
+ 'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings
57
+ 'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level
58
+ 'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number
59
+ 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item
60
+ 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON
61
+ 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug
62
+ 'dataStorage' => null, // PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ)
63
+ );
64
+
65
+ /** @var Connector */
66
+ private $connector;
67
+
68
+ /**
69
+ * @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details
70
+ * @param Connector|null $connector Instance of \PhpConsole\Connector class (optional)
71
+ * @param int $level
72
+ * @param bool $bubble
73
+ * @throws Exception
74
+ */
75
+ public function __construct(array $options = array(), Connector $connector = null, $level = Logger::DEBUG, $bubble = true)
76
+ {
77
+ if (!class_exists('PhpConsole\Connector')) {
78
+ throw new Exception('PHP Console library not found. See https://github.com/barbushin/php-console#installation');
79
+ }
80
+ parent::__construct($level, $bubble);
81
+ $this->options = $this->initOptions($options);
82
+ $this->connector = $this->initConnector($connector);
83
+ }
84
+
85
+ private function initOptions(array $options)
86
+ {
87
+ $wrongOptions = array_diff(array_keys($options), array_keys($this->options));
88
+ if ($wrongOptions) {
89
+ throw new Exception('Unknown options: ' . implode(', ', $wrongOptions));
90
+ }
91
+
92
+ return array_replace($this->options, $options);
93
+ }
94
+
95
+ private function initConnector(Connector $connector = null)
96
+ {
97
+ if (!$connector) {
98
+ if ($this->options['dataStorage']) {
99
+ Connector::setPostponeStorage($this->options['dataStorage']);
100
+ }
101
+ $connector = Connector::getInstance();
102
+ }
103
+
104
+ if ($this->options['registerHelper'] && !Helper::isRegistered()) {
105
+ Helper::register();
106
+ }
107
+
108
+ if ($this->options['enabled'] && $connector->isActiveClient()) {
109
+ if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) {
110
+ $handler = Handler::getInstance();
111
+ $handler->setHandleErrors($this->options['useOwnErrorsHandler']);
112
+ $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']);
113
+ $handler->start();
114
+ }
115
+ if ($this->options['sourcesBasePath']) {
116
+ $connector->setSourcesBasePath($this->options['sourcesBasePath']);
117
+ }
118
+ if ($this->options['serverEncoding']) {
119
+ $connector->setServerEncoding($this->options['serverEncoding']);
120
+ }
121
+ if ($this->options['password']) {
122
+ $connector->setPassword($this->options['password']);
123
+ }
124
+ if ($this->options['enableSslOnlyMode']) {
125
+ $connector->enableSslOnlyMode();
126
+ }
127
+ if ($this->options['ipMasks']) {
128
+ $connector->setAllowedIpMasks($this->options['ipMasks']);
129
+ }
130
+ if ($this->options['headersLimit']) {
131
+ $connector->setHeadersLimit($this->options['headersLimit']);
132
+ }
133
+ if ($this->options['detectDumpTraceAndSource']) {
134
+ $connector->getDebugDispatcher()->detectTraceAndSource = true;
135
+ }
136
+ $dumper = $connector->getDumper();
137
+ $dumper->levelLimit = $this->options['dumperLevelLimit'];
138
+ $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit'];
139
+ $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit'];
140
+ $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit'];
141
+ $dumper->detectCallbacks = $this->options['dumperDetectCallbacks'];
142
+ if ($this->options['enableEvalListener']) {
143
+ $connector->startEvalRequestsListener();
144
+ }
145
+ }
146
+
147
+ return $connector;
148
+ }
149
+
150
+ public function getConnector()
151
+ {
152
+ return $this->connector;
153
+ }
154
+
155
+ public function getOptions()
156
+ {
157
+ return $this->options;
158
+ }
159
+
160
+ public function handle(array $record)
161
+ {
162
+ if ($this->options['enabled'] && $this->connector->isActiveClient()) {
163
+ return parent::handle($record);
164
+ }
165
+
166
+ return !$this->bubble;
167
+ }
168
+
169
+ /**
170
+ * Writes the record down to the log of the implementing handler
171
+ *
172
+ * @param array $record
173
+ * @return void
174
+ */
175
+ protected function write(array $record)
176
+ {
177
+ if ($record['level'] < Logger::NOTICE) {
178
+ $this->handleDebugRecord($record);
179
+ } elseif (isset($record['context']['exception']) && $record['context']['exception'] instanceof Exception) {
180
+ $this->handleExceptionRecord($record);
181
+ } else {
182
+ $this->handleErrorRecord($record);
183
+ }
184
+ }
185
+
186
+ private function handleDebugRecord(array $record)
187
+ {
188
+ $tags = $this->getRecordTags($record);
189
+ $message = $record['message'];
190
+ if ($record['context']) {
191
+ $message .= ' ' . json_encode($this->connector->getDumper()->dump(array_filter($record['context'])));
192
+ }
193
+ $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']);
194
+ }
195
+
196
+ private function handleExceptionRecord(array $record)
197
+ {
198
+ $this->connector->getErrorsDispatcher()->dispatchException($record['context']['exception']);
199
+ }
200
+
201
+ private function handleErrorRecord(array $record)
202
+ {
203
+ $context = $record['context'];
204
+
205
+ $this->connector->getErrorsDispatcher()->dispatchError(
206
+ isset($context['code']) ? $context['code'] : null,
207
+ isset($context['message']) ? $context['message'] : $record['message'],
208
+ isset($context['file']) ? $context['file'] : null,
209
+ isset($context['line']) ? $context['line'] : null,
210
+ $this->options['classesPartialsTraceIgnore']
211
+ );
212
+ }
213
+
214
+ private function getRecordTags(array &$record)
215
+ {
216
+ $tags = null;
217
+ if (!empty($record['context'])) {
218
+ $context = & $record['context'];
219
+ foreach ($this->options['debugTagsKeysInContext'] as $key) {
220
+ if (!empty($context[$key])) {
221
+ $tags = $context[$key];
222
+ if ($key === 0) {
223
+ array_shift($context);
224
+ } else {
225
+ unset($context[$key]);
226
+ }
227
+ break;
228
+ }
229
+ }
230
+ }
231
+
232
+ return $tags ?: strtolower($record['level_name']);
233
+ }
234
+
235
+ /**
236
+ * {@inheritDoc}
237
+ */
238
+ protected function getDefaultFormatter()
239
+ {
240
+ return new LineFormatter('%message%');
241
+ }
242
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Psr\Log\LoggerInterface;
16
+
17
+ /**
18
+ * Proxies log messages to an existing PSR-3 compliant logger.
19
+ *
20
+ * @author Michael Moussa <michael.moussa@gmail.com>
21
+ */
22
+ class PsrHandler extends AbstractHandler
23
+ {
24
+ /**
25
+ * PSR-3 compliant logger
26
+ *
27
+ * @var LoggerInterface
28
+ */
29
+ protected $logger;
30
+
31
+ /**
32
+ * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied
33
+ * @param int $level The minimum logging level at which this handler will be triggered
34
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
35
+ */
36
+ public function __construct(LoggerInterface $logger, $level = Logger::DEBUG, $bubble = true)
37
+ {
38
+ parent::__construct($level, $bubble);
39
+
40
+ $this->logger = $logger;
41
+ }
42
+
43
+ /**
44
+ * {@inheritDoc}
45
+ */
46
+ public function handle(array $record)
47
+ {
48
+ if (!$this->isHandling($record)) {
49
+ return false;
50
+ }
51
+
52
+ $this->logger->log(strtolower($record['level_name']), $record['message'], $record['context']);
53
+
54
+ return false === $this->bubble;
55
+ }
56
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Sends notifications through the pushover api to mobile phones
18
+ *
19
+ * @author Sebastian Göttschkes <sebastian.goettschkes@googlemail.com>
20
+ * @see https://www.pushover.net/api
21
+ */
22
+ class PushoverHandler extends SocketHandler
23
+ {
24
+ private $token;
25
+ private $users;
26
+ private $title;
27
+ private $user;
28
+ private $retry;
29
+ private $expire;
30
+
31
+ private $highPriorityLevel;
32
+ private $emergencyLevel;
33
+ private $useFormattedMessage = false;
34
+
35
+ /**
36
+ * All parameters that can be sent to Pushover
37
+ * @see https://pushover.net/api
38
+ * @var array
39
+ */
40
+ private $parameterNames = array(
41
+ 'token' => true,
42
+ 'user' => true,
43
+ 'message' => true,
44
+ 'device' => true,
45
+ 'title' => true,
46
+ 'url' => true,
47
+ 'url_title' => true,
48
+ 'priority' => true,
49
+ 'timestamp' => true,
50
+ 'sound' => true,
51
+ 'retry' => true,
52
+ 'expire' => true,
53
+ 'callback' => true,
54
+ );
55
+
56
+ /**
57
+ * Sounds the api supports by default
58
+ * @see https://pushover.net/api#sounds
59
+ * @var array
60
+ */
61
+ private $sounds = array(
62
+ 'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming',
63
+ 'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb',
64
+ 'persistent', 'echo', 'updown', 'none',
65
+ );
66
+
67
+ /**
68
+ * @param string $token Pushover api token
69
+ * @param string|array $users Pushover user id or array of ids the message will be sent to
70
+ * @param string $title Title sent to the Pushover API
71
+ * @param int $level The minimum logging level at which this handler will be triggered
72
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
73
+ * @param bool $useSSL Whether to connect via SSL. Required when pushing messages to users that are not
74
+ * the pushover.net app owner. OpenSSL is required for this option.
75
+ * @param int $highPriorityLevel The minimum logging level at which this handler will start
76
+ * sending "high priority" requests to the Pushover API
77
+ * @param int $emergencyLevel The minimum logging level at which this handler will start
78
+ * sending "emergency" requests to the Pushover API
79
+ * @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will send the same notification to the user.
80
+ * @param int $expire The expire parameter specifies how many seconds your notification will continue to be retried for (every retry seconds).
81
+ */
82
+ public function __construct($token, $users, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, $retry = 30, $expire = 25200)
83
+ {
84
+ $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80';
85
+ parent::__construct($connectionString, $level, $bubble);
86
+
87
+ $this->token = $token;
88
+ $this->users = (array) $users;
89
+ $this->title = $title ?: gethostname();
90
+ $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel);
91
+ $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel);
92
+ $this->retry = $retry;
93
+ $this->expire = $expire;
94
+ }
95
+
96
+ protected function generateDataStream($record)
97
+ {
98
+ $content = $this->buildContent($record);
99
+
100
+ return $this->buildHeader($content) . $content;
101
+ }
102
+
103
+ private function buildContent($record)
104
+ {
105
+ // Pushover has a limit of 512 characters on title and message combined.
106
+ $maxMessageLength = 512 - strlen($this->title);
107
+
108
+ $message = ($this->useFormattedMessage) ? $record['formatted'] : $record['message'];
109
+ $message = substr($message, 0, $maxMessageLength);
110
+
111
+ $timestamp = $record['datetime']->getTimestamp();
112
+
113
+ $dataArray = array(
114
+ 'token' => $this->token,
115
+ 'user' => $this->user,
116
+ 'message' => $message,
117
+ 'title' => $this->title,
118
+ 'timestamp' => $timestamp,
119
+ );
120
+
121
+ if (isset($record['level']) && $record['level'] >= $this->emergencyLevel) {
122
+ $dataArray['priority'] = 2;
123
+ $dataArray['retry'] = $this->retry;
124
+ $dataArray['expire'] = $this->expire;
125
+ } elseif (isset($record['level']) && $record['level'] >= $this->highPriorityLevel) {
126
+ $dataArray['priority'] = 1;
127
+ }
128
+
129
+ // First determine the available parameters
130
+ $context = array_intersect_key($record['context'], $this->parameterNames);
131
+ $extra = array_intersect_key($record['extra'], $this->parameterNames);
132
+
133
+ // Least important info should be merged with subsequent info
134
+ $dataArray = array_merge($extra, $context, $dataArray);
135
+
136
+ // Only pass sounds that are supported by the API
137
+ if (isset($dataArray['sound']) && !in_array($dataArray['sound'], $this->sounds)) {
138
+ unset($dataArray['sound']);
139
+ }
140
+
141
+ return http_build_query($dataArray);
142
+ }
143
+
144
+ private function buildHeader($content)
145
+ {
146
+ $header = "POST /1/messages.json HTTP/1.1\r\n";
147
+ $header .= "Host: api.pushover.net\r\n";
148
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
149
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
150
+ $header .= "\r\n";
151
+
152
+ return $header;
153
+ }
154
+
155
+ protected function write(array $record)
156
+ {
157
+ foreach ($this->users as $user) {
158
+ $this->user = $user;
159
+
160
+ parent::write($record);
161
+ $this->closeSocket();
162
+ }
163
+
164
+ $this->user = null;
165
+ }
166
+
167
+ public function setHighPriorityLevel($value)
168
+ {
169
+ $this->highPriorityLevel = $value;
170
+ }
171
+
172
+ public function setEmergencyLevel($value)
173
+ {
174
+ $this->emergencyLevel = $value;
175
+ }
176
+
177
+ /**
178
+ * Use the formatted message?
179
+ * @param bool $value
180
+ */
181
+ public function useFormattedMessage($value)
182
+ {
183
+ $this->useFormattedMessage = (bool) $value;
184
+ }
185
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+ use Monolog\Formatter\FormatterInterface;
16
+ use Monolog\Logger;
17
+ use Raven_Client;
18
+
19
+ /**
20
+ * Handler to send messages to a Sentry (https://github.com/getsentry/sentry) server
21
+ * using sentry-php (https://github.com/getsentry/sentry-php)
22
+ *
23
+ * @author Marc Abramowitz <marc@marc-abramowitz.com>
24
+ */
25
+ class RavenHandler extends AbstractProcessingHandler
26
+ {
27
+ /**
28
+ * Translates Monolog log levels to Raven log levels.
29
+ */
30
+ protected $logLevels = array(
31
+ Logger::DEBUG => Raven_Client::DEBUG,
32
+ Logger::INFO => Raven_Client::INFO,
33
+ Logger::NOTICE => Raven_Client::INFO,
34
+ Logger::WARNING => Raven_Client::WARNING,
35
+ Logger::ERROR => Raven_Client::ERROR,
36
+ Logger::CRITICAL => Raven_Client::FATAL,
37
+ Logger::ALERT => Raven_Client::FATAL,
38
+ Logger::EMERGENCY => Raven_Client::FATAL,
39
+ );
40
+
41
+ /**
42
+ * @var string should represent the current version of the calling
43
+ * software. Can be any string (git commit, version number)
44
+ */
45
+ protected $release;
46
+
47
+ /**
48
+ * @var Raven_Client the client object that sends the message to the server
49
+ */
50
+ protected $ravenClient;
51
+
52
+ /**
53
+ * @var LineFormatter The formatter to use for the logs generated via handleBatch()
54
+ */
55
+ protected $batchFormatter;
56
+
57
+ /**
58
+ * @param Raven_Client $ravenClient
59
+ * @param int $level The minimum logging level at which this handler will be triggered
60
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
61
+ */
62
+ public function __construct(Raven_Client $ravenClient, $level = Logger::DEBUG, $bubble = true)
63
+ {
64
+ parent::__construct($level, $bubble);
65
+
66
+ $this->ravenClient = $ravenClient;
67
+ }
68
+
69
+ /**
70
+ * {@inheritdoc}
71
+ */
72
+ public function handleBatch(array $records)
73
+ {
74
+ $level = $this->level;
75
+
76
+ // filter records based on their level
77
+ $records = array_filter($records, function ($record) use ($level) {
78
+ return $record['level'] >= $level;
79
+ });
80
+
81
+ if (!$records) {
82
+ return;
83
+ }
84
+
85
+ // the record with the highest severity is the "main" one
86
+ $record = array_reduce($records, function ($highest, $record) {
87
+ if ($record['level'] > $highest['level']) {
88
+ return $record;
89
+ }
90
+
91
+ return $highest;
92
+ });
93
+
94
+ // the other ones are added as a context item
95
+ $logs = array();
96
+ foreach ($records as $r) {
97
+ $logs[] = $this->processRecord($r);
98
+ }
99
+
100
+ if ($logs) {
101
+ $record['context']['logs'] = (string) $this->getBatchFormatter()->formatBatch($logs);
102
+ }
103
+
104
+ $this->handle($record);
105
+ }
106
+
107
+ /**
108
+ * Sets the formatter for the logs generated by handleBatch().
109
+ *
110
+ * @param FormatterInterface $formatter
111
+ */
112
+ public function setBatchFormatter(FormatterInterface $formatter)
113
+ {
114
+ $this->batchFormatter = $formatter;
115
+ }
116
+
117
+ /**
118
+ * Gets the formatter for the logs generated by handleBatch().
119
+ *
120
+ * @return FormatterInterface
121
+ */
122
+ public function getBatchFormatter()
123
+ {
124
+ if (!$this->batchFormatter) {
125
+ $this->batchFormatter = $this->getDefaultBatchFormatter();
126
+ }
127
+
128
+ return $this->batchFormatter;
129
+ }
130
+
131
+ /**
132
+ * {@inheritdoc}
133
+ */
134
+ protected function write(array $record)
135
+ {
136
+ $previousUserContext = false;
137
+ $options = array();
138
+ $options['level'] = $this->logLevels[$record['level']];
139
+ $options['tags'] = array();
140
+ if (!empty($record['extra']['tags'])) {
141
+ $options['tags'] = array_merge($options['tags'], $record['extra']['tags']);
142
+ unset($record['extra']['tags']);
143
+ }
144
+ if (!empty($record['context']['tags'])) {
145
+ $options['tags'] = array_merge($options['tags'], $record['context']['tags']);
146
+ unset($record['context']['tags']);
147
+ }
148
+ if (!empty($record['context']['fingerprint'])) {
149
+ $options['fingerprint'] = $record['context']['fingerprint'];
150
+ unset($record['context']['fingerprint']);
151
+ }
152
+ if (!empty($record['context']['logger'])) {
153
+ $options['logger'] = $record['context']['logger'];
154
+ unset($record['context']['logger']);
155
+ } else {
156
+ $options['logger'] = $record['channel'];
157
+ }
158
+ foreach ($this->getExtraParameters() as $key) {
159
+ foreach (array('extra', 'context') as $source) {
160
+ if (!empty($record[$source][$key])) {
161
+ $options[$key] = $record[$source][$key];
162
+ unset($record[$source][$key]);
163
+ }
164
+ }
165
+ }
166
+ if (!empty($record['context'])) {
167
+ $options['extra']['context'] = $record['context'];
168
+ if (!empty($record['context']['user'])) {
169
+ $previousUserContext = $this->ravenClient->context->user;
170
+ $this->ravenClient->user_context($record['context']['user']);
171
+ unset($options['extra']['context']['user']);
172
+ }
173
+ }
174
+ if (!empty($record['extra'])) {
175
+ $options['extra']['extra'] = $record['extra'];
176
+ }
177
+
178
+ if (!empty($this->release) && !isset($options['release'])) {
179
+ $options['release'] = $this->release;
180
+ }
181
+
182
+ if (isset($record['context']['exception']) && ($record['context']['exception'] instanceof \Exception || (PHP_VERSION_ID >= 70000 && $record['context']['exception'] instanceof \Throwable))) {
183
+ $options['message'] = $record['formatted'];
184
+ $this->ravenClient->captureException($record['context']['exception'], $options);
185
+ } else {
186
+ $this->ravenClient->captureMessage($record['formatted'], array(), $options);
187
+ }
188
+
189
+ if ($previousUserContext !== false) {
190
+ $this->ravenClient->user_context($previousUserContext);
191
+ }
192
+ }
193
+
194
+ /**
195
+ * {@inheritDoc}
196
+ */
197
+ protected function getDefaultFormatter()
198
+ {
199
+ return new LineFormatter('[%channel%] %message%');
200
+ }
201
+
202
+ /**
203
+ * Gets the default formatter for the logs generated by handleBatch().
204
+ *
205
+ * @return FormatterInterface
206
+ */
207
+ protected function getDefaultBatchFormatter()
208
+ {
209
+ return new LineFormatter();
210
+ }
211
+
212
+ /**
213
+ * Gets extra parameters supported by Raven that can be found in "extra" and "context"
214
+ *
215
+ * @return array
216
+ */
217
+ protected function getExtraParameters()
218
+ {
219
+ return array('contexts', 'checksum', 'release', 'event_id');
220
+ }
221
+
222
+ /**
223
+ * @param string $value
224
+ * @return self
225
+ */
226
+ public function setRelease($value)
227
+ {
228
+ $this->release = $value;
229
+
230
+ return $this;
231
+ }
232
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\LineFormatter;
15
+ use Monolog\Logger;
16
+
17
+ /**
18
+ * Logs to a Redis key using rpush
19
+ *
20
+ * usage example:
21
+ *
22
+ * $log = new Logger('application');
23
+ * $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs", "prod");
24
+ * $log->pushHandler($redis);
25
+ *
26
+ * @author Thomas Tourlourat <thomas@tourlourat.com>
27
+ */
28
+ class RedisHandler extends AbstractProcessingHandler
29
+ {
30
+ private $redisClient;
31
+ private $redisKey;
32
+ protected $capSize;
33
+
34
+ /**
35
+ * @param \Predis\Client|\Redis $redis The redis instance
36
+ * @param string $key The key name to push records to
37
+ * @param int $level The minimum logging level at which this handler will be triggered
38
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
39
+ * @param int $capSize Number of entries to limit list size to
40
+ */
41
+ public function __construct($redis, $key, $level = Logger::DEBUG, $bubble = true, $capSize = false)
42
+ {
43
+ if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) {
44
+ throw new \InvalidArgumentException('Predis\Client or Redis instance required');
45
+ }
46
+
47
+ $this->redisClient = $redis;
48
+ $this->redisKey = $key;
49
+ $this->capSize = $capSize;
50
+
51
+ parent::__construct($level, $bubble);
52
+ }
53
+
54
+ /**
55
+ * {@inheritDoc}
56
+ */
57
+ protected function write(array $record)
58
+ {
59
+ if ($this->capSize) {
60
+ $this->writeCapped($record);
61
+ } else {
62
+ $this->redisClient->rpush($this->redisKey, $record["formatted"]);
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Write and cap the collection
68
+ * Writes the record to the redis list and caps its
69
+ *
70
+ * @param array $record associative record array
71
+ * @return void
72
+ */
73
+ protected function writeCapped(array $record)
74
+ {
75
+ if ($this->redisClient instanceof \Redis) {
76
+ $this->redisClient->multi()
77
+ ->rpush($this->redisKey, $record["formatted"])
78
+ ->ltrim($this->redisKey, -$this->capSize, -1)
79
+ ->exec();
80
+ } else {
81
+ $redisKey = $this->redisKey;
82
+ $capSize = $this->capSize;
83
+ $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) {
84
+ $tx->rpush($redisKey, $record["formatted"]);
85
+ $tx->ltrim($redisKey, -$capSize, -1);
86
+ });
87
+ }
88
+ }
89
+
90
+ /**
91
+ * {@inheritDoc}
92
+ */
93
+ protected function getDefaultFormatter()
94
+ {
95
+ return new LineFormatter();
96
+ }
97
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use RollbarNotifier;
15
+ use Exception;
16
+ use Monolog\Logger;
17
+
18
+ /**
19
+ * Sends errors to Rollbar
20
+ *
21
+ * If the context data contains a `payload` key, that is used as an array
22
+ * of payload options to RollbarNotifier's report_message/report_exception methods.
23
+ *
24
+ * Rollbar's context info will contain the context + extra keys from the log record
25
+ * merged, and then on top of that a few keys:
26
+ *
27
+ * - level (rollbar level name)
28
+ * - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8)
29
+ * - channel
30
+ * - datetime (unix timestamp)
31
+ *
32
+ * @author Paul Statezny <paulstatezny@gmail.com>
33
+ */
34
+ class RollbarHandler extends AbstractProcessingHandler
35
+ {
36
+ /**
37
+ * Rollbar notifier
38
+ *
39
+ * @var RollbarNotifier
40
+ */
41
+ protected $rollbarNotifier;
42
+
43
+ protected $levelMap = array(
44
+ Logger::DEBUG => 'debug',
45
+ Logger::INFO => 'info',
46
+ Logger::NOTICE => 'info',
47
+ Logger::WARNING => 'warning',
48
+ Logger::ERROR => 'error',
49
+ Logger::CRITICAL => 'critical',
50
+ Logger::ALERT => 'critical',
51
+ Logger::EMERGENCY => 'critical',
52
+ );
53
+
54
+ /**
55
+ * Records whether any log records have been added since the last flush of the rollbar notifier
56
+ *
57
+ * @var bool
58
+ */
59
+ private $hasRecords = false;
60
+
61
+ protected $initialized = false;
62
+
63
+ /**
64
+ * @param RollbarNotifier $rollbarNotifier RollbarNotifier object constructed with valid token
65
+ * @param int $level The minimum logging level at which this handler will be triggered
66
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
67
+ */
68
+ public function __construct(RollbarNotifier $rollbarNotifier, $level = Logger::ERROR, $bubble = true)
69
+ {
70
+ $this->rollbarNotifier = $rollbarNotifier;
71
+
72
+ parent::__construct($level, $bubble);
73
+ }
74
+
75
+ /**
76
+ * {@inheritdoc}
77
+ */
78
+ protected function write(array $record)
79
+ {
80
+ if (!$this->initialized) {
81
+ // __destructor() doesn't get called on Fatal errors
82
+ register_shutdown_function(array($this, 'close'));
83
+ $this->initialized = true;
84
+ }
85
+
86
+ $context = $record['context'];
87
+ $payload = array();
88
+ if (isset($context['payload'])) {
89
+ $payload = $context['payload'];
90
+ unset($context['payload']);
91
+ }
92
+ $context = array_merge($context, $record['extra'], array(
93
+ 'level' => $this->levelMap[$record['level']],
94
+ 'monolog_level' => $record['level_name'],
95
+ 'channel' => $record['channel'],
96
+ 'datetime' => $record['datetime']->format('U'),
97
+ ));
98
+
99
+ if (isset($context['exception']) && $context['exception'] instanceof Exception) {
100
+ $payload['level'] = $context['level'];
101
+ $exception = $context['exception'];
102
+ unset($context['exception']);
103
+
104
+ $this->rollbarNotifier->report_exception($exception, $context, $payload);
105
+ } else {
106
+ $this->rollbarNotifier->report_message(
107
+ $record['message'],
108
+ $context['level'],
109
+ $context,
110
+ $payload
111
+ );
112
+ }
113
+
114
+ $this->hasRecords = true;
115
+ }
116
+
117
+ public function flush()
118
+ {
119
+ if ($this->hasRecords) {
120
+ $this->rollbarNotifier->flush();
121
+ $this->hasRecords = false;
122
+ }
123
+ }
124
+
125
+ /**
126
+ * {@inheritdoc}
127
+ */
128
+ public function close()
129
+ {
130
+ $this->flush();
131
+ }
132
+
133
+ /**
134
+ * {@inheritdoc}
135
+ */
136
+ public function reset()
137
+ {
138
+ $this->flush();
139
+
140
+ parent::reset();
141
+ }
142
+
143
+
144
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php ADDED
@@ -0,0 +1,190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Stores logs to files that are rotated every day and a limited number of files are kept.
18
+ *
19
+ * This rotation is only intended to be used as a workaround. Using logrotate to
20
+ * handle the rotation is strongly encouraged when you can use it.
21
+ *
22
+ * @author Christophe Coevoet <stof@notk.org>
23
+ * @author Jordi Boggiano <j.boggiano@seld.be>
24
+ */
25
+ class RotatingFileHandler extends StreamHandler
26
+ {
27
+ const FILE_PER_DAY = 'Y-m-d';
28
+ const FILE_PER_MONTH = 'Y-m';
29
+ const FILE_PER_YEAR = 'Y';
30
+
31
+ protected $filename;
32
+ protected $maxFiles;
33
+ protected $mustRotate;
34
+ protected $nextRotation;
35
+ protected $filenameFormat;
36
+ protected $dateFormat;
37
+
38
+ /**
39
+ * @param string $filename
40
+ * @param int $maxFiles The maximal amount of files to keep (0 means unlimited)
41
+ * @param int $level The minimum logging level at which this handler will be triggered
42
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
43
+ * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)
44
+ * @param bool $useLocking Try to lock log file before doing any writes
45
+ */
46
+ public function __construct($filename, $maxFiles = 0, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false)
47
+ {
48
+ $this->filename = $filename;
49
+ $this->maxFiles = (int) $maxFiles;
50
+ $this->nextRotation = new \DateTime('tomorrow');
51
+ $this->filenameFormat = '{filename}-{date}';
52
+ $this->dateFormat = 'Y-m-d';
53
+
54
+ parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking);
55
+ }
56
+
57
+ /**
58
+ * {@inheritdoc}
59
+ */
60
+ public function close()
61
+ {
62
+ parent::close();
63
+
64
+ if (true === $this->mustRotate) {
65
+ $this->rotate();
66
+ }
67
+ }
68
+
69
+ /**
70
+ * {@inheritdoc}
71
+ */
72
+ public function reset()
73
+ {
74
+ parent::reset();
75
+
76
+ if (true === $this->mustRotate) {
77
+ $this->rotate();
78
+ }
79
+ }
80
+
81
+ public function setFilenameFormat($filenameFormat, $dateFormat)
82
+ {
83
+ if (!preg_match('{^Y(([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) {
84
+ trigger_error(
85
+ 'Invalid date format - format must be one of '.
86
+ 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '.
87
+ 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '.
88
+ 'date formats using slashes, underscores and/or dots instead of dashes.',
89
+ E_USER_DEPRECATED
90
+ );
91
+ }
92
+ if (substr_count($filenameFormat, '{date}') === 0) {
93
+ trigger_error(
94
+ 'Invalid filename format - format should contain at least `{date}`, because otherwise rotating is impossible.',
95
+ E_USER_DEPRECATED
96
+ );
97
+ }
98
+ $this->filenameFormat = $filenameFormat;
99
+ $this->dateFormat = $dateFormat;
100
+ $this->url = $this->getTimedFilename();
101
+ $this->close();
102
+ }
103
+
104
+ /**
105
+ * {@inheritdoc}
106
+ */
107
+ protected function write(array $record)
108
+ {
109
+ // on the first record written, if the log is new, we should rotate (once per day)
110
+ if (null === $this->mustRotate) {
111
+ $this->mustRotate = !file_exists($this->url);
112
+ }
113
+
114
+ if ($this->nextRotation < $record['datetime']) {
115
+ $this->mustRotate = true;
116
+ $this->close();
117
+ }
118
+
119
+ parent::write($record);
120
+ }
121
+
122
+ /**
123
+ * Rotates the files.
124
+ */
125
+ protected function rotate()
126
+ {
127
+ // update filename
128
+ $this->url = $this->getTimedFilename();
129
+ $this->nextRotation = new \DateTime('tomorrow');
130
+
131
+ // skip GC of old logs if files are unlimited
132
+ if (0 === $this->maxFiles) {
133
+ return;
134
+ }
135
+
136
+ $logFiles = glob($this->getGlobPattern());
137
+ if ($this->maxFiles >= count($logFiles)) {
138
+ // no files to remove
139
+ return;
140
+ }
141
+
142
+ // Sorting the files by name to remove the older ones
143
+ usort($logFiles, function ($a, $b) {
144
+ return strcmp($b, $a);
145
+ });
146
+
147
+ foreach (array_slice($logFiles, $this->maxFiles) as $file) {
148
+ if (is_writable($file)) {
149
+ // suppress errors here as unlink() might fail if two processes
150
+ // are cleaning up/rotating at the same time
151
+ set_error_handler(function ($errno, $errstr, $errfile, $errline) {});
152
+ unlink($file);
153
+ restore_error_handler();
154
+ }
155
+ }
156
+
157
+ $this->mustRotate = false;
158
+ }
159
+
160
+ protected function getTimedFilename()
161
+ {
162
+ $fileInfo = pathinfo($this->filename);
163
+ $timedFilename = str_replace(
164
+ array('{filename}', '{date}'),
165
+ array($fileInfo['filename'], date($this->dateFormat)),
166
+ $fileInfo['dirname'] . '/' . $this->filenameFormat
167
+ );
168
+
169
+ if (!empty($fileInfo['extension'])) {
170
+ $timedFilename .= '.'.$fileInfo['extension'];
171
+ }
172
+
173
+ return $timedFilename;
174
+ }
175
+
176
+ protected function getGlobPattern()
177
+ {
178
+ $fileInfo = pathinfo($this->filename);
179
+ $glob = str_replace(
180
+ array('{filename}', '{date}'),
181
+ array($fileInfo['filename'], '[0-9][0-9][0-9][0-9]*'),
182
+ $fileInfo['dirname'] . '/' . $this->filenameFormat
183
+ );
184
+ if (!empty($fileInfo['extension'])) {
185
+ $glob .= '.'.$fileInfo['extension'];
186
+ }
187
+
188
+ return $glob;
189
+ }
190
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ /**
15
+ * Sampling handler
16
+ *
17
+ * A sampled event stream can be useful for logging high frequency events in
18
+ * a production environment where you only need an idea of what is happening
19
+ * and are not concerned with capturing every occurrence. Since the decision to
20
+ * handle or not handle a particular event is determined randomly, the
21
+ * resulting sampled log is not guaranteed to contain 1/N of the events that
22
+ * occurred in the application, but based on the Law of large numbers, it will
23
+ * tend to be close to this ratio with a large number of attempts.
24
+ *
25
+ * @author Bryan Davis <bd808@wikimedia.org>
26
+ * @author Kunal Mehta <legoktm@gmail.com>
27
+ */
28
+ class SamplingHandler extends AbstractHandler
29
+ {
30
+ /**
31
+ * @var callable|HandlerInterface $handler
32
+ */
33
+ protected $handler;
34
+
35
+ /**
36
+ * @var int $factor
37
+ */
38
+ protected $factor;
39
+
40
+ /**
41
+ * @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
42
+ * @param int $factor Sample factor
43
+ */
44
+ public function __construct($handler, $factor)
45
+ {
46
+ parent::__construct();
47
+ $this->handler = $handler;
48
+ $this->factor = $factor;
49
+
50
+ if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
51
+ throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
52
+ }
53
+ }
54
+
55
+ public function isHandling(array $record)
56
+ {
57
+ return $this->handler->isHandling($record);
58
+ }
59
+
60
+ public function handle(array $record)
61
+ {
62
+ if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) {
63
+ // The same logic as in FingersCrossedHandler
64
+ if (!$this->handler instanceof HandlerInterface) {
65
+ $this->handler = call_user_func($this->handler, $record, $this);
66
+ if (!$this->handler instanceof HandlerInterface) {
67
+ throw new \RuntimeException("The factory callable should return a HandlerInterface");
68
+ }
69
+ }
70
+
71
+ if ($this->processors) {
72
+ foreach ($this->processors as $processor) {
73
+ $record = call_user_func($processor, $record);
74
+ }
75
+ }
76
+
77
+ $this->handler->handle($record);
78
+ }
79
+
80
+ return false === $this->bubble;
81
+ }
82
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\Slack;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\NormalizerFormatter;
16
+ use Monolog\Formatter\FormatterInterface;
17
+
18
+ /**
19
+ * Slack record utility helping to log to Slack webhooks or API.
20
+ *
21
+ * @author Greg Kedzierski <greg@gregkedzierski.com>
22
+ * @author Haralan Dobrev <hkdobrev@gmail.com>
23
+ * @see https://api.slack.com/incoming-webhooks
24
+ * @see https://api.slack.com/docs/message-attachments
25
+ */
26
+ class SlackRecord
27
+ {
28
+ const COLOR_DANGER = 'danger';
29
+
30
+ const COLOR_WARNING = 'warning';
31
+
32
+ const COLOR_GOOD = 'good';
33
+
34
+ const COLOR_DEFAULT = '#e3e4e6';
35
+
36
+ /**
37
+ * Slack channel (encoded ID or name)
38
+ * @var string|null
39
+ */
40
+ private $channel;
41
+
42
+ /**
43
+ * Name of a bot
44
+ * @var string|null
45
+ */
46
+ private $username;
47
+
48
+ /**
49
+ * User icon e.g. 'ghost', 'http://example.com/user.png'
50
+ * @var string
51
+ */
52
+ private $userIcon;
53
+
54
+ /**
55
+ * Whether the message should be added to Slack as attachment (plain text otherwise)
56
+ * @var bool
57
+ */
58
+ private $useAttachment;
59
+
60
+ /**
61
+ * Whether the the context/extra messages added to Slack as attachments are in a short style
62
+ * @var bool
63
+ */
64
+ private $useShortAttachment;
65
+
66
+ /**
67
+ * Whether the attachment should include context and extra data
68
+ * @var bool
69
+ */
70
+ private $includeContextAndExtra;
71
+
72
+ /**
73
+ * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
74
+ * @var array
75
+ */
76
+ private $excludeFields;
77
+
78
+ /**
79
+ * @var FormatterInterface
80
+ */
81
+ private $formatter;
82
+
83
+ /**
84
+ * @var NormalizerFormatter
85
+ */
86
+ private $normalizerFormatter;
87
+
88
+ public function __construct($channel = null, $username = null, $useAttachment = true, $userIcon = null, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array(), FormatterInterface $formatter = null)
89
+ {
90
+ $this->channel = $channel;
91
+ $this->username = $username;
92
+ $this->userIcon = trim($userIcon, ':');
93
+ $this->useAttachment = $useAttachment;
94
+ $this->useShortAttachment = $useShortAttachment;
95
+ $this->includeContextAndExtra = $includeContextAndExtra;
96
+ $this->excludeFields = $excludeFields;
97
+ $this->formatter = $formatter;
98
+
99
+ if ($this->includeContextAndExtra) {
100
+ $this->normalizerFormatter = new NormalizerFormatter();
101
+ }
102
+ }
103
+
104
+ public function getSlackData(array $record)
105
+ {
106
+ $dataArray = array();
107
+ $record = $this->excludeFields($record);
108
+
109
+ if ($this->username) {
110
+ $dataArray['username'] = $this->username;
111
+ }
112
+
113
+ if ($this->channel) {
114
+ $dataArray['channel'] = $this->channel;
115
+ }
116
+
117
+ if ($this->formatter && !$this->useAttachment) {
118
+ $message = $this->formatter->format($record);
119
+ } else {
120
+ $message = $record['message'];
121
+ }
122
+
123
+ if ($this->useAttachment) {
124
+ $attachment = array(
125
+ 'fallback' => $message,
126
+ 'text' => $message,
127
+ 'color' => $this->getAttachmentColor($record['level']),
128
+ 'fields' => array(),
129
+ 'mrkdwn_in' => array('fields'),
130
+ 'ts' => $record['datetime']->getTimestamp()
131
+ );
132
+
133
+ if ($this->useShortAttachment) {
134
+ $attachment['title'] = $record['level_name'];
135
+ } else {
136
+ $attachment['title'] = 'Message';
137
+ $attachment['fields'][] = $this->generateAttachmentField('Level', $record['level_name']);
138
+ }
139
+
140
+
141
+ if ($this->includeContextAndExtra) {
142
+ foreach (array('extra', 'context') as $key) {
143
+ if (empty($record[$key])) {
144
+ continue;
145
+ }
146
+
147
+ if ($this->useShortAttachment) {
148
+ $attachment['fields'][] = $this->generateAttachmentField(
149
+ $key,
150
+ $record[$key]
151
+ );
152
+ } else {
153
+ // Add all extra fields as individual fields in attachment
154
+ $attachment['fields'] = array_merge(
155
+ $attachment['fields'],
156
+ $this->generateAttachmentFields($record[$key])
157
+ );
158
+ }
159
+ }
160
+ }
161
+
162
+ $dataArray['attachments'] = array($attachment);
163
+ } else {
164
+ $dataArray['text'] = $message;
165
+ }
166
+
167
+ if ($this->userIcon) {
168
+ if (filter_var($this->userIcon, FILTER_VALIDATE_URL)) {
169
+ $dataArray['icon_url'] = $this->userIcon;
170
+ } else {
171
+ $dataArray['icon_emoji'] = ":{$this->userIcon}:";
172
+ }
173
+ }
174
+
175
+ return $dataArray;
176
+ }
177
+
178
+ /**
179
+ * Returned a Slack message attachment color associated with
180
+ * provided level.
181
+ *
182
+ * @param int $level
183
+ * @return string
184
+ */
185
+ public function getAttachmentColor($level)
186
+ {
187
+ switch (true) {
188
+ case $level >= Logger::ERROR:
189
+ return self::COLOR_DANGER;
190
+ case $level >= Logger::WARNING:
191
+ return self::COLOR_WARNING;
192
+ case $level >= Logger::INFO:
193
+ return self::COLOR_GOOD;
194
+ default:
195
+ return self::COLOR_DEFAULT;
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Stringifies an array of key/value pairs to be used in attachment fields
201
+ *
202
+ * @param array $fields
203
+ *
204
+ * @return string
205
+ */
206
+ public function stringify($fields)
207
+ {
208
+ $normalized = $this->normalizerFormatter->format($fields);
209
+ $prettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128;
210
+
211
+ $hasSecondDimension = count(array_filter($normalized, 'is_array'));
212
+ $hasNonNumericKeys = !count(array_filter(array_keys($normalized), 'is_numeric'));
213
+
214
+ return $hasSecondDimension || $hasNonNumericKeys
215
+ ? json_encode($normalized, $prettyPrintFlag)
216
+ : json_encode($normalized);
217
+ }
218
+
219
+ /**
220
+ * Sets the formatter
221
+ *
222
+ * @param FormatterInterface $formatter
223
+ */
224
+ public function setFormatter(FormatterInterface $formatter)
225
+ {
226
+ $this->formatter = $formatter;
227
+ }
228
+
229
+ /**
230
+ * Generates attachment field
231
+ *
232
+ * @param string $title
233
+ * @param string|array $value
234
+ *
235
+ * @return array
236
+ */
237
+ private function generateAttachmentField($title, $value)
238
+ {
239
+ $value = is_array($value)
240
+ ? sprintf('```%s```', $this->stringify($value))
241
+ : $value;
242
+
243
+ return array(
244
+ 'title' => ucfirst($title),
245
+ 'value' => $value,
246
+ 'short' => false
247
+ );
248
+ }
249
+
250
+ /**
251
+ * Generates a collection of attachment fields from array
252
+ *
253
+ * @param array $data
254
+ *
255
+ * @return array
256
+ */
257
+ private function generateAttachmentFields(array $data)
258
+ {
259
+ $fields = array();
260
+ foreach ($this->normalizerFormatter->format($data) as $key => $value) {
261
+ $fields[] = $this->generateAttachmentField($key, $value);
262
+ }
263
+
264
+ return $fields;
265
+ }
266
+
267
+ /**
268
+ * Get a copy of record with fields excluded according to $this->excludeFields
269
+ *
270
+ * @param array $record
271
+ *
272
+ * @return array
273
+ */
274
+ private function excludeFields(array $record)
275
+ {
276
+ foreach ($this->excludeFields as $field) {
277
+ $keys = explode('.', $field);
278
+ $node = &$record;
279
+ $lastKey = end($keys);
280
+ foreach ($keys as $key) {
281
+ if (!isset($node[$key])) {
282
+ break;
283
+ }
284
+ if ($lastKey === $key) {
285
+ unset($node[$key]);
286
+ break;
287
+ }
288
+ $node = &$node[$key];
289
+ }
290
+ }
291
+
292
+ return $record;
293
+ }
294
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+ use Monolog\Logger;
16
+ use Monolog\Handler\Slack\SlackRecord;
17
+
18
+ /**
19
+ * Sends notifications through Slack API
20
+ *
21
+ * @author Greg Kedzierski <greg@gregkedzierski.com>
22
+ * @see https://api.slack.com/
23
+ */
24
+ class SlackHandler extends SocketHandler
25
+ {
26
+ /**
27
+ * Slack API token
28
+ * @var string
29
+ */
30
+ private $token;
31
+
32
+ /**
33
+ * Instance of the SlackRecord util class preparing data for Slack API.
34
+ * @var SlackRecord
35
+ */
36
+ private $slackRecord;
37
+
38
+ /**
39
+ * @param string $token Slack API token
40
+ * @param string $channel Slack channel (encoded ID or name)
41
+ * @param string|null $username Name of a bot
42
+ * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise)
43
+ * @param string|null $iconEmoji The emoji name to use (or null)
44
+ * @param int $level The minimum logging level at which this handler will be triggered
45
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
46
+ * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style
47
+ * @param bool $includeContextAndExtra Whether the attachment should include context and extra data
48
+ * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
49
+ * @throws MissingExtensionException If no OpenSSL PHP extension configured
50
+ */
51
+ public function __construct($token, $channel, $username = null, $useAttachment = true, $iconEmoji = null, $level = Logger::CRITICAL, $bubble = true, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array())
52
+ {
53
+ if (!extension_loaded('openssl')) {
54
+ throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler');
55
+ }
56
+
57
+ parent::__construct('ssl://slack.com:443', $level, $bubble);
58
+
59
+ $this->slackRecord = new SlackRecord(
60
+ $channel,
61
+ $username,
62
+ $useAttachment,
63
+ $iconEmoji,
64
+ $useShortAttachment,
65
+ $includeContextAndExtra,
66
+ $excludeFields,
67
+ $this->formatter
68
+ );
69
+
70
+ $this->token = $token;
71
+ }
72
+
73
+ public function getSlackRecord()
74
+ {
75
+ return $this->slackRecord;
76
+ }
77
+
78
+ public function getToken()
79
+ {
80
+ return $this->token;
81
+ }
82
+
83
+ /**
84
+ * {@inheritdoc}
85
+ *
86
+ * @param array $record
87
+ * @return string
88
+ */
89
+ protected function generateDataStream($record)
90
+ {
91
+ $content = $this->buildContent($record);
92
+
93
+ return $this->buildHeader($content) . $content;
94
+ }
95
+
96
+ /**
97
+ * Builds the body of API call
98
+ *
99
+ * @param array $record
100
+ * @return string
101
+ */
102
+ private function buildContent($record)
103
+ {
104
+ $dataArray = $this->prepareContentData($record);
105
+
106
+ return http_build_query($dataArray);
107
+ }
108
+
109
+ /**
110
+ * Prepares content data
111
+ *
112
+ * @param array $record
113
+ * @return array
114
+ */
115
+ protected function prepareContentData($record)
116
+ {
117
+ $dataArray = $this->slackRecord->getSlackData($record);
118
+ $dataArray['token'] = $this->token;
119
+
120
+ if (!empty($dataArray['attachments'])) {
121
+ $dataArray['attachments'] = json_encode($dataArray['attachments']);
122
+ }
123
+
124
+ return $dataArray;
125
+ }
126
+
127
+ /**
128
+ * Builds the header of the API Call
129
+ *
130
+ * @param string $content
131
+ * @return string
132
+ */
133
+ private function buildHeader($content)
134
+ {
135
+ $header = "POST /api/chat.postMessage HTTP/1.1\r\n";
136
+ $header .= "Host: slack.com\r\n";
137
+ $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
138
+ $header .= "Content-Length: " . strlen($content) . "\r\n";
139
+ $header .= "\r\n";
140
+
141
+ return $header;
142
+ }
143
+
144
+ /**
145
+ * {@inheritdoc}
146
+ *
147
+ * @param array $record
148
+ */
149
+ protected function write(array $record)
150
+ {
151
+ parent::write($record);
152
+ $this->finalizeWrite();
153
+ }
154
+
155
+ /**
156
+ * Finalizes the request by reading some bytes and then closing the socket
157
+ *
158
+ * If we do not read some but close the socket too early, slack sometimes
159
+ * drops the request entirely.
160
+ */
161
+ protected function finalizeWrite()
162
+ {
163
+ $res = $this->getResource();
164
+ if (is_resource($res)) {
165
+ @fread($res, 2048);
166
+ }
167
+ $this->closeSocket();
168
+ }
169
+
170
+ /**
171
+ * Returned a Slack message attachment color associated with
172
+ * provided level.
173
+ *
174
+ * @param int $level
175
+ * @return string
176
+ * @deprecated Use underlying SlackRecord instead
177
+ */
178
+ protected function getAttachmentColor($level)
179
+ {
180
+ trigger_error(
181
+ 'SlackHandler::getAttachmentColor() is deprecated. Use underlying SlackRecord instead.',
182
+ E_USER_DEPRECATED
183
+ );
184
+
185
+ return $this->slackRecord->getAttachmentColor($level);
186
+ }
187
+
188
+ /**
189
+ * Stringifies an array of key/value pairs to be used in attachment fields
190
+ *
191
+ * @param array $fields
192
+ * @return string
193
+ * @deprecated Use underlying SlackRecord instead
194
+ */
195
+ protected function stringify($fields)
196
+ {
197
+ trigger_error(
198
+ 'SlackHandler::stringify() is deprecated. Use underlying SlackRecord instead.',
199
+ E_USER_DEPRECATED
200
+ );
201
+
202
+ return $this->slackRecord->stringify($fields);
203
+ }
204
+
205
+ public function setFormatter(FormatterInterface $formatter)
206
+ {
207
+ parent::setFormatter($formatter);
208
+ $this->slackRecord->setFormatter($formatter);
209
+
210
+ return $this;
211
+ }
212
+
213
+ public function getFormatter()
214
+ {
215
+ $formatter = parent::getFormatter();
216
+ $this->slackRecord->setFormatter($formatter);
217
+
218
+ return $formatter;
219
+ }
220
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Formatter\FormatterInterface;
15
+ use Monolog\Logger;
16
+ use Monolog\Handler\Slack\SlackRecord;
17
+
18
+ /**
19
+ * Sends notifications through Slack Webhooks
20
+ *
21
+ * @author Haralan Dobrev <hkdobrev@gmail.com>
22
+ * @see https://api.slack.com/incoming-webhooks
23
+ */
24
+ class SlackWebhookHandler extends AbstractProcessingHandler
25
+ {
26
+ /**
27
+ * Slack Webhook token
28
+ * @var string
29
+ */
30
+ private $webhookUrl;
31
+
32
+ /**
33
+ * Instance of the SlackRecord util class preparing data for Slack API.
34
+ * @var SlackRecord
35
+ */
36
+ private $slackRecord;
37
+
38
+ /**
39
+ * @param string $webhookUrl Slack Webhook URL
40
+ * @param string|null $channel Slack channel (encoded ID or name)
41
+ * @param string|null $username Name of a bot
42
+ * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise)
43
+ * @param string|null $iconEmoji The emoji name to use (or null)
44
+ * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style
45
+ * @param bool $includeContextAndExtra Whether the attachment should include context and extra data
46
+ * @param int $level The minimum logging level at which this handler will be triggered
47
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
48
+ * @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
49
+ */
50
+ public function __construct($webhookUrl, $channel = null, $username = null, $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeContextAndExtra = false, $level = Logger::CRITICAL, $bubble = true, array $excludeFields = array())
51
+ {
52
+ parent::__construct($level, $bubble);
53
+
54
+ $this->webhookUrl = $webhookUrl;
55
+
56
+ $this->slackRecord = new SlackRecord(
57
+ $channel,
58
+ $username,
59
+ $useAttachment,
60
+ $iconEmoji,
61
+ $useShortAttachment,
62
+ $includeContextAndExtra,
63
+ $excludeFields,
64
+ $this->formatter
65
+ );
66
+ }
67
+
68
+ public function getSlackRecord()
69
+ {
70
+ return $this->slackRecord;
71
+ }
72
+
73
+ public function getWebhookUrl()
74
+ {
75
+ return $this->webhookUrl;
76
+ }
77
+
78
+ /**
79
+ * {@inheritdoc}
80
+ *
81
+ * @param array $record
82
+ */
83
+ protected function write(array $record)
84
+ {
85
+ $postData = $this->slackRecord->getSlackData($record);
86
+ $postString = json_encode($postData);
87
+
88
+ $ch = curl_init();
89
+ $options = array(
90
+ CURLOPT_URL => $this->webhookUrl,
91
+ CURLOPT_POST => true,
92
+ CURLOPT_RETURNTRANSFER => true,
93
+ CURLOPT_HTTPHEADER => array('Content-type: application/json'),
94
+ CURLOPT_POSTFIELDS => $postString
95
+ );
96
+ if (defined('CURLOPT_SAFE_UPLOAD')) {
97
+ $options[CURLOPT_SAFE_UPLOAD] = true;
98
+ }
99
+
100
+ curl_setopt_array($ch, $options);
101
+
102
+ Curl\Util::execute($ch);
103
+ }
104
+
105
+ public function setFormatter(FormatterInterface $formatter)
106
+ {
107
+ parent::setFormatter($formatter);
108
+ $this->slackRecord->setFormatter($formatter);
109
+
110
+ return $this;
111
+ }
112
+
113
+ public function getFormatter()
114
+ {
115
+ $formatter = parent::getFormatter();
116
+ $this->slackRecord->setFormatter($formatter);
117
+
118
+ return $formatter;
119
+ }
120
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Sends notifications through Slack's Slackbot
18
+ *
19
+ * @author Haralan Dobrev <hkdobrev@gmail.com>
20
+ * @see https://slack.com/apps/A0F81R8ET-slackbot
21
+ */
22
+ class SlackbotHandler extends AbstractProcessingHandler
23
+ {
24
+ /**
25
+ * The slug of the Slack team
26
+ * @var string
27
+ */
28
+ private $slackTeam;
29
+
30
+ /**
31
+ * Slackbot token
32
+ * @var string
33
+ */
34
+ private $token;
35
+
36
+ /**
37
+ * Slack channel name
38
+ * @var string
39
+ */
40
+ private $channel;
41
+
42
+ /**
43
+ * @param string $slackTeam Slack team slug
44
+ * @param string $token Slackbot token
45
+ * @param string $channel Slack channel (encoded ID or name)
46
+ * @param int $level The minimum logging level at which this handler will be triggered
47
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
48
+ */
49
+ public function __construct($slackTeam, $token, $channel, $level = Logger::CRITICAL, $bubble = true)
50
+ {
51
+ parent::__construct($level, $bubble);
52
+
53
+ $this->slackTeam = $slackTeam;
54
+ $this->token = $token;
55
+ $this->channel = $channel;
56
+ }
57
+
58
+ /**
59
+ * {@inheritdoc}
60
+ *
61
+ * @param array $record
62
+ */
63
+ protected function write(array $record)
64
+ {
65
+ $slackbotUrl = sprintf(
66
+ 'https://%s.slack.com/services/hooks/slackbot?token=%s&channel=%s',
67
+ $this->slackTeam,
68
+ $this->token,
69
+ $this->channel
70
+ );
71
+
72
+ $ch = curl_init();
73
+ curl_setopt($ch, CURLOPT_URL, $slackbotUrl);
74
+ curl_setopt($ch, CURLOPT_POST, true);
75
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
76
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $record['message']);
77
+
78
+ Curl\Util::execute($ch);
79
+ }
80
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php ADDED
@@ -0,0 +1,385 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Stores to any socket - uses fsockopen() or pfsockopen().
18
+ *
19
+ * @author Pablo de Leon Belloc <pablolb@gmail.com>
20
+ * @see http://php.net/manual/en/function.fsockopen.php
21
+ */
22
+ class SocketHandler extends AbstractProcessingHandler
23
+ {
24
+ private $connectionString;
25
+ private $connectionTimeout;
26
+ private $resource;
27
+ private $timeout = 0;
28
+ private $writingTimeout = 10;
29
+ private $lastSentBytes = null;
30
+ private $chunkSize = null;
31
+ private $persistent = false;
32
+ private $errno;
33
+ private $errstr;
34
+ private $lastWritingAt;
35
+
36
+ /**
37
+ * @param string $connectionString Socket connection string
38
+ * @param int $level The minimum logging level at which this handler will be triggered
39
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
40
+ */
41
+ public function __construct($connectionString, $level = Logger::DEBUG, $bubble = true)
42
+ {
43
+ parent::__construct($level, $bubble);
44
+ $this->connectionString = $connectionString;
45
+ $this->connectionTimeout = (float) ini_get('default_socket_timeout');
46
+ }
47
+
48
+ /**
49
+ * Connect (if necessary) and write to the socket
50
+ *
51
+ * @param array $record
52
+ *
53
+ * @throws \UnexpectedValueException
54
+ * @throws \RuntimeException
55
+ */
56
+ protected function write(array $record)
57
+ {
58
+ $this->connectIfNotConnected();
59
+ $data = $this->generateDataStream($record);
60
+ $this->writeToSocket($data);
61
+ }
62
+
63
+ /**
64
+ * We will not close a PersistentSocket instance so it can be reused in other requests.
65
+ */
66
+ public function close()
67
+ {
68
+ if (!$this->isPersistent()) {
69
+ $this->closeSocket();
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Close socket, if open
75
+ */
76
+ public function closeSocket()
77
+ {
78
+ if (is_resource($this->resource)) {
79
+ fclose($this->resource);
80
+ $this->resource = null;
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Set socket connection to nbe persistent. It only has effect before the connection is initiated.
86
+ *
87
+ * @param bool $persistent
88
+ */
89
+ public function setPersistent($persistent)
90
+ {
91
+ $this->persistent = (bool) $persistent;
92
+ }
93
+
94
+ /**
95
+ * Set connection timeout. Only has effect before we connect.
96
+ *
97
+ * @param float $seconds
98
+ *
99
+ * @see http://php.net/manual/en/function.fsockopen.php
100
+ */
101
+ public function setConnectionTimeout($seconds)
102
+ {
103
+ $this->validateTimeout($seconds);
104
+ $this->connectionTimeout = (float) $seconds;
105
+ }
106
+
107
+ /**
108
+ * Set write timeout. Only has effect before we connect.
109
+ *
110
+ * @param float $seconds
111
+ *
112
+ * @see http://php.net/manual/en/function.stream-set-timeout.php
113
+ */
114
+ public function setTimeout($seconds)
115
+ {
116
+ $this->validateTimeout($seconds);
117
+ $this->timeout = (float) $seconds;
118
+ }
119
+
120
+ /**
121
+ * Set writing timeout. Only has effect during connection in the writing cycle.
122
+ *
123
+ * @param float $seconds 0 for no timeout
124
+ */
125
+ public function setWritingTimeout($seconds)
126
+ {
127
+ $this->validateTimeout($seconds);
128
+ $this->writingTimeout = (float) $seconds;
129
+ }
130
+
131
+ /**
132
+ * Set chunk size. Only has effect during connection in the writing cycle.
133
+ *
134
+ * @param float $bytes
135
+ */
136
+ public function setChunkSize($bytes)
137
+ {
138
+ $this->chunkSize = $bytes;
139
+ }
140
+
141
+ /**
142
+ * Get current connection string
143
+ *
144
+ * @return string
145
+ */
146
+ public function getConnectionString()
147
+ {
148
+ return $this->connectionString;
149
+ }
150
+
151
+ /**
152
+ * Get persistent setting
153
+ *
154
+ * @return bool
155
+ */
156
+ public function isPersistent()
157
+ {
158
+ return $this->persistent;
159
+ }
160
+
161
+ /**
162
+ * Get current connection timeout setting
163
+ *
164
+ * @return float
165
+ */
166
+ public function getConnectionTimeout()
167
+ {
168
+ return $this->connectionTimeout;
169
+ }
170
+
171
+ /**
172
+ * Get current in-transfer timeout
173
+ *
174
+ * @return float
175
+ */
176
+ public function getTimeout()
177
+ {
178
+ return $this->timeout;
179
+ }
180
+
181
+ /**
182
+ * Get current local writing timeout
183
+ *
184
+ * @return float
185
+ */
186
+ public function getWritingTimeout()
187
+ {
188
+ return $this->writingTimeout;
189
+ }
190
+
191
+ /**
192
+ * Get current chunk size
193
+ *
194
+ * @return float
195
+ */
196
+ public function getChunkSize()
197
+ {
198
+ return $this->chunkSize;
199
+ }
200
+
201
+ /**
202
+ * Check to see if the socket is currently available.
203
+ *
204
+ * UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details.
205
+ *
206
+ * @return bool
207
+ */
208
+ public function isConnected()
209
+ {
210
+ return is_resource($this->resource)
211
+ && !feof($this->resource); // on TCP - other party can close connection.
212
+ }
213
+
214
+ /**
215
+ * Wrapper to allow mocking
216
+ */
217
+ protected function pfsockopen()
218
+ {
219
+ return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);
220
+ }
221
+
222
+ /**
223
+ * Wrapper to allow mocking
224
+ */
225
+ protected function fsockopen()
226
+ {
227
+ return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);
228
+ }
229
+
230
+ /**
231
+ * Wrapper to allow mocking
232
+ *
233
+ * @see http://php.net/manual/en/function.stream-set-timeout.php
234
+ */
235
+ protected function streamSetTimeout()
236
+ {
237
+ $seconds = floor($this->timeout);
238
+ $microseconds = round(($this->timeout - $seconds) * 1e6);
239
+
240
+ return stream_set_timeout($this->resource, $seconds, $microseconds);
241
+ }
242
+
243
+ /**
244
+ * Wrapper to allow mocking
245
+ *
246
+ * @see http://php.net/manual/en/function.stream-set-chunk-size.php
247
+ */
248
+ protected function streamSetChunkSize()
249
+ {
250
+ return stream_set_chunk_size($this->resource, $this->chunkSize);
251
+ }
252
+
253
+ /**
254
+ * Wrapper to allow mocking
255
+ */
256
+ protected function fwrite($data)
257
+ {
258
+ return @fwrite($this->resource, $data);
259
+ }
260
+
261
+ /**
262
+ * Wrapper to allow mocking
263
+ */
264
+ protected function streamGetMetadata()
265
+ {
266
+ return stream_get_meta_data($this->resource);
267
+ }
268
+
269
+ private function validateTimeout($value)
270
+ {
271
+ $ok = filter_var($value, FILTER_VALIDATE_FLOAT);
272
+ if ($ok === false || $value < 0) {
273
+ throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)");
274
+ }
275
+ }
276
+
277
+ private function connectIfNotConnected()
278
+ {
279
+ if ($this->isConnected()) {
280
+ return;
281
+ }
282
+ $this->connect();
283
+ }
284
+
285
+ protected function generateDataStream($record)
286
+ {
287
+ return (string) $record['formatted'];
288
+ }
289
+
290
+ /**
291
+ * @return resource|null
292
+ */
293
+ protected function getResource()
294
+ {
295
+ return $this->resource;
296
+ }
297
+
298
+ private function connect()
299
+ {
300
+ $this->createSocketResource();
301
+ $this->setSocketTimeout();
302
+ $this->setStreamChunkSize();
303
+ }
304
+
305
+ private function createSocketResource()
306
+ {
307
+ if ($this->isPersistent()) {
308
+ $resource = $this->pfsockopen();
309
+ } else {
310
+ $resource = $this->fsockopen();
311
+ }
312
+ if (!$resource) {
313
+ throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)");
314
+ }
315
+ $this->resource = $resource;
316
+ }
317
+
318
+ private function setSocketTimeout()
319
+ {
320
+ if (!$this->streamSetTimeout()) {
321
+ throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()");
322
+ }
323
+ }
324
+
325
+ private function setStreamChunkSize()
326
+ {
327
+ if ($this->chunkSize && !$this->streamSetChunkSize()) {
328
+ throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()");
329
+ }
330
+ }
331
+
332
+ private function writeToSocket($data)
333
+ {
334
+ $length = strlen($data);
335
+ $sent = 0;
336
+ $this->lastSentBytes = $sent;
337
+ while ($this->isConnected() && $sent < $length) {
338
+ if (0 == $sent) {
339
+ $chunk = $this->fwrite($data);
340
+ } else {
341
+ $chunk = $this->fwrite(substr($data, $sent));
342
+ }
343
+ if ($chunk === false) {
344
+ throw new \RuntimeException("Could not write to socket");
345
+ }
346
+ $sent += $chunk;
347
+ $socketInfo = $this->streamGetMetadata();
348
+ if ($socketInfo['timed_out']) {
349
+ throw new \RuntimeException("Write timed-out");
350
+ }
351
+
352
+ if ($this->writingIsTimedOut($sent)) {
353
+ throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)");
354
+ }
355
+ }
356
+ if (!$this->isConnected() && $sent < $length) {
357
+ throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)");
358
+ }
359
+ }
360
+
361
+ private function writingIsTimedOut($sent)
362
+ {
363
+ $writingTimeout = (int) floor($this->writingTimeout);
364
+ if (0 === $writingTimeout) {
365
+ return false;
366
+ }
367
+
368
+ if ($sent !== $this->lastSentBytes) {
369
+ $this->lastWritingAt = time();
370
+ $this->lastSentBytes = $sent;
371
+
372
+ return false;
373
+ } else {
374
+ usleep(100);
375
+ }
376
+
377
+ if ((time() - $this->lastWritingAt) >= $writingTimeout) {
378
+ $this->closeSocket();
379
+
380
+ return true;
381
+ }
382
+
383
+ return false;
384
+ }
385
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Stores to any stream resource
18
+ *
19
+ * Can be used to store into php://stderr, remote and local files, etc.
20
+ *
21
+ * @author Jordi Boggiano <j.boggiano@seld.be>
22
+ */
23
+ class StreamHandler extends AbstractProcessingHandler
24
+ {
25
+ protected $stream;
26
+ protected $url;
27
+ private $errorMessage;
28
+ protected $filePermission;
29
+ protected $useLocking;
30
+ private $dirCreated;
31
+
32
+ /**
33
+ * @param resource|string $stream
34
+ * @param int $level The minimum logging level at which this handler will be triggered
35
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
36
+ * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)
37
+ * @param bool $useLocking Try to lock log file before doing any writes
38
+ *
39
+ * @throws \Exception If a missing directory is not buildable
40
+ * @throws \InvalidArgumentException If stream is not a resource or string
41
+ */
42
+ public function __construct($stream, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false)
43
+ {
44
+ parent::__construct($level, $bubble);
45
+ if (is_resource($stream)) {
46
+ $this->stream = $stream;
47
+ } elseif (is_string($stream)) {
48
+ $this->url = $stream;
49
+ } else {
50
+ throw new \InvalidArgumentException('A stream must either be a resource or a string.');
51
+ }
52
+
53
+ $this->filePermission = $filePermission;
54
+ $this->useLocking = $useLocking;
55
+ }
56
+
57
+ /**
58
+ * {@inheritdoc}
59
+ */
60
+ public function close()
61
+ {
62
+ if ($this->url && is_resource($this->stream)) {
63
+ fclose($this->stream);
64
+ }
65
+ $this->stream = null;
66
+ }
67
+
68
+ /**
69
+ * Return the currently active stream if it is open
70
+ *
71
+ * @return resource|null
72
+ */
73
+ public function getStream()
74
+ {
75
+ return $this->stream;
76
+ }
77
+
78
+ /**
79
+ * Return the stream URL if it was configured with a URL and not an active resource
80
+ *
81
+ * @return string|null
82
+ */
83
+ public function getUrl()
84
+ {
85
+ return $this->url;
86
+ }
87
+
88
+ /**
89
+ * {@inheritdoc}
90
+ */
91
+ protected function write(array $record)
92
+ {
93
+ if (!is_resource($this->stream)) {
94
+ if (null === $this->url || '' === $this->url) {
95
+ throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
96
+ }
97
+ $this->createDir();
98
+ $this->errorMessage = null;
99
+ set_error_handler(array($this, 'customErrorHandler'));
100
+ $this->stream = fopen($this->url, 'a');
101
+ if ($this->filePermission !== null) {
102
+ @chmod($this->url, $this->filePermission);
103
+ }
104
+ restore_error_handler();
105
+ if (!is_resource($this->stream)) {
106
+ $this->stream = null;
107
+ throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
108
+ }
109
+ }
110
+
111
+ if ($this->useLocking) {
112
+ // ignoring errors here, there's not much we can do about them
113
+ flock($this->stream, LOCK_EX);
114
+ }
115
+
116
+ $this->streamWrite($this->stream, $record);
117
+
118
+ if ($this->useLocking) {
119
+ flock($this->stream, LOCK_UN);
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Write to stream
125
+ * @param resource $stream
126
+ * @param array $record
127
+ */
128
+ protected function streamWrite($stream, array $record)
129
+ {
130
+ fwrite($stream, (string) $record['formatted']);
131
+ }
132
+
133
+ private function customErrorHandler($code, $msg)
134
+ {
135
+ $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg);
136
+ }
137
+
138
+ /**
139
+ * @param string $stream
140
+ *
141
+ * @return null|string
142
+ */
143
+ private function getDirFromStream($stream)
144
+ {
145
+ $pos = strpos($stream, '://');
146
+ if ($pos === false) {
147
+ return dirname($stream);
148
+ }
149
+
150
+ if ('file://' === substr($stream, 0, 7)) {
151
+ return dirname(substr($stream, 7));
152
+ }
153
+
154
+ return;
155
+ }
156
+
157
+ private function createDir()
158
+ {
159
+ // Do not try to create dir if it has already been tried.
160
+ if ($this->dirCreated) {
161
+ return;
162
+ }
163
+
164
+ $dir = $this->getDirFromStream($this->url);
165
+ if (null !== $dir && !is_dir($dir)) {
166
+ $this->errorMessage = null;
167
+ set_error_handler(array($this, 'customErrorHandler'));
168
+ $status = mkdir($dir, 0777, true);
169
+ restore_error_handler();
170
+ if (false === $status && !is_dir($dir)) {
171
+ throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and its not buildable: '.$this->errorMessage, $dir));
172
+ }
173
+ }
174
+ $this->dirCreated = true;
175
+ }
176
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Formatter\FormatterInterface;
16
+ use Monolog\Formatter\LineFormatter;
17
+ use Swift;
18
+
19
+ /**
20
+ * SwiftMailerHandler uses Swift_Mailer to send the emails
21
+ *
22
+ * @author Gyula Sallai
23
+ */
24
+ class SwiftMailerHandler extends MailHandler
25
+ {
26
+ protected $mailer;
27
+ private $messageTemplate;
28
+
29
+ /**
30
+ * @param \Swift_Mailer $mailer The mailer to use
31
+ * @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced
32
+ * @param int $level The minimum logging level at which this handler will be triggered
33
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
34
+ */
35
+ public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, $bubble = true)
36
+ {
37
+ parent::__construct($level, $bubble);
38
+
39
+ $this->mailer = $mailer;
40
+ $this->messageTemplate = $message;
41
+ }
42
+
43
+ /**
44
+ * {@inheritdoc}
45
+ */
46
+ protected function send($content, array $records)
47
+ {
48
+ $this->mailer->send($this->buildMessage($content, $records));
49
+ }
50
+
51
+ /**
52
+ * Gets the formatter for the Swift_Message subject.
53
+ *
54
+ * @param string $format The format of the subject
55
+ * @return FormatterInterface
56
+ */
57
+ protected function getSubjectFormatter($format)
58
+ {
59
+ return new LineFormatter($format);
60
+ }
61
+
62
+ /**
63
+ * Creates instance of Swift_Message to be sent
64
+ *
65
+ * @param string $content formatted email body to be sent
66
+ * @param array $records Log records that formed the content
67
+ * @return \Swift_Message
68
+ */
69
+ protected function buildMessage($content, array $records)
70
+ {
71
+ $message = null;
72
+ if ($this->messageTemplate instanceof \Swift_Message) {
73
+ $message = clone $this->messageTemplate;
74
+ $message->generateId();
75
+ } elseif (is_callable($this->messageTemplate)) {
76
+ $message = call_user_func($this->messageTemplate, $content, $records);
77
+ }
78
+
79
+ if (!$message instanceof \Swift_Message) {
80
+ throw new \InvalidArgumentException('Could not resolve message as instance of Swift_Message or a callable returning it');
81
+ }
82
+
83
+ if ($records) {
84
+ $subjectFormatter = $this->getSubjectFormatter($message->getSubject());
85
+ $message->setSubject($subjectFormatter->format($this->getHighestRecord($records)));
86
+ }
87
+
88
+ $message->setBody($content);
89
+ if (version_compare(Swift::VERSION, '6.0.0', '>=')) {
90
+ $message->setDate(new \DateTimeImmutable());
91
+ } else {
92
+ $message->setDate(time());
93
+ }
94
+
95
+ return $message;
96
+ }
97
+
98
+ /**
99
+ * BC getter, to be removed in 2.0
100
+ */
101
+ public function __get($name)
102
+ {
103
+ if ($name === 'message') {
104
+ trigger_error('SwiftMailerHandler->message is deprecated, use ->buildMessage() instead to retrieve the message', E_USER_DEPRECATED);
105
+
106
+ return $this->buildMessage(null, array());
107
+ }
108
+
109
+ throw new \InvalidArgumentException('Invalid property '.$name);
110
+ }
111
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Logs to syslog service.
18
+ *
19
+ * usage example:
20
+ *
21
+ * $log = new Logger('application');
22
+ * $syslog = new SyslogHandler('myfacility', 'local6');
23
+ * $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%");
24
+ * $syslog->setFormatter($formatter);
25
+ * $log->pushHandler($syslog);
26
+ *
27
+ * @author Sven Paulus <sven@karlsruhe.org>
28
+ */
29
+ class SyslogHandler extends AbstractSyslogHandler
30
+ {
31
+ protected $ident;
32
+ protected $logopts;
33
+
34
+ /**
35
+ * @param string $ident
36
+ * @param mixed $facility
37
+ * @param int $level The minimum logging level at which this handler will be triggered
38
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
39
+ * @param int $logopts Option flags for the openlog() call, defaults to LOG_PID
40
+ */
41
+ public function __construct($ident, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $logopts = LOG_PID)
42
+ {
43
+ parent::__construct($facility, $level, $bubble);
44
+
45
+ $this->ident = $ident;
46
+ $this->logopts = $logopts;
47
+ }
48
+
49
+ /**
50
+ * {@inheritdoc}
51
+ */
52
+ public function close()
53
+ {
54
+ closelog();
55
+ }
56
+
57
+ /**
58
+ * {@inheritdoc}
59
+ */
60
+ protected function write(array $record)
61
+ {
62
+ if (!openlog($this->ident, $this->logopts, $this->facility)) {
63
+ throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"');
64
+ }
65
+ syslog($this->logLevels[$record['level']], (string) $record['formatted']);
66
+ }
67
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler\SyslogUdp;
13
+
14
+ class UdpSocket
15
+ {
16
+ const DATAGRAM_MAX_LENGTH = 65023;
17
+
18
+ protected $ip;
19
+ protected $port;
20
+ protected $socket;
21
+
22
+ public function __construct($ip, $port = 514)
23
+ {
24
+ $this->ip = $ip;
25
+ $this->port = $port;
26
+ $this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
27
+ }
28
+
29
+ public function write($line, $header = "")
30
+ {
31
+ $this->send($this->assembleMessage($line, $header));
32
+ }
33
+
34
+ public function close()
35
+ {
36
+ if (is_resource($this->socket)) {
37
+ socket_close($this->socket);
38
+ $this->socket = null;
39
+ }
40
+ }
41
+
42
+ protected function send($chunk)
43
+ {
44
+ if (!is_resource($this->socket)) {
45
+ throw new \LogicException('The UdpSocket to '.$this->ip.':'.$this->port.' has been closed and can not be written to anymore');
46
+ }
47
+ socket_sendto($this->socket, $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port);
48
+ }
49
+
50
+ protected function assembleMessage($line, $header)
51
+ {
52
+ $chunkSize = self::DATAGRAM_MAX_LENGTH - strlen($header);
53
+
54
+ return $header . substr($line, 0, $chunkSize);
55
+ }
56
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ use Monolog\Logger;
15
+ use Monolog\Handler\SyslogUdp\UdpSocket;
16
+
17
+ /**
18
+ * A Handler for logging to a remote syslogd server.
19
+ *
20
+ * @author Jesper Skovgaard Nielsen <nulpunkt@gmail.com>
21
+ */
22
+ class SyslogUdpHandler extends AbstractSyslogHandler
23
+ {
24
+ protected $socket;
25
+ protected $ident;
26
+
27
+ /**
28
+ * @param string $host
29
+ * @param int $port
30
+ * @param mixed $facility
31
+ * @param int $level The minimum logging level at which this handler will be triggered
32
+ * @param bool $bubble Whether the messages that are handled can bubble up the stack or not
33
+ * @param string $ident Program name or tag for each log message.
34
+ */
35
+ public function __construct($host, $port = 514, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $ident = 'php')
36
+ {
37
+ parent::__construct($facility, $level, $bubble);
38
+
39
+ $this->ident = $ident;
40
+
41
+ $this->socket = new UdpSocket($host, $port ?: 514);
42
+ }
43
+
44
+ protected function write(array $record)
45
+ {
46
+ $lines = $this->splitMessageIntoLines($record['formatted']);
47
+
48
+ $header = $this->makeCommonSyslogHeader($this->logLevels[$record['level']]);
49
+
50
+ foreach ($lines as $line) {
51
+ $this->socket->write($line, $header);
52
+ }
53
+ }
54
+
55
+ public function close()
56
+ {
57
+ $this->socket->close();
58
+ }
59
+
60
+ private function splitMessageIntoLines($message)
61
+ {
62
+ if (is_array($message)) {
63
+ $message = implode("\n", $message);
64
+ }
65
+
66
+ return preg_split('/$\R?^/m', $message, -1, PREG_SPLIT_NO_EMPTY);
67
+ }
68
+
69
+ /**
70
+ * Make common syslog header (see rfc5424)
71
+ */
72
+ protected function makeCommonSyslogHeader($severity)
73
+ {
74
+ $priority = $severity + $this->facility;
75
+
76
+ if (!$pid = getmypid()) {
77
+ $pid = '-';
78
+ }
79
+
80
+ if (!$hostname = gethostname()) {
81
+ $hostname = '-';
82
+ }
83
+
84
+ return "<$priority>1 " .
85
+ $this->getDateTime() . " " .
86
+ $hostname . " " .
87
+ $this->ident . " " .
88
+ $pid . " - - ";
89
+ }
90
+
91
+ protected function getDateTime()
92
+ {
93
+ return date(\DateTime::RFC3339);
94
+ }
95
+
96
+ /**
97
+ * Inject your own socket, mainly used for testing
98
+ */
99
+ public function setSocket($socket)
100
+ {
101
+ $this->socket = $socket;
102
+ }
103
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ /**
15
+ * Used for testing purposes.
16
+ *
17
+ * It records all records and gives you access to them for verification.
18
+ *
19
+ * @author Jordi Boggiano <j.boggiano@seld.be>
20
+ *
21
+ * @method bool hasEmergency($record)
22
+ * @method bool hasAlert($record)
23
+ * @method bool hasCritical($record)
24
+ * @method bool hasError($record)
25
+ * @method bool hasWarning($record)
26
+ * @method bool hasNotice($record)
27
+ * @method bool hasInfo($record)
28
+ * @method bool hasDebug($record)
29
+ *
30
+ * @method bool hasEmergencyRecords()
31
+ * @method bool hasAlertRecords()
32
+ * @method bool hasCriticalRecords()
33
+ * @method bool hasErrorRecords()
34
+ * @method bool hasWarningRecords()
35
+ * @method bool hasNoticeRecords()
36
+ * @method bool hasInfoRecords()
37
+ * @method bool hasDebugRecords()
38
+ *
39
+ * @method bool hasEmergencyThatContains($message)
40
+ * @method bool hasAlertThatContains($message)
41
+ * @method bool hasCriticalThatContains($message)
42
+ * @method bool hasErrorThatContains($message)
43
+ * @method bool hasWarningThatContains($message)
44
+ * @method bool hasNoticeThatContains($message)
45
+ * @method bool hasInfoThatContains($message)
46
+ * @method bool hasDebugThatContains($message)
47
+ *
48
+ * @method bool hasEmergencyThatMatches($message)
49
+ * @method bool hasAlertThatMatches($message)
50
+ * @method bool hasCriticalThatMatches($message)
51
+ * @method bool hasErrorThatMatches($message)
52
+ * @method bool hasWarningThatMatches($message)
53
+ * @method bool hasNoticeThatMatches($message)
54
+ * @method bool hasInfoThatMatches($message)
55
+ * @method bool hasDebugThatMatches($message)
56
+ *
57
+ * @method bool hasEmergencyThatPasses($message)
58
+ * @method bool hasAlertThatPasses($message)
59
+ * @method bool hasCriticalThatPasses($message)
60
+ * @method bool hasErrorThatPasses($message)
61
+ * @method bool hasWarningThatPasses($message)
62
+ * @method bool hasNoticeThatPasses($message)
63
+ * @method bool hasInfoThatPasses($message)
64
+ * @method bool hasDebugThatPasses($message)
65
+ */
66
+ class TestHandler extends AbstractProcessingHandler
67
+ {
68
+ protected $records = array();
69
+ protected $recordsByLevel = array();
70
+
71
+ public function getRecords()
72
+ {
73
+ return $this->records;
74
+ }
75
+
76
+ public function clear()
77
+ {
78
+ $this->records = array();
79
+ $this->recordsByLevel = array();
80
+ }
81
+
82
+ public function hasRecords($level)
83
+ {
84
+ return isset($this->recordsByLevel[$level]);
85
+ }
86
+
87
+ /**
88
+ * @param string|array $record Either a message string or an array containing message and optionally context keys that will be checked against all records
89
+ * @param int $level Logger::LEVEL constant value
90
+ */
91
+ public function hasRecord($record, $level)
92
+ {
93
+ if (is_string($record)) {
94
+ $record = array('message' => $record);
95
+ }
96
+
97
+ return $this->hasRecordThatPasses(function ($rec) use ($record) {
98
+ if ($rec['message'] !== $record['message']) {
99
+ return false;
100
+ }
101
+ if (isset($record['context']) && $rec['context'] !== $record['context']) {
102
+ return false;
103
+ }
104
+ return true;
105
+ }, $level);
106
+ }
107
+
108
+ public function hasRecordThatContains($message, $level)
109
+ {
110
+ return $this->hasRecordThatPasses(function ($rec) use ($message) {
111
+ return strpos($rec['message'], $message) !== false;
112
+ }, $level);
113
+ }
114
+
115
+ public function hasRecordThatMatches($regex, $level)
116
+ {
117
+ return $this->hasRecordThatPasses(function ($rec) use ($regex) {
118
+ return preg_match($regex, $rec['message']) > 0;
119
+ }, $level);
120
+ }
121
+
122
+ public function hasRecordThatPasses($predicate, $level)
123
+ {
124
+ if (!is_callable($predicate)) {
125
+ throw new \InvalidArgumentException("Expected a callable for hasRecordThatSucceeds");
126
+ }
127
+
128
+ if (!isset($this->recordsByLevel[$level])) {
129
+ return false;
130
+ }
131
+
132
+ foreach ($this->recordsByLevel[$level] as $i => $rec) {
133
+ if (call_user_func($predicate, $rec, $i)) {
134
+ return true;
135
+ }
136
+ }
137
+
138
+ return false;
139
+ }
140
+
141
+ /**
142
+ * {@inheritdoc}
143
+ */
144
+ protected function write(array $record)
145
+ {
146
+ $this->recordsByLevel[$record['level']][] = $record;
147
+ $this->records[] = $record;
148
+ }
149
+
150
+ public function __call($method, $args)
151
+ {
152
+ if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
153
+ $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
154
+ $level = constant('Monolog\Logger::' . strtoupper($matches[2]));
155
+ if (method_exists($this, $genericMethod)) {
156
+ $args[] = $level;
157
+
158
+ return call_user_func_array(array($this, $genericMethod), $args);
159
+ }
160
+ }
161
+
162
+ throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
163
+ }
164
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Handler;
13
+
14
+ /**
15
+ * Forwards records to multiple handlers suppressing failures of each handler
16
+ * and continuing through to give every handler a chance to succeed.
17
+ *
18
+ * @author Craig D'Amelio <craig@damelio.ca>
19
+ */
20
+ class WhatFailureGroupHandler extends GroupHandler
21
+ {
22
+ /**
23
+ * {@inheritdoc}
24
+ */
25
+ public function handle(array $record)
26
+ {
27
+ if ($this->processors) {
28
+ foreach ($this->processors as $processor) {
29
+ $record = call_user_func($processor, $record);
30
+ }
31
+ }
32
+
33
+ foreach ($this->handlers as $handler) {
34
+ try {
35
+ $handler->handle($record);
36
+ } catch (\Exception $e) {
37
+ // What failure?
38
+ } catch (\Throwable $e) {
39
+ // What failure?
40
+ }
41
+ }
42
+
43
+ return false === $this->bubble;
44
+ }
45
+
46
+ /**
47
+ * {@inheritdoc}
48
+ */
49
+ public function handleBatch(array $records)
50
+ {
51
+ if ($this->processors) {
52
+ $processed = array();
53
+ foreach ($records as $record) {
54
+ foreach ($this->processors as $processor) {
55
+ $processed[] = call_user_func($processor, $record);
56
+ }
57
+ }
58
+ $records = $processed;
59
+ }
60
+
61
+ foreach ($this->handlers as $handler) {
62
+ try {
63
+ $handler->handleBatch($records);
64
+ } catch (\Exception $e) {
65
+ // What failure?
66
+ } catch (\Throwable $e) {
67
+ // What failure?
68
+ }
69
+ }
70
+ }
71
+ }
common/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * This file is part of the Monolog package.
4
+ *
5
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
6
+ *
7
+ * For the full copyright and license information, please view the LICENSE
8
+ * file that was distributed with this source code.
9
+ */
10
+
11
+ namespace Monolog\Handler;
12
+
13
+ use Monolog\Formatter\NormalizerFormatter;
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Handler sending logs to Zend Monitor
18
+ *
19
+ * @author Christian Bergau <cbergau86@gmail.com>
20
+ */
21
+ class ZendMonitorHandler extends AbstractProcessingHandler
22
+ {
23
+ /**
24
+ * Monolog level / ZendMonitor Custom Event priority map
25
+ *
26
+ * @var array
27
+ */
28
+ protected $levelMap = array(
29
+ Logger::DEBUG => 1,
30
+ Logger::INFO => 2,
31
+ Logger::NOTICE => 3,
32
+ Logger::WARNING => 4,
33
+ Logger::ERROR => 5,
34
+ Logger::CRITICAL => 6,
35
+ Logger::ALERT => 7,
36
+ Logger::EMERGENCY => 0,
37
+ );
38
+
39
+ /**
40
+ * Construct
41
+ *
42
+ * @param int $level
43
+ * @param bool $bubble
44
+ * @throws MissingExtensionException
45
+ */
46
+ public function __construct($level = Logger::DEBUG, $bubble = true)
47
+ {
48
+ if (!function_exists('zend_monitor_custom_event')) {
49
+ throw new MissingExtensionException('You must have Zend Server installed in order to use this handler');
50
+ }
51
+ parent::__construct($level, $bubble);
52
+ }
53
+
54
+ /**
55
+ * {@inheritdoc}
56
+ */
57
+ protected function write(array $record)
58
+ {
59
+ $this->writeZendMonitorCustomEvent(
60
+ $this->levelMap[$record['level']],
61
+ $record['message'],
62
+ $record['formatted']
63
+ );
64
+ }
65
+
66
+ /**
67
+ * Write a record to Zend Monitor
68
+ *
69
+ * @param int $level
70
+ * @param string $message
71
+ * @param array $formatted
72
+ */
73
+ protected function writeZendMonitorCustomEvent($level, $message, $formatted)
74
+ {
75
+ zend_monitor_custom_event($level, $message, $formatted);
76
+ }
77
+
78
+ /**
79
+ * {@inheritdoc}
80
+ */
81
+ public function getDefaultFormatter()
82
+ {
83
+ return new NormalizerFormatter();
84
+ }
85
+
86
+ /**
87
+ * Get the level map
88
+ *
89
+ * @return array
90
+ */
91
+ public function getLevelMap()
92
+ {
93
+ return $this->levelMap;
94
+ }
95
+ }
common/vendor/monolog/monolog/src/Monolog/Logger.php ADDED
@@ -0,0 +1,791 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ use Monolog\Handler\HandlerInterface;
15
+ use Monolog\Handler\StreamHandler;
16
+ use Psr\Log\LoggerInterface;
17
+ use Psr\Log\InvalidArgumentException;
18
+ use Exception;
19
+
20
+ /**
21
+ * Monolog log channel
22
+ *
23
+ * It contains a stack of Handlers and a stack of Processors,
24
+ * and uses them to store records that are added to it.
25
+ *
26
+ * @author Jordi Boggiano <j.boggiano@seld.be>
27
+ */
28
+ class Logger implements LoggerInterface, ResettableInterface
29
+ {
30
+ /**
31
+ * Detailed debug information
32
+ */
33
+ const DEBUG = 100;
34
+
35
+ /**
36
+ * Interesting events
37
+ *
38
+ * Examples: User logs in, SQL logs.
39
+ */
40
+ const INFO = 200;
41
+
42
+ /**
43
+ * Uncommon events
44
+ */
45
+ const NOTICE = 250;
46
+
47
+ /**
48
+ * Exceptional occurrences that are not errors
49
+ *
50
+ * Examples: Use of deprecated APIs, poor use of an API,
51
+ * undesirable things that are not necessarily wrong.
52
+ */
53
+ const WARNING = 300;
54
+
55
+ /**
56
+ * Runtime errors
57
+ */
58
+ const ERROR = 400;
59
+
60
+ /**
61
+ * Critical conditions
62
+ *
63
+ * Example: Application component unavailable, unexpected exception.
64
+ */
65
+ const CRITICAL = 500;
66
+
67
+ /**
68
+ * Action must be taken immediately
69
+ *
70
+ * Example: Entire website down, database unavailable, etc.
71
+ * This should trigger the SMS alerts and wake you up.
72
+ */
73
+ const ALERT = 550;
74
+
75
+ /**
76
+ * Urgent alert.
77
+ */
78
+ const EMERGENCY = 600;
79
+
80
+ /**
81
+ * Monolog API version
82
+ *
83
+ * This is only bumped when API breaks are done and should
84
+ * follow the major version of the library
85
+ *
86
+ * @var int
87
+ */
88
+ const API = 1;
89
+
90
+ /**
91
+ * Logging levels from syslog protocol defined in RFC 5424
92
+ *
93
+ * @var array $levels Logging levels
94
+ */
95
+ protected static $levels = array(
96
+ self::DEBUG => 'DEBUG',
97
+ self::INFO => 'INFO',
98
+ self::NOTICE => 'NOTICE',
99
+ self::WARNING => 'WARNING',
100
+ self::ERROR => 'ERROR',
101
+ self::CRITICAL => 'CRITICAL',
102
+ self::ALERT => 'ALERT',
103
+ self::EMERGENCY => 'EMERGENCY',
104
+ );
105
+
106
+ /**
107
+ * @var \DateTimeZone
108
+ */
109
+ protected static $timezone;
110
+
111
+ /**
112
+ * @var string
113
+ */
114
+ protected $name;
115
+
116
+ /**
117
+ * The handler stack
118
+ *
119
+ * @var HandlerInterface[]
120
+ */
121
+ protected $handlers;
122
+
123
+ /**
124
+ * Processors that will process all log records
125
+ *
126
+ * To process records of a single handler instead, add the processor on that specific handler
127
+ *
128
+ * @var callable[]
129
+ */
130
+ protected $processors;
131
+
132
+ /**
133
+ * @var bool
134
+ */
135
+ protected $microsecondTimestamps = true;
136
+
137
+ /**
138
+ * @var callable
139
+ */
140
+ protected $exceptionHandler;
141
+
142
+ /**
143
+ * @param string $name The logging channel
144
+ * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc.
145
+ * @param callable[] $processors Optional array of processors
146
+ */
147
+ public function __construct($name, array $handlers = array(), array $processors = array())
148
+ {
149
+ $this->name = $name;
150
+ $this->setHandlers($handlers);
151
+ $this->processors = $processors;
152
+ }
153
+
154
+ /**
155
+ * @return string
156
+ */
157
+ public function getName()
158
+ {
159
+ return $this->name;
160
+ }
161
+
162
+ /**
163
+ * Return a new cloned instance with the name changed
164
+ *
165
+ * @return static
166
+ */
167
+ public function withName($name)
168
+ {
169
+ $new = clone $this;
170
+ $new->name = $name;
171
+
172
+ return $new;
173
+ }
174
+
175
+ /**
176
+ * Pushes a handler on to the stack.
177
+ *
178
+ * @param HandlerInterface $handler
179
+ * @return $this
180
+ */
181
+ public function pushHandler(HandlerInterface $handler)
182
+ {
183
+ array_unshift($this->handlers, $handler);
184
+
185
+ return $this;
186
+ }
187
+
188
+ /**
189
+ * Pops a handler from the stack
190
+ *
191
+ * @return HandlerInterface
192
+ */
193
+ public function popHandler()
194
+ {
195
+ if (!$this->handlers) {
196
+ throw new \LogicException('You tried to pop from an empty handler stack.');
197
+ }
198
+
199
+ return array_shift($this->handlers);
200
+ }
201
+
202
+ /**
203
+ * Set handlers, replacing all existing ones.
204
+ *
205
+ * If a map is passed, keys will be ignored.
206
+ *
207
+ * @param HandlerInterface[] $handlers
208
+ * @return $this
209
+ */
210
+ public function setHandlers(array $handlers)
211
+ {
212
+ $this->handlers = array();
213
+ foreach (array_reverse($handlers) as $handler) {
214
+ $this->pushHandler($handler);
215
+ }
216
+
217
+ return $this;
218
+ }
219
+
220
+ /**
221
+ * @return HandlerInterface[]
222
+ */
223
+ public function getHandlers()
224
+ {
225
+ return $this->handlers;
226
+ }
227
+
228
+ /**
229
+ * Adds a processor on to the stack.
230
+ *
231
+ * @param callable $callback
232
+ * @return $this
233
+ */
234
+ public function pushProcessor($callback)
235
+ {
236
+ if (!is_callable($callback)) {
237
+ throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given');
238
+ }
239
+ array_unshift($this->processors, $callback);
240
+
241
+ return $this;
242
+ }
243
+
244
+ /**
245
+ * Removes the processor on top of the stack and returns it.
246
+ *
247
+ * @return callable
248
+ */
249
+ public function popProcessor()
250
+ {
251
+ if (!$this->processors) {
252
+ throw new \LogicException('You tried to pop from an empty processor stack.');
253
+ }
254
+
255
+ return array_shift($this->processors);
256
+ }
257
+
258
+ /**
259
+ * @return callable[]
260
+ */
261
+ public function getProcessors()
262
+ {
263
+ return $this->processors;
264
+ }
265
+
266
+ /**
267
+ * Control the use of microsecond resolution timestamps in the 'datetime'
268
+ * member of new records.
269
+ *
270
+ * Generating microsecond resolution timestamps by calling
271
+ * microtime(true), formatting the result via sprintf() and then parsing
272
+ * the resulting string via \DateTime::createFromFormat() can incur
273
+ * a measurable runtime overhead vs simple usage of DateTime to capture
274
+ * a second resolution timestamp in systems which generate a large number
275
+ * of log events.
276
+ *
277
+ * @param bool $micro True to use microtime() to create timestamps
278
+ */
279
+ public function useMicrosecondTimestamps($micro)
280
+ {
281
+ $this->microsecondTimestamps = (bool) $micro;
282
+ }
283
+
284
+ /**
285
+ * Adds a log record.
286
+ *
287
+ * @param int $level The logging level
288
+ * @param string $message The log message
289
+ * @param array $context The log context
290
+ * @return bool Whether the record has been processed
291
+ */
292
+ public function addRecord($level, $message, array $context = array())
293
+ {
294
+ if (!$this->handlers) {
295
+ $this->pushHandler(new StreamHandler('php://stderr', static::DEBUG));
296
+ }
297
+
298
+ $levelName = static::getLevelName($level);
299
+
300
+ // check if any handler will handle this message so we can return early and save cycles
301
+ $handlerKey = null;
302
+ reset($this->handlers);
303
+ while ($handler = current($this->handlers)) {
304
+ if ($handler->isHandling(array('level' => $level))) {
305
+ $handlerKey = key($this->handlers);
306
+ break;
307
+ }
308
+
309
+ next($this->handlers);
310
+ }
311
+
312
+ if (null === $handlerKey) {
313
+ return false;
314
+ }
315
+
316
+ if (!static::$timezone) {
317
+ static::$timezone = new \DateTimeZone(date_default_timezone_get() ?: 'UTC');
318
+ }
319
+
320
+ // php7.1+ always has microseconds enabled, so we do not need this hack
321
+ if ($this->microsecondTimestamps && PHP_VERSION_ID < 70100) {
322
+ $ts = \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), static::$timezone);
323
+ } else {
324
+ $ts = new \DateTime(null, static::$timezone);
325
+ }
326
+ $ts->setTimezone(static::$timezone);
327
+
328
+ $record = array(
329
+ 'message' => (string) $message,
330
+ 'context' => $context,
331
+ 'level' => $level,
332
+ 'level_name' => $levelName,
333
+ 'channel' => $this->name,
334
+ 'datetime' => $ts,
335
+ 'extra' => array(),
336
+ );
337
+
338
+ try {
339
+ foreach ($this->processors as $processor) {
340
+ $record = call_user_func($processor, $record);
341
+ }
342
+
343
+ while ($handler = current($this->handlers)) {
344
+ if (true === $handler->handle($record)) {
345
+ break;
346
+ }
347
+
348
+ next($this->handlers);
349
+ }
350
+ } catch (Exception $e) {
351
+ $this->handleException($e, $record);
352
+ }
353
+
354
+ return true;
355
+ }
356
+
357
+ /**
358
+ * Ends a log cycle and frees all resources used by handlers.
359
+ *
360
+ * Closing a Handler means flushing all buffers and freeing any open resources/handles.
361
+ * Handlers that have been closed should be able to accept log records again and re-open
362
+ * themselves on demand, but this may not always be possible depending on implementation.
363
+ *
364
+ * This is useful at the end of a request and will be called automatically on every handler
365
+ * when they get destructed.
366
+ */
367
+ public function close()
368
+ {
369
+ foreach ($this->handlers as $handler) {
370
+ if (method_exists($handler, 'close')) {
371
+ $handler->close();
372
+ }
373
+ }
374
+ }
375
+
376
+ /**
377
+ * Ends a log cycle and resets all handlers and processors to their initial state.
378
+ *
379
+ * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal
380
+ * state, and getting it back to a state in which it can receive log records again.
381
+ *
382
+ * This is useful in case you want to avoid logs leaking between two requests or jobs when you
383
+ * have a long running process like a worker or an application server serving multiple requests
384
+ * in one process.
385
+ */
386
+ public function reset()
387
+ {
388
+ foreach ($this->handlers as $handler) {
389
+ if ($handler instanceof ResettableInterface) {
390
+ $handler->reset();
391
+ }
392
+ }
393
+
394
+ foreach ($this->processors as $processor) {
395
+ if ($processor instanceof ResettableInterface) {
396
+ $processor->reset();
397
+ }
398
+ }
399
+ }
400
+
401
+ /**
402
+ * Adds a log record at the DEBUG level.
403
+ *
404
+ * @param string $message The log message
405
+ * @param array $context The log context
406
+ * @return bool Whether the record has been processed
407
+ */
408
+ public function addDebug($message, array $context = array())
409
+ {
410
+ return $this->addRecord(static::DEBUG, $message, $context);
411
+ }
412
+
413
+ /**
414
+ * Adds a log record at the INFO level.
415
+ *
416
+ * @param string $message The log message
417
+ * @param array $context The log context
418
+ * @return bool Whether the record has been processed
419
+ */
420
+ public function addInfo($message, array $context = array())
421
+ {
422
+ return $this->addRecord(static::INFO, $message, $context);
423
+ }
424
+
425
+ /**
426
+ * Adds a log record at the NOTICE level.
427
+ *
428
+ * @param string $message The log message
429
+ * @param array $context The log context
430
+ * @return bool Whether the record has been processed
431
+ */
432
+ public function addNotice($message, array $context = array())
433
+ {
434
+ return $this->addRecord(static::NOTICE, $message, $context);
435
+ }
436
+
437
+ /**
438
+ * Adds a log record at the WARNING level.
439
+ *
440
+ * @param string $message The log message
441
+ * @param array $context The log context
442
+ * @return bool Whether the record has been processed
443
+ */
444
+ public function addWarning($message, array $context = array())
445
+ {
446
+ return $this->addRecord(static::WARNING, $message, $context);
447
+ }
448
+
449
+ /**
450
+ * Adds a log record at the ERROR level.
451
+ *
452
+ * @param string $message The log message
453
+ * @param array $context The log context
454
+ * @return bool Whether the record has been processed
455
+ */
456
+ public function addError($message, array $context = array())
457
+ {
458
+ return $this->addRecord(static::ERROR, $message, $context);
459
+ }
460
+
461
+ /**
462
+ * Adds a log record at the CRITICAL level.
463
+ *
464
+ * @param string $message The log message
465
+ * @param array $context The log context
466
+ * @return bool Whether the record has been processed
467
+ */
468
+ public function addCritical($message, array $context = array())
469
+ {
470
+ return $this->addRecord(static::CRITICAL, $message, $context);
471
+ }
472
+
473
+ /**
474
+ * Adds a log record at the ALERT level.
475
+ *
476
+ * @param string $message The log message
477
+ * @param array $context The log context
478
+ * @return bool Whether the record has been processed
479
+ */
480
+ public function addAlert($message, array $context = array())
481
+ {
482
+ return $this->addRecord(static::ALERT, $message, $context);
483
+ }
484
+
485
+ /**
486
+ * Adds a log record at the EMERGENCY level.
487
+ *
488
+ * @param string $message The log message
489
+ * @param array $context The log context
490
+ * @return bool Whether the record has been processed
491
+ */
492
+ public function addEmergency($message, array $context = array())
493
+ {
494
+ return $this->addRecord(static::EMERGENCY, $message, $context);
495
+ }
496
+
497
+ /**
498
+ * Gets all supported logging levels.
499
+ *
500
+ * @return array Assoc array with human-readable level names => level codes.
501
+ */
502
+ public static function getLevels()
503
+ {
504
+ return array_flip(static::$levels);
505
+ }
506
+
507
+ /**
508
+ * Gets the name of the logging level.
509
+ *
510
+ * @param int $level
511
+ * @return string
512
+ */
513
+ public static function getLevelName($level)
514
+ {
515
+ if (!isset(static::$levels[$level])) {
516
+ throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels)));
517
+ }
518
+
519
+ return static::$levels[$level];
520
+ }
521
+
522
+ /**
523
+ * Converts PSR-3 levels to Monolog ones if necessary
524
+ *
525
+ * @param string|int Level number (monolog) or name (PSR-3)
526
+ * @return int
527
+ */
528
+ public static function toMonologLevel($level)
529
+ {
530
+ if (is_string($level) && defined(__CLASS__.'::'.strtoupper($level))) {
531
+ return constant(__CLASS__.'::'.strtoupper($level));
532
+ }
533
+
534
+ return $level;
535
+ }
536
+
537
+ /**
538
+ * Checks whether the Logger has a handler that listens on the given level
539
+ *
540
+ * @param int $level
541
+ * @return bool
542
+ */
543
+ public function isHandling($level)
544
+ {
545
+ $record = array(
546
+ 'level' => $level,
547
+ );
548
+
549
+ foreach ($this->handlers as $handler) {
550
+ if ($handler->isHandling($record)) {
551
+ return true;
552
+ }
553
+ }
554
+
555
+ return false;
556
+ }
557
+
558
+ /**
559
+ * Set a custom exception handler
560
+ *
561
+ * @param callable $callback
562
+ * @return $this
563
+ */
564
+ public function setExceptionHandler($callback)
565
+ {
566
+ if (!is_callable($callback)) {
567
+ throw new \InvalidArgumentException('Exception handler must be valid callable (callback or object with an __invoke method), '.var_export($callback, true).' given');
568
+ }
569
+ $this->exceptionHandler = $callback;
570
+
571
+ return $this;
572
+ }
573
+
574
+ /**
575
+ * @return callable
576
+ */
577
+ public function getExceptionHandler()
578
+ {
579
+ return $this->exceptionHandler;
580
+ }
581
+
582
+ /**
583
+ * Delegates exception management to the custom exception handler,
584
+ * or throws the exception if no custom handler is set.
585
+ */
586
+ protected function handleException(Exception $e, array $record)
587
+ {
588
+ if (!$this->exceptionHandler) {
589
+ throw $e;
590
+ }
591
+
592
+ call_user_func($this->exceptionHandler, $e, $record);
593
+ }
594
+
595
+ /**
596
+ * Adds a log record at an arbitrary level.
597
+ *
598
+ * This method allows for compatibility with common interfaces.
599
+ *
600
+ * @param mixed $level The log level
601
+ * @param string $message The log message
602
+ * @param array $context The log context
603
+ * @return bool Whether the record has been processed
604
+ */
605
+ public function log($level, $message, array $context = array())
606
+ {
607
+ $level = static::toMonologLevel($level);
608
+
609
+ return $this->addRecord($level, $message, $context);
610
+ }
611
+
612
+ /**
613
+ * Adds a log record at the DEBUG level.
614
+ *
615
+ * This method allows for compatibility with common interfaces.
616
+ *
617
+ * @param string $message The log message
618
+ * @param array $context The log context
619
+ * @return bool Whether the record has been processed
620
+ */
621
+ public function debug($message, array $context = array())
622
+ {
623
+ return $this->addRecord(static::DEBUG, $message, $context);
624
+ }
625
+
626
+ /**
627
+ * Adds a log record at the INFO level.
628
+ *
629
+ * This method allows for compatibility with common interfaces.
630
+ *
631
+ * @param string $message The log message
632
+ * @param array $context The log context
633
+ * @return bool Whether the record has been processed
634
+ */
635
+ public function info($message, array $context = array())
636
+ {
637
+ return $this->addRecord(static::INFO, $message, $context);
638
+ }
639
+
640
+ /**
641
+ * Adds a log record at the NOTICE level.
642
+ *
643
+ * This method allows for compatibility with common interfaces.
644
+ *
645
+ * @param string $message The log message
646
+ * @param array $context The log context
647
+ * @return bool Whether the record has been processed
648
+ */
649
+ public function notice($message, array $context = array())
650
+ {
651
+ return $this->addRecord(static::NOTICE, $message, $context);
652
+ }
653
+
654
+ /**
655
+ * Adds a log record at the WARNING level.
656
+ *
657
+ * This method allows for compatibility with common interfaces.
658
+ *
659
+ * @param string $message The log message
660
+ * @param array $context The log context
661
+ * @return bool Whether the record has been processed
662
+ */
663
+ public function warn($message, array $context = array())
664
+ {
665
+ return $this->addRecord(static::WARNING, $message, $context);
666
+ }
667
+
668
+ /**
669
+ * Adds a log record at the WARNING level.
670
+ *
671
+ * This method allows for compatibility with common interfaces.
672
+ *
673
+ * @param string $message The log message
674
+ * @param array $context The log context
675
+ * @return bool Whether the record has been processed
676
+ */
677
+ public function warning($message, array $context = array())
678
+ {
679
+ return $this->addRecord(static::WARNING, $message, $context);
680
+ }
681
+
682
+ /**
683
+ * Adds a log record at the ERROR level.
684
+ *
685
+ * This method allows for compatibility with common interfaces.
686
+ *
687
+ * @param string $message The log message
688
+ * @param array $context The log context
689
+ * @return bool Whether the record has been processed
690
+ */
691
+ public function err($message, array $context = array())
692
+ {
693
+ return $this->addRecord(static::ERROR, $message, $context);
694
+ }
695
+
696
+ /**
697
+ * Adds a log record at the ERROR level.
698
+ *
699
+ * This method allows for compatibility with common interfaces.
700
+ *
701
+ * @param string $message The log message
702
+ * @param array $context The log context
703
+ * @return bool Whether the record has been processed
704
+ */
705
+ public function error($message, array $context = array())
706
+ {
707
+ return $this->addRecord(static::ERROR, $message, $context);
708
+ }
709
+
710
+ /**
711
+ * Adds a log record at the CRITICAL level.
712
+ *
713
+ * This method allows for compatibility with common interfaces.
714
+ *
715
+ * @param string $message The log message
716
+ * @param array $context The log context
717
+ * @return bool Whether the record has been processed
718
+ */
719
+ public function crit($message, array $context = array())
720
+ {
721
+ return $this->addRecord(static::CRITICAL, $message, $context);
722
+ }
723
+
724
+ /**
725
+ * Adds a log record at the CRITICAL level.
726
+ *
727
+ * This method allows for compatibility with common interfaces.
728
+ *
729
+ * @param string $message The log message
730
+ * @param array $context The log context
731
+ * @return bool Whether the record has been processed
732
+ */
733
+ public function critical($message, array $context = array())
734
+ {
735
+ return $this->addRecord(static::CRITICAL, $message, $context);
736
+ }
737
+
738
+ /**
739
+ * Adds a log record at the ALERT level.
740
+ *
741
+ * This method allows for compatibility with common interfaces.
742
+ *
743
+ * @param string $message The log message
744
+ * @param array $context The log context
745
+ * @return bool Whether the record has been processed
746
+ */
747
+ public function alert($message, array $context = array())
748
+ {
749
+ return $this->addRecord(static::ALERT, $message, $context);
750
+ }
751
+
752
+ /**
753
+ * Adds a log record at the EMERGENCY level.
754
+ *
755
+ * This method allows for compatibility with common interfaces.
756
+ *
757
+ * @param string $message The log message
758
+ * @param array $context The log context
759
+ * @return bool Whether the record has been processed
760
+ */
761
+ public function emerg($message, array $context = array())
762
+ {
763
+ return $this->addRecord(static::EMERGENCY, $message, $context);
764
+ }
765
+
766
+ /**
767
+ * Adds a log record at the EMERGENCY level.
768
+ *
769
+ * This method allows for compatibility with common interfaces.
770
+ *
771
+ * @param string $message The log message
772
+ * @param array $context The log context
773
+ * @return bool Whether the record has been processed
774
+ */
775
+ public function emergency($message, array $context = array())
776
+ {
777
+ return $this->addRecord(static::EMERGENCY, $message, $context);
778
+ }
779
+
780
+ /**
781
+ * Set the timezone to be used for the timestamp of log records.
782
+ *
783
+ * This is stored globally for all Logger instances
784
+ *
785
+ * @param \DateTimeZone $tz Timezone object
786
+ */
787
+ public static function setTimezone(\DateTimeZone $tz)
788
+ {
789
+ self::$timezone = $tz;
790
+ }
791
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Injects Git branch and Git commit SHA in all records
18
+ *
19
+ * @author Nick Otter
20
+ * @author Jordi Boggiano <j.boggiano@seld.be>
21
+ */
22
+ class GitProcessor implements ProcessorInterface
23
+ {
24
+ private $level;
25
+ private static $cache;
26
+
27
+ public function __construct($level = Logger::DEBUG)
28
+ {
29
+ $this->level = Logger::toMonologLevel($level);
30
+ }
31
+
32
+ /**
33
+ * @param array $record
34
+ * @return array
35
+ */
36
+ public function __invoke(array $record)
37
+ {
38
+ // return if the level is not high enough
39
+ if ($record['level'] < $this->level) {
40
+ return $record;
41
+ }
42
+
43
+ $record['extra']['git'] = self::getGitInfo();
44
+
45
+ return $record;
46
+ }
47
+
48
+ private static function getGitInfo()
49
+ {
50
+ if (self::$cache) {
51
+ return self::$cache;
52
+ }
53
+
54
+ $branches = `git branch -v --no-abbrev`;
55
+ if (preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) {
56
+ return self::$cache = array(
57
+ 'branch' => $matches[1],
58
+ 'commit' => $matches[2],
59
+ );
60
+ }
61
+
62
+ return self::$cache = array();
63
+ }
64
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Injects line/file:class/function where the log message came from
18
+ *
19
+ * Warning: This only works if the handler processes the logs directly.
20
+ * If you put the processor on a handler that is behind a FingersCrossedHandler
21
+ * for example, the processor will only be called once the trigger level is reached,
22
+ * and all the log records will have the same file/line/.. data from the call that
23
+ * triggered the FingersCrossedHandler.
24
+ *
25
+ * @author Jordi Boggiano <j.boggiano@seld.be>
26
+ */
27
+ class IntrospectionProcessor implements ProcessorInterface
28
+ {
29
+ private $level;
30
+
31
+ private $skipClassesPartials;
32
+
33
+ private $skipStackFramesCount;
34
+
35
+ private $skipFunctions = array(
36
+ 'call_user_func',
37
+ 'call_user_func_array',
38
+ );
39
+
40
+ public function __construct($level = Logger::DEBUG, array $skipClassesPartials = array(), $skipStackFramesCount = 0)
41
+ {
42
+ $this->level = Logger::toMonologLevel($level);
43
+ $this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials);
44
+ $this->skipStackFramesCount = $skipStackFramesCount;
45
+ }
46
+
47
+ /**
48
+ * @param array $record
49
+ * @return array
50
+ */
51
+ public function __invoke(array $record)
52
+ {
53
+ // return if the level is not high enough
54
+ if ($record['level'] < $this->level) {
55
+ return $record;
56
+ }
57
+
58
+ /*
59
+ * http://php.net/manual/en/function.debug-backtrace.php
60
+ * As of 5.3.6, DEBUG_BACKTRACE_IGNORE_ARGS option was added.
61
+ * Any version less than 5.3.6 must use the DEBUG_BACKTRACE_IGNORE_ARGS constant value '2'.
62
+ */
63
+ $trace = debug_backtrace((PHP_VERSION_ID < 50306) ? 2 : DEBUG_BACKTRACE_IGNORE_ARGS);
64
+
65
+ // skip first since it's always the current method
66
+ array_shift($trace);
67
+ // the call_user_func call is also skipped
68
+ array_shift($trace);
69
+
70
+ $i = 0;
71
+
72
+ while ($this->isTraceClassOrSkippedFunction($trace, $i)) {
73
+ if (isset($trace[$i]['class'])) {
74
+ foreach ($this->skipClassesPartials as $part) {
75
+ if (strpos($trace[$i]['class'], $part) !== false) {
76
+ $i++;
77
+ continue 2;
78
+ }
79
+ }
80
+ } elseif (in_array($trace[$i]['function'], $this->skipFunctions)) {
81
+ $i++;
82
+ continue;
83
+ }
84
+
85
+ break;
86
+ }
87
+
88
+ $i += $this->skipStackFramesCount;
89
+
90
+ // we should have the call source now
91
+ $record['extra'] = array_merge(
92
+ $record['extra'],
93
+ array(
94
+ 'file' => isset($trace[$i - 1]['file']) ? $trace[$i - 1]['file'] : null,
95
+ 'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null,
96
+ 'class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : null,
97
+ 'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null,
98
+ )
99
+ );
100
+
101
+ return $record;
102
+ }
103
+
104
+ private function isTraceClassOrSkippedFunction(array $trace, $index)
105
+ {
106
+ if (!isset($trace[$index])) {
107
+ return false;
108
+ }
109
+
110
+ return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions);
111
+ }
112
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Injects memory_get_peak_usage in all records
16
+ *
17
+ * @see Monolog\Processor\MemoryProcessor::__construct() for options
18
+ * @author Rob Jensen
19
+ */
20
+ class MemoryPeakUsageProcessor extends MemoryProcessor
21
+ {
22
+ /**
23
+ * @param array $record
24
+ * @return array
25
+ */
26
+ public function __invoke(array $record)
27
+ {
28
+ $bytes = memory_get_peak_usage($this->realUsage);
29
+ $formatted = $this->formatBytes($bytes);
30
+
31
+ $record['extra']['memory_peak_usage'] = $formatted;
32
+
33
+ return $record;
34
+ }
35
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Some methods that are common for all memory processors
16
+ *
17
+ * @author Rob Jensen
18
+ */
19
+ abstract class MemoryProcessor implements ProcessorInterface
20
+ {
21
+ /**
22
+ * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported.
23
+ */
24
+ protected $realUsage;
25
+
26
+ /**
27
+ * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size)
28
+ */
29
+ protected $useFormatting;
30
+
31
+ /**
32
+ * @param bool $realUsage Set this to true to get the real size of memory allocated from system.
33
+ * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size)
34
+ */
35
+ public function __construct($realUsage = true, $useFormatting = true)
36
+ {
37
+ $this->realUsage = (bool) $realUsage;
38
+ $this->useFormatting = (bool) $useFormatting;
39
+ }
40
+
41
+ /**
42
+ * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is
43
+ *
44
+ * @param int $bytes
45
+ * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as is
46
+ */
47
+ protected function formatBytes($bytes)
48
+ {
49
+ $bytes = (int) $bytes;
50
+
51
+ if (!$this->useFormatting) {
52
+ return $bytes;
53
+ }
54
+
55
+ if ($bytes > 1024 * 1024) {
56
+ return round($bytes / 1024 / 1024, 2).' MB';
57
+ } elseif ($bytes > 1024) {
58
+ return round($bytes / 1024, 2).' KB';
59
+ }
60
+
61
+ return $bytes . ' B';
62
+ }
63
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Injects memory_get_usage in all records
16
+ *
17
+ * @see Monolog\Processor\MemoryProcessor::__construct() for options
18
+ * @author Rob Jensen
19
+ */
20
+ class MemoryUsageProcessor extends MemoryProcessor
21
+ {
22
+ /**
23
+ * @param array $record
24
+ * @return array
25
+ */
26
+ public function __invoke(array $record)
27
+ {
28
+ $bytes = memory_get_usage($this->realUsage);
29
+ $formatted = $this->formatBytes($bytes);
30
+
31
+ $record['extra']['memory_usage'] = $formatted;
32
+
33
+ return $record;
34
+ }
35
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jonathan A. Schweder <jonathanschweder@gmail.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ use Monolog\Logger;
15
+
16
+ /**
17
+ * Injects Hg branch and Hg revision number in all records
18
+ *
19
+ * @author Jonathan A. Schweder <jonathanschweder@gmail.com>
20
+ */
21
+ class MercurialProcessor implements ProcessorInterface
22
+ {
23
+ private $level;
24
+ private static $cache;
25
+
26
+ public function __construct($level = Logger::DEBUG)
27
+ {
28
+ $this->level = Logger::toMonologLevel($level);
29
+ }
30
+
31
+ /**
32
+ * @param array $record
33
+ * @return array
34
+ */
35
+ public function __invoke(array $record)
36
+ {
37
+ // return if the level is not high enough
38
+ if ($record['level'] < $this->level) {
39
+ return $record;
40
+ }
41
+
42
+ $record['extra']['hg'] = self::getMercurialInfo();
43
+
44
+ return $record;
45
+ }
46
+
47
+ private static function getMercurialInfo()
48
+ {
49
+ if (self::$cache) {
50
+ return self::$cache;
51
+ }
52
+
53
+ $result = explode(' ', trim(`hg id -nb`));
54
+ if (count($result) >= 3) {
55
+ return self::$cache = array(
56
+ 'branch' => $result[1],
57
+ 'revision' => $result[2],
58
+ );
59
+ }
60
+
61
+ return self::$cache = array();
62
+ }
63
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Adds value of getmypid into records
16
+ *
17
+ * @author Andreas Hörnicke
18
+ */
19
+ class ProcessIdProcessor implements ProcessorInterface
20
+ {
21
+ /**
22
+ * @param array $record
23
+ * @return array
24
+ */
25
+ public function __invoke(array $record)
26
+ {
27
+ $record['extra']['process_id'] = getmypid();
28
+
29
+ return $record;
30
+ }
31
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * An optional interface to allow labelling Monolog processors.
16
+ *
17
+ * @author Nicolas Grekas <p@tchwork.com>
18
+ */
19
+ interface ProcessorInterface
20
+ {
21
+ /**
22
+ * @return array The processed records
23
+ */
24
+ public function __invoke(array $records);
25
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ use Monolog\Utils;
15
+
16
+ /**
17
+ * Processes a record's message according to PSR-3 rules
18
+ *
19
+ * It replaces {foo} with the value from $context['foo']
20
+ *
21
+ * @author Jordi Boggiano <j.boggiano@seld.be>
22
+ */
23
+ class PsrLogMessageProcessor implements ProcessorInterface
24
+ {
25
+ /**
26
+ * @param array $record
27
+ * @return array
28
+ */
29
+ public function __invoke(array $record)
30
+ {
31
+ if (false === strpos($record['message'], '{')) {
32
+ return $record;
33
+ }
34
+
35
+ $replacements = array();
36
+ foreach ($record['context'] as $key => $val) {
37
+ if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) {
38
+ $replacements['{'.$key.'}'] = $val;
39
+ } elseif (is_object($val)) {
40
+ $replacements['{'.$key.'}'] = '[object '.Utils::getClass($val).']';
41
+ } else {
42
+ $replacements['{'.$key.'}'] = '['.gettype($val).']';
43
+ }
44
+ }
45
+
46
+ $record['message'] = strtr($record['message'], $replacements);
47
+
48
+ return $record;
49
+ }
50
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Adds a tags array into record
16
+ *
17
+ * @author Martijn Riemers
18
+ */
19
+ class TagProcessor implements ProcessorInterface
20
+ {
21
+ private $tags;
22
+
23
+ public function __construct(array $tags = array())
24
+ {
25
+ $this->setTags($tags);
26
+ }
27
+
28
+ public function addTags(array $tags = array())
29
+ {
30
+ $this->tags = array_merge($this->tags, $tags);
31
+ }
32
+
33
+ public function setTags(array $tags = array())
34
+ {
35
+ $this->tags = $tags;
36
+ }
37
+
38
+ public function __invoke(array $record)
39
+ {
40
+ $record['extra']['tags'] = $this->tags;
41
+
42
+ return $record;
43
+ }
44
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ use Monolog\ResettableInterface;
15
+
16
+ /**
17
+ * Adds a unique identifier into records
18
+ *
19
+ * @author Simon Mönch <sm@webfactory.de>
20
+ */
21
+ class UidProcessor implements ProcessorInterface, ResettableInterface
22
+ {
23
+ private $uid;
24
+
25
+ public function __construct($length = 7)
26
+ {
27
+ if (!is_int($length) || $length > 32 || $length < 1) {
28
+ throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32');
29
+ }
30
+
31
+
32
+ $this->uid = $this->generateUid($length);
33
+ }
34
+
35
+ public function __invoke(array $record)
36
+ {
37
+ $record['extra']['uid'] = $this->uid;
38
+
39
+ return $record;
40
+ }
41
+
42
+ /**
43
+ * @return string
44
+ */
45
+ public function getUid()
46
+ {
47
+ return $this->uid;
48
+ }
49
+
50
+ public function reset()
51
+ {
52
+ $this->uid = $this->generateUid(strlen($this->uid));
53
+ }
54
+
55
+ private function generateUid($length)
56
+ {
57
+ return substr(hash('md5', uniqid('', true)), 0, $length);
58
+ }
59
+ }
common/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog\Processor;
13
+
14
+ /**
15
+ * Injects url/method and remote IP of the current web request in all records
16
+ *
17
+ * @author Jordi Boggiano <j.boggiano@seld.be>
18
+ */
19
+ class WebProcessor implements ProcessorInterface
20
+ {
21
+ /**
22
+ * @var array|\ArrayAccess
23
+ */
24
+ protected $serverData;
25
+
26
+ /**
27
+ * Default fields
28
+ *
29
+ * Array is structured as [key in record.extra => key in $serverData]
30
+ *
31
+ * @var array
32
+ */
33
+ protected $extraFields = array(
34
+ 'url' => 'REQUEST_URI',
35
+ 'ip' => 'REMOTE_ADDR',
36
+ 'http_method' => 'REQUEST_METHOD',
37
+ 'server' => 'SERVER_NAME',
38
+ 'referrer' => 'HTTP_REFERER',
39
+ );
40
+
41
+ /**
42
+ * @param array|\ArrayAccess $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data
43
+ * @param array|null $extraFields Field names and the related key inside $serverData to be added. If not provided it defaults to: url, ip, http_method, server, referrer
44
+ */
45
+ public function __construct($serverData = null, array $extraFields = null)
46
+ {
47
+ if (null === $serverData) {
48
+ $this->serverData = &$_SERVER;
49
+ } elseif (is_array($serverData) || $serverData instanceof \ArrayAccess) {
50
+ $this->serverData = $serverData;
51
+ } else {
52
+ throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.');
53
+ }
54
+
55
+ if (null !== $extraFields) {
56
+ if (isset($extraFields[0])) {
57
+ foreach (array_keys($this->extraFields) as $fieldName) {
58
+ if (!in_array($fieldName, $extraFields)) {
59
+ unset($this->extraFields[$fieldName]);
60
+ }
61
+ }
62
+ } else {
63
+ $this->extraFields = $extraFields;
64
+ }
65
+ }
66
+ }
67
+
68
+ /**
69
+ * @param array $record
70
+ * @return array
71
+ */
72
+ public function __invoke(array $record)
73
+ {
74
+ // skip processing if for some reason request data
75
+ // is not present (CLI or wonky SAPIs)
76
+ if (!isset($this->serverData['REQUEST_URI'])) {
77
+ return $record;
78
+ }
79
+
80
+ $record['extra'] = $this->appendExtraFields($record['extra']);
81
+
82
+ return $record;
83
+ }
84
+
85
+ /**
86
+ * @param string $extraName
87
+ * @param string $serverName
88
+ * @return $this
89
+ */
90
+ public function addExtraField($extraName, $serverName)
91
+ {
92
+ $this->extraFields[$extraName] = $serverName;
93
+
94
+ return $this;
95
+ }
96
+
97
+ /**
98
+ * @param array $extra
99
+ * @return array
100
+ */
101
+ private function appendExtraFields(array $extra)
102
+ {
103
+ foreach ($this->extraFields as $extraName => $serverName) {
104
+ $extra[$extraName] = isset($this->serverData[$serverName]) ? $this->serverData[$serverName] : null;
105
+ }
106
+
107
+ if (isset($this->serverData['UNIQUE_ID'])) {
108
+ $extra['unique_id'] = $this->serverData['UNIQUE_ID'];
109
+ }
110
+
111
+ return $extra;
112
+ }
113
+ }
common/vendor/monolog/monolog/src/Monolog/Registry.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ use InvalidArgumentException;
15
+
16
+ /**
17
+ * Monolog log registry
18
+ *
19
+ * Allows to get `Logger` instances in the global scope
20
+ * via static method calls on this class.
21
+ *
22
+ * <code>
23
+ * $application = new Monolog\Logger('application');
24
+ * $api = new Monolog\Logger('api');
25
+ *
26
+ * Monolog\Registry::addLogger($application);
27
+ * Monolog\Registry::addLogger($api);
28
+ *
29
+ * function testLogger()
30
+ * {
31
+ * Monolog\Registry::api()->addError('Sent to $api Logger instance');
32
+ * Monolog\Registry::application()->addError('Sent to $application Logger instance');
33
+ * }
34
+ * </code>
35
+ *
36
+ * @author Tomas Tatarko <tomas@tatarko.sk>
37
+ */
38
+ class Registry
39
+ {
40
+ /**
41
+ * List of all loggers in the registry (by named indexes)
42
+ *
43
+ * @var Logger[]
44
+ */
45
+ private static $loggers = array();
46
+
47
+ /**
48
+ * Adds new logging channel to the registry
49
+ *
50
+ * @param Logger $logger Instance of the logging channel
51
+ * @param string|null $name Name of the logging channel ($logger->getName() by default)
52
+ * @param bool $overwrite Overwrite instance in the registry if the given name already exists?
53
+ * @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists
54
+ */
55
+ public static function addLogger(Logger $logger, $name = null, $overwrite = false)
56
+ {
57
+ $name = $name ?: $logger->getName();
58
+
59
+ if (isset(self::$loggers[$name]) && !$overwrite) {
60
+ throw new InvalidArgumentException('Logger with the given name already exists');
61
+ }
62
+
63
+ self::$loggers[$name] = $logger;
64
+ }
65
+
66
+ /**
67
+ * Checks if such logging channel exists by name or instance
68
+ *
69
+ * @param string|Logger $logger Name or logger instance
70
+ */
71
+ public static function hasLogger($logger)
72
+ {
73
+ if ($logger instanceof Logger) {
74
+ $index = array_search($logger, self::$loggers, true);
75
+
76
+ return false !== $index;
77
+ } else {
78
+ return isset(self::$loggers[$logger]);
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Removes instance from registry by name or instance
84
+ *
85
+ * @param string|Logger $logger Name or logger instance
86
+ */
87
+ public static function removeLogger($logger)
88
+ {
89
+ if ($logger instanceof Logger) {
90
+ if (false !== ($idx = array_search($logger, self::$loggers, true))) {
91
+ unset(self::$loggers[$idx]);
92
+ }
93
+ } else {
94
+ unset(self::$loggers[$logger]);
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Clears the registry
100
+ */
101
+ public static function clear()
102
+ {
103
+ self::$loggers = array();
104
+ }
105
+
106
+ /**
107
+ * Gets Logger instance from the registry
108
+ *
109
+ * @param string $name Name of the requested Logger instance
110
+ * @throws \InvalidArgumentException If named Logger instance is not in the registry
111
+ * @return Logger Requested instance of Logger
112
+ */
113
+ public static function getInstance($name)
114
+ {
115
+ if (!isset(self::$loggers[$name])) {
116
+ throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name));
117
+ }
118
+
119
+ return self::$loggers[$name];
120
+ }
121
+
122
+ /**
123
+ * Gets Logger instance from the registry via static method call
124
+ *
125
+ * @param string $name Name of the requested Logger instance
126
+ * @param array $arguments Arguments passed to static method call
127
+ * @throws \InvalidArgumentException If named Logger instance is not in the registry
128
+ * @return Logger Requested instance of Logger
129
+ */
130
+ public static function __callStatic($name, $arguments)
131
+ {
132
+ return self::getInstance($name);
133
+ }
134
+ }
common/vendor/monolog/monolog/src/Monolog/ResettableInterface.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ /**
15
+ * Handler or Processor implementing this interface will be reset when Logger::reset() is called.
16
+ *
17
+ * Resetting ends a log cycle gets them back to their initial state.
18
+ *
19
+ * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal
20
+ * state, and getting it back to a state in which it can receive log records again.
21
+ *
22
+ * This is useful in case you want to avoid logs leaking between two requests or jobs when you
23
+ * have a long running process like a worker or an application server serving multiple requests
24
+ * in one process.
25
+ *
26
+ * @author Grégoire Pineau <lyrixx@lyrixx.info>
27
+ */
28
+ interface ResettableInterface
29
+ {
30
+ public function reset();
31
+ }
common/vendor/monolog/monolog/src/Monolog/SignalHandler.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ use Psr\Log\LoggerInterface;
15
+ use Psr\Log\LogLevel;
16
+ use ReflectionExtension;
17
+
18
+ /**
19
+ * Monolog POSIX signal handler
20
+ *
21
+ * @author Robert Gust-Bardon <robert@gust-bardon.org>
22
+ */
23
+ class SignalHandler
24
+ {
25
+ private $logger;
26
+
27
+ private $previousSignalHandler = array();
28
+ private $signalLevelMap = array();
29
+ private $signalRestartSyscalls = array();
30
+
31
+ public function __construct(LoggerInterface $logger)
32
+ {
33
+ $this->logger = $logger;
34
+ }
35
+
36
+ public function registerSignalHandler($signo, $level = LogLevel::CRITICAL, $callPrevious = true, $restartSyscalls = true, $async = true)
37
+ {
38
+ if (!extension_loaded('pcntl') || !function_exists('pcntl_signal')) {
39
+ return $this;
40
+ }
41
+
42
+ if ($callPrevious) {
43
+ if (function_exists('pcntl_signal_get_handler')) {
44
+ $handler = pcntl_signal_get_handler($signo);
45
+ if ($handler === false) {
46
+ return $this;
47
+ }
48
+ $this->previousSignalHandler[$signo] = $handler;
49
+ } else {
50
+ $this->previousSignalHandler[$signo] = true;
51
+ }
52
+ } else {
53
+ unset($this->previousSignalHandler[$signo]);
54
+ }
55
+ $this->signalLevelMap[$signo] = $level;
56
+ $this->signalRestartSyscalls[$signo] = $restartSyscalls;
57
+
58
+ if (function_exists('pcntl_async_signals') && $async !== null) {
59
+ pcntl_async_signals($async);
60
+ }
61
+
62
+ pcntl_signal($signo, array($this, 'handleSignal'), $restartSyscalls);
63
+
64
+ return $this;
65
+ }
66
+
67
+ public function handleSignal($signo, array $siginfo = null)
68
+ {
69
+ static $signals = array();
70
+
71
+ if (!$signals && extension_loaded('pcntl')) {
72
+ $pcntl = new ReflectionExtension('pcntl');
73
+ $constants = $pcntl->getConstants();
74
+ if (!$constants) {
75
+ // HHVM 3.24.2 returns an empty array.
76
+ $constants = get_defined_constants(true);
77
+ $constants = $constants['Core'];
78
+ }
79
+ foreach ($constants as $name => $value) {
80
+ if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && is_int($value)) {
81
+ $signals[$value] = $name;
82
+ }
83
+ }
84
+ unset($constants);
85
+ }
86
+
87
+ $level = isset($this->signalLevelMap[$signo]) ? $this->signalLevelMap[$signo] : LogLevel::CRITICAL;
88
+ $signal = isset($signals[$signo]) ? $signals[$signo] : $signo;
89
+ $context = isset($siginfo) ? $siginfo : array();
90
+ $this->logger->log($level, sprintf('Program received signal %s', $signal), $context);
91
+
92
+ if (!isset($this->previousSignalHandler[$signo])) {
93
+ return;
94
+ }
95
+
96
+ if ($this->previousSignalHandler[$signo] === true || $this->previousSignalHandler[$signo] === SIG_DFL) {
97
+ if (extension_loaded('pcntl') && function_exists('pcntl_signal') && function_exists('pcntl_sigprocmask') && function_exists('pcntl_signal_dispatch')
98
+ && extension_loaded('posix') && function_exists('posix_getpid') && function_exists('posix_kill')) {
99
+ $restartSyscalls = isset($this->restartSyscalls[$signo]) ? $this->restartSyscalls[$signo] : true;
100
+ pcntl_signal($signo, SIG_DFL, $restartSyscalls);
101
+ pcntl_sigprocmask(SIG_UNBLOCK, array($signo), $oldset);
102
+ posix_kill(posix_getpid(), $signo);
103
+ pcntl_signal_dispatch();
104
+ pcntl_sigprocmask(SIG_SETMASK, $oldset);
105
+ pcntl_signal($signo, array($this, 'handleSignal'), $restartSyscalls);
106
+ }
107
+ } elseif (is_callable($this->previousSignalHandler[$signo])) {
108
+ if (PHP_VERSION_ID >= 70100) {
109
+ $this->previousSignalHandler[$signo]($signo, $siginfo);
110
+ } else {
111
+ $this->previousSignalHandler[$signo]($signo);
112
+ }
113
+ }
114
+ }
115
+ }
common/vendor/monolog/monolog/src/Monolog/Utils.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Monolog package.
5
+ *
6
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Monolog;
13
+
14
+ class Utils
15
+ {
16
+ /**
17
+ * @internal
18
+ */
19
+ public static function getClass($object)
20
+ {
21
+ $class = \get_class($object);
22
+
23
+ return 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
24
+ }
25
+ }
common/vendor/psr/log/Psr/Log/AbstractLogger.php ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * This is a simple Logger implementation that other Loggers can inherit from.
7
+ *
8
+ * It simply delegates all log-level-specific methods to the `log` method to
9
+ * reduce boilerplate code that a simple Logger that does the same thing with
10
+ * messages regardless of the error level has to implement.
11
+ */
12
+ abstract class AbstractLogger implements LoggerInterface
13
+ {
14
+ /**
15
+ * System is unusable.
16
+ *
17
+ * @param string $message
18
+ * @param array $context
19
+ *
20
+ * @return void
21
+ */
22
+ public function emergency($message, array $context = array())
23
+ {
24
+ $this->log(LogLevel::EMERGENCY, $message, $context);
25
+ }
26
+
27
+ /**
28
+ * Action must be taken immediately.
29
+ *
30
+ * Example: Entire website down, database unavailable, etc. This should
31
+ * trigger the SMS alerts and wake you up.
32
+ *
33
+ * @param string $message
34
+ * @param array $context
35
+ *
36
+ * @return void
37
+ */
38
+ public function alert($message, array $context = array())
39
+ {
40
+ $this->log(LogLevel::ALERT, $message, $context);
41
+ }
42
+
43
+ /**
44
+ * Critical conditions.
45
+ *
46
+ * Example: Application component unavailable, unexpected exception.
47
+ *
48
+ * @param string $message
49
+ * @param array $context
50
+ *
51
+ * @return void
52
+ */
53
+ public function critical($message, array $context = array())
54
+ {
55
+ $this->log(LogLevel::CRITICAL, $message, $context);
56
+ }
57
+
58
+ /**
59
+ * Runtime errors that do not require immediate action but should typically
60
+ * be logged and monitored.
61
+ *
62
+ * @param string $message
63
+ * @param array $context
64
+ *
65
+ * @return void
66
+ */
67
+ public function error($message, array $context = array())
68
+ {
69
+ $this->log(LogLevel::ERROR, $message, $context);
70
+ }
71
+
72
+ /**
73
+ * Exceptional occurrences that are not errors.
74
+ *
75
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
76
+ * that are not necessarily wrong.
77
+ *
78
+ * @param string $message
79
+ * @param array $context
80
+ *
81
+ * @return void
82
+ */
83
+ public function warning($message, array $context = array())
84
+ {
85
+ $this->log(LogLevel::WARNING, $message, $context);
86
+ }
87
+
88
+ /**
89
+ * Normal but significant events.
90
+ *
91
+ * @param string $message
92
+ * @param array $context
93
+ *
94
+ * @return void
95
+ */
96
+ public function notice($message, array $context = array())
97
+ {
98
+ $this->log(LogLevel::NOTICE, $message, $context);
99
+ }
100
+
101
+ /**
102
+ * Interesting events.
103
+ *
104
+ * Example: User logs in, SQL logs.
105
+ *
106
+ * @param string $message
107
+ * @param array $context
108
+ *
109
+ * @return void
110
+ */
111
+ public function info($message, array $context = array())
112
+ {
113
+ $this->log(LogLevel::INFO, $message, $context);
114
+ }
115
+
116
+ /**
117
+ * Detailed debug information.
118
+ *
119
+ * @param string $message
120
+ * @param array $context
121
+ *
122
+ * @return void
123
+ */
124
+ public function debug($message, array $context = array())
125
+ {
126
+ $this->log(LogLevel::DEBUG, $message, $context);
127
+ }
128
+ }
common/vendor/psr/log/Psr/Log/InvalidArgumentException.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ class InvalidArgumentException extends \InvalidArgumentException
6
+ {
7
+ }
common/vendor/psr/log/Psr/Log/LogLevel.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * Describes log levels.
7
+ */
8
+ class LogLevel
9
+ {
10
+ const EMERGENCY = 'emergency';
11
+ const ALERT = 'alert';
12
+ const CRITICAL = 'critical';
13
+ const ERROR = 'error';
14
+ const WARNING = 'warning';
15
+ const NOTICE = 'notice';
16
+ const INFO = 'info';
17
+ const DEBUG = 'debug';
18
+ }
common/vendor/psr/log/Psr/Log/LoggerAwareInterface.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * Describes a logger-aware instance.
7
+ */
8
+ interface LoggerAwareInterface
9
+ {
10
+ /**
11
+ * Sets a logger instance on the object.
12
+ *
13
+ * @param LoggerInterface $logger
14
+ *
15
+ * @return void
16
+ */
17
+ public function setLogger(LoggerInterface $logger);
18
+ }
common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * Basic Implementation of LoggerAwareInterface.
7
+ */
8
+ trait LoggerAwareTrait
9
+ {
10
+ /**
11
+ * The logger instance.
12
+ *
13
+ * @var LoggerInterface
14
+ */
15
+ protected $logger;
16
+
17
+ /**
18
+ * Sets a logger.
19
+ *
20
+ * @param LoggerInterface $logger
21
+ */
22
+ public function setLogger(LoggerInterface $logger)
23
+ {
24
+ $this->logger = $logger;
25
+ }
26
+ }
common/vendor/psr/log/Psr/Log/LoggerInterface.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * Describes a logger instance.
7
+ *
8
+ * The message MUST be a string or object implementing __toString().
9
+ *
10
+ * The message MAY contain placeholders in the form: {foo} where foo
11
+ * will be replaced by the context data in key "foo".
12
+ *
13
+ * The context array can contain arbitrary data. The only assumption that
14
+ * can be made by implementors is that if an Exception instance is given
15
+ * to produce a stack trace, it MUST be in a key named "exception".
16
+ *
17
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
18
+ * for the full interface specification.
19
+ */
20
+ interface LoggerInterface
21
+ {
22
+ /**
23
+ * System is unusable.
24
+ *
25
+ * @param string $message
26
+ * @param array $context
27
+ *
28
+ * @return void
29
+ */
30
+ public function emergency($message, array $context = array());
31
+
32
+ /**
33
+ * Action must be taken immediately.
34
+ *
35
+ * Example: Entire website down, database unavailable, etc. This should
36
+ * trigger the SMS alerts and wake you up.
37
+ *
38
+ * @param string $message
39
+ * @param array $context
40
+ *
41
+ * @return void
42
+ */
43
+ public function alert($message, array $context = array());
44
+
45
+ /**
46
+ * Critical conditions.
47
+ *
48
+ * Example: Application component unavailable, unexpected exception.
49
+ *
50
+ * @param string $message
51
+ * @param array $context
52
+ *
53
+ * @return void
54
+ */
55
+ public function critical($message, array $context = array());
56
+
57
+ /**
58
+ * Runtime errors that do not require immediate action but should typically
59
+ * be logged and monitored.
60
+ *
61
+ * @param string $message
62
+ * @param array $context
63
+ *
64
+ * @return void
65
+ */
66
+ public function error($message, array $context = array());
67
+
68
+ /**
69
+ * Exceptional occurrences that are not errors.
70
+ *
71
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
72
+ * that are not necessarily wrong.
73
+ *
74
+ * @param string $message
75
+ * @param array $context
76
+ *
77
+ * @return void
78
+ */
79
+ public function warning($message, array $context = array());
80
+
81
+ /**
82
+ * Normal but significant events.
83
+ *
84
+ * @param string $message
85
+ * @param array $context
86
+ *
87
+ * @return void
88
+ */
89
+ public function notice($message, array $context = array());
90
+
91
+ /**
92
+ * Interesting events.
93
+ *
94
+ * Example: User logs in, SQL logs.
95
+ *
96
+ * @param string $message
97
+ * @param array $context
98
+ *
99
+ * @return void
100
+ */
101
+ public function info($message, array $context = array());
102
+
103
+ /**
104
+ * Detailed debug information.
105
+ *
106
+ * @param string $message
107
+ * @param array $context
108
+ *
109
+ * @return void
110
+ */
111
+ public function debug($message, array $context = array());
112
+
113
+ /**
114
+ * Logs with an arbitrary level.
115
+ *
116
+ * @param mixed $level
117
+ * @param string $message
118
+ * @param array $context
119
+ *
120
+ * @return void
121
+ */
122
+ public function log($level, $message, array $context = array());
123
+ }
common/vendor/psr/log/Psr/Log/LoggerTrait.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * This is a simple Logger trait that classes unable to extend AbstractLogger
7
+ * (because they extend another class, etc) can include.
8
+ *
9
+ * It simply delegates all log-level-specific methods to the `log` method to
10
+ * reduce boilerplate code that a simple Logger that does the same thing with
11
+ * messages regardless of the error level has to implement.
12
+ */
13
+ trait LoggerTrait
14
+ {
15
+ /**
16
+ * System is unusable.
17
+ *
18
+ * @param string $message
19
+ * @param array $context
20
+ *
21
+ * @return void
22
+ */
23
+ public function emergency($message, array $context = array())
24
+ {
25
+ $this->log(LogLevel::EMERGENCY, $message, $context);
26
+ }
27
+
28
+ /**
29
+ * Action must be taken immediately.
30
+ *
31
+ * Example: Entire website down, database unavailable, etc. This should
32
+ * trigger the SMS alerts and wake you up.
33
+ *
34
+ * @param string $message
35
+ * @param array $context
36
+ *
37
+ * @return void
38
+ */
39
+ public function alert($message, array $context = array())
40
+ {
41
+ $this->log(LogLevel::ALERT, $message, $context);
42
+ }
43
+
44
+ /**
45
+ * Critical conditions.
46
+ *
47
+ * Example: Application component unavailable, unexpected exception.
48
+ *
49
+ * @param string $message
50
+ * @param array $context
51
+ *
52
+ * @return void
53
+ */
54
+ public function critical($message, array $context = array())
55
+ {
56
+ $this->log(LogLevel::CRITICAL, $message, $context);
57
+ }
58
+
59
+ /**
60
+ * Runtime errors that do not require immediate action but should typically
61
+ * be logged and monitored.
62
+ *
63
+ * @param string $message
64
+ * @param array $context
65
+ *
66
+ * @return void
67
+ */
68
+ public function error($message, array $context = array())
69
+ {
70
+ $this->log(LogLevel::ERROR, $message, $context);
71
+ }
72
+
73
+ /**
74
+ * Exceptional occurrences that are not errors.
75
+ *
76
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
77
+ * that are not necessarily wrong.
78
+ *
79
+ * @param string $message
80
+ * @param array $context
81
+ *
82
+ * @return void
83
+ */
84
+ public function warning($message, array $context = array())
85
+ {
86
+ $this->log(LogLevel::WARNING, $message, $context);
87
+ }
88
+
89
+ /**
90
+ * Normal but significant events.
91
+ *
92
+ * @param string $message
93
+ * @param array $context
94
+ *
95
+ * @return void
96
+ */
97
+ public function notice($message, array $context = array())
98
+ {
99
+ $this->log(LogLevel::NOTICE, $message, $context);
100
+ }
101
+
102
+ /**
103
+ * Interesting events.
104
+ *
105
+ * Example: User logs in, SQL logs.
106
+ *
107
+ * @param string $message
108
+ * @param array $context
109
+ *
110
+ * @return void
111
+ */
112
+ public function info($message, array $context = array())
113
+ {
114
+ $this->log(LogLevel::INFO, $message, $context);
115
+ }
116
+
117
+ /**
118
+ * Detailed debug information.
119
+ *
120
+ * @param string $message
121
+ * @param array $context
122
+ *
123
+ * @return void
124
+ */
125
+ public function debug($message, array $context = array())
126
+ {
127
+ $this->log(LogLevel::DEBUG, $message, $context);
128
+ }
129
+
130
+ /**
131
+ * Logs with an arbitrary level.
132
+ *
133
+ * @param mixed $level
134
+ * @param string $message
135
+ * @param array $context
136
+ *
137
+ * @return void
138
+ */
139
+ abstract public function log($level, $message, array $context = array());
140
+ }
common/vendor/psr/log/Psr/Log/NullLogger.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Psr\Log;
4
+
5
+ /**
6
+ * This Logger can be used to avoid conditional log calls.
7
+ *
8
+ * Logging should always be optional, and if no logger is provided to your
9
+ * library creating a NullLogger instance to have something to throw logs at
10
+ * is a good way to avoid littering your code with `if ($this->logger) { }`
11
+ * blocks.
12
+ */
13
+ class NullLogger extends AbstractLogger
14
+ {
15
+ /**
16
+ * Logs with an arbitrary level.
17
+ *
18
+ * @param mixed $level
19
+ * @param string $message
20
+ * @param array $context
21
+ *
22
+ * @return void
23
+ */
24
+ public function log($level, $message, array $context = array())
25
+ {
26
+ // noop
27
+ }
28
+ }
common/vendor/tooltipster/tooltipster.bundle.css ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* This is the core CSS of Tooltipster */
2
+
3
+ /* GENERAL STRUCTURE RULES (do not edit this section) */
4
+
5
+ .tooltipster-base {
6
+ /* this ensures that a constrained height set by functionPosition,
7
+ if greater that the natural height of the tooltip, will be enforced
8
+ in browsers that support display:flex */
9
+ display: flex;
10
+ pointer-events: none;
11
+ /* this may be overriden in JS for fixed position origins */
12
+ position: absolute;
13
+ }
14
+
15
+ .tooltipster-box {
16
+ /* see .tooltipster-base. flex-shrink 1 is only necessary for IE10-
17
+ and flex-basis auto for IE11- (at least) */
18
+ flex: 1 1 auto;
19
+ }
20
+
21
+ .tooltipster-content {
22
+ /* prevents an overflow if the user adds padding to the div */
23
+ box-sizing: border-box;
24
+ /* these make sure we'll be able to detect any overflow */
25
+ max-height: 100%;
26
+ max-width: 100%;
27
+ overflow: auto;
28
+ }
29
+
30
+ .tooltipster-ruler {
31
+ /* these let us test the size of the tooltip without overflowing the window */
32
+ bottom: 0;
33
+ left: 0;
34
+ overflow: hidden;
35
+ position: fixed;
36
+ right: 0;
37
+ top: 0;
38
+ visibility: hidden;
39
+ }
40
+
41
+ /* ANIMATIONS */
42
+
43
+ /* Open/close animations */
44
+
45
+ /* fade */
46
+
47
+ .tooltipster-fade {
48
+ opacity: 0;
49
+ -webkit-transition-property: opacity;
50
+ -moz-transition-property: opacity;
51
+ -o-transition-property: opacity;
52
+ -ms-transition-property: opacity;
53
+ transition-property: opacity;
54
+ }
55
+ .tooltipster-fade.tooltipster-show {
56
+ opacity: 1;
57
+ }
58
+
59
+ /* grow */
60
+
61
+ .tooltipster-grow {
62
+ -webkit-transform: scale(0,0);
63
+ -moz-transform: scale(0,0);
64
+ -o-transform: scale(0,0);
65
+ -ms-transform: scale(0,0);
66
+ transform: scale(0,0);
67
+ -webkit-transition-property: -webkit-transform;
68
+ -moz-transition-property: -moz-transform;
69
+ -o-transition-property: -o-transform;
70
+ -ms-transition-property: -ms-transform;
71
+ transition-property: transform;
72
+ -webkit-backface-visibility: hidden;
73
+ }
74
+ .tooltipster-grow.tooltipster-show {
75
+ -webkit-transform: scale(1,1);
76
+ -moz-transform: scale(1,1);
77
+ -o-transform: scale(1,1);
78
+ -ms-transform: scale(1,1);
79
+ transform: scale(1,1);
80
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
81
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
82
+ -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
83
+ -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
84
+ -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
85
+ transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
86
+ }
87
+
88
+ /* swing */
89
+
90
+ .tooltipster-swing {
91
+ opacity: 0;
92
+ -webkit-transform: rotateZ(4deg);
93
+ -moz-transform: rotateZ(4deg);
94
+ -o-transform: rotateZ(4deg);
95
+ -ms-transform: rotateZ(4deg);
96
+ transform: rotateZ(4deg);
97
+ -webkit-transition-property: -webkit-transform, opacity;
98
+ -moz-transition-property: -moz-transform;
99
+ -o-transition-property: -o-transform;
100
+ -ms-transition-property: -ms-transform;
101
+ transition-property: transform;
102
+ }
103
+ .tooltipster-swing.tooltipster-show {
104
+ opacity: 1;
105
+ -webkit-transform: rotateZ(0deg);
106
+ -moz-transform: rotateZ(0deg);
107
+ -o-transform: rotateZ(0deg);
108
+ -ms-transform: rotateZ(0deg);
109
+ transform: rotateZ(0deg);
110
+ -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1);
111
+ -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
112
+ -moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
113
+ -ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
114
+ -o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
115
+ transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
116
+ }
117
+
118
+ /* fall */
119
+
120
+ .tooltipster-fall {
121
+ -webkit-transition-property: top;
122
+ -moz-transition-property: top;
123
+ -o-transition-property: top;
124
+ -ms-transition-property: top;
125
+ transition-property: top;
126
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
127
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
128
+ -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
129
+ -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
130
+ -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
131
+ transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
132
+ }
133
+ .tooltipster-fall.tooltipster-initial {
134
+ top: 0 !important;
135
+ }
136
+ .tooltipster-fall.tooltipster-show {
137
+ }
138
+ .tooltipster-fall.tooltipster-dying {
139
+ -webkit-transition-property: all;
140
+ -moz-transition-property: all;
141
+ -o-transition-property: all;
142
+ -ms-transition-property: all;
143
+ transition-property: all;
144
+ top: 0 !important;
145
+ opacity: 0;
146
+ }
147
+
148
+ /* slide */
149
+
150
+ .tooltipster-slide {
151
+ -webkit-transition-property: left;
152
+ -moz-transition-property: left;
153
+ -o-transition-property: left;
154
+ -ms-transition-property: left;
155
+ transition-property: left;
156
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
157
+ -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
158
+ -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
159
+ -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
160
+ -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
161
+ transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
162
+ }
163
+ .tooltipster-slide.tooltipster-initial {
164
+ left: -40px !important;
165
+ }
166
+ .tooltipster-slide.tooltipster-show {
167
+ }
168
+ .tooltipster-slide.tooltipster-dying {
169
+ -webkit-transition-property: all;
170
+ -moz-transition-property: all;
171
+ -o-transition-property: all;
172
+ -ms-transition-property: all;
173
+ transition-property: all;
174
+ left: 0 !important;
175
+ opacity: 0;
176
+ }
177
+
178
+ /* Update animations */
179
+
180
+ /* We use animations rather than transitions here because
181
+ transition durations may be specified in the style tag due to
182
+ animationDuration, and we try to avoid collisions and the use
183
+ of !important */
184
+
185
+ /* fade */
186
+
187
+ @keyframes tooltipster-fading {
188
+ 0% {
189
+ opacity: 0;
190
+ }
191
+ 100% {
192
+ opacity: 1;
193
+ }
194
+ }
195
+
196
+ .tooltipster-update-fade {
197
+ animation: tooltipster-fading 400ms;
198
+ }
199
+
200
+ /* rotate */
201
+
202
+ @keyframes tooltipster-rotating {
203
+ 25% {
204
+ transform: rotate(-2deg);
205
+ }
206
+ 75% {
207
+ transform: rotate(2deg);
208
+ }
209
+ 100% {
210
+ transform: rotate(0);
211
+ }
212
+ }
213
+
214
+ .tooltipster-update-rotate {
215
+ animation: tooltipster-rotating 600ms;
216
+ }
217
+
218
+ /* scale */
219
+
220
+ @keyframes tooltipster-scaling {
221
+ 50% {
222
+ transform: scale(1.1);
223
+ }
224
+ 100% {
225
+ transform: scale(1);
226
+ }
227
+ }
228
+
229
+ .tooltipster-update-scale {
230
+ animation: tooltipster-scaling 600ms;
231
+ }
232
+
233
+ /**
234
+ * DEFAULT STYLE OF THE SIDETIP PLUGIN
235
+ *
236
+ * All styles are "namespaced" with .tooltipster-sidetip to prevent
237
+ * conflicts between plugins.
238
+ */
239
+
240
+ /* .tooltipster-box */
241
+
242
+ .tooltipster-sidetip .tooltipster-box {
243
+ background: #565656;
244
+ border: 2px solid black;
245
+ border-radius: 4px;
246
+ }
247
+
248
+ .tooltipster-sidetip.tooltipster-bottom .tooltipster-box {
249
+ margin-top: 8px;
250
+ }
251
+
252
+ .tooltipster-sidetip.tooltipster-left .tooltipster-box {
253
+ margin-right: 8px;
254
+ }
255
+
256
+ .tooltipster-sidetip.tooltipster-right .tooltipster-box {
257
+ margin-left: 8px;
258
+ }
259
+
260
+ .tooltipster-sidetip.tooltipster-top .tooltipster-box {
261
+ margin-bottom: 8px;
262
+ }
263
+
264
+ /* .tooltipster-content */
265
+
266
+ .tooltipster-sidetip .tooltipster-content {
267
+ color: white;
268
+ line-height: 18px;
269
+ padding: 6px 14px;
270
+ }
271
+
272
+ /* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that
273
+ corresponds to the arrow we want to display */
274
+
275
+ .tooltipster-sidetip .tooltipster-arrow {
276
+ overflow: hidden;
277
+ position: absolute;
278
+ }
279
+
280
+ .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow {
281
+ height: 10px;
282
+ /* half the width, for centering */
283
+ margin-left: -10px;
284
+ top: 0;
285
+ width: 20px;
286
+ }
287
+
288
+ .tooltipster-sidetip.tooltipster-left .tooltipster-arrow {
289
+ height: 20px;
290
+ margin-top: -10px;
291
+ right: 0;
292
+ /* top 0 to keep the arrow from overflowing .tooltipster-base when it has not
293
+ been positioned yet */
294
+ top: 0;
295
+ width: 10px;
296
+ }
297
+
298
+ .tooltipster-sidetip.tooltipster-right .tooltipster-arrow {
299
+ height: 20px;
300
+ margin-top: -10px;
301
+ left: 0;
302
+ /* same as .tooltipster-left .tooltipster-arrow */
303
+ top: 0;
304
+ width: 10px;
305
+ }
306
+
307
+ .tooltipster-sidetip.tooltipster-top .tooltipster-arrow {
308
+ bottom: 0;
309
+ height: 10px;
310
+ margin-left: -10px;
311
+ width: 20px;
312
+ }
313
+
314
+ /* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */
315
+
316
+ .tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border {
317
+ height: 0;
318
+ position: absolute;
319
+ width: 0;
320
+ }
321
+
322
+ /* .tooltipster-arrow-background */
323
+
324
+ .tooltipster-sidetip .tooltipster-arrow-background {
325
+ border: 10px solid transparent;
326
+ }
327
+
328
+ .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {
329
+ border-bottom-color: #565656;
330
+ left: 0;
331
+ top: 3px;
332
+ }
333
+
334
+ .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {
335
+ border-left-color: #565656;
336
+ left: -3px;
337
+ top: 0;
338
+ }
339
+
340
+ .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {
341
+ border-right-color: #565656;
342
+ left: 3px;
343
+ top: 0;
344
+ }
345
+
346
+ .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {
347
+ border-top-color: #565656;
348
+ left: 0;
349
+ top: -3px;
350
+ }
351
+
352
+ /* .tooltipster-arrow-border */
353
+
354
+ .tooltipster-sidetip .tooltipster-arrow-border {
355
+ border: 10px solid transparent;
356
+ left: 0;
357
+ top: 0;
358
+ }
359
+
360
+ .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {
361
+ border-bottom-color: black;
362
+ }
363
+
364
+ .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {
365
+ border-left-color: black;
366
+ }
367
+
368
+ .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {
369
+ border-right-color: black;
370
+ }
371
+
372
+ .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {
373
+ border-top-color: black;
374
+ }
375
+
376
+ /* tooltipster-arrow-uncropped */
377
+
378
+ .tooltipster-sidetip .tooltipster-arrow-uncropped {
379
+ position: relative;
380
+ }
381
+
382
+ .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped {
383
+ top: -10px;
384
+ }
385
+
386
+ .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped {
387
+ left: -10px;
388
+ }
common/vendor/tooltipster/tooltipster.bundle.js ADDED
@@ -0,0 +1,4273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * tooltipster http://iamceege.github.io/tooltipster/
3
+ * A rockin' custom tooltip jQuery plugin
4
+ * Developed by Caleb Jacob and Louis Ameline
5
+ * MIT license
6
+ */
7
+ (function (root, factory) {
8
+ if (typeof define === 'function' && define.amd) {
9
+ // AMD. Register as an anonymous module unless amdModuleId is set
10
+ define(["jquery"], function (a0) {
11
+ return (factory(a0));
12
+ });
13
+ } else if (typeof exports === 'object') {
14
+ // Node. Does not work with strict CommonJS, but
15
+ // only CommonJS-like environments that support module.exports,
16
+ // like Node.
17
+ module.exports = factory(require("jquery"));
18
+ } else {
19
+ factory(jQuery);
20
+ }
21
+ }(this, function ($) {
22
+
23
+ // This file will be UMDified by a build task.
24
+
25
+ var defaults = {
26
+ animation: 'fade',
27
+ animationDuration: 350,
28
+ content: null,
29
+ contentAsHTML: false,
30
+ contentCloning: false,
31
+ debug: true,
32
+ delay: 300,
33
+ delayTouch: [300, 500],
34
+ functionInit: null,
35
+ functionBefore: null,
36
+ functionReady: null,
37
+ functionAfter: null,
38
+ functionFormat: null,
39
+ IEmin: 6,
40
+ interactive: false,
41
+ multiple: false,
42
+ // will default to document.body, or must be an element positioned at (0, 0)
43
+ // in the document, typically like the very top views of an app.
44
+ parent: null,
45
+ plugins: ['sideTip'],
46
+ repositionOnScroll: false,
47
+ restoration: 'none',
48
+ selfDestruction: true,
49
+ theme: [],
50
+ timer: 0,
51
+ trackerInterval: 500,
52
+ trackOrigin: false,
53
+ trackTooltip: false,
54
+ trigger: 'hover',
55
+ triggerClose: {
56
+ click: false,
57
+ mouseleave: false,
58
+ originClick: false,
59
+ scroll: false,
60
+ tap: false,
61
+ touchleave: false
62
+ },
63
+ triggerOpen: {
64
+ click: false,
65
+ mouseenter: false,
66
+ tap: false,
67
+ touchstart: false
68
+ },
69
+ updateAnimation: 'rotate',
70
+ zIndex: 9999999
71
+ },
72
+ // we'll avoid using the 'window' global as a good practice but npm's
73
+ // jquery@<2.1.0 package actually requires a 'window' global, so not sure
74
+ // it's useful at all
75
+ win = (typeof window != 'undefined') ? window : null,
76
+ // env will be proxied by the core for plugins to have access its properties
77
+ env = {
78
+ // detect if this device can trigger touch events. Better have a false
79
+ // positive (unused listeners, that's ok) than a false negative.
80
+ // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js
81
+ // http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript
82
+ hasTouchCapability: !!(
83
+ win
84
+ && ( 'ontouchstart' in win
85
+ || (win.DocumentTouch && win.document instanceof win.DocumentTouch)
86
+ || win.navigator.maxTouchPoints
87
+ )
88
+ ),
89
+ hasTransitions: transitionSupport(),
90
+ IE: false,
91
+ // don't set manually, it will be updated by a build task after the manifest
92
+ semVer: '4.2.6',
93
+ window: win
94
+ },
95
+ core = function() {
96
+
97
+ // core variables
98
+
99
+ // the core emitters
100
+ this.__$emitterPrivate = $({});
101
+ this.__$emitterPublic = $({});
102
+ this.__instancesLatestArr = [];
103
+ // collects plugin constructors
104
+ this.__plugins = {};
105
+ // proxy env variables for plugins who might use them
106
+ this._env = env;
107
+ };
108
+
109
+ // core methods
110
+ core.prototype = {
111
+
112
+ /**
113
+ * A function to proxy the public methods of an object onto another
114
+ *
115
+ * @param {object} constructor The constructor to bridge
116
+ * @param {object} obj The object that will get new methods (an instance or the core)
117
+ * @param {string} pluginName A plugin name for the console log message
118
+ * @return {core}
119
+ * @private
120
+ */
121
+ __bridge: function(constructor, obj, pluginName) {
122
+
123
+ // if it's not already bridged
124
+ if (!obj[pluginName]) {
125
+
126
+ var fn = function() {};
127
+ fn.prototype = constructor;
128
+
129
+ var pluginInstance = new fn();
130
+
131
+ // the _init method has to exist in instance constructors but might be missing
132
+ // in core constructors
133
+ if (pluginInstance.__init) {
134
+ pluginInstance.__init(obj);
135
+ }
136
+
137
+ $.each(constructor, function(methodName, fn) {
138
+
139
+ // don't proxy "private" methods, only "protected" and public ones
140
+ if (methodName.indexOf('__') != 0) {
141
+
142
+ // if the method does not exist yet
143
+ if (!obj[methodName]) {
144
+
145
+ obj[methodName] = function() {
146
+ return pluginInstance[methodName].apply(pluginInstance, Array.prototype.slice.apply(arguments));
147
+ };
148
+
149
+ // remember to which plugin this method corresponds (several plugins may
150
+ // have methods of the same name, we need to be sure)
151
+ obj[methodName].bridged = pluginInstance;
152
+ }
153
+ else if (defaults.debug) {
154
+
155
+ console.log('The '+ methodName +' method of the '+ pluginName
156
+ +' plugin conflicts with another plugin or native methods');
157
+ }
158
+ }
159
+ });
160
+
161
+ obj[pluginName] = pluginInstance;
162
+ }
163
+
164
+ return this;
165
+ },
166
+
167
+ /**
168
+ * For mockup in Node env if need be, for testing purposes
169
+ *
170
+ * @return {core}
171
+ * @private
172
+ */
173
+ __setWindow: function(window) {
174
+ env.window = window;
175
+ return this;
176
+ },
177
+
178
+ /**
179
+ * Returns a ruler, a tool to help measure the size of a tooltip under
180
+ * various settings. Meant for plugins
181
+ *
182
+ * @see Ruler
183
+ * @return {object} A Ruler instance
184
+ * @protected
185
+ */
186
+ _getRuler: function($tooltip) {
187
+ return new Ruler($tooltip);
188
+ },
189
+
190
+ /**
191
+ * For internal use by plugins, if needed
192
+ *
193
+ * @return {core}
194
+ * @protected
195
+ */
196
+ _off: function() {
197
+ this.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
198
+ return this;
199
+ },
200
+
201
+ /**
202
+ * For internal use by plugins, if needed
203
+ *
204
+ * @return {core}
205
+ * @protected
206
+ */
207
+ _on: function() {
208
+ this.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
209
+ return this;
210
+ },
211
+
212
+ /**
213
+ * For internal use by plugins, if needed
214
+ *
215
+ * @return {core}
216
+ * @protected
217
+ */
218
+ _one: function() {
219
+ this.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
220
+ return this;
221
+ },
222
+
223
+ /**
224
+ * Returns (getter) or adds (setter) a plugin
225
+ *
226
+ * @param {string|object} plugin Provide a string (in the full form
227
+ * "namespace.name") to use as as getter, an object to use as a setter
228
+ * @return {object|core}
229
+ * @protected
230
+ */
231
+ _plugin: function(plugin) {
232
+
233
+ var self = this;
234
+
235
+ // getter
236
+ if (typeof plugin == 'string') {
237
+
238
+ var pluginName = plugin,
239
+ p = null;
240
+
241
+ // if the namespace is provided, it's easy to search
242
+ if (pluginName.indexOf('.') > 0) {
243
+ p = self.__plugins[pluginName];
244
+ }
245
+ // otherwise, return the first name that matches
246
+ else {
247
+ $.each(self.__plugins, function(i, plugin) {
248
+
249
+ if (plugin.name.substring(plugin.name.length - pluginName.length - 1) == '.'+ pluginName) {
250
+ p = plugin;
251
+ return false;
252
+ }
253
+ });
254
+ }
255
+
256
+ return p;
257
+ }
258
+ // setter
259
+ else {
260
+
261
+ // force namespaces
262
+ if (plugin.name.indexOf('.') < 0) {
263
+ throw new Error('Plugins must be namespaced');
264
+ }
265
+
266
+ self.__plugins[plugin.name] = plugin;
267
+
268
+ // if the plugin has core features
269
+ if (plugin.core) {
270
+
271
+ // bridge non-private methods onto the core to allow new core methods
272
+ self.__bridge(plugin.core, self, plugin.name);
273
+ }
274
+
275
+ return this;
276
+ }
277
+ },
278
+
279
+ /**
280
+ * Trigger events on the core emitters
281
+ *
282
+ * @returns {core}
283
+ * @protected
284
+ */
285
+ _trigger: function() {
286
+
287
+ var args = Array.prototype.slice.apply(arguments);
288
+
289
+ if (typeof args[0] == 'string') {
290
+ args[0] = { type: args[0] };
291
+ }
292
+
293
+ // note: the order of emitters matters
294
+ this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);
295
+ this.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);
296
+
297
+ return this;
298
+ },
299
+
300
+ /**
301
+ * Returns instances of all tooltips in the page or an a given element
302
+ *
303
+ * @param {string|HTML object collection} selector optional Use this
304
+ * parameter to restrict the set of objects that will be inspected
305
+ * for the retrieval of instances. By default, all instances in the
306
+ * page are returned.
307
+ * @return {array} An array of instance objects
308
+ * @public
309
+ */
310
+ instances: function(selector) {
311
+
312
+ var instances = [],
313
+ sel = selector || '.tooltipstered';
314
+
315
+ $(sel).each(function() {
316
+
317
+ var $this = $(this),
318
+ ns = $this.data('tooltipster-ns');
319
+
320
+ if (ns) {
321
+
322
+ $.each(ns, function(i, namespace) {
323
+ instances.push($this.data(namespace));
324
+ });
325
+ }
326
+ });
327
+
328
+ return instances;
329
+ },
330
+
331
+ /**
332
+ * Returns the Tooltipster objects generated by the last initializing call
333
+ *
334
+ * @return {array} An array of instance objects
335
+ * @public
336
+ */
337
+ instancesLatest: function() {
338
+ return this.__instancesLatestArr;
339
+ },
340
+
341
+ /**
342
+ * For public use only, not to be used by plugins (use ::_off() instead)
343
+ *
344
+ * @return {core}
345
+ * @public
346
+ */
347
+ off: function() {
348
+ this.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
349
+ return this;
350
+ },
351
+
352
+ /**
353
+ * For public use only, not to be used by plugins (use ::_on() instead)
354
+ *
355
+ * @return {core}
356
+ * @public
357
+ */
358
+ on: function() {
359
+ this.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
360
+ return this;
361
+ },
362
+
363
+ /**
364
+ * For public use only, not to be used by plugins (use ::_one() instead)
365
+ *
366
+ * @return {core}
367
+ * @public
368
+ */
369
+ one: function() {
370
+ this.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
371
+ return this;
372
+ },
373
+
374
+ /**
375
+ * Returns all HTML elements which have one or more tooltips
376
+ *
377
+ * @param {string} selector optional Use this to restrict the results
378
+ * to the descendants of an element
379
+ * @return {array} An array of HTML elements
380
+ * @public
381
+ */
382
+ origins: function(selector) {
383
+
384
+ var sel = selector ?
385
+ selector +' ' :
386
+ '';
387
+
388
+ return $(sel +'.tooltipstered').toArray();
389
+ },
390
+
391
+ /**
392
+ * Change default options for all future instances
393
+ *
394
+ * @param {object} d The options that should be made defaults
395
+ * @return {core}
396
+ * @public
397
+ */
398
+ setDefaults: function(d) {
399
+ $.extend(defaults, d);
400
+ return this;
401
+ },
402
+
403
+ /**
404
+ * For users to trigger their handlers on the public emitter
405
+ *
406
+ * @returns {core}
407
+ * @public
408
+ */
409
+ triggerHandler: function() {
410
+ this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
411
+ return this;
412
+ }
413
+ };
414
+
415
+ // $.tooltipster will be used to call core methods
416
+ $.tooltipster = new core();
417
+
418
+ // the Tooltipster instance class (mind the capital T)
419
+ $.Tooltipster = function(element, options) {
420
+
421
+ // list of instance variables
422
+
423
+ // stack of custom callbacks provided as parameters to API methods
424
+ this.__callbacks = {
425
+ close: [],
426
+ open: []
427
+ };
428
+ // the schedule time of DOM removal
429
+ this.__closingTime;
430
+ // this will be the user content shown in the tooltip. A capital "C" is used
431
+ // because there is also a method called content()
432
+ this.__Content;
433
+ // for the size tracker
434
+ this.__contentBcr;
435
+ // to disable the tooltip after destruction
436
+ this.__destroyed = false;
437
+ // we can't emit directly on the instance because if a method with the same
438
+ // name as the event exists, it will be called by jQuery. Se we use a plain
439
+ // object as emitter. This emitter is for internal use by plugins,
440
+ // if needed.
441
+ this.__$emitterPrivate = $({});
442
+ // this emitter is for the user to listen to events without risking to mess
443
+ // with our internal listeners
444
+ this.__$emitterPublic = $({});
445
+ this.__enabled = true;
446
+ // the reference to the gc interval
447
+ this.__garbageCollector;
448
+ // various position and size data recomputed before each repositioning
449
+ this.__Geometry;
450
+ // the tooltip position, saved after each repositioning by a plugin
451
+ this.__lastPosition;
452
+ // a unique namespace per instance
453
+ this.__namespace = 'tooltipster-'+ Math.round(Math.random()*1000000);
454
+ this.__options;
455
+ // will be used to support origins in scrollable areas
456
+ this.__$originParents;
457
+ this.__pointerIsOverOrigin = false;
458
+ // to remove themes if needed
459
+ this.__previousThemes = [];
460
+ // the state can be either: appearing, stable, disappearing, closed
461
+ this.__state = 'closed';
462
+ // timeout references
463
+ this.__timeouts = {
464
+ close: [],
465
+ open: null
466
+ };
467
+ // store touch events to be able to detect emulated mouse events
468
+ this.__touchEvents = [];
469
+ // the reference to the tracker interval
470
+ this.__tracker = null;
471
+ // the element to which this tooltip is associated
472
+ this._$origin;
473
+ // this will be the tooltip element (jQuery wrapped HTML element).
474
+ // It's the job of a plugin to create it and append it to the DOM
475
+ this._$tooltip;
476
+
477
+ // launch
478
+ this.__init(element, options);
479
+ };
480
+
481
+ $.Tooltipster.prototype = {
482
+
483
+ /**
484
+ * @param origin
485
+ * @param options
486
+ * @private
487
+ */
488
+ __init: function(origin, options) {
489
+
490
+ var self = this;
491
+
492
+ self._$origin = $(origin);
493
+ self.__options = $.extend(true, {}, defaults, options);
494
+
495
+ // some options may need to be reformatted
496
+ self.__optionsFormat();
497
+
498
+ // don't run on old IE if asked no to
499
+ if ( !env.IE
500
+ || env.IE >= self.__options.IEmin
501
+ ) {
502
+
503
+ // note: the content is null (empty) by default and can stay that
504
+ // way if the plugin remains initialized but not fed any content. The
505
+ // tooltip will just not appear.
506
+
507
+ // let's save the initial value of the title attribute for later
508
+ // restoration if need be.
509
+ var initialTitle = null;
510
+
511
+ // it will already have been saved in case of multiple tooltips
512
+ if (self._$origin.data('tooltipster-initialTitle') === undefined) {
513
+
514
+ initialTitle = self._$origin.attr('title');
515
+
516
+ // we do not want initialTitle to be "undefined" because
517
+ // of how jQuery's .data() method works
518
+ if (initialTitle === undefined) initialTitle = null;
519
+
520
+ self._$origin.data('tooltipster-initialTitle', initialTitle);
521
+ }
522
+
523
+ // If content is provided in the options, it has precedence over the
524
+ // title attribute.
525
+ // Note: an empty string is considered content, only 'null' represents
526
+ // the absence of content.
527
+ // Also, an existing title="" attribute will result in an empty string
528
+ // content
529
+ if (self.__options.content !== null) {
530
+ self.__contentSet(self.__options.content);
531
+ }
532
+ else {
533
+
534
+ var selector = self._$origin.attr('data-tooltip-content'),
535
+ $el;
536
+
537
+ if (selector){
538
+ $el = $(selector);
539
+ }
540
+
541
+ if ($el && $el[0]) {
542
+ self.__contentSet($el.first());
543
+ }
544
+ else {
545
+ self.__contentSet(initialTitle);
546
+ }
547
+ }
548
+
549
+ self._$origin
550
+ // strip the title off of the element to prevent the default tooltips
551
+ // from popping up
552
+ .removeAttr('title')
553
+ // to be able to find all instances on the page later (upon window
554
+ // events in particular)
555
+ .addClass('tooltipstered');
556
+
557
+ // set listeners on the origin
558
+ self.__prepareOrigin();
559
+
560
+ // set the garbage collector
561
+ self.__prepareGC();
562
+
563
+ // init plugins
564
+ $.each(self.__options.plugins, function(i, pluginName) {
565
+ self._plug(pluginName);
566
+ });
567
+
568
+ // to detect swiping
569
+ if (env.hasTouchCapability) {
570
+ $(env.window.document.body).on('touchmove.'+ self.__namespace +'-triggerOpen', function(event) {
571
+ self._touchRecordEvent(event);
572
+ });
573
+ }
574
+
575
+ self
576
+ // prepare the tooltip when it gets created. This event must
577
+ // be fired by a plugin
578
+ ._on('created', function() {
579
+ self.__prepareTooltip();
580
+ })
581
+ // save position information when it's sent by a plugin
582
+ ._on('repositioned', function(e) {
583
+ self.__lastPosition = e.position;
584
+ });
585
+ }
586
+ else {
587
+ self.__options.disabled = true;
588
+ }
589
+ },
590
+
591
+ /**
592
+ * Insert the content into the appropriate HTML element of the tooltip
593
+ *
594
+ * @returns {self}
595
+ * @private
596
+ */
597
+ __contentInsert: function() {
598
+
599
+ var self = this,
600
+ $el = self._$tooltip.find('.tooltipster-content'),
601
+ formattedContent = self.__Content,
602
+ format = function(content) {
603
+ formattedContent = content;
604
+ };
605
+
606
+ self._trigger({
607
+ type: 'format',
608
+ content: self.__Content,
609
+ format: format
610
+ });
611
+
612
+ if (self.__options.functionFormat) {
613
+
614
+ formattedContent = self.__options.functionFormat.call(
615
+ self,
616
+ self,
617
+ { origin: self._$origin[0] },
618
+ self.__Content
619
+ );
620
+ }
621
+
622
+ if (typeof formattedContent === 'string' && !self.__options.contentAsHTML) {
623
+ $el.text(formattedContent);
624
+ }
625
+ else {
626
+ $el
627
+ .empty()
628
+ .append(formattedContent);
629
+ }
630
+
631
+ return self;
632
+ },
633
+
634
+ /**
635
+ * Save the content, cloning it beforehand if need be
636
+ *
637
+ * @param content
638
+ * @returns {self}
639
+ * @private
640
+ */
641
+ __contentSet: function(content) {
642
+
643
+ // clone if asked. Cloning the object makes sure that each instance has its
644
+ // own version of the content (in case a same object were provided for several
645
+ // instances)
646
+ // reminder: typeof null === object
647
+ if (content instanceof $ && this.__options.contentCloning) {
648
+ content = content.clone(true);
649
+ }
650
+
651
+ this.__Content = content;
652
+
653
+ this._trigger({
654
+ type: 'updated',
655
+ content: content
656
+ });
657
+
658
+ return this;
659
+ },
660
+
661
+ /**
662
+ * Error message about a method call made after destruction
663
+ *
664
+ * @private
665
+ */
666
+ __destroyError: function() {
667
+ throw new Error('This tooltip has been destroyed and cannot execute your method call.');
668
+ },
669
+
670
+ /**
671
+ * Gather all information about dimensions and available space,
672
+ * called before every repositioning
673
+ *
674
+ * @private
675
+ * @returns {object}
676
+ */
677
+ __geometry: function() {
678
+
679
+ var self = this,
680
+ $target = self._$origin,
681
+ originIsArea = self._$origin.is('area');
682
+
683
+ // if this._$origin is a map area, the target we'll need
684
+ // the dimensions of is actually the image using the map,
685
+ // not the area itself
686
+ if (originIsArea) {
687
+
688
+ var mapName = self._$origin.parent().attr('name');
689
+
690
+ $target = $('img[usemap="#'+ mapName +'"]');
691
+ }
692
+
693
+ var bcr = $target[0].getBoundingClientRect(),
694
+ $document = $(env.window.document),
695
+ $window = $(env.window),
696
+ $parent = $target,
697
+ // some useful properties of important elements
698
+ geo = {
699
+ // available space for the tooltip, see down below
700
+ available: {
701
+ document: null,
702
+ window: null
703
+ },
704
+ document: {
705
+ size: {
706
+ height: $document.height(),
707
+ width: $document.width()
708
+ }
709
+ },
710
+ window: {
711
+ scroll: {
712
+ // the second ones are for IE compatibility
713
+ left: env.window.scrollX || env.window.document.documentElement.scrollLeft,
714
+ top: env.window.scrollY || env.window.document.documentElement.scrollTop
715
+ },
716
+ size: {
717
+ height: $window.height(),
718
+ width: $window.width()
719
+ }
720
+ },
721
+ origin: {
722
+ // the origin has a fixed lineage if itself or one of its
723
+ // ancestors has a fixed position
724
+ fixedLineage: false,
725
+ // relative to the document
726
+ offset: {},
727
+ size: {
728
+ height: bcr.bottom - bcr.top,
729
+ width: bcr.right - bcr.left
730
+ },
731
+ usemapImage: originIsArea ? $target[0] : null,
732
+ // relative to the window
733
+ windowOffset: {
734
+ bottom: bcr.bottom,
735
+ left: bcr.left,
736
+ right: bcr.right,
737
+ top: bcr.top
738
+ }
739
+ }
740
+ },
741
+ geoFixed = false;
742
+
743
+ // if the element is a map area, some properties may need
744
+ // to be recalculated
745
+ if (originIsArea) {
746
+
747
+ var shape = self._$origin.attr('shape'),
748
+ coords = self._$origin.attr('coords');
749
+
750
+ if (coords) {
751
+
752
+ coords = coords.split(',');
753
+
754
+ $.map(coords, function(val, i) {
755
+ coords[i] = parseInt(val);
756
+ });
757
+ }
758
+
759
+ // if the image itself is the area, nothing more to do
760
+ if (shape != 'default') {
761
+
762
+ switch(shape) {
763
+
764
+ case 'circle':
765
+
766
+ var circleCenterLeft = coords[0],
767
+ circleCenterTop = coords[1],
768
+ circleRadius = coords[2],
769
+ areaTopOffset = circleCenterTop - circleRadius,
770
+ areaLeftOffset = circleCenterLeft - circleRadius;
771
+
772
+ geo.origin.size.height = circleRadius * 2;
773
+ geo.origin.size.width = geo.origin.size.height;
774
+
775
+ geo.origin.windowOffset.left += areaLeftOffset;
776
+ geo.origin.windowOffset.top += areaTopOffset;
777
+
778
+ break;
779
+
780
+ case 'rect':
781
+
782
+ var areaLeft = coords[0],
783
+ areaTop = coords[1],
784
+ areaRight = coords[2],
785
+ areaBottom = coords[3];
786
+
787
+ geo.origin.size.height = areaBottom - areaTop;
788
+ geo.origin.size.width = areaRight - areaLeft;
789
+
790
+ geo.origin.windowOffset.left += areaLeft;
791
+ geo.origin.windowOffset.top += areaTop;
792
+
793
+ break;
794
+
795
+ case 'poly':
796
+
797
+ var areaSmallestX = 0,
798
+ areaSmallestY = 0,
799
+ areaGreatestX = 0,
800
+ areaGreatestY = 0,
801
+ arrayAlternate = 'even';
802
+
803
+ for (var i = 0; i < coords.length; i++) {
804
+
805
+ var areaNumber = coords[i];
806
+
807
+ if (arrayAlternate == 'even') {
808
+
809
+ if (areaNumber > areaGreatestX) {
810
+
811
+ areaGreatestX = areaNumber;
812
+
813
+ if (i === 0) {
814
+ areaSmallestX = areaGreatestX;
815
+ }
816
+ }
817
+
818
+ if (areaNumber < areaSmallestX) {
819
+ areaSmallestX = areaNumber;
820
+ }
821
+
822
+ arrayAlternate = 'odd';
823
+ }
824
+ else {
825
+ if (areaNumber > areaGreatestY) {
826
+
827
+ areaGreatestY = areaNumber;
828
+
829
+ if (i == 1) {
830
+ areaSmallestY = areaGreatestY;
831
+ }
832
+ }
833
+
834
+ if (areaNumber < areaSmallestY) {
835
+ areaSmallestY = areaNumber;
836
+ }
837
+
838
+ arrayAlternate = 'even';
839
+ }
840
+ }
841
+
842
+ geo.origin.size.height = areaGreatestY - areaSmallestY;
843
+ geo.origin.size.width = areaGreatestX - areaSmallestX;
844
+
845
+ geo.origin.windowOffset.left += areaSmallestX;
846
+ geo.origin.windowOffset.top += areaSmallestY;
847
+
848
+ break;
849
+ }
850
+ }
851
+ }
852
+
853
+ // user callback through an event
854
+ var edit = function(r) {
855
+ geo.origin.size.height = r.height,
856
+ geo.origin.windowOffset.left = r.left,
857
+ geo.origin.windowOffset.top = r.top,
858
+ geo.origin.size.width = r.width
859
+ };
860
+
861
+ self._trigger({
862
+ type: 'geometry',
863
+ edit: edit,
864
+ geometry: {
865
+ height: geo.origin.size.height,
866
+ left: geo.origin.windowOffset.left,
867
+ top: geo.origin.windowOffset.top,
868
+ width: geo.origin.size.width
869
+ }
870
+ });
871
+
872
+ // calculate the remaining properties with what we got
873
+
874
+ geo.origin.windowOffset.right = geo.origin.windowOffset.left + geo.origin.size.width;
875
+ geo.origin.windowOffset.bottom = geo.origin.windowOffset.top + geo.origin.size.height;
876
+
877
+ geo.origin.offset.left = geo.origin.windowOffset.left + geo.window.scroll.left;
878
+ geo.origin.offset.top = geo.origin.windowOffset.top + geo.window.scroll.top;
879
+ geo.origin.offset.bottom = geo.origin.offset.top + geo.origin.size.height;
880
+ geo.origin.offset.right = geo.origin.offset.left + geo.origin.size.width;
881
+
882
+ // the space that is available to display the tooltip relatively to the document
883
+ geo.available.document = {
884
+ bottom: {
885
+ height: geo.document.size.height - geo.origin.offset.bottom,
886
+ width: geo.document.size.width
887
+ },
888
+ left: {
889
+ height: geo.document.size.height,
890
+ width: geo.origin.offset.left
891
+ },
892
+ right: {
893
+ height: geo.document.size.height,
894
+ width: geo.document.size.width - geo.origin.offset.right
895
+ },
896
+ top: {
897
+ height: geo.origin.offset.top,
898
+ width: geo.document.size.width
899
+ }
900
+ };
901
+
902
+ // the space that is available to display the tooltip relatively to the viewport
903
+ // (the resulting values may be negative if the origin overflows the viewport)
904
+ geo.available.window = {
905
+ bottom: {
906
+ // the inner max is here to make sure the available height is no bigger
907
+ // than the viewport height (when the origin is off screen at the top).
908
+ // The outer max just makes sure that the height is not negative (when
909
+ // the origin overflows at the bottom).
910
+ height: Math.max(geo.window.size.height - Math.max(geo.origin.windowOffset.bottom, 0), 0),
911
+ width: geo.window.size.width
912
+ },
913
+ left: {
914
+ height: geo.window.size.height,
915
+ width: Math.max(geo.origin.windowOffset.left, 0)
916
+ },
917
+ right: {
918
+ height: geo.window.size.height,
919
+ width: Math.max(geo.window.size.width - Math.max(geo.origin.windowOffset.right, 0), 0)
920
+ },
921
+ top: {
922
+ height: Math.max(geo.origin.windowOffset.top, 0),
923
+ width: geo.window.size.width
924
+ }
925
+ };
926
+
927
+ while ($parent[0].tagName.toLowerCase() != 'html') {
928
+
929
+ if ($parent.css('position') == 'fixed') {
930
+ geo.origin.fixedLineage = true;
931
+ break;
932
+ }
933
+
934
+ $parent = $parent.parent();
935
+ }
936
+
937
+ return geo;
938
+ },
939
+
940
+ /**
941
+ * Some options may need to be formated before being used
942
+ *
943
+ * @returns {self}
944
+ * @private
945
+ */
946
+ __optionsFormat: function() {
947
+
948
+ if (typeof this.__options.animationDuration == 'number') {
949
+ this.__options.animationDuration = [this.__options.animationDuration, this.__options.animationDuration];
950
+ }
951
+
952
+ if (typeof this.__options.delay == 'number') {
953
+ this.__options.delay = [this.__options.delay, this.__options.delay];
954
+ }
955
+
956
+ if (typeof this.__options.delayTouch == 'number') {
957
+ this.__options.delayTouch = [this.__options.delayTouch, this.__options.delayTouch];
958
+ }
959
+
960
+ if (typeof this.__options.theme == 'string') {
961
+ this.__options.theme = [this.__options.theme];
962
+ }
963
+
964
+ // determine the future parent
965
+ if (this.__options.parent === null) {
966
+ this.__options.parent = $(env.window.document.body);
967
+ }
968
+ else if (typeof this.__options.parent == 'string') {
969
+ this.__options.parent = $(this.__options.parent);
970
+ }
971
+
972
+ if (this.__options.trigger == 'hover') {
973
+
974
+ this.__options.triggerOpen = {
975
+ mouseenter: true,
976
+ touchstart: true
977
+ };
978
+
979
+ this.__options.triggerClose = {
980
+ mouseleave: true,
981
+ originClick: true,
982
+ touchleave: true
983
+ };
984
+ }
985
+ else if (this.__options.trigger == 'click') {
986
+
987
+ this.__options.triggerOpen = {
988
+ click: true,
989
+ tap: true
990
+ };
991
+
992
+ this.__options.triggerClose = {
993
+ click: true,
994
+ tap: true
995
+ };
996
+ }
997
+
998
+ // for the plugins
999
+ this._trigger('options');
1000
+
1001
+ return this;
1002
+ },
1003
+
1004
+ /**
1005
+ * Schedules or cancels the garbage collector task
1006
+ *
1007
+ * @returns {self}
1008
+ * @private
1009
+ */
1010
+ __prepareGC: function() {
1011
+
1012
+ var self = this;
1013
+
1014
+ // in case the selfDestruction option has been changed by a method call
1015
+ if (self.__options.selfDestruction) {
1016
+
1017
+ // the GC task
1018
+ self.__garbageCollector = setInterval(function() {
1019
+
1020
+ var now = new Date().getTime();
1021
+
1022
+ // forget the old events
1023
+ self.__touchEvents = $.grep(self.__touchEvents, function(event, i) {
1024
+ // 1 minute
1025
+ return now - event.time > 60000;
1026
+ });
1027
+
1028
+ // auto-destruct if the origin is gone
1029
+ if (!bodyContains(self._$origin)) {
1030
+
1031
+ self.close(function(){
1032
+ self.destroy();
1033
+ });
1034
+ }
1035
+ }, 20000);
1036
+ }
1037
+ else {
1038
+ clearInterval(self.__garbageCollector);
1039
+ }
1040
+
1041
+ return self;
1042
+ },
1043
+
1044
+ /**
1045
+ * Sets listeners on the origin if the open triggers require them.
1046
+ * Unlike the listeners set at opening time, these ones
1047
+ * remain even when the tooltip is closed. It has been made a
1048
+ * separate method so it can be called when the triggers are
1049
+ * changed in the options. Closing is handled in _open()
1050
+ * because of the bindings that may be needed on the tooltip
1051
+ * itself
1052
+ *
1053
+ * @returns {self}
1054
+ * @private
1055
+ */
1056
+ __prepareOrigin: function() {
1057
+
1058
+ var self = this;
1059
+
1060
+ // in case we're resetting the triggers
1061
+ self._$origin.off('.'+ self.__namespace +'-triggerOpen');
1062
+
1063
+ // if the device is touch capable, even if only mouse triggers
1064
+ // are asked, we need to listen to touch events to know if the mouse
1065
+ // events are actually emulated (so we can ignore them)
1066
+ if (env.hasTouchCapability) {
1067
+
1068
+ self._$origin.on(
1069
+ 'touchstart.'+ self.__namespace +'-triggerOpen ' +
1070
+ 'touchend.'+ self.__namespace +'-triggerOpen ' +
1071
+ 'touchcancel.'+ self.__namespace +'-triggerOpen',
1072
+ function(event){
1073
+ self._touchRecordEvent(event);
1074
+ }
1075
+ );
1076
+ }
1077
+
1078
+ // mouse click and touch tap work the same way
1079
+ if ( self.__options.triggerOpen.click
1080
+ || (self.__options.triggerOpen.tap && env.hasTouchCapability)
1081
+ ) {
1082
+
1083
+ var eventNames = '';
1084
+ if (self.__options.triggerOpen.click) {
1085
+ eventNames += 'click.'+ self.__namespace +'-triggerOpen ';
1086
+ }
1087
+ if (self.__options.triggerOpen.tap && env.hasTouchCapability) {
1088
+ eventNames += 'touchend.'+ self.__namespace +'-triggerOpen';
1089
+ }
1090
+
1091
+ self._$origin.on(eventNames, function(event) {
1092
+ if (self._touchIsMeaningfulEvent(event)) {
1093
+ self._open(event);
1094
+ }
1095
+ });
1096
+ }
1097
+
1098
+ // mouseenter and touch start work the same way
1099
+ if ( self.__options.triggerOpen.mouseenter
1100
+ || (self.__options.triggerOpen.touchstart && env.hasTouchCapability)
1101
+ ) {
1102
+
1103
+ var eventNames = '';
1104
+ if (self.__options.triggerOpen.mouseenter) {
1105
+ eventNames += 'mouseenter.'+ self.__namespace +'-triggerOpen ';
1106
+ }
1107
+ if (self.__options.triggerOpen.touchstart && env.hasTouchCapability) {
1108
+ eventNames += 'touchstart.'+ self.__namespace +'-triggerOpen';
1109
+ }
1110
+
1111
+ self._$origin.on(eventNames, function(event) {
1112
+ if ( self._touchIsTouchEvent(event)
1113
+ || !self._touchIsEmulatedEvent(event)
1114
+ ) {
1115
+ self.__pointerIsOverOrigin = true;
1116
+ self._openShortly(event);
1117
+ }
1118
+ });
1119
+ }
1120
+
1121
+ // info for the mouseleave/touchleave close triggers when they use a delay
1122
+ if ( self.__options.triggerClose.mouseleave
1123
+ || (self.__options.triggerClose.touchleave && env.hasTouchCapability)
1124
+ ) {
1125
+
1126
+ var eventNames = '';
1127
+ if (self.__options.triggerClose.mouseleave) {
1128
+ eventNames += 'mouseleave.'+ self.__namespace +'-triggerOpen ';
1129
+ }
1130
+ if (self.__options.triggerClose.touchleave && env.hasTouchCapability) {
1131
+ eventNames += 'touchend.'+ self.__namespace +'-triggerOpen touchcancel.'+ self.__namespace +'-triggerOpen';
1132
+ }
1133
+
1134
+ self._$origin.on(eventNames, function(event) {
1135
+
1136
+ if (self._touchIsMeaningfulEvent(event)) {
1137
+ self.__pointerIsOverOrigin = false;
1138
+ }
1139
+ });
1140
+ }
1141
+
1142
+ return self;
1143
+ },
1144
+
1145
+ /**
1146
+ * Do the things that need to be done only once after the tooltip
1147
+ * HTML element it has been created. It has been made a separate
1148
+ * method so it can be called when options are changed. Remember
1149
+ * that the tooltip may actually exist in the DOM before it is
1150
+ * opened, and present after it has been closed: it's the display
1151
+ * plugin that takes care of handling it.
1152
+ *
1153
+ * @returns {self}
1154
+ * @private
1155
+ */
1156
+ __prepareTooltip: function() {
1157
+
1158
+ var self = this,
1159
+ p = self.__options.interactive ? 'auto' : '';
1160
+
1161
+ // this will be useful to know quickly if the tooltip is in
1162
+ // the DOM or not
1163
+ self._$tooltip
1164
+ .attr('id', self.__namespace)
1165
+ .css({
1166
+ // pointer events
1167
+ 'pointer-events': p,
1168
+ zIndex: self.__options.zIndex
1169
+ });
1170
+
1171
+ // themes
1172
+ // remove the old ones and add the new ones
1173
+ $.each(self.__previousThemes, function(i, theme) {
1174
+ self._$tooltip.removeClass(theme);
1175
+ });
1176
+ $.each(self.__options.theme, function(i, theme) {
1177
+ self._$tooltip.addClass(theme);
1178
+ });
1179
+
1180
+ self.__previousThemes = $.merge([], self.__options.theme);
1181
+
1182
+ return self;
1183
+ },
1184
+
1185
+ /**
1186
+ * Handles the scroll on any of the parents of the origin (when the
1187
+ * tooltip is open)
1188
+ *
1189
+ * @param {object} event
1190
+ * @returns {self}
1191
+ * @private
1192
+ */
1193
+ __scrollHandler: function(event) {
1194
+
1195
+ var self = this;
1196
+
1197
+ if (self.__options.triggerClose.scroll) {
1198
+ self._close(event);
1199
+ }
1200
+ else {
1201
+
1202
+ // if the origin or tooltip have been removed: do nothing, the tracker will
1203
+ // take care of it later
1204
+ if (bodyContains(self._$origin) && bodyContains(self._$tooltip)) {
1205
+
1206
+ var geo = null;
1207
+
1208
+ // if the scroll happened on the window
1209
+ if (event.target === env.window.document) {
1210
+
1211
+ // if the origin has a fixed lineage, window scroll will have no
1212
+ // effect on its position nor on the position of the tooltip
1213
+ if (!self.__Geometry.origin.fixedLineage) {
1214
+
1215
+ // we don't need to do anything unless repositionOnScroll is true
1216
+ // because the tooltip will already have moved with the window
1217
+ // (and of course with the origin)
1218
+ if (self.__options.repositionOnScroll) {
1219
+ self.reposition(event);
1220
+ }
1221
+ }
1222
+ }
1223
+ // if the scroll happened on another parent of the tooltip, it means
1224
+ // that it's in a scrollable area and now needs to have its position
1225
+ // adjusted or recomputed, depending ont the repositionOnScroll
1226
+ // option. Also, if the origin is partly hidden due to a parent that
1227
+ // hides its overflow, we'll just hide (not close) the tooltip.
1228
+ else {
1229
+
1230
+ geo = self.__geometry();
1231
+
1232
+ var overflows = false;
1233
+
1234
+ // a fixed position origin is not affected by the overflow hiding
1235
+ // of a parent
1236
+ if (self._$origin.css('position') != 'fixed') {
1237
+
1238
+ self.__$originParents.each(function(i, el) {
1239
+
1240
+ var $el = $(el),
1241
+ overflowX = $el.css('overflow-x'),
1242
+ overflowY = $el.css('overflow-y');
1243
+
1244
+ if (overflowX != 'visible' || overflowY != 'visible') {
1245
+
1246
+ var bcr = el.getBoundingClientRect();
1247
+
1248
+ if (overflowX != 'visible') {
1249
+
1250
+ if ( geo.origin.windowOffset.left < bcr.left
1251
+ || geo.origin.windowOffset.right > bcr.right
1252
+ ) {
1253
+ overflows = true;
1254
+ return false;
1255
+ }
1256
+ }
1257
+
1258
+ if (overflowY != 'visible') {
1259
+
1260
+ if ( geo.origin.windowOffset.top < bcr.top
1261
+ || geo.origin.windowOffset.bottom > bcr.bottom
1262
+ ) {
1263
+ overflows = true;
1264
+ return false;
1265
+ }
1266
+ }
1267
+ }
1268
+
1269
+ // no need to go further if fixed, for the same reason as above
1270
+ if ($el.css('position') == 'fixed') {
1271
+ return false;
1272
+ }
1273
+ });
1274
+ }
1275
+
1276
+ if (overflows) {
1277
+ self._$tooltip.css('visibility', 'hidden');
1278
+ }
1279
+ else {
1280
+
1281
+ self._$tooltip.css('visibility', 'visible');
1282
+
1283
+ // reposition
1284
+ if (self.__options.repositionOnScroll) {
1285
+ self.reposition(event);
1286
+ }
1287
+ // or just adjust offset
1288
+ else {
1289
+
1290
+ // we have to use offset and not windowOffset because this way,
1291
+ // only the scroll distance of the scrollable areas are taken into
1292
+ // account (the scrolltop value of the main window must be
1293
+ // ignored since the tooltip already moves with it)
1294
+ var offsetLeft = geo.origin.offset.left - self.__Geometry.origin.offset.left,
1295
+ offsetTop = geo.origin.offset.top - self.__Geometry.origin.offset.top;
1296
+
1297
+ // add the offset to the position initially computed by the display plugin
1298
+ self._$tooltip.css({
1299
+ left: self.__lastPosition.coord.left + offsetLeft,
1300
+ top: self.__lastPosition.coord.top + offsetTop
1301
+ });
1302
+ }
1303
+ }
1304
+ }
1305
+
1306
+ self._trigger({
1307
+ type: 'scroll',
1308
+ event: event,
1309
+ geo: geo
1310
+ });
1311
+ }
1312
+ }
1313
+
1314
+ return self;
1315
+ },
1316
+
1317
+ /**
1318
+ * Changes the state of the tooltip
1319
+ *
1320
+ * @param {string} state
1321
+ * @returns {self}
1322
+ * @private
1323
+ */
1324
+ __stateSet: function(state) {
1325
+
1326
+ this.__state = state;
1327
+
1328
+ this._trigger({
1329
+ type: 'state',
1330
+ state: state
1331
+ });
1332
+
1333
+ return this;
1334
+ },
1335
+
1336
+ /**
1337
+ * Clear appearance timeouts
1338
+ *
1339
+ * @returns {self}
1340
+ * @private
1341
+ */
1342
+ __timeoutsClear: function() {
1343
+
1344
+ // there is only one possible open timeout: the delayed opening
1345
+ // when the mouseenter/touchstart open triggers are used
1346
+ clearTimeout(this.__timeouts.open);
1347
+ this.__timeouts.open = null;
1348
+
1349
+ // ... but several close timeouts: the delayed closing when the
1350
+ // mouseleave close trigger is used and the timer option
1351
+ $.each(this.__timeouts.close, function(i, timeout) {
1352
+ clearTimeout(timeout);
1353
+ });
1354
+ this.__timeouts.close = [];
1355
+
1356
+ return this;
1357
+ },
1358
+
1359
+ /**
1360
+ * Start the tracker that will make checks at regular intervals
1361
+ *
1362
+ * @returns {self}
1363
+ * @private
1364
+ */
1365
+ __trackerStart: function() {
1366
+
1367
+ var self = this,
1368
+ $content = self._$tooltip.find('.tooltipster-content');
1369
+
1370
+ // get the initial content size
1371
+ if (self.__options.trackTooltip) {
1372
+ self.__contentBcr = $content[0].getBoundingClientRect();
1373
+ }
1374
+
1375
+ self.__tracker = setInterval(function() {
1376
+
1377
+ // if the origin or tooltip elements have been removed.
1378
+ // Note: we could destroy the instance now if the origin has
1379
+ // been removed but we'll leave that task to our garbage collector
1380
+ if (!bodyContains(self._$origin) || !bodyContains(self._$tooltip)) {
1381
+ self._close();
1382
+ }
1383
+ // if everything is alright
1384
+ else {
1385
+
1386
+ // compare the former and current positions of the origin to reposition
1387
+ // the tooltip if need be
1388
+ if (self.__options.trackOrigin) {
1389
+
1390
+ var g = self.__geometry(),
1391
+ identical = false;
1392
+
1393
+ // compare size first (a change requires repositioning too)
1394
+ if (areEqual(g.origin.size, self.__Geometry.origin.size)) {
1395
+
1396
+ // for elements that have a fixed lineage (see __geometry()), we track the
1397
+ // top and left properties (relative to window)
1398
+ if (self.__Geometry.origin.fixedLineage) {
1399
+ if (areEqual(g.origin.windowOffset, self.__Geometry.origin.windowOffset)) {
1400
+ identical = true;
1401
+ }
1402
+ }
1403
+ // otherwise, track total offset (relative to document)
1404
+ else {
1405
+ if (areEqual(g.origin.offset, self.__Geometry.origin.offset)) {
1406
+ identical = true;
1407
+ }
1408
+ }
1409
+ }
1410
+
1411
+ if (!identical) {
1412
+
1413
+ // close the tooltip when using the mouseleave close trigger
1414
+ // (see https://github.com/iamceege/tooltipster/pull/253)
1415
+ if (self.__options.triggerClose.mouseleave) {
1416
+ self._close();
1417
+ }
1418
+ else {
1419
+ self.reposition();
1420
+ }
1421
+ }
1422
+ }
1423
+
1424
+ if (self.__options.trackTooltip) {
1425
+
1426
+ var currentBcr = $content[0].getBoundingClientRect();
1427
+
1428
+ if ( currentBcr.height !== self.__contentBcr.height
1429
+ || currentBcr.width !== self.__contentBcr.width
1430
+ ) {
1431
+ self.reposition();
1432
+ self.__contentBcr = currentBcr;
1433
+ }
1434
+ }
1435
+ }
1436
+ }, self.__options.trackerInterval);
1437
+
1438
+ return self;
1439
+ },
1440
+
1441
+ /**
1442
+ * Closes the tooltip (after the closing delay)
1443
+ *
1444
+ * @param event
1445
+ * @param callback
1446
+ * @param force Set to true to override a potential refusal of the user's function
1447
+ * @returns {self}
1448
+ * @protected
1449
+ */
1450
+ _close: function(event, callback, force) {
1451
+
1452
+ var self = this,
1453
+ ok = true;
1454
+
1455
+ self._trigger({
1456
+ type: 'close',
1457
+ event: event,
1458
+ stop: function() {
1459
+ ok = false;
1460
+ }
1461
+ });
1462
+
1463
+ // a destroying tooltip (force == true) may not refuse to close
1464
+ if (ok || force) {
1465
+
1466
+ // save the method custom callback and cancel any open method custom callbacks
1467
+ if (callback) self.__callbacks.close.push(callback);
1468
+ self.__callbacks.open = [];
1469
+
1470
+ // clear open/close timeouts
1471
+ self.__timeoutsClear();
1472
+
1473
+ var finishCallbacks = function() {
1474
+
1475
+ // trigger any close method custom callbacks and reset them
1476
+ $.each(self.__callbacks.close, function(i,c) {
1477
+ c.call(self, self, {
1478
+ event: event,
1479
+ origin: self._$origin[0]
1480
+ });
1481
+ });
1482
+
1483
+ self.__callbacks.close = [];
1484
+ };
1485
+
1486
+ if (self.__state != 'closed') {
1487
+
1488
+ var necessary = true,
1489
+ d = new Date(),
1490
+ now = d.getTime(),
1491
+ newClosingTime = now + self.__options.animationDuration[1];
1492
+
1493
+ // the tooltip may already already be disappearing, but if a new
1494
+ // call to close() is made after the animationDuration was changed
1495
+ // to 0 (for example), we ought to actually close it sooner than
1496
+ // previously scheduled. In that case it should be noted that the
1497
+ // browser will not adapt the animation duration to the new
1498
+ // animationDuration that was set after the start of the closing
1499
+ // animation.
1500
+ // Note: the same thing could be considered at opening, but is not
1501
+ // really useful since the tooltip is actually opened immediately
1502
+ // upon a call to _open(). Since it would not make the opening
1503
+ // animation finish sooner, its sole impact would be to trigger the
1504
+ // state event and the open callbacks sooner than the actual end of
1505
+ // the opening animation, which is not great.
1506
+ if (self.__state == 'disappearing') {
1507
+
1508
+ if ( newClosingTime > self.__closingTime
1509
+ // in case closing is actually overdue because the script
1510
+ // execution was suspended. See #679
1511
+ && self.__options.animationDuration[1] > 0
1512
+ ) {
1513
+ necessary = false;
1514
+ }
1515
+ }
1516
+
1517
+ if (necessary) {
1518
+
1519
+ self.__closingTime = newClosingTime;
1520
+
1521
+ if (self.__state != 'disappearing') {
1522
+ self.__stateSet('disappearing');
1523
+ }
1524
+
1525
+ var finish = function() {
1526
+
1527
+ // stop the tracker
1528
+ clearInterval(self.__tracker);
1529
+
1530
+ // a "beforeClose" option has been asked several times but would
1531
+ // probably useless since the content element is still accessible
1532
+ // via ::content(), and because people can always use listeners
1533
+ // inside their content to track what's going on. For the sake of
1534
+ // simplicity, this has been denied. Bur for the rare people who
1535
+ // really need the option (for old browsers or for the case where
1536
+ // detaching the content is actually destructive, for file or
1537
+ // password inputs for example), this event will do the work.
1538
+ self._trigger({
1539
+ type: 'closing',
1540
+ event: event
1541
+ });
1542
+
1543
+ // unbind listeners which are no longer needed
1544
+
1545
+ self._$tooltip
1546
+ .off('.'+ self.__namespace +'-triggerClose')
1547
+ .removeClass('tooltipster-dying');
1548
+
1549
+ // orientationchange, scroll and resize listeners
1550
+ $(env.window).off('.'+ self.__namespace +'-triggerClose');
1551
+
1552
+ // scroll listeners
1553
+ self.__$originParents.each(function(i, el) {
1554
+ $(el).off('scroll.'+ self.__namespace +'-triggerClose');
1555
+ });
1556
+ // clear the array to prevent memory leaks
1557
+ self.__$originParents = null;
1558
+
1559
+ $(env.window.document.body).off('.'+ self.__namespace +'-triggerClose');
1560
+
1561
+ self._$origin.off('.'+ self.__namespace +'-triggerClose');
1562
+
1563
+ self._off('dismissable');
1564
+
1565
+ // a plugin that would like to remove the tooltip from the
1566
+ // DOM when closed should bind on this
1567
+ self.__stateSet('closed');
1568
+
1569
+ // trigger event
1570
+ self._trigger({
1571
+ type: 'after',
1572
+ event: event
1573
+ });
1574
+
1575
+ // call our constructor custom callback function
1576
+ if (self.__options.functionAfter) {
1577
+ self.__options.functionAfter.call(self, self, {
1578
+ event: event,
1579
+ origin: self._$origin[0]
1580
+ });
1581
+ }
1582
+
1583
+ // call our method custom callbacks functions
1584
+ finishCallbacks();
1585
+ };
1586
+
1587
+ if (env.hasTransitions) {
1588
+
1589
+ self._$tooltip.css({
1590
+ '-moz-animation-duration': self.__options.animationDuration[1] + 'ms',
1591
+ '-ms-animation-duration': self.__options.animationDuration[1] + 'ms',
1592
+ '-o-animation-duration': self.__options.animationDuration[1] + 'ms',
1593
+ '-webkit-animation-duration': self.__options.animationDuration[1] + 'ms',
1594
+ 'animation-duration': self.__options.animationDuration[1] + 'ms',
1595
+ 'transition-duration': self.__options.animationDuration[1] + 'ms'
1596
+ });
1597
+
1598
+ self._$tooltip
1599
+ // clear both potential open and close tasks
1600
+ .clearQueue()
1601
+ .removeClass('tooltipster-show')
1602
+ // for transitions only
1603
+ .addClass('tooltipster-dying');
1604
+
1605
+ if (self.__options.animationDuration[1] > 0) {
1606
+ self._$tooltip.delay(self.__options.animationDuration[1]);
1607
+ }
1608
+
1609
+ self._$tooltip.queue(finish);
1610
+ }
1611
+ else {
1612
+
1613
+ self._$tooltip
1614
+ .stop()
1615
+ .fadeOut(self.__options.animationDuration[1], finish);
1616
+ }
1617
+ }
1618
+ }
1619
+ // if the tooltip is already closed, we still need to trigger
1620
+ // the method custom callbacks
1621
+ else {
1622
+ finishCallbacks();
1623
+ }
1624
+ }
1625
+
1626
+ return self;
1627
+ },
1628
+
1629
+ /**
1630
+ * For internal use by plugins, if needed
1631
+ *
1632
+ * @returns {self}
1633
+ * @protected
1634
+ */
1635
+ _off: function() {
1636
+ this.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
1637
+ return this;
1638
+ },
1639
+
1640
+ /**
1641
+ * For internal use by plugins, if needed
1642
+ *
1643
+ * @returns {self}
1644
+ * @protected
1645
+ */
1646
+ _on: function() {
1647
+ this.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
1648
+ return this;
1649
+ },
1650
+
1651
+ /**
1652
+ * For internal use by plugins, if needed
1653
+ *
1654
+ * @returns {self}
1655
+ * @protected
1656
+ */
1657
+ _one: function() {
1658
+ this.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
1659
+ return this;
1660
+ },
1661
+
1662
+ /**
1663
+ * Opens the tooltip right away.
1664
+ *
1665
+ * @param event
1666
+ * @param callback Will be called when the opening animation is over
1667
+ * @returns {self}
1668
+ * @protected
1669
+ */
1670
+ _open: function(event, callback) {
1671
+
1672
+ var self = this;
1673
+
1674
+ // if the destruction process has not begun and if this was not
1675
+ // triggered by an unwanted emulated click event
1676
+ if (!self.__destroying) {
1677
+
1678
+ // check that the origin is still in the DOM
1679
+ if ( bodyContains(self._$origin)
1680
+ // if the tooltip is enabled
1681
+ && self.__enabled
1682
+ ) {
1683
+
1684
+ var ok = true;
1685
+
1686
+ // if the tooltip is not open yet, we need to call functionBefore.
1687
+ // otherwise we can jst go on
1688
+ if (self.__state == 'closed') {
1689
+
1690
+ // trigger an event. The event.stop function allows the callback
1691
+ // to prevent the opening of the tooltip
1692
+ self._trigger({
1693
+ type: 'before',
1694
+ event: event,
1695
+ stop: function() {
1696
+ ok = false;
1697
+ }
1698
+ });
1699
+
1700
+ if (ok && self.__options.functionBefore) {
1701
+
1702
+ // call our custom function before continuing
1703
+ ok = self.__options.functionBefore.call(self, self, {
1704
+ event: event,
1705
+ origin: self._$origin[0]
1706
+ });
1707
+ }
1708
+ }
1709
+
1710
+ if (ok !== false) {
1711
+
1712
+ // if there is some content
1713
+ if (self.__Content !== null) {
1714
+
1715
+ // save the method callback and cancel close method callbacks
1716
+ if (callback) {
1717
+ self.__callbacks.open.push(callback);
1718
+ }
1719
+ self.__callbacks.close = [];
1720
+
1721
+ // get rid of any appearance timeouts
1722
+ self.__timeoutsClear();
1723
+
1724
+ var extraTime,
1725
+ finish = function() {
1726
+
1727
+ if (self.__state != 'stable') {
1728
+ self.__stateSet('stable');
1729
+ }
1730
+
1731
+ // trigger any open method custom callbacks and reset them
1732
+ $.each(self.__callbacks.open, function(i,c) {
1733
+ c.call(self, self, {
1734
+ origin: self._$origin[0],
1735
+ tooltip: self._$tooltip[0]
1736
+ });
1737
+ });
1738
+
1739
+ self.__callbacks.open = [];
1740
+ };
1741
+
1742
+ // if the tooltip is already open
1743
+ if (self.__state !== 'closed') {
1744
+
1745
+ // the timer (if any) will start (or restart) right now
1746
+ extraTime = 0;
1747
+
1748
+ // if it was disappearing, cancel that
1749
+ if (self.__state === 'disappearing') {
1750
+
1751
+ self.__stateSet('appearing');
1752
+
1753
+ if (env.hasTransitions) {
1754
+
1755
+ self._$tooltip
1756
+ .clearQueue()
1757
+ .removeClass('tooltipster-dying')
1758
+ .addClass('tooltipster-show');
1759
+
1760
+ if (self.__options.animationDuration[0] > 0) {
1761
+ self._$tooltip.delay(self.__options.animationDuration[0]);
1762
+ }
1763
+
1764
+ self._$tooltip.queue(finish);
1765
+ }
1766
+ else {
1767
+ // in case the tooltip was currently fading out, bring it back
1768
+ // to life
1769
+ self._$tooltip
1770
+ .stop()
1771
+ .fadeIn(finish);
1772
+ }
1773
+ }
1774
+ // if the tooltip is already open, we still need to trigger the method
1775
+ // custom callback
1776
+ else if (self.__state == 'stable') {
1777
+ finish();
1778
+ }
1779
+ }
1780
+ // if the tooltip isn't already open, open it
1781
+ else {
1782
+
1783
+ // a plugin must bind on this and store the tooltip in this._$tooltip
1784
+ self.__stateSet('appearing');
1785
+
1786
+ // the timer (if any) will start when the tooltip has fully appeared
1787
+ // after its transition
1788
+ extraTime = self.__options.animationDuration[0];
1789
+
1790
+ // insert the content inside the tooltip
1791
+ self.__contentInsert();
1792
+
1793
+ // reposition the tooltip and attach to the DOM
1794
+ self.reposition(event, true);
1795
+
1796
+ // animate in the tooltip. If the display plugin wants no css
1797
+ // animations, it may override the animation option with a
1798
+ // dummy value that will produce no effect
1799
+ if (env.hasTransitions) {
1800
+
1801
+ // note: there seems to be an issue with start animations which
1802
+ // are randomly not played on fast devices in both Chrome and FF,
1803
+ // couldn't find a way to solve it yet. It seems that applying
1804
+ // the classes before appending to the DOM helps a little, but
1805
+ // it messes up some CSS transitions. The issue almost never
1806
+ // happens when delay[0]==0 though
1807
+ self._$tooltip
1808
+ .addClass('tooltipster-'+ self.__options.animation)
1809
+ .addClass('tooltipster-initial')
1810
+ .css({
1811
+ '-moz-animation-duration': self.__options.animationDuration[0] + 'ms',
1812
+ '-ms-animation-duration': self.__options.animationDuration[0] + 'ms',
1813
+ '-o-animation-duration': self.__options.animationDuration[0] + 'ms',
1814
+ '-webkit-animation-duration': self.__options.animationDuration[0] + 'ms',
1815
+ 'animation-duration': self.__options.animationDuration[0] + 'ms',
1816
+ 'transition-duration': self.__options.animationDuration[0] + 'ms'
1817
+ });
1818
+
1819
+ setTimeout(
1820
+ function() {
1821
+
1822
+ // a quick hover may have already triggered a mouseleave
1823
+ if (self.__state != 'closed') {
1824
+
1825
+ self._$tooltip
1826
+ .addClass('tooltipster-show')
1827
+ .removeClass('tooltipster-initial');
1828
+
1829
+ if (self.__options.animationDuration[0] > 0) {
1830
+ self._$tooltip.delay(self.__options.animationDuration[0]);
1831
+ }
1832
+
1833
+ self._$tooltip.queue(finish);
1834
+ }
1835
+ },
1836
+ 0
1837
+ );
1838
+ }
1839
+ else {
1840
+
1841
+ // old browsers will have to live with this
1842
+ self._$tooltip
1843
+ .css('display', 'none')
1844
+ .fadeIn(self.__options.animationDuration[0], finish);
1845
+ }
1846
+
1847
+ // checks if the origin is removed while the tooltip is open
1848
+ self.__trackerStart();
1849
+
1850
+ // NOTE: the listeners below have a '-triggerClose' namespace
1851
+ // because we'll remove them when the tooltip closes (unlike
1852
+ // the '-triggerOpen' listeners). So some of them are actually
1853
+ // not about close triggers, rather about positioning.
1854
+
1855
+ $(env.window)
1856
+ // reposition on resize
1857
+ .on('resize.'+ self.__namespace +'-triggerClose', function(e) {
1858
+
1859
+ var $ae = $(document.activeElement);
1860
+
1861
+ // reposition only if the resize event was not triggered upon the opening
1862
+ // of a virtual keyboard due to an input field being focused within the tooltip
1863
+ // (otherwise the repositioning would lose the focus)
1864
+ if ( (!$ae.is('input') && !$ae.is('textarea'))
1865
+ || !$.contains(self._$tooltip[0], $ae[0])
1866
+ ) {
1867
+ self.reposition(e);
1868
+ }
1869
+ })
1870
+ // same as below for parents
1871
+ .on('scroll.'+ self.__namespace +'-triggerClose', function(e) {
1872
+ self.__scrollHandler(e);
1873
+ });
1874
+
1875
+ self.__$originParents = self._$origin.parents();
1876
+
1877
+ // scrolling may require the tooltip to be moved or even
1878
+ // repositioned in some cases
1879
+ self.__$originParents.each(function(i, parent) {
1880
+
1881
+ $(parent).on('scroll.'+ self.__namespace +'-triggerClose', function(e) {
1882
+ self.__scrollHandler(e);
1883
+ });
1884
+ });
1885
+
1886
+ if ( self.__options.triggerClose.mouseleave
1887
+ || (self.__options.triggerClose.touchleave && env.hasTouchCapability)
1888
+ ) {
1889
+
1890
+ // we use an event to allow users/plugins to control when the mouseleave/touchleave
1891
+ // close triggers will come to action. It allows to have more triggering elements
1892
+ // than just the origin and the tooltip for example, or to cancel/delay the closing,
1893
+ // or to make the tooltip interactive even if it wasn't when it was open, etc.
1894
+ self._on('dismissable', function(event) {
1895
+
1896
+ if (event.dismissable) {
1897
+
1898
+ if (event.delay) {
1899
+
1900
+ timeout = setTimeout(function() {
1901
+ // event.event may be undefined
1902
+ self._close(event.event);
1903
+ }, event.delay);
1904
+
1905
+ self.__timeouts.close.push(timeout);
1906
+ }
1907
+ else {
1908
+ self._close(event);
1909
+ }
1910
+ }
1911
+ else {
1912
+ clearTimeout(timeout);
1913
+ }
1914
+ });
1915
+
1916
+ // now set the listeners that will trigger 'dismissable' events
1917
+ var $elements = self._$origin,
1918
+ eventNamesIn = '',
1919
+ eventNamesOut = '',
1920
+ timeout = null;
1921
+
1922
+ // if we have to allow interaction, bind on the tooltip too
1923
+ if (self.__options.interactive) {
1924
+ $elements = $elements.add(self._$tooltip);
1925
+ }
1926
+
1927
+ if (self.__options.triggerClose.mouseleave) {
1928
+ eventNamesIn += 'mouseenter.'+ self.__namespace +'-triggerClose ';
1929
+ eventNamesOut += 'mouseleave.'+ self.__namespace +'-triggerClose ';
1930
+ }
1931
+ if (self.__options.triggerClose.touchleave && env.hasTouchCapability) {
1932
+ eventNamesIn += 'touchstart.'+ self.__namespace +'-triggerClose';
1933
+ eventNamesOut += 'touchend.'+ self.__namespace +'-triggerClose touchcancel.'+ self.__namespace +'-triggerClose';
1934
+ }
1935
+
1936
+ $elements
1937
+ // close after some time spent outside of the elements
1938
+ .on(eventNamesOut, function(event) {
1939
+
1940
+ // it's ok if the touch gesture ended up to be a swipe,
1941
+ // it's still a "touch leave" situation
1942
+ if ( self._touchIsTouchEvent(event)
1943
+ || !self._touchIsEmulatedEvent(event)
1944
+ ) {
1945
+
1946
+ var delay = (event.type == 'mouseleave') ?
1947
+ self.__options.delay :
1948
+ self.__options.delayTouch;
1949
+
1950
+ self._trigger({
1951
+ delay: delay[1],
1952
+ dismissable: true,
1953
+ event: event,
1954
+ type: 'dismissable'
1955
+ });
1956
+ }
1957
+ })
1958
+ // suspend the mouseleave timeout when the pointer comes back
1959
+ // over the elements
1960
+ .on(eventNamesIn, function(event) {
1961
+
1962
+ // it's also ok if the touch event is a swipe gesture
1963
+ if ( self._touchIsTouchEvent(event)
1964
+ || !self._touchIsEmulatedEvent(event)
1965
+ ) {
1966
+ self._trigger({
1967
+ dismissable: false,
1968
+ event: event,
1969
+ type: 'dismissable'
1970
+ });
1971
+ }
1972
+ });
1973
+ }
1974
+
1975
+ // close the tooltip when the origin gets a mouse click (common behavior of
1976
+ // native tooltips)
1977
+ if (self.__options.triggerClose.originClick) {
1978
+
1979
+ self._$origin.on('click.'+ self.__namespace + '-triggerClose', function(event) {
1980
+
1981
+ // we could actually let a tap trigger this but this feature just
1982
+ // does not make sense on touch devices
1983
+ if ( !self._touchIsTouchEvent(event)
1984
+ && !self._touchIsEmulatedEvent(event)
1985
+ ) {
1986
+ self._close(event);
1987
+ }
1988
+ });
1989
+ }
1990
+
1991
+ // set the same bindings for click and touch on the body to close the tooltip
1992
+ if ( self.__options.triggerClose.click
1993
+ || (self.__options.triggerClose.tap && env.hasTouchCapability)
1994
+ ) {
1995
+
1996
+ // don't set right away since the click/tap event which triggered this method
1997
+ // (if it was a click/tap) is going to bubble up to the body, we don't want it
1998
+ // to close the tooltip immediately after it opened
1999
+ setTimeout(function() {
2000
+
2001
+ if (self.__state != 'closed') {
2002
+
2003
+ var eventNames = '',
2004
+ $body = $(env.window.document.body);
2005
+
2006
+ if (self.__options.triggerClose.click) {
2007
+ eventNames += 'click.'+ self.__namespace +'-triggerClose ';
2008
+ }
2009
+ if (self.__options.triggerClose.tap && env.hasTouchCapability) {
2010
+ eventNames += 'touchend.'+ self.__namespace +'-triggerClose';
2011
+ }
2012
+
2013
+ $body.on(eventNames, function(event) {
2014
+
2015
+ if (self._touchIsMeaningfulEvent(event)) {
2016
+
2017
+ self._touchRecordEvent(event);
2018
+
2019
+ if (!self.__options.interactive || !$.contains(self._$tooltip[0], event.target)) {
2020
+ self._close(event);
2021
+ }
2022
+ }
2023
+ });
2024
+
2025
+ // needed to detect and ignore swiping
2026
+ if (self.__options.triggerClose.tap && env.hasTouchCapability) {
2027
+
2028
+ $body.on('touchstart.'+ self.__namespace +'-triggerClose', function(event) {
2029
+ self._touchRecordEvent(event);
2030
+ });
2031
+ }
2032
+ }
2033
+ }, 0);
2034
+ }
2035
+
2036
+ self._trigger('ready');
2037
+
2038
+ // call our custom callback
2039
+ if (self.__options.functionReady) {
2040
+ self.__options.functionReady.call(self, self, {
2041
+ origin: self._$origin[0],
2042
+ tooltip: self._$tooltip[0]
2043
+ });
2044
+ }
2045
+ }
2046
+
2047
+ // if we have a timer set, let the countdown begin
2048
+ if (self.__options.timer > 0) {
2049
+
2050
+ var timeout = setTimeout(function() {
2051
+ self._close();
2052
+ }, self.__options.timer + extraTime);
2053
+
2054
+ self.__timeouts.close.push(timeout);
2055
+ }
2056
+ }
2057
+ }
2058
+ }
2059
+ }
2060
+
2061
+ return self;
2062
+ },
2063
+
2064
+ /**
2065
+ * When using the mouseenter/touchstart open triggers, this function will
2066
+ * schedule the opening of the tooltip after the delay, if there is one
2067
+ *
2068
+ * @param event
2069
+ * @returns {self}
2070
+ * @protected
2071
+ */
2072
+ _openShortly: function(event) {
2073
+
2074
+ var self = this,
2075
+ ok = true;
2076
+
2077
+ if (self.__state != 'stable' && self.__state != 'appearing') {
2078
+
2079
+ // if a timeout is not already running
2080
+ if (!self.__timeouts.open) {
2081
+
2082
+ self._trigger({
2083
+ type: 'start',
2084
+ event: event,
2085
+ stop: function() {
2086
+ ok = false;
2087
+ }
2088
+ });
2089
+
2090
+ if (ok) {
2091
+
2092
+ var delay = (event.type.indexOf('touch') == 0) ?
2093
+ self.__options.delayTouch :
2094
+ self.__options.delay;
2095
+
2096
+ if (delay[0]) {
2097
+
2098
+ self.__timeouts.open = setTimeout(function() {
2099
+
2100
+ self.__timeouts.open = null;
2101
+
2102
+ // open only if the pointer (mouse or touch) is still over the origin.
2103
+ // The check on the "meaningful event" can only be made here, after some
2104
+ // time has passed (to know if the touch was a swipe or not)
2105
+ if (self.__pointerIsOverOrigin && self._touchIsMeaningfulEvent(event)) {
2106
+
2107
+ // signal that we go on
2108
+ self._trigger('startend');
2109
+
2110
+ self._open(event);
2111
+ }
2112
+ else {
2113
+ // signal that we cancel
2114
+ self._trigger('startcancel');
2115
+ }
2116
+ }, delay[0]);
2117
+ }
2118
+ else {
2119
+ // signal that we go on
2120
+ self._trigger('startend');
2121
+
2122
+ self._open(event);
2123
+ }
2124
+ }
2125
+ }
2126
+ }
2127
+
2128
+ return self;
2129
+ },
2130
+
2131
+ /**
2132
+ * Meant for plugins to get their options
2133
+ *
2134
+ * @param {string} pluginName The name of the plugin that asks for its options
2135
+ * @param {object} defaultOptions The default options of the plugin
2136
+ * @returns {object} The options
2137
+ * @protected
2138
+ */
2139
+ _optionsExtract: function(pluginName, defaultOptions) {
2140
+
2141
+ var self = this,
2142
+ options = $.extend(true, {}, defaultOptions);
2143
+
2144
+ // if the plugin options were isolated in a property named after the
2145
+ // plugin, use them (prevents conflicts with other plugins)
2146
+ var pluginOptions = self.__options[pluginName];
2147
+
2148
+ // if not, try to get them as regular options
2149
+ if (!pluginOptions){
2150
+
2151
+ pluginOptions = {};
2152
+
2153
+ $.each(defaultOptions, function(optionName, value) {
2154
+
2155
+ var o = self.__options[optionName];
2156
+
2157
+ if (o !== undefined) {
2158
+ pluginOptions[optionName] = o;
2159
+ }
2160
+ });
2161
+ }
2162
+
2163
+ // let's merge the default options and the ones that were provided. We'd want
2164
+ // to do a deep copy but not let jQuery merge arrays, so we'll do a shallow
2165
+ // extend on two levels, that will be enough if options are not more than 1
2166
+ // level deep
2167
+ $.each(options, function(optionName, value) {
2168
+
2169
+ if (pluginOptions[optionName] !== undefined) {
2170
+
2171
+ if (( typeof value == 'object'
2172
+ && !(value instanceof Array)
2173
+ && value != null
2174
+ )
2175
+ &&
2176
+ ( typeof pluginOptions[optionName] == 'object'
2177
+ && !(pluginOptions[optionName] instanceof Array)
2178
+ && pluginOptions[optionName] != null
2179
+ )
2180
+ ) {
2181
+ $.extend(options[optionName], pluginOptions[optionName]);
2182
+ }
2183
+ else {
2184
+ options[optionName] = pluginOptions[optionName];
2185
+ }
2186
+ }
2187
+ });
2188
+
2189
+ return options;
2190
+ },
2191
+
2192
+ /**
2193
+ * Used at instantiation of the plugin, or afterwards by plugins that activate themselves
2194
+ * on existing instances
2195
+ *
2196
+ * @param {object} pluginName
2197
+ * @returns {self}
2198
+ * @protected
2199
+ */
2200
+ _plug: function(pluginName) {
2201
+
2202
+ var plugin = $.tooltipster._plugin(pluginName);
2203
+
2204
+ if (plugin) {
2205
+
2206
+ // if there is a constructor for instances
2207
+ if (plugin.instance) {
2208
+
2209
+ // proxy non-private methods on the instance to allow new instance methods
2210
+ $.tooltipster.__bridge(plugin.instance, this, plugin.name);
2211
+ }
2212
+ }
2213
+ else {
2214
+ throw new Error('The "'+ pluginName +'" plugin is not defined');
2215
+ }
2216
+
2217
+ return this;
2218
+ },
2219
+
2220
+ /**
2221
+ * This will return true if the event is a mouse event which was
2222
+ * emulated by the browser after a touch event. This allows us to
2223
+ * really dissociate mouse and touch triggers.
2224
+ *
2225
+ * There is a margin of error if a real mouse event is fired right
2226
+ * after (within the delay shown below) a touch event on the same
2227
+ * element, but hopefully it should not happen often.
2228
+ *
2229
+ * @returns {boolean}
2230
+ * @protected
2231
+ */
2232
+ _touchIsEmulatedEvent: function(event) {
2233
+
2234
+ var isEmulated = false,
2235
+ now = new Date().getTime();
2236
+
2237
+ for (var i = this.__touchEvents.length - 1; i >= 0; i--) {
2238
+
2239
+ var e = this.__touchEvents[i];
2240
+
2241
+ // delay, in milliseconds. It's supposed to be 300ms in
2242
+ // most browsers (350ms on iOS) to allow a double tap but
2243
+ // can be less (check out FastClick for more info)
2244
+ if (now - e.time < 500) {
2245
+
2246
+ if (e.target === event.target) {
2247
+ isEmulated = true;
2248
+ }
2249
+ }
2250
+ else {
2251
+ break;
2252
+ }
2253
+ }
2254
+
2255
+ return isEmulated;
2256
+ },
2257
+
2258
+ /**
2259
+ * Returns false if the event was an emulated mouse event or
2260
+ * a touch event involved in a swipe gesture.
2261
+ *
2262
+ * @param {object} event
2263
+ * @returns {boolean}
2264
+ * @protected
2265
+ */
2266
+ _touchIsMeaningfulEvent: function(event) {
2267
+ return (
2268
+ (this._touchIsTouchEvent(event) && !this._touchSwiped(event.target))
2269
+ || (!this._touchIsTouchEvent(event) && !this._touchIsEmulatedEvent(event))
2270
+ );
2271
+ },
2272
+
2273
+ /**
2274
+ * Checks if an event is a touch event
2275
+ *
2276
+ * @param {object} event
2277
+ * @returns {boolean}
2278
+ * @protected
2279
+ */
2280
+ _touchIsTouchEvent: function(event){
2281
+ return event.type.indexOf('touch') == 0;
2282
+ },
2283
+
2284
+ /**
2285
+ * Store touch events for a while to detect swiping and emulated mouse events
2286
+ *
2287
+ * @param {object} event
2288
+ * @returns {self}
2289
+ * @protected
2290
+ */
2291
+ _touchRecordEvent: function(event) {
2292
+
2293
+ if (this._touchIsTouchEvent(event)) {
2294
+ event.time = new Date().getTime();
2295
+ this.__touchEvents.push(event);
2296
+ }
2297
+
2298
+ return this;
2299
+ },
2300
+
2301
+ /**
2302
+ * Returns true if a swipe happened after the last touchstart event fired on
2303
+ * event.target.
2304
+ *
2305
+ * We need to differentiate a swipe from a tap before we let the event open
2306
+ * or close the tooltip. A swipe is when a touchmove (scroll) event happens
2307
+ * on the body between the touchstart and the touchend events of an element.
2308
+ *
2309
+ * @param {object} target The HTML element that may have triggered the swipe
2310
+ * @returns {boolean}
2311
+ * @protected
2312
+ */
2313
+ _touchSwiped: function(target) {
2314
+
2315
+ var swiped = false;
2316
+
2317
+ for (var i = this.__touchEvents.length - 1; i >= 0; i--) {
2318
+
2319
+ var e = this.__touchEvents[i];
2320
+
2321
+ if (e.type == 'touchmove') {
2322
+ swiped = true;
2323
+ break;
2324
+ }
2325
+ else if (
2326
+ e.type == 'touchstart'
2327
+ && target === e.target
2328
+ ) {
2329
+ break;
2330
+ }
2331
+ }
2332
+
2333
+ return swiped;
2334
+ },
2335
+
2336
+ /**
2337
+ * Triggers an event on the instance emitters
2338
+ *
2339
+ * @returns {self}
2340
+ * @protected
2341
+ */
2342
+ _trigger: function() {
2343
+
2344
+ var args = Array.prototype.slice.apply(arguments);
2345
+
2346
+ if (typeof args[0] == 'string') {
2347
+ args[0] = { type: args[0] };
2348
+ }
2349
+
2350
+ // add properties to the event
2351
+ args[0].instance = this;
2352
+ args[0].origin = this._$origin ? this._$origin[0] : null;
2353
+ args[0].tooltip = this._$tooltip ? this._$tooltip[0] : null;
2354
+
2355
+ // note: the order of emitters matters
2356
+ this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);
2357
+ $.tooltipster._trigger.apply($.tooltipster, args);
2358
+ this.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);
2359
+
2360
+ return this;
2361
+ },
2362
+
2363
+ /**
2364
+ * Deactivate a plugin on this instance
2365
+ *
2366
+ * @returns {self}
2367
+ * @protected
2368
+ */
2369
+ _unplug: function(pluginName) {
2370
+
2371
+ var self = this;
2372
+
2373
+ // if the plugin has been activated on this instance
2374
+ if (self[pluginName]) {
2375
+
2376
+ var plugin = $.tooltipster._plugin(pluginName);
2377
+
2378
+ // if there is a constructor for instances
2379
+ if (plugin.instance) {
2380
+
2381
+ // unbridge
2382
+ $.each(plugin.instance, function(methodName, fn) {
2383
+
2384
+ // if the method exists (privates methods do not) and comes indeed from
2385
+ // this plugin (may be missing or come from a conflicting plugin).
2386
+ if ( self[methodName]
2387
+ && self[methodName].bridged === self[pluginName]
2388
+ ) {
2389
+ delete self[methodName];
2390
+ }
2391
+ });
2392
+ }
2393
+
2394
+ // destroy the plugin
2395
+ if (self[pluginName].__destroy) {
2396
+ self[pluginName].__destroy();
2397
+ }
2398
+
2399
+ // remove the reference to the plugin instance
2400
+ delete self[pluginName];
2401
+ }
2402
+
2403
+ return self;
2404
+ },
2405
+
2406
+ /**
2407
+ * @see self::_close
2408
+ * @returns {self}
2409
+ * @public
2410
+ */
2411
+ close: function(callback) {
2412
+
2413
+ if (!this.__destroyed) {
2414
+ this._close(null, callback);
2415
+ }
2416
+ else {
2417
+ this.__destroyError();
2418
+ }
2419
+
2420
+ return this;
2421
+ },
2422
+
2423
+ /**
2424
+ * Sets or gets the content of the tooltip
2425
+ *
2426
+ * @returns {mixed|self}
2427
+ * @public
2428
+ */
2429
+ content: function(content) {
2430
+
2431
+ var self = this;
2432
+
2433
+ // getter method
2434
+ if (content === undefined) {
2435
+ return self.__Content;
2436
+ }
2437
+ // setter method
2438
+ else {
2439
+
2440
+ if (!self.__destroyed) {
2441
+
2442
+ // change the content
2443
+ self.__contentSet(content);
2444
+
2445
+ if (self.__Content !== null) {
2446
+
2447
+ // update the tooltip if it is open
2448
+ if (self.__state !== 'closed') {
2449
+
2450
+ // reset the content in the tooltip
2451
+ self.__contentInsert();
2452
+
2453
+ // reposition and resize the tooltip
2454
+ self.reposition();
2455
+
2456
+ // if we want to play a little animation showing the content changed
2457
+ if (self.__options.updateAnimation) {
2458
+
2459
+ if (env.hasTransitions) {
2460
+
2461
+ // keep the reference in the local scope
2462
+ var animation = self.__options.updateAnimation;
2463
+
2464
+ self._$tooltip.addClass('tooltipster-update-'+ animation);
2465
+
2466
+ // remove the class after a while. The actual duration of the
2467
+ // update animation may be shorter, it's set in the CSS rules
2468
+ setTimeout(function() {
2469
+
2470
+ if (self.__state != 'closed') {
2471
+
2472
+ self._$tooltip.removeClass('tooltipster-update-'+ animation);
2473
+ }
2474
+ }, 1000);
2475
+ }
2476
+ else {
2477
+ self._$tooltip.fadeTo(200, 0.5, function() {
2478
+ if (self.__state != 'closed') {
2479
+ self._$tooltip.fadeTo(200, 1);
2480
+ }
2481
+ });
2482
+ }
2483
+ }
2484
+ }
2485
+ }
2486
+ else {
2487
+ self._close();
2488
+ }
2489
+ }
2490
+ else {
2491
+ self.__destroyError();
2492
+ }
2493
+
2494
+ return self;
2495
+ }
2496
+ },
2497
+
2498
+ /**
2499
+ * Destroys the tooltip
2500
+ *
2501
+ * @returns {self}
2502
+ * @public
2503
+ */
2504
+ destroy: function() {
2505
+
2506
+ var self = this;
2507
+
2508
+ if (!self.__destroyed) {
2509
+
2510
+ if(self.__state != 'closed'){
2511
+
2512
+ // no closing delay
2513
+ self.option('animationDuration', 0)
2514
+ // force closing
2515
+ ._close(null, null, true);
2516
+ }
2517
+ else {
2518
+ // there might be an open timeout still running
2519
+ self.__timeoutsClear();
2520
+ }
2521
+
2522
+ // send event
2523
+ self._trigger('destroy');
2524
+
2525
+ self.__destroyed = true;
2526
+
2527
+ self._$origin
2528
+ .removeData(self.__namespace)
2529
+ // remove the open trigger listeners
2530
+ .off('.'+ self.__namespace +'-triggerOpen');
2531
+
2532
+ // remove the touch listener
2533
+ $(env.window.document.body).off('.' + self.__namespace +'-triggerOpen');
2534
+
2535
+ var ns = self._$origin.data('tooltipster-ns');
2536
+
2537
+ // if the origin has been removed from DOM, its data may
2538
+ // well have been destroyed in the process and there would
2539
+ // be nothing to clean up or restore
2540
+ if (ns) {
2541
+
2542
+ // if there are no more tooltips on this element
2543
+ if (ns.length === 1) {
2544
+
2545
+ // optional restoration of a title attribute
2546
+ var title = null;
2547
+ if (self.__options.restoration == 'previous') {
2548
+ title = self._$origin.data('tooltipster-initialTitle');
2549
+ }
2550
+ else if (self.__options.restoration == 'current') {
2551
+
2552
+ // old school technique to stringify when outerHTML is not supported
2553
+ title = (typeof self.__Content == 'string') ?
2554
+ self.__Content :
2555
+ $('<div></div>').append(self.__Content).html();
2556
+ }
2557
+
2558
+ if (title) {
2559
+ self._$origin.attr('title', title);
2560
+ }
2561
+
2562
+ // final cleaning
2563
+
2564
+ self._$origin.removeClass('tooltipstered');
2565
+
2566
+ self._$origin
2567
+ .removeData('tooltipster-ns')
2568
+ .removeData('tooltipster-initialTitle');
2569
+ }
2570
+ else {
2571
+ // remove the instance namespace from the list of namespaces of
2572
+ // tooltips present on the element
2573
+ ns = $.grep(ns, function(el, i) {
2574
+ return el !== self.__namespace;
2575
+ });
2576
+ self._$origin.data('tooltipster-ns', ns);
2577
+ }
2578
+ }
2579
+
2580
+ // last event
2581
+ self._trigger('destroyed');
2582
+
2583
+ // unbind private and public event listeners
2584
+ self._off();
2585
+ self.off();
2586
+
2587
+ // remove external references, just in case
2588
+ self.__Content = null;
2589
+ self.__$emitterPrivate = null;
2590
+ self.__$emitterPublic = null;
2591
+ self.__options.parent = null;
2592
+ self._$origin = null;
2593
+ self._$tooltip = null;
2594
+
2595
+ // make sure the object is no longer referenced in there to prevent
2596
+ // memory leaks
2597
+ $.tooltipster.__instancesLatestArr = $.grep($.tooltipster.__instancesLatestArr, function(el, i) {
2598
+ return self !== el;
2599
+ });
2600
+
2601
+ clearInterval(self.__garbageCollector);
2602
+ }
2603
+ else {
2604
+ self.__destroyError();
2605
+ }
2606
+
2607
+ // we return the scope rather than true so that the call to
2608
+ // .tooltipster('destroy') actually returns the matched elements
2609
+ // and applies to all of them
2610
+ return self;
2611
+ },
2612
+
2613
+ /**
2614
+ * Disables the tooltip
2615
+ *
2616
+ * @returns {self}
2617
+ * @public
2618
+ */
2619
+ disable: function() {
2620
+
2621
+ if (!this.__destroyed) {
2622
+
2623
+ // close first, in case the tooltip would not disappear on
2624
+ // its own (no close trigger)
2625
+ this._close();
2626
+ this.__enabled = false;
2627
+
2628
+ return this;
2629
+ }
2630
+ else {
2631
+ this.__destroyError();
2632
+ }
2633
+
2634
+ return this;
2635
+ },
2636
+
2637
+ /**
2638
+ * Returns the HTML element of the origin
2639
+ *
2640
+ * @returns {self}
2641
+ * @public
2642
+ */
2643
+ elementOrigin: function() {
2644
+
2645
+ if (!this.__destroyed) {
2646
+ return this._$origin[0];
2647
+ }
2648
+ else {
2649
+ this.__destroyError();
2650
+ }
2651
+ },
2652
+
2653
+ /**
2654
+ * Returns the HTML element of the tooltip
2655
+ *
2656
+ * @returns {self}
2657
+ * @public
2658
+ */
2659
+ elementTooltip: function() {
2660
+ return this._$tooltip ? this._$tooltip[0] : null;
2661
+ },
2662
+
2663
+ /**
2664
+ * Enables the tooltip
2665
+ *
2666
+ * @returns {self}
2667
+ * @public
2668
+ */
2669
+ enable: function() {
2670
+ this.__enabled = true;
2671
+ return this;
2672
+ },
2673
+
2674
+ /**
2675
+ * Alias, deprecated in 4.0.0
2676
+ *
2677
+ * @param {function} callback
2678
+ * @returns {self}
2679
+ * @public
2680
+ */
2681
+ hide: function(callback) {
2682
+ return this.close(callback);
2683
+ },
2684
+
2685
+ /**
2686
+ * Returns the instance
2687
+ *
2688
+ * @returns {self}
2689
+ * @public
2690
+ */
2691
+ instance: function() {
2692
+ return this;
2693
+ },
2694
+
2695
+ /**
2696
+ * For public use only, not to be used by plugins (use ::_off() instead)
2697
+ *
2698
+ * @returns {self}
2699
+ * @public
2700
+ */
2701
+ off: function() {
2702
+
2703
+ if (!this.__destroyed) {
2704
+ this.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
2705
+ }
2706
+
2707
+ return this;
2708
+ },
2709
+
2710
+ /**
2711
+ * For public use only, not to be used by plugins (use ::_on() instead)
2712
+ *
2713
+ * @returns {self}
2714
+ * @public
2715
+ */
2716
+ on: function() {
2717
+
2718
+ if (!this.__destroyed) {
2719
+ this.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
2720
+ }
2721
+ else {
2722
+ this.__destroyError();
2723
+ }
2724
+
2725
+ return this;
2726
+ },
2727
+
2728
+ /**
2729
+ * For public use only, not to be used by plugins
2730
+ *
2731
+ * @returns {self}
2732
+ * @public
2733
+ */
2734
+ one: function() {
2735
+
2736
+ if (!this.__destroyed) {
2737
+ this.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
2738
+ }
2739
+ else {
2740
+ this.__destroyError();
2741
+ }
2742
+
2743
+ return this;
2744
+ },
2745
+
2746
+ /**
2747
+ * @see self::_open
2748
+ * @returns {self}
2749
+ * @public
2750
+ */
2751
+ open: function(callback) {
2752
+
2753
+ if (!this.__destroyed) {
2754
+ this._open(null, callback);
2755
+ }
2756
+ else {
2757
+ this.__destroyError();
2758
+ }
2759
+
2760
+ return this;
2761
+ },
2762
+
2763
+ /**
2764
+ * Get or set options. For internal use and advanced users only.
2765
+ *
2766
+ * @param {string} o Option name
2767
+ * @param {mixed} val optional A new value for the option
2768
+ * @return {mixed|self} If val is omitted, the value of the option
2769
+ * is returned, otherwise the instance itself is returned
2770
+ * @public
2771
+ */
2772
+ option: function(o, val) {
2773
+
2774
+ // getter
2775
+ if (val === undefined) {
2776
+ return this.__options[o];
2777
+ }
2778
+ // setter
2779
+ else {
2780
+
2781
+ if (!this.__destroyed) {
2782
+
2783
+ // change value
2784
+ this.__options[o] = val;
2785
+
2786
+ // format
2787
+ this.__optionsFormat();
2788
+
2789
+ // re-prepare the triggers if needed
2790
+ if ($.inArray(o, ['trigger', 'triggerClose', 'triggerOpen']) >= 0) {
2791
+ this.__prepareOrigin();
2792
+ }
2793
+
2794
+ if (o === 'selfDestruction') {
2795
+ this.__prepareGC();
2796
+ }
2797
+ }
2798
+ else {
2799
+ this.__destroyError();
2800
+ }
2801
+
2802
+ return this;
2803
+ }
2804
+ },
2805
+
2806
+ /**
2807
+ * This method is in charge of setting the position and size properties of the tooltip.
2808
+ * All the hard work is delegated to the display plugin.
2809
+ * Note: The tooltip may be detached from the DOM at the moment the method is called
2810
+ * but must be attached by the end of the method call.
2811
+ *
2812
+ * @param {object} event For internal use only. Defined if an event such as
2813
+ * window resizing triggered the repositioning
2814
+ * @param {boolean} tooltipIsDetached For internal use only. Set this to true if you
2815
+ * know that the tooltip not being in the DOM is not an issue (typically when the
2816
+ * tooltip element has just been created but has not been added to the DOM yet).
2817
+ * @returns {self}
2818
+ * @public
2819
+ */
2820
+ reposition: function(event, tooltipIsDetached) {
2821
+
2822
+ var self = this;
2823
+
2824
+ if (!self.__destroyed) {
2825
+
2826
+ // if the tooltip is still open and the origin is still in the DOM
2827
+ if (self.__state != 'closed' && bodyContains(self._$origin)) {
2828
+
2829
+ // if the tooltip has not been removed from DOM manually (or if it
2830
+ // has been detached on purpose)
2831
+ if (tooltipIsDetached || bodyContains(self._$tooltip)) {
2832
+
2833
+ if (!tooltipIsDetached) {
2834
+ // detach in case the tooltip overflows the window and adds
2835
+ // scrollbars to it, so __geometry can be accurate
2836
+ self._$tooltip.detach();
2837
+ }
2838
+
2839
+ // refresh the geometry object before passing it as a helper
2840
+ self.__Geometry = self.__geometry();
2841
+
2842
+ // let a plugin fo the rest
2843
+ self._trigger({
2844
+ type: 'reposition',
2845
+ event: event,
2846
+ helper: {
2847
+ geo: self.__Geometry
2848
+ }
2849
+ });
2850
+ }
2851
+ }
2852
+ }
2853
+ else {
2854
+ self.__destroyError();
2855
+ }
2856
+
2857
+ return self;
2858
+ },
2859
+
2860
+ /**
2861
+ * Alias, deprecated in 4.0.0
2862
+ *
2863
+ * @param callback
2864
+ * @returns {self}
2865
+ * @public
2866
+ */
2867
+ show: function(callback) {
2868
+ return this.open(callback);
2869
+ },
2870
+
2871
+ /**
2872
+ * Returns some properties about the instance
2873
+ *
2874
+ * @returns {object}
2875
+ * @public
2876
+ */
2877
+ status: function() {
2878
+
2879
+ return {
2880
+ destroyed: this.__destroyed,
2881
+ enabled: this.__enabled,
2882
+ open: this.__state !== 'closed',
2883
+ state: this.__state
2884
+ };
2885
+ },
2886
+
2887
+ /**
2888
+ * For public use only, not to be used by plugins
2889
+ *
2890
+ * @returns {self}
2891
+ * @public
2892
+ */
2893
+ triggerHandler: function() {
2894
+
2895
+ if (!this.__destroyed) {
2896
+ this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
2897
+ }
2898
+ else {
2899
+ this.__destroyError();
2900
+ }
2901
+
2902
+ return this;
2903
+ }
2904
+ };
2905
+
2906
+ $.fn.tooltipster = function() {
2907
+
2908
+ // for using in closures
2909
+ var args = Array.prototype.slice.apply(arguments),
2910
+ // common mistake: an HTML element can't be in several tooltips at the same time
2911
+ contentCloningWarning = 'You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.';
2912
+
2913
+ // this happens with $(sel).tooltipster(...) when $(sel) does not match anything
2914
+ if (this.length === 0) {
2915
+
2916
+ // still chainable
2917
+ return this;
2918
+ }
2919
+ // this happens when calling $(sel).tooltipster('methodName or options')
2920
+ // where $(sel) matches one or more elements
2921
+ else {
2922
+
2923
+ // method calls
2924
+ if (typeof args[0] === 'string') {
2925
+
2926
+ var v = '#*$~&';
2927
+
2928
+ this.each(function() {
2929
+
2930
+ // retrieve the namepaces of the tooltip(s) that exist on that element.
2931
+ // We will interact with the first tooltip only.
2932
+ var ns = $(this).data('tooltipster-ns'),
2933
+ // self represents the instance of the first tooltipster plugin
2934
+ // associated to the current HTML object of the loop
2935
+ self = ns ? $(this).data(ns[0]) : null;
2936
+
2937
+ // if the current element holds a tooltipster instance
2938
+ if (self) {
2939
+
2940
+ if (typeof self[args[0]] === 'function') {
2941
+
2942
+ if ( this.length > 1
2943
+ && args[0] == 'content'
2944
+ && ( args[1] instanceof $
2945
+ || (typeof args[1] == 'object' && args[1] != null && args[1].tagName)
2946
+ )
2947
+ && !self.__options.contentCloning
2948
+ && self.__options.debug
2949
+ ) {
2950
+ console.log(contentCloningWarning);
2951
+ }
2952
+
2953
+ // note : args[1] and args[2] may not be defined
2954
+ var resp = self[args[0]](args[1], args[2]);
2955
+ }
2956
+ else {
2957
+ throw new Error('Unknown method "'+ args[0] +'"');
2958
+ }
2959
+
2960
+ // if the function returned anything other than the instance
2961
+ // itself (which implies chaining, except for the `instance` method)
2962
+ if (resp !== self || args[0] === 'instance') {
2963
+
2964
+ v = resp;
2965
+
2966
+ // return false to stop .each iteration on the first element
2967
+ // matched by the selector
2968
+ return false;
2969
+ }
2970
+ }
2971
+ else {
2972
+ throw new Error('You called Tooltipster\'s "'+ args[0] +'" method on an uninitialized element');
2973
+ }
2974
+ });
2975
+
2976
+ return (v !== '#*$~&') ? v : this;
2977
+ }
2978
+ // first argument is undefined or an object: the tooltip is initializing
2979
+ else {
2980
+
2981
+ // reset the array of last initialized objects
2982
+ $.tooltipster.__instancesLatestArr = [];
2983
+
2984
+ // is there a defined value for the multiple option in the options object ?
2985
+ var multipleIsSet = args[0] && args[0].multiple !== undefined,
2986
+ // if the multiple option is set to true, or if it's not defined but
2987
+ // set to true in the defaults
2988
+ multiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple),
2989
+ // same for content
2990
+ contentIsSet = args[0] && args[0].content !== undefined,
2991
+ content = (contentIsSet && args[0].content) || (!contentIsSet && defaults.content),
2992
+ // same for contentCloning
2993
+ contentCloningIsSet = args[0] && args[0].contentCloning !== undefined,
2994
+ contentCloning =
2995
+ (contentCloningIsSet && args[0].contentCloning)
2996
+ || (!contentCloningIsSet && defaults.contentCloning),
2997
+ // same for debug
2998
+ debugIsSet = args[0] && args[0].debug !== undefined,
2999
+ debug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug);
3000
+
3001
+ if ( this.length > 1
3002
+ && ( content instanceof $
3003
+ || (typeof content == 'object' && content != null && content.tagName)
3004
+ )
3005
+ && !contentCloning
3006
+ && debug
3007
+ ) {
3008
+ console.log(contentCloningWarning);
3009
+ }
3010
+
3011
+ // create a tooltipster instance for each element if it doesn't
3012
+ // already have one or if the multiple option is set, and attach the
3013
+ // object to it
3014
+ this.each(function() {
3015
+
3016
+ var go = false,
3017
+ $this = $(this),
3018
+ ns = $this.data('tooltipster-ns'),
3019
+ obj = null;
3020
+
3021
+ if (!ns) {
3022
+ go = true;
3023
+ }
3024
+ else if (multiple) {
3025
+ go = true;
3026
+ }
3027
+ else if (debug) {
3028
+ console.log('Tooltipster: one or more tooltips are already attached to the element below. Ignoring.');
3029
+ console.log(this);
3030
+ }
3031
+
3032
+ if (go) {
3033
+ obj = new $.Tooltipster(this, args[0]);
3034
+
3035
+ // save the reference of the new instance
3036
+ if (!ns) ns = [];
3037
+ ns.push(obj.__namespace);
3038
+ $this.data('tooltipster-ns', ns);
3039
+
3040
+ // save the instance itself
3041
+ $this.data(obj.__namespace, obj);
3042
+
3043
+ // call our constructor custom function.
3044
+ // we do this here and not in ::init() because we wanted
3045
+ // the object to be saved in $this.data before triggering
3046
+ // it
3047
+ if (obj.__options.functionInit) {
3048
+ obj.__options.functionInit.call(obj, obj, {
3049
+ origin: this
3050
+ });
3051
+ }
3052
+
3053
+ // and now the event, for the plugins and core emitter
3054
+ obj._trigger('init');
3055
+ }
3056
+
3057
+ $.tooltipster.__instancesLatestArr.push(obj);
3058
+ });
3059
+
3060
+ return this;
3061
+ }
3062
+ }
3063
+ };
3064
+
3065
+ // Utilities
3066
+
3067
+ /**
3068
+ * A class to check if a tooltip can fit in given dimensions
3069
+ *
3070
+ * @param {object} $tooltip The jQuery wrapped tooltip element, or a clone of it
3071
+ */
3072
+ function Ruler($tooltip) {
3073
+
3074
+ // list of instance variables
3075
+
3076
+ this.$container;
3077
+ this.constraints = null;
3078
+ this.__$tooltip;
3079
+
3080
+ this.__init($tooltip);
3081
+ }
3082
+
3083
+ Ruler.prototype = {
3084
+
3085
+ /**
3086
+ * Move the tooltip into an invisible div that does not allow overflow to make
3087
+ * size tests. Note: the tooltip may or may not be attached to the DOM at the
3088
+ * moment this method is called, it does not matter.
3089
+ *
3090
+ * @param {object} $tooltip The object to test. May be just a clone of the
3091
+ * actual tooltip.
3092
+ * @private
3093
+ */
3094
+ __init: function($tooltip) {
3095
+
3096
+ this.__$tooltip = $tooltip;
3097
+
3098
+ this.__$tooltip
3099
+ .css({
3100
+ // for some reason we have to specify top and left 0
3101
+ left: 0,
3102
+ // any overflow will be ignored while measuring
3103
+ overflow: 'hidden',
3104
+ // positions at (0,0) without the div using 100% of the available width
3105
+ position: 'absolute',
3106
+ top: 0
3107
+ })
3108
+ // overflow must be auto during the test. We re-set this in case
3109
+ // it were modified by the user
3110
+ .find('.tooltipster-content')
3111
+ .css('overflow', 'auto');
3112
+
3113
+ this.$container = $('<div class="tooltipster-ruler"></div>')
3114
+ .append(this.__$tooltip)
3115
+ .appendTo(env.window.document.body);
3116
+ },
3117
+
3118
+ /**
3119
+ * Force the browser to redraw (re-render) the tooltip immediately. This is required
3120
+ * when you changed some CSS properties and need to make something with it
3121
+ * immediately, without waiting for the browser to redraw at the end of instructions.
3122
+ *
3123
+ * @see http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes
3124
+ * @private
3125
+ */
3126
+ __forceRedraw: function() {
3127
+
3128
+ // note: this would work but for Webkit only
3129
+ //this.__$tooltip.close();
3130
+ //this.__$tooltip[0].offsetHeight;
3131
+ //this.__$tooltip.open();
3132
+
3133
+ // works in FF too
3134
+ var $p = this.__$tooltip.parent();
3135
+ this.__$tooltip.detach();
3136
+ this.__$tooltip.appendTo($p);
3137
+ },
3138
+
3139
+ /**
3140
+ * Set maximum dimensions for the tooltip. A call to ::measure afterwards
3141
+ * will tell us if the content overflows or if it's ok
3142
+ *
3143
+ * @param {int} width
3144
+ * @param {int} height
3145
+ * @return {Ruler}
3146
+ * @public
3147
+ */
3148
+ constrain: function(width, height) {
3149
+
3150
+ this.constraints = {
3151
+ width: width,
3152
+ height: height
3153
+ };
3154
+
3155
+ this.__$tooltip.css({
3156
+ // we disable display:flex, otherwise the content would overflow without
3157
+ // creating horizontal scrolling (which we need to detect).
3158
+ display: 'block',
3159
+ // reset any previous height
3160
+ height: '',
3161
+ // we'll check if horizontal scrolling occurs
3162
+ overflow: 'auto',
3163
+ // we'll set the width and see what height is generated and if there
3164
+ // is horizontal overflow
3165
+ width: width
3166
+ });
3167
+
3168
+ return this;
3169
+ },
3170
+
3171
+ /**
3172
+ * Reset the tooltip content overflow and remove the test container
3173
+ *
3174
+ * @returns {Ruler}
3175
+ * @public
3176
+ */
3177
+ destroy: function() {
3178
+
3179
+ // in case the element was not a clone
3180
+ this.__$tooltip
3181
+ .detach()
3182
+ .find('.tooltipster-content')
3183
+ .css({
3184
+ // reset to CSS value
3185
+ display: '',
3186
+ overflow: ''
3187
+ });
3188
+
3189
+ this.$container.remove();
3190
+ },
3191
+
3192
+ /**
3193
+ * Removes any constraints
3194
+ *
3195
+ * @returns {Ruler}
3196
+ * @public
3197
+ */
3198
+ free: function() {
3199
+
3200
+ this.constraints = null;
3201
+
3202
+ // reset to natural size
3203
+ this.__$tooltip.css({
3204
+ display: '',
3205
+ height: '',
3206
+ overflow: 'visible',
3207
+ width: ''
3208
+ });
3209
+
3210
+ return this;
3211
+ },
3212
+
3213
+ /**
3214
+ * Returns the size of the tooltip. When constraints are applied, also returns
3215
+ * whether the tooltip fits in the provided dimensions.
3216
+ * The idea is to see if the new height is small enough and if the content does
3217
+ * not overflow horizontally.
3218
+ *
3219
+ * @param {int} width
3220
+ * @param {int} height
3221
+ * @returns {object} An object with a bool `fits` property and a `size` property
3222
+ * @public
3223
+ */
3224
+ measure: function() {
3225
+
3226
+ this.__forceRedraw();
3227
+
3228
+ var tooltipBcr = this.__$tooltip[0].getBoundingClientRect(),
3229
+ result = { size: {
3230
+ // bcr.width/height are not defined in IE8- but in this
3231
+ // case, bcr.right/bottom will have the same value
3232
+ // except in iOS 8+ where tooltipBcr.bottom/right are wrong
3233
+ // after scrolling for reasons yet to be determined.
3234
+ // tooltipBcr.top/left might not be 0, see issue #514
3235
+ height: tooltipBcr.height || (tooltipBcr.bottom - tooltipBcr.top),
3236
+ width: tooltipBcr.width || (tooltipBcr.right - tooltipBcr.left)
3237
+ }};
3238
+
3239
+ if (this.constraints) {
3240
+
3241
+ // note: we used to use offsetWidth instead of boundingRectClient but
3242
+ // it returned rounded values, causing issues with sub-pixel layouts.
3243
+
3244
+ // note2: noticed that the bcrWidth of text content of a div was once
3245
+ // greater than the bcrWidth of its container by 1px, causing the final
3246
+ // tooltip box to be too small for its content. However, evaluating
3247
+ // their widths one against the other (below) surprisingly returned
3248
+ // equality. Happened only once in Chrome 48, was not able to reproduce
3249
+ // => just having fun with float position values...
3250
+
3251
+ var $content = this.__$tooltip.find('.tooltipster-content'),
3252
+ height = this.__$tooltip.outerHeight(),
3253
+ contentBcr = $content[0].getBoundingClientRect(),
3254
+ fits = {
3255
+ height: height <= this.constraints.height,
3256
+ width: (
3257
+ // this condition accounts for min-width property that
3258
+ // may apply
3259
+ tooltipBcr.width <= this.constraints.width
3260
+ // the -1 is here because scrollWidth actually returns
3261
+ // a rounded value, and may be greater than bcr.width if
3262
+ // it was rounded up. This may cause an issue for contents
3263
+ // which actually really overflow by 1px or so, but that
3264
+ // should be rare. Not sure how to solve this efficiently.
3265
+ // See http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx
3266
+ && contentBcr.width >= $content[0].scrollWidth - 1
3267
+ )
3268
+ };
3269
+
3270
+ result.fits = fits.height && fits.width;
3271
+ }
3272
+
3273
+ // old versions of IE get the width wrong for some reason and it causes
3274
+ // the text to be broken to a new line, so we round it up. If the width
3275
+ // is the width of the screen though, we can assume it is accurate.
3276
+ if ( env.IE
3277
+ && env.IE <= 11
3278
+ && result.size.width !== env.window.document.documentElement.clientWidth
3279
+ ) {
3280
+ result.size.width = Math.ceil(result.size.width) + 1;
3281
+ }
3282
+
3283
+ return result;
3284
+ }
3285
+ };
3286
+
3287
+ // quick & dirty compare function, not bijective nor multidimensional
3288
+ function areEqual(a,b) {
3289
+ var same = true;
3290
+ $.each(a, function(i, _) {
3291
+ if (b[i] === undefined || a[i] !== b[i]) {
3292
+ same = false;
3293
+ return false;
3294
+ }
3295
+ });
3296
+ return same;
3297
+ }
3298
+
3299
+ /**
3300
+ * A fast function to check if an element is still in the DOM. It
3301
+ * tries to use an id as ids are indexed by the browser, or falls
3302
+ * back to jQuery's `contains` method. May fail if two elements
3303
+ * have the same id, but so be it
3304
+ *
3305
+ * @param {object} $obj A jQuery-wrapped HTML element
3306
+ * @return {boolean}
3307
+ */
3308
+ function bodyContains($obj) {
3309
+ var id = $obj.attr('id'),
3310
+ el = id ? env.window.document.getElementById(id) : null;
3311
+ // must also check that the element with the id is the one we want
3312
+ return el ? el === $obj[0] : $.contains(env.window.document.body, $obj[0]);
3313
+ }
3314
+
3315
+ // detect IE versions for dirty fixes
3316
+ var uA = navigator.userAgent.toLowerCase();
3317
+ if (uA.indexOf('msie') != -1) env.IE = parseInt(uA.split('msie')[1]);
3318
+ else if (uA.toLowerCase().indexOf('trident') !== -1 && uA.indexOf(' rv:11') !== -1) env.IE = 11;
3319
+ else if (uA.toLowerCase().indexOf('edge/') != -1) env.IE = parseInt(uA.toLowerCase().split('edge/')[1]);
3320
+
3321
+ // detecting support for CSS transitions
3322
+ function transitionSupport() {
3323
+
3324
+ // env.window is not defined yet when this is called
3325
+ if (!win) return false;
3326
+
3327
+ var b = win.document.body || win.document.documentElement,
3328
+ s = b.style,
3329
+ p = 'transition',
3330
+ v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];
3331
+
3332
+ if (typeof s[p] == 'string') { return true; }
3333
+
3334
+ p = p.charAt(0).toUpperCase() + p.substr(1);
3335
+ for (var i=0; i<v.length; i++) {
3336
+ if (typeof s[v[i] + p] == 'string') { return true; }
3337
+ }
3338
+ return false;
3339
+ }
3340
+
3341
+ // we'll return jQuery for plugins not to have to declare it as a dependency,
3342
+ // but it's done by a build task since it should be included only once at the
3343
+ // end when we concatenate the main file with a plugin
3344
+ // sideTip is Tooltipster's default plugin.
3345
+ // This file will be UMDified by a build task.
3346
+
3347
+ var pluginName = 'tooltipster.sideTip';
3348
+
3349
+ $.tooltipster._plugin({
3350
+ name: pluginName,
3351
+ instance: {
3352
+ /**
3353
+ * Defaults are provided as a function for an easy override by inheritance
3354
+ *
3355
+ * @return {object} An object with the defaults options
3356
+ * @private
3357
+ */
3358
+ __defaults: function() {
3359
+
3360
+ return {
3361
+ // if the tooltip should display an arrow that points to the origin
3362
+ arrow: true,
3363
+ // the distance in pixels between the tooltip and the origin
3364
+ distance: 6,
3365
+ // allows to easily change the position of the tooltip
3366
+ functionPosition: null,
3367
+ maxWidth: null,
3368
+ // used to accomodate the arrow of tooltip if there is one.
3369
+ // First to make sure that the arrow target is not too close
3370
+ // to the edge of the tooltip, so the arrow does not overflow
3371
+ // the tooltip. Secondly when we reposition the tooltip to
3372
+ // make sure that it's positioned in such a way that the arrow is
3373
+ // still pointing at the target (and not a few pixels beyond it).
3374
+ // It should be equal to or greater than half the width of
3375
+ // the arrow (by width we mean the size of the side which touches
3376
+ // the side of the tooltip).
3377
+ minIntersection: 16,
3378
+ minWidth: 0,
3379
+ // deprecated in 4.0.0. Listed for _optionsExtract to pick it up
3380
+ position: null,
3381
+ side: 'top',
3382
+ // set to false to position the tooltip relatively to the document rather
3383
+ // than the window when we open it
3384
+ viewportAware: true
3385
+ };
3386
+ },
3387
+
3388
+ /**
3389
+ * Run once: at instantiation of the plugin
3390
+ *
3391
+ * @param {object} instance The tooltipster object that instantiated this plugin
3392
+ * @private
3393
+ */
3394
+ __init: function(instance) {
3395
+
3396
+ var self = this;
3397
+
3398
+ // list of instance variables
3399
+
3400
+ self.__instance = instance;
3401
+ self.__namespace = 'tooltipster-sideTip-'+ Math.round(Math.random()*1000000);
3402
+ self.__previousState = 'closed';
3403
+ self.__options;
3404
+
3405
+ // initial formatting
3406
+ self.__optionsFormat();
3407
+
3408
+ self.__instance._on('state.'+ self.__namespace, function(event) {
3409
+
3410
+ if (event.state == 'closed') {
3411
+ self.__close();
3412
+ }
3413
+ else if (event.state == 'appearing' && self.__previousState == 'closed') {
3414
+ self.__create();
3415
+ }
3416
+
3417
+ self.__previousState = event.state;
3418
+ });
3419
+
3420
+ // reformat every time the options are changed
3421
+ self.__instance._on('options.'+ self.__namespace, function() {
3422
+ self.__optionsFormat();
3423
+ });
3424
+
3425
+ self.__instance._on('reposition.'+ self.__namespace, function(e) {
3426
+ self.__reposition(e.event, e.helper);
3427
+ });
3428
+ },
3429
+
3430
+ /**
3431
+ * Called when the tooltip has closed
3432
+ *
3433
+ * @private
3434
+ */
3435
+ __close: function() {
3436
+
3437
+ // detach our content object first, so the next jQuery's remove()
3438
+ // call does not unbind its event handlers
3439
+ if (this.__instance.content() instanceof $) {
3440
+ this.__instance.content().detach();
3441
+ }
3442
+
3443
+ // remove the tooltip from the DOM
3444
+ this.__instance._$tooltip.remove();
3445
+ this.__instance._$tooltip = null;
3446
+ },
3447
+
3448
+ /**
3449
+ * Creates the HTML element of the tooltip.
3450
+ *
3451
+ * @private
3452
+ */
3453
+ __create: function() {
3454
+
3455
+ // note: we wrap with a .tooltipster-box div to be able to set a margin on it
3456
+ // (.tooltipster-base must not have one)
3457
+ var $html = $(
3458
+ '<div class="tooltipster-base tooltipster-sidetip">' +
3459
+ '<div class="tooltipster-box">' +
3460
+ '<div class="tooltipster-content"></div>' +
3461
+ '</div>' +
3462
+ '<div class="tooltipster-arrow">' +
3463
+ '<div class="tooltipster-arrow-uncropped">' +
3464
+ '<div class="tooltipster-arrow-border"></div>' +
3465
+ '<div class="tooltipster-arrow-background"></div>' +
3466
+ '</div>' +
3467
+ '</div>' +
3468
+ '</div>'
3469
+ );
3470
+
3471
+ // hide arrow if asked
3472
+ if (!this.__options.arrow) {
3473
+ $html
3474
+ .find('.tooltipster-box')
3475
+ .css('margin', 0)
3476
+ .end()
3477
+ .find('.tooltipster-arrow')
3478
+ .hide();
3479
+ }
3480
+
3481
+ // apply min/max width if asked
3482
+ if (this.__options.minWidth) {
3483
+ $html.css('min-width', this.__options.minWidth + 'px');
3484
+ }
3485
+ if (this.__options.maxWidth) {
3486
+ $html.css('max-width', this.__options.maxWidth + 'px');
3487
+ }
3488
+
3489
+ this.__instance._$tooltip = $html;
3490
+
3491
+ // tell the instance that the tooltip element has been created
3492
+ this.__instance._trigger('created');
3493
+ },
3494
+
3495
+ /**
3496
+ * Used when the plugin is to be unplugged
3497
+ *
3498
+ * @private
3499
+ */
3500
+ __destroy: function() {
3501
+ this.__instance._off('.'+ self.__namespace);
3502
+ },
3503
+
3504
+ /**
3505
+ * (Re)compute this.__options from the options declared to the instance
3506
+ *
3507
+ * @private
3508
+ */
3509
+ __optionsFormat: function() {
3510
+
3511
+ var self = this;
3512
+
3513
+ // get the options
3514
+ self.__options = self.__instance._optionsExtract(pluginName, self.__defaults());
3515
+
3516
+ // for backward compatibility, deprecated in v4.0.0
3517
+ if (self.__options.position) {
3518
+ self.__options.side = self.__options.position;
3519
+ }
3520
+
3521
+ // options formatting
3522
+
3523
+ // format distance as a four-cell array if it ain't one yet and then make
3524
+ // it an object with top/bottom/left/right properties
3525
+ if (typeof self.__options.distance != 'object') {
3526
+ self.__options.distance = [self.__options.distance];
3527
+ }
3528
+ if (self.__options.distance.length < 4) {
3529
+
3530
+ if (self.__options.distance[1] === undefined) self.__options.distance[1] = self.__options.distance[0];
3531
+ if (self.__options.distance[2] === undefined) self.__options.distance[2] = self.__options.distance[0];
3532
+ if (self.__options.distance[3] === undefined) self.__options.distance[3] = self.__options.distance[1];
3533
+
3534
+ self.__options.distance = {
3535
+ top: self.__options.distance[0],
3536
+ right: self.__options.distance[1],
3537
+ bottom: self.__options.distance[2],
3538
+ left: self.__options.distance[3]
3539
+ };
3540
+ }
3541
+
3542
+ // let's transform:
3543
+ // 'top' into ['top', 'bottom', 'right', 'left']
3544
+ // 'right' into ['right', 'left', 'top', 'bottom']
3545
+ // 'bottom' into ['bottom', 'top', 'right', 'left']
3546
+ // 'left' into ['left', 'right', 'top', 'bottom']
3547
+ if (typeof self.__options.side == 'string') {
3548
+
3549
+ var opposites = {
3550
+ 'top': 'bottom',
3551
+ 'right': 'left',
3552
+ 'bottom': 'top',
3553
+ 'left': 'right'
3554
+ };
3555
+
3556
+ self.__options.side = [self.__options.side, opposites[self.__options.side]];
3557
+
3558
+ if (self.__options.side[0] == 'left' || self.__options.side[0] == 'right') {
3559
+ self.__options.side.push('top', 'bottom');
3560
+ }
3561
+ else {
3562
+ self.__options.side.push('right', 'left');
3563
+ }
3564
+ }
3565
+
3566
+ // misc
3567
+ // disable the arrow in IE6 unless the arrow option was explicitly set to true
3568
+ if ( $.tooltipster._env.IE === 6
3569
+ && self.__options.arrow !== true
3570
+ ) {
3571
+ self.__options.arrow = false;
3572
+ }
3573
+ },
3574
+
3575
+ /**
3576
+ * This method must compute and set the positioning properties of the
3577
+ * tooltip (left, top, width, height, etc.). It must also make sure the
3578
+ * tooltip is eventually appended to its parent (since the element may be
3579
+ * detached from the DOM at the moment the method is called).
3580
+ *
3581
+ * We'll evaluate positioning scenarios to find which side can contain the
3582
+ * tooltip in the best way. We'll consider things relatively to the window
3583
+ * (unless the user asks not to), then to the document (if need be, or if the
3584
+ * user explicitly requires the tests to run on the document). For each
3585
+ * scenario, measures are taken, allowing us to know how well the tooltip
3586
+ * is going to fit. After that, a sorting function will let us know what
3587
+ * the best scenario is (we also allow the user to choose his favorite
3588
+ * scenario by using an event).
3589
+ *
3590
+ * @param {object} helper An object that contains variables that plugin
3591
+ * creators may find useful (see below)
3592
+ * @param {object} helper.geo An object with many layout properties
3593
+ * about objects of interest (window, document, origin). This should help
3594
+ * plugin users compute the optimal position of the tooltip
3595
+ * @private
3596
+ */
3597
+ __reposition: function(event, helper) {
3598
+
3599
+ var self = this,
3600
+ finalResult,
3601
+ // to know where to put the tooltip, we need to know on which point
3602
+ // of the x or y axis we should center it. That coordinate is the target
3603
+ targets = self.__targetFind(helper),
3604
+ testResults = [];
3605
+
3606
+ // make sure the tooltip is detached while we make tests on a clone
3607
+ self.__instance._$tooltip.detach();
3608
+
3609
+ // we could actually provide the original element to the Ruler and
3610
+ // not a clone, but it just feels right to keep it out of the
3611
+ // machinery.
3612
+ var $clone = self.__instance._$tooltip.clone(),
3613
+ // start position tests session
3614
+ ruler = $.tooltipster._getRuler($clone),
3615
+ satisfied = false,
3616
+ animation = self.__instance.option('animation');
3617
+
3618
+ // an animation class could contain properties that distort the size
3619
+ if (animation) {
3620
+ $clone.removeClass('tooltipster-'+ animation);
3621
+ }
3622
+
3623
+ // start evaluating scenarios
3624
+ $.each(['window', 'document'], function(i, container) {
3625
+
3626
+ var takeTest = null;
3627
+
3628
+ // let the user decide to keep on testing or not
3629
+ self.__instance._trigger({
3630
+ container: container,
3631
+ helper: helper,
3632
+ satisfied: satisfied,
3633
+ takeTest: function(bool) {
3634
+ takeTest = bool;
3635
+ },
3636
+ results: testResults,
3637
+ type: 'positionTest'
3638
+ });
3639
+
3640
+ if ( takeTest == true
3641
+ || ( takeTest != false
3642
+ && satisfied == false
3643
+ // skip the window scenarios if asked. If they are reintegrated by
3644
+ // the callback of the positionTest event, they will have to be
3645
+ // excluded using the callback of positionTested
3646
+ && (container != 'window' || self.__options.viewportAware)
3647
+ )
3648
+ ) {
3649
+
3650
+ // for each allowed side
3651
+ for (var i=0; i < self.__options.side.length; i++) {
3652
+
3653
+ var distance = {
3654
+ horizontal: 0,
3655
+ vertical: 0
3656
+ },
3657
+ side = self.__options.side[i];
3658
+
3659
+ if (side == 'top' || side == 'bottom') {
3660
+ distance.vertical = self.__options.distance[side];
3661
+ }
3662
+ else {
3663
+ distance.horizontal = self.__options.distance[side];
3664
+ }
3665
+
3666
+ // this may have an effect on the size of the tooltip if there are css
3667
+ // rules for the arrow or something else
3668
+ self.__sideChange($clone, side);
3669
+
3670
+ $.each(['natural', 'constrained'], function(i, mode) {
3671
+
3672
+ takeTest = null;
3673
+
3674
+ // emit an event on the instance
3675
+ self.__instance._trigger({
3676
+ container: container,
3677
+ event: event,
3678
+ helper: helper,
3679
+ mode: mode,
3680
+ results: testResults,
3681
+ satisfied: satisfied,
3682
+ side: side,
3683
+ takeTest: function(bool) {
3684
+ takeTest = bool;
3685
+ },
3686
+ type: 'positionTest'
3687
+ });
3688
+
3689
+ if ( takeTest == true
3690
+ || ( takeTest != false
3691
+ && satisfied == false
3692
+ )
3693
+ ) {
3694
+
3695
+ var testResult = {
3696
+ container: container,
3697
+ // we let the distance as an object here, it can make things a little easier
3698
+ // during the user's calculations at positionTest/positionTested
3699
+ distance: distance,
3700
+ // whether the tooltip can fit in the size of the viewport (does not mean
3701
+ // that we'll be able to make it initially entirely visible, see 'whole')
3702
+ fits: null,
3703
+ mode: mode,
3704
+ outerSize: null,
3705
+ side: side,
3706
+ size: null,
3707
+ target: targets[side],
3708
+ // check if the origin has enough surface on screen for the tooltip to
3709
+ // aim at it without overflowing the viewport (this is due to the thickness
3710
+ // of the arrow represented by the minIntersection length).
3711
+ // If not, the tooltip will have to be partly or entirely off screen in
3712
+ // order to stay docked to the origin. This value will stay null when the
3713
+ // container is the document, as it is not relevant
3714
+ whole: null
3715
+ };
3716
+
3717
+ // get the size of the tooltip with or without size constraints
3718
+ var rulerConfigured = (mode == 'natural') ?
3719
+ ruler.free() :
3720
+ ruler.constrain(
3721
+ helper.geo.available[container][side].width - distance.horizontal,
3722
+ helper.geo.available[container][side].height - distance.vertical
3723
+ ),
3724
+ rulerResults = rulerConfigured.measure();
3725
+
3726
+ testResult.size = rulerResults.size;
3727
+ testResult.outerSize = {
3728
+ height: rulerResults.size.height + distance.vertical,
3729
+ width: rulerResults.size.width + distance.horizontal
3730
+ };
3731
+
3732
+ if (mode == 'natural') {
3733
+
3734
+ if( helper.geo.available[container][side].width >= testResult.outerSize.width
3735
+ && helper.geo.available[container][side].height >= testResult.outerSize.height
3736
+ ) {
3737
+ testResult.fits = true;
3738
+ }
3739
+ else {
3740
+ testResult.fits = false;
3741
+ }
3742
+ }
3743
+ else {
3744
+ testResult.fits = rulerResults.fits;
3745
+ }
3746
+
3747
+ if (container == 'window') {
3748
+
3749
+ if (!testResult.fits) {
3750
+ testResult.whole = false;
3751
+ }
3752
+ else {
3753
+ if (side == 'top' || side == 'bottom') {
3754
+
3755
+ testResult.whole = (
3756
+ helper.geo.origin.windowOffset.right >= self.__options.minIntersection
3757
+ && helper.geo.window.size.width - helper.geo.origin.windowOffset.left >= self.__options.minIntersection
3758
+ );
3759
+ }
3760
+ else {
3761
+ testResult.whole = (
3762
+ helper.geo.origin.windowOffset.bottom >= self.__options.minIntersection
3763
+ && helper.geo.window.size.height - helper.geo.origin.windowOffset.top >= self.__options.minIntersection
3764
+ );
3765
+ }
3766
+ }
3767
+ }
3768
+
3769
+ testResults.push(testResult);
3770
+
3771
+ // we don't need to compute more positions if we have one fully on screen
3772
+ if (testResult.whole) {
3773
+ satisfied = true;
3774
+ }
3775
+ else {
3776
+ // don't run the constrained test unless the natural width was greater
3777
+ // than the available width, otherwise it's pointless as we know it
3778
+ // wouldn't fit either
3779
+ if ( testResult.mode == 'natural'
3780
+ && ( testResult.fits
3781
+ || testResult.size.width <= helper.geo.available[container][side].width
3782
+ )
3783
+ ) {
3784
+ return false;
3785
+ }
3786
+ }
3787
+ }
3788
+ });
3789
+ }
3790
+ }
3791
+ });
3792
+
3793
+ // the user may eliminate the unwanted scenarios from testResults, but he's
3794
+ // not supposed to alter them at this point. functionPosition and the
3795
+ // position event serve that purpose.
3796
+ self.__instance._trigger({
3797
+ edit: function(r) {
3798
+ testResults = r;
3799
+ },
3800
+ event: event,
3801
+ helper: helper,
3802
+ results: testResults,
3803
+ type: 'positionTested'
3804
+ });
3805
+
3806
+ /**
3807
+ * Sort the scenarios to find the favorite one.
3808
+ *
3809
+ * The favorite scenario is when we can fully display the tooltip on screen,
3810
+ * even if it means that the middle of the tooltip is no longer centered on
3811
+ * the middle of the origin (when the origin is near the edge of the screen
3812
+ * or even partly off screen). We want the tooltip on the preferred side,
3813
+ * even if it means that we have to use a constrained size rather than a
3814
+ * natural one (as long as it fits). When the origin is off screen at the top
3815
+ * the tooltip will be positioned at the bottom (if allowed), if the origin
3816
+ * is off screen on the right, it will be positioned on the left, etc.
3817
+ * If there are no scenarios where the tooltip can fit on screen, or if the
3818
+ * user does not want the tooltip to fit on screen (viewportAware == false),
3819
+ * we fall back to the scenarios relative to the document.
3820
+ *
3821
+ * When the tooltip is bigger than the viewport in either dimension, we stop
3822
+ * looking at the window scenarios and consider the document scenarios only,
3823
+ * with the same logic to find on which side it would fit best.
3824
+ *
3825
+ * If the tooltip cannot fit the document on any side, we force it at the
3826
+ * bottom, so at least the user can scroll to see it.
3827
+ */
3828
+ testResults.sort(function(a, b) {
3829
+
3830
+ // best if it's whole (the tooltip fits and adapts to the viewport)
3831
+ if (a.whole && !b.whole) {
3832
+ return -1;
3833
+ }
3834
+ else if (!a.whole && b.whole) {
3835
+ return 1;
3836
+ }
3837
+ else if (a.whole && b.whole) {
3838
+
3839
+ var ai = self.__options.side.indexOf(a.side),
3840
+ bi = self.__options.side.indexOf(b.side);
3841
+
3842
+ // use the user's sides fallback array
3843
+ if (ai < bi) {
3844
+ return -1;
3845
+ }
3846
+ else if (ai > bi) {
3847
+ return 1;
3848
+ }
3849
+ else {
3850
+ // will be used if the user forced the tests to continue
3851
+ return a.mode == 'natural' ? -1 : 1;
3852
+ }
3853
+ }
3854
+ else {
3855
+
3856
+ // better if it fits
3857
+ if (a.fits && !b.fits) {
3858
+ return -1;
3859
+ }
3860
+ else if (!a.fits && b.fits) {
3861
+ return 1;
3862
+ }
3863
+ else if (a.fits && b.fits) {
3864
+
3865
+ var ai = self.__options.side.indexOf(a.side),
3866
+ bi = self.__options.side.indexOf(b.side);
3867
+
3868
+ // use the user's sides fallback array
3869
+ if (ai < bi) {
3870
+ return -1;
3871
+ }
3872
+ else if (ai > bi) {
3873
+ return 1;
3874
+ }
3875
+ else {
3876
+ // will be used if the user forced the tests to continue
3877
+ return a.mode == 'natural' ? -1 : 1;
3878
+ }
3879
+ }
3880
+ else {
3881
+
3882
+ // if everything failed, this will give a preference to the case where
3883
+ // the tooltip overflows the document at the bottom
3884
+ if ( a.container == 'document'
3885
+ && a.side == 'bottom'
3886
+ && a.mode == 'natural'
3887
+ ) {
3888
+ return -1;
3889
+ }
3890
+ else {
3891
+ return 1;
3892
+ }
3893
+ }
3894
+ }
3895
+ });
3896
+
3897
+ finalResult = testResults[0];
3898
+
3899
+
3900
+ // now let's find the coordinates of the tooltip relatively to the window
3901
+ finalResult.coord = {};
3902
+
3903
+ switch (finalResult.side) {
3904
+
3905
+ case 'left':
3906
+ case 'right':
3907
+ finalResult.coord.top = Math.floor(finalResult.target - finalResult.size.height / 2);
3908
+ break;
3909
+
3910
+ case 'bottom':
3911
+ case 'top':
3912
+ finalResult.coord.left = Math.floor(finalResult.target - finalResult.size.width / 2);
3913
+ break;
3914
+ }
3915
+
3916
+ switch (finalResult.side) {
3917
+
3918
+ case 'left':
3919
+ finalResult.coord.left = helper.geo.origin.windowOffset.left - finalResult.outerSize.width;
3920
+ break;
3921
+
3922
+ case 'right':
3923
+ finalResult.coord.left = helper.geo.origin.windowOffset.right + finalResult.distance.horizontal;
3924
+ break;
3925
+
3926
+ case 'top':
3927
+ finalResult.coord.top = helper.geo.origin.windowOffset.top - finalResult.outerSize.height;
3928
+ break;
3929
+
3930
+ case 'bottom':
3931
+ finalResult.coord.top = helper.geo.origin.windowOffset.bottom + finalResult.distance.vertical;
3932
+ break;
3933
+ }
3934
+
3935
+ // if the tooltip can potentially be contained within the viewport dimensions
3936
+ // and that we are asked to make it fit on screen
3937
+ if (finalResult.container == 'window') {
3938
+
3939
+ // if the tooltip overflows the viewport, we'll move it accordingly (then it will
3940
+ // not be centered on the middle of the origin anymore). We only move horizontally
3941
+ // for top and bottom tooltips and vice versa.
3942
+ if (finalResult.side == 'top' || finalResult.side == 'bottom') {
3943
+
3944
+ // if there is an overflow on the left
3945
+ if (finalResult.coord.left < 0) {
3946
+
3947
+ // prevent the overflow unless the origin itself gets off screen (minus the
3948
+ // margin needed to keep the arrow pointing at the target)
3949
+ if (helper.geo.origin.windowOffset.right - this.__options.minIntersection >= 0) {
3950
+ finalResult.coord.left = 0;
3951
+ }
3952
+ else {
3953
+ finalResult.coord.left = helper.geo.origin.windowOffset.right - this.__options.minIntersection - 1;
3954
+ }
3955
+ }
3956
+ // or an overflow on the right
3957
+ else if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {
3958
+
3959
+ if (helper.geo.origin.windowOffset.left + this.__options.minIntersection <= helper.geo.window.size.width) {
3960
+ finalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;
3961
+ }
3962
+ else {
3963
+ finalResult.coord.left = helper.geo.origin.windowOffset.left + this.__options.minIntersection + 1 - finalResult.size.width;
3964
+ }
3965
+ }
3966
+ }
3967
+ else {
3968
+
3969
+ // overflow at the top
3970
+ if (finalResult.coord.top < 0) {
3971
+
3972
+ if (helper.geo.origin.windowOffset.bottom - this.__options.minIntersection >= 0) {
3973
+ finalResult.coord.top = 0;
3974
+ }
3975
+ else {
3976
+ finalResult.coord.top = helper.geo.origin.windowOffset.bottom - this.__options.minIntersection - 1;
3977
+ }
3978
+ }
3979
+ // or at the bottom
3980
+ else if (finalResult.coord.top > helper.geo.window.size.height - finalResult.size.height) {
3981
+
3982
+ if (helper.geo.origin.windowOffset.top + this.__options.minIntersection <= helper.geo.window.size.height) {
3983
+ finalResult.coord.top = helper.geo.window.size.height - finalResult.size.height;
3984
+ }
3985
+ else {
3986
+ finalResult.coord.top = helper.geo.origin.windowOffset.top + this.__options.minIntersection + 1 - finalResult.size.height;
3987
+ }
3988
+ }
3989
+ }
3990
+ }
3991
+ else {
3992
+
3993
+ // there might be overflow here too but it's easier to handle. If there has
3994
+ // to be an overflow, we'll make sure it's on the right side of the screen
3995
+ // (because the browser will extend the document size if there is an overflow
3996
+ // on the right, but not on the left). The sort function above has already
3997
+ // made sure that a bottom document overflow is preferred to a top overflow,
3998
+ // so we don't have to care about it.
3999
+
4000
+ // if there is an overflow on the right
4001
+ if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {
4002
+
4003
+ // this may actually create on overflow on the left but we'll fix it in a sec
4004
+ finalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;
4005
+ }
4006
+
4007
+ // if there is an overflow on the left
4008
+ if (finalResult.coord.left < 0) {
4009
+
4010
+ // don't care if it overflows the right after that, we made our best
4011
+ finalResult.coord.left = 0;
4012
+ }
4013
+ }
4014
+
4015
+
4016
+ // submit the positioning proposal to the user function which may choose to change
4017
+ // the side, size and/or the coordinates
4018
+
4019
+ // first, set the rules that corresponds to the proposed side: it may change
4020
+ // the size of the tooltip, and the custom functionPosition may want to detect the
4021
+ // size of something before making a decision. So let's make things easier for the
4022
+ // implementor
4023
+ self.__sideChange($clone, finalResult.side);
4024
+
4025
+ // add some variables to the helper
4026
+ helper.tooltipClone = $clone[0];
4027
+ helper.tooltipParent = self.__instance.option('parent').parent[0];
4028
+ // move informative values to the helper
4029
+ helper.mode = finalResult.mode;
4030
+ helper.whole = finalResult.whole;
4031
+ // add some variables to the helper for the functionPosition callback (these
4032
+ // will also be added to the event fired by self.__instance._trigger but that's
4033
+ // ok, we're just being consistent)
4034
+ helper.origin = self.__instance._$origin[0];
4035
+ helper.tooltip = self.__instance._$tooltip[0];
4036
+
4037
+ // leave only the actionable values in there for functionPosition
4038
+ delete finalResult.container;
4039
+ delete finalResult.fits;
4040
+ delete finalResult.mode;
4041
+ delete finalResult.outerSize;
4042
+ delete finalResult.whole;
4043
+
4044
+ // keep only the distance on the relevant side, for clarity
4045
+ finalResult.distance = finalResult.distance.horizontal || finalResult.distance.vertical;
4046
+
4047
+ // beginners may not be comfortable with the concept of editing the object
4048
+ // passed by reference, so we provide an edit function and pass a clone
4049
+ var finalResultClone = $.extend(true, {}, finalResult);
4050
+
4051
+ // emit an event on the instance
4052
+ self.__instance._trigger({
4053
+ edit: function(result) {
4054
+ finalResult = result;
4055
+ },
4056
+ event: event,
4057
+ helper: helper,
4058
+ position: finalResultClone,
4059
+ type: 'position'
4060
+ });
4061
+
4062
+ if (self.__options.functionPosition) {
4063
+
4064
+ var result = self.__options.functionPosition.call(self, self.__instance, helper, finalResultClone);
4065
+
4066
+ if (result) finalResult = result;
4067
+ }
4068
+
4069
+ // end the positioning tests session (the user might have had a
4070
+ // use for it during the position event, now it's over)
4071
+ ruler.destroy();
4072
+
4073
+ // compute the position of the target relatively to the tooltip root
4074
+ // element so we can place the arrow and make the needed adjustments
4075
+ var arrowCoord,
4076
+ maxVal;
4077
+
4078
+ if (finalResult.side == 'top' || finalResult.side == 'bottom') {
4079
+
4080
+ arrowCoord = {
4081
+ prop: 'left',
4082
+ val: finalResult.target - finalResult.coord.left
4083
+ };
4084
+ maxVal = finalResult.size.width - this.__options.minIntersection;
4085
+ }
4086
+ else {
4087
+
4088
+ arrowCoord = {
4089
+ prop: 'top',
4090
+ val: finalResult.target - finalResult.coord.top
4091
+ };
4092
+ maxVal = finalResult.size.height - this.__options.minIntersection;
4093
+ }
4094
+
4095
+ // cannot lie beyond the boundaries of the tooltip, minus the
4096
+ // arrow margin
4097
+ if (arrowCoord.val < this.__options.minIntersection) {
4098
+ arrowCoord.val = this.__options.minIntersection;
4099
+ }
4100
+ else if (arrowCoord.val > maxVal) {
4101
+ arrowCoord.val = maxVal;
4102
+ }
4103
+
4104
+ var originParentOffset;
4105
+
4106
+ // let's convert the window-relative coordinates into coordinates relative to the
4107
+ // future positioned parent that the tooltip will be appended to
4108
+ if (helper.geo.origin.fixedLineage) {
4109
+
4110
+ // same as windowOffset when the position is fixed
4111
+ originParentOffset = helper.geo.origin.windowOffset;
4112
+ }
4113
+ else {
4114
+
4115
+ // this assumes that the parent of the tooltip is located at
4116
+ // (0, 0) in the document, typically like when the parent is
4117
+ // <body>.
4118
+ // If we ever allow other types of parent, .tooltipster-ruler
4119
+ // will have to be appended to the parent to inherit css style
4120
+ // values that affect the display of the text and such.
4121
+ originParentOffset = {
4122
+ left: helper.geo.origin.windowOffset.left + helper.geo.window.scroll.left,
4123
+ top: helper.geo.origin.windowOffset.top + helper.geo.window.scroll.top
4124
+ };
4125
+ }
4126
+
4127
+ finalResult.coord = {
4128
+ left: originParentOffset.left + (finalResult.coord.left - helper.geo.origin.windowOffset.left),
4129
+ top: originParentOffset.top + (finalResult.coord.top - helper.geo.origin.windowOffset.top)
4130
+ };
4131
+
4132
+ // set position values on the original tooltip element
4133
+
4134
+ self.__sideChange(self.__instance._$tooltip, finalResult.side);
4135
+
4136
+ if (helper.geo.origin.fixedLineage) {
4137
+ self.__instance._$tooltip
4138
+ .css('position', 'fixed');
4139
+ }
4140
+ else {
4141
+ // CSS default
4142
+ self.__instance._$tooltip
4143
+ .css('position', '');
4144
+ }
4145
+
4146
+ self.__instance._$tooltip
4147
+ .css({
4148
+ left: finalResult.coord.left,
4149
+ top: finalResult.coord.top,
4150
+ // we need to set a size even if the tooltip is in its natural size
4151
+ // because when the tooltip is positioned beyond the width of the body
4152
+ // (which is by default the width of the window; it will happen when
4153
+ // you scroll the window horizontally to get to the origin), its text
4154
+ // content will otherwise break lines at each word to keep up with the
4155
+ // body overflow strategy.
4156
+ height: finalResult.size.height,
4157
+ width: finalResult.size.width
4158
+ })
4159
+ .find('.tooltipster-arrow')
4160
+ .css({
4161
+ 'left': '',
4162
+ 'top': ''
4163
+ })
4164
+ .css(arrowCoord.prop, arrowCoord.val);
4165
+
4166
+ // append the tooltip HTML element to its parent
4167
+ self.__instance._$tooltip.appendTo(self.__instance.option('parent'));
4168
+
4169
+ self.__instance._trigger({
4170
+ type: 'repositioned',
4171
+ event: event,
4172
+ position: finalResult
4173
+ });
4174
+ },
4175
+
4176
+ /**
4177
+ * Make whatever modifications are needed when the side is changed. This has
4178
+ * been made an independant method for easy inheritance in custom plugins based
4179
+ * on this default plugin.
4180
+ *
4181
+ * @param {object} $obj
4182
+ * @param {string} side
4183
+ * @private
4184
+ */
4185
+ __sideChange: function($obj, side) {
4186
+
4187
+ $obj
4188
+ .removeClass('tooltipster-bottom')
4189
+ .removeClass('tooltipster-left')
4190
+ .removeClass('tooltipster-right')
4191
+ .removeClass('tooltipster-top')
4192
+ .addClass('tooltipster-'+ side);
4193
+ },
4194
+
4195
+ /**
4196
+ * Returns the target that the tooltip should aim at for a given side.
4197
+ * The calculated value is a distance from the edge of the window
4198
+ * (left edge for top/bottom sides, top edge for left/right side). The
4199
+ * tooltip will be centered on that position and the arrow will be
4200
+ * positioned there (as much as possible).
4201
+ *
4202
+ * @param {object} helper
4203
+ * @return {integer}
4204
+ * @private
4205
+ */
4206
+ __targetFind: function(helper) {
4207
+
4208
+ var target = {},
4209
+ rects = this.__instance._$origin[0].getClientRects();
4210
+
4211
+ // these lines fix a Chrome bug (issue #491)
4212
+ if (rects.length > 1) {
4213
+ var opacity = this.__instance._$origin.css('opacity');
4214
+ if(opacity == 1) {
4215
+ this.__instance._$origin.css('opacity', 0.99);
4216
+ rects = this.__instance._$origin[0].getClientRects();
4217
+ this.__instance._$origin.css('opacity', 1);
4218
+ }
4219
+ }
4220
+
4221
+ // by default, the target will be the middle of the origin
4222
+ if (rects.length < 2) {
4223
+
4224
+ target.top = Math.floor(helper.geo.origin.windowOffset.left + (helper.geo.origin.size.width / 2));
4225
+ target.bottom = target.top;
4226
+
4227
+ target.left = Math.floor(helper.geo.origin.windowOffset.top + (helper.geo.origin.size.height / 2));
4228
+ target.right = target.left;
4229
+ }
4230
+ // if multiple client rects exist, the element may be text split
4231
+ // up into multiple lines and the middle of the origin may not be
4232
+ // best option anymore. We need to choose the best target client rect
4233
+ else {
4234
+
4235
+ // top: the first
4236
+ var targetRect = rects[0];
4237
+ target.top = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
4238
+
4239
+ // right: the middle line, rounded down in case there is an even
4240
+ // number of lines (looks more centered => check out the
4241
+ // demo with 4 split lines)
4242
+ if (rects.length > 2) {
4243
+ targetRect = rects[Math.ceil(rects.length / 2) - 1];
4244
+ }
4245
+ else {
4246
+ targetRect = rects[0];
4247
+ }
4248
+ target.right = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
4249
+
4250
+ // bottom: the last
4251
+ targetRect = rects[rects.length - 1];
4252
+ target.bottom = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
4253
+
4254
+ // left: the middle line, rounded up
4255
+ if (rects.length > 2) {
4256
+ targetRect = rects[Math.ceil((rects.length + 1) / 2) - 1];
4257
+ }
4258
+ else {
4259
+ targetRect = rects[rects.length - 1];
4260
+ }
4261
+
4262
+ target.left = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
4263
+ }
4264
+
4265
+ return target;
4266
+ }
4267
+ }
4268
+ });
4269
+
4270
+ /* a build task will add "return $;" here */
4271
+ return $;
4272
+
4273
+ }));
common/vendor/tooltipster/tooltipster.bundle.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .tooltipster-fall,.tooltipster-grow.tooltipster-show{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-o-transform:rotateZ(0);-ms-transform:rotateZ(0);transform:rotateZ(0);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,1);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-moz-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-ms-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-o-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);transition-timing-function:cubic-bezier(.23,.635,.495,2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-fall.tooltipster-initial{top:0!important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0!important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-slide.tooltipster-initial{left:-40px!important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0!important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading .4s}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating .6s}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling .6s}.tooltipster-sidetip .tooltipster-box{background:#565656;border:2px solid #000;border-radius:4px}.tooltipster-sidetip.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip .tooltipster-content{color:#fff;line-height:18px;padding:6px 14px}.tooltipster-sidetip .tooltipster-arrow{overflow:hidden;position:absolute}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow{height:10px;margin-left:-10px;top:0;width:20px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow{height:20px;margin-top:-10px;right:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow{height:20px;margin-top:-10px;left:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow{bottom:0;height:10px;margin-left:-10px;width:20px}.tooltipster-sidetip .tooltipster-arrow-background,.tooltipster-sidetip .tooltipster-arrow-border{height:0;position:absolute;width:0}.tooltipster-sidetip .tooltipster-arrow-background{border:10px solid transparent}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#565656;left:0;top:3px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background{border-left-color:#565656;left:-3px;top:0}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background{border-right-color:#565656;left:3px;top:0}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background{border-top-color:#565656;left:0;top:-3px}.tooltipster-sidetip .tooltipster-arrow-border{border:10px solid transparent;left:0;top:0}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#000}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border{border-left-color:#000}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border{border-right-color:#000}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border{border-top-color:#000}.tooltipster-sidetip .tooltipster-arrow-uncropped{position:relative}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped{top:-10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped{left:-10px}
common/vendor/tooltipster/tooltipster.bundle.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /*! tooltipster v4.2.6 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}var f={animation:"fade",animationDuration:350,content:null,contentAsHTML:!1,contentCloning:!1,debug:!0,delay:300,delayTouch:[300,500],functionInit:null,functionBefore:null,functionReady:null,functionAfter:null,functionFormat:null,IEmin:6,interactive:!1,multiple:!1,parent:null,plugins:["sideTip"],repositionOnScroll:!1,restoration:"none",selfDestruction:!0,theme:[],timer:0,trackerInterval:500,trackOrigin:!1,trackTooltip:!1,trigger:"hover",triggerClose:{click:!1,mouseleave:!1,originClick:!1,scroll:!1,tap:!1,touchleave:!1},triggerOpen:{click:!1,mouseenter:!1,tap:!1,touchstart:!1},updateAnimation:"rotate",zIndex:9999999},g="undefined"!=typeof window?window:null,h={hasTouchCapability:!(!g||!("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch||g.navigator.maxTouchPoints)),hasTransitions:e(),IE:!1,semVer:"4.2.6",window:g},i=function(){this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__instancesLatestArr=[],this.__plugins={},this._env=h};i.prototype={__bridge:function(b,c,d){if(!c[d]){var e=function(){};e.prototype=b;var g=new e;g.__init&&g.__init(c),a.each(b,function(a,b){0!=a.indexOf("__")&&(c[a]?f.debug&&console.log("The "+a+" method of the "+d+" plugin conflicts with another plugin or native methods"):(c[a]=function(){return g[a].apply(g,Array.prototype.slice.apply(arguments))},c[a].bridged=g))}),c[d]=g}return this},__setWindow:function(a){return h.window=a,this},_getRuler:function(a){return new b(a)},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_plugin:function(b){var c=this;if("string"==typeof b){var d=b,e=null;return d.indexOf(".")>0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;B<m.length;B++){var C=m[B];"even"==A?(C>y&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.left<i.left||e.origin.windowOffset.right>i.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.top<i.top||e.origin.windowOffset.bottom>i.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("<div></div>").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('<div class="tooltipster-ruler"></div>').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]));var k="tooltipster.sideTip";return a.tooltipster._plugin({name:k,instance:{__defaults:function(){return{arrow:!0,distance:6,functionPosition:null,maxWidth:null,minIntersection:16,minWidth:0,position:null,side:"top",viewportAware:!0}},__init:function(a){var b=this;b.__instance=a,b.__namespace="tooltipster-sideTip-"+Math.round(1e6*Math.random()),b.__previousState="closed",b.__options,b.__optionsFormat(),b.__instance._on("state."+b.__namespace,function(a){"closed"==a.state?b.__close():"appearing"==a.state&&"closed"==b.__previousState&&b.__create(),b.__previousState=a.state}),b.__instance._on("options."+b.__namespace,function(){b.__optionsFormat()}),b.__instance._on("reposition."+b.__namespace,function(a){b.__reposition(a.event,a.helper)})},__close:function(){this.__instance.content()instanceof a&&this.__instance.content().detach(),this.__instance._$tooltip.remove(),this.__instance._$tooltip=null},__create:function(){var b=a('<div class="tooltipster-base tooltipster-sidetip"><div class="tooltipster-box"><div class="tooltipster-content"></div></div><div class="tooltipster-arrow"><div class="tooltipster-arrow-uncropped"><div class="tooltipster-arrow-border"></div><div class="tooltipster-arrow-background"></div></div></div></div>');this.__options.arrow||b.find(".tooltipster-box").css("margin",0).end().find(".tooltipster-arrow").hide(),this.__options.minWidth&&b.css("min-width",this.__options.minWidth+"px"),this.__options.maxWidth&&b.css("max-width",this.__options.maxWidth+"px"),
2
+ this.__instance._$tooltip=b,this.__instance._trigger("created")},__destroy:function(){this.__instance._off("."+self.__namespace)},__optionsFormat:function(){var b=this;if(b.__options=b.__instance._optionsExtract(k,b.__defaults()),b.__options.position&&(b.__options.side=b.__options.position),"object"!=typeof b.__options.distance&&(b.__options.distance=[b.__options.distance]),b.__options.distance.length<4&&(void 0===b.__options.distance[1]&&(b.__options.distance[1]=b.__options.distance[0]),void 0===b.__options.distance[2]&&(b.__options.distance[2]=b.__options.distance[0]),void 0===b.__options.distance[3]&&(b.__options.distance[3]=b.__options.distance[1]),b.__options.distance={top:b.__options.distance[0],right:b.__options.distance[1],bottom:b.__options.distance[2],left:b.__options.distance[3]}),"string"==typeof b.__options.side){var c={top:"bottom",right:"left",bottom:"top",left:"right"};b.__options.side=[b.__options.side,c[b.__options.side]],"left"==b.__options.side[0]||"right"==b.__options.side[0]?b.__options.side.push("top","bottom"):b.__options.side.push("right","left")}6===a.tooltipster._env.IE&&b.__options.arrow!==!0&&(b.__options.arrow=!1)},__reposition:function(b,c){var d,e=this,f=e.__targetFind(c),g=[];e.__instance._$tooltip.detach();var h=e.__instance._$tooltip.clone(),i=a.tooltipster._getRuler(h),j=!1,k=e.__instance.option("animation");switch(k&&h.removeClass("tooltipster-"+k),a.each(["window","document"],function(d,k){var l=null;if(e.__instance._trigger({container:k,helper:c,satisfied:j,takeTest:function(a){l=a},results:g,type:"positionTest"}),1==l||0!=l&&0==j&&("window"!=k||e.__options.viewportAware))for(var d=0;d<e.__options.side.length;d++){var m={horizontal:0,vertical:0},n=e.__options.side[d];"top"==n||"bottom"==n?m.vertical=e.__options.distance[n]:m.horizontal=e.__options.distance[n],e.__sideChange(h,n),a.each(["natural","constrained"],function(a,d){if(l=null,e.__instance._trigger({container:k,event:b,helper:c,mode:d,results:g,satisfied:j,side:n,takeTest:function(a){l=a},type:"positionTest"}),1==l||0!=l&&0==j){var h={container:k,distance:m,fits:null,mode:d,outerSize:null,side:n,size:null,target:f[n],whole:null},o="natural"==d?i.free():i.constrain(c.geo.available[k][n].width-m.horizontal,c.geo.available[k][n].height-m.vertical),p=o.measure();if(h.size=p.size,h.outerSize={height:p.size.height+m.vertical,width:p.size.width+m.horizontal},"natural"==d?c.geo.available[k][n].width>=h.outerSize.width&&c.geo.available[k][n].height>=h.outerSize.height?h.fits=!0:h.fits=!1:h.fits=p.fits,"window"==k&&(h.fits?"top"==n||"bottom"==n?h.whole=c.geo.origin.windowOffset.right>=e.__options.minIntersection&&c.geo.window.size.width-c.geo.origin.windowOffset.left>=e.__options.minIntersection:h.whole=c.geo.origin.windowOffset.bottom>=e.__options.minIntersection&&c.geo.window.size.height-c.geo.origin.windowOffset.top>=e.__options.minIntersection:h.whole=!1),g.push(h),h.whole)j=!0;else if("natural"==h.mode&&(h.fits||h.size.width<=c.geo.available[k][n].width))return!1}})}}),e.__instance._trigger({edit:function(a){g=a},event:b,helper:c,results:g,type:"positionTested"}),g.sort(function(a,b){if(a.whole&&!b.whole)return-1;if(!a.whole&&b.whole)return 1;if(a.whole&&b.whole){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}if(a.fits&&!b.fits)return-1;if(!a.fits&&b.fits)return 1;if(a.fits&&b.fits){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}return"document"==a.container&&"bottom"==a.side&&"natural"==a.mode?-1:1}),d=g[0],d.coord={},d.side){case"left":case"right":d.coord.top=Math.floor(d.target-d.size.height/2);break;case"bottom":case"top":d.coord.left=Math.floor(d.target-d.size.width/2)}switch(d.side){case"left":d.coord.left=c.geo.origin.windowOffset.left-d.outerSize.width;break;case"right":d.coord.left=c.geo.origin.windowOffset.right+d.distance.horizontal;break;case"top":d.coord.top=c.geo.origin.windowOffset.top-d.outerSize.height;break;case"bottom":d.coord.top=c.geo.origin.windowOffset.bottom+d.distance.vertical}"window"==d.container?"top"==d.side||"bottom"==d.side?d.coord.left<0?c.geo.origin.windowOffset.right-this.__options.minIntersection>=0?d.coord.left=0:d.coord.left=c.geo.origin.windowOffset.right-this.__options.minIntersection-1:d.coord.left>c.geo.window.size.width-d.size.width&&(c.geo.origin.windowOffset.left+this.__options.minIntersection<=c.geo.window.size.width?d.coord.left=c.geo.window.size.width-d.size.width:d.coord.left=c.geo.origin.windowOffset.left+this.__options.minIntersection+1-d.size.width):d.coord.top<0?c.geo.origin.windowOffset.bottom-this.__options.minIntersection>=0?d.coord.top=0:d.coord.top=c.geo.origin.windowOffset.bottom-this.__options.minIntersection-1:d.coord.top>c.geo.window.size.height-d.size.height&&(c.geo.origin.windowOffset.top+this.__options.minIntersection<=c.geo.window.size.height?d.coord.top=c.geo.window.size.height-d.size.height:d.coord.top=c.geo.origin.windowOffset.top+this.__options.minIntersection+1-d.size.height):(d.coord.left>c.geo.window.size.width-d.size.width&&(d.coord.left=c.geo.window.size.width-d.size.width),d.coord.left<0&&(d.coord.left=0)),e.__sideChange(h,d.side),c.tooltipClone=h[0],c.tooltipParent=e.__instance.option("parent").parent[0],c.mode=d.mode,c.whole=d.whole,c.origin=e.__instance._$origin[0],c.tooltip=e.__instance._$tooltip[0],delete d.container,delete d.fits,delete d.mode,delete d.outerSize,delete d.whole,d.distance=d.distance.horizontal||d.distance.vertical;var l=a.extend(!0,{},d);if(e.__instance._trigger({edit:function(a){d=a},event:b,helper:c,position:l,type:"position"}),e.__options.functionPosition){var m=e.__options.functionPosition.call(e,e.__instance,c,l);m&&(d=m)}i.destroy();var n,o;"top"==d.side||"bottom"==d.side?(n={prop:"left",val:d.target-d.coord.left},o=d.size.width-this.__options.minIntersection):(n={prop:"top",val:d.target-d.coord.top},o=d.size.height-this.__options.minIntersection),n.val<this.__options.minIntersection?n.val=this.__options.minIntersection:n.val>o&&(n.val=o);var p;p=c.geo.origin.fixedLineage?c.geo.origin.windowOffset:{left:c.geo.origin.windowOffset.left+c.geo.window.scroll.left,top:c.geo.origin.windowOffset.top+c.geo.window.scroll.top},d.coord={left:p.left+(d.coord.left-c.geo.origin.windowOffset.left),top:p.top+(d.coord.top-c.geo.origin.windowOffset.top)},e.__sideChange(e.__instance._$tooltip,d.side),c.geo.origin.fixedLineage?e.__instance._$tooltip.css("position","fixed"):e.__instance._$tooltip.css("position",""),e.__instance._$tooltip.css({left:d.coord.left,top:d.coord.top,height:d.size.height,width:d.size.width}).find(".tooltipster-arrow").css({left:"",top:""}).css(n.prop,n.val),e.__instance._$tooltip.appendTo(e.__instance.option("parent")),e.__instance._trigger({type:"repositioned",event:b,position:d})},__sideChange:function(a,b){a.removeClass("tooltipster-bottom").removeCla