Changeset 195685 in webkit
- Timestamp:
- Jan 27, 2016 12:24:37 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r195682 r195685 1 2016-01-27 Zhuo Li <zachli@apple.com> 2 3 Need ability to specify alternate image for AutoFill button in input fields. 4 https://bugs.webkit.org/show_bug.cgi?id=153116. 5 rdar://problem/23384854. 6 7 Reviewed by Darin Adler. 8 9 * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html: The test API has 10 another parameter to specify what type the AutoFill button is. 11 * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html: Ditto. 12 * fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt: Added. 13 * fast/forms/auto-fill-button/input-contacts-auto-fill-button.html: Added. 14 * fast/forms/auto-fill-button/input-auto-fill-button.html: Ditto. 15 * fast/forms/auto-fill-button/input-disabled-auto-fill-button.html: Ditto. 16 * fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html: Ditto. 17 * fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html: Ditto. 18 * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html: Added. 19 * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html: Added. 20 1 21 2016-01-26 Ryosuke Niwa <rniwa@webkit.org> 2 22 -
trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html
r185166 r195685 11 11 12 12 if (window.internals) 13 internals.setShowAutoFillButton(password, true);13 internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials"); 14 14 15 15 function makeFieldDisabledAndNotifyDone() -
trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html
r185166 r195685 11 11 12 12 if (window.internals) 13 internals.setShowAutoFillButton(password, true);13 internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials"); 14 14 15 15 function makeFieldReadOnlyAndNotifyDone() -
trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html
r185166 r195685 1 1 <p>This tests that the AutoFill button renders. It can only be tested in the test tool.</p> 2 <div id= 'container'>3 <input type= 'text'>4 <input type= 'password'>2 <div id="container"> 3 <input type="text"> 4 <input type="password"> 5 5 </div> 6 6 <script> … … 9 9 var inputs = document.querySelectorAll("input"); 10 10 for (var i = 0; i < inputs.length; ++i) 11 window.internals.setShowAutoFillButton(inputs[i], true);11 window.internals.setShowAutoFillButton(inputs[i], "AutoFillButtonTypeCredentials"); 12 12 13 13 var dynamicInput = document.createElement("input"); 14 window.internals.setShowAutoFillButton(dynamicInput, true);14 window.internals.setShowAutoFillButton(dynamicInput, "AutoFillButtonTypeCredentials"); 15 15 document.querySelector("#container").appendChild(dynamicInput); 16 16 17 17 var dynamicInput2 = document.createElement("input"); 18 window.internals.setShowAutoFillButton(dynamicInput2, true);18 window.internals.setShowAutoFillButton(dynamicInput2, "AutoFillButtonTypeCredentials"); 19 19 document.querySelector("#container").appendChild(dynamicInput2); 20 20 dynamicInput2.setAttribute("type", "password"); -
trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html
r185166 r195685 6 6 <script> 7 7 if (window.internals) 8 internals.setShowAutoFillButton(document.getElementById("password"), true);8 internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials"); 9 9 </script> 10 10 </body> -
trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html
r185166 r195685 6 6 <script> 7 7 if (window.internals) 8 internals.setShowAutoFillButton(document.getElementById("password"), true);8 internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials"); 9 9 </script> 10 10 </body> -
trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html
r185166 r195685 6 6 <script> 7 7 if (window.internals) 8 internals.setShowAutoFillButton(document.getElementById("password"), true);8 internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials"); 9 9 </script> 10 10 </body> -
trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html
r185341 r195685 23 23 return; 24 24 25 internals.setShowAutoFillButton(password, true);25 internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials"); 26 26 27 var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit- auto-fill-button");27 var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-credentials-auto-fill-button"); 28 28 autoFillButton.onclick = checkEventAndDone; 29 29 -
trunk/Source/WebCore/ChangeLog
r195682 r195685 1 2016-01-27 Zhuo Li <zachli@apple.com> 2 3 Need ability to specify alternate image for AutoFill button in input fields. 4 https://bugs.webkit.org/show_bug.cgi?id=153116. 5 rdar://problem/23384854. 6 7 Reviewed by Darin Adler. 8 9 Add a new AutoFill button that can be shown in <input> elements. 10 11 Tests: fast/forms/auto-fill-button/input-contacts-auto-fill-button.html 12 fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html 13 14 * css/html.css: 15 (input::-webkit-contacts-auto-fill-button): 16 (input::-webkit-contacts-auto-fill-button:hover): 17 (input::-webkit-contacts-auto-fill-button:active): 18 Add default style rules for the Contacts AutoFill button based on the ones used for 19 Manual AutoFill button. 20 21 * html/HTMLInputElement.cpp: 22 (WebCore::HTMLInputElement::setShowAutoFillButton): 23 * html/HTMLInputElement.h: 24 (WebCore::HTMLInputElement::autoFillButtonType): 25 - Replace the boolean parameter with a new parameter to specify the type of the AutoFill button. 26 - Declare a private variable to keep a record of the type of the current AutoFill 27 button. 28 (WebCore::HTMLInputElement::showAutoFillButton): Deleted. 29 30 * html/HTMLTextFormControlElement.h: 31 Declare enum for AutoFill button type. 32 33 * html/TextFieldInputType.cpp: 34 (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName): 35 (WebCore::isAutoFillButtonTypeChanged): 36 (WebCore::TextFieldInputType::shouldDrawAutoFillButton): None means the AutoFill button is not 37 enabled. 38 (WebCore::TextFieldInputType::createAutoFillButton): Only create the AutoFill button 39 if the type is expected. 40 (WebCore::TextFieldInputType::updateAutoFillButton): 41 Handle the case where AutoFill button type changes in the text field. 42 * html/TextFieldInputType.h: 43 44 * testing/Internals.cpp: 45 (WebCore::stringToAutoFillButtonType): Convert the string to AutoFill button type. 46 (WebCore::Internals::setShowAutoFillButton): Add a new parameter to specify the type of the AutoFill button. 47 * testing/Internals.h: Ditto. 48 * testing/Internals.idl: Ditto. 49 1 50 2016-01-26 Ryosuke Niwa <rniwa@webkit.org> 2 51 -
trunk/Source/WebCore/css/html.css
r191751 r195685 550 550 } 551 551 552 input::-webkit- auto-fill-button {552 input::-webkit-credentials-auto-fill-button { 553 553 -webkit-mask-image: -webkit-image-set(url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAMCAYAAAC9QufkAAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA0LTAzVDE2OjA2OjI1PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wNC0wM1QxNjowMzoxNjwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoz37ZdAAAA5ElEQVQoFY2RsQ5BQRBFd9EgEYXv8QlaEqVGpfUPao3oKXyEQiJI1ERESaGmwnPu2k2QJ2uS82Z2du7s7jyTJInBWnCABeygoXwM6kwN1GELFo7wgOo/4gmFEovzWzyMiTMUlyFYJQT4wlucGko8T90xZv0j/5EusVpCuLr8FPK6NraHPmT8Oks8gI2bKEEOZhAauEJf3PX5Eb4ImpEG2gni0NWJvwdFYRvuoIHeoOUa++56+wpSxb6myf4J6qG5VWCt1ckPvHsksf531HSiDJ1VV9n15eJfJ+YkvWcMF+jFZa+KJ554xIc+jempAAAAAElFTkSuQmCC") 1x, url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAYCAYAAADtaU2/AAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA0LTAzVDE2OjA2OjIxPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wNC0wM1QxNjowMzoyNTwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4zMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yNDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpGMDB3AAAB8UlEQVRIDbVWO07DQBS0QSJUNJQcAloOQMEZ6InSUMEBkFJEQihQkQKJklQUlFBQQoH4SHAKJDokAgIz4+wLs5u15RjypOF9dvaN197dkCS/NodwC7gG3hxuXI1jUcuyLKkDa7aE4B7IHM7hCcs5Rs6Y1RHlHBpXo6JXeXX45xLOxB8QN2QsD+sKz2B2E1iRhqnEsxIvI96U/M8hv6mtyjxXehGpk+tZ3RVzdQOgcPN4KkPuvNbse2mtSsxXPYl9TkIu41L4rowQjD0Fee2UwqcTzA65/TRNB0CzSg/ygHegT34D4FGxjVXkHx0XbmQfiIzfKtto4LWEy3m58XLQs2zNzPPByAltGwXj0EfFUecbUd4O8pFxZ98CSrC4bNfvypxvxBu6cubAl3DaRSfBxNRjXtxckw5GjU+RXJweUNGOPRTqnrWRWQP1HkkTaRSK98CLioYr5vV4BqigxarlxSbsmu0XzO8qLxRmw/WCiRyLmjYEgTfhEWAPTM88VV4ozDP9HEyyBijHLdKQ4l2AR+YAGBMNhcFJVgETU8+xqIXCVXNtxm9cdJyU58VVhUKe/khwB+55XaeYqDC/zdoUtbzWFDPj7fQCLFjB+Vf4xaA2SvkK65iumLvwJNLkOFL79xJXfQhwlQTjsnu61r+2fEs/b4ZbzrEPMzEAAAAASUVORK5CYII=") 2x); 554 554 -webkit-mask-size: 15px 12px; … … 562 562 } 563 563 564 input::-webkit- auto-fill-button:hover {564 input::-webkit-credentials-auto-fill-button:hover { 565 565 background-color: rgb(0, 122, 255); 566 566 } 567 567 568 input::-webkit-auto-fill-button:active { 568 input::-webkit-credentials-auto-fill-button:active { 569 background-color: rgb(0, 60, 219); 570 } 571 572 input::-webkit-contacts-auto-fill-button { 573 -webkit-mask-image: -webkit-image-set(url("data:image/png;base64,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dGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMDo0MC0wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTA6NDAtMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMDo0MC0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz63NHXRAAAAIGNIUk0AAG11AABzoAAA/N0AAINkAABw6AAA7GgAADA+AAAQkOTsmeoAAAJ+SURBVHjavJbPa9NgGMefLqOYZGTZWChlmxXyo6E4S6BQKNKuGTnLepTBPHnYxatehP0BPQ7PMsTl0ENPUrDYsk7UDj1IKelcurTDbjsUccWNJfX1JIxqm9e17oHn9D58Pzw/3ud9PQghwLVMJnM3m83eKxaL8bOzM0qSpFoqlcpomvZ6YWHhBEsEIeTqpmlSy8vLzwCgBQCo11mWra6trT3F0XINyOVydwRB2P4bqMdbGxsbqaGB8Xhcx4AhAEDhcDg3FHBvb2+CZdkqLnBmZuazaZrUIM0xtx4TBCHjDpXjOLdt2x4fFDMQSNP0D4Zh3uECKYr6SJLk+ZWBfr//59TUVBsXODs7+3V+fv7iykAAAJ/Pd4ILDAQCB0Pdw1KpJJAkWccdGoZhjN3d3bkrD8309HTb6/VewD8YTdOdoTaNpmmbuBmqqvrCTc+1h6qq5j0ezxFGckdLS0v5kezSZDL50i27RCKh42iN4fRFUZRPbjGRSKSMo4UFFEWx5hbD87w5sufJMAyG5/mdfuUMBALvq9UqO7KSSpL0fWVlZbPf+erq6nNZlr+NrKQAAMfHx/5+Z51OZwJXBxtYq9WEfmeGYQSxN4NbzS3L8m5tbS0OehcnJycNXdfjOD309H6iWq3WWKFQWCwWi4lKpRKyLOtWs9mM4Fx8SZJqgiB8CQaDRjQa/RCLxd7+8Xr8Jh8eHo6n0+n7oVAoj7vK3Jzn+Z319fWHl38BgBCCcrk8pyjKq1GBel2W5TelUklACAHU6/Ubo8yqn4uiuL2/v08RHMc90HX9Efxna7fbNzmOOyBs237SaDRCcA3mOM4F0e12H5+envqvA9jtds9/DQCsPB1nqFm3ggAAAABJRU5ErkJggg==") 1x, url("data:image/png;base64,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eG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDEtMTNUMTc6MDk6NDAtMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTE6MTktMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Psf9uFoAAAAgY0hSTQAAbXUAAHOgAAD83QAAg2QAAHDoAADsaAAAMD4AABCQ5OyZ6gAABjhJREFUeNrc2m1MWlcYB/CDiDbSVk07o4OUFF8a0drWqLWtUN8QfGnRqbUFNWqsBtdGXZSlnbMuLo1Gu2qzdorzZUKsVVHGUgoENUycoyVgZbWCFcQOaRaajuhqdI3sy74s2dIol130//059/y4HM65zwVhs9nA/5H5+XnPpaWlw6urq/v27Nmz5ufn92tYWNgrR18X4UigwWBAq9XqCJFIRJNKpSkmk+nIxsYGQCKRwMfHx0ggEDRpaWk8MpksDAkJ+W3HABcWFvZ1dXV9zOPxLul0urD3XQOLxS7ExcVJEhISREQicRSPx//htEC5XH6ksrKyQ6lUErdTHxISorp+/fpndDpd5FTA5eVlF5lMllRTU/OVXq8PtmcsNBptHRgYSEpJSXnsFMDZ2dmDZWVlnImJCerm5iYkH1hsbKywr6/vnJ+f3ybswMLCwjs9PT1XoV7LbDb7wuXLlwdhBSqVSlxiYqLSarUehBpIoVBGRCLRR7ACW1paCiorK7sd8RMfEBDwy/j4+AksFvsONiCTyWxqa2urcgTwwIEDYHx83O/o0aOvYAMWFRXd6e7uvuoIoKenJ5BIJPioqCgDbMCqqqraW7dufeEIoJeXF5BIJPjIyEj4gA0NDcxr167d27Vf0ba2thwmk9nvCCAOh5uXyWTHcDjcGmzA/v7+JDqdLnbEmTY6Onp8amoqHtZtQiwWR9BotCfr6+uQA3Nzc7/hcDhlsAJnZmZ84+Pjza9fv4Yc2NjYWMpisdiwAk0mk2tycvKfGo0GUhwKhQIcDoeSk5MjgRV48eLFToFAULS2tgYp0MXFBWCx2HkOh0MjkUjPYQGazWYXEon09MWLF6GO6gpwOJzU3NxcIWx3kEqlDovF4gxH4FAoFBgZGTmdmpo6BRuwvr6+vLa2tsURQAwGYxgbGzsRFBRkhQ04NTUVSKFQFCsrK95QAxkMBpvL5ZbC/sAbHh7+k1qtPgU1sL29/UJJSckg7MDs7OzuoaGhAihxSCRy/dGjR6fJZLIKdqBQKIwqKyvjGo3GQIi2iHUGg9HV29tbZu9YkHXVpFLp8fPnz6uh2A8zMjK4w8PDeVDMCzKg2Wx2IZPJT549exbuDGsPciAAAGRlZX3H4/Hy7RnD3d0dPHz48ERCQsK00wFZLFZNU1NTvZ0Pua9kMtkxqN5VQApks9nZpaWlA/aMERoaqtRoNJFQzQlSoEKh8E9MTHyyurq67U2/qKiotbOzs8IpgQDY1+X28PCwCgSCWKjWn0OAOp3OMz8//3uFQnF2K3Wurq7g5s2bpdXV1Wwo5+OQ94PV1dW1zc3NW2olenl5gcnJyQ8IBILF6YF5eXn3uFwucys1e/fuBaOjo3Y1ef83IJFIFMvl8qSt1Li5uQE+n38yOTn5sVMD9Xo9OjY29unLly/9t1rb0dGRVVxczHNqoFwuP0KhUObevn27nYPC542NjV86NbC3tzetoKDgh+2Me+bMGalcLic7JdBsNruoVKqTLBbr69nZ2W0duJFI5Hp5eXkjk8lsDggIWIENaDKZXC0Wi4/RaDxsMBgC5+bmQlQqVeT09PTZjY0Nuyfl7+//nEQiSaOjoycCAwO1vr6+y/v37/8dg8G8cxhQr9ej5XJ53OjoKFWj0YQvLi6eevPmDXB0UCgU8Pb2BhgMZgqPx89HRET8HBMTMxYTE6OFBDgzM+P74MGDgqGhoUs6nS4MOEE8PDysUVFRk3Q6vYdCoQgOHTq0vmWgUqnEcbnc4sHBQcby8vJh4KQJDQ1V5uXldWRmZt739/dfeS/QbDa73L17t6q9vb3cYrF8CHZICASCqq6u7tPs7GzpfwKXlpbcKyoqvh0ZGckFOzBoNNra1NTEZDKZ9/8VyGAw2vv6+krADg4ajbZyudxz6enpE/8A/v1/lw4AgCvY4QkODp7m8/mxQUFBVoTNZgNardabQqEooOprOkNu3LjxSV1d3W2EzWYDra2tBRUVFd1gF4VAIKiEQmEMwmazARqN1icQCC7tJqCbmxsQCASRCKPR6J6UlPRYq9WGgV2W27dvFyKUSiWOSqUuWiyW3eYDV65caUBIpdLjKSkpaigOyc6WzMzMXgSfzyemp6f/CHZhiESi5K8BACc8Ebde4coyAAAAAElFTkSuQmCC") 2x); 574 -webkit-mask-size: 15px 12px; 575 width: 15px; 576 height: 12px; 577 margin-left: 3px; 578 margin-right: 2px; 579 background-color: black; 580 flex: none; 581 -webkit-user-select: none; 582 } 583 584 input::-webkit-contacts-auto-fill-button:hover { 585 background-color: rgb(0, 122, 255); 586 } 587 588 input::-webkit-contacts-auto-fill-button:active { 569 589 background-color: rgb(0, 60, 219); 570 590 } -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r195642 r195685 106 106 , m_autocomplete(Uninitialized) 107 107 , m_isAutoFilled(false) 108 , m_ showAutoFillButton(false)108 , m_autoFillButtonType(static_cast<uint8_t>(AutoFillButtonType::None)) 109 109 #if ENABLE(DATALIST_ELEMENT) 110 110 , m_hasNonEmptyList(false) … … 1301 1301 } 1302 1302 1303 void HTMLInputElement::setShowAutoFillButton( bool showAutoFillButton)1304 { 1305 if (s howAutoFillButton == m_showAutoFillButton)1303 void HTMLInputElement::setShowAutoFillButton(AutoFillButtonType autoFillButtonType) 1304 { 1305 if (static_cast<uint8_t>(autoFillButtonType) == m_autoFillButtonType) 1306 1306 return; 1307 1307 1308 m_ showAutoFillButton = showAutoFillButton;1308 m_autoFillButtonType = static_cast<uint8_t>(autoFillButtonType); 1309 1309 m_inputType->updateAutoFillButton(); 1310 1310 } -
trunk/Source/WebCore/html/HTMLInputElement.h
r194796 r195685 238 238 WEBCORE_EXPORT void setAutoFilled(bool = true); 239 239 240 bool showAutoFillButton() const { return m_showAutoFillButton; }241 WEBCORE_EXPORT void setShowAutoFillButton( bool);240 AutoFillButtonType autoFillButtonType() const { return (AutoFillButtonType)m_autoFillButtonType; } 241 WEBCORE_EXPORT void setShowAutoFillButton(AutoFillButtonType); 242 242 243 243 FileList* files(); … … 432 432 unsigned m_autocomplete : 2; // AutoCompleteSetting 433 433 bool m_isAutoFilled : 1; 434 bool m_showAutoFillButton : 1;434 unsigned m_autoFillButtonType : 2; // AutoFillButtonType; 435 435 #if ENABLE(DATALIST_ELEMENT) 436 436 bool m_hasNonEmptyList : 1; -
trunk/Source/WebCore/html/HTMLTextFormControlElement.h
r186256 r195685 35 35 class VisiblePosition; 36 36 37 enum class AutoFillButtonType : uint8_t { None, Credentials, Contacts }; 37 38 enum TextFieldSelectionDirection { SelectionHasNoDirection, SelectionHasForwardDirection, SelectionHasBackwardDirection }; 38 39 enum TextFieldEventBehavior { DispatchNoEvent, DispatchChangeEvent, DispatchInputAndChangeEvent }; -
trunk/Source/WebCore/html/TextFieldInputType.cpp
r194496 r195685 400 400 } 401 401 402 static AtomicString autoFillButtonTypeToAutoFillButtonPseudoClassName(AutoFillButtonType autoFillButtonType) 403 { 404 AtomicString pseudoClassName; 405 switch (autoFillButtonType) { 406 case AutoFillButtonType::Contacts: 407 pseudoClassName = AtomicString("-webkit-contacts-auto-fill-button", AtomicString::ConstructFromLiteral); 408 break; 409 case AutoFillButtonType::Credentials: 410 pseudoClassName = AtomicString("-webkit-credentials-auto-fill-button", AtomicString::ConstructFromLiteral); 411 break; 412 case AutoFillButtonType::None: 413 ASSERT_NOT_REACHED(); 414 break; 415 } 416 417 return pseudoClassName; 418 } 419 420 static bool isAutoFillButtonTypeChanged(const AtomicString& attribute, AutoFillButtonType autoFillButtonType) 421 { 422 if (attribute == "-webkit-contacts-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Contacts) 423 return true; 424 425 if (attribute == "-webkit-credentials-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Credentials) 426 return true; 427 428 return false; 429 } 430 402 431 String TextFieldInputType::sanitizeValue(const String& proposedValue) const 403 432 { … … 588 617 bool TextFieldInputType::shouldDrawAutoFillButton() const 589 618 { 590 return !element().isDisabledOrReadOnly() && element(). showAutoFillButton();619 return !element().isDisabledOrReadOnly() && element().autoFillButtonType() != AutoFillButtonType::None; 591 620 } 592 621 … … 614 643 } 615 644 616 void TextFieldInputType::createAutoFillButton( )645 void TextFieldInputType::createAutoFillButton(AutoFillButtonType autoFillButtonType) 617 646 { 618 647 ASSERT(!m_autoFillButton); 619 648 649 if (autoFillButtonType == AutoFillButtonType::None) 650 return; 651 620 652 m_autoFillButton = AutoFillButtonElement::create(element().document(), *this); 621 m_autoFillButton->setPseudo( AtomicString("-webkit-auto-fill-button", AtomicString::ConstructFromLiteral));653 m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(autoFillButtonType)); 622 654 m_container->appendChild(*m_autoFillButton, IGNORE_EXCEPTION); 623 655 } … … 630 662 631 663 if (!m_autoFillButton) 632 createAutoFillButton(); 664 createAutoFillButton(element().autoFillButtonType()); 665 666 const AtomicString& attribute = m_autoFillButton->fastGetAttribute(pseudoAttr); 667 bool shouldUpdateAutoFillButtonType = isAutoFillButtonTypeChanged(attribute, element().autoFillButtonType()); 668 if (shouldUpdateAutoFillButtonType) 669 m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(element().autoFillButtonType())); 633 670 634 671 m_autoFillButton->setInlineStyleProperty(CSSPropertyDisplay, CSSValueBlock, true); -
trunk/Source/WebCore/html/TextFieldInputType.h
r191188 r195685 109 109 110 110 void createContainer(); 111 void createAutoFillButton( );111 void createAutoFillButton(AutoFillButtonType); 112 112 113 113 RefPtr<HTMLElement> m_container; -
trunk/Source/WebCore/testing/Internals.cpp
r195646 r195685 1279 1279 } 1280 1280 1281 void Internals::setShowAutoFillButton(Element* element, bool show, ExceptionCode& ec) 1281 static AutoFillButtonType stringToAutoFillButtonType(const String& autoFillButtonType) 1282 { 1283 if (autoFillButtonType == "AutoFillButtonTypeNone") 1284 return AutoFillButtonType::None; 1285 if (autoFillButtonType == "AutoFillButtonTypeCredentials") 1286 return AutoFillButtonType::Credentials; 1287 if (autoFillButtonType == "AutoFillButtonTypeContacts") 1288 return AutoFillButtonType::Contacts; 1289 ASSERT_NOT_REACHED(); 1290 return AutoFillButtonType::None; 1291 } 1292 1293 void Internals::setShowAutoFillButton(Element* element, const String& autoFillButtonType, ExceptionCode& ec) 1282 1294 { 1283 1295 if (!element) { … … 1291 1303 } 1292 1304 1293 downcast<HTMLInputElement>(*element).setShowAutoFillButton(s how);1305 downcast<HTMLInputElement>(*element).setShowAutoFillButton(stringToAutoFillButtonType(autoFillButtonType)); 1294 1306 } 1295 1307 -
trunk/Source/WebCore/testing/Internals.h
r195515 r195685 178 178 void setEditingValue(Element* inputElement, const String&, ExceptionCode&); 179 179 void setAutofilled(Element*, bool enabled, ExceptionCode&); 180 void setShowAutoFillButton(Element*, bool enabled, ExceptionCode&);180 void setShowAutoFillButton(Element*, const String& autoFillButtonType, ExceptionCode&); 181 181 void scrollElementToRect(Element*, long x, long y, long w, long h, ExceptionCode&); 182 182 -
trunk/Source/WebCore/testing/Internals.idl
r195515 r195685 58 58 }; 59 59 60 enum AutoFillButtonType { 61 "AutoFillButtonTypeNone", 62 "AutoFillButtonTypeContacts", 63 "AutoFillButtonTypeCredentials" 64 }; 65 60 66 [ 61 67 NoInterfaceObject, … … 152 158 [RaisesException] void setEditingValue(Element inputElement, DOMString value); 153 159 [RaisesException] void setAutofilled(Element inputElement, boolean enabled); 154 [RaisesException] void setShowAutoFillButton(Element inputElement, boolean enabled);160 [RaisesException] void setShowAutoFillButton(Element inputElement, AutoFillButtonType autoFillButtonType); 155 161 [RaisesException] unsigned long countMatchesForText(DOMString text, unsigned long findOptions, DOMString markMatches); 156 162 -
trunk/Source/WebKit2/ChangeLog
r195677 r195685 1 2016-01-27 Zhuo Li <zachli@apple.com> 2 3 Need ability to specify alternate image for AutoFill button in input fields. 4 https://bugs.webkit.org/show_bug.cgi?id=153116. 5 rdar://problem/23384854. 6 7 Reviewed by Darin Adler. 8 9 * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp: 10 (toAutoFillButtonType): Convert the WebKit AutoFill button type enum to WebCore AutoFill button 11 type enum. 12 (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType): Added to be able to specify 13 what the AutoFill button type is. None means the AutoFill button is not shown. 14 (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled): Deprecate this method. 15 * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Declare an AutoFill button type enum. 16 * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp: 17 (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled): None means the AutoFill button is not enabled. 18 (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabledWithButtonType): Use the new parameter to specify 19 what the AutoFill button type is. 20 * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto. 21 1 22 2016-01-27 Dan Bernstein <mitz@apple.com> 2 23 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp
r181408 r195685 34 34 #include "WebFrame.h" 35 35 #include "WebImage.h" 36 #include <WebCore/HTMLTextFormControlElement.h> 36 37 37 38 using namespace WebKit; 39 40 static WebCore::AutoFillButtonType toAutoFillButtonType(WKAutoFillButtonType wkAutoFillButtonType) 41 { 42 switch (wkAutoFillButtonType) { 43 case kWKAutoFillButtonTypeNone: 44 return WebCore::AutoFillButtonType::None; 45 case kWKAutoFillButtonTypeContacts: 46 return WebCore::AutoFillButtonType::Contacts; 47 case kWKAutoFillButtonTypeCredentials: 48 return WebCore::AutoFillButtonType::Credentials; 49 } 50 ASSERT_NOT_REACHED(); 51 return WebCore::AutoFillButtonType::None; 52 } 38 53 39 54 WKTypeID WKBundleNodeHandleGetTypeID() … … 96 111 } 97 112 98 void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled (WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)113 void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef, WKAutoFillButtonType autoFillButtonType) 99 114 { 100 toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled( enabled);115 toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(toAutoFillButtonType(autoFillButtonType)); 101 116 } 102 117 … … 151 166 toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFilled(filled); 152 167 } 168 169 // Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef, WKAutoFillButtonType). 170 void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled) 171 { 172 WebCore::AutoFillButtonType autoFillButtonType = enabled ? WebCore::AutoFillButtonType::Credentials : WebCore::AutoFillButtonType::None; 173 174 toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(autoFillButtonType); 175 } -
trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h
r181408 r195685 36 36 #endif 37 37 38 enum { 39 kWKAutoFillButtonTypeNone, 40 kWKAutoFillButtonTypeCredentials, 41 kWKAutoFillButtonTypeContacts 42 }; 43 typedef uint8_t WKAutoFillButtonType; 44 38 45 WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef context, JSObjectRef object); 39 46 … … 56 63 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled); 57 64 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle); 58 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled (WKBundleNodeHandleRef htmlInputElementHandle, bool enabled);65 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandle, WKAutoFillButtonType autoFillButtonType); 59 66 WK_EXPORT WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandle); 60 67 WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit(WKBundleNodeHandleRef htmlInputElementHandle); … … 80 87 /* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef, bool) */ 81 88 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled); 89 /* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef, WKAutoFillButtonType)*/ 90 WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle, bool enabled); 82 91 83 92 #ifdef __cplusplus -
trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp
r189144 r195685 232 232 return false; 233 233 234 return downcast<HTMLInputElement>(m_node.get()). showAutoFillButton();235 } 236 237 void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled( bool filled)234 return downcast<HTMLInputElement>(m_node.get()).autoFillButtonType() != AutoFillButtonType::None; 235 } 236 237 void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled(AutoFillButtonType autoFillButtonType) 238 238 { 239 239 if (!is<HTMLInputElement>(m_node)) 240 240 return; 241 241 242 downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton( filled);242 downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton(autoFillButtonType); 243 243 } 244 244 -
trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h
r181408 r195685 37 37 class IntRect; 38 38 class Node; 39 enum class AutoFillButtonType : uint8_t; 39 40 } 40 41 … … 69 70 void setHTMLInputElementAutoFilled(bool); 70 71 bool isHTMLInputElementAutoFillButtonEnabled() const; 71 void setHTMLInputElementAutoFillButtonEnabled( bool);72 void setHTMLInputElementAutoFillButtonEnabled(WebCore::AutoFillButtonType); 72 73 WebCore::IntRect htmlInputElementAutoFillButtonBounds(); 73 74 bool htmlInputElementLastChangeWasUserEdit();
Note: See TracChangeset
for help on using the changeset viewer.