selenium-webdriver 4.0.0.alpha2 → 4.0.0.alpha7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +172 -4
  3. data/LICENSE +1 -1
  4. data/lib/selenium/server.rb +25 -9
  5. data/lib/selenium/webdriver.rb +12 -8
  6. data/lib/selenium/webdriver/atoms/findElements.js +121 -0
  7. data/lib/selenium/webdriver/atoms/getAttribute.js +104 -7
  8. data/lib/selenium/webdriver/atoms/isDisplayed.js +76 -78
  9. data/lib/selenium/webdriver/atoms/mutationListener.js +38 -0
  10. data/lib/selenium/webdriver/chrome.rb +10 -9
  11. data/lib/selenium/webdriver/chrome/bridge.rb +20 -4
  12. data/lib/selenium/webdriver/chrome/driver.rb +7 -49
  13. data/lib/selenium/webdriver/chrome/options.rb +97 -57
  14. data/lib/selenium/webdriver/chrome/profile.rb +3 -3
  15. data/lib/selenium/webdriver/chrome/service.rb +0 -4
  16. data/lib/selenium/webdriver/common.rb +6 -1
  17. data/lib/selenium/webdriver/common/driver.rb +81 -17
  18. data/lib/selenium/webdriver/common/driver_extensions/has_authentication.rb +89 -0
  19. data/lib/selenium/webdriver/common/driver_extensions/has_devtools.rb +39 -0
  20. data/lib/selenium/webdriver/common/driver_extensions/has_log_events.rb +143 -0
  21. data/lib/selenium/webdriver/common/driver_extensions/takes_screenshot.rb +2 -1
  22. data/lib/selenium/webdriver/common/element.rb +5 -0
  23. data/lib/selenium/webdriver/common/logger.rb +48 -16
  24. data/lib/selenium/webdriver/common/manager.rb +5 -0
  25. data/lib/selenium/webdriver/common/options.rb +116 -0
  26. data/lib/selenium/webdriver/common/platform.rb +4 -1
  27. data/lib/selenium/webdriver/common/port_prober.rb +4 -6
  28. data/lib/selenium/webdriver/common/profile_helper.rb +10 -2
  29. data/lib/selenium/webdriver/common/proxy.rb +0 -0
  30. data/lib/selenium/webdriver/common/search_context.rb +3 -2
  31. data/lib/selenium/webdriver/common/service.rb +30 -113
  32. data/lib/selenium/webdriver/common/service_manager.rb +151 -0
  33. data/lib/selenium/webdriver/common/socket_lock.rb +2 -2
  34. data/lib/selenium/webdriver/common/takes_screenshot.rb +63 -0
  35. data/lib/selenium/webdriver/common/wait.rb +1 -1
  36. data/lib/selenium/webdriver/devtools.rb +132 -0
  37. data/lib/selenium/webdriver/devtools/console_event.rb +38 -0
  38. data/lib/selenium/webdriver/devtools/exception_event.rb +36 -0
  39. data/lib/selenium/webdriver/devtools/mutation_event.rb +37 -0
  40. data/lib/selenium/webdriver/devtools/v84/accessibility.rb +64 -0
  41. data/lib/selenium/webdriver/devtools/v84/animation.rb +100 -0
  42. data/lib/selenium/webdriver/devtools/v84/application_cache.rb +66 -0
  43. data/lib/selenium/webdriver/devtools/v84/audits.rb +63 -0
  44. data/lib/selenium/webdriver/devtools/v84/background_service.rb +69 -0
  45. data/lib/selenium/webdriver/devtools/v84/browser.rb +125 -0
  46. data/lib/selenium/webdriver/devtools/v84/cache_storage.rb +75 -0
  47. data/lib/selenium/webdriver/devtools/v84/cast.rb +72 -0
  48. data/lib/selenium/webdriver/devtools/v84/console.rb +59 -0
  49. data/lib/selenium/webdriver/devtools/v84/css.rb +167 -0
  50. data/lib/selenium/webdriver/devtools/v84/database.rb +66 -0
  51. data/lib/selenium/webdriver/devtools/v84/debugger.rb +231 -0
  52. data/lib/selenium/webdriver/devtools/v84/device_orientation.rb +55 -0
  53. data/lib/selenium/webdriver/devtools/v84/dom.rb +322 -0
  54. data/lib/selenium/webdriver/devtools/v84/dom_debugger.rb +95 -0
  55. data/lib/selenium/webdriver/devtools/v84/dom_snapshot.rb +67 -0
  56. data/lib/selenium/webdriver/devtools/v84/dom_storage.rb +81 -0
  57. data/lib/selenium/webdriver/devtools/v84/emulation.rb +182 -0
  58. data/lib/selenium/webdriver/devtools/v84/fetch.rb +99 -0
  59. data/lib/selenium/webdriver/devtools/v84/headless_experimental.rb +63 -0
  60. data/lib/selenium/webdriver/devtools/v84/heap_profiler.rb +109 -0
  61. data/lib/selenium/webdriver/devtools/v84/indexed_db.rb +102 -0
  62. data/lib/selenium/webdriver/devtools/v84/input.rb +142 -0
  63. data/lib/selenium/webdriver/devtools/v84/inspector.rb +57 -0
  64. data/lib/selenium/webdriver/devtools/v84/io.rb +61 -0
  65. data/lib/selenium/webdriver/devtools/v84/layer_tree.rb +97 -0
  66. data/lib/selenium/webdriver/devtools/v84/log.rb +68 -0
  67. data/lib/selenium/webdriver/devtools/v84/media.rb +59 -0
  68. data/lib/selenium/webdriver/devtools/v84/memory.rb +88 -0
  69. data/lib/selenium/webdriver/devtools/v84/network.rb +230 -0
  70. data/lib/selenium/webdriver/devtools/v84/overlay.rb +159 -0
  71. data/lib/selenium/webdriver/devtools/v84/page.rb +376 -0
  72. data/lib/selenium/webdriver/devtools/v84/performance.rb +65 -0
  73. data/lib/selenium/webdriver/devtools/v84/profiler.rb +113 -0
  74. data/lib/selenium/webdriver/devtools/v84/runtime.rb +195 -0
  75. data/lib/selenium/webdriver/devtools/v84/schema.rb +48 -0
  76. data/lib/selenium/webdriver/devtools/v84/security.rb +73 -0
  77. data/lib/selenium/webdriver/devtools/v84/service_worker.rb +118 -0
  78. data/lib/selenium/webdriver/devtools/v84/storage.rb +97 -0
  79. data/lib/selenium/webdriver/devtools/v84/system_info.rb +52 -0
  80. data/lib/selenium/webdriver/devtools/v84/target.rb +143 -0
  81. data/lib/selenium/webdriver/devtools/v84/tethering.rb +57 -0
  82. data/lib/selenium/webdriver/devtools/v84/tracing.rb +78 -0
  83. data/lib/selenium/webdriver/devtools/v84/web_audio.rb +72 -0
  84. data/lib/selenium/webdriver/devtools/v84/web_authn.rb +96 -0
  85. data/lib/selenium/webdriver/devtools/v85/accessibility.rb +64 -0
  86. data/lib/selenium/webdriver/devtools/v85/animation.rb +100 -0
  87. data/lib/selenium/webdriver/devtools/v85/application_cache.rb +66 -0
  88. data/lib/selenium/webdriver/devtools/v85/audits.rb +63 -0
  89. data/lib/selenium/webdriver/devtools/v85/background_service.rb +69 -0
  90. data/lib/selenium/webdriver/devtools/v85/browser.rb +125 -0
  91. data/lib/selenium/webdriver/devtools/v85/cache_storage.rb +75 -0
  92. data/lib/selenium/webdriver/devtools/v85/cast.rb +72 -0
  93. data/lib/selenium/webdriver/devtools/v85/console.rb +59 -0
  94. data/lib/selenium/webdriver/devtools/v85/css.rb +167 -0
  95. data/lib/selenium/webdriver/devtools/v85/database.rb +66 -0
  96. data/lib/selenium/webdriver/devtools/v85/debugger.rb +231 -0
  97. data/lib/selenium/webdriver/devtools/v85/device_orientation.rb +55 -0
  98. data/lib/selenium/webdriver/devtools/v85/dom.rb +322 -0
  99. data/lib/selenium/webdriver/devtools/v85/dom_debugger.rb +95 -0
  100. data/lib/selenium/webdriver/devtools/v85/dom_snapshot.rb +67 -0
  101. data/lib/selenium/webdriver/devtools/v85/dom_storage.rb +81 -0
  102. data/lib/selenium/webdriver/devtools/v85/emulation.rb +182 -0
  103. data/lib/selenium/webdriver/devtools/v85/fetch.rb +99 -0
  104. data/lib/selenium/webdriver/devtools/v85/headless_experimental.rb +63 -0
  105. data/lib/selenium/webdriver/devtools/v85/heap_profiler.rb +109 -0
  106. data/lib/selenium/webdriver/devtools/v85/indexed_db.rb +102 -0
  107. data/lib/selenium/webdriver/devtools/v85/input.rb +143 -0
  108. data/lib/selenium/webdriver/devtools/v85/inspector.rb +57 -0
  109. data/lib/selenium/webdriver/devtools/v85/io.rb +61 -0
  110. data/lib/selenium/webdriver/devtools/v85/layer_tree.rb +97 -0
  111. data/lib/selenium/webdriver/devtools/v85/log.rb +68 -0
  112. data/lib/selenium/webdriver/devtools/v85/media.rb +59 -0
  113. data/lib/selenium/webdriver/devtools/v85/memory.rb +88 -0
  114. data/lib/selenium/webdriver/devtools/v85/network.rb +230 -0
  115. data/lib/selenium/webdriver/devtools/v85/overlay.rb +160 -0
  116. data/lib/selenium/webdriver/devtools/v85/page.rb +376 -0
  117. data/lib/selenium/webdriver/devtools/v85/performance.rb +65 -0
  118. data/lib/selenium/webdriver/devtools/v85/profiler.rb +113 -0
  119. data/lib/selenium/webdriver/devtools/v85/runtime.rb +196 -0
  120. data/lib/selenium/webdriver/devtools/v85/schema.rb +48 -0
  121. data/lib/selenium/webdriver/devtools/v85/security.rb +73 -0
  122. data/lib/selenium/webdriver/devtools/v85/service_worker.rb +118 -0
  123. data/lib/selenium/webdriver/devtools/v85/storage.rb +97 -0
  124. data/lib/selenium/webdriver/devtools/v85/system_info.rb +52 -0
  125. data/lib/selenium/webdriver/devtools/v85/target.rb +145 -0
  126. data/lib/selenium/webdriver/devtools/v85/tethering.rb +57 -0
  127. data/lib/selenium/webdriver/devtools/v85/tracing.rb +78 -0
  128. data/lib/selenium/webdriver/devtools/v85/web_audio.rb +72 -0
  129. data/lib/selenium/webdriver/devtools/v85/web_authn.rb +96 -0
  130. data/lib/selenium/webdriver/devtools/v86/accessibility.rb +64 -0
  131. data/lib/selenium/webdriver/devtools/v86/animation.rb +100 -0
  132. data/lib/selenium/webdriver/devtools/v86/application_cache.rb +66 -0
  133. data/lib/selenium/webdriver/devtools/v86/audits.rb +63 -0
  134. data/lib/selenium/webdriver/devtools/v86/background_service.rb +69 -0
  135. data/lib/selenium/webdriver/devtools/v86/browser.rb +125 -0
  136. data/lib/selenium/webdriver/devtools/v86/cache_storage.rb +75 -0
  137. data/lib/selenium/webdriver/devtools/v86/cast.rb +72 -0
  138. data/lib/selenium/webdriver/devtools/v86/console.rb +59 -0
  139. data/lib/selenium/webdriver/devtools/v86/css.rb +181 -0
  140. data/lib/selenium/webdriver/devtools/v86/database.rb +66 -0
  141. data/lib/selenium/webdriver/devtools/v86/debugger.rb +233 -0
  142. data/lib/selenium/webdriver/devtools/v86/device_orientation.rb +55 -0
  143. data/lib/selenium/webdriver/devtools/v86/dom.rb +329 -0
  144. data/lib/selenium/webdriver/devtools/v86/dom_debugger.rb +95 -0
  145. data/lib/selenium/webdriver/devtools/v86/dom_snapshot.rb +67 -0
  146. data/lib/selenium/webdriver/devtools/v86/dom_storage.rb +81 -0
  147. data/lib/selenium/webdriver/devtools/v86/emulation.rb +193 -0
  148. data/lib/selenium/webdriver/devtools/v86/fetch.rb +99 -0
  149. data/lib/selenium/webdriver/devtools/v86/headless_experimental.rb +63 -0
  150. data/lib/selenium/webdriver/devtools/v86/heap_profiler.rb +109 -0
  151. data/lib/selenium/webdriver/devtools/v86/indexed_db.rb +102 -0
  152. data/lib/selenium/webdriver/devtools/v86/input.rb +143 -0
  153. data/lib/selenium/webdriver/devtools/v86/inspector.rb +57 -0
  154. data/lib/selenium/webdriver/devtools/v86/io.rb +61 -0
  155. data/lib/selenium/webdriver/devtools/v86/layer_tree.rb +97 -0
  156. data/lib/selenium/webdriver/devtools/v86/log.rb +68 -0
  157. data/lib/selenium/webdriver/devtools/v86/media.rb +59 -0
  158. data/lib/selenium/webdriver/devtools/v86/memory.rb +88 -0
  159. data/lib/selenium/webdriver/devtools/v86/network.rb +235 -0
  160. data/lib/selenium/webdriver/devtools/v86/overlay.rb +183 -0
  161. data/lib/selenium/webdriver/devtools/v86/page.rb +376 -0
  162. data/lib/selenium/webdriver/devtools/v86/performance.rb +65 -0
  163. data/lib/selenium/webdriver/devtools/v86/profiler.rb +113 -0
  164. data/lib/selenium/webdriver/devtools/v86/runtime.rb +196 -0
  165. data/lib/selenium/webdriver/devtools/v86/schema.rb +48 -0
  166. data/lib/selenium/webdriver/devtools/v86/security.rb +73 -0
  167. data/lib/selenium/webdriver/devtools/v86/service_worker.rb +118 -0
  168. data/lib/selenium/webdriver/devtools/v86/storage.rb +97 -0
  169. data/lib/selenium/webdriver/devtools/v86/system_info.rb +52 -0
  170. data/lib/selenium/webdriver/devtools/v86/target.rb +145 -0
  171. data/lib/selenium/webdriver/devtools/v86/tethering.rb +57 -0
  172. data/lib/selenium/webdriver/devtools/v86/tracing.rb +78 -0
  173. data/lib/selenium/webdriver/devtools/v86/web_audio.rb +72 -0
  174. data/lib/selenium/webdriver/devtools/v86/web_authn.rb +102 -0
  175. data/lib/selenium/webdriver/devtools/v87/accessibility.rb +73 -0
  176. data/lib/selenium/webdriver/devtools/v87/animation.rb +100 -0
  177. data/lib/selenium/webdriver/devtools/v87/application_cache.rb +66 -0
  178. data/lib/selenium/webdriver/devtools/v87/audits.rb +63 -0
  179. data/lib/selenium/webdriver/devtools/v87/background_service.rb +69 -0
  180. data/lib/selenium/webdriver/devtools/v87/browser.rb +125 -0
  181. data/lib/selenium/webdriver/devtools/v87/cache_storage.rb +75 -0
  182. data/lib/selenium/webdriver/devtools/v87/cast.rb +72 -0
  183. data/lib/selenium/webdriver/devtools/v87/console.rb +59 -0
  184. data/lib/selenium/webdriver/devtools/v87/css.rb +181 -0
  185. data/lib/selenium/webdriver/devtools/v87/database.rb +66 -0
  186. data/lib/selenium/webdriver/devtools/v87/debugger.rb +233 -0
  187. data/lib/selenium/webdriver/devtools/v87/device_orientation.rb +55 -0
  188. data/lib/selenium/webdriver/devtools/v87/dom.rb +329 -0
  189. data/lib/selenium/webdriver/devtools/v87/dom_debugger.rb +95 -0
  190. data/lib/selenium/webdriver/devtools/v87/dom_snapshot.rb +67 -0
  191. data/lib/selenium/webdriver/devtools/v87/dom_storage.rb +81 -0
  192. data/lib/selenium/webdriver/devtools/v87/emulation.rb +193 -0
  193. data/lib/selenium/webdriver/devtools/v87/fetch.rb +99 -0
  194. data/lib/selenium/webdriver/devtools/v87/headless_experimental.rb +63 -0
  195. data/lib/selenium/webdriver/devtools/v87/heap_profiler.rb +109 -0
  196. data/lib/selenium/webdriver/devtools/v87/indexed_db.rb +102 -0
  197. data/lib/selenium/webdriver/devtools/v87/input.rb +143 -0
  198. data/lib/selenium/webdriver/devtools/v87/inspector.rb +57 -0
  199. data/lib/selenium/webdriver/devtools/v87/io.rb +61 -0
  200. data/lib/selenium/webdriver/devtools/v87/layer_tree.rb +97 -0
  201. data/lib/selenium/webdriver/devtools/v87/log.rb +68 -0
  202. data/lib/selenium/webdriver/devtools/v87/media.rb +59 -0
  203. data/lib/selenium/webdriver/devtools/v87/memory.rb +88 -0
  204. data/lib/selenium/webdriver/devtools/v87/network.rb +247 -0
  205. data/lib/selenium/webdriver/devtools/v87/overlay.rb +183 -0
  206. data/lib/selenium/webdriver/devtools/v87/page.rb +376 -0
  207. data/lib/selenium/webdriver/devtools/v87/performance.rb +65 -0
  208. data/lib/selenium/webdriver/devtools/v87/profiler.rb +125 -0
  209. data/lib/selenium/webdriver/devtools/v87/runtime.rb +196 -0
  210. data/lib/selenium/webdriver/devtools/v87/schema.rb +48 -0
  211. data/lib/selenium/webdriver/devtools/v87/security.rb +73 -0
  212. data/lib/selenium/webdriver/devtools/v87/service_worker.rb +118 -0
  213. data/lib/selenium/webdriver/devtools/v87/storage.rb +97 -0
  214. data/lib/selenium/webdriver/devtools/v87/system_info.rb +52 -0
  215. data/lib/selenium/webdriver/devtools/v87/target.rb +145 -0
  216. data/lib/selenium/webdriver/devtools/v87/tethering.rb +57 -0
  217. data/lib/selenium/webdriver/devtools/v87/tracing.rb +78 -0
  218. data/lib/selenium/webdriver/devtools/v87/web_audio.rb +72 -0
  219. data/lib/selenium/webdriver/devtools/v87/web_authn.rb +102 -0
  220. data/lib/selenium/webdriver/edge.rb +29 -9
  221. data/lib/selenium/webdriver/edge_chrome/bridge.rb +37 -0
  222. data/lib/selenium/webdriver/edge_chrome/driver.rb +48 -0
  223. data/lib/selenium/webdriver/edge_chrome/options.rb +37 -0
  224. data/lib/selenium/webdriver/edge_chrome/profile.rb +33 -0
  225. data/lib/selenium/webdriver/edge_chrome/service.rb +36 -0
  226. data/lib/selenium/webdriver/{edge → edge_html}/driver.rb +3 -35
  227. data/lib/selenium/webdriver/{edge → edge_html}/options.rb +26 -22
  228. data/lib/selenium/webdriver/{edge → edge_html}/service.rb +2 -6
  229. data/lib/selenium/webdriver/firefox.rb +18 -15
  230. data/lib/selenium/webdriver/firefox/bridge.rb +1 -1
  231. data/lib/selenium/webdriver/firefox/driver.rb +2 -31
  232. data/lib/selenium/webdriver/firefox/extension.rb +8 -0
  233. data/lib/selenium/webdriver/firefox/options.rb +47 -52
  234. data/lib/selenium/webdriver/firefox/profile.rb +7 -78
  235. data/lib/selenium/webdriver/firefox/service.rb +0 -4
  236. data/lib/selenium/webdriver/ie.rb +8 -7
  237. data/lib/selenium/webdriver/ie/driver.rb +0 -33
  238. data/lib/selenium/webdriver/ie/options.rb +10 -33
  239. data/lib/selenium/webdriver/ie/service.rb +5 -9
  240. data/lib/selenium/webdriver/remote.rb +16 -10
  241. data/lib/selenium/webdriver/remote/bridge.rb +38 -42
  242. data/lib/selenium/webdriver/remote/capabilities.rb +25 -7
  243. data/lib/selenium/webdriver/remote/driver.rb +6 -13
  244. data/lib/selenium/webdriver/remote/http/default.rb +10 -6
  245. data/lib/selenium/webdriver/remote/http/persistent.rb +5 -6
  246. data/lib/selenium/webdriver/safari.rb +16 -8
  247. data/lib/selenium/webdriver/safari/bridge.rb +4 -4
  248. data/lib/selenium/webdriver/safari/driver.rb +3 -30
  249. data/lib/selenium/webdriver/safari/options.rb +18 -19
  250. data/lib/selenium/webdriver/safari/service.rb +0 -4
  251. data/lib/selenium/webdriver/support.rb +1 -0
  252. data/lib/selenium/webdriver/support/color.rb +2 -2
  253. data/lib/selenium/webdriver/support/event_firing_bridge.rb +1 -1
  254. data/lib/selenium/webdriver/support/relative_locator.rb +51 -0
  255. data/lib/selenium/webdriver/version.rb +1 -1
  256. data/selenium-webdriver.gemspec +7 -6
  257. metadata +225 -21
  258. data/lib/selenium/webdriver/firefox/binary.rb +0 -110
  259. data/lib/selenium/webdriver/firefox/extension/prefs.json +0 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bfdda64a93649dd407e9a99d0547280f33492826
