selenium-webdriver 2.47.0 → 2.52.0

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 (529) hide show
  1. package/CHANGES.md +96 -0
  2. package/NOTICE +1 -1
  3. package/README.md +57 -6
  4. package/builder.js +375 -358
  5. package/chrome.js +549 -586
  6. package/edge.js +378 -0
  7. package/error.js +597 -5
  8. package/example/google_search_generator.js +2 -4
  9. package/example/logging.js +6 -2
  10. package/executors.js +11 -27
  11. package/firefox/binary.js +80 -114
  12. package/firefox/extension.js +10 -19
  13. package/firefox/index.js +175 -171
  14. package/firefox/profile.js +221 -239
  15. package/http/index.js +396 -77
  16. package/http/util.js +35 -35
  17. package/ie.js +288 -309
  18. package/index.js +34 -125
  19. package/io/exec.js +58 -39
  20. package/io/index.js +54 -48
  21. package/lib/actions.js +594 -0
  22. package/lib/by.js +276 -0
  23. package/lib/capabilities.js +404 -0
  24. package/lib/{webdriver/command.js → command.js} +89 -72
  25. package/lib/{webdriver/button.js → devmode.js} +13 -8
  26. package/lib/events.js +210 -0
  27. package/lib/firefox/amd64/libnoblur64.so +0 -0
  28. package/lib/firefox/i386/libnoblur.so +0 -0
  29. package/lib/firefox/webdriver.json +6 -1
  30. package/lib/firefox/webdriver.xpi +0 -0
  31. package/lib/{webdriver/key.js → input.js} +82 -2
  32. package/lib/logging.js +668 -0
  33. package/lib/promise.js +3093 -0
  34. package/lib/safari/client.js +697 -659
  35. package/lib/session.js +79 -0
  36. package/{test/promise_aplus_test.js → lib/symbols.js} +15 -25
  37. package/lib/test/build.js +4 -4
  38. package/lib/test/data/click_tests/disappearing_element.html +62 -0
  39. package/lib/test/data/click_tests/html5_submit_buttons.html +2 -1
  40. package/lib/test/data/click_tests/overlapping_elements.html +70 -0
  41. package/lib/test/data/click_tests/partially_overlapping_elements.html +124 -0
  42. package/lib/test/data/click_tests/wrapped_overlapping_elements.html +13 -0
  43. package/lib/test/data/readOnlyPage.html +3 -1
  44. package/lib/test/data/selectPage.html +18 -2
  45. package/lib/test/data/simpleTest.html +1 -0
  46. package/lib/test/fileserver.js +3 -4
  47. package/lib/test/index.js +13 -4
  48. package/lib/test/resources.js +1 -1
  49. package/lib/until.js +428 -0
  50. package/lib/webdriver.js +2351 -0
  51. package/net/portprober.js +15 -11
  52. package/opera.js +295 -314
  53. package/package.json +6 -5
  54. package/phantomjs.js +135 -140
  55. package/proxy.js +6 -4
  56. package/remote/index.js +234 -219
  57. package/safari.js +319 -310
  58. package/test/chrome/options_test.js +11 -9
  59. package/test/element_finding_test.js +51 -13
  60. package/test/error_test.js +163 -0
  61. package/test/execute_script_test.js +1 -1
  62. package/test/firefox/firefox_test.js +24 -0
  63. package/test/http/http_test.js +354 -43
  64. package/test/http/util_test.js +25 -23
  65. package/test/io_test.js +6 -1
  66. package/test/lib/by_test.js +127 -0
  67. package/test/lib/capabilities_test.js +84 -0
  68. package/test/lib/events_test.js +177 -0
  69. package/test/lib/logging_test.js +272 -0
  70. package/test/lib/promise_aplus_test.js +74 -0
  71. package/test/lib/promise_error_test.js +808 -0
  72. package/test/lib/promise_flow_test.js +2282 -0
  73. package/test/lib/promise_generator_test.js +308 -0
  74. package/test/lib/promise_test.js +996 -0
  75. package/test/lib/testutil.js +90 -0
  76. package/test/lib/until_test.js +436 -0
  77. package/test/lib/webdriver_test.js +2207 -0
  78. package/test/page_loading_test.js +7 -9
  79. package/test/stale_element_test.js +2 -2
  80. package/test/testing/assert_test.js +374 -0
  81. package/test/testing/index_test.js +9 -11
  82. package/testing/assert.js +334 -17
  83. package/testing/index.js +10 -0
  84. package/_base.js +0 -200
  85. package/docs/Changes.html +0 -317
  86. package/docs/class_bot_Error.html +0 -15
  87. package/docs/class_webdriver_ActionSequence.html +0 -115
  88. package/docs/class_webdriver_Alert.html +0 -24
  89. package/docs/class_webdriver_AlertPromise.html +0 -91
  90. package/docs/class_webdriver_Capabilities.html +0 -60
  91. package/docs/class_webdriver_Command.html +0 -15
  92. package/docs/class_webdriver_EventEmitter.html +0 -35
  93. package/docs/class_webdriver_FileDetector.html +0 -21
  94. package/docs/class_webdriver_Locator.html +0 -12
  95. package/docs/class_webdriver_Serializable.html +0 -9
  96. package/docs/class_webdriver_Session.html +0 -13
  97. package/docs/class_webdriver_TouchSequence.html +0 -49
  98. package/docs/class_webdriver_UnhandledAlertError.html +0 -18
  99. package/docs/class_webdriver_WebDriver.html +0 -313
  100. package/docs/class_webdriver_WebDriver_Logs.html +0 -15
  101. package/docs/class_webdriver_WebDriver_Navigation.html +0 -16
  102. package/docs/class_webdriver_WebDriver_Options.html +0 -41
  103. package/docs/class_webdriver_WebDriver_TargetLocator.html +0 -38
  104. package/docs/class_webdriver_WebDriver_Timeouts.html +0 -29
  105. package/docs/class_webdriver_WebDriver_Window.html +0 -27
  106. package/docs/class_webdriver_WebElement.html +0 -216
  107. package/docs/class_webdriver_WebElementPromise.html +0 -266
  108. package/docs/class_webdriver_http_Executor.html +0 -22
  109. package/docs/class_webdriver_http_Request.html +0 -12
  110. package/docs/class_webdriver_http_Response.html +0 -13
  111. package/docs/class_webdriver_logging_Entry.html +0 -15
  112. package/docs/class_webdriver_logging_Level.html +0 -55
  113. package/docs/class_webdriver_logging_LogRecord.html +0 -45
  114. package/docs/class_webdriver_logging_Logger.html +0 -119
  115. package/docs/class_webdriver_logging_Preferences.html +0 -8
  116. package/docs/class_webdriver_promise_CancellationError.html +0 -18
  117. package/docs/class_webdriver_promise_ControlFlow.html +0 -109
  118. package/docs/class_webdriver_promise_Deferred.html +0 -84
  119. package/docs/class_webdriver_promise_Promise.html +0 -74
  120. package/docs/class_webdriver_stacktrace_Frame.html +0 -20
  121. package/docs/class_webdriver_stacktrace_Snapshot.html +0 -6
  122. package/docs/class_webdriver_testing_Assertion.html +0 -99
  123. package/docs/class_webdriver_testing_Assertion_DelegatingMatcher_.html +0 -13
  124. package/docs/class_webdriver_testing_ContainsMatcher.html +0 -11
  125. package/docs/class_webdriver_testing_NegatedAssertion.html +0 -97
  126. package/docs/class_webdriver_until_Condition.html +0 -7
  127. package/docs/dossier.css +0 -1
  128. package/docs/dossier.js +0 -86
  129. package/docs/enum_bot_ErrorCode.html +0 -3
  130. package/docs/enum_bot_Error_State.html +0 -2
  131. package/docs/enum_webdriver_Browser.html +0 -2
  132. package/docs/enum_webdriver_Button.html +0 -2
  133. package/docs/enum_webdriver_Capability.html +0 -33
  134. package/docs/enum_webdriver_CommandName.html +0 -3
  135. package/docs/enum_webdriver_Key.html +0 -12
  136. package/docs/enum_webdriver_logging_Type.html +0 -6
  137. package/docs/enum_webdriver_promise_ControlFlow_EventType.html +0 -9
  138. package/docs/index.html +0 -123
  139. package/docs/interface_webdriver_CommandExecutor.html +0 -9
  140. package/docs/interface_webdriver_http_Client.html +0 -10
  141. package/docs/interface_webdriver_promise_Thenable.html +0 -77
  142. package/docs/module_selenium-webdriver.html +0 -23
  143. package/docs/module_selenium-webdriver__base.html +0 -23
  144. package/docs/module_selenium-webdriver__base_class_Context.html +0 -5
  145. package/docs/module_selenium-webdriver_builder.html +0 -2
  146. package/docs/module_selenium-webdriver_builder_class_Builder.html +0 -138
  147. package/docs/module_selenium-webdriver_chrome.html +0 -90
  148. package/docs/module_selenium-webdriver_chrome_class_Driver.html +0 -280
  149. package/docs/module_selenium-webdriver_chrome_class_Options.html +0 -127
  150. package/docs/module_selenium-webdriver_chrome_class_ServiceBuilder.html +0 -46
  151. package/docs/module_selenium-webdriver_class_ActionSequence.html +0 -115
  152. package/docs/module_selenium-webdriver_class_Builder.html +0 -138
  153. package/docs/module_selenium-webdriver_class_Capabilities.html +0 -60
  154. package/docs/module_selenium-webdriver_class_Command.html +0 -15
  155. package/docs/module_selenium-webdriver_class_EventEmitter.html +0 -35
  156. package/docs/module_selenium-webdriver_class_FileDetector.html +0 -21
  157. package/docs/module_selenium-webdriver_class_Serializable.html +0 -9
  158. package/docs/module_selenium-webdriver_class_Session.html +0 -13
  159. package/docs/module_selenium-webdriver_class_WebDriver.html +0 -313
  160. package/docs/module_selenium-webdriver_class_WebElement.html +0 -216
  161. package/docs/module_selenium-webdriver_class_WebElementPromise.html +0 -266
  162. package/docs/module_selenium-webdriver_enum_Browser.html +0 -2
  163. package/docs/module_selenium-webdriver_enum_Button.html +0 -2
  164. package/docs/module_selenium-webdriver_enum_Capability.html +0 -33
  165. package/docs/module_selenium-webdriver_enum_CommandName.html +0 -3
  166. package/docs/module_selenium-webdriver_enum_Key.html +0 -12
  167. package/docs/module_selenium-webdriver_error.html +0 -4
  168. package/docs/module_selenium-webdriver_error_class_Error.html +0 -15
  169. package/docs/module_selenium-webdriver_error_enum_ErrorCode.html +0 -3
  170. package/docs/module_selenium-webdriver_executors.html +0 -10
  171. package/docs/module_selenium-webdriver_executors_class_DeferredExecutor.html +0 -12
  172. package/docs/module_selenium-webdriver_firefox.html +0 -67
  173. package/docs/module_selenium-webdriver_firefox_binary.html +0 -4
  174. package/docs/module_selenium-webdriver_firefox_binary_class_Binary.html +0 -21
  175. package/docs/module_selenium-webdriver_firefox_class_Binary.html +0 -21
  176. package/docs/module_selenium-webdriver_firefox_class_Driver.html +0 -276
  177. package/docs/module_selenium-webdriver_firefox_class_Options.html +0 -19
  178. package/docs/module_selenium-webdriver_firefox_class_Profile.html +0 -50
  179. package/docs/module_selenium-webdriver_firefox_extension.html +0 -8
  180. package/docs/module_selenium-webdriver_firefox_profile.html +0 -13
  181. package/docs/module_selenium-webdriver_firefox_profile_class_Profile.html +0 -50
  182. package/docs/module_selenium-webdriver_http.html +0 -9
  183. package/docs/module_selenium-webdriver_http_class_Executor.html +0 -22
  184. package/docs/module_selenium-webdriver_http_class_HttpClient.html +0 -16
  185. package/docs/module_selenium-webdriver_http_class_Request.html +0 -12
  186. package/docs/module_selenium-webdriver_http_class_Response.html +0 -13
  187. package/docs/module_selenium-webdriver_http_util.html +0 -17
  188. package/docs/module_selenium-webdriver_ie.html +0 -11
  189. package/docs/module_selenium-webdriver_ie_class_Driver.html +0 -274
  190. package/docs/module_selenium-webdriver_ie_class_Options.html +0 -89
  191. package/docs/module_selenium-webdriver_ie_enum_Level.html +0 -1
  192. package/docs/module_selenium-webdriver_io.html +0 -37
  193. package/docs/module_selenium-webdriver_io_exec.html +0 -6
  194. package/docs/module_selenium-webdriver_namespace_By.html +0 -56
  195. package/docs/module_selenium-webdriver_namespace_error.html +0 -4
  196. package/docs/module_selenium-webdriver_namespace_logging.html +0 -18
  197. package/docs/module_selenium-webdriver_namespace_promise.html +0 -162
  198. package/docs/module_selenium-webdriver_namespace_stacktrace.html +0 -17
  199. package/docs/module_selenium-webdriver_namespace_until.html +0 -82
  200. package/docs/module_selenium-webdriver_net.html +0 -7
  201. package/docs/module_selenium-webdriver_net_portprober.html +0 -12
  202. package/docs/module_selenium-webdriver_opera.html +0 -62
  203. package/docs/module_selenium-webdriver_opera_class_Driver.html +0 -276
  204. package/docs/module_selenium-webdriver_opera_class_Options.html +0 -44
  205. package/docs/module_selenium-webdriver_opera_class_ServiceBuilder.html +0 -35
  206. package/docs/module_selenium-webdriver_phantomjs.html +0 -2
  207. package/docs/module_selenium-webdriver_phantomjs_class_Driver.html +0 -299
  208. package/docs/module_selenium-webdriver_proxy.html +0 -28
  209. package/docs/module_selenium-webdriver_remote.html +0 -8
  210. package/docs/module_selenium-webdriver_remote_class_DriverService.html +0 -32
  211. package/docs/module_selenium-webdriver_remote_class_FileDetector.html +0 -22
  212. package/docs/module_selenium-webdriver_remote_class_SeleniumServer.html +0 -40
  213. package/docs/module_selenium-webdriver_safari.html +0 -9
  214. package/docs/module_selenium-webdriver_safari_class_Driver.html +0 -279
  215. package/docs/module_selenium-webdriver_safari_class_Options.html +0 -23
  216. package/docs/module_selenium-webdriver_testing.html +0 -74
  217. package/docs/module_selenium-webdriver_testing_assert.html +0 -9
  218. package/docs/namespace_bot.html +0 -4
  219. package/docs/namespace_bot_json.html +0 -20
  220. package/docs/namespace_bot_response.html +0 -18
  221. package/docs/namespace_bot_userAgent.html +0 -33
  222. package/docs/namespace_webdriver.html +0 -30
  223. package/docs/namespace_webdriver_By.html +0 -56
  224. package/docs/namespace_webdriver_http.html +0 -6
  225. package/docs/namespace_webdriver_logging.html +0 -70
  226. package/docs/namespace_webdriver_promise.html +0 -165
  227. package/docs/namespace_webdriver_stacktrace.html +0 -17
  228. package/docs/namespace_webdriver_testing.html +0 -7
  229. package/docs/namespace_webdriver_testing_assert.html +0 -9
  230. package/docs/namespace_webdriver_testing_asserts.html +0 -18
  231. package/docs/namespace_webdriver_until.html +0 -82
  232. package/docs/source/_base.js.src.html +0 -1
  233. package/docs/source/builder.js.src.html +0 -1
  234. package/docs/source/chrome.js.src.html +0 -1
  235. package/docs/source/error.js.src.html +0 -1
  236. package/docs/source/executors.js.src.html +0 -1
  237. package/docs/source/firefox/binary.js.src.html +0 -1
  238. package/docs/source/firefox/extension.js.src.html +0 -1
  239. package/docs/source/firefox/index.js.src.html +0 -1
  240. package/docs/source/firefox/profile.js.src.html +0 -1
  241. package/docs/source/http/index.js.src.html +0 -1
  242. package/docs/source/http/util.js.src.html +0 -1
  243. package/docs/source/ie.js.src.html +0 -1
  244. package/docs/source/index.js.src.html +0 -1
  245. package/docs/source/io/exec.js.src.html +0 -1
  246. package/docs/source/io/index.js.src.html +0 -1
  247. package/docs/source/lib/atoms/error.js.src.html +0 -1
  248. package/docs/source/lib/atoms/json.js.src.html +0 -1
  249. package/docs/source/lib/atoms/response.js.src.html +0 -1
  250. package/docs/source/lib/atoms/userAgent.js.src.html +0 -1
  251. package/docs/source/lib/goog/array/array.js.src.html +0 -1
  252. package/docs/source/lib/goog/asserts/asserts.js.src.html +0 -1
  253. package/docs/source/lib/goog/async/freelist.js.src.html +0 -1
  254. package/docs/source/lib/goog/async/nexttick.js.src.html +0 -1
  255. package/docs/source/lib/goog/async/run.js.src.html +0 -1
  256. package/docs/source/lib/goog/async/workqueue.js.src.html +0 -1
  257. package/docs/source/lib/goog/base.js.src.html +0 -1
  258. package/docs/source/lib/goog/debug/debug.js.src.html +0 -1
  259. package/docs/source/lib/goog/debug/entrypointregistry.js.src.html +0 -1
  260. package/docs/source/lib/goog/debug/error.js.src.html +0 -1
  261. package/docs/source/lib/goog/debug/logbuffer.js.src.html +0 -1
  262. package/docs/source/lib/goog/debug/logger.js.src.html +0 -1
  263. package/docs/source/lib/goog/debug/logrecord.js.src.html +0 -1
  264. package/docs/source/lib/goog/deps.js.src.html +0 -1
  265. package/docs/source/lib/goog/disposable/disposable.js.src.html +0 -1
  266. package/docs/source/lib/goog/disposable/idisposable.js.src.html +0 -1
  267. package/docs/source/lib/goog/dom/browserfeature.js.src.html +0 -1
  268. package/docs/source/lib/goog/dom/dom.js.src.html +0 -1
  269. package/docs/source/lib/goog/dom/nodetype.js.src.html +0 -1
  270. package/docs/source/lib/goog/dom/safe.js.src.html +0 -1
  271. package/docs/source/lib/goog/dom/tagname.js.src.html +0 -1
  272. package/docs/source/lib/goog/dom/tags.js.src.html +0 -1
  273. package/docs/source/lib/goog/dom/vendor.js.src.html +0 -1
  274. package/docs/source/lib/goog/events/browserevent.js.src.html +0 -1
  275. package/docs/source/lib/goog/events/browserfeature.js.src.html +0 -1
  276. package/docs/source/lib/goog/events/event.js.src.html +0 -1
  277. package/docs/source/lib/goog/events/eventid.js.src.html +0 -1
  278. package/docs/source/lib/goog/events/events.js.src.html +0 -1
  279. package/docs/source/lib/goog/events/eventtarget.js.src.html +0 -1
  280. package/docs/source/lib/goog/events/eventtype.js.src.html +0 -1
  281. package/docs/source/lib/goog/events/keycodes.js.src.html +0 -1
  282. package/docs/source/lib/goog/events/listenable.js.src.html +0 -1
  283. package/docs/source/lib/goog/events/listener.js.src.html +0 -1
  284. package/docs/source/lib/goog/events/listenermap.js.src.html +0 -1
  285. package/docs/source/lib/goog/fs/url.js.src.html +0 -1
  286. package/docs/source/lib/goog/functions/functions.js.src.html +0 -1
  287. package/docs/source/lib/goog/html/safehtml.js.src.html +0 -1
  288. package/docs/source/lib/goog/html/safescript.js.src.html +0 -1
  289. package/docs/source/lib/goog/html/safestyle.js.src.html +0 -1
  290. package/docs/source/lib/goog/html/safestylesheet.js.src.html +0 -1
  291. package/docs/source/lib/goog/html/safeurl.js.src.html +0 -1
  292. package/docs/source/lib/goog/html/trustedresourceurl.js.src.html +0 -1
  293. package/docs/source/lib/goog/html/uncheckedconversions.js.src.html +0 -1
  294. package/docs/source/lib/goog/i18n/bidi.js.src.html +0 -1
  295. package/docs/source/lib/goog/iter/iter.js.src.html +0 -1
  296. package/docs/source/lib/goog/json/json.js.src.html +0 -1
  297. package/docs/source/lib/goog/labs/testing/assertthat.js.src.html +0 -1
  298. package/docs/source/lib/goog/labs/testing/logicmatcher.js.src.html +0 -1
  299. package/docs/source/lib/goog/labs/testing/matcher.js.src.html +0 -1
  300. package/docs/source/lib/goog/labs/testing/numbermatcher.js.src.html +0 -1
  301. package/docs/source/lib/goog/labs/testing/objectmatcher.js.src.html +0 -1
  302. package/docs/source/lib/goog/labs/testing/stringmatcher.js.src.html +0 -1
  303. package/docs/source/lib/goog/labs/useragent/browser.js.src.html +0 -1
  304. package/docs/source/lib/goog/labs/useragent/engine.js.src.html +0 -1
  305. package/docs/source/lib/goog/labs/useragent/platform.js.src.html +0 -1
  306. package/docs/source/lib/goog/labs/useragent/util.js.src.html +0 -1
  307. package/docs/source/lib/goog/math/box.js.src.html +0 -1
  308. package/docs/source/lib/goog/math/coordinate.js.src.html +0 -1
  309. package/docs/source/lib/goog/math/math.js.src.html +0 -1
  310. package/docs/source/lib/goog/math/rect.js.src.html +0 -1
  311. package/docs/source/lib/goog/math/size.js.src.html +0 -1
  312. package/docs/source/lib/goog/net/wrapperxmlhttpfactory.js.src.html +0 -1
  313. package/docs/source/lib/goog/net/xhrlike.js.src.html +0 -1
  314. package/docs/source/lib/goog/net/xmlhttp.js.src.html +0 -1
  315. package/docs/source/lib/goog/net/xmlhttpfactory.js.src.html +0 -1
  316. package/docs/source/lib/goog/object/object.js.src.html +0 -1
  317. package/docs/source/lib/goog/promise/promise.js.src.html +0 -1
  318. package/docs/source/lib/goog/promise/resolver.js.src.html +0 -1
  319. package/docs/source/lib/goog/promise/thenable.js.src.html +0 -1
  320. package/docs/source/lib/goog/reflect/reflect.js.src.html +0 -1
  321. package/docs/source/lib/goog/string/const.js.src.html +0 -1
  322. package/docs/source/lib/goog/string/string.js.src.html +0 -1
  323. package/docs/source/lib/goog/string/typedstring.js.src.html +0 -1
  324. package/docs/source/lib/goog/structs/collection.js.src.html +0 -1
  325. package/docs/source/lib/goog/structs/map.js.src.html +0 -1
  326. package/docs/source/lib/goog/structs/set.js.src.html +0 -1
  327. package/docs/source/lib/goog/structs/structs.js.src.html +0 -1
  328. package/docs/source/lib/goog/style/style.js.src.html +0 -1
  329. package/docs/source/lib/goog/testing/asserts.js.src.html +0 -1
  330. package/docs/source/lib/goog/testing/events/events.js.src.html +0 -1
  331. package/docs/source/lib/goog/testing/functionmock.js.src.html +0 -1
  332. package/docs/source/lib/goog/testing/jsunit.js.src.html +0 -1
  333. package/docs/source/lib/goog/testing/loosemock.js.src.html +0 -1
  334. package/docs/source/lib/goog/testing/mock.js.src.html +0 -1
  335. package/docs/source/lib/goog/testing/mockclock.js.src.html +0 -1
  336. package/docs/source/lib/goog/testing/mockcontrol.js.src.html +0 -1
  337. package/docs/source/lib/goog/testing/mockinterface.js.src.html +0 -1
  338. package/docs/source/lib/goog/testing/mockmatchers.js.src.html +0 -1
  339. package/docs/source/lib/goog/testing/objectpropertystring.js.src.html +0 -1
  340. package/docs/source/lib/goog/testing/propertyreplacer.js.src.html +0 -1
  341. package/docs/source/lib/goog/testing/recordfunction.js.src.html +0 -1
  342. package/docs/source/lib/goog/testing/stacktrace.js.src.html +0 -1
  343. package/docs/source/lib/goog/testing/strictmock.js.src.html +0 -1
  344. package/docs/source/lib/goog/testing/testcase.js.src.html +0 -1
  345. package/docs/source/lib/goog/testing/testrunner.js.src.html +0 -1
  346. package/docs/source/lib/goog/testing/watchers.js.src.html +0 -1
  347. package/docs/source/lib/goog/uri/uri.js.src.html +0 -1
  348. package/docs/source/lib/goog/uri/utils.js.src.html +0 -1
  349. package/docs/source/lib/goog/useragent/product.js.src.html +0 -1
  350. package/docs/source/lib/goog/useragent/product_isversion.js.src.html +0 -1
  351. package/docs/source/lib/goog/useragent/useragent.js.src.html +0 -1
  352. package/docs/source/lib/webdriver/actionsequence.js.src.html +0 -1
  353. package/docs/source/lib/webdriver/button.js.src.html +0 -1
  354. package/docs/source/lib/webdriver/capabilities.js.src.html +0 -1
  355. package/docs/source/lib/webdriver/command.js.src.html +0 -1
  356. package/docs/source/lib/webdriver/events.js.src.html +0 -1
  357. package/docs/source/lib/webdriver/http/http.js.src.html +0 -1
  358. package/docs/source/lib/webdriver/key.js.src.html +0 -1
  359. package/docs/source/lib/webdriver/locators.js.src.html +0 -1
  360. package/docs/source/lib/webdriver/logging.js.src.html +0 -1
  361. package/docs/source/lib/webdriver/promise.js.src.html +0 -1
  362. package/docs/source/lib/webdriver/serializable.js.src.html +0 -1
  363. package/docs/source/lib/webdriver/session.js.src.html +0 -1
  364. package/docs/source/lib/webdriver/stacktrace.js.src.html +0 -1
  365. package/docs/source/lib/webdriver/testing/asserts.js.src.html +0 -1
  366. package/docs/source/lib/webdriver/touchsequence.js.src.html +0 -1
  367. package/docs/source/lib/webdriver/until.js.src.html +0 -1
  368. package/docs/source/lib/webdriver/webdriver.js.src.html +0 -1
  369. package/docs/source/net/index.js.src.html +0 -1
  370. package/docs/source/net/portprober.js.src.html +0 -1
  371. package/docs/source/opera.js.src.html +0 -1
  372. package/docs/source/phantomjs.js.src.html +0 -1
  373. package/docs/source/proxy.js.src.html +0 -1
  374. package/docs/source/remote/index.js.src.html +0 -1
  375. package/docs/source/safari.js.src.html +0 -1
  376. package/docs/source/testing/assert.js.src.html +0 -1
  377. package/docs/source/testing/index.js.src.html +0 -1
  378. package/docs/types.js +0 -1
  379. package/lib/atoms/error.js +0 -202
  380. package/lib/atoms/json.js +0 -80
  381. package/lib/atoms/response.js +0 -110
  382. package/lib/atoms/userAgent.js +0 -257
  383. package/lib/goog/LICENSE +0 -176
  384. package/lib/goog/array/array.js +0 -1655
  385. package/lib/goog/asserts/asserts.js +0 -365
  386. package/lib/goog/async/freelist.js +0 -88
  387. package/lib/goog/async/nexttick.js +0 -241
  388. package/lib/goog/async/run.js +0 -139
  389. package/lib/goog/async/workqueue.js +0 -139
  390. package/lib/goog/base.js +0 -2547
  391. package/lib/goog/debug/debug.js +0 -653
  392. package/lib/goog/debug/entrypointregistry.js +0 -158
  393. package/lib/goog/debug/error.js +0 -63
  394. package/lib/goog/debug/logbuffer.js +0 -148
  395. package/lib/goog/debug/logger.js +0 -873
  396. package/lib/goog/debug/logrecord.js +0 -242
  397. package/lib/goog/deps.js +0 -151
  398. package/lib/goog/disposable/disposable.js +0 -307
  399. package/lib/goog/disposable/idisposable.js +0 -45
  400. package/lib/goog/dom/browserfeature.js +0 -72
  401. package/lib/goog/dom/dom.js +0 -2995
  402. package/lib/goog/dom/nodetype.js +0 -48
  403. package/lib/goog/dom/safe.js +0 -347
  404. package/lib/goog/dom/tagname.js +0 -160
  405. package/lib/goog/dom/tags.js +0 -42
  406. package/lib/goog/dom/vendor.js +0 -96
  407. package/lib/goog/events/browserevent.js +0 -386
  408. package/lib/goog/events/browserfeature.js +0 -85
  409. package/lib/goog/events/event.js +0 -143
  410. package/lib/goog/events/eventid.js +0 -47
  411. package/lib/goog/events/events.js +0 -984
  412. package/lib/goog/events/eventtarget.js +0 -394
  413. package/lib/goog/events/eventtype.js +0 -233
  414. package/lib/goog/events/keycodes.js +0 -420
  415. package/lib/goog/events/listenable.js +0 -335
  416. package/lib/goog/events/listener.js +0 -131
  417. package/lib/goog/events/listenermap.js +0 -308
  418. package/lib/goog/fs/url.js +0 -105
  419. package/lib/goog/functions/functions.js +0 -332
  420. package/lib/goog/html/safehtml.js +0 -756
  421. package/lib/goog/html/safescript.js +0 -234
  422. package/lib/goog/html/safestyle.js +0 -442
  423. package/lib/goog/html/safestylesheet.js +0 -276
  424. package/lib/goog/html/safeurl.js +0 -431
  425. package/lib/goog/html/trustedresourceurl.js +0 -224
  426. package/lib/goog/html/uncheckedconversions.js +0 -231
  427. package/lib/goog/i18n/bidi.js +0 -908
  428. package/lib/goog/iter/iter.js +0 -1305
  429. package/lib/goog/json/json.js +0 -365
  430. package/lib/goog/labs/testing/assertthat.js +0 -58
  431. package/lib/goog/labs/testing/logicmatcher.js +0 -212
  432. package/lib/goog/labs/testing/matcher.js +0 -80
  433. package/lib/goog/labs/testing/numbermatcher.js +0 -346
  434. package/lib/goog/labs/testing/objectmatcher.js +0 -317
  435. package/lib/goog/labs/testing/stringmatcher.js +0 -415
  436. package/lib/goog/labs/useragent/browser.js +0 -327
  437. package/lib/goog/labs/useragent/engine.js +0 -160
  438. package/lib/goog/labs/useragent/platform.js +0 -160
  439. package/lib/goog/labs/useragent/util.js +0 -148
  440. package/lib/goog/math/box.js +0 -389
  441. package/lib/goog/math/coordinate.js +0 -268
  442. package/lib/goog/math/math.js +0 -451
  443. package/lib/goog/math/rect.js +0 -476
  444. package/lib/goog/math/size.js +0 -227
  445. package/lib/goog/net/wrapperxmlhttpfactory.js +0 -71
  446. package/lib/goog/net/xhrlike.js +0 -124
  447. package/lib/goog/net/xmlhttp.js +0 -246
  448. package/lib/goog/net/xmlhttpfactory.js +0 -67
  449. package/lib/goog/object/object.js +0 -686
  450. package/lib/goog/promise/promise.js +0 -1310
  451. package/lib/goog/promise/resolver.js +0 -48
  452. package/lib/goog/promise/thenable.js +0 -126
  453. package/lib/goog/reflect/reflect.js +0 -78
  454. package/lib/goog/string/const.js +0 -182
  455. package/lib/goog/string/string.js +0 -1565
  456. package/lib/goog/string/typedstring.js +0 -48
  457. package/lib/goog/structs/collection.js +0 -56
  458. package/lib/goog/structs/map.js +0 -456
  459. package/lib/goog/structs/set.js +0 -279
  460. package/lib/goog/structs/structs.js +0 -354
  461. package/lib/goog/style/style.js +0 -2054
  462. package/lib/goog/testing/asserts.js +0 -1265
  463. package/lib/goog/testing/events/events.js +0 -727
  464. package/lib/goog/testing/functionmock.js +0 -176
  465. package/lib/goog/testing/jsunit.js +0 -162
  466. package/lib/goog/testing/loosemock.js +0 -242
  467. package/lib/goog/testing/mock.js +0 -645
  468. package/lib/goog/testing/mockclock.js +0 -617
  469. package/lib/goog/testing/mockcontrol.js +0 -220
  470. package/lib/goog/testing/mockinterface.js +0 -45
  471. package/lib/goog/testing/mockmatchers.js +0 -400
  472. package/lib/goog/testing/objectpropertystring.js +0 -68
  473. package/lib/goog/testing/propertyreplacer.js +0 -245
  474. package/lib/goog/testing/recordfunction.js +0 -215
  475. package/lib/goog/testing/stacktrace.js +0 -594
  476. package/lib/goog/testing/strictmock.js +0 -130
  477. package/lib/goog/testing/testcase.js +0 -1569
  478. package/lib/goog/testing/testrunner.js +0 -440
  479. package/lib/goog/testing/watchers.js +0 -46
  480. package/lib/goog/uri/uri.js +0 -1507
  481. package/lib/goog/uri/utils.js +0 -1116
  482. package/lib/goog/useragent/product.js +0 -175
  483. package/lib/goog/useragent/product_isversion.js +0 -143
  484. package/lib/goog/useragent/useragent.js +0 -538
  485. package/lib/webdriver/actionsequence.js +0 -356
  486. package/lib/webdriver/builder.js +0 -208
  487. package/lib/webdriver/capabilities.js +0 -411
  488. package/lib/webdriver/events.js +0 -179
  489. package/lib/webdriver/firefoxdomexecutor.js +0 -175
  490. package/lib/webdriver/http/corsclient.js +0 -133
  491. package/lib/webdriver/http/http.js +0 -523
  492. package/lib/webdriver/http/xhrclient.js +0 -67
  493. package/lib/webdriver/locators.js +0 -257
  494. package/lib/webdriver/logging.js +0 -347
  495. package/lib/webdriver/promise.js +0 -2609
  496. package/lib/webdriver/serializable.js +0 -41
  497. package/lib/webdriver/session.js +0 -74
  498. package/lib/webdriver/stacktrace.js +0 -619
  499. package/lib/webdriver/test/builder_test.js +0 -53
  500. package/lib/webdriver/test/capabilities_test.js +0 -72
  501. package/lib/webdriver/test/events_test.js +0 -203
  502. package/lib/webdriver/test/http/corsclient_test.js +0 -151
  503. package/lib/webdriver/test/http/http_test.js +0 -428
  504. package/lib/webdriver/test/http/xhrclient_test.js +0 -196
  505. package/lib/webdriver/test/locators_test.js +0 -59
  506. package/lib/webdriver/test/logging_test.js +0 -85
  507. package/lib/webdriver/test/promise_error_test.js +0 -719
  508. package/lib/webdriver/test/promise_flow_test.js +0 -1957
  509. package/lib/webdriver/test/promise_generator_test.js +0 -251
  510. package/lib/webdriver/test/promise_test.js +0 -1981
  511. package/lib/webdriver/test/stacktrace_test.js +0 -480
  512. package/lib/webdriver/test/test_bootstrap.js +0 -67
  513. package/lib/webdriver/test/testing/asserts_test.js +0 -117
  514. package/lib/webdriver/test/testing/client_test.js +0 -88
  515. package/lib/webdriver/test/testing/testcase_test.js +0 -229
  516. package/lib/webdriver/test/testutil.js +0 -209
  517. package/lib/webdriver/test/testutil_test.js +0 -104
  518. package/lib/webdriver/test/until_test.js +0 -411
  519. package/lib/webdriver/test/webdriver_generator_test.js +0 -92
  520. package/lib/webdriver/test/webdriver_test.js +0 -2369
  521. package/lib/webdriver/testing/asserts.js +0 -487
  522. package/lib/webdriver/testing/client.js +0 -179
  523. package/lib/webdriver/testing/jsunit.js +0 -363
  524. package/lib/webdriver/testing/testcase.js +0 -168
  525. package/lib/webdriver/testing/window.js +0 -244
  526. package/lib/webdriver/touchsequence.js +0 -248
  527. package/lib/webdriver/until.js +0 -412
  528. package/lib/webdriver/webdriver.js +0 -2492
  529. package/test/_base_test.js +0 -129
