Diff
Modified: trunk/LayoutTests/ChangeLog (195684 => 195685)
--- trunk/LayoutTests/ChangeLog 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/ChangeLog 2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,23 @@
+2016-01-27 Zhuo Li <[email protected]>
+
+ Need ability to specify alternate image for AutoFill button in input fields.
+ https://bugs.webkit.org/show_bug.cgi?id=153116.
+ rdar://problem/23384854.
+
+ Reviewed by Darin Adler.
+
+ * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html: The test API has
+ another parameter to specify what type the AutoFill button is.
+ * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html: Ditto.
+ * fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt: Added.
+ * fast/forms/auto-fill-button/input-contacts-auto-fill-button.html: Added.
+ * fast/forms/auto-fill-button/input-auto-fill-button.html: Ditto.
+ * fast/forms/auto-fill-button/input-disabled-auto-fill-button.html: Ditto.
+ * fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html: Ditto.
+ * fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html: Ditto.
+ * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html: Added.
+ * fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html: Added.
+
2016-01-26 Ryosuke Niwa <[email protected]>
Add Node.treeRoot
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -10,7 +10,7 @@
var password = document.getElementById("password");
if (window.internals)
- internals.setShowAutoFillButton(password, true);
+ internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
function makeFieldDisabledAndNotifyDone()
{
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -10,7 +10,7 @@
var password = document.getElementById("password");
if (window.internals)
- internals.setShowAutoFillButton(password, true);
+ internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
function makeFieldReadOnlyAndNotifyDone()
{
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,21 +1,21 @@
<p>This tests that the AutoFill button renders. It can only be tested in the test tool.</p>
-<div id='container'>
- <input type='text'>
- <input type='password'>
+<div id="container">
+ <input type="text">
+ <input type="password">
</div>
<script>
if (window.internals) {
var inputs = document.querySelectorAll("input");
for (var i = 0; i < inputs.length; ++i)
- window.internals.setShowAutoFillButton(inputs[i], true);
+ window.internals.setShowAutoFillButton(inputs[i], "AutoFillButtonTypeCredentials");
var dynamicInput = document.createElement("input");
- window.internals.setShowAutoFillButton(dynamicInput, true);
+ window.internals.setShowAutoFillButton(dynamicInput, "AutoFillButtonTypeCredentials");
document.querySelector("#container").appendChild(dynamicInput);
var dynamicInput2 = document.createElement("input");
- window.internals.setShowAutoFillButton(dynamicInput2, true);
+ window.internals.setShowAutoFillButton(dynamicInput2, "AutoFillButtonTypeCredentials");
document.querySelector("#container").appendChild(dynamicInput2);
dynamicInput2.setAttribute("type", "password");
}
Added: trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt (0 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt 2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,57 @@
+layer at (0,0) size 800x600
+ RenderView at (0,0) size 800x600
+layer at (0,0) size 800x104
+ RenderBlock {HTML} at (0,0) size 800x104
+ RenderBody {BODY} at (8,16) size 784x80
+ RenderBlock {P} at (0,0) size 784x18
+ RenderText {#text} at (0,0) size 598x18
+ text run at (0,0) width 598: "This tests that the Address Book AutoFill button renders. It can only be tested in the test tool."
+ RenderBlock {DIV} at (0,34) size 784x46
+ RenderTextControl {INPUT} at (2,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+ RenderText {#text} at (140,2) size 5x18
+ text run at (140,2) width 5: " "
+ RenderTextControl {INPUT} at (146,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+ RenderText {#text} at (284,2) size 5x18
+ text run at (284,2) width 5: " "
+ RenderTextControl {INPUT} at (290,2) size 138x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+ RenderText {#text} at (429,2) size 5x18
+ text run at (429,2) width 5: " "
+ RenderTextControl {INPUT} at (435,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+ RenderTextControl {INPUT} at (575,2) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+ RenderTextControl {INPUT} at (2,25) size 137x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+ RenderFlexibleBox {DIV} at (3,3) size 131x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (13,55) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (157,55) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (302,55) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (446,55) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (586,55) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (13,78) size 110x13
+ RenderBlock {DIV} at (0,0) size 111x13
+layer at (126,56) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (271,56) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (415,56) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (559,56) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (700,56) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
+layer at (126,79) size 15x12
+ RenderBlock {DIV} at (113,0) size 16x13 [bgcolor=#000000]
Added: trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html (0 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-contacts-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<p>This tests that the Address Book AutoFill button renders. It can only be tested in the test tool.</p>
+<div id="container">
+ <input type="text">
+ <input type="text" name="first_name">
+ <input type="text" name="last_name">
+</div>
+<script>
+
+if (window.internals) {
+ var inputs = document.querySelectorAll("input");
+ for (var i = 0; i < inputs.length; ++i)
+ window.internals.setShowAutoFillButton(inputs[i], "AutoFillButtonTypeContacts");
+
+ var dynamicInput = document.createElement("input");
+ window.internals.setShowAutoFillButton(dynamicInput, "AutoFillButtonTypeContacts");
+ document.querySelector("#container").appendChild(dynamicInput);
+
+ var dynamicInput2 = document.createElement("input");
+ window.internals.setShowAutoFillButton(dynamicInput2, "AutoFillButtonTypeContacts");
+ document.querySelector("#container").appendChild(dynamicInput2);
+ dynamicInput2.setAttribute("name", "address");
+
+ var dynamicInput3 = document.createElement("input");
+ window.internals.setShowAutoFillButton(dynamicInput3, "AutoFillButtonTypeContacts");
+ document.querySelector("#container").appendChild(dynamicInput3);
+ dynamicInput3.setAttribute("name", "phone_number");
+}
+</script>
+</html>
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-disabled-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
<input type="password" id="password" placeholder="disabled" disabled autofocus>
<script>
if (window.internals)
- internals.setShowAutoFillButton(document.getElementById("password"), true);
+ internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
</script>
</body>
</html>
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
<input type="password" id="password" placeholder="read only" readonly autofocus>
<script>
if (window.internals)
- internals.setShowAutoFillButton(document.getElementById("password"), true);
+ internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
</script>
</body>
</html>
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -5,7 +5,7 @@
<input type="password" id="password" value="read only" readonly autofocus>
<script>
if (window.internals)
- internals.setShowAutoFillButton(document.getElementById("password"), true);
+ internals.setShowAutoFillButton(document.getElementById("password"), "AutoFillButtonTypeCredentials");
</script>
</body>
</html>
Modified: trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html (195684 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -22,9 +22,9 @@
if (!window.internals || !window.eventSender)
return;
- internals.setShowAutoFillButton(password, true);
+ internals.setShowAutoFillButton(password, "AutoFillButtonTypeCredentials");
- var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-auto-fill-button");
+ var autoFillButton = getElementByPseudoId(internals.shadowRoot(password), "-webkit-credentials-auto-fill-button");
autoFillButton._onclick_ = checkEventAndDone;
eventSender.mouseMoveTo(password.offsetLeft + 10, password.offsetTop + password.offsetHeight / 2);
Added: trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html (0 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes-expected.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p>This tests that we show the correct AutoFill button when AutoFill button type changes. It can only be tested in the test tool.</p>
+<input id="credentials">
+<input id="contacts">
+<script>
+if (window.internals) {
+ internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeContacts");
+ internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeCredentials");
+}
+</script>
+</body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html (0 => 195685)
--- trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html (rev 0)
+++ trunk/LayoutTests/fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html 2016-01-27 20:24:37 UTC (rev 195685)
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p>This tests that we show the correct AutoFill button when AutoFill button type changes. It can only be tested in the test tool.</p>
+<input id="credentials">
+<input id="contacts">
+<script>
+if (window.internals) {
+ internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeCredentials");
+ internals.setShowAutoFillButton(document.getElementById("credentials"), "AutoFillButtonTypeContacts");
+
+ internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeContacts");
+ internals.setShowAutoFillButton(document.getElementById("contacts"), "AutoFillButtonTypeCredentials");
+}
+</script>
+</body>
+</html>
\ No newline at end of file
Modified: trunk/Source/WebCore/ChangeLog (195684 => 195685)
--- trunk/Source/WebCore/ChangeLog 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/ChangeLog 2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,52 @@
+2016-01-27 Zhuo Li <[email protected]>
+
+ Need ability to specify alternate image for AutoFill button in input fields.
+ https://bugs.webkit.org/show_bug.cgi?id=153116.
+ rdar://problem/23384854.
+
+ Reviewed by Darin Adler.
+
+ Add a new AutoFill button that can be shown in <input> elements.
+
+ Tests: fast/forms/auto-fill-button/input-contacts-auto-fill-button.html
+ fast/forms/auto-fill-button/show-correct-auto-fill-button-when-auto-fill-button-type-changes.html
+
+ * css/html.css:
+ (input::-webkit-contacts-auto-fill-button):
+ (input::-webkit-contacts-auto-fill-button:hover):
+ (input::-webkit-contacts-auto-fill-button:active):
+ Add default style rules for the Contacts AutoFill button based on the ones used for
+ Manual AutoFill button.
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::setShowAutoFillButton):
+ * html/HTMLInputElement.h:
+ (WebCore::HTMLInputElement::autoFillButtonType):
+ - Replace the boolean parameter with a new parameter to specify the type of the AutoFill button.
+ - Declare a private variable to keep a record of the type of the current AutoFill
+ button.
+ (WebCore::HTMLInputElement::showAutoFillButton): Deleted.
+
+ * html/HTMLTextFormControlElement.h:
+ Declare enum for AutoFill button type.
+
+ * html/TextFieldInputType.cpp:
+ (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
+ (WebCore::isAutoFillButtonTypeChanged):
+ (WebCore::TextFieldInputType::shouldDrawAutoFillButton): None means the AutoFill button is not
+ enabled.
+ (WebCore::TextFieldInputType::createAutoFillButton): Only create the AutoFill button
+ if the type is expected.
+ (WebCore::TextFieldInputType::updateAutoFillButton):
+ Handle the case where AutoFill button type changes in the text field.
+ * html/TextFieldInputType.h:
+
+ * testing/Internals.cpp:
+ (WebCore::stringToAutoFillButtonType): Convert the string to AutoFill button type.
+ (WebCore::Internals::setShowAutoFillButton): Add a new parameter to specify the type of the AutoFill button.
+ * testing/Internals.h: Ditto.
+ * testing/Internals.idl: Ditto.
+
2016-01-26 Ryosuke Niwa <[email protected]>
Add Node.treeRoot
Modified: trunk/Source/WebCore/css/html.css (195684 => 195685)
--- trunk/Source/WebCore/css/html.css 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/css/html.css 2016-01-27 20:24:37 UTC (rev 195685)
@@ -549,7 +549,7 @@
-webkit-user-select: none;
}
-input::-webkit-auto-fill-button {
+input::-webkit-credentials-auto-fill-button {
-webkit-mask-image: -webkit-image-set(url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAMCAYAAAC9QufkAAAAAXNSR0IB2cksfwAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsTAAALEwEAmpwYAAADyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA0LTAzVDE2OjA2OjI1PC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wNC0wM1QxNjowMzoxNjwveG1wOkNyZWF0
ZURhdGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoz37ZdAAAA5ElEQVQoFY2RsQ5BQRBFd9EgEYXv8QlaEqVGpfUPao3oKXyEQiJI1ERESaGmwnPu2k2QJ2uS82Z2du7s7jyTJInBWnCABeygoXwM6kwN1GELFo7wgOo/4gmFEovzWzyMiTMUlyFYJQT4wlucGko8T90xZv0j/5EusVpCuLr8FPK6NraHPmT8Oks8gI2bKEEOZhAauEJf3PX5Eb4ImpEG2gni0NWJvwdFYRvuoIHeoOUa++56+wpSxb6myf4J6qG5VWCt1ckPvHsksf531HSiDJ1VV9n15eJfJ+YkvWcMF+jFZa+KJ554xIc+jempAAAAAElFTkSuQmCC") 1x, url("data:image/png;base64,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") 2x);
-webkit-mask-size: 15px 12px;
width: 15px;
@@ -561,14 +561,34 @@
-webkit-user-select: none;
}
-input::-webkit-auto-fill-button:hover {
+input::-webkit-credentials-auto-fill-button:hover {
background-color: rgb(0, 122, 255);
}
-input::-webkit-auto-fill-button:active {
+input::-webkit-credentials-auto-fill-button:active {
background-color: rgb(0, 60, 219);
}
+input::-webkit-contacts-auto-fill-button {
+ -webkit-mask-image: -webkit-image-set(url("data:image/png;base64,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
1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDEtMTNUMTc6MDk6NDQtMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMDo0MC0
wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTA6NDAtMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoyYzhmZWJiMC05NzE0LTQ2OWUtYjY0Mi0wMjc2Nzc1Y2ZkM2I8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0
OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjJjOGZlYmIwLTk3MTQtNDY5ZS1iNjQyLTAyNzY3NzVjZmQzYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMDo0MC0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWERpbWVuc
2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgC
iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz63NHXRAAAAIGNIUk0AAG11AABzoAAA/N0AAINkAABw6AAA7GgAADA+AAAQkOTsmeoAAAJ+SURBVHjavJbPa9NgGMefLqOYZGTZWChlmxXyo6E4S6BQKNKuGTnLepTBPHnYxatehP0BPQ7PMsTl0ENPUrDYsk7UDj1IKelcurTDbjsUccWNJfX1JIxqm9e17oHn9D58Pzw/3ud9PQghwLVMJnM3m83eKxaL8bOzM0qSpFoqlcpomvZ6YWHhBEsEIeTqpmlSy8vLzwCgBQCo11mWra6trT3F0XINyOVydwRB2P4bqMdbGxsbqaGB8Xhcx4AhAEDhcDg3FHBvb2+CZdkqLnBmZuazaZrUIM0xtx4TBCHjDpXjOLdt2x4fFDMQSNP0D4Zh3uECKYr6SJLk+ZWBfr//59TUVBsXODs7+3V+fv7iykAAAJ/Pd4ILDAQCB0Pdw1KpJJAkWccdGoZhjN3d3bkrD8309HTb6/VewD8YTdOdoTaNpmmbuBmqqvrCTc+1h6qq5j0ezxFGckdLS0v5kezSZDL50i27RCKh42iN4fRFUZRPbjGRSKSMo4
UFFEWx5hbD87w5sufJMAyG5/mdfuUMBALvq9UqO7KSSpL0fWVlZbPf+erq6nNZlr+NrKQAAMfHx/5+Z51OZwJXBxtYq9WEfmeGYQSxN4NbzS3L8m5tbS0OehcnJycNXdfjOD309H6iWq3WWKFQWCwWi4lKpRKyLOtWs9mM4Fx8SZJqgiB8CQaDRjQa/RCLxd7+8Xr8Jh8eHo6n0+n7oVAoj7vK3Jzn+Z319fWHl38BgBCCcrk8pyjKq1GBel2W5TelUklACAHU6/Ubo8yqn4uiuL2/v08RHMc90HX9Efxna7fbNzmOOyBs237SaDRCcA3mOM4F0e12H5+envqvA9jtds9/DQCsPB1nqFm3ggAAAABJRU5ErkJggg==") 1x, url("data:image/png;base64,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
aqpmo7c3vp9sc7Una0fu/1fe1Og52VOz/tEu3q2p2w+0ytZ23tHsM9y+rIOlldz95Jezt+CP2hcZ/Dvm37dfdXHsAB2YHffsz88frB6IMth7wO7TtseXjjEa0jFfVE/Yz6vobchq7G9MbOo+OPtjT5Nh35yfGnXcdMj1Uf1zm+7ITSiYUnBk+WnexvFjf3nso59ahlasud02mnr56ZeKb9bPTZcz+H/3y6Naj15Dm/c8fO+5w/esHrQsNFj4v1be5tR35x/+VIu0d7/SXPS40d3h1NneM6T1wOuHzqSuiVn69GXb14LfZa5/Xk6zdvTLrRdZN/8+mtglsvbpfeHrgz7y7jbsU99XtV9w3v1/zH9j/7uzy6jj8IfdD2MPHhnUe8R89+Lfn1Y/fCxyqPq56YPKl96vL0WE94T8dvX/3W/Uz8bKC3/HeN3zc+t3l++I/AP9r60vq6X0heDL5c8kr/1a7Xbq9b+uP7778pfDPwtuKd/rvd773et35I/fBkYNpH1sd1n2w/NX2O/nx3sHBwUMyVcAEAFAAyOxt4uQtQSQe0OgAlVfn+BQAg5DsjIP8H+Xcs39EAAB7ArkAgeR4Q0wxsbgYs5wHsZiAeQFIgSFfXkWPISrJdXeS52BKA8W5w8JURwGoCPkkGBwc2DQ5+2gFQt4DmYvneBwBMdWCrPgC03VD/x/71XyvrbEVyL+sZAAA4mWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczp
yZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTYtMDEtMTNUMTc6MDk6NDAtMDg6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDEtMTNUMTc6MTE6MTktMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+QWRv
YmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo2MGEyMjk2NC0yNjlkLTQ2MzAtYjhkZi1jMTJiYjE0MzNhODU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjYwYTIyOTY0LTI2OWQtNDYzMC1iOGRmLWMxMmJiMTQzM2E4NTwvc3RFdnQ6aW5zdGFuY
2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNi0wMS0xM1QxNzoxMToxOS0wODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NTY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC
AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgI
CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
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") 2x);
+ -webkit-mask-size: 15px 12px;
+ width: 15px;
+ height: 12px;
+ margin-left: 3px;
+ margin-right: 2px;
+ background-color: black;
+ flex: none;
+ -webkit-user-select: none;
+}
+
+input::-webkit-contacts-auto-fill-button:hover {
+ background-color: rgb(0, 122, 255);
+}
+
+input::-webkit-contacts-auto-fill-button:active {
+ background-color: rgb(0, 60, 219);
+}
+
input::-webkit-caps-lock-indicator {
-webkit-appearance: caps-lock-indicator;
content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="17" height="17"><path fill="black" fill-opacity="0.4" d="M12.5 0.5A 4 4 0 0 1 16.5 4.5L 16.5 12.5A 4 4 0 0 1 12.5 16.5L 4.5 16.5A 4 4 0 0 1 0.5 12.5L 0.5 4.5A 4 4 0 0 1 4.5 0.5L 12.5 0.5M 8.5 2L 4 7L 6.25 7L 6.25 10.25L 10.75 10.25L 10.75 7L 13 7L 8.5 2M 10.75 12L 6.25 12L 6.25 14.25L 10.75 14.25L 10.75 12"/></svg>');
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (195684 => 195685)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2016-01-27 20:24:37 UTC (rev 195685)
@@ -105,7 +105,7 @@
, m_isActivatedSubmit(false)
, m_autocomplete(Uninitialized)
, m_isAutoFilled(false)
- , m_showAutoFillButton(false)
+ , m_autoFillButtonType(static_cast<uint8_t>(AutoFillButtonType::None))
#if ENABLE(DATALIST_ELEMENT)
, m_hasNonEmptyList(false)
#endif
@@ -1300,12 +1300,12 @@
setNeedsStyleRecalc();
}
-void HTMLInputElement::setShowAutoFillButton(bool showAutoFillButton)
+void HTMLInputElement::setShowAutoFillButton(AutoFillButtonType autoFillButtonType)
{
- if (showAutoFillButton == m_showAutoFillButton)
+ if (static_cast<uint8_t>(autoFillButtonType) == m_autoFillButtonType)
return;
- m_showAutoFillButton = showAutoFillButton;
+ m_autoFillButtonType = static_cast<uint8_t>(autoFillButtonType);
m_inputType->updateAutoFillButton();
}
Modified: trunk/Source/WebCore/html/HTMLInputElement.h (195684 => 195685)
--- trunk/Source/WebCore/html/HTMLInputElement.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLInputElement.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -237,8 +237,8 @@
bool isAutoFilled() const { return m_isAutoFilled; }
WEBCORE_EXPORT void setAutoFilled(bool = true);
- bool showAutoFillButton() const { return m_showAutoFillButton; }
- WEBCORE_EXPORT void setShowAutoFillButton(bool);
+ AutoFillButtonType autoFillButtonType() const { return (AutoFillButtonType)m_autoFillButtonType; }
+ WEBCORE_EXPORT void setShowAutoFillButton(AutoFillButtonType);
FileList* files();
void setFiles(PassRefPtr<FileList>);
@@ -431,7 +431,7 @@
bool m_isActivatedSubmit : 1;
unsigned m_autocomplete : 2; // AutoCompleteSetting
bool m_isAutoFilled : 1;
- bool m_showAutoFillButton : 1;
+ unsigned m_autoFillButtonType : 2; // AutoFillButtonType;
#if ENABLE(DATALIST_ELEMENT)
bool m_hasNonEmptyList : 1;
#endif
Modified: trunk/Source/WebCore/html/HTMLTextFormControlElement.h (195684 => 195685)
--- trunk/Source/WebCore/html/HTMLTextFormControlElement.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/HTMLTextFormControlElement.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -34,6 +34,7 @@
class TextControlInnerTextElement;
class VisiblePosition;
+enum class AutoFillButtonType : uint8_t { None, Credentials, Contacts };
enum TextFieldSelectionDirection { SelectionHasNoDirection, SelectionHasForwardDirection, SelectionHasBackwardDirection };
enum TextFieldEventBehavior { DispatchNoEvent, DispatchChangeEvent, DispatchInputAndChangeEvent };
Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (195684 => 195685)
--- trunk/Source/WebCore/html/TextFieldInputType.cpp 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp 2016-01-27 20:24:37 UTC (rev 195685)
@@ -399,6 +399,35 @@
return string.left(newLength);
}
+static AtomicString autoFillButtonTypeToAutoFillButtonPseudoClassName(AutoFillButtonType autoFillButtonType)
+{
+ AtomicString pseudoClassName;
+ switch (autoFillButtonType) {
+ case AutoFillButtonType::Contacts:
+ pseudoClassName = AtomicString("-webkit-contacts-auto-fill-button", AtomicString::ConstructFromLiteral);
+ break;
+ case AutoFillButtonType::Credentials:
+ pseudoClassName = AtomicString("-webkit-credentials-auto-fill-button", AtomicString::ConstructFromLiteral);
+ break;
+ case AutoFillButtonType::None:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+
+ return pseudoClassName;
+}
+
+static bool isAutoFillButtonTypeChanged(const AtomicString& attribute, AutoFillButtonType autoFillButtonType)
+{
+ if (attribute == "-webkit-contacts-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Contacts)
+ return true;
+
+ if (attribute == "-webkit-credentials-auto-fill-button" && autoFillButtonType != AutoFillButtonType::Credentials)
+ return true;
+
+ return false;
+}
+
String TextFieldInputType::sanitizeValue(const String& proposedValue) const
{
return limitLength(proposedValue.removeCharacters(isASCIILineBreak), HTMLInputElement::maximumLength);
@@ -587,7 +616,7 @@
bool TextFieldInputType::shouldDrawAutoFillButton() const
{
- return !element().isDisabledOrReadOnly() && element().showAutoFillButton();
+ return !element().isDisabledOrReadOnly() && element().autoFillButtonType() != AutoFillButtonType::None;
}
void TextFieldInputType::autoFillButtonElementWasClicked()
@@ -613,12 +642,15 @@
element().userAgentShadowRoot()->appendChild(*m_container, IGNORE_EXCEPTION);
}
-void TextFieldInputType::createAutoFillButton()
+void TextFieldInputType::createAutoFillButton(AutoFillButtonType autoFillButtonType)
{
ASSERT(!m_autoFillButton);
+ if (autoFillButtonType == AutoFillButtonType::None)
+ return;
+
m_autoFillButton = AutoFillButtonElement::create(element().document(), *this);
- m_autoFillButton->setPseudo(AtomicString("-webkit-auto-fill-button", AtomicString::ConstructFromLiteral));
+ m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(autoFillButtonType));
m_container->appendChild(*m_autoFillButton, IGNORE_EXCEPTION);
}
@@ -629,8 +661,13 @@
createContainer();
if (!m_autoFillButton)
- createAutoFillButton();
+ createAutoFillButton(element().autoFillButtonType());
+ const AtomicString& attribute = m_autoFillButton->fastGetAttribute(pseudoAttr);
+ bool shouldUpdateAutoFillButtonType = isAutoFillButtonTypeChanged(attribute, element().autoFillButtonType());
+ if (shouldUpdateAutoFillButtonType)
+ m_autoFillButton->setPseudo(autoFillButtonTypeToAutoFillButtonPseudoClassName(element().autoFillButtonType()));
+
m_autoFillButton->setInlineStyleProperty(CSSPropertyDisplay, CSSValueBlock, true);
return;
}
Modified: trunk/Source/WebCore/html/TextFieldInputType.h (195684 => 195685)
--- trunk/Source/WebCore/html/TextFieldInputType.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/html/TextFieldInputType.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -108,7 +108,7 @@
bool shouldDrawAutoFillButton() const;
void createContainer();
- void createAutoFillButton();
+ void createAutoFillButton(AutoFillButtonType);
RefPtr<HTMLElement> m_container;
RefPtr<HTMLElement> m_innerBlock;
Modified: trunk/Source/WebCore/testing/Internals.cpp (195684 => 195685)
--- trunk/Source/WebCore/testing/Internals.cpp 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.cpp 2016-01-27 20:24:37 UTC (rev 195685)
@@ -1278,8 +1278,20 @@
downcast<HTMLInputElement>(*element).setAutoFilled(enabled);
}
-void Internals::setShowAutoFillButton(Element* element, bool show, ExceptionCode& ec)
+static AutoFillButtonType stringToAutoFillButtonType(const String& autoFillButtonType)
{
+ if (autoFillButtonType == "AutoFillButtonTypeNone")
+ return AutoFillButtonType::None;
+ if (autoFillButtonType == "AutoFillButtonTypeCredentials")
+ return AutoFillButtonType::Credentials;
+ if (autoFillButtonType == "AutoFillButtonTypeContacts")
+ return AutoFillButtonType::Contacts;
+ ASSERT_NOT_REACHED();
+ return AutoFillButtonType::None;
+}
+
+void Internals::setShowAutoFillButton(Element* element, const String& autoFillButtonType, ExceptionCode& ec)
+{
if (!element) {
ec = INVALID_ACCESS_ERR;
return;
@@ -1290,7 +1302,7 @@
return;
}
- downcast<HTMLInputElement>(*element).setShowAutoFillButton(show);
+ downcast<HTMLInputElement>(*element).setShowAutoFillButton(stringToAutoFillButtonType(autoFillButtonType));
}
Modified: trunk/Source/WebCore/testing/Internals.h (195684 => 195685)
--- trunk/Source/WebCore/testing/Internals.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -177,7 +177,7 @@
bool elementShouldAutoComplete(Element* inputElement, ExceptionCode&);
void setEditingValue(Element* inputElement, const String&, ExceptionCode&);
void setAutofilled(Element*, bool enabled, ExceptionCode&);
- void setShowAutoFillButton(Element*, bool enabled, ExceptionCode&);
+ void setShowAutoFillButton(Element*, const String& autoFillButtonType, ExceptionCode&);
void scrollElementToRect(Element*, long x, long y, long w, long h, ExceptionCode&);
void paintControlTints(ExceptionCode&);
Modified: trunk/Source/WebCore/testing/Internals.idl (195684 => 195685)
--- trunk/Source/WebCore/testing/Internals.idl 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebCore/testing/Internals.idl 2016-01-27 20:24:37 UTC (rev 195685)
@@ -57,6 +57,12 @@
"previous-track"
};
+enum AutoFillButtonType {
+ "AutoFillButtonTypeNone",
+ "AutoFillButtonTypeContacts",
+ "AutoFillButtonTypeCredentials"
+};
+
[
NoInterfaceObject,
] interface Internals {
@@ -151,7 +157,7 @@
[RaisesException] boolean elementShouldAutoComplete(Element inputElement);
[RaisesException] void setEditingValue(Element inputElement, DOMString value);
[RaisesException] void setAutofilled(Element inputElement, boolean enabled);
- [RaisesException] void setShowAutoFillButton(Element inputElement, boolean enabled);
+ [RaisesException] void setShowAutoFillButton(Element inputElement, AutoFillButtonType autoFillButtonType);
[RaisesException] unsigned long countMatchesForText(DOMString text, unsigned long findOptions, DOMString markMatches);
[RaisesException] void paintControlTints();
Modified: trunk/Source/WebKit2/ChangeLog (195684 => 195685)
--- trunk/Source/WebKit2/ChangeLog 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/ChangeLog 2016-01-27 20:24:37 UTC (rev 195685)
@@ -1,3 +1,24 @@
+2016-01-27 Zhuo Li <[email protected]>
+
+ Need ability to specify alternate image for AutoFill button in input fields.
+ https://bugs.webkit.org/show_bug.cgi?id=153116.
+ rdar://problem/23384854.
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
+ (toAutoFillButtonType): Convert the WebKit AutoFill button type enum to WebCore AutoFill button
+ type enum.
+ (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType): Added to be able to specify
+ what the AutoFill button type is. None means the AutoFill button is not shown.
+ (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled): Deprecate this method.
+ * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Declare an AutoFill button type enum.
+ * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
+ (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled): None means the AutoFill button is not enabled.
+ (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabledWithButtonType): Use the new parameter to specify
+ what the AutoFill button type is.
+ * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.
+
2016-01-27 Dan Bernstein <[email protected]>
More trying to fix the build.
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp (195684 => 195685)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp 2016-01-27 20:24:37 UTC (rev 195685)
@@ -33,9 +33,24 @@
#include "WKBundleAPICast.h"
#include "WebFrame.h"
#include "WebImage.h"
+#include <WebCore/HTMLTextFormControlElement.h>
using namespace WebKit;
+static WebCore::AutoFillButtonType toAutoFillButtonType(WKAutoFillButtonType wkAutoFillButtonType)
+{
+ switch (wkAutoFillButtonType) {
+ case kWKAutoFillButtonTypeNone:
+ return WebCore::AutoFillButtonType::None;
+ case kWKAutoFillButtonTypeContacts:
+ return WebCore::AutoFillButtonType::Contacts;
+ case kWKAutoFillButtonTypeCredentials:
+ return WebCore::AutoFillButtonType::Credentials;
+ }
+ ASSERT_NOT_REACHED();
+ return WebCore::AutoFillButtonType::None;
+}
+
WKTypeID WKBundleNodeHandleGetTypeID()
{
return toAPI(InjectedBundleNodeHandle::APIType);
@@ -95,9 +110,9 @@
return toImpl(htmlInputElementHandleRef)->isHTMLInputElementAutoFillButtonEnabled();
}
-void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)
+void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef, WKAutoFillButtonType autoFillButtonType)
{
- toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(enabled);
+ toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(toAutoFillButtonType(autoFillButtonType));
}
WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandleRef)
@@ -150,3 +165,11 @@
{
toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFilled(filled);
}
+
+// Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef, WKAutoFillButtonType).
+void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled)
+{
+ WebCore::AutoFillButtonType autoFillButtonType = enabled ? WebCore::AutoFillButtonType::Credentials : WebCore::AutoFillButtonType::None;
+
+ toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(autoFillButtonType);
+}
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h (195684 => 195685)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -35,6 +35,13 @@
extern "C" {
#endif
+enum {
+ kWKAutoFillButtonTypeNone,
+ kWKAutoFillButtonTypeCredentials,
+ kWKAutoFillButtonTypeContacts
+};
+typedef uint8_t WKAutoFillButtonType;
+
WK_EXPORT WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef context, JSObjectRef object);
/* Convenience Operations */
@@ -55,7 +62,7 @@
WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandle);
WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled);
WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle);
-WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle, bool enabled);
+WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandle, WKAutoFillButtonType autoFillButtonType);
WK_EXPORT WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandle);
WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit(WKBundleNodeHandleRef htmlInputElementHandle);
@@ -79,6 +86,8 @@
WK_EXPORT bool WKBundleNodeHandleGetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle);
/* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef, bool) */
WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandle, bool filled);
+/* Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef, WKAutoFillButtonType)*/
+WK_EXPORT void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandle, bool enabled);
#ifdef __cplusplus
}
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp (195684 => 195685)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp 2016-01-27 20:24:37 UTC (rev 195685)
@@ -231,15 +231,15 @@
if (!is<HTMLInputElement>(m_node))
return false;
- return downcast<HTMLInputElement>(m_node.get()).showAutoFillButton();
+ return downcast<HTMLInputElement>(m_node.get()).autoFillButtonType() != AutoFillButtonType::None;
}
-void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled(bool filled)
+void InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled(AutoFillButtonType autoFillButtonType)
{
if (!is<HTMLInputElement>(m_node))
return;
- downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton(filled);
+ downcast<HTMLInputElement>(m_node.get()).setShowAutoFillButton(autoFillButtonType);
}
IntRect InjectedBundleNodeHandle::htmlInputElementAutoFillButtonBounds()
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h (195684 => 195685)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h 2016-01-27 20:12:15 UTC (rev 195684)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h 2016-01-27 20:24:37 UTC (rev 195685)
@@ -36,6 +36,7 @@
namespace WebCore {
class IntRect;
class Node;
+ enum class AutoFillButtonType : uint8_t;
}
namespace WebKit {
@@ -68,7 +69,7 @@
bool isHTMLInputElementAutoFilled() const;
void setHTMLInputElementAutoFilled(bool);
bool isHTMLInputElementAutoFillButtonEnabled() const;
- void setHTMLInputElementAutoFillButtonEnabled(bool);
+ void setHTMLInputElementAutoFillButtonEnabled(WebCore::AutoFillButtonType);
WebCore::IntRect htmlInputElementAutoFillButtonBounds();
bool htmlInputElementLastChangeWasUserEdit();
bool htmlTextAreaElementLastChangeWasUserEdit();