4
- data.tar.gz: 7c643c63e461f17cabb016812cffa21e3001f813
2
+ SHA256:
3
+ metadata.gz: 98a5536f91ba3fce5d5a6065dfca9c19d97e911b80f2eb3b26ee5a95057a5d9d
4
+ data.tar.gz: 80f3216b300aa16f984183dffe014fbe4d5f2647f63a1f6deb84b9aa41209fac
5
5
  SHA512:
6
- metadata.gz: a5b8faba158cabc734b9f0fa8e7fc00bdea0b127bafc2b6f363cefd3bc2aea78d176cc5d042eda9c2271d1dd52d951bd93c8449fdb381e7fa35ebafab3ffe88f
7
- data.tar.gz: 113f4c13373c915447172e43cc5da4435bc785693c06e6a119f9ecdd5fcd3efc01a43b8d295f655be00e5176e3a901f721d6cfa053a606639e5c0b5d5092ecc5
6
+ metadata.gz: 8ea3a82cdb6fe8d089858101df6f614141ac90da8f3a2eb6e85a812beca801103acb24480293132ddc44330e897b22f666c588b7830aca1e23e1384d7970144a
7
+ data.tar.gz: 68d902ca4d337a844ff39479fe234fad9f08e6fcd21fee6a6e5c88abdabba98de41a12399f7d5df95fc8f49ecb8061b30ffe3d82e284dcd01607c36deeb0a776
data/CHANGES CHANGED
@@ -1,3 +1,121 @@
1
+ 4.0.0.alpha7 (2020-11-10)
2
+ =========================
3
+
4
+ Chrome:
5
+ * Fixed a link to download ChromeDriver when it's not found (thanks @masakazutakewaka).
6
+ * Fixed an issue when passing instance of Profile to an Options in capabilities
7
+ (thanks @masakazutakewaka).
8
+
9
+ DevTools:
10
+ * Added support for multiple version of CDP. Currently supported versions are
11
+ 84-87. The proper version is automatically selected when the browser is started
12
+ based on its version. The implementation is Chromium-based and is confirmed
13
+ to work in Chrome and Edge at least.
14
+ * Added support for basic authentication (see HasAuthentication).
15
+ * Added support for listening to JavaScript console messages (see HasLogEvents).
16
+ * Added support for listening to JavaScript exceptions (see HasLogEvents).
17
+ * Added support for listening to DOM mutations (see HasLogEvents).
18
+
19
+ Edge:
20
+ * Switched default Edge implementation to Chromium-based. To use older versions
21
+ of Edge, pass :edge_html when initializing the driver.
22
+
23
+ Firefox:
24
+ * Fixed an issue whereby using the new capabilities structure in local drivers
25
+ would cause the W3C check to complain that `browser_name` was an invalid
26
+ capability key name (thanks @luke-hill)
27
+
28
+ Ruby:
29
+ * Added support for taking screenshots of individual elements using Element#screenshot
30
+ (thanks @johndouthat).
31
+ * Fixed deprecation message of using Net::HTTP::Proxy (thanks @masakazutakewaka).
32
+ * Fixed false negative detection of Linux on WSL2 (thanks @snsten).
33
+ * Support ChildProcess 4.x versions (thanks @boutil).
34
+
35
+ Safari:
36
+ * Fixed browser name in capabilities for Safari Technology Preview.
37
+
38
+ 4.0.0.alpha6 (2020-05-28)
39
+ =========================
40
+
41
+ Chrome:
42
+ * Added DevTools classes and methods generated from the CDP specification.
43
+ It currently supports commands and events and provides Rubyish API:
44
+ driver.devtools.page.navigate(url: 'http://google.com')
45
+ driver.devtools.console.clear_messages
46
+ driver.devtools.page.enable
47
+ driver.devtools.page.on(:load_event_fired) do |params|
48
+ puts("Page loaded in #{params['timestamp']}")
49
+ end
50
+ Check https://chromedevtools.github.io/devtools-protocol/ for more information
51
+ about possible commands and events. Please note that this API is considered
52
+ to be experimental and may change any time before stable 4.0 release.
53
+ * Fixed an issue when passing :prompt_for_download (or similar snake_cased
54
+ symbols) in Options#prefs would be ignored by Chrome because Selenium
55
+ would internally convert it to camelCased format (:promptForDownload).
56
+ Now :prefs are left intact.
57
+
58
+ Edge:
59
+ * Fixed an issue when Driver#execute_cdp would not work for Chromium-based
60
+ Edge browser.
61
+
62
+ Ruby:
63
+ * Deprecated passing :desired_capabilities and :options to driver initialization
64
+ in favor of :capabilities. They now can be combined in an array to make
65
+ custom capabilities requirements:
66
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome
67
+ opts = Selenium::WebDriver::Chrome::Options.new
68
+ Selenium::WebDriver.for(:remote, capabilities: :chrome)
69
+ Selenium::WebDriver.for(:remote, capabilities: caps)
70
+ Selenium::WebDriver.for(:remote, capabilities: opts)
71
+ Selenium::WebDriver.for(:remote, capabilities: [caps, opts])
72
+ * Deprecated passing Hash to :capabilities in favor of Remote::Capabilities object.
73
+ * Updated minimum require Ruby version to 2.5.
74
+ * Improved keyword arguments handling to avoid warnings in Ruby 2.7.
75
+
76
+ 4.0.0.alpha5 (2020-03-18)
77
+ =========================
78
+
79
+ The release is just to synchronize version with other bindings and does not
80
+ include any changes.
81
+
82
+ 4.0.0.alpha4 (2020-01-09)
83
+ =========================
84
+
85
+ Ruby:
86
+ * Added initial support for relative locators, which allow to find elements
87
+ above/below/left/right/near another element. For example, you can find all
88
+ the cells in a table to the right of your starting cell:
89
+ start_cell = driver.find_element(css: 'td')
90
+ right_cells = driver.find_elements(relative: {tag_name: 'td', right: start_cell})
91
+ The documentation is still lacking so refer to examples in df6be2e962.
92
+ * Added ability to silence certain logger messages by using it's identifiers:
93
+ Selenium::WebDriver.logger.ignore(:driver_path)
94
+ * Added new dependency: websocket. It's used for communicating with Chrome DevTools.
95
+ * Loosened childprocess dependency to allow using version 2.0+.
96
+ * Loosened rubyzip dependency to allow using version 2.0+.
97
+ * Fixed Errno::EACCES error on Linux DeX and similar distributes
98
+
99
+ Chrome:
100
+ * Added initial support for communicating with Chrome DevTools. The implementation
101
+ is very basic and lacks CDP domains, events and types - those will be added
102
+ in future releases. Still, it allows to execute simple commands to DevTools:
103
+ driver.devtools.send('Page.navigate', {url: 'https://google.com'})
104
+
105
+ 4.0.0.alpha3 (2019-07-08)
106
+ =========================
107
+
108
+ Ruby:
109
+ * All documented driver capabilities supported in respective browser Options class by constructor and accessor
110
+ * Driver constructor :options and :desired_capabilities generate the same capabilities for local and remote execution
111
+ * Deprecated :options as keyword for initializing browser Options classes
112
+
113
+ Chrome:
114
+ * Add support for browser logging with latest versions of chromedriver
115
+
116
+ Edge:
117
+ * Add support for Chromium based implementation
118
+
1
119
  4.0.0.alpha2 (2019-05-02)