@@ -1,4 +1,4 @@
1
- var COMPILED = !0, goog = goog || {};
1
+ 'use strict';var COMPILED = !0, goog = goog || {};
2
2
  goog.global = this;
3
3
  goog.isDef = function(a) {
4
4
  return void 0 !== a;
@@ -68,12 +68,6 @@ goog.moduleLoaderState_ = null;
68
68
  goog.isInModuleLoader_ = function() {
69
69
  return null != goog.moduleLoaderState_;
70
70
  };
71
- goog.module.declareTestMethods = function() {
72
- if (!goog.isInModuleLoader_()) {
73
- throw Error("goog.module.declareTestMethods must be called from within a goog.module");
74
- }
75
- goog.moduleLoaderState_.declareTestMethods = !0;
76
- };
77
71
  goog.module.declareLegacyNamespace = function() {
78
72
  if (!COMPILED && !goog.isInModuleLoader_()) {
79
73
  throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");
@@ -134,7 +128,7 @@ goog.require = function(a) {
134
128
  if (goog.ENABLE_DEBUG_LOADER) {
135
129
  var b = goog.getPathFromDeps_(a);
136
130
  if (b) {
137
- return goog.included_[b] = !0, goog.writeScripts_(), null;
131
+ return goog.writeScripts_(b), null;
138
132
  }
139
133
  }
140
134
  a = "goog.require could not find: " + a;
@@ -162,11 +156,11 @@ goog.LOAD_MODULE_USING_EVAL = !0;
162
156
  goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
163
157
  goog.loadedModules_ = {};
164
158
  goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
165
- goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() {
159
+ goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {pathIsModule:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() {
166
160
  var a = goog.global.document;
167
- return "undefined" != typeof a && "write" in a;
161
+ return null != a && "write" in a;
168
162
  }, goog.findBasePath_ = function() {
169
- if (goog.global.CLOSURE_BASE_PATH) {
163
+ if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) {
170
164
  goog.basePath = goog.global.CLOSURE_BASE_PATH;
171
165
  } else {
172
166
  if (goog.inHtmlDocument_()) {
@@ -181,7 +175,7 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsM
181
175
  }
182
176
  }, goog.importScript_ = function(a, b) {
183
177
  (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(a, b) && (goog.dependencies_.written[a] = !0);
184
- }, goog.IS_OLD_IE_ = !goog.global.atob && goog.global.document && goog.global.document.all, goog.importModule_ = function(a) {
178
+ }, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importModule_ = function(a) {
185
179
  goog.importScript_("", 'goog.retrieveAndExecModule_("' + a + '");') && (goog.dependencies_.written[a] = !0);
186
180
  }, goog.queuedModules_ = [], goog.wrapModule_ = function(a, b) {
187
181
  return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(b + "\n//# sourceURL=" + a + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + b + "\n;return exports});\n//# sourceURL=" + a + "\n";
@@ -213,10 +207,12 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsM
213
207
  delete goog.dependencies_.deferred[a];
214
208
  goog.globalEval(b);
215
209
  }
210
+ }, goog.loadModuleFromUrl = function(a) {
211
+ goog.retrieveAndExecModule_(a);
216
212
  }, goog.loadModule = function(a) {
217
213
  var b = goog.moduleLoaderState_;
218
214
  try {
219
- goog.moduleLoaderState_ = {moduleName:void 0, declareTestMethods:!1};
215
+ goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1};
220
216
  var c;
221
217
  if (goog.isFunction(a)) {
222
218
  c = a.call(goog.global, {});
@@ -233,13 +229,6 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsM
233
229
  }
234
230
  goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && Object.seal(c);
235
231
  goog.loadedModules_[d] = c;
236
- if (goog.moduleLoaderState_.declareTestMethods) {
237
- for (var e in c) {
238
- if (0 === e.indexOf("test", 0) || "tearDown" == e || "setUp" == e || "setUpPage" == e || "tearDownPage" == e) {
239
- goog.global[e] = c[e];
240
- }
241
- }
242
- }
243
232
  } finally {
244
233
  goog.moduleLoaderState_ = b;
245
234
  }
@@ -272,35 +261,35 @@ goog.DEPENDENCIES_ENABLED && (goog.included_ = {}, goog.dependencies_ = {pathIsM
272
261
  }, goog.lastNonModuleScriptIndex_ = 0, goog.onScriptLoad_ = function(a, b) {
273
262
  "complete" == a.readyState && goog.lastNonModuleScriptIndex_ == b && goog.loadQueuedModules_();
274
263
  return !0;
275
- }, goog.writeScripts_ = function() {
276
- function a(e) {
277
- if (!(e in d.written)) {
278
- if (!(e in d.visited) && (d.visited[e] = !0, e in d.requires)) {
279
- for (var f in d.requires[e]) {
264
+ }, goog.writeScripts_ = function(a) {
265
+ function b(a) {
266
+ if (!(a in e.written || a in e.visited)) {
267
+ e.visited[a] = !0;
268
+ if (a in e.requires) {
269
+ for (var f in e.requires[a]) {
280
270
  if (!goog.isProvided_(f)) {
281
- if (f in d.nameToPath) {
282
- a(d.nameToPath[f]);
271
+ if (f in e.nameToPath) {
272
+ b(e.nameToPath[f]);
283
273
  } else {
284
274
  throw Error("Undefined nameToPath for " + f);
285
275
  }
286
276
  }
287
277
  }
288
278
  }
289
- e in c || (c[e] = !0, b.push(e));
279
+ a in d || (d[a] = !0, c.push(a));
290
280
  }
291
281
  }
292
- var b = [], c = {}, d = goog.dependencies_, e;
293
- for (e in goog.included_) {
294
- d.written[e] || a(e);
295
- }
296
- for (var f = 0;f < b.length;f++) {
297
- e = b[f], goog.dependencies_.written[e] = !0;
282
+ var c = [], d = {}, e = goog.dependencies_;
283
+ b(a);
284
+ for (a = 0;a < c.length;a++) {
285
+ var f = c[a];
286
+ goog.dependencies_.written[f] = !0;
298
287
  }
299
288
  var g = goog.moduleLoaderState_;
300
289
  goog.moduleLoaderState_ = null;
301
- for (f = 0;f < b.length;f++) {
302
- if (e = b[f]) {
303
- d.pathIsModule[e] ? goog.importModule_(goog.basePath + e) : goog.importScript_(goog.basePath + e);
290
+ for (a = 0;a < c.length;a++) {
291
+ if (f = c[a]) {
292
+ e.pathIsModule[f] ? goog.importModule_(goog.basePath + f) : goog.importScript_(goog.basePath + f);
304
293
  } else {
305
294
  throw goog.moduleLoaderState_ = g, Error("Undefined script input");
306
295
  }
@@ -474,15 +463,26 @@ goog.globalEval = function(a) {
474
463
  goog.global.execScript(a, "JavaScript");
475
464
  } else {
476
465
  if (goog.global.eval) {
477
- if (null == goog.evalWorksForGlobals_ && (goog.global.eval("var _et_ = 1;"), "undefined" != typeof goog.global._et_ ? (delete goog.global._et_, goog.evalWorksForGlobals_ = !0) : goog.evalWorksForGlobals_ = !1), goog.evalWorksForGlobals_) {
466
+ if (null == goog.evalWorksForGlobals_) {
467
+ if (goog.global.eval("var _evalTest_ = 1;"), "undefined" != typeof goog.global._evalTest_) {
468
+ try {
469
+ delete goog.global._evalTest_;
470
+ } catch (b) {
471
+ }
472
+ goog.evalWorksForGlobals_ = !0;
473
+ } else {
474
+ goog.evalWorksForGlobals_ = !1;
475
+ }
476
+ }
477
+ if (goog.evalWorksForGlobals_) {
478
478
  goog.global.eval(a);
479
479
  } else {
480
- var b = goog.global.document, c = b.createElement("SCRIPT");
481
- c.type = "text/javascript";
482
- c.defer = !1;
483
- c.appendChild(b.createTextNode(a));
484
- b.body.appendChild(c);
485
- b.body.removeChild(c);
480
+ var c = goog.global.document, d = c.createElement("SCRIPT");
481
+ d.type = "text/javascript";
482
+ d.defer = !1;
483
+ d.appendChild(c.createTextNode(a));
484
+ c.body.appendChild(d);
485
+ c.body.removeChild(d);
486
486
  }
487
487
  } else {
488
488
  throw Error("goog.globalEval not available");
@@ -511,7 +511,7 @@ goog.setCssNameMapping = function(a, b) {
511
511
  !COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING);
512
512
  goog.getMsg = function(a, b) {
513
513
  b && (a = a.replace(/\{\$([^}]+)}/g, function(a, d) {
514
- return d in b ? b[d] : a;
514
+ return null != b && d in b ? b[d] : a;
515
515
  }));
516
516
  return a;
517
517
  };
@@ -716,8 +716,7 @@ goog.string.caseInsensitiveCompare = function(a, b) {
716
716
  var c = String(a).toLowerCase(), d = String(b).toLowerCase();
717
717
  return c < d ? -1 : c == d ? 0 : 1;
718
718
  };
719
- goog.string.numerateCompareRegExp_ = /(\.\d+)|(\d+)|(\D+)/g;
720
- goog.string.numerateCompare = function(a, b) {
719
+ goog.string.numberAwareCompare_ = function(a, b, c) {
721
720
  if (a == b) {
722
721
  return 0;
723
722
  }
@@ -727,14 +726,22 @@ goog.string.numerateCompare = function(a, b) {
727
726
  if (!b) {
728
727
  return 1;
729
728
  }
730
- for (var c = a.toLowerCase().match(goog.string.numerateCompareRegExp_), d = b.toLowerCase().match(goog.string.numerateCompareRegExp_), e = Math.min(c.length, d.length), f = 0;f < e;f++) {
731
- var g = c[f], h = d[f];
732
- if (g != h) {
733
- return c = parseInt(g, 10), !isNaN(c) && (d = parseInt(h, 10), !isNaN(d) && c - d) ? c - d : g < h ? -1 : 1;
729
+ for (var d = a.toLowerCase().match(c), e = b.toLowerCase().match(c), f = Math.min(d.length, e.length), g = 0;g < f;g++) {
730
+ c = d[g];
731
+ var h = e[g];
732
+ if (c != h) {
733
+ return a = parseInt(c, 10), !isNaN(a) && (b = parseInt(h, 10), !isNaN(b) && a - b) ? a - b : c < h ? -1 : 1;
734
734
  }
735
735
  }
736
- return c.length != d.length ? c.length - d.length : a < b ? -1 : 1;
736
+ return d.length != e.length ? d.length - e.length : a < b ? -1 : 1;
737
+ };
738
+ goog.string.intAwareCompare = function(a, b) {
739
+ return goog.string.numberAwareCompare_(a, b, /\d+|\D+/g);
737
740
  };
741
+ goog.string.floatAwareCompare = function(a, b) {
742
+ return goog.string.numberAwareCompare_(a, b, /\d+|\.\d+|\D+/g);
743
+ };
744
+ goog.string.numerateCompare = goog.string.floatAwareCompare;
738
745
  goog.string.urlEncode = function(a) {
739
746
  return encodeURIComponent(String(a));
740
747
  };
@@ -847,13 +854,10 @@ goog.string.truncateMiddle = function(a, b, c, d) {
847
854
  c && (a = goog.string.htmlEscape(a));
848
855
  return a;
849
856
  };
850
- goog.string.specialEscapeChars_ = {"\x00":"\\0", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\"};
857
+ goog.string.specialEscapeChars_ = {"\x00":"\\0", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\", "<":"<"};
851
858
  goog.string.jsEscapeCache_ = {"'":"\\'"};
852
859
  goog.string.quote = function(a) {
853
860
  a = String(a);
854
- if (a.quote) {
855
- return a.quote();
856
- }
857
861
  for (var b = ['"'], c = 0;c < a.length;c++) {
858
862
  var d = a.charAt(c), e = d.charCodeAt(0);
859
863
  b[c + 1] = goog.string.specialEscapeChars_[d] || (31 < e && 127 > e ? d : goog.string.escapeChar(d));
@@ -914,7 +918,9 @@ goog.string.removeAll = function(a, b) {
914
918
  goog.string.regExpEscape = function(a) {
915
919
  return String(a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
916
920
  };
917
- goog.string.repeat = function(a, b) {
921
+ goog.string.repeat = String.prototype.repeat ? function(a, b) {
922
+ return a.repeat(b);
923
+ } : function(a, b) {
918
924
  return Array(b + 1).join(a);
919
925
  };
920
926
  goog.string.padNumber = function(a, b, c) {
@@ -934,7 +940,7 @@ goog.string.getRandomString = function() {
934
940
  };
935
941
  goog.string.compareVersions = function(a, b) {
936
942
  for (var c = 0, d = goog.string.trim(String(a)).split("."), e = goog.string.trim(String(b)).split("."), f = Math.max(d.length, e.length), g = 0;0 == c && g < f;g++) {
937
- var h = d[g] || "", k = e[g] || "", l = RegExp("(\\d*)(\\D*)", "g"), p = RegExp("(\\d*)(\\D*)", "g");
943
+ var h = d[g] || "", k = e[g] || "", l = /(\d*)(\D*)/g, p = /(\d*)(\D*)/g;
938
944
  do {
939
945
  var m = l.exec(h) || ["", "", ""], n = p.exec(k) || ["", "", ""];
940
946
  if (0 == m[0].length && 0 == n[0].length) {
@@ -948,10 +954,9 @@ goog.string.compareVersions = function(a, b) {
948
954
  goog.string.compareElements_ = function(a, b) {
949
955
  return a < b ? -1 : a > b ? 1 : 0;
950
956
  };
951
- goog.string.HASHCODE_MAX_ = 4294967296;
952
957
  goog.string.hashCode = function(a) {
953
958
  for (var b = 0, c = 0;c < a.length;++c) {
954
- b = 31 * b + a.charCodeAt(c), b %= goog.string.HASHCODE_MAX_;
959
+ b = 31 * b + a.charCodeAt(c) >>> 0;
955
960
  }
956
961
  return b;
957
962
  };
@@ -1331,7 +1336,7 @@ goog.array.slice = function(a, b, c) {
1331
1336
  goog.array.removeDuplicates = function(a, b, c) {
1332
1337
  b = b || a;
1333
1338
  var d = function(a) {
1334
- return goog.isObject(g) ? "o" + goog.getUid(g) : (typeof g).charAt(0) + g;
1339
+ return goog.isObject(a) ? "o" + goog.getUid(a) : (typeof a).charAt(0) + a;
1335
1340
  };
1336
1341
  c = c || d;
1337
1342
  for (var d = {}, e = 0, f = 0;f < a.length;) {
@@ -1498,16 +1503,16 @@ goog.array.zip = function(a) {
1498
1503
  if (!arguments.length) {
1499
1504
  return [];
1500
1505
  }
1501
- for (var b = [], c = 0;;c++) {
1502
- for (var d = [], e = 0;e < arguments.length;e++) {
1503
- var f = arguments[e];
1504
- if (c >= f.length) {
1505
- return b;
1506
- }
1507
- d.push(f[c]);
1506
+ for (var b = [], c = arguments[0].length, d = 1;d < arguments.length;d++) {
1507
+ arguments[d].length < c && (c = arguments[d].length);
1508
+ }
1509
+ for (d = 0;d < c;d++) {
1510
+ for (var e = [], f = 0;f < arguments.length;f++) {
1511
+ e.push(arguments[f][d]);
1508
1512
  }
1509
- b.push(d);
1513
+ b.push(e);
1510
1514
  }
1515
+ return b;
1511
1516
  };
1512
1517
  goog.array.shuffle = function(a, b) {
1513
1518
  for (var c = b || Math.random, d = a.length - 1;0 < d;d--) {
@@ -1599,7 +1604,7 @@ goog.object.getValueByKeys = function(a, b) {
1599
1604
  return a;
1600
1605
  };
1601
1606
  goog.object.containsKey = function(a, b) {
1602
- return b in a;
1607
+ return null !== a && b in a;
1603
1608
  };
1604
1609
  goog.object.containsValue = function(a, b) {
1605
1610
  for (var c in a) {
@@ -1636,13 +1641,13 @@ goog.object.remove = function(a, b) {
1636
1641
  return c;
1637
1642
  };
1638
1643
  goog.object.add = function(a, b, c) {
1639
- if (b in a) {
1644
+ if (null !== a && b in a) {
1640
1645
  throw Error('The object already contains the key "' + b + '"');
1641
1646
  }
1642
1647
  goog.object.set(a, b, c);
1643
1648
  };
1644
1649
  goog.object.get = function(a, b, c) {
1645
- return b in a ? a[b] : c;
1650
+ return null !== a && b in a ? a[b] : c;
1646
1651
  };
1647
1652
  goog.object.set = function(a, b, c) {
1648
1653
  a[b] = c;
@@ -1680,7 +1685,7 @@ goog.object.clone = function(a) {
1680
1685
  goog.object.unsafeClone = function(a) {
1681
1686
  var b = goog.typeOf(a);
1682
1687
  if ("object" == b || "array" == b) {
1683
- if (a.clone) {
1688
+ if (goog.isFunction(a.clone)) {
1684
1689
  return a.clone();
1685
1690
  }
1686
1691
  var b = "array" == b ? [] : {}, c;
@@ -1743,10 +1748,10 @@ goog.object.isImmutableView = function(a) {
1743
1748
  };
1744
1749
  goog.structs = {};
1745
1750
  goog.structs.getCount = function(a) {
1746
- return "function" == typeof a.getCount ? a.getCount() : goog.isArrayLike(a) || goog.isString(a) ? a.length : goog.object.getCount(a);
1751
+ return a.getCount && "function" == typeof a.getCount ? a.getCount() : goog.isArrayLike(a) || goog.isString(a) ? a.length : goog.object.getCount(a);
1747
1752
  };
1748
1753
  goog.structs.getValues = function(a) {
1749
- if ("function" == typeof a.getValues) {
1754
+ if (a.getValues && "function" == typeof a.getValues) {
1750
1755
  return a.getValues();
1751
1756
  }
1752
1757
  if (goog.isString(a)) {
@@ -1761,10 +1766,10 @@ goog.structs.getValues = function(a) {
1761
1766
  return goog.object.getValues(a);
1762
1767
  };
1763
1768
  goog.structs.getKeys = function(a) {
1764
- if ("function" == typeof a.getKeys) {
1769
+ if (a.getKeys && "function" == typeof a.getKeys) {
1765
1770
  return a.getKeys();
1766
1771
  }
1767
- if ("function" != typeof a.getValues) {
1772
+ if (!a.getValues || "function" != typeof a.getValues) {
1768
1773
  if (goog.isArrayLike(a) || goog.isString(a)) {
1769
1774
  var b = [];
1770
1775
  a = a.length;
@@ -1777,16 +1782,16 @@ goog.structs.getKeys = function(a) {
1777
1782
  }
1778
1783
  };
1779
1784
  goog.structs.contains = function(a, b) {
1780
- return "function" == typeof a.contains ? a.contains(b) : "function" == typeof a.containsValue ? a.containsValue(b) : goog.isArrayLike(a) || goog.isString(a) ? goog.array.contains(a, b) : goog.object.containsValue(a, b);
1785
+ return a.contains && "function" == typeof a.contains ? a.contains(b) : a.containsValue && "function" == typeof a.containsValue ? a.containsValue(b) : goog.isArrayLike(a) || goog.isString(a) ? goog.array.contains(a, b) : goog.object.containsValue(a, b);
1781
1786
  };
1782
1787
  goog.structs.isEmpty = function(a) {
1783
- return "function" == typeof a.isEmpty ? a.isEmpty() : goog.isArrayLike(a) || goog.isString(a) ? goog.array.isEmpty(a) : goog.object.isEmpty(a);
1788
+ return a.isEmpty && "function" == typeof a.isEmpty ? a.isEmpty() : goog.isArrayLike(a) || goog.isString(a) ? goog.array.isEmpty(a) : goog.object.isEmpty(a);
1784
1789
  };
1785
1790
  goog.structs.clear = function(a) {
1786
- "function" == typeof a.clear ? a.clear() : goog.isArrayLike(a) ? goog.array.clear(a) : goog.object.clear(a);
1791
+ a.clear && "function" == typeof a.clear ? a.clear() : goog.isArrayLike(a) ? goog.array.clear(a) : goog.object.clear(a);
1787
1792
  };
1788
1793
  goog.structs.forEach = function(a, b, c) {
1789
- if ("function" == typeof a.forEach) {
1794
+ if (a.forEach && "function" == typeof a.forEach) {
1790
1795
  a.forEach(b, c);
1791
1796
  } else {
1792
1797
  if (goog.isArrayLike(a) || goog.isString(a)) {
@@ -1973,6 +1978,41 @@ goog.functions.cacheReturnValue = function(a) {
1973
1978
  return c;
1974
1979
  };
1975
1980
  };
1981
+ goog.functions.once = function(a) {
1982
+ var b = a;
1983
+ return function() {
1984
+ if (b) {
1985
+ var a = b;
1986
+ b = null;
1987
+ a();
1988
+ }
1989
+ };
1990
+ };
1991
+ goog.functions.debounce = function(a, b, c) {
1992
+ c && (a = goog.bind(a, c));
1993
+ var d = null;
1994
+ return function(c) {
1995
+ goog.global.clearTimeout(d);
1996
+ var f = arguments;
1997
+ d = goog.global.setTimeout(function() {
1998
+ a.apply(null, f);
1999
+ }, b);
2000
+ };
2001
+ };
2002
+ goog.functions.throttle = function(a, b, c) {
2003
+ c && (a = goog.bind(a, c));
2004
+ var d = null, e = !1, f = [], g = function() {
2005
+ d = null;
2006
+ e && (e = !1, h());
2007
+ }, h = function() {
2008
+ d = goog.global.setTimeout(g, b);
2009
+ a.apply(null, f);
2010
+ };
2011
+ return function(a) {
2012
+ f = arguments;
2013
+ d ? e = !0 : h();
2014
+ };
2015
+ };
1976
2016
  goog.math = {};
1977
2017
  goog.math.randomInt = function(a) {
1978
2018
  return Math.floor(Math.random() * a);
@@ -2078,7 +2118,7 @@ goog.math.isNegativeZero = function(a) {
2078
2118
  goog.math.log10Floor = function(a) {
2079
2119
  if (0 < a) {
2080
2120
  var b = Math.round(Math.log(a) * Math.LOG10E);
2081
- return b - (parseFloat("1e" + b) > a);
2121
+ return b - (parseFloat("1e" + b) > a ? 1 : 0);
2082
2122
  }
2083
2123
  return 0 == a ? -Infinity : NaN;
2084
2124
  };
@@ -2692,442 +2732,131 @@ goog.structs.Map.prototype.__iterator__ = function(a) {
2692
2732
  goog.structs.Map.hasKey_ = function(a, b) {
2693
2733
  return Object.prototype.hasOwnProperty.call(a, b);
2694
2734
  };
2695
- goog.labs = {};
2696
- goog.labs.userAgent = {};
2697
- goog.labs.userAgent.util = {};
2698
- goog.labs.userAgent.util.getNativeUserAgentString_ = function() {
2699
- var a = goog.labs.userAgent.util.getNavigator_();
2700
- return a && (a = a.userAgent) ? a : "";
2701
- };
2702
- goog.labs.userAgent.util.getNavigator_ = function() {
2703
- return goog.global.navigator;
2704
- };
2705
- goog.labs.userAgent.util.userAgent_ = goog.labs.userAgent.util.getNativeUserAgentString_();
2706
- goog.labs.userAgent.util.setUserAgent = function(a) {
2707
- goog.labs.userAgent.util.userAgent_ = a || goog.labs.userAgent.util.getNativeUserAgentString_();
2735
+ goog.uri = {};
2736
+ goog.uri.utils = {};
2737
+ goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63};
2738
+ goog.uri.utils.buildFromEncodedParts = function(a, b, c, d, e, f, g) {
2739
+ var h = "";
2740
+ a && (h += a + ":");
2741
+ c && (h += "//", b && (h += b + "@"), h += c, d && (h += ":" + d));
2742
+ e && (h += e);
2743
+ f && (h += "?" + f);
2744
+ g && (h += "#" + g);
2745
+ return h;
2708
2746
  };
2709
- goog.labs.userAgent.util.getUserAgent = function() {
2710
- return goog.labs.userAgent.util.userAgent_;
2747
+ goog.uri.utils.splitRe_ = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;
2748
+ goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7};
2749
+ goog.uri.utils.split = function(a) {
2750
+ return a.match(goog.uri.utils.splitRe_);
2711
2751
  };
2712
- goog.labs.userAgent.util.matchUserAgent = function(a) {
2713
- var b = goog.labs.userAgent.util.getUserAgent();
2714
- return goog.string.contains(b, a);
2752
+ goog.uri.utils.decodeIfPossible_ = function(a, b) {
2753
+ return a ? b ? decodeURI(a) : decodeURIComponent(a) : a;
2715
2754
  };
2716
- goog.labs.userAgent.util.matchUserAgentIgnoreCase = function(a) {
2717
- var b = goog.labs.userAgent.util.getUserAgent();
2718
- return goog.string.caseInsensitiveContains(b, a);
2755
+ goog.uri.utils.getComponentByIndex_ = function(a, b) {
2756
+ return goog.uri.utils.split(b)[a] || null;
2719
2757
  };
2720
- goog.labs.userAgent.util.extractVersionTuples = function(a) {
2721
- for (var b = RegExp("(\\w[\\w ]+)/([^\\s]+)\\s*(?:\\((.*?)\\))?", "g"), c = [], d;d = b.exec(a);) {
2722
- c.push([d[1], d[2], d[3] || void 0]);
2723
- }
2724
- return c;
2758
+ goog.uri.utils.getScheme = function(a) {
2759
+ return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, a);
2725
2760
  };
2726
- goog.labs.userAgent.browser = {};
2727
- goog.labs.userAgent.browser.matchOpera_ = function() {
2728
- return goog.labs.userAgent.util.matchUserAgent("Opera") || goog.labs.userAgent.util.matchUserAgent("OPR");
2761
+ goog.uri.utils.getEffectiveScheme = function(a) {
2762
+ a = goog.uri.utils.getScheme(a);
2763
+ !a && goog.global.self && goog.global.self.location && (a = goog.global.self.location.protocol, a = a.substr(0, a.length - 1));
2764
+ return a ? a.toLowerCase() : "";
2729
2765
  };
2730
- goog.labs.userAgent.browser.matchIE_ = function() {
2731
- return goog.labs.userAgent.util.matchUserAgent("Edge") || goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
2766
+ goog.uri.utils.getUserInfoEncoded = function(a) {
2767
+ return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, a);
2732
2768
  };
2733
- goog.labs.userAgent.browser.matchFirefox_ = function() {
2734
- return goog.labs.userAgent.util.matchUserAgent("Firefox");
2769
+ goog.uri.utils.getUserInfo = function(a) {
2770
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(a));
2735
2771
  };
2736
- goog.labs.userAgent.browser.matchSafari_ = function() {
2737
- return goog.labs.userAgent.util.matchUserAgent("Safari") && !(goog.labs.userAgent.browser.matchChrome_() || goog.labs.userAgent.browser.matchCoast_() || goog.labs.userAgent.browser.matchOpera_() || goog.labs.userAgent.browser.matchIE_() || goog.labs.userAgent.browser.isSilk() || goog.labs.userAgent.util.matchUserAgent("Android"));
2772
+ goog.uri.utils.getDomainEncoded = function(a) {
2773
+ return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, a);
2738
2774
  };
2739
- goog.labs.userAgent.browser.matchCoast_ = function() {
2740
- return goog.labs.userAgent.util.matchUserAgent("Coast");
2775
+ goog.uri.utils.getDomain = function(a) {
2776
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a), !0);
2741
2777
  };
2742
- goog.labs.userAgent.browser.matchIosWebview_ = function() {
2743
- return (goog.labs.userAgent.util.matchUserAgent("iPad") || goog.labs.userAgent.util.matchUserAgent("iPhone")) && !goog.labs.userAgent.browser.matchSafari_() && !goog.labs.userAgent.browser.matchChrome_() && !goog.labs.userAgent.browser.matchCoast_() && goog.labs.userAgent.util.matchUserAgent("AppleWebKit");
2778
+ goog.uri.utils.getPort = function(a) {
2779
+ return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, a)) || null;
2744
2780
  };
2745
- goog.labs.userAgent.browser.matchChrome_ = function() {
2746
- return (goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS")) && !goog.labs.userAgent.browser.matchOpera_() && !goog.labs.userAgent.browser.matchIE_();
2781
+ goog.uri.utils.getPathEncoded = function(a) {
2782
+ return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, a);
2747
2783
  };
2748
- goog.labs.userAgent.browser.matchAndroidBrowser_ = function() {
2749
- return goog.labs.userAgent.util.matchUserAgent("Android") && !(goog.labs.userAgent.browser.isChrome() || goog.labs.userAgent.browser.isFirefox() || goog.labs.userAgent.browser.isOpera() || goog.labs.userAgent.browser.isSilk());
2784
+ goog.uri.utils.getPath = function(a) {
2785
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a), !0);
2750
2786
  };
2751
- goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
2752
- goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
2753
- goog.labs.userAgent.browser.isFirefox = goog.labs.userAgent.browser.matchFirefox_;
2754
- goog.labs.userAgent.browser.isSafari = goog.labs.userAgent.browser.matchSafari_;
2755
- goog.labs.userAgent.browser.isCoast = goog.labs.userAgent.browser.matchCoast_;
2756
- goog.labs.userAgent.browser.isIosWebview = goog.labs.userAgent.browser.matchIosWebview_;
2757
- goog.labs.userAgent.browser.isChrome = goog.labs.userAgent.browser.matchChrome_;
2758
- goog.labs.userAgent.browser.isAndroidBrowser = goog.labs.userAgent.browser.matchAndroidBrowser_;
2759
- goog.labs.userAgent.browser.isSilk = function() {
2760
- return goog.labs.userAgent.util.matchUserAgent("Silk");
2787
+ goog.uri.utils.getQueryData = function(a) {
2788
+ return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, a);
2761
2789
  };
2762
- goog.labs.userAgent.browser.getVersion = function() {
2763
- function a(a) {
2764
- a = goog.array.find(a, d);
2765
- return c[a] || "";
2766
- }
2767
- var b = goog.labs.userAgent.util.getUserAgent();
2768
- if (goog.labs.userAgent.browser.isIE()) {
2769
- return goog.labs.userAgent.browser.getIEVersion_(b);
2770
- }
2771
- var b = goog.labs.userAgent.util.extractVersionTuples(b), c = {};
2772
- goog.array.forEach(b, function(a) {
2773
- c[a[0]] = a[1];
2774
- });
2775
- var d = goog.partial(goog.object.containsKey, c);
2776
- return goog.labs.userAgent.browser.isOpera() ? a(["Version", "Opera", "OPR"]) : goog.labs.userAgent.browser.isChrome() ? a(["Chrome", "CriOS"]) : (b = b[2]) && b[1] || "";
2790
+ goog.uri.utils.getFragmentEncoded = function(a) {
2791
+ var b = a.indexOf("#");
2792
+ return 0 > b ? null : a.substr(b + 1);
2777
2793
  };
2778
- goog.labs.userAgent.browser.isVersionOrHigher = function(a) {
2779
- return 0 <= goog.string.compareVersions(goog.labs.userAgent.browser.getVersion(), a);
2794
+ goog.uri.utils.setFragmentEncoded = function(a, b) {
2795
+ return goog.uri.utils.removeFragment(a) + (b ? "#" + b : "");
2780
2796
  };
2781
- goog.labs.userAgent.browser.getIEVersion_ = function(a) {
2782
- var b = /rv: *([\d\.]*)/.exec(a);
2783
- if (b && b[1] || (b = /Edge\/([\d\.]+)/.exec(a))) {
2784
- return b[1];
2785
- }
2786
- var b = "", c = /MSIE +([\d\.]+)/.exec(a);
2787
- if (c && c[1]) {
2788
- if (a = /Trident\/(\d.\d)/.exec(a), "7.0" == c[1]) {
2789
- if (a && a[1]) {
2790
- switch(a[1]) {
2791
- case "4.0":
2792
- b = "8.0";
2793
- break;
2794
- case "5.0":
2795
- b = "9.0";
2796
- break;
2797
- case "6.0":
2798
- b = "10.0";
2799
- break;
2800
- case "7.0":
2801
- b = "11.0";
2802
- }
2803
- } else {
2804
- b = "7.0";
2805
- }
2806
- } else {
2807
- b = c[1];
2808
- }
2809
- }
2810
- return b;
2797
+ goog.uri.utils.getFragment = function(a) {
2798
+ return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(a));
2811
2799
  };
2812
- goog.labs.userAgent.engine = {};
2813
- goog.labs.userAgent.engine.isPresto = function() {
2814
- return goog.labs.userAgent.util.matchUserAgent("Presto");
2800
+ goog.uri.utils.getHost = function(a) {
2801
+ a = goog.uri.utils.split(a);
2802
+ return goog.uri.utils.buildFromEncodedParts(a[goog.uri.utils.ComponentIndex.SCHEME], a[goog.uri.utils.ComponentIndex.USER_INFO], a[goog.uri.utils.ComponentIndex.DOMAIN], a[goog.uri.utils.ComponentIndex.PORT]);
2815
2803
  };
2816
- goog.labs.userAgent.engine.isTrident = function() {
2817
- return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
2804
+ goog.uri.utils.getPathAndAfter = function(a) {
2805
+ a = goog.uri.utils.split(a);
2806
+ return goog.uri.utils.buildFromEncodedParts(null, null, null, null, a[goog.uri.utils.ComponentIndex.PATH], a[goog.uri.utils.ComponentIndex.QUERY_DATA], a[goog.uri.utils.ComponentIndex.FRAGMENT]);
2818
2807
  };
2819
- goog.labs.userAgent.engine.isEdge = function() {
2820
- return goog.labs.userAgent.util.matchUserAgent("Edge");
2808
+ goog.uri.utils.removeFragment = function(a) {
2809
+ var b = a.indexOf("#");
2810
+ return 0 > b ? a : a.substr(0, b);
2821
2811
  };
2822
- goog.labs.userAgent.engine.isWebKit = function() {
2823
- return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit") && !goog.labs.userAgent.engine.isEdge();
2812
+ goog.uri.utils.haveSameDomain = function(a, b) {
2813
+ var c = goog.uri.utils.split(a), d = goog.uri.utils.split(b);
2814
+ return c[goog.uri.utils.ComponentIndex.DOMAIN] == d[goog.uri.utils.ComponentIndex.DOMAIN] && c[goog.uri.utils.ComponentIndex.SCHEME] == d[goog.uri.utils.ComponentIndex.SCHEME] && c[goog.uri.utils.ComponentIndex.PORT] == d[goog.uri.utils.ComponentIndex.PORT];
2824
2815
  };
2825
- goog.labs.userAgent.engine.isGecko = function() {
2826
- return goog.labs.userAgent.util.matchUserAgent("Gecko") && !goog.labs.userAgent.engine.isWebKit() && !goog.labs.userAgent.engine.isTrident() && !goog.labs.userAgent.engine.isEdge();
2816
+ goog.uri.utils.assertNoFragmentsOrQueries_ = function(a) {
2817
+ if (goog.DEBUG && (0 <= a.indexOf("#") || 0 <= a.indexOf("?"))) {
2818
+ throw Error("goog.uri.utils: Fragment or query identifiers are not supported: [" + a + "]");
2819
+ }
2827
2820
  };
2828
- goog.labs.userAgent.engine.getVersion = function() {
2829
- var a = goog.labs.userAgent.util.getUserAgent();
2821
+ goog.uri.utils.parseQueryData = function(a, b) {
2830
2822
  if (a) {
2831
- var a = goog.labs.userAgent.util.extractVersionTuples(a), b = goog.labs.userAgent.engine.getEngineTuple_(a);
2832
- if (b) {
2833
- return "Gecko" == b[0] ? goog.labs.userAgent.engine.getVersionForKey_(a, "Firefox") : b[1];
2834
- }
2835
- var a = a[0], c;
2836
- if (a && (c = a[2]) && (c = /Trident\/([^\s;]+)/.exec(c))) {
2837
- return c[1];
2823
+ for (var c = a.split("&"), d = 0;d < c.length;d++) {
2824
+ var e = c[d].indexOf("="), f = null, g = null;
2825
+ 0 <= e ? (f = c[d].substring(0, e), g = c[d].substring(e + 1)) : f = c[d];
2826
+ b(f, g ? goog.string.urlDecode(g) : "");
2838
2827
  }
2839
2828
  }
2840
- return "";
2841
2829
  };
2842
- goog.labs.userAgent.engine.getEngineTuple_ = function(a) {
2843
- if (!goog.labs.userAgent.engine.isEdge()) {
2844
- return a[1];
2830
+ goog.uri.utils.appendQueryData_ = function(a) {
2831
+ if (a[1]) {
2832
+ var b = a[0], c = b.indexOf("#");
2833
+ 0 <= c && (a.push(b.substr(c)), a[0] = b = b.substr(0, c));
2834
+ c = b.indexOf("?");
2835
+ 0 > c ? a[1] = "?" : c == b.length - 1 && (a[1] = void 0);
2845
2836
  }
2846
- for (var b = 0;b < a.length;b++) {
2847
- var c = a[b];
2848
- if ("Edge" == c[0]) {
2849
- return c;
2837
+ return a.join("");
2838
+ };
2839
+ goog.uri.utils.appendKeyValuePairs_ = function(a, b, c) {
2840
+ if (goog.isArray(b)) {
2841
+ goog.asserts.assertArray(b);
2842
+ for (var d = 0;d < b.length;d++) {
2843
+ goog.uri.utils.appendKeyValuePairs_(a, String(b[d]), c);
2850
2844
  }
2845
+ } else {
2846
+ null != b && c.push("&", a, "" === b ? "" : "=", goog.string.urlEncode(b));
2851
2847
  }
2852
2848
  };
2853
- goog.labs.userAgent.engine.isVersionOrHigher = function(a) {
2854
- return 0 <= goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(), a);
2855
- };
2856
- goog.labs.userAgent.engine.getVersionForKey_ = function(a, b) {
2857
- var c = goog.array.find(a, function(a) {
2858
- return b == a[0];
2859
- });
2860
- return c && c[1] || "";
2849
+ goog.uri.utils.buildQueryDataBuffer_ = function(a, b, c) {
2850
+ goog.asserts.assert(0 == Math.max(b.length - (c || 0), 0) % 2, "goog.uri.utils: Key/value lists must be even in length.");
2851
+ for (c = c || 0;c < b.length;c += 2) {
2852
+ goog.uri.utils.appendKeyValuePairs_(b[c], b[c + 1], a);
2853
+ }
2854
+ return a;
2861
2855
  };
2862
- goog.labs.userAgent.platform = {};
2863
- goog.labs.userAgent.platform.isAndroid = function() {
2864
- return goog.labs.userAgent.util.matchUserAgent("Android");
2865
- };
2866
- goog.labs.userAgent.platform.isIpod = function() {
2867
- return goog.labs.userAgent.util.matchUserAgent("iPod");
2868
- };
2869
- goog.labs.userAgent.platform.isIphone = function() {
2870
- return goog.labs.userAgent.util.matchUserAgent("iPhone") && !goog.labs.userAgent.util.matchUserAgent("iPod") && !goog.labs.userAgent.util.matchUserAgent("iPad");
2871
- };
2872
- goog.labs.userAgent.platform.isIpad = function() {
2873
- return goog.labs.userAgent.util.matchUserAgent("iPad");
2874
- };
2875
- goog.labs.userAgent.platform.isIos = function() {
2876
- return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpad() || goog.labs.userAgent.platform.isIpod();
2877
- };
2878
- goog.labs.userAgent.platform.isMacintosh = function() {
2879
- return goog.labs.userAgent.util.matchUserAgent("Macintosh");
2880
- };
2881
- goog.labs.userAgent.platform.isLinux = function() {
2882
- return goog.labs.userAgent.util.matchUserAgent("Linux");
2883
- };
2884
- goog.labs.userAgent.platform.isWindows = function() {
2885
- return goog.labs.userAgent.util.matchUserAgent("Windows");
2886
- };
2887
- goog.labs.userAgent.platform.isChromeOS = function() {
2888
- return goog.labs.userAgent.util.matchUserAgent("CrOS");
2889
- };
2890
- goog.labs.userAgent.platform.getVersion = function() {
2891
- var a = goog.labs.userAgent.util.getUserAgent(), b = "";
2892
- goog.labs.userAgent.platform.isWindows() ? (b = /Windows (?:NT|Phone) ([0-9.]+)/, b = (a = b.exec(a)) ? a[1] : "0.0") : goog.labs.userAgent.platform.isIos() ? (b = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/, b = (a = b.exec(a)) && a[1].replace(/_/g, ".")) : goog.labs.userAgent.platform.isMacintosh() ? (b = /Mac OS X ([0-9_.]+)/, b = (a = b.exec(a)) ? a[1].replace(/_/g, ".") : "10") : goog.labs.userAgent.platform.isAndroid() ? (b = /Android\s+([^\);]+)(\)|;)/, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isChromeOS() &&
2893
- (b = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/, b = (a = b.exec(a)) && a[1]);
2894
- return b || "";
2895
- };
2896
- goog.labs.userAgent.platform.isVersionOrHigher = function(a) {
2897
- return 0 <= goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(), a);
2898
- };
2899
- goog.userAgent = {};
2900
- goog.userAgent.ASSUME_IE = !1;
2901
- goog.userAgent.ASSUME_GECKO = !1;
2902
- goog.userAgent.ASSUME_WEBKIT = !0;
2903
- goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
2904
- goog.userAgent.ASSUME_OPERA = !1;
2905
- goog.userAgent.ASSUME_ANY_VERSION = !1;
2906
- goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
2907
- goog.userAgent.getUserAgentString = function() {
2908
- return goog.labs.userAgent.util.getUserAgent();
2909
- };
2910
- goog.userAgent.getNavigator = function() {
2911
- return goog.global.navigator || null;
2912
- };
2913
- goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.labs.userAgent.browser.isOpera();
2914
- goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.labs.userAgent.browser.isIE();
2915
- goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.labs.userAgent.engine.isGecko();
2916
- goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.labs.userAgent.engine.isWebKit();
2917
- goog.userAgent.isMobile_ = function() {
2918
- return goog.userAgent.WEBKIT && goog.labs.userAgent.util.matchUserAgent("Mobile");
2919
- };
2920
- goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.isMobile_();
2921
- goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
2922
- goog.userAgent.determinePlatform_ = function() {
2923
- var a = goog.userAgent.getNavigator();
2924
- return a && a.platform || "";
2925
- };
2926
- goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
2927
- goog.userAgent.ASSUME_MAC = !1;
2928
- goog.userAgent.ASSUME_WINDOWS = !1;
2929
- goog.userAgent.ASSUME_LINUX = !1;
2930
- goog.userAgent.ASSUME_X11 = !1;
2931
- goog.userAgent.ASSUME_ANDROID = !1;
2932
- goog.userAgent.ASSUME_IPHONE = !1;
2933
- goog.userAgent.ASSUME_IPAD = !1;
2934
- goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD;
2935
- goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
2936
- goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.labs.userAgent.platform.isWindows();
2937
- goog.userAgent.isLegacyLinux_ = function() {
2938
- return goog.labs.userAgent.platform.isLinux() || goog.labs.userAgent.platform.isChromeOS();
2939
- };
2940
- goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.isLegacyLinux_();
2941
- goog.userAgent.isX11_ = function() {
2942
- var a = goog.userAgent.getNavigator();
2943
- return !!a && goog.string.contains(a.appVersion || "", "X11");
2944
- };
2945
- goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.isX11_();
2946
- goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.labs.userAgent.platform.isAndroid();
2947
- goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.labs.userAgent.platform.isIphone();
2948
- goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
2949
- goog.userAgent.determineVersion_ = function() {
2950
- if (goog.userAgent.OPERA && goog.global.opera) {
2951
- var a = goog.global.opera.version;
2952
- return goog.isFunction(a) ? a() : a;
2953
- }
2954
- var a = "", b = goog.userAgent.getVersionRegexResult_();
2955
- b && (a = b ? b[1] : "");
2956
- return goog.userAgent.IE && !goog.labs.userAgent.engine.isEdge() && (b = goog.userAgent.getDocumentMode_(), b > parseFloat(a)) ? String(b) : a;
2957
- };
2958
- goog.userAgent.getVersionRegexResult_ = function() {
2959
- var a = goog.userAgent.getUserAgentString();
2960
- if (goog.userAgent.GECKO) {
2961
- return /rv\:([^\);]+)(\)|;)/.exec(a);
2962
- }
2963
- if (goog.userAgent.IE && goog.labs.userAgent.engine.isEdge()) {
2964
- return /Edge\/([\d\.]+)/.exec(a);
2965
- }
2966
- if (goog.userAgent.IE) {
2967
- return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);
2968
- }
2969
- if (goog.userAgent.WEBKIT) {
2970
- return /WebKit\/(\S+)/.exec(a);
2971
- }
2972
- };
2973
- goog.userAgent.getDocumentMode_ = function() {
2974
- var a = goog.global.document;
2975
- return a ? a.documentMode : void 0;
2976
- };
2977
- goog.userAgent.VERSION = goog.userAgent.determineVersion_();
2978
- goog.userAgent.compare = function(a, b) {
2979
- return goog.string.compareVersions(a, b);
2980
- };
2981
- goog.userAgent.isVersionOrHigherCache_ = {};
2982
- goog.userAgent.isVersionOrHigher = function(a) {
2983
- return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[a] || (goog.userAgent.isVersionOrHigherCache_[a] = 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a));
2984
- };
2985
- goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
2986
- goog.userAgent.isDocumentModeOrHigher = function(a) {
2987
- return goog.userAgent.IE && (goog.labs.userAgent.engine.isEdge() || goog.userAgent.DOCUMENT_MODE >= a);
2988
- };
2989
- goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
2990
- goog.userAgent.DOCUMENT_MODE = function() {
2991
- var a = goog.global.document, b = goog.userAgent.getDocumentMode_();
2992
- return !a || !goog.userAgent.IE || !b && goog.labs.userAgent.engine.isEdge() ? void 0 : b || ("CSS1Compat" == a.compatMode ? parseInt(goog.userAgent.VERSION, 10) : 5);
2993
- }();
2994
- goog.uri = {};
2995
- goog.uri.utils = {};
2996
- goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63};
2997
- goog.uri.utils.buildFromEncodedParts = function(a, b, c, d, e, f, g) {
2998
- var h = "";
2999
- a && (h += a + ":");
3000
- c && (h += "//", b && (h += b + "@"), h += c, d && (h += ":" + d));
3001
- e && (h += e);
3002
- f && (h += "?" + f);
3003
- g && (h += "#" + g);
3004
- return h;
3005
- };
3006
- goog.uri.utils.splitRe_ = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;
3007
- goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7};
3008
- goog.uri.utils.split = function(a) {
3009
- goog.uri.utils.phishingProtection_();
3010
- return a.match(goog.uri.utils.splitRe_);
3011
- };
3012
- goog.uri.utils.needsPhishingProtection_ = goog.userAgent.WEBKIT;
3013
- goog.uri.utils.phishingProtection_ = function() {
3014
- if (goog.uri.utils.needsPhishingProtection_) {
3015
- goog.uri.utils.needsPhishingProtection_ = !1;
3016
- var a = goog.global.location;
3017
- if (a) {
3018
- var b = a.href;
3019
- if (b && (b = goog.uri.utils.getDomain(b)) && b != a.hostname) {
3020
- throw goog.uri.utils.needsPhishingProtection_ = !0, Error();
3021
- }
3022
- }
3023
- }
3024
- };
3025
- goog.uri.utils.decodeIfPossible_ = function(a, b) {
3026
- return a ? b ? decodeURI(a) : decodeURIComponent(a) : a;
3027
- };
3028
- goog.uri.utils.getComponentByIndex_ = function(a, b) {
3029
- return goog.uri.utils.split(b)[a] || null;
3030
- };
3031
- goog.uri.utils.getScheme = function(a) {
3032
- return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, a);
3033
- };
3034
- goog.uri.utils.getEffectiveScheme = function(a) {
3035
- a = goog.uri.utils.getScheme(a);
3036
- !a && self.location && (a = self.location.protocol, a = a.substr(0, a.length - 1));
3037
- return a ? a.toLowerCase() : "";
3038
- };
3039
- goog.uri.utils.getUserInfoEncoded = function(a) {
3040
- return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, a);
3041
- };
3042
- goog.uri.utils.getUserInfo = function(a) {
3043
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(a));
3044
- };
3045
- goog.uri.utils.getDomainEncoded = function(a) {
3046
- return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, a);
3047
- };
3048
- goog.uri.utils.getDomain = function(a) {
3049
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a), !0);
3050
- };
3051
- goog.uri.utils.getPort = function(a) {
3052
- return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, a)) || null;
3053
- };
3054
- goog.uri.utils.getPathEncoded = function(a) {
3055
- return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, a);
3056
- };
3057
- goog.uri.utils.getPath = function(a) {
3058
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a), !0);
3059
- };
3060
- goog.uri.utils.getQueryData = function(a) {
3061
- return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, a);
3062
- };
3063
- goog.uri.utils.getFragmentEncoded = function(a) {
3064
- var b = a.indexOf("#");
3065
- return 0 > b ? null : a.substr(b + 1);
3066
- };
3067
- goog.uri.utils.setFragmentEncoded = function(a, b) {
3068
- return goog.uri.utils.removeFragment(a) + (b ? "#" + b : "");
3069
- };
3070
- goog.uri.utils.getFragment = function(a) {
3071
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(a));
3072
- };
3073
- goog.uri.utils.getHost = function(a) {
3074
- a = goog.uri.utils.split(a);
3075
- return goog.uri.utils.buildFromEncodedParts(a[goog.uri.utils.ComponentIndex.SCHEME], a[goog.uri.utils.ComponentIndex.USER_INFO], a[goog.uri.utils.ComponentIndex.DOMAIN], a[goog.uri.utils.ComponentIndex.PORT]);
3076
- };
3077
- goog.uri.utils.getPathAndAfter = function(a) {
3078
- a = goog.uri.utils.split(a);
3079
- return goog.uri.utils.buildFromEncodedParts(null, null, null, null, a[goog.uri.utils.ComponentIndex.PATH], a[goog.uri.utils.ComponentIndex.QUERY_DATA], a[goog.uri.utils.ComponentIndex.FRAGMENT]);
3080
- };
3081
- goog.uri.utils.removeFragment = function(a) {
3082
- var b = a.indexOf("#");
3083
- return 0 > b ? a : a.substr(0, b);
3084
- };
3085
- goog.uri.utils.haveSameDomain = function(a, b) {
3086
- var c = goog.uri.utils.split(a), d = goog.uri.utils.split(b);
3087
- return c[goog.uri.utils.ComponentIndex.DOMAIN] == d[goog.uri.utils.ComponentIndex.DOMAIN] && c[goog.uri.utils.ComponentIndex.SCHEME] == d[goog.uri.utils.ComponentIndex.SCHEME] && c[goog.uri.utils.ComponentIndex.PORT] == d[goog.uri.utils.ComponentIndex.PORT];
3088
- };
3089
- goog.uri.utils.assertNoFragmentsOrQueries_ = function(a) {
3090
- if (goog.DEBUG && (0 <= a.indexOf("#") || 0 <= a.indexOf("?"))) {
3091
- throw Error("goog.uri.utils: Fragment or query identifiers are not supported: [" + a + "]");
3092
- }
3093
- };
3094
- goog.uri.utils.parseQueryData = function(a, b) {
3095
- for (var c = a.split("&"), d = 0;d < c.length;d++) {
3096
- var e = c[d].indexOf("="), f = null, g = null;
3097
- 0 <= e ? (f = c[d].substring(0, e), g = c[d].substring(e + 1)) : f = c[d];
3098
- b(f, g ? goog.string.urlDecode(g) : "");
3099
- }
3100
- };
3101
- goog.uri.utils.appendQueryData_ = function(a) {
3102
- if (a[1]) {
3103
- var b = a[0], c = b.indexOf("#");
3104
- 0 <= c && (a.push(b.substr(c)), a[0] = b = b.substr(0, c));
3105
- c = b.indexOf("?");
3106
- 0 > c ? a[1] = "?" : c == b.length - 1 && (a[1] = void 0);
3107
- }
3108
- return a.join("");
3109
- };
3110
- goog.uri.utils.appendKeyValuePairs_ = function(a, b, c) {
3111
- if (goog.isArray(b)) {
3112
- goog.asserts.assertArray(b);
3113
- for (var d = 0;d < b.length;d++) {
3114
- goog.uri.utils.appendKeyValuePairs_(a, String(b[d]), c);
3115
- }
3116
- } else {
3117
- null != b && c.push("&", a, "" === b ? "" : "=", goog.string.urlEncode(b));
3118
- }
3119
- };
3120
- goog.uri.utils.buildQueryDataBuffer_ = function(a, b, c) {
3121
- goog.asserts.assert(0 == Math.max(b.length - (c || 0), 0) % 2, "goog.uri.utils: Key/value lists must be even in length.");
3122
- for (c = c || 0;c < b.length;c += 2) {
3123
- goog.uri.utils.appendKeyValuePairs_(b[c], b[c + 1], a);
3124
- }
3125
- return a;
3126
- };
3127
- goog.uri.utils.buildQueryData = function(a, b) {
3128
- var c = goog.uri.utils.buildQueryDataBuffer_([], a, b);
3129
- c[0] = "";
3130
- return c.join("");
2856
+ goog.uri.utils.buildQueryData = function(a, b) {
2857
+ var c = goog.uri.utils.buildQueryDataBuffer_([], a, b);
2858
+ c[0] = "";
2859
+ return c.join("");
3131
2860
  };
3132
2861
  goog.uri.utils.buildQueryDataBufferFromMap_ = function(a, b) {
3133
2862
  for (var c in b) {
@@ -3230,19 +2959,15 @@ goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM;
3230
2959
  goog.Uri.prototype.toString = function() {
3231
2960
  var a = [], b = this.getScheme();
3232
2961
  b && a.push(goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), ":");
3233
- if (b = this.getDomain()) {
3234
- a.push("//");
3235
- var c = this.getUserInfo();
3236
- c && a.push(goog.Uri.encodeSpecialChars_(c, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), "@");
3237
- a.push(goog.Uri.removeDoubleEncoding_(goog.string.urlEncode(b)));
3238
- b = this.getPort();
3239
- null != b && a.push(":", String(b));
3240
- }
3241
- if (b = this.getPath()) {
3242
- this.hasDomain() && "/" != b.charAt(0) && a.push("/"), a.push(goog.Uri.encodeSpecialChars_(b, "/" == b.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_, !0));
3243
- }
3244
- (b = this.getEncodedQuery()) && a.push("?", b);
3245
- (b = this.getFragment()) && a.push("#", goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInFragment_));
2962
+ var c = this.getDomain();
2963
+ if (c || "file" == b) {
2964
+ a.push("//"), (b = this.getUserInfo()) && a.push(goog.Uri.encodeSpecialChars_(b, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), "@"), a.push(goog.Uri.removeDoubleEncoding_(goog.string.urlEncode(c))), c = this.getPort(), null != c && a.push(":", String(c));
2965
+ }
2966
+ if (c = this.getPath()) {
2967
+ this.hasDomain() && "/" != c.charAt(0) && a.push("/"), a.push(goog.Uri.encodeSpecialChars_(c, "/" == c.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_, !0));
2968
+ }
2969
+ (c = this.getEncodedQuery()) && a.push("?", c);
2970
+ (c = this.getFragment()) && a.push("#", goog.Uri.encodeSpecialChars_(c, goog.Uri.reDisallowedInFragment_));
3246
2971
  return a.join("");
3247
2972
  };
3248
2973
  goog.Uri.prototype.resolve = function(a) {
@@ -3650,7 +3375,7 @@ DIALOG:"DIALOG", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", EMBED:"EMBED",
3650
3375
  MAP:"MAP", MARK:"MARK", MATH:"MATH", MENU:"MENU", META:"META", METER:"METER", NAV:"NAV", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", OUTPUT:"OUTPUT", P:"P", PARAM:"PARAM", PRE:"PRE", PROGRESS:"PROGRESS", Q:"Q", RP:"RP", RT:"RT", RUBY:"RUBY", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SECTION:"SECTION", SELECT:"SELECT", SMALL:"SMALL", SOURCE:"SOURCE", SPAN:"SPAN", STRIKE:"STRIKE", STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUMMARY:"SUMMARY",
3651
3376
  SUP:"SUP", SVG:"SVG", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEMPLATE:"TEMPLATE", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TIME:"TIME", TITLE:"TITLE", TR:"TR", TRACK:"TRACK", TT:"TT", U:"U", UL:"UL", VAR:"VAR", VIDEO:"VIDEO", WBR:"WBR"};
3652
3377
  goog.dom.tags = {};
3653
- goog.dom.tags.VOID_TAGS_ = goog.object.createSet("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));
3378
+ goog.dom.tags.VOID_TAGS_ = {area:!0, base:!0, br:!0, col:!0, command:!0, embed:!0, hr:!0, img:!0, input:!0, keygen:!0, link:!0, meta:!0, param:!0, source:!0, track:!0, wbr:!0};
3654
3379
  goog.dom.tags.isVoidTag = function(a) {
3655
3380
  return !0 === goog.dom.tags.VOID_TAGS_[a];
3656
3381
  };
@@ -3977,32 +3702,25 @@ goog.html.SafeUrl.unwrap = function(a) {
3977
3702
  goog.html.SafeUrl.fromConstant = function(a) {
3978
3703
  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a));
3979
3704
  };
3980
- goog.html.SAFE_BLOB_TYPE_PATTERN_ = /^image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)$/i;
3705
+ goog.html.SAFE_MIME_TYPE_PATTERN_ = /^(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm))$/i;
3981
3706
  goog.html.SafeUrl.fromBlob = function(a) {
3982
- a = goog.html.SAFE_BLOB_TYPE_PATTERN_.test(a.type) ? goog.fs.url.createObjectUrl(a) : goog.html.SafeUrl.INNOCUOUS_STRING;
3707
+ a = goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type) ? goog.fs.url.createObjectUrl(a) : goog.html.SafeUrl.INNOCUOUS_STRING;
3983
3708
  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
3984
3709
  };
3710
+ goog.html.DATA_URL_PATTERN_ = /^data:([^;,]*);base64,[a-z0-9+\/]+=*$/i;
3711
+ goog.html.SafeUrl.fromDataUrl = function(a) {
3712
+ var b = a.match(goog.html.DATA_URL_PATTERN_), b = b && goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);
3713
+ return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b ? a : goog.html.SafeUrl.INNOCUOUS_STRING);
3714
+ };
3985
3715
  goog.html.SAFE_URL_PATTERN_ = /^(?:(?:https?|mailto|ftp):|[^&:/?#]*(?:[/?#]|$))/i;
3986
3716
  goog.html.SafeUrl.sanitize = function(a) {
3987
3717
  if (a instanceof goog.html.SafeUrl) {
3988
3718
  return a;
3989
3719
  }
3990
3720
  a = a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
3991
- a = goog.html.SAFE_URL_PATTERN_.test(a) ? goog.html.SafeUrl.normalize_(a) : goog.html.SafeUrl.INNOCUOUS_STRING;
3721
+ goog.html.SAFE_URL_PATTERN_.test(a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
3992
3722
  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
3993
3723
  };
3994
- goog.html.SafeUrl.normalize_ = function(a) {
3995
- try {
3996
- var b = encodeURI(a);
3997
- } catch (c) {
3998
- return goog.html.SafeUrl.INNOCUOUS_STRING;
3999
- }
4000
- return b.replace(goog.html.SafeUrl.NORMALIZE_MATCHER_, function(a) {
4001
- return goog.html.SafeUrl.NORMALIZE_REPLACER_MAP_[a];
4002
- });
4003
- };
4004
- goog.html.SafeUrl.NORMALIZE_MATCHER_ = /[()']|%5B|%5D|%25/g;
4005
- goog.html.SafeUrl.NORMALIZE_REPLACER_MAP_ = {"'":"%27", "(":"%28", ")":"%29", "%5B":"[", "%5D":"]", "%25":"%"};
4006
3724
  goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
4007
3725
  goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function(a) {
4008
3726
  var b = new goog.html.SafeUrl;
@@ -4132,7 +3850,11 @@ goog.html.SafeHtml.getAttrNameAndValue_ = function(a, b, c) {
4132
3850
  if (c instanceof goog.html.SafeUrl) {
4133
3851
  c = goog.html.SafeUrl.unwrap(c);
4134
3852
  } else {
4135
- throw Error('Attribute "' + b + '" on tag "' + a + '" requires goog.html.SafeUrl or goog.string.Const value, "' + c + '" given.');
3853
+ if (goog.isString(c)) {
3854
+ c = goog.html.SafeUrl.sanitize(c).getTypedStringValue();
3855
+ } else {
3856
+ throw Error('Attribute "' + b + '" on tag "' + a + '" requires goog.html.SafeUrl, goog.string.Const, or string, value "' + c + '" given.');
3857
+ }
4136
3858
  }
4137
3859
  }
4138
3860
  }
@@ -4209,149 +3931,462 @@ goog.html.SafeHtml.combineAttributes = function(a, b, c) {
4209
3931
  }
4210
3932
  return d;
4211
3933
  };
4212
- goog.html.SafeHtml.DOCTYPE_HTML = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>", goog.i18n.bidi.Dir.NEUTRAL);
4213
- goog.html.SafeHtml.EMPTY = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
4214
- goog.html.SafeScript = function() {
4215
- this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = "";
4216
- this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
3934
+ goog.html.SafeHtml.DOCTYPE_HTML = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>", goog.i18n.bidi.Dir.NEUTRAL);
3935
+ goog.html.SafeHtml.EMPTY = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
3936
+ goog.html.SafeScript = function() {
3937
+ this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = "";
3938
+ this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
3939
+ };
3940
+ goog.html.SafeScript.prototype.implementsGoogStringTypedString = !0;
3941
+ goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
3942
+ goog.html.SafeScript.fromConstant = function(a) {
3943
+ a = goog.string.Const.unwrap(a);
3944
+ return 0 === a.length ? goog.html.SafeScript.EMPTY : goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a);
3945
+ };
3946
+ goog.html.SafeScript.prototype.getTypedStringValue = function() {
3947
+ return this.privateDoNotAccessOrElseSafeScriptWrappedValue_;
3948
+ };
3949
+ goog.DEBUG && (goog.html.SafeScript.prototype.toString = function() {
3950
+ return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}";
3951
+ });
3952
+ goog.html.SafeScript.unwrap = function(a) {
3953
+ if (a instanceof goog.html.SafeScript && a.constructor === goog.html.SafeScript && a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
3954
+ return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;
3955
+ }
3956
+ goog.asserts.fail("expected object of type SafeScript, got '" + a + "'");
3957
+ return "type_error:SafeScript";
3958
+ };
3959
+ goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse = function(a) {
3960
+ return (new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(a);
3961
+ };
3962
+ goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_ = function(a) {
3963
+ this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = a;
3964
+ return this;
3965
+ };
3966
+ goog.html.SafeScript.EMPTY = goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("");
3967
+ goog.html.uncheckedconversions = {};
3968
+ goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract = function(a, b, c) {
3969
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3970
+ goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3971
+ return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b, c || null);
3972
+ };
3973
+ goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract = function(a, b) {
3974
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3975
+ goog.asserts.assert(!goog.string.isEmpty(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3976
+ return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b);
3977
+ };
3978
+ goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract = function(a, b) {
3979
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3980
+ goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3981
+ return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b);
3982
+ };
3983
+ goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract = function(a, b) {
3984
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3985
+ goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3986
+ return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
3987
+ };
3988
+ goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract = function(a, b) {
3989
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3990
+ goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3991
+ return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
3992
+ };
3993
+ goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract = function(a, b) {
3994
+ goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
3995
+ goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
3996
+ return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
3997
+ };
3998
+ goog.structs.Collection = function() {
3999
+ };
4000
+ goog.structs.Set = function(a) {
4001
+ this.map_ = new goog.structs.Map;
4002
+ a && this.addAll(a);
4003
+ };
4004
+ goog.structs.Set.getKey_ = function(a) {
4005
+ var b = typeof a;
4006
+ return "object" == b && a || "function" == b ? "o" + goog.getUid(a) : b.substr(0, 1) + a;
4007
+ };
4008
+ goog.structs.Set.prototype.getCount = function() {
4009
+ return this.map_.getCount();
4010
+ };
4011
+ goog.structs.Set.prototype.add = function(a) {
4012
+ this.map_.set(goog.structs.Set.getKey_(a), a);
4013
+ };
4014
+ goog.structs.Set.prototype.addAll = function(a) {
4015
+ a = goog.structs.getValues(a);
4016
+ for (var b = a.length, c = 0;c < b;c++) {
4017
+ this.add(a[c]);
4018
+ }
4019
+ };
4020
+ goog.structs.Set.prototype.removeAll = function(a) {
4021
+ a = goog.structs.getValues(a);
4022
+ for (var b = a.length, c = 0;c < b;c++) {
4023
+ this.remove(a[c]);
4024
+ }
4025
+ };
4026
+ goog.structs.Set.prototype.remove = function(a) {
4027
+ return this.map_.remove(goog.structs.Set.getKey_(a));
4028
+ };
4029
+ goog.structs.Set.prototype.clear = function() {
4030
+ this.map_.clear();
4031
+ };
4032
+ goog.structs.Set.prototype.isEmpty = function() {
4033
+ return this.map_.isEmpty();
4034
+ };
4035
+ goog.structs.Set.prototype.contains = function(a) {
4036
+ return this.map_.containsKey(goog.structs.Set.getKey_(a));
4037
+ };
4038
+ goog.structs.Set.prototype.containsAll = function(a) {
4039
+ return goog.structs.every(a, this.contains, this);
4040
+ };
4041
+ goog.structs.Set.prototype.intersection = function(a) {
4042
+ var b = new goog.structs.Set;
4043
+ a = goog.structs.getValues(a);
4044
+ for (var c = 0;c < a.length;c++) {
4045
+ var d = a[c];
4046
+ this.contains(d) && b.add(d);
4047
+ }
4048
+ return b;
4049
+ };
4050
+ goog.structs.Set.prototype.difference = function(a) {
4051
+ var b = this.clone();
4052
+ b.removeAll(a);
4053
+ return b;
4054
+ };
4055
+ goog.structs.Set.prototype.getValues = function() {
4056
+ return this.map_.getValues();
4057
+ };
4058
+ goog.structs.Set.prototype.clone = function() {
4059
+ return new goog.structs.Set(this);
4060
+ };
4061
+ goog.structs.Set.prototype.equals = function(a) {
4062
+ return this.getCount() == goog.structs.getCount(a) && this.isSubsetOf(a);
4063
+ };
4064
+ goog.structs.Set.prototype.isSubsetOf = function(a) {
4065
+ var b = goog.structs.getCount(a);
4066
+ if (this.getCount() > b) {
4067
+ return !1;
4068
+ }
4069
+ !(a instanceof goog.structs.Set) && 5 < b && (a = new goog.structs.Set(a));
4070
+ return goog.structs.every(this, function(b) {
4071
+ return goog.structs.contains(a, b);
4072
+ });
4073
+ };
4074
+ goog.structs.Set.prototype.__iterator__ = function(a) {
4075
+ return this.map_.__iterator__(!1);
4076
+ };
4077
+ goog.labs = {};
4078
+ goog.labs.userAgent = {};
4079
+ goog.labs.userAgent.util = {};
4080
+ goog.labs.userAgent.util.getNativeUserAgentString_ = function() {
4081
+ var a = goog.labs.userAgent.util.getNavigator_();
4082
+ return a && (a = a.userAgent) ? a : "";
4083
+ };
4084
+ goog.labs.userAgent.util.getNavigator_ = function() {
4085
+ return goog.global.navigator;
4086
+ };
4087
+ goog.labs.userAgent.util.userAgent_ = goog.labs.userAgent.util.getNativeUserAgentString_();
4088
+ goog.labs.userAgent.util.setUserAgent = function(a) {
4089
+ goog.labs.userAgent.util.userAgent_ = a || goog.labs.userAgent.util.getNativeUserAgentString_();
4090
+ };
4091
+ goog.labs.userAgent.util.getUserAgent = function() {
4092
+ return goog.labs.userAgent.util.userAgent_;
4093
+ };
4094
+ goog.labs.userAgent.util.matchUserAgent = function(a) {
4095
+ var b = goog.labs.userAgent.util.getUserAgent();
4096
+ return goog.string.contains(b, a);
4097
+ };
4098
+ goog.labs.userAgent.util.matchUserAgentIgnoreCase = function(a) {
4099
+ var b = goog.labs.userAgent.util.getUserAgent();
4100
+ return goog.string.caseInsensitiveContains(b, a);
4101
+ };
4102
+ goog.labs.userAgent.util.extractVersionTuples = function(a) {
4103
+ for (var b = /(\w[\w ]+)\/([^\s]+)\s*(?:\((.*?)\))?/g, c = [], d;d = b.exec(a);) {
4104
+ c.push([d[1], d[2], d[3] || void 0]);
4105
+ }
4106
+ return c;
4107
+ };
4108
+ goog.labs.userAgent.browser = {};
4109
+ goog.labs.userAgent.browser.matchOpera_ = function() {
4110
+ return goog.labs.userAgent.util.matchUserAgent("Opera") || goog.labs.userAgent.util.matchUserAgent("OPR");
4111
+ };
4112
+ goog.labs.userAgent.browser.matchIE_ = function() {
4113
+ return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
4114
+ };
4115
+ goog.labs.userAgent.browser.matchEdge_ = function() {
4116
+ return goog.labs.userAgent.util.matchUserAgent("Edge");
4117
+ };
4118
+ goog.labs.userAgent.browser.matchFirefox_ = function() {
4119
+ return goog.labs.userAgent.util.matchUserAgent("Firefox");
4120
+ };
4121
+ goog.labs.userAgent.browser.matchSafari_ = function() {
4122
+ return goog.labs.userAgent.util.matchUserAgent("Safari") && !(goog.labs.userAgent.browser.matchChrome_() || goog.labs.userAgent.browser.matchCoast_() || goog.labs.userAgent.browser.matchOpera_() || goog.labs.userAgent.browser.matchEdge_() || goog.labs.userAgent.browser.isSilk() || goog.labs.userAgent.util.matchUserAgent("Android"));
4123
+ };
4124
+ goog.labs.userAgent.browser.matchCoast_ = function() {
4125
+ return goog.labs.userAgent.util.matchUserAgent("Coast");
4126
+ };
4127
+ goog.labs.userAgent.browser.matchIosWebview_ = function() {
4128
+ return (goog.labs.userAgent.util.matchUserAgent("iPad") || goog.labs.userAgent.util.matchUserAgent("iPhone")) && !goog.labs.userAgent.browser.matchSafari_() && !goog.labs.userAgent.browser.matchChrome_() && !goog.labs.userAgent.browser.matchCoast_() && goog.labs.userAgent.util.matchUserAgent("AppleWebKit");
4129
+ };
4130
+ goog.labs.userAgent.browser.matchChrome_ = function() {
4131
+ return (goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS")) && !goog.labs.userAgent.browser.matchOpera_() && !goog.labs.userAgent.browser.matchEdge_();
4132
+ };
4133
+ goog.labs.userAgent.browser.matchAndroidBrowser_ = function() {
4134
+ return goog.labs.userAgent.util.matchUserAgent("Android") && !(goog.labs.userAgent.browser.isChrome() || goog.labs.userAgent.browser.isFirefox() || goog.labs.userAgent.browser.isOpera() || goog.labs.userAgent.browser.isSilk());
4135
+ };
4136
+ goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
4137
+ goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
4138
+ goog.labs.userAgent.browser.isEdge = goog.labs.userAgent.browser.matchEdge_;
4139
+ goog.labs.userAgent.browser.isFirefox = goog.labs.userAgent.browser.matchFirefox_;
4140
+ goog.labs.userAgent.browser.isSafari = goog.labs.userAgent.browser.matchSafari_;
4141
+ goog.labs.userAgent.browser.isCoast = goog.labs.userAgent.browser.matchCoast_;
4142
+ goog.labs.userAgent.browser.isIosWebview = goog.labs.userAgent.browser.matchIosWebview_;
4143
+ goog.labs.userAgent.browser.isChrome = goog.labs.userAgent.browser.matchChrome_;
4144
+ goog.labs.userAgent.browser.isAndroidBrowser = goog.labs.userAgent.browser.matchAndroidBrowser_;
4145
+ goog.labs.userAgent.browser.isSilk = function() {
4146
+ return goog.labs.userAgent.util.matchUserAgent("Silk");
4147
+ };
4148
+ goog.labs.userAgent.browser.getVersion = function() {
4149
+ function a(a) {
4150
+ a = goog.array.find(a, d);
4151
+ return c[a] || "";
4152
+ }
4153
+ var b = goog.labs.userAgent.util.getUserAgent();
4154
+ if (goog.labs.userAgent.browser.isIE()) {
4155
+ return goog.labs.userAgent.browser.getIEVersion_(b);
4156
+ }
4157
+ var b = goog.labs.userAgent.util.extractVersionTuples(b), c = {};
4158
+ goog.array.forEach(b, function(a) {
4159
+ c[a[0]] = a[1];
4160
+ });
4161
+ var d = goog.partial(goog.object.containsKey, c);
4162
+ return goog.labs.userAgent.browser.isOpera() ? a(["Version", "Opera", "OPR"]) : goog.labs.userAgent.browser.isEdge() ? a(["Edge"]) : goog.labs.userAgent.browser.isChrome() ? a(["Chrome", "CriOS"]) : (b = b[2]) && b[1] || "";
4163
+ };
4164
+ goog.labs.userAgent.browser.isVersionOrHigher = function(a) {
4165
+ return 0 <= goog.string.compareVersions(goog.labs.userAgent.browser.getVersion(), a);
4166
+ };
4167
+ goog.labs.userAgent.browser.getIEVersion_ = function(a) {
4168
+ var b = /rv: *([\d\.]*)/.exec(a);
4169
+ if (b && b[1]) {
4170
+ return b[1];
4171
+ }
4172
+ var b = "", c = /MSIE +([\d\.]+)/.exec(a);
4173
+ if (c && c[1]) {
4174
+ if (a = /Trident\/(\d.\d)/.exec(a), "7.0" == c[1]) {
4175
+ if (a && a[1]) {
4176
+ switch(a[1]) {
4177
+ case "4.0":
4178
+ b = "8.0";
4179
+ break;
4180
+ case "5.0":
4181
+ b = "9.0";
4182
+ break;
4183
+ case "6.0":
4184
+ b = "10.0";
4185
+ break;
4186
+ case "7.0":
4187
+ b = "11.0";
4188
+ }
4189
+ } else {
4190
+ b = "7.0";
4191
+ }
4192
+ } else {
4193
+ b = c[1];
4194
+ }
4195
+ }
4196
+ return b;
4197
+ };
4198
+ goog.labs.userAgent.engine = {};
4199
+ goog.labs.userAgent.engine.isPresto = function() {
4200
+ return goog.labs.userAgent.util.matchUserAgent("Presto");
4201
+ };
4202
+ goog.labs.userAgent.engine.isTrident = function() {
4203
+ return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
4217
4204
  };
4218
- goog.html.SafeScript.prototype.implementsGoogStringTypedString = !0;
4219
- goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
4220
- goog.html.SafeScript.fromConstant = function(a) {
4221
- a = goog.string.Const.unwrap(a);
4222
- return 0 === a.length ? goog.html.SafeScript.EMPTY : goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a);
4205
+ goog.labs.userAgent.engine.isEdge = function() {
4206
+ return goog.labs.userAgent.util.matchUserAgent("Edge");
4223
4207
  };
4224
- goog.html.SafeScript.prototype.getTypedStringValue = function() {
4225
- return this.privateDoNotAccessOrElseSafeScriptWrappedValue_;
4208
+ goog.labs.userAgent.engine.isWebKit = function() {
4209
+ return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit") && !goog.labs.userAgent.engine.isEdge();
4226
4210
  };
4227
- goog.DEBUG && (goog.html.SafeScript.prototype.toString = function() {
4228
- return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}";
4229
- });
4230
- goog.html.SafeScript.unwrap = function(a) {
4231
- if (a instanceof goog.html.SafeScript && a.constructor === goog.html.SafeScript && a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
4232
- return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;
4211
+ goog.labs.userAgent.engine.isGecko = function() {
4212
+ return goog.labs.userAgent.util.matchUserAgent("Gecko") && !goog.labs.userAgent.engine.isWebKit() && !goog.labs.userAgent.engine.isTrident() && !goog.labs.userAgent.engine.isEdge();
4213
+ };
4214
+ goog.labs.userAgent.engine.getVersion = function() {
4215
+ var a = goog.labs.userAgent.util.getUserAgent();
4216
+ if (a) {
4217
+ var a = goog.labs.userAgent.util.extractVersionTuples(a), b = goog.labs.userAgent.engine.getEngineTuple_(a);
4218
+ if (b) {
4219
+ return "Gecko" == b[0] ? goog.labs.userAgent.engine.getVersionForKey_(a, "Firefox") : b[1];
4220
+ }
4221
+ var a = a[0], c;
4222
+ if (a && (c = a[2]) && (c = /Trident\/([^\s;]+)/.exec(c))) {
4223
+ return c[1];
4224
+ }
4233
4225
  }
4234
- goog.asserts.fail("expected object of type SafeScript, got '" + a + "'");
4235
- return "type_error:SafeScript";
4226
+ return "";
4236
4227
  };
4237
- goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse = function(a) {
4238
- return (new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(a);
4228
+ goog.labs.userAgent.engine.getEngineTuple_ = function(a) {
4229
+ if (!goog.labs.userAgent.engine.isEdge()) {
4230
+ return a[1];
4231
+ }
4232
+ for (var b = 0;b < a.length;b++) {
4233
+ var c = a[b];
4234
+ if ("Edge" == c[0]) {
4235
+ return c;
4236
+ }
4237
+ }
4239
4238
  };
4240
- goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_ = function(a) {
4241
- this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = a;
4242
- return this;
4239
+ goog.labs.userAgent.engine.isVersionOrHigher = function(a) {
4240
+ return 0 <= goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(), a);
4243
4241
  };
4244
- goog.html.SafeScript.EMPTY = goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("");
4245
- goog.html.uncheckedconversions = {};
4246
- goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract = function(a, b, c) {
4247
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4248
- goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4249
- return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b, c || null);
4242
+ goog.labs.userAgent.engine.getVersionForKey_ = function(a, b) {
4243
+ var c = goog.array.find(a, function(a) {
4244
+ return b == a[0];
4245
+ });
4246
+ return c && c[1] || "";
4250
4247
  };
4251
- goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract = function(a, b) {
4252
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4253
- goog.asserts.assert(!goog.string.isEmpty(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4254
- return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b);
4248
+ goog.labs.userAgent.platform = {};
4249
+ goog.labs.userAgent.platform.isAndroid = function() {
4250
+ return goog.labs.userAgent.util.matchUserAgent("Android");
4255
4251
  };
4256
- goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract = function(a, b) {
4257
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4258
- goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4259
- return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b);
4252
+ goog.labs.userAgent.platform.isIpod = function() {
4253
+ return goog.labs.userAgent.util.matchUserAgent("iPod");
4260
4254
  };
4261
- goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract = function(a, b) {
4262
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4263
- goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4264
- return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
4255
+ goog.labs.userAgent.platform.isIphone = function() {
4256
+ return goog.labs.userAgent.util.matchUserAgent("iPhone") && !goog.labs.userAgent.util.matchUserAgent("iPod") && !goog.labs.userAgent.util.matchUserAgent("iPad");
4265
4257
  };
4266
- goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract = function(a, b) {
4267
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4268
- goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4269
- return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
4258
+ goog.labs.userAgent.platform.isIpad = function() {
4259
+ return goog.labs.userAgent.util.matchUserAgent("iPad");
4270
4260
  };
4271
- goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract = function(a, b) {
4272
- goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
4273
- goog.asserts.assert(!goog.string.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
4274
- return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
4261
+ goog.labs.userAgent.platform.isIos = function() {
4262
+ return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpad() || goog.labs.userAgent.platform.isIpod();
4275
4263
  };
4276
- goog.structs.Collection = function() {
4264
+ goog.labs.userAgent.platform.isMacintosh = function() {
4265
+ return goog.labs.userAgent.util.matchUserAgent("Macintosh");
4277
4266
  };
4278
- goog.structs.Set = function(a) {
4279
- this.map_ = new goog.structs.Map;
4280
- a && this.addAll(a);
4267
+ goog.labs.userAgent.platform.isLinux = function() {
4268
+ return goog.labs.userAgent.util.matchUserAgent("Linux");
4281
4269
  };
4282
- goog.structs.Set.getKey_ = function(a) {
4283
- var b = typeof a;
4284
- return "object" == b && a || "function" == b ? "o" + goog.getUid(a) : b.substr(0, 1) + a;
4270
+ goog.labs.userAgent.platform.isWindows = function() {
4271
+ return goog.labs.userAgent.util.matchUserAgent("Windows");
4285
4272
  };
4286
- goog.structs.Set.prototype.getCount = function() {
4287
- return this.map_.getCount();
4273
+ goog.labs.userAgent.platform.isChromeOS = function() {
4274
+ return goog.labs.userAgent.util.matchUserAgent("CrOS");
4288
4275
  };
4289
- goog.structs.Set.prototype.add = function(a) {
4290
- this.map_.set(goog.structs.Set.getKey_(a), a);
4276
+ goog.labs.userAgent.platform.getVersion = function() {
4277
+ var a = goog.labs.userAgent.util.getUserAgent(), b = "";
4278
+ goog.labs.userAgent.platform.isWindows() ? (b = /Windows (?:NT|Phone) ([0-9.]+)/, b = (a = b.exec(a)) ? a[1] : "0.0") : goog.labs.userAgent.platform.isIos() ? (b = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/, b = (a = b.exec(a)) && a[1].replace(/_/g, ".")) : goog.labs.userAgent.platform.isMacintosh() ? (b = /Mac OS X ([0-9_.]+)/, b = (a = b.exec(a)) ? a[1].replace(/_/g, ".") : "10") : goog.labs.userAgent.platform.isAndroid() ? (b = /Android\s+([^\);]+)(\)|;)/, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isChromeOS() &&
4279
+ (b = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/, b = (a = b.exec(a)) && a[1]);
4280
+ return b || "";
4291
4281
  };
4292
- goog.structs.Set.prototype.addAll = function(a) {
4293
- a = goog.structs.getValues(a);
4294
- for (var b = a.length, c = 0;c < b;c++) {
4295
- this.add(a[c]);
4296
- }
4282
+ goog.labs.userAgent.platform.isVersionOrHigher = function(a) {
4283
+ return 0 <= goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(), a);
4297
4284
  };
4298
- goog.structs.Set.prototype.removeAll = function(a) {
4299
- a = goog.structs.getValues(a);
4300
- for (var b = a.length, c = 0;c < b;c++) {
4301
- this.remove(a[c]);
4302
- }
4285
+ goog.userAgent = {};
4286
+ goog.userAgent.ASSUME_IE = !1;
4287
+ goog.userAgent.ASSUME_EDGE = !1;
4288
+ goog.userAgent.ASSUME_GECKO = !1;
4289
+ goog.userAgent.ASSUME_WEBKIT = !0;
4290
+ goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
4291
+ goog.userAgent.ASSUME_OPERA = !1;
4292
+ goog.userAgent.ASSUME_ANY_VERSION = !1;
4293
+ goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
4294
+ goog.userAgent.getUserAgentString = function() {
4295
+ return goog.labs.userAgent.util.getUserAgent();
4303
4296
  };
4304
- goog.structs.Set.prototype.remove = function(a) {
4305
- return this.map_.remove(goog.structs.Set.getKey_(a));
4297
+ goog.userAgent.getNavigator = function() {
4298
+ return goog.global.navigator || null;
4306
4299
  };
4307
- goog.structs.Set.prototype.clear = function() {
4308
- this.map_.clear();
4300
+ goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.labs.userAgent.browser.isOpera();
4301
+ goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.labs.userAgent.browser.isIE();
4302
+ goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_EDGE : goog.labs.userAgent.engine.isEdge();
4303
+ goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;
4304
+ goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.labs.userAgent.engine.isGecko();
4305
+ goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.labs.userAgent.engine.isWebKit();
4306
+ goog.userAgent.isMobile_ = function() {
4307
+ return goog.userAgent.WEBKIT && goog.labs.userAgent.util.matchUserAgent("Mobile");
4309
4308
  };
4310
- goog.structs.Set.prototype.isEmpty = function() {
4311
- return this.map_.isEmpty();
4309
+ goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.isMobile_();
4310
+ goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
4311
+ goog.userAgent.determinePlatform_ = function() {
4312
+ var a = goog.userAgent.getNavigator();
4313
+ return a && a.platform || "";
4312
4314
  };
4313
- goog.structs.Set.prototype.contains = function(a) {
4314
- return this.map_.containsKey(goog.structs.Set.getKey_(a));
4315
+ goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
4316
+ goog.userAgent.ASSUME_MAC = !1;
4317
+ goog.userAgent.ASSUME_WINDOWS = !1;
4318
+ goog.userAgent.ASSUME_LINUX = !1;
4319
+ goog.userAgent.ASSUME_X11 = !1;
4320
+ goog.userAgent.ASSUME_ANDROID = !1;
4321
+ goog.userAgent.ASSUME_IPHONE = !1;
4322
+ goog.userAgent.ASSUME_IPAD = !1;
4323
+ goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD;
4324
+ goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
4325
+ goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.labs.userAgent.platform.isWindows();
4326
+ goog.userAgent.isLegacyLinux_ = function() {
4327
+ return goog.labs.userAgent.platform.isLinux() || goog.labs.userAgent.platform.isChromeOS();
4315
4328
  };
4316
- goog.structs.Set.prototype.containsAll = function(a) {
4317
- return goog.structs.every(a, this.contains, this);
4329
+ goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.isLegacyLinux_();
4330
+ goog.userAgent.isX11_ = function() {
4331
+ var a = goog.userAgent.getNavigator();
4332
+ return !!a && goog.string.contains(a.appVersion || "", "X11");
4318
4333
  };
4319
- goog.structs.Set.prototype.intersection = function(a) {
4320
- var b = new goog.structs.Set;
4321
- a = goog.structs.getValues(a);
4322
- for (var c = 0;c < a.length;c++) {
4323
- var d = a[c];
4324
- this.contains(d) && b.add(d);
4334
+ goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.isX11_();
4335
+ goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.labs.userAgent.platform.isAndroid();
4336
+ goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.labs.userAgent.platform.isIphone();
4337
+ goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
4338
+ goog.userAgent.operaVersion_ = function() {
4339
+ var a = goog.global.opera.version;
4340
+ try {
4341
+ return a();
4342
+ } catch (b) {
4343
+ return a;
4325
4344
  }
4326
- return b;
4327
4345
  };
4328
- goog.structs.Set.prototype.difference = function(a) {
4329
- var b = this.clone();
4330
- b.removeAll(a);
4331
- return b;
4346
+ goog.userAgent.determineVersion_ = function() {
4347
+ if (goog.userAgent.OPERA && goog.global.opera) {
4348
+ return goog.userAgent.operaVersion_();
4349
+ }
4350
+ var a = "", b = goog.userAgent.getVersionRegexResult_();
4351
+ b && (a = b ? b[1] : "");
4352
+ return goog.userAgent.IE && (b = goog.userAgent.getDocumentMode_(), b > parseFloat(a)) ? String(b) : a;
4332
4353
  };
4333
- goog.structs.Set.prototype.getValues = function() {
4334
- return this.map_.getValues();
4354
+ goog.userAgent.getVersionRegexResult_ = function() {
4355
+ var a = goog.userAgent.getUserAgentString();
4356
+ if (goog.userAgent.GECKO) {
4357
+ return /rv\:([^\);]+)(\)|;)/.exec(a);
4358
+ }
4359
+ if (goog.userAgent.EDGE) {
4360
+ return /Edge\/([\d\.]+)/.exec(a);
4361
+ }
4362
+ if (goog.userAgent.IE) {
4363
+ return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);
4364
+ }
4365
+ if (goog.userAgent.WEBKIT) {
4366
+ return /WebKit\/(\S+)/.exec(a);
4367
+ }
4335
4368
  };
4336
- goog.structs.Set.prototype.clone = function() {
4337
- return new goog.structs.Set(this);
4369
+ goog.userAgent.getDocumentMode_ = function() {
4370
+ var a = goog.global.document;
4371
+ return a ? a.documentMode : void 0;
4338
4372
  };
4339
- goog.structs.Set.prototype.equals = function(a) {
4340
- return this.getCount() == goog.structs.getCount(a) && this.isSubsetOf(a);
4373
+ goog.userAgent.VERSION = goog.userAgent.determineVersion_();
4374
+ goog.userAgent.compare = function(a, b) {
4375
+ return goog.string.compareVersions(a, b);
4341
4376
  };
4342
- goog.structs.Set.prototype.isSubsetOf = function(a) {
4343
- var b = goog.structs.getCount(a);
4344
- if (this.getCount() > b) {
4345
- return !1;
4346
- }
4347
- !(a instanceof goog.structs.Set) && 5 < b && (a = new goog.structs.Set(a));
4348
- return goog.structs.every(this, function(b) {
4349
- return goog.structs.contains(a, b);
4350
- });
4377
+ goog.userAgent.isVersionOrHigherCache_ = {};
4378
+ goog.userAgent.isVersionOrHigher = function(a) {
4379
+ return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[a] || (goog.userAgent.isVersionOrHigherCache_[a] = 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a));
4351
4380
  };
4352
- goog.structs.Set.prototype.__iterator__ = function(a) {
4353
- return this.map_.__iterator__(!1);
4381
+ goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
4382
+ goog.userAgent.isDocumentModeOrHigher = function(a) {
4383
+ return goog.userAgent.DOCUMENT_MODE >= a;
4354
4384
  };
4385
+ goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
4386
+ goog.userAgent.DOCUMENT_MODE = function() {
4387
+ var a = goog.global.document, b = goog.userAgent.getDocumentMode_();
4388
+ return a && goog.userAgent.IE ? b || ("CSS1Compat" == a.compatMode ? parseInt(goog.userAgent.VERSION, 10) : 5) : void 0;
4389
+ }();
4355
4390
  goog.debug.LOGGING_ENABLED = goog.DEBUG;
4356
4391
  goog.debug.catchErrors = function(a, b, c) {
4357
4392
  c = c || goog.global;
@@ -5240,7 +5275,7 @@ goog.dom.getElementsByTagNameAndClass_ = function(a, b, c, d) {
5240
5275
  goog.dom.$$ = goog.dom.getElementsByTagNameAndClass;
5241
5276
  goog.dom.setProperties = function(a, b) {
5242
5277
  goog.object.forEach(b, function(b, d) {
5243
- "style" == d ? a.style.cssText = b : "class" == d ? a.className = b : "for" == d ? a.htmlFor = b : d in goog.dom.DIRECT_ATTRIBUTE_MAP_ ? a.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[d], b) : goog.string.startsWith(d, "aria-") || goog.string.startsWith(d, "data-") ? a.setAttribute(d, b) : a[d] = b;
5278
+ "style" == d ? a.style.cssText = b : "class" == d ? a.className = b : "for" == d ? a.htmlFor = b : goog.dom.DIRECT_ATTRIBUTE_MAP_.hasOwnProperty(d) ? a.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[d], b) : goog.string.startsWith(d, "aria-") || goog.string.startsWith(d, "data-") ? a.setAttribute(d, b) : a[d] = b;
5244
5279
  });
5245
5280
  };
5246
5281
  goog.dom.DIRECT_ATTRIBUTE_MAP_ = {cellpadding:"cellPadding", cellspacing:"cellSpacing", colspan:"colSpan", frameborder:"frameBorder", height:"height", maxlength:"maxLength", role:"role", rowspan:"rowSpan", type:"type", usemap:"useMap", valign:"vAlign", width:"width"};
@@ -5483,16 +5518,16 @@ goog.dom.getChildren = function(a) {
5483
5518
  });
5484
5519
  };
5485
5520
  goog.dom.getFirstElementChild = function(a) {
5486
- return void 0 != a.firstElementChild ? a.firstElementChild : goog.dom.getNextElementNode_(a.firstChild, !0);
5521
+ return goog.isDef(a.firstElementChild) ? a.firstElementChild : goog.dom.getNextElementNode_(a.firstChild, !0);
5487
5522
  };
5488
5523
  goog.dom.getLastElementChild = function(a) {
5489
- return void 0 != a.lastElementChild ? a.lastElementChild : goog.dom.getNextElementNode_(a.lastChild, !1);
5524
+ return goog.isDef(a.lastElementChild) ? a.lastElementChild : goog.dom.getNextElementNode_(a.lastChild, !1);
5490
5525
  };
5491
5526
  goog.dom.getNextElementSibling = function(a) {
5492
- return void 0 != a.nextElementSibling ? a.nextElementSibling : goog.dom.getNextElementNode_(a.nextSibling, !0);
5527
+ return goog.isDef(a.nextElementSibling) ? a.nextElementSibling : goog.dom.getNextElementNode_(a.nextSibling, !0);
5493
5528
  };
5494
5529
  goog.dom.getPreviousElementSibling = function(a) {
5495
- return void 0 != a.previousElementSibling ? a.previousElementSibling : goog.dom.getNextElementNode_(a.previousSibling, !1);
5530
+ return goog.isDef(a.previousElementSibling) ? a.previousElementSibling : goog.dom.getNextElementNode_(a.previousSibling, !1);
5496
5531
  };
5497
5532
  goog.dom.getNextElementNode_ = function(a, b) {
5498
5533
  for (;a && a.nodeType != goog.dom.NodeType.ELEMENT;) {
@@ -5826,8 +5861,8 @@ goog.dom.getActiveElement = function(a) {
5826
5861
  return null;
5827
5862
  };
5828
5863
  goog.dom.getPixelRatio = function() {
5829
- var a = goog.dom.getWindow(), b = goog.userAgent.GECKO && goog.userAgent.MOBILE;
5830
- return goog.isDef(a.devicePixelRatio) && !b ? a.devicePixelRatio : a.matchMedia ? goog.dom.matchesPixelRatio_(.75) || goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(2) || goog.dom.matchesPixelRatio_(3) || 1 : 1;
5864
+ var a = goog.dom.getWindow();
5865
+ return goog.isDef(a.devicePixelRatio) ? a.devicePixelRatio : a.matchMedia ? goog.dom.matchesPixelRatio_(.75) || goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(2) || goog.dom.matchesPixelRatio_(3) || 1 : 1;
5831
5866
  };
5832
5867
  goog.dom.matchesPixelRatio_ = function(a) {
5833
5868
  return goog.dom.getWindow().matchMedia("(-webkit-min-device-pixel-ratio: " + a + "),(min--moz-device-pixel-ratio: " + a + "),(min-resolution: " + a + "dppx)").matches ? a : 0;
@@ -5970,11 +6005,7 @@ goog.math.Box = function(a, b, c, d) {
5970
6005
  };
5971
6006
  goog.math.Box.boundingBox = function(a) {
5972
6007
  for (var b = new goog.math.Box(arguments[0].y, arguments[0].x, arguments[0].y, arguments[0].x), c = 1;c < arguments.length;c++) {
5973
- var d = arguments[c];
5974
- b.top = Math.min(b.top, d.y);
5975
- b.right = Math.max(b.right, d.x);
5976
- b.bottom = Math.max(b.bottom, d.y);
5977
- b.left = Math.min(b.left, d.x);
6008
+ b.expandToIncludeCoordinate(arguments[c]);
5978
6009
  }
5979
6010
  return b;
5980
6011
  };
@@ -6003,6 +6034,12 @@ goog.math.Box.prototype.expandToInclude = function(a) {
6003
6034
  this.right = Math.max(this.right, a.right);
6004
6035
  this.bottom = Math.max(this.bottom, a.bottom);
6005
6036
  };
6037
+ goog.math.Box.prototype.expandToIncludeCoordinate = function(a) {
6038
+ this.top = Math.min(this.top, a.y);
6039
+ this.right = Math.max(this.right, a.x);
6040
+ this.bottom = Math.max(this.bottom, a.y);
6041
+ this.left = Math.min(this.left, a.x);
6042
+ };
6006
6043
  goog.math.Box.equals = function(a, b) {
6007
6044
  return a == b ? !0 : a && b ? a.top == b.top && a.right == b.right && a.bottom == b.bottom && a.left == b.left : !1;
6008
6045
  };
@@ -6326,16 +6363,17 @@ goog.style.getVisibleRectForElement = function(a) {
6326
6363
  return 0 <= b.top && 0 <= b.left && b.bottom > b.top && b.right > b.left ? b : null;
6327
6364
  };
6328
6365
  goog.style.getContainerOffsetToScrollInto = function(a, b, c) {
6329
- var d = goog.style.getPageOffset(a), e = goog.style.getPageOffset(b), f = goog.style.getBorderBox(b), g = d.x - e.x - f.left, d = d.y - e.y - f.top, h = b.clientWidth - a.offsetWidth;
6330
- a = b.clientHeight - a.offsetHeight;
6331
- var k = b.scrollLeft, l = b.scrollTop;
6332
- if (b == goog.dom.getDocument().body || b == goog.dom.getDocument().documentElement) {
6333
- k = e.x + f.left, l = e.y + f.top, goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(10) && (k += f.left, l += f.top);
6334
- }
6335
- c ? (k += g - h / 2, l += d - a / 2) : (k += Math.min(g, Math.max(g - h, 0)), l += Math.min(d, Math.max(d - a, 0)));
6336
- return new goog.math.Coordinate(k, l);
6366
+ var d = b || goog.dom.getDocumentScrollElement(), e = goog.style.getPageOffset(a), f = goog.style.getPageOffset(d), g = goog.style.getBorderBox(d);
6367
+ d == goog.dom.getDocumentScrollElement() ? (b = e.x - d.scrollLeft, e = e.y - d.scrollTop, goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(10) && (b += g.left, e += g.top)) : (b = e.x - f.x - g.left, e = e.y - f.y - g.top);
6368
+ g = d.clientWidth - a.offsetWidth;
6369
+ a = d.clientHeight - a.offsetHeight;
6370
+ f = d.scrollLeft;
6371
+ d = d.scrollTop;
6372
+ c ? (f += b - g / 2, d += e - a / 2) : (f += Math.min(b, Math.max(b - g, 0)), d += Math.min(e, Math.max(e - a, 0)));
6373
+ return new goog.math.Coordinate(f, d);
6337
6374
  };
6338
6375
  goog.style.scrollIntoContainerView = function(a, b, c) {
6376
+ b = b || goog.dom.getDocumentScrollElement();
6339
6377
  a = goog.style.getContainerOffsetToScrollInto(a, b, c);
6340
6378
  b.scrollLeft = a.x;
6341
6379
  b.scrollTop = a.y;
@@ -6394,9 +6432,8 @@ goog.style.getClientPosition = function(a) {
6394
6432
  if (a.nodeType == goog.dom.NodeType.ELEMENT) {
6395
6433
  return goog.style.getClientPositionForElement_(a);
6396
6434
  }
6397
- var b = goog.isFunction(a.getBrowserEvent), c = a;
6398
- a.targetTouches && a.targetTouches.length ? c = a.targetTouches[0] : b && a.getBrowserEvent().targetTouches && a.getBrowserEvent().targetTouches.length && (c = a.getBrowserEvent().targetTouches[0]);
6399
- return new goog.math.Coordinate(c.clientX, c.clientY);
6435
+ a = a.changedTouches ? a.changedTouches[0] : a;
6436
+ return new goog.math.Coordinate(a.clientX, a.clientY);
6400
6437
  };
6401
6438
  goog.style.setPageOffset = function(a, b, c) {
6402
6439
  var d = goog.style.getPageOffset(a);
@@ -6681,8 +6718,8 @@ goog.style.getFontSize = function(a) {
6681
6718
  goog.style.parseStyleAttribute = function(a) {
6682
6719
  var b = {};
6683
6720
  goog.array.forEach(a.split(/\s*;\s*/), function(a) {
6684
- a = a.split(/\s*:\s*/);
6685
- 2 == a.length && (b[goog.string.toCamelCase(a[0].toLowerCase())] = a[1]);
6721
+ var d = a.match(/\s*([\w-]+)\s*\:(.+)/);
6722
+ d && (a = d[1], d = goog.string.trim(d[2]), b[goog.string.toCamelCase(a.toLowerCase())] = d);
6686
6723
  });
6687
6724
  return b;
6688
6725
  };
@@ -6693,12 +6730,11 @@ goog.style.toStyleAttribute = function(a) {
6693
6730
  });
6694
6731
  return b.join("");
6695
6732
  };
6696
- goog.style.FLOAT_CSS_PROPERTY_NAME_ = goog.userAgent.IE && !goog.userAgent.isVersionOrHigher(12) ? "styleFloat" : "cssFloat";
6697
6733
  goog.style.setFloat = function(a, b) {
6698
- a.style[goog.style.FLOAT_CSS_PROPERTY_NAME_] = b;
6734
+ a.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] = b;
6699
6735
  };
6700
6736
  goog.style.getFloat = function(a) {
6701
- return a.style[goog.style.FLOAT_CSS_PROPERTY_NAME_] || "";
6737
+ return a.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] || "";
6702
6738
  };
6703
6739
  goog.style.getScrollbarWidth = function(a) {
6704
6740
  var b = goog.dom.createElement(goog.dom.TagName.DIV);
@@ -6801,9 +6837,10 @@ goog.userAgent.product.ASSUME_IPAD = !1;
6801
6837
  goog.userAgent.product.ASSUME_ANDROID = !1;
6802
6838
  goog.userAgent.product.ASSUME_CHROME = !1;
6803
6839
  goog.userAgent.product.ASSUME_SAFARI = !0;
6804
- goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI;
6840
+ goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI;
6805
6841
  goog.userAgent.product.OPERA = goog.userAgent.OPERA;
6806
6842
  goog.userAgent.product.IE = goog.userAgent.IE;
6843
+ goog.userAgent.product.EDGE = goog.userAgent.EDGE;
6807
6844
  goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.labs.userAgent.browser.isFirefox();
6808
6845
  goog.userAgent.product.isIphoneOrIpod_ = function() {
6809
6846
  return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpod();
@@ -6820,7 +6857,7 @@ goog.userAgent.product.determineVersion_ = function() {
6820
6857
  if (goog.userAgent.product.FIREFOX) {
6821
6858
  return goog.userAgent.product.getFirstRegExpGroup_(/Firefox\/([0-9.]+)/);
6822
6859
  }
6823
- if (goog.userAgent.product.IE || goog.userAgent.product.OPERA) {
6860
+ if (goog.userAgent.product.IE || goog.userAgent.product.EDGE || goog.userAgent.product.OPERA) {
6824
6861
  return goog.userAgent.VERSION;
6825
6862
  }
6826
6863
  if (goog.userAgent.product.CHROME) {
@@ -6953,9 +6990,10 @@ goog.json.Serializer.prototype.serializeInternal = function(a, b) {
6953
6990
  this.serializeNumber_(a, b);
6954
6991
  break;
6955
6992
  case "boolean":
6956
- b.push(a);
6993
+ b.push(String(a));
6957
6994
  break;
6958
6995
  case "function":
6996
+ b.push("null");
6959
6997
  break;
6960
6998
  default:
6961
6999
  throw Error("Unknown type: " + typeof a);;
@@ -6972,7 +7010,7 @@ goog.json.Serializer.prototype.serializeString_ = function(a, b) {
6972
7010
  }), '"');
6973
7011
  };
6974
7012
  goog.json.Serializer.prototype.serializeNumber_ = function(a, b) {
6975
- b.push(isFinite(a) && !isNaN(a) ? a : "null");
7013
+ b.push(isFinite(a) && !isNaN(a) ? String(a) : "null");
6976
7014
  };
6977
7015
  goog.json.Serializer.prototype.serializeArray = function(a, b) {
6978
7016
  var c = a.length;