2
120
  =========================
3
121
 
@@ -34,6 +152,56 @@ Firefox:
34
152
  result in NoMethodError. Now it will find a profile with such name on your
35
153
  system and use it accordingly (issue #7119)
36
154
 
155
+ 3.142.7 (2019-12-27)
156
+ ====================
157
+
158
+ Ruby:
159
+ * Fix keyword argument deprecations in Ruby 2.7 (thanks @connorshea)
160
+
161
+ 3.142.6 (2019-10-04)
162
+ ====================
163
+
164
+ Ruby:
165
+ * Loosen ChildProcess dependency so that 3.0+ can be used (thanks @jaredbeck)
166
+
167
+ 3.142.5 (2019-10-01)
168
+ ====================
169
+
170
+ Ruby:
171
+ * Loosen RubyZip dependency so that 1.3+ can be used (thanks @vtamara)
172
+
173
+ 3.142.4 (2019-09-02)
174
+ ====================
175
+
176
+ Chrome:
177
+ * Added support for new command for getting logs in ChromeDriver 76+
178
+ with W3C mode on
179
+
180
+ 3.142.3 (2019-05-21)
181
+ ====================
182
+
183
+ Firefox:
184
+ * Fixed a regression when Firefox binary path was not sent to GeckoDriver
185
+ by default and browser could not be located (issue #7219)
186
+
187
+ 3.142.2 (2019-05-11)
188
+ ====================
189
+
190
+ Chrome:
191
+ * Fixed an issue when getting/setting network conditions and sending CDP
192
+ commands didn't work with Grid (issue #7174)
193
+
194
+ Safari:
195
+ * Fixed an issue when getting/setting permissions and attaching debugger
196
+ didn't work with Grid (issue #7174)
197
+
198
+ 3.142.1 (2019-05-07)
199
+ ====================
200
+
201
+ Firefox:
202
+ * Fixed an issue when processing error in legacy driver would result
203
+ in NoMethodError (issue #7178)
204
+
37
205
  3.142.0 (2019-04-24)
38
206
  ====================
39
207
 
@@ -566,11 +734,11 @@ Ruby:
566
734
  * Fix bug in auto detection of drivers which allowed selection of non-executable binaries
567
735
 
568
736
  W3C:
569
- * Implement #cookie_named and #delete_all_cookies methods (thanks lmtierney)
570
- * Implement element #property method (thanks lmtierney)
737
+ * Implement #cookie_named and #delete_all_cookies methods (thanks lmtierney)
738
+ * Implement element #property method (thanks lmtierney)
571
739
 
572
740
  Chrome:
573
- * Fix bug in switches (thanks danvine)
741
+ * Fix bug in switches (thanks danvine)
574
742
 
575
743
  3.0.1 (2016-11-06)
576
744
  ===================
@@ -592,7 +760,7 @@ Ruby:
592
760
  * Add support for latest driver options
593
761
  * Add support for :port parameter for launching driver
594
762
  * Add support for :service_args parameter for driver command line switches
595
- * Improve reliability by increasing service shutdown timeout (#2815; thanks John Barbuto )
763
+ * Improve reliability by increasing service shutdown timeout (#2815; thanks John Barbuto )
596
764
 
597
765
  Firefox:
598
766
  * Add support for :firefox_options in geckodriver
data/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2019 Software Freedom Conservancy (SFC)
190
+ Copyright 2020 Software Freedom Conservancy (SFC)
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
@@ -74,7 +74,7 @@ module Selenium
74
74
 
75
75
  begin
76
76
  File.open(download_file_name, 'wb') do |destination|
77
- net_http.start('selenium-release.storage.googleapis.com') do |http|
77
+ net_http_start('selenium-release.storage.googleapis.com') do |http|
78
78
  resp = http.request_get("/#{required_version[/(\d+\.\d+)\./, 1]}/#{download_file_name}") do |response|
79
79
  total = response.content_length
80
80
  progress = 0
@@ -85,7 +85,7 @@ module Selenium
85
85
  segment_count += 1
86
86
 
87
87
  if (segment_count % 15).zero?
88
- percent = (progress.to_f / total.to_f) * 100
88
+ percent = progress.fdiv(total) * 100
89
89
  print "#{CL_RESET}Downloading #{download_file_name}: #{percent.to_i}% (#{progress} / #{total})"
90
90
  segment_count = 0
91
91
  end
@@ -97,7 +97,7 @@ module Selenium
97
97
  raise Error, "#{resp.code} for #{download_file_name}" unless resp.is_a? Net::HTTPSuccess
98
98
  end
99
99
  end
100
- rescue
100
+ rescue StandardError
101
101
  FileUtils.rm download_file_name if File.exist? download_file_name
102
102
  raise
103
103
  end
@@ -111,7 +111,7 @@ module Selenium
111
111
 
112
112
  def latest
113
113
  require 'rexml/document'
114
- net_http.start('selenium-release.storage.googleapis.com') do |http|
114
+ net_http_start('selenium-release.storage.googleapis.com') do |http|
115
115
  versions = REXML::Document.new(http.get('/').body).root.get_elements('//Contents/Key').map do |e|
116
116
  e.text[/selenium-server-standalone-(\d+\.\d+\.\d+)\.jar/, 1]
117
117
  end
@@ -120,20 +120,27 @@ module Selenium
120
120
  end
121
121
  end
122
122
 
123
- def net_http
123
+ def net_http_start(address, &block)
124
124
  http_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
125
125
 
126
126
  if http_proxy
127
127
  http_proxy = "http://#{http_proxy}" unless http_proxy.start_with?('http://')
128
128
  uri = URI.parse(http_proxy)
129
129
 
130
- Net::HTTP::Proxy(uri.host, uri.port)
130
+ Net::HTTP.start(address, nil, uri.host, uri.port, &block)
131
131
  else
132
- Net::HTTP
132
+ Net::HTTP.start(address, &block)
133
133
  end
134
134
  end
135
135
  end
136
136
 
137
+ #
138
+ # The Mode of the Server
139
+ # :standalone, #hub, #node
140
+ #
141
+
142
+ attr_accessor :role
143
+
137
144
  #
138
145
  # The server port
139
146
  #
@@ -175,11 +182,12 @@ module Selenium
175
182
 
176
183
  @jar = jar
177
184
  @host = '127.0.0.1'
185
+ @role = opts.fetch(:role, 'standalone')
178
186
  @port = opts.fetch(:port, 4444)
179
187
  @timeout = opts.fetch(:timeout, 30)
180
188
  @background = opts.fetch(:background, false)
181
189
  @log = opts[:log]
182
-
190
+ @log_file = nil
183
191
  @additional_args = []
184
192
  end
185
193
 
@@ -216,6 +224,10 @@ module Selenium
216
224
 
217
225
  private
218
226
 
227
+ def selenium4?
228
+ @jar.match?(/[^\.][4]\./) || @jar.include?('deploy')
229
+ end
230
+
219
231
  def stop_process
220
232
  return unless @process.alive?
221
233
 
@@ -234,7 +246,11 @@ module Selenium
234
246
  @process ||= begin
235
247
  # extract any additional_args that start with -D as options
236
248
  properties = @additional_args.dup - @additional_args.delete_if { |arg| arg[/^-D/] }
237
- server_command = ['java'] + properties + ['-jar', @jar, '-port', @port.to_s] + @additional_args
249
+ args = ['-jar', @jar]
250
+ args << @role if selenium4?
251
+ args << (selenium4? ? '--port' : '-port')
252
+ args << @port.to_s
253
+ server_command = ['java'] + properties + args + @additional_args
238
254
  cp = ChildProcess.build(*server_command)
239
255
  WebDriver.logger.debug("Executing Process #{server_command}")
240
256
 
@@ -23,9 +23,10 @@ require 'fileutils'
23
23
  require 'date'
24
24
  require 'json'
25
25
  require 'set'
26
+ require 'websocket'
26
27
 
27
- require 'selenium/webdriver/common'
28
28
  require 'selenium/webdriver/atoms'
29
+ require 'selenium/webdriver/common'
29
30
  require 'selenium/webdriver/version'
30
31
 
31
32
  module Selenium
@@ -35,13 +36,16 @@ module Selenium
35
36
  Rectangle = Struct.new(:x, :y, :width, :height)
36
37
  Location = Struct.new(:latitude, :longitude, :altitude)
37
38
 
38
- autoload :Chrome, 'selenium/webdriver/chrome'
39
- autoload :Edge, 'selenium/webdriver/edge'
40
- autoload :Firefox, 'selenium/webdriver/firefox'
41
- autoload :IE, 'selenium/webdriver/ie'
42
- autoload :Remote, 'selenium/webdriver/remote'
43
- autoload :Safari, 'selenium/webdriver/safari'
44
- autoload :Support, 'selenium/webdriver/support'
39
+ autoload :Chrome, 'selenium/webdriver/chrome'
40
+ autoload :DevTools, 'selenium/webdriver/devtools'
41
+ autoload :Edge, 'selenium/webdriver/edge'
42
+ autoload :EdgeHtml, 'selenium/webdriver/edge'
43
+ autoload :EdgeChrome, 'selenium/webdriver/edge'
44
+ autoload :Firefox, 'selenium/webdriver/firefox'
45
+ autoload :IE, 'selenium/webdriver/ie'
46
+ autoload :Remote, 'selenium/webdriver/remote'
47
+ autoload :Safari, 'selenium/webdriver/safari'
48
+ autoload :Support, 'selenium/webdriver/support'
45
49
 
46
50
  # @api private
47
51
 
@@ -0,0 +1,121 @@
1
+ function(){return (function(){var k=this||self;function aa(a){return"string"==typeof a}function ba(a,b){a=a.split(".");var c=k;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b}
2
+ function ca(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
3
+ else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function da(a){return"function"==ca(a)}function ea(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ha(a,b,c){return a.call.apply(a.bind,arguments)}
4
+ function ia(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function ja(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ja=ha:ja=ia;return ja.apply(null,arguments)}
5
+ function ka(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function l(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a};/*
6
+
7
+ The MIT License
8
+
9
+ Copyright (c) 2007 Cybozu Labs, Inc.
10
+ Copyright (c) 2012 Google Inc.
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to
14
+ deal in the Software without restriction, including without limitation the
15
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16
+ sell copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in
20
+ all copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28
+ IN THE SOFTWARE.
29
+ */
30
+ function la(a,b,c){this.a=a;this.b=b||1;this.f=c||1};var ma;var na=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},q=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},oa=Array.prototype.filter?function(a,b){return Array.prototype.filter.call(a,
31
+ b,void 0)}:function(a,b){for(var c=a.length,d=[],e=0,f="string"===typeof a?a.split(""):a,g=0;g<c;g++)if(g in f){var h=f[g];b.call(void 0,h,g,a)&&(d[e++]=h)}return d},pa=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),e="string"===typeof a?a.split(""):a,f=0;f<c;f++)f in e&&(d[f]=b.call(void 0,e[f],f,a));return d},qa=Array.prototype.reduce?function(a,b,c){return Array.prototype.reduce.call(a,b,c)}:function(a,b,c){var d=c;q(a,
32
+ function(e,f){d=b.call(void 0,d,e,f,a)});return d},ra=Array.prototype.some?function(a,b){return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a))return!0;return!1},sa=Array.prototype.every?function(a,b,c){return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e="string"===typeof a?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};
33
+ function ta(a,b){a:{for(var c=a.length,d="string"===typeof a?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:"string"===typeof a?a.charAt(b):a[b]}function ua(a){return Array.prototype.concat.apply([],arguments)}function va(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};function wa(a){var b=a.length-1;return 0<=b&&a.indexOf(" ",b)==b}var xa=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};
34
+ function ya(a,b){var c=0;a=xa(String(a)).split(".");b=xa(String(b)).split(".");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||"",g=b[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;c=za(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||za(0==f[2].length,0==g[2].length)||za(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c}function za(a,b){return a<b?-1:a>b?1:0};var r;a:{var Aa=k.navigator;if(Aa){var Ba=Aa.userAgent;if(Ba){r=Ba;break a}}r=""}function v(a){return-1!=r.indexOf(a)};function Ca(){return v("Firefox")||v("FxiOS")}function Da(){return(v("Chrome")||v("CriOS"))&&!v("Edge")};function Ea(a){return String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()})};function Fa(){return v("iPhone")&&!v("iPod")&&!v("iPad")};function Ga(a,b){var c=Ha;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var Ia=v("Opera"),w=v("Trident")||v("MSIE"),Ja=v("Edge"),Ka=v("Gecko")&&!(-1!=r.toLowerCase().indexOf("webkit")&&!v("Edge"))&&!(v("Trident")||v("MSIE"))&&!v("Edge"),La=-1!=r.toLowerCase().indexOf("webkit")&&!v("Edge");function Ma(){var a=k.document;return a?a.documentMode:void 0}var Na;
35
+ a:{var Oa="",Pa=function(){var a=r;if(Ka)return/rv:([^\);]+)(\)|;)/.exec(a);if(Ja)return/Edge\/([\d\.]+)/.exec(a);if(w)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(La)return/WebKit\/(\S+)/.exec(a);if(Ia)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Pa&&(Oa=Pa?Pa[1]:"");if(w){var Qa=Ma();if(null!=Qa&&Qa>parseFloat(Oa)){Na=String(Qa);break a}}Na=Oa}var Ha={};function Ra(a){return Ga(a,function(){return 0<=ya(Na,a)})}var x;x=k.document&&w?Ma():void 0;var y=w&&!(9<=Number(x)),Sa=w&&!(8<=Number(x));function Ta(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeType=2;this.parentNode=this.ownerElement=b}function Ua(a,b){var c=Sa&&"href"==b.nodeName?a.getAttribute(b.nodeName,2):b.nodeValue;return new Ta(b,a,b.nodeName,c)};function Va(a){this.b=a;this.a=0}function Wa(a){a=a.match(Xa);for(var b=0;b<a.length;b++)Ya.test(a[b])&&a.splice(b,1);return new Va(a)}var Xa=/\$?(?:(?![0-9-\.])(?:\*|[\w-\.]+):)?(?![0-9-\.])(?:\*|[\w-\.]+)|\/\/|\.\.|::|\d+(?:\.\d*)?|\.\d+|"[^"]*"|'[^']*'|[!<>]=|\s+|./g,Ya=/^\s/;function z(a,b){return a.b[a.a+(b||0)]}function A(a){return a.b[a.a++]}function Za(a){return a.b.length<=a.a};function $a(a,b){this.x=void 0!==a?a:0;this.y=void 0!==b?b:0}$a.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};$a.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};$a.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};function ab(a,b){this.width=a;this.height=b}ab.prototype.aspectRatio=function(){return this.width/this.height};ab.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};ab.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};ab.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function bb(a){return a?new cb(B(a)):ma||(ma=new cb)}function db(a){for(;a&&1!=a.nodeType;)a=a.previousSibling;return a}function eb(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a}
36
+ function fb(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(w&&!(9<=Number(x))){if(9==a.nodeType)return-1;if(9==b.nodeType)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=1==a.nodeType,d=1==b.nodeType;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,f=b.parentNode;return e==f?gb(a,b):!c&&eb(e,b)?-1*hb(a,b):!d&&eb(f,a)?hb(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=B(a);c=d.createRange();
37
+ c.selectNode(a);c.collapse(!0);a=d.createRange();a.selectNode(b);a.collapse(!0);return c.compareBoundaryPoints(k.Range.START_TO_END,a)}function hb(a,b){var c=a.parentNode;if(c==b)return-1;for(;b.parentNode!=c;)b=b.parentNode;return gb(b,a)}function gb(a,b){for(;b=b.previousSibling;)if(b==a)return-1;return 1}function B(a){return 9==a.nodeType?a:a.ownerDocument||a.document}function ib(a,b){a&&(a=a.parentNode);for(var c=0;a;){if(b(a))return a;a=a.parentNode;c++}return null}
38
+ function cb(a){this.a=a||k.document||document}cb.prototype.getElementsByTagName=function(a,b){return(b||this.a).getElementsByTagName(String(a))};
39
+ function jb(a,b,c,d){a=d||a.a;var e=b&&"*"!=b?String(b).toUpperCase():"";if(a.querySelectorAll&&a.querySelector&&(e||c))c=a.querySelectorAll(e+(c?"."+c:""));else if(c&&a.getElementsByClassName)if(b=a.getElementsByClassName(c),e){a={};for(var f=d=0,g;g=b[f];f++)e==g.nodeName&&(a[d++]=g);a.length=d;c=a}else c=b;else if(b=a.getElementsByTagName(e||"*"),c){a={};for(f=d=0;g=b[f];f++){e=g.className;var h;if(h="function"==typeof e.split)h=0<=na(e.split(/\s+/),c);h&&(a[d++]=g)}a.length=d;c=a}else c=b;return c}
40
+ ;function C(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b||null==b?a.innerText:b,b=void 0==b||null==b?"":b);if("string"!=typeof b)if(y&&"title"==a.nodeName.toLowerCase()&&1==c)b=a.text;else if(9==c||1==c){a=9==c?a.documentElement:a.firstChild;c=0;var d=[];for(b="";a;){do 1!=a.nodeType&&(b+=a.nodeValue),y&&"title"==a.nodeName.toLowerCase()&&(b+=a.text),d[c++]=a;while(a=a.firstChild);for(;c&&!(a=d[--c].nextSibling););}}else b=a.nodeValue;return b}
41
+ function kb(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}catch(d){return!1}Sa&&"class"==b&&(b="className");return null==c?!!a.getAttribute(b):a.getAttribute(b,2)==c}function lb(a,b,c,d,e){return(y?mb:nb).call(null,a,b,aa(c)?c:null,aa(d)?d:null,e||new D)}
42
+ function mb(a,b,c,d,e){if(a instanceof ob||8==a.b||c&&null===a.b){var f=b.all;if(!f)return e;a=pb(a);if("*"!=a&&(f=b.getElementsByTagName(a),!f))return e;if(c){for(var g=[],h=0;b=f[h++];)kb(b,c,d)&&g.push(b);f=g}for(h=0;b=f[h++];)"*"==a&&"!"==b.tagName||e.add(b);return e}qb(a,b,c,d,e);return e}
43
+ function nb(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!w?(b=b.getElementsByName(d),q(b,function(f){a.a(f)&&e.add(f)})):b.getElementsByClassName&&d&&"class"==c?(b=b.getElementsByClassName(d),q(b,function(f){f.className==d&&a.a(f)&&e.add(f)})):a instanceof E?qb(a,b,c,d,e):b.getElementsByTagName&&(b=b.getElementsByTagName(a.f()),q(b,function(f){kb(f,c,d)&&e.add(f)}));return e}
44
+ function rb(a,b,c,d,e){var f;if((a instanceof ob||8==a.b||c&&null===a.b)&&(f=b.childNodes)){var g=pb(a);if("*"!=g&&(f=oa(f,function(h){return h.tagName&&h.tagName.toLowerCase()==g}),!f))return e;c&&(f=oa(f,function(h){return kb(h,c,d)}));q(f,function(h){"*"==g&&("!"==h.tagName||"*"==g&&1!=h.nodeType)||e.add(h)});return e}return sb(a,b,c,d,e)}function sb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)kb(b,c,d)&&a.a(b)&&e.add(b);return e}
45
+ function qb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)kb(b,c,d)&&a.a(b)&&e.add(b),qb(a,b,c,d,e)}function pb(a){if(a instanceof E){if(8==a.b)return"!";if(null===a.b)return"*"}return a.f()};function D(){this.b=this.a=null;this.m=0}function tb(a){this.f=a;this.a=this.b=null}function ub(a,b){if(!a.a)return b;if(!b.a)return a;var c=a.a;b=b.a;for(var d=null,e,f=0;c&&b;){e=c.f;var g=b.f;e==g||e instanceof Ta&&g instanceof Ta&&e.a==g.a?(e=c,c=c.a,b=b.a):0<fb(c.f,b.f)?(e=b,b=b.a):(e=c,c=c.a);(e.b=d)?d.a=e:a.a=e;d=e;f++}for(e=c||b;e;)e.b=d,d=d.a=e,f++,e=e.a;a.b=d;a.m=f;return a}function vb(a,b){b=new tb(b);b.a=a.a;a.b?a.a.b=b:a.a=a.b=b;a.a=b;a.m++}
46
+ D.prototype.add=function(a){a=new tb(a);a.b=this.b;this.a?this.b.a=a:this.a=this.b=a;this.b=a;this.m++};function wb(a){return(a=a.a)?a.f:null}function xb(a){return(a=wb(a))?C(a):""}function yb(a,b){return new zb(a,!!b)}function zb(a,b){this.f=a;this.b=(this.v=b)?a.b:a.a;this.a=null}function F(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.v?b.b:b.a;return c.f};function H(a){this.i=a;this.b=this.g=!1;this.f=null}function I(a){return"\n "+a.toString().split("\n").join("\n ")}function Ab(a,b){a.g=b}function Bb(a,b){a.b=b}function J(a,b){a=a.a(b);return a instanceof D?+xb(a):+a}function K(a,b){a=a.a(b);return a instanceof D?xb(a):""+a}function Cb(a,b){a=a.a(b);return a instanceof D?!!a.m:!!a};function Db(a,b,c){H.call(this,a.i);this.c=a;this.h=b;this.u=c;this.g=b.g||c.g;this.b=b.b||c.b;this.c==Eb&&(c.b||c.g||4==c.i||0==c.i||!b.f?b.b||b.g||4==b.i||0==b.i||!c.f||(this.f={name:c.f.name,A:b}):this.f={name:b.f.name,A:c})}l(Db,H);
47
+ function Gb(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof D&&c instanceof D){b=yb(b);for(d=F(b);d;d=F(b))for(e=yb(c),f=F(e);f;f=F(e))if(a(C(d),C(f)))return!0;return!1}if(b instanceof D||c instanceof D){b instanceof D?(e=b,d=c):(e=c,d=b);f=yb(e);for(var g=typeof d,h=F(f);h;h=F(f)){switch(g){case "number":h=+C(h);break;case "boolean":h=!!C(h);break;case "string":h=C(h);break;default:throw Error("Illegal primitive type for comparison.");}if(e==b&&a(h,d)||e==c&&a(d,h))return!0}return!1}return e?
48
+ "boolean"==typeof b||"boolean"==typeof c?a(!!b,!!c):"number"==typeof b||"number"==typeof c?a(+b,+c):a(b,c):a(+b,+c)}Db.prototype.a=function(a){return this.c.s(this.h,this.u,a)};Db.prototype.toString=function(){var a="Binary Expression: "+this.c;a+=I(this.h);return a+=I(this.u)};function Hb(a,b,c,d){this.Z=a;this.M=b;this.i=c;this.s=d}Hb.prototype.toString=function(){return this.Z};var Ib={};
49
+ function L(a,b,c,d){if(Ib.hasOwnProperty(a))throw Error("Binary operator already created: "+a);a=new Hb(a,b,c,d);return Ib[a.toString()]=a}L("div",6,1,function(a,b,c){return J(a,c)/J(b,c)});L("mod",6,1,function(a,b,c){return J(a,c)%J(b,c)});L("*",6,1,function(a,b,c){return J(a,c)*J(b,c)});L("+",5,1,function(a,b,c){return J(a,c)+J(b,c)});L("-",5,1,function(a,b,c){return J(a,c)-J(b,c)});L("<",4,2,function(a,b,c){return Gb(function(d,e){return d<e},a,b,c)});
50
+ L(">",4,2,function(a,b,c){return Gb(function(d,e){return d>e},a,b,c)});L("<=",4,2,function(a,b,c){return Gb(function(d,e){return d<=e},a,b,c)});L(">=",4,2,function(a,b,c){return Gb(function(d,e){return d>=e},a,b,c)});var Eb=L("=",3,2,function(a,b,c){return Gb(function(d,e){return d==e},a,b,c,!0)});L("!=",3,2,function(a,b,c){return Gb(function(d,e){return d!=e},a,b,c,!0)});L("and",2,2,function(a,b,c){return Cb(a,c)&&Cb(b,c)});L("or",1,2,function(a,b,c){return Cb(a,c)||Cb(b,c)});function Jb(a,b){if(b.a.length&&4!=a.i)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");H.call(this,a.i);this.c=a;this.h=b;this.g=a.g;this.b=a.b}l(Jb,H);Jb.prototype.a=function(a){a=this.c.a(a);return Kb(this.h,a)};Jb.prototype.toString=function(){var a="Filter:"+I(this.c);return a+=I(this.h)};function Lb(a,b){if(b.length<a.L)throw Error("Function "+a.l+" expects at least"+a.L+" arguments, "+b.length+" given");if(null!==a.G&&b.length>a.G)throw Error("Function "+a.l+" expects at most "+a.G+" arguments, "+b.length+" given");a.Y&&q(b,function(c,d){if(4!=c.i)throw Error("Argument "+d+" to function "+a.l+" is not of type Nodeset: "+c);});H.call(this,a.i);this.C=a;this.c=b;Ab(this,a.g||ra(b,function(c){return c.g}));Bb(this,a.X&&!b.length||a.W&&!!b.length||ra(b,function(c){return c.b}))}
51
+ l(Lb,H);Lb.prototype.a=function(a){return this.C.s.apply(null,ua(a,this.c))};Lb.prototype.toString=function(){var a="Function: "+this.C;if(this.c.length){var b=qa(this.c,function(c,d){return c+I(d)},"Arguments:");a+=I(b)}return a};function Mb(a,b,c,d,e,f,g,h){this.l=a;this.i=b;this.g=c;this.X=d;this.W=!1;this.s=e;this.L=f;this.G=void 0!==g?g:f;this.Y=!!h}Mb.prototype.toString=function(){return this.l};var Nb={};
52
+ function M(a,b,c,d,e,f,g,h){if(Nb.hasOwnProperty(a))throw Error("Function already created: "+a+".");Nb[a]=new Mb(a,b,c,d,e,f,g,h)}M("boolean",2,!1,!1,function(a,b){return Cb(b,a)},1);M("ceiling",1,!1,!1,function(a,b){return Math.ceil(J(b,a))},1);M("concat",3,!1,!1,function(a,b){return qa(va(arguments,1),function(c,d){return c+K(d,a)},"")},2,null);M("contains",2,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);return a=-1!=b.indexOf(a)},2);M("count",1,!1,!1,function(a,b){return b.a(a).m},1,1,!0);
53
+ M("false",2,!1,!1,function(){return!1},0);M("floor",1,!1,!1,function(a,b){return Math.floor(J(b,a))},1);M("id",4,!1,!1,function(a,b){function c(h){if(y){var n=e.all[h];if(n){if(n.nodeType&&h==n.id)return n;if(n.length)return ta(n,function(t){return h==t.id})}return null}return e.getElementById(h)}var d=a.a,e=9==d.nodeType?d:d.ownerDocument;a=K(b,a).split(/\s+/);var f=[];q(a,function(h){h=c(h);!h||0<=na(f,h)||f.push(h)});f.sort(fb);var g=new D;q(f,function(h){g.add(h)});return g},1);
54
+ M("lang",2,!1,!1,function(){return!1},1);M("last",1,!0,!1,function(a){if(1!=arguments.length)throw Error("Function last expects ()");return a.f},0);M("local-name",3,!1,!0,function(a,b){return(a=b?wb(b.a(a)):a.a)?a.localName||a.nodeName.toLowerCase():""},0,1,!0);M("name",3,!1,!0,function(a,b){return(a=b?wb(b.a(a)):a.a)?a.nodeName.toLowerCase():""},0,1,!0);M("namespace-uri",3,!0,!1,function(){return""},0,1,!0);
55
+ M("normalize-space",3,!1,!0,function(a,b){return(b?K(b,a):C(a.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")},0,1);M("not",2,!1,!1,function(a,b){return!Cb(b,a)},1);M("number",1,!1,!0,function(a,b){return b?J(b,a):+C(a.a)},0,1);M("position",1,!0,!1,function(a){return a.b},0);M("round",1,!1,!1,function(a,b){return Math.round(J(b,a))},1);M("starts-with",2,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);return 0==b.lastIndexOf(a,0)},2);M("string",3,!1,!0,function(a,b){return b?K(b,a):C(a.a)},0,1);
56
+ M("string-length",1,!1,!0,function(a,b){return(b?K(b,a):C(a.a)).length},0,1);M("substring",3,!1,!1,function(a,b,c,d){c=J(c,a);if(isNaN(c)||Infinity==c||-Infinity==c)return"";d=d?J(d,a):Infinity;if(isNaN(d)||-Infinity===d)return"";c=Math.round(c)-1;var e=Math.max(c,0);a=K(b,a);return Infinity==d?a.substring(e):a.substring(e,c+Math.round(d))},2,3);M("substring-after",3,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);c=b.indexOf(a);return-1==c?"":b.substring(c+a.length)},2);
57
+ M("substring-before",3,!1,!1,function(a,b,c){b=K(b,a);a=K(c,a);a=b.indexOf(a);return-1==a?"":b.substring(0,a)},2);M("sum",1,!1,!1,function(a,b){a=yb(b.a(a));b=0;for(var c=F(a);c;c=F(a))b+=+C(c);return b},1,1,!0);M("translate",3,!1,!1,function(a,b,c,d){b=K(b,a);c=K(c,a);var e=K(d,a);a={};for(d=0;d<c.length;d++){var f=c.charAt(d);f in a||(a[f]=e.charAt(d))}c="";for(d=0;d<b.length;d++)f=b.charAt(d),c+=f in a?a[f]:f;return c},3);M("true",2,!1,!1,function(){return!0},0);function E(a,b){this.h=a;this.c=void 0!==b?b:null;this.b=null;switch(a){case "comment":this.b=8;break;case "text":this.b=3;break;case "processing-instruction":this.b=7;break;case "node":break;default:throw Error("Unexpected argument");}}function Ob(a){return"comment"==a||"text"==a||"processing-instruction"==a||"node"==a}E.prototype.a=function(a){return null===this.b||this.b==a.nodeType};E.prototype.f=function(){return this.h};
58
+ E.prototype.toString=function(){var a="Kind Test: "+this.h;null===this.c||(a+=I(this.c));return a};function Pb(a){H.call(this,3);this.c=a.substring(1,a.length-1)}l(Pb,H);Pb.prototype.a=function(){return this.c};Pb.prototype.toString=function(){return"Literal: "+this.c};function ob(a,b){this.l=a.toLowerCase();a="*"==this.l?"*":"http://www.w3.org/1999/xhtml";this.c=b?b.toLowerCase():a}ob.prototype.a=function(a){var b=a.nodeType;if(1!=b&&2!=b)return!1;b=void 0!==a.localName?a.localName:a.nodeName;return"*"!=this.l&&this.l!=b.toLowerCase()?!1:"*"==this.c?!0:this.c==(a.namespaceURI?a.namespaceURI.toLowerCase():"http://www.w3.org/1999/xhtml")};ob.prototype.f=function(){return this.l};
59
+ ob.prototype.toString=function(){return"Name Test: "+("http://www.w3.org/1999/xhtml"==this.c?"":this.c+":")+this.l};function Qb(a){H.call(this,1);this.c=a}l(Qb,H);Qb.prototype.a=function(){return this.c};Qb.prototype.toString=function(){return"Number: "+this.c};function Rb(a,b){H.call(this,a.i);this.h=a;this.c=b;this.g=a.g;this.b=a.b;1==this.c.length&&(a=this.c[0],a.F||a.c!=Sb||(a=a.u,"*"!=a.f()&&(this.f={name:a.f(),A:null})))}l(Rb,H);function Tb(){H.call(this,4)}l(Tb,H);Tb.prototype.a=function(a){var b=new D;a=a.a;9==a.nodeType?b.add(a):b.add(a.ownerDocument);return b};Tb.prototype.toString=function(){return"Root Helper Expression"};function Ub(){H.call(this,4)}l(Ub,H);Ub.prototype.a=function(a){var b=new D;b.add(a.a);return b};Ub.prototype.toString=function(){return"Context Helper Expression"};
60
+ function Vb(a){return"/"==a||"//"==a}Rb.prototype.a=function(a){var b=this.h.a(a);if(!(b instanceof D))throw Error("Filter expression must evaluate to nodeset.");a=this.c;for(var c=0,d=a.length;c<d&&b.m;c++){var e=a[c],f=yb(b,e.c.v);if(e.g||e.c!=Wb)if(e.g||e.c!=Xb){var g=F(f);for(b=e.a(new la(g));null!=(g=F(f));)g=e.a(new la(g)),b=ub(b,g)}else g=F(f),b=e.a(new la(g));else{for(g=F(f);(b=F(f))&&(!g.contains||g.contains(b))&&b.compareDocumentPosition(g)&8;g=b);b=e.a(new la(g))}}return b};
61
+ Rb.prototype.toString=function(){var a="Path Expression:"+I(this.h);if(this.c.length){var b=qa(this.c,function(c,d){return c+I(d)},"Steps:");a+=I(b)}return a};function Yb(a,b){this.a=a;this.v=!!b}
62
+ function Kb(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=yb(b),f=b.m,g,h=0;g=F(e);h++){var n=a.v?f-h:h+1;g=d.a(new la(g,n,f));if("number"==typeof g)n=n==g;else if("string"==typeof g||"boolean"==typeof g)n=!!g;else if(g instanceof D)n=0<g.m;else throw Error("Predicate.evaluate returned an unexpected type.");if(!n){n=e;g=n.f;var t=n.a;if(!t)throw Error("Next must be called at least once before remove.");var p=t.b;t=t.a;p?p.a=t:g.a=t;t?t.b=p:g.b=p;g.m--;n.a=null}}return b}
63
+ Yb.prototype.toString=function(){return qa(this.a,function(a,b){return a+I(b)},"Predicates:")};function Zb(a,b,c,d){H.call(this,4);this.c=a;this.u=b;this.h=c||new Yb([]);this.F=!!d;b=this.h;b=0<b.a.length?b.a[0].f:null;a.aa&&b&&(a=b.name,a=y?a.toLowerCase():a,this.f={name:a,A:b.A});a:{a=this.h;for(b=0;b<a.a.length;b++)if(c=a.a[b],c.g||1==c.i||0==c.i){a=!0;break a}a=!1}this.g=a}l(Zb,H);
64
+ Zb.prototype.a=function(a){var b=a.a,c=this.f,d=null,e=null,f=0;c&&(d=c.name,e=c.A?K(c.A,a):null,f=1);if(this.F)if(this.g||this.c!=$b)if(b=yb((new Zb(ac,new E("node"))).a(a)),c=F(b))for(a=this.s(c,d,e,f);null!=(c=F(b));)a=ub(a,this.s(c,d,e,f));else a=new D;else a=lb(this.u,b,d,e),a=Kb(this.h,a,f);else a=this.s(a.a,d,e,f);return a};Zb.prototype.s=function(a,b,c,d){a=this.c.C(this.u,a,b,c);return a=Kb(this.h,a,d)};
65
+ Zb.prototype.toString=function(){var a="Step:"+I("Operator: "+(this.F?"//":"/"));this.c.l&&(a+=I("Axis: "+this.c));a+=I(this.u);if(this.h.a.length){var b=qa(this.h.a,function(c,d){return c+I(d)},"Predicates:");a+=I(b)}return a};function bc(a,b,c,d){this.l=a;this.C=b;this.v=c;this.aa=d}bc.prototype.toString=function(){return this.l};var cc={};function N(a,b,c,d){if(cc.hasOwnProperty(a))throw Error("Axis already created: "+a);b=new bc(a,b,c,!!d);return cc[a]=b}
66
+ N("ancestor",function(a,b){for(var c=new D;b=b.parentNode;)a.a(b)&&vb(c,b);return c},!0);N("ancestor-or-self",function(a,b){var c=new D;do a.a(b)&&vb(c,b);while(b=b.parentNode);return c},!0);
67
+ var Sb=N("attribute",function(a,b){var c=new D,d=a.f();if("style"==d&&y&&b.style)return c.add(new Ta(b.style,b,"style",b.style.cssText)),c;var e=b.attributes;if(e)if(a instanceof E&&null===a.b||"*"==d)for(a=0;d=e[a];a++)y?d.nodeValue&&c.add(Ua(b,d)):c.add(d);else(d=e.getNamedItem(d))&&(y?d.nodeValue&&c.add(Ua(b,d)):c.add(d));return c},!1),$b=N("child",function(a,b,c,d,e){return(y?rb:sb).call(null,a,b,aa(c)?c:null,aa(d)?d:null,e||new D)},!1,!0);N("descendant",lb,!1,!0);
68
+ var ac=N("descendant-or-self",function(a,b,c,d){var e=new D;kb(b,c,d)&&a.a(b)&&e.add(b);return lb(a,b,c,d,e)},!1,!0),Wb=N("following",function(a,b,c,d){var e=new D;do for(var f=b;f=f.nextSibling;)kb(f,c,d)&&a.a(f)&&e.add(f),e=lb(a,f,c,d,e);while(b=b.parentNode);return e},!1,!0);N("following-sibling",function(a,b){for(var c=new D;b=b.nextSibling;)a.a(b)&&c.add(b);return c},!1);N("namespace",function(){return new D},!1);
69
+ var dc=N("parent",function(a,b){var c=new D;if(9==b.nodeType)return c;if(2==b.nodeType)return c.add(b.ownerElement),c;b=b.parentNode;a.a(b)&&c.add(b);return c},!1),Xb=N("preceding",function(a,b,c,d){var e=new D,f=[];do f.unshift(b);while(b=b.parentNode);for(var g=1,h=f.length;g<h;g++){var n=[];for(b=f[g];b=b.previousSibling;)n.unshift(b);for(var t=0,p=n.length;t<p;t++)b=n[t],kb(b,c,d)&&a.a(b)&&e.add(b),e=lb(a,b,c,d,e)}return e},!0,!0);
70
+ N("preceding-sibling",function(a,b){for(var c=new D;b=b.previousSibling;)a.a(b)&&vb(c,b);return c},!0);var ec=N("self",function(a,b){var c=new D;a.a(b)&&c.add(b);return c},!1);function fc(a){H.call(this,1);this.c=a;this.g=a.g;this.b=a.b}l(fc,H);fc.prototype.a=function(a){return-J(this.c,a)};fc.prototype.toString=function(){return"Unary Expression: -"+I(this.c)};function gc(a){H.call(this,4);this.c=a;Ab(this,ra(this.c,function(b){return b.g}));Bb(this,ra(this.c,function(b){return b.b}))}l(gc,H);gc.prototype.a=function(a){var b=new D;q(this.c,function(c){c=c.a(a);if(!(c instanceof D))throw Error("Path expression must evaluate to NodeSet.");b=ub(b,c)});return b};gc.prototype.toString=function(){return qa(this.c,function(a,b){return a+I(b)},"Union Expression:")};function hc(a,b){this.a=a;this.b=b}function ic(a){for(var b,c=[];;){O(a,"Missing right hand side of binary expression.");b=jc(a);var d=A(a.a);if(!d)break;var e=(d=Ib[d]||null)&&d.M;if(!e){a.a.a--;break}for(;c.length&&e<=c[c.length-1].M;)b=new Db(c.pop(),c.pop(),b);c.push(b,d)}for(;c.length;)b=new Db(c.pop(),c.pop(),b);return b}function O(a,b){if(Za(a.a))throw Error(b);}function kc(a,b){a=A(a.a);if(a!=b)throw Error("Bad token, expected: "+b+" got: "+a);}
71
+ function lc(a){a=A(a.a);if(")"!=a)throw Error("Bad token: "+a);}function mc(a){a=A(a.a);if(2>a.length)throw Error("Unclosed literal string");return new Pb(a)}
72
+ function nc(a){var b=[];if(Vb(z(a.a))){var c=A(a.a);var d=z(a.a);if("/"==c&&(Za(a.a)||"."!=d&&".."!=d&&"@"!=d&&"*"!=d&&!/(?![0-9])[\w]/.test(d)))return new Tb;d=new Tb;O(a,"Missing next location step.");c=oc(a,c);b.push(c)}else{a:{c=z(a.a);d=c.charAt(0);switch(d){case "$":throw Error("Variable reference not allowed in HTML XPath");case "(":A(a.a);c=ic(a);O(a,'unclosed "("');kc(a,")");break;case '"':case "'":c=mc(a);break;default:if(isNaN(+c))if(!Ob(c)&&/(?![0-9])[\w]/.test(d)&&"("==z(a.a,1)){c=A(a.a);
73
+ c=Nb[c]||null;A(a.a);for(d=[];")"!=z(a.a);){O(a,"Missing function argument list.");d.push(ic(a));if(","!=z(a.a))break;A(a.a)}O(a,"Unclosed function argument list.");lc(a);c=new Lb(c,d)}else{c=null;break a}else c=new Qb(+A(a.a))}"["==z(a.a)&&(d=new Yb(pc(a)),c=new Jb(c,d))}if(c)if(Vb(z(a.a)))d=c;else return c;else c=oc(a,"/"),d=new Ub,b.push(c)}for(;Vb(z(a.a));)c=A(a.a),O(a,"Missing next location step."),c=oc(a,c),b.push(c);return new Rb(d,b)}
74
+ function oc(a,b){if("/"!=b&&"//"!=b)throw Error('Step op should be "/" or "//"');if("."==z(a.a)){var c=new Zb(ec,new E("node"));A(a.a);return c}if(".."==z(a.a))return c=new Zb(dc,new E("node")),A(a.a),c;if("@"==z(a.a)){var d=Sb;A(a.a);O(a,"Missing attribute name")}else if("::"==z(a.a,1)){if(!/(?![0-9])[\w]/.test(z(a.a).charAt(0)))throw Error("Bad token: "+A(a.a));var e=A(a.a);d=cc[e]||null;if(!d)throw Error("No axis with name: "+e);A(a.a);O(a,"Missing node name")}else d=$b;e=z(a.a);if(/(?![0-9])[\w\*]/.test(e.charAt(0)))if("("==
75
+ z(a.a,1)){if(!Ob(e))throw Error("Invalid node type: "+e);e=A(a.a);if(!Ob(e))throw Error("Invalid type name: "+e);kc(a,"(");O(a,"Bad nodetype");var f=z(a.a).charAt(0),g=null;if('"'==f||"'"==f)g=mc(a);O(a,"Bad nodetype");lc(a);e=new E(e,g)}else if(e=A(a.a),f=e.indexOf(":"),-1==f)e=new ob(e);else{g=e.substring(0,f);if("*"==g)var h="*";else if(h=a.b(g),!h)throw Error("Namespace prefix not declared: "+g);e=e.substr(f+1);e=new ob(e,h)}else throw Error("Bad token: "+A(a.a));a=new Yb(pc(a),d.v);return c||
76
+ new Zb(d,e,a,"//"==b)}function pc(a){for(var b=[];"["==z(a.a);){A(a.a);O(a,"Missing predicate expression.");var c=ic(a);b.push(c);O(a,"Unclosed predicate expression.");kc(a,"]")}return b}function jc(a){if("-"==z(a.a))return A(a.a),new fc(jc(a));var b=nc(a);if("|"!=z(a.a))a=b;else{for(b=[b];"|"==A(a.a);)O(a,"Missing next union location path."),b.push(nc(a));a.a.a--;a=new gc(b)}return a};function qc(a){switch(a.nodeType){case 1:return ka(rc,a);case 9:return qc(a.documentElement);case 11:case 10:case 6:case 12:return sc;default:return a.parentNode?qc(a.parentNode):sc}}function sc(){return null}function rc(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.org/1999/xhtml";var c=a.getAttributeNode("xmlns:"+b);return c&&c.specified?c.value||null:a.parentNode&&9!=a.parentNode.nodeType?rc(a.parentNode,b):null};function vc(a,b){if(!a.length)throw Error("Empty XPath expression.");a=Wa(a);if(Za(a))throw Error("Invalid XPath expression.");b?da(b)||(b=ja(b.lookupNamespaceURI,b)):b=function(){return null};var c=ic(new hc(a,b));if(!Za(a))throw Error("Bad token: "+A(a));this.evaluate=function(d,e){d=c.a(new la(d));return new P(d,e)}}
77
+ function P(a,b){if(0==b)if(a instanceof D)b=4;else if("string"==typeof a)b=2;else if("number"==typeof a)b=1;else if("boolean"==typeof a)b=3;else throw Error("Unexpected evaluation result.");if(2!=b&&1!=b&&3!=b&&!(a instanceof D))throw Error("value could not be converted to the specified type");this.resultType=b;switch(b){case 2:this.stringValue=a instanceof D?xb(a):""+a;break;case 1:this.numberValue=a instanceof D?+xb(a):+a;break;case 3:this.booleanValue=a instanceof D?0<a.m:!!a;break;case 4:case 5:case 6:case 7:var c=
78
+ yb(a);var d=[];for(var e=F(c);e;e=F(c))d.push(e instanceof Ta?e.a:e);this.snapshotLength=a.m;this.invalidIteratorState=!1;break;case 8:case 9:a=wb(a);this.singleNodeValue=a instanceof Ta?a.a:a;break;default:throw Error("Unknown XPathResult type.");}var f=0;this.iterateNext=function(){if(4!=b&&5!=b)throw Error("iterateNext called with wrong result type");return f>=d.length?null:d[f++]};this.snapshotItem=function(g){if(6!=b&&7!=b)throw Error("snapshotItem called with wrong result type");return g>=d.length||
79
+ 0>g?null:d[g]}}P.ANY_TYPE=0;P.NUMBER_TYPE=1;P.STRING_TYPE=2;P.BOOLEAN_TYPE=3;P.UNORDERED_NODE_ITERATOR_TYPE=4;P.ORDERED_NODE_ITERATOR_TYPE=5;P.UNORDERED_NODE_SNAPSHOT_TYPE=6;P.ORDERED_NODE_SNAPSHOT_TYPE=7;P.ANY_UNORDERED_NODE_TYPE=8;P.FIRST_ORDERED_NODE_TYPE=9;function wc(a){this.lookupNamespaceURI=qc(a)}
80
+ function xc(a,b){a=a||k;var c=a.Document&&a.Document.prototype||a.document;if(!c.evaluate||b)a.XPathResult=P,c.evaluate=function(d,e,f,g){return(new vc(d,f)).evaluate(e,g)},c.createExpression=function(d,e){return new vc(d,e)},c.createNSResolver=function(d){return new wc(d)}}ba("wgxpath.install",xc);ba("wgxpath.install",xc);var yc=window;function Q(a,b){this.code=a;this.a=S[a]||zc;this.message=b||"";a=this.a.replace(/((?:^|\s+)[a-z])/g,function(c){return c.toUpperCase().replace(/^[\s\xa0]+/g,"")});b=a.length-5;if(0>b||a.indexOf("Error",b)!=b)a+="Error";this.name=a;a=Error(this.message);a.name=this.name;this.stack=a.stack||""}l(Q,Error);var zc="unknown error",S={15:"element not selectable",11:"element not visible"};S[31]=zc;S[30]=zc;S[24]="invalid cookie domain";S[29]="invalid element coordinates";S[12]="invalid element state";
81
+ S[32]="invalid selector";S[51]="invalid selector";S[52]="invalid selector";S[17]="javascript error";S[405]="unsupported operation";S[34]="move target out of bounds";S[27]="no such alert";S[7]="no such element";S[8]="no such frame";S[23]="no such window";S[28]="script timeout";S[33]="session not created";S[10]="stale element reference";S[21]="timeout";S[25]="unable to set cookie";S[26]="unexpected alert open";S[13]=zc;S[9]="unknown command";var Ac={B:function(a){return!(!a.querySelectorAll||!a.querySelector)},o:function(a,b){if(!a)throw new Q(32,"No class name specified");a=xa(a);if(-1!==a.indexOf(" "))throw new Q(32,"Compound class names not permitted");if(Ac.B(b))try{return b.querySelector("."+a.replace(/\./g,"\\."))||null}catch(c){throw new Q(32,"An invalid or illegal class name was specified");}a=jb(bb(b),"*",a,b);return a.length?a[0]:null},j:function(a,b){if(!a)throw new Q(32,"No class name specified");a=xa(a);if(-1!==a.indexOf(" "))throw new Q(32,
82
+ "Compound class names not permitted");if(Ac.B(b))try{return b.querySelectorAll("."+a.replace(/\./g,"\\."))}catch(c){throw new Q(32,"An invalid or illegal class name was specified");}return jb(bb(b),"*",a,b)}};var Bc=Ca(),Cc=Fa()||v("iPod"),Dc=v("iPad"),Ec=v("Android")&&!(Da()||Ca()||v("Opera")||v("Silk")),Fc=Da(),Gc=v("Safari")&&!(Da()||v("Coast")||v("Opera")||v("Edge")||v("Edg/")||v("OPR")||Ca()||v("Silk")||v("Android"))&&!(Fa()||v("iPad")||v("iPod"));function Hc(a){return(a=a.exec(r))?a[1]:""}(function(){if(Bc)return Hc(/Firefox\/([0-9.]+)/);if(w||Ja||Ia)return Na;if(Fc)return Fa()||v("iPad")||v("iPod")?Hc(/CriOS\/([0-9.]+)/):Hc(/Chrome\/([0-9.]+)/);if(Gc&&!(Fa()||v("iPad")||v("iPod")))return Hc(/Version\/([0-9.]+)/);if(Cc||Dc){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(r);if(a)return a[1]+"."+a[2]}else if(Ec)return(a=Hc(/Android\s+([0-9.]+)/))?a:Hc(/Version\/([0-9.]+)/);return""})();var Ic,Jc,Kc=function(){if(!Ka)return!1;var a=k.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(f){return!1}var b=a.classes;a=a.interfaces;var c=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator);b=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo);var d=b.platformVersion,e=b.version;Ic=function(){return 0<=c.compare(d,"8")};Jc=function(f){c.compare(e,""+f)};return!0}(),Lc=w&&!(8<=Number(x)),Mc=w&&!(9<=Number(x));Ec&&Kc&&Jc(2.3);Ec&&Kc&&Jc(4);
83
+ Gc&&Kc&&Jc(6);var Nc={o:function(a,b){if(!da(b.querySelector)&&w&&(Kc?Ic():w?0<=ya(x,8):Ra(8))&&!ea(b.querySelector))throw Error("CSS selection is not supported");if(!a)throw new Q(32,"No selector specified");a=xa(a);try{var c=b.querySelector(a)}catch(d){throw new Q(32,"An invalid or illegal selector was specified");}return c&&1==c.nodeType?c:null},j:function(a,b){if(!da(b.querySelectorAll)&&w&&(Kc?Ic():w?0<=ya(x,8):Ra(8))&&!ea(b.querySelector))throw Error("CSS selection is not supported");if(!a)throw new Q(32,
84
+ "No selector specified");a=xa(a);try{return b.querySelectorAll(a)}catch(c){throw new Q(32,"An invalid or illegal selector was specified");}}};var Oc={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",
85
+ darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",
86
+ ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",
87
+ lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",
88
+ moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",
89
+ seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var Pc="backgroundColor borderTopColor borderRightColor borderBottomColor borderLeftColor color outlineColor".split(" "),Qc=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/,Rc=/^#(?:[0-9a-f]{3}){1,2}$/i,Sc=/^(?:rgba)?\((\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3}),\s?(0|1|0\.\d*)\)$/i,Tc=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;function Uc(a,b){b=b.toLowerCase();return"style"==b?Vc(a.style.cssText):Lc&&"value"==b&&T(a,"INPUT")?a.value:Mc&&!0===a[b]?String(a.getAttribute(b)):(a=a.getAttributeNode(b))&&a.specified?a.value:null}var Wc=/[;]+(?=(?:(?:[^"]*"){2})*[^"]*$)(?=(?:(?:[^']*'){2})*[^']*$)(?=(?:[^()]*\([^()]*\))*[^()]*$)/;
90
+ function Vc(a){var b=[];q(a.split(Wc),function(c){var d=c.indexOf(":");0<d&&(c=[c.slice(0,d),c.slice(d+1)],2==c.length&&b.push(c[0].toLowerCase(),":",c[1],";"))});b=b.join("");return b=";"==b.charAt(b.length-1)?b:b+";"}function T(a,b){b&&"string"!==typeof b&&(b=b.toString());return!!a&&1==a.nodeType&&(!b||a.tagName.toUpperCase()==b)};var U={};U.I=function(){var a={ba:"http://www.w3.org/2000/svg"};return function(b){return a[b]||null}}();
91
+ U.s=function(a,b,c){var d=B(a);if(!d.documentElement)return null;(w||Ec)&&xc(d?d.parentWindow||d.defaultView:window);try{var e=d.createNSResolver?d.createNSResolver(d.documentElement):U.I;if(w&&!Ra(7))return d.evaluate.call(d,b,a,e,c,null);if(!w||9<=Number(x)){for(var f={},g=d.getElementsByTagName("*"),h=0;h<g.length;++h){var n=g[h],t=n.namespaceURI;if(t&&!f[t]){var p=n.lookupPrefix(t);if(!p){var G=t.match(".*/(\\w+)/?$");p=G?G[1]:"xhtml"}f[t]=p}}var R={},fa;for(fa in f)R[f[fa]]=fa;e=function(m){return R[m]||
92
+ null}}try{return d.evaluate(b,a,e,c,null)}catch(m){if("TypeError"===m.name)return e=d.createNSResolver?d.createNSResolver(d.documentElement):U.I,d.evaluate(b,a,e,c,null);throw m;}}catch(m){if(!Ka||"NS_ERROR_ILLEGAL_VALUE"!=m.name)throw new Q(32,"Unable to locate an element with the xpath expression "+b+" because of the following error:\n"+m);}};U.J=function(a,b){if(!a||1!=a.nodeType)throw new Q(32,'The result of the xpath expression "'+b+'" is: '+a+". It should be an element.");};
93
+ U.o=function(a,b){var c=function(){var d=U.s(b,a,9);return d?d.singleNodeValue||null:b.selectSingleNode?(d=B(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectSingleNode(a)):null}();null===c||U.J(c,a);return c};
94
+ U.j=function(a,b){var c=function(){var d=U.s(b,a,7);if(d){for(var e=d.snapshotLength,f=[],g=0;g<e;++g)f.push(d.snapshotItem(g));return f}return b.selectNodes?(d=B(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectNodes(a)):[]}();q(c,function(d){U.J(d,a)});return c};function Xc(a,b,c,d){this.c=a;this.a=b;this.b=c;this.f=d}Xc.prototype.ceil=function(){this.c=Math.ceil(this.c);this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.f=Math.ceil(this.f);return this};Xc.prototype.floor=function(){this.c=Math.floor(this.c);this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.f=Math.floor(this.f);return this};Xc.prototype.round=function(){this.c=Math.round(this.c);this.a=Math.round(this.a);this.b=Math.round(this.b);this.f=Math.round(this.f);return this};function V(a,b,c,d){this.a=a;this.b=b;this.width=c;this.height=d}V.prototype.ceil=function(){this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};V.prototype.floor=function(){this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};
95
+ V.prototype.round=function(){this.a=Math.round(this.a);this.b=Math.round(this.b);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Yc="function"===typeof ShadowRoot;function Zc(a){for(a=a.parentNode;a&&1!=a.nodeType&&9!=a.nodeType&&11!=a.nodeType;)a=a.parentNode;return T(a)?a:null}
96
+ function W(a,b){b=Ea(b);if("float"==b||"cssFloat"==b||"styleFloat"==b)b=Mc?"styleFloat":"cssFloat";a:{var c=b;var d=B(a);if(d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(a,null))){c=d[c]||d.getPropertyValue(c)||"";break a}c=""}a=c||$c(a,b);if(null===a)a=null;else if(0<=na(Pc,b)){b:{var e=a.match(Sc);if(e&&(b=Number(e[1]),c=Number(e[2]),d=Number(e[3]),e=Number(e[4]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d&&0<=e&&1>=e)){b=[b,c,d,e];break b}b=null}if(!b)b:{if(d=a.match(Tc))if(b=
97
+ Number(d[1]),c=Number(d[2]),d=Number(d[3]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d){b=[b,c,d,1];break b}b=null}if(!b)b:{b=a.toLowerCase();c=Oc[b.toLowerCase()];if(!c&&(c="#"==b.charAt(0)?b:"#"+b,4==c.length&&(c=c.replace(Qc,"#$1$1$2$2$3$3")),!Rc.test(c))){b=null;break b}b=[parseInt(c.substr(1,2),16),parseInt(c.substr(3,2),16),parseInt(c.substr(5,2),16),1]}a=b?"rgba("+b.join(", ")+")":a}return a}
98
+ function $c(a,b){var c=a.currentStyle||a.style,d=c[b];void 0===d&&da(c.getPropertyValue)&&(d=c.getPropertyValue(b));return"inherit"!=d?void 0!==d?d:null:(a=Zc(a))?$c(a,b):null}
99
+ function ad(a,b,c){function d(g){var h=bd(g);return 0<h.height&&0<h.width?!0:T(g,"PATH")&&(0<h.height||0<h.width)?(g=W(g,"stroke-width"),!!g&&0<parseInt(g,10)):"hidden"!=W(g,"overflow")&&ra(g.childNodes,function(n){return 3==n.nodeType||T(n)&&d(n)})}function e(g){return cd(g)==X&&sa(g.childNodes,function(h){return!T(h)||e(h)||!d(h)})}if(!T(a))throw Error("Argument to isShown must be of type Element");if(T(a,"BODY"))return!0;if(T(a,"OPTION")||T(a,"OPTGROUP"))return a=ib(a,function(g){return T(g,"SELECT")}),
100
+ !!a&&ad(a,!0,c);var f=dd(a);if(f)return!!f.image&&0<f.rect.width&&0<f.rect.height&&ad(f.image,b,c);if(T(a,"INPUT")&&"hidden"==a.type.toLowerCase()||T(a,"NOSCRIPT"))return!1;f=W(a,"visibility");return"collapse"!=f&&"hidden"!=f&&c(a)&&(b||0!=ed(a))&&d(a)?!e(a):!1}
101
+ function fd(a){function b(c){if(T(c)&&"none"==W(c,"display"))return!1;var d;if((d=c.parentNode)&&d.shadowRoot&&void 0!==c.assignedSlot)d=c.assignedSlot?c.assignedSlot.parentNode:null;else if(c.getDestinationInsertionPoints){var e=c.getDestinationInsertionPoints();0<e.length&&(d=e[e.length-1])}if(Yc&&d instanceof ShadowRoot){if(d.host.shadowRoot!==d)return!1;d=d.host}return!d||9!=d.nodeType&&11!=d.nodeType?d&&T(d,"DETAILS")&&!d.open&&!T(c,"SUMMARY")?!1:!!d&&b(d):!0}return ad(a,!1,b)}var X="hidden";
102
+ function cd(a){function b(m){function u(Fb){if(Fb==g)return!0;var tc=W(Fb,"display");return 0==tc.lastIndexOf("inline",0)||"contents"==tc||"absolute"==uc&&"static"==W(Fb,"position")?!1:!0}var uc=W(m,"position");if("fixed"==uc)return t=!0,m==g?null:g;for(m=Zc(m);m&&!u(m);)m=Zc(m);return m}function c(m){var u=m;if("visible"==n)if(m==g&&h)u=h;else if(m==h)return{x:"visible",y:"visible"};u={x:W(u,"overflow-x"),y:W(u,"overflow-y")};m==g&&(u.x="visible"==u.x?"auto":u.x,u.y="visible"==u.y?"auto":u.y);return u}
103
+ function d(m){if(m==g){var u=(new cb(f)).a;m=u.scrollingElement?u.scrollingElement:La||"CSS1Compat"!=u.compatMode?u.body||u.documentElement:u.documentElement;u=u.parentWindow||u.defaultView;m=w&&Ra("10")&&u.pageYOffset!=m.scrollTop?new $a(m.scrollLeft,m.scrollTop):new $a(u.pageXOffset||m.scrollLeft,u.pageYOffset||m.scrollTop)}else m=new $a(m.scrollLeft,m.scrollTop);return m}var e=gd(a),f=B(a),g=f.documentElement,h=f.body,n=W(g,"overflow"),t;for(a=b(a);a;a=b(a)){var p=c(a);if("visible"!=p.x||"visible"!=
104
+ p.y){var G=bd(a);if(0==G.width||0==G.height)return X;var R=e.a<G.a,fa=e.b<G.b;if(R&&"hidden"==p.x||fa&&"hidden"==p.y)return X;if(R&&"visible"!=p.x||fa&&"visible"!=p.y){R=d(a);fa=e.b<G.b-R.y;if(e.a<G.a-R.x&&"visible"!=p.x||fa&&"visible"!=p.x)return X;e=cd(a);return e==X?X:"scroll"}R=e.f>=G.a+G.width;G=e.c>=G.b+G.height;if(R&&"hidden"==p.x||G&&"hidden"==p.y)return X;if(R&&"visible"!=p.x||G&&"visible"!=p.y){if(t&&(p=d(a),e.f>=g.scrollWidth-p.x||e.a>=g.scrollHeight-p.y))return X;e=cd(a);return e==X?X:
105
+ "scroll"}}}return"none"}
106
+ function bd(a){var b=dd(a);if(b)return b.rect;if(T(a,"HTML"))return a=B(a),a=((a?a.parentWindow||a.defaultView:window)||window).document,a="CSS1Compat"==a.compatMode?a.documentElement:a.body,a=new ab(a.clientWidth,a.clientHeight),new V(0,0,a.width,a.height);try{var c=a.getBoundingClientRect()}catch(d){return new V(0,0,0,0)}b=new V(c.left,c.top,c.right-c.left,c.bottom-c.top);w&&a.ownerDocument.body&&(a=B(a),b.a-=a.documentElement.clientLeft+a.body.clientLeft,b.b-=a.documentElement.clientTop+a.body.clientTop);
107
+ return b}function dd(a){var b=T(a,"MAP");if(!b&&!T(a,"AREA"))return null;var c=b?a:T(a.parentNode,"MAP")?a.parentNode:null,d=null,e=null;c&&c.name&&(d=U.o('/descendant::*[@usemap = "#'+c.name+'"]',B(c)))&&(e=bd(d),b||"default"==a.shape.toLowerCase()||(a=hd(a),b=Math.min(Math.max(a.a,0),e.width),c=Math.min(Math.max(a.b,0),e.height),e=new V(b+e.a,c+e.b,Math.min(a.width,e.width-b),Math.min(a.height,e.height-c))));return{image:d,rect:e||new V(0,0,0,0)}}
108
+ function hd(a){var b=a.shape.toLowerCase();a=a.coords.split(",");if("rect"==b&&4==a.length){b=a[0];var c=a[1];return new V(b,c,a[2]-b,a[3]-c)}if("circle"==b&&3==a.length)return b=a[2],new V(a[0]-b,a[1]-b,2*b,2*b);if("poly"==b&&2<a.length){b=a[0];c=a[1];for(var d=b,e=c,f=2;f+1<a.length;f+=2)b=Math.min(b,a[f]),d=Math.max(d,a[f]),c=Math.min(c,a[f+1]),e=Math.max(e,a[f+1]);return new V(b,c,d-b,e-c)}return new V(0,0,0,0)}function gd(a){a=bd(a);return new Xc(a.b,a.a+a.width,a.b+a.height,a.a)}
109
+ function id(a){return a.replace(/^[^\S\xa0]+|[^\S\xa0]+$/g,"")}function jd(a){var b=[];Yc?kd(a,b):ld(a,b);a=pa(b,id);return id(a.join("\n")).replace(/\xa0/g," ")}
110
+ function md(a,b,c){if(T(a,"BR"))b.push("");else{var d=T(a,"TD"),e=W(a,"display"),f=!d&&!(0<=na(nd,e)),g=void 0!==a.previousElementSibling?a.previousElementSibling:db(a.previousSibling);g=g?W(g,"display"):"";var h=W(a,"float")||W(a,"cssFloat")||W(a,"styleFloat");!f||"run-in"==g&&"none"==h||/^[\s\xa0]*$/.test(b[b.length-1]||"")||b.push("");var n=fd(a),t=null,p=null;n&&(t=W(a,"white-space"),p=W(a,"text-transform"));q(a.childNodes,function(G){c(G,b,n,t,p)});a=b[b.length-1]||"";!d&&"table-cell"!=e||!a||
111
+ wa(a)||(b[b.length-1]+=" ");f&&"run-in"!=e&&!/^[\s\xa0]*$/.test(a)&&b.push("")}}function ld(a,b){md(a,b,function(c,d,e,f,g){3==c.nodeType&&e?od(c,d,f,g):T(c)&&ld(c,d)})}var nd="inline inline-block inline-table none table-cell table-column table-column-group".split(" ");
112
+ function od(a,b,c,d){a=a.nodeValue.replace(/[\u200b\u200e\u200f]/g,"");a=a.replace(/(\r\n|\r|\n)/g,"\n");if("normal"==c||"nowrap"==c)a=a.replace(/\n/g," ");a="pre"==c||"pre-wrap"==c?a.replace(/[ \f\t\v\u2028\u2029]/g,"\u00a0"):a.replace(/[ \f\t\v\u2028\u2029]+/g," ");"capitalize"==d?a=a.replace(/(^|[^\d\p{L}\p{S}])([\p{Ll}|\p{S}])/gu,function(e,f,g){return f+g.toUpperCase()}):"uppercase"==d?a=a.toUpperCase():"lowercase"==d&&(a=a.toLowerCase());c=b.pop()||"";wa(c)&&0==a.lastIndexOf(" ",0)&&(a=a.substr(1));
113
+ b.push(c+a)}function ed(a){if(Mc){if("relative"==W(a,"position"))return 1;a=W(a,"filter");return(a=a.match(/^alpha\(opacity=(\d*)\)/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\(Opacity=(\d*)\)/))?Number(a[1])/100:1}return pd(a)}function pd(a){var b=1,c=W(a,"opacity");c&&(b=Number(c));(a=Zc(a))&&(b*=pd(a));return b}
114
+ function qd(a,b,c,d,e){if(3==a.nodeType&&c)od(a,b,d,e);else if(T(a))if(T(a,"CONTENT")||T(a,"SLOT")){for(var f=a;f.parentNode;)f=f.parentNode;f instanceof ShadowRoot?(a=T(a,"CONTENT")?a.getDistributedNodes():a.assignedNodes(),q(a,function(g){qd(g,b,c,d,e)})):kd(a,b)}else if(T(a,"SHADOW")){for(f=a;f.parentNode;)f=f.parentNode;if(f instanceof ShadowRoot&&(a=f))for(a=a.olderShadowRoot;a;)q(a.childNodes,function(g){qd(g,b,c,d,e)}),a=a.olderShadowRoot}else kd(a,b)}
115
+ function kd(a,b){a.shadowRoot&&q(a.shadowRoot.childNodes,function(c){qd(c,b,!0,null,null)});md(a,b,function(c,d,e,f,g){var h=null;1==c.nodeType?h=c:3==c.nodeType&&(h=c);null!=h&&(null!=h.assignedSlot||h.getDestinationInsertionPoints&&0<h.getDestinationInsertionPoints().length)||qd(c,d,e,f,g)})};var rd={B:function(a,b){return!(!a.querySelectorAll||!a.querySelector)&&!/^\d.*/.test(b)},o:function(a,b){var c=bb(b),d="string"===typeof a?c.a.getElementById(a):a;return d?Uc(d,"id")==a&&b!=d&&eb(b,d)?d:ta(jb(c,"*"),function(e){return Uc(e,"id")==a&&b!=e&&eb(b,e)}):null},j:function(a,b){if(!a)return[];if(rd.B(b,a))try{return b.querySelectorAll("#"+rd.S(a))}catch(c){return[]}b=jb(bb(b),"*",null,b);return oa(b,function(c){return Uc(c,"id")==a})},S:function(a){return a.replace(/([\s'"\\#.:;,!?+<>=~*^$|%&@`{}\-\/\[\]\(\)])/g,
116
+ "\\$1")}};var Y={},sd={};Y.N=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=jb(bb(b),"A",null,b)}return ta(d,function(e){e=jd(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.K=function(a,b,c){try{var d=Nc.j("a",b)}catch(e){d=jb(bb(b),"A",null,b)}return oa(d,function(e){e=jd(e);e=e.replace(/^[\s]+|[\s]+$/g,"");return c&&-1!=e.indexOf(a)||e==a})};Y.o=function(a,b){return Y.N(a,b,!1)};Y.j=function(a,b){return Y.K(a,b,!1)};sd.o=function(a,b){return Y.N(a,b,!0)};
117
+ sd.j=function(a,b){return Y.K(a,b,!0)};var Z={D:function(a,b){return function(c){var d=Z.H(a);d=bd(d);c=bd(c);return b.call(null,d,c)}},P:function(a){return Z.D(a,function(b,c){return c.b+c.height<b.b})},R:function(a){return Z.D(a,function(b,c){return b.b+b.height<c.b})},U:function(a){return Z.D(a,function(b,c){return c.a+c.width<b.a})},$:function(a){return Z.D(a,function(b,c){return b.a+b.width<c.a})},V:function(a,b){if(b)var c=b;else"number"==typeof a.distance&&(c=a.distance,delete a.distance);c||(c=50);return function(d){var e=Z.H(a);
118
+ if(e===d)return!1;e=bd(e);d=bd(d);var f=d.a+d.width,g=e.b-e.height,h=d.b-d.height;return Math.abs(e.a+e.width-d.a)<=c||Math.abs(f-e.a)<=c?Math.abs(g-d.b)<=c||Math.abs(h-e.b)<=c:!1}},H:function(a){if(ea(a)&&1==a.nodeType)return a;if(da(a))return Z.H(a.call(null));if(ea(a)){var b;a:{if(b=td(a)){var c=ud[b];if(c&&da(c.o)){b=c.o(a[b],yc.document);break a}}throw new Q(61,"Unsupported locator strategy: "+b);}if(!b)throw new Q(7,"No element has been found by "+JSON.stringify(a));return b}throw new Q(61,
119
+ "Selector is of wrong type: "+JSON.stringify(a));}};Z.O={left:Z.U,right:Z.$,above:Z.P,below:Z.R,near:Z.V};Z.T=function(a,b){var c=[];q(a,function(d){d&&sa(b,function(e){var f=e.kind,g=Z.O[f];if(!g)throw new Q(61,"Cannot find filter suitable for "+f);return g.apply(null,e.args)(d)},null)&&c.push(d)},null);return c};Z.o=function(a,b){a=Z.j(a,b);return 0==a.length?null:a[0]};
120
+ Z.j=function(a,b){if(!a.hasOwnProperty("root")||!a.hasOwnProperty("filters"))throw new Q(61,"Locator not suitable for relative locators: "+JSON.stringify(a));var c=a.filters,d=ca(c);if("array"!=d&&("object"!=d||"number"!=typeof c.length))throw new Q(61,"Targets should be an array: "+JSON.stringify(a));var e;T(a.root)?e=[a.root]:e=vd(a.root,b);return 0==e.length?[]:Z.T(e,a.filters)};var wd={o:function(a,b){if(""===a)throw new Q(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)[0]||null},j:function(a,b){if(""===a)throw new Q(32,'Unable to locate an element with the tagName ""');return b.getElementsByTagName(a)}};var ud={className:Ac,"class name":Ac,css:Nc,"css selector":Nc,relative:Z,id:rd,linkText:Y,"link text":Y,name:{o:function(a,b){b=jb(bb(b),"*",null,b);return ta(b,function(c){return Uc(c,"name")==a})},j:function(a,b){b=jb(bb(b),"*",null,b);return oa(b,function(c){return Uc(c,"name")==a})}},partialLinkText:sd,"partial link text":sd,tagName:wd,"tag name":wd,xpath:U};function td(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null}
121
+ function vd(a,b){var c=td(a);if(c){var d=ud[c];if(d&&da(d.j))return d.j(a[c],b||yc.document)}throw new Q(61,"Unsupported locator strategy: "+c);};ba("_",vd);; return this._.apply(null,arguments);}).apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}