<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>28733</bug_id>
          
          <creation_ts>2009-08-25 22:17:31 -0700</creation_ts>
          <short_desc>[GTK] GtkIMContext filtering interferes with DOM key events</short_desc>
          <delta_ts>2009-10-01 02:02:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://jparent.googlepages.com/IME.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142785</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-25 22:17:31 -0700</bug_when>
    <thetext>The way that key presses are filtered by gtk_im_context_filter_keypress is blocking some DOM key events. Furthermore, since keystrokes are filtered before a key is released, the contents of the editor field are modified at the wrong stage (i.e. before the keydown event instead of right before the keyup event). This behavior can be observed at http://jparent.googlepages.com/IME.html .

Expected results (for entering &apos;abc&apos; in either field):
down contents are: 
press contents are: 
up contents are: a
down contents are: a
press contents are: a
up contents are: ab
down contents are: ab
press contents are: ab
up contents are: abc

Actual results:
down contents are: a
up contents are: a
down contents are: ab
up contents are: ab
down contents are: abc
up contents are: abc

This issue is also causing problems with the Web Inspector. When the Inspector console finds a completion, the next keystroke will often be lost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142786</commentid>
    <comment_count>1</comment_count>
      <attachid>38597</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-25 22:30:43 -0700</bug_when>
    <thetext>Created attachment 38597
Patch for this issue

I&apos;ve added a patch which reorganizes EditorClientGtk to manage IME commits and preedits in two stages.
1. When a commit or preedit is detected it will be recorded -- they always happen during keydown.
2. When the next applicable keyup event happens these IME events will be recorded in the field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142805</commentid>
    <comment_count>2</comment_count>
      <attachid>38597</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-08-26 00:16:52 -0700</bug_when>
    <thetext>Comment on attachment 38597
Patch for this issue

So, this looks fine in general to me, but I have some issues:

- How do you know the behavior the IM code should have? By inspection of other ports? Some spec? Just the webpage you have linked to? (Not that I don&apos;t believe we are broken, especially since the inspector is also failing; just wondering :))
- I&apos;m kind of weary to touch this stuff a lot without having tests for it, it would be great to finish eventSender to enable them or add new ones.
- Your patch will break my stuff in https://bugs.webkit.org/show_bug.cgi?id=25526, which would be also great to finish :). It&apos;s also blocked on doing tests for it though.

A few small details:

&gt; diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
&gt;  bool EditorClient::shouldBeginEditing(WebCore::Range*)
&gt;  {
&gt; +    g_free(pendingComposition);
&gt; +    pendingComposition = 0;
&gt; +    g_free(pendingPreedit);
&gt; +    pendingPreedit = 0;
&gt; +

This chunk is repeated three times, probably worth to do a small function for it.

&gt;      notImplemented();
&gt;      return true;
&gt;  }
&gt;  
&gt;  bool EditorClient::shouldEndEditing(WebCore::Range*)
&gt;  {
&gt; +    g_free(pendingComposition);
&gt; +    pendingComposition = 0;
&gt; +    g_free(pendingPreedit);
&gt; +    pendingPreedit = 0;
&gt; +
&gt;      notImplemented();

Wonder at what point it&apos;s silly to keep the notImplemented() in these functions; what should happen here?

&gt; -
&gt; -    if (keyEvent-&gt;type() == PlatformKeyboardEvent::RawKeyDown) {
&gt; -        // WebKit doesn&apos;t have enough information about mode to decide how commands that just insert text if executed via Editor should be treated,
&gt; -        // so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or let a keypress event be generated
&gt; -        // (e.g. Tab that inserts a Tab character, or Enter).
&gt; -        return !command.isTextInsertion() &amp;&amp; command.execute(evt);
&gt; +    const gchar* editorCommandString = interpretEditorCommandKeyEvent(event);
&gt; +    if (editorCommandString)
&gt; +    {

Brace in wrong line.

All that being said, I think I would like someone else to look at this before r+ the patch, I&apos;m not so familiar with all the details in this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142882</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-08-26 10:29:02 -0700</bug_when>
    <thetext>I agree that tests should come along with this patch.

The source of problems in GTK+ with IME events is that the &quot;System (Simple)&quot; input method (and perhaps others) treats non-IME input like IME input. That means that when you press &apos;a&apos; that keypress is filtered by the IMContext and an IME committed event happens soon after.

As far as the behavior of normal key events, the expected behavior comes from both FireFox (Linux) and WebKit (Mac). Here are a couple pertinent links on the topic as well:

- https://bugs.webkit.org/show_bug.cgi?id=25119
- https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143139</commentid>
    <comment_count>4</comment_count>
      <attachid>38597</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-08-27 10:10:03 -0700</bug_when>
    <thetext>Comment on attachment 38597
Patch for this issue

Per conversations on IRC this patch needs to be updated, removing it from the queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147478</commentid>
    <comment_count>5</comment_count>
      <attachid>39634</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-15 22:44:04 -0700</bug_when>
    <thetext>Created attachment 39634
Updated patch

I&apos;ve attached an updated patch which builds upon the recent EventSender implementation to enable a bunch of tests. One failing test (fast/events/js-keyboard-event-creation.html) would pass if it were not for the same bug which is causing fast/html/text-field-input-types.html to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148967</commentid>
    <comment_count>6</comment_count>
      <attachid>39634</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-21 23:12:43 -0700</bug_when>
    <thetext>Comment on attachment 39634
Updated patch

&gt; From 577ffcebd4918a23912543b9b401e4beabb90e72 Mon Sep 17 00:00:00 2001
&gt; From: Martin Robinson &lt;martin.james.robinson@gmail.com&gt;
&gt; Date: Tue, 15 Sep 2009 21:38:25 -0700
&gt; Subject: [PATCH] Ensure that even when GTKSimpleIMContext filters non-IME keystrokes, keyboard events are fired properly.
&gt; 
&gt; ---
&gt;  LayoutTests/ChangeLog                         |   11 ++
&gt;  LayoutTests/platform/gtk/Skipped              |    8 -
&gt;  WebCore/ChangeLog                             |   13 ++
&gt;  WebCore/platform/gtk/KeyEventGtk.cpp          |    4 +
&gt;  WebKit/gtk/ChangeLog                          |   20 +++
&gt;  WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp |  209 +++++++++++++++----------
&gt;  6 files changed, 171 insertions(+), 94 deletions(-)
&gt; 
&gt; diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
&gt; index b57082c..f314fe6 100644
&gt; --- a/LayoutTests/ChangeLog
&gt; +++ b/LayoutTests/ChangeLog
&gt; @@ -1,3 +1,14 @@
&gt; +2009-09-15  Martin Robinson  &lt;martin.james.robinson@gmail.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [GTK] GtkIMContext filtering interferes with DOM key events
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28733
&gt; +
&gt; +        Enable tests which are now passing because of key event fixes.
&gt; +
&gt; +        * platform/gtk/Skipped:
&gt; +
&gt;  2009-09-15  Chris Fleizach  &lt;cfleizach@apple.com&gt;
&gt;  
&gt;          Layout test fix. 
&gt; diff --git a/LayoutTests/platform/gtk/Skipped b/LayoutTests/platform/gtk/Skipped
&gt; index 8db2ec5..e8a796c 100644
&gt; --- a/LayoutTests/platform/gtk/Skipped
&gt; +++ b/LayoutTests/platform/gtk/Skipped
&gt; @@ -1605,12 +1605,6 @@ fast/events/dblclick-addEventListener.html
&gt;  fast/events/drag-in-frames.html
&gt;  fast/events/frame-tab-focus.html
&gt;  fast/events/js-keyboard-event-creation.html
&gt; -fast/events/key-events-in-input-button.html
&gt; -fast/events/key-events-in-input-text.html
&gt; -fast/events/keydown-keypress-focus-change.html
&gt; -fast/events/keydown-keypress-preventDefault.html
&gt; -fast/events/keypress-focus-change.html
&gt; -fast/events/keypress-insert-tab.html
&gt;  fast/events/mouse-click-events.html
&gt;  fast/events/mouseclick-target-and-positioning.html
&gt;  fast/events/mouseup-from-button2.html
&gt; @@ -1629,7 +1623,6 @@ fast/events/pointer-events-2.html
&gt;  fast/events/popup-blocking-click-in-iframe.html
&gt;  fast/events/right-click-focus.html
&gt;  fast/events/scrollbar-double-click.html
&gt; -fast/events/special-key-events-in-input-text.html
&gt;  fast/events/stop-load-in-unload-handler-using-document-write.html
&gt;  fast/events/stop-load-in-unload-handler-using-window-stop.html
&gt;  fast/events/tabindex-focus-blur-all.html
&gt; @@ -5582,7 +5575,6 @@ editing/pasteboard/files-during-page-drags.html
&gt;  editing/selection/extend-selection-after-double-click.html
&gt;  fast/events/drag-to-navigate.html
&gt;  fast/events/prevent-drag-to-navigate.html
&gt; -fast/events/keydown-function-keys.html
&gt;  fast/forms/slider-delete-while-dragging-thumb.html
&gt;  fast/events/tab-focus-anchor.html
&gt;  http/tests/local/drag-over-remote-content.html
&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 4b19fb1..dfca55a 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,16 @@
&gt; +2009-09-15  Martin Robinson  &lt;martin.james.robinson@gmail.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [GTK] GtkIMContext filtering interferes with DOM key events
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28733
&gt; +
&gt; +        Give GDK_Backspace key events the proper text properties.
&gt; +
&gt; +        * platform/gtk/KeyEventGtk.cpp:
&gt; +        (WebCore::keyIdentifierForGdkKeyCode):
&gt; +        (WebCore::singleCharacterString):
&gt; +
&gt;  2009-09-15  Geoffrey Garen  &lt;ggaren@apple.com&gt;
&gt;  
&gt;          Reviewed by Sam Weinig.
&gt; diff --git a/WebCore/platform/gtk/KeyEventGtk.cpp b/WebCore/platform/gtk/KeyEventGtk.cpp
&gt; index 5875547..4186c2f 100644
&gt; --- a/WebCore/platform/gtk/KeyEventGtk.cpp
&gt; +++ b/WebCore/platform/gtk/KeyEventGtk.cpp
&gt; @@ -136,6 +136,8 @@ static String keyIdentifierForGdkKeyCode(guint keyCode)
&gt;              // Standard says that DEL becomes U+007F.
&gt;          case GDK_Delete:
&gt;              return &quot;U+007F&quot;;
&gt; +        case GDK_BackSpace:
&gt; +            return &quot;U+0008&quot;;
&gt;          case GDK_ISO_Left_Tab:
&gt;          case GDK_3270_BackTab:
&gt;          case GDK_Tab:
&gt; @@ -503,6 +505,8 @@ static String singleCharacterString(guint val)
&gt;          case GDK_KP_Enter:
&gt;          case GDK_Return:
&gt;              return String(&quot;\r&quot;);
&gt; +        case GDK_BackSpace:
&gt; +            return String(&quot;\x8&quot;);
&gt;          default:
&gt;              gunichar c = gdk_keyval_to_unicode(val);
&gt;              glong nwc;
&gt; diff --git a/WebKit/gtk/ChangeLog b/WebKit/gtk/ChangeLog
&gt; index ea3c0c2..863bc45 100644
&gt; --- a/WebKit/gtk/ChangeLog
&gt; +++ b/WebKit/gtk/ChangeLog
&gt; @@ -1,3 +1,23 @@
&gt; +2009-09-15  Martin Robinson  &lt;martin.james.robinson@gmail.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [GTK] GtkIMContext filtering interferes with DOM key events
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28733
&gt; +
&gt; +        Ensure that even when GTKSimpleIMContext filters non-IME keystrokes,
&gt; +        keyboard events are fired properly.
&gt; +
&gt; +        * WebCoreSupport/EditorClientGtk.cpp:
&gt; +        (WebKit::imContextCommitted):
&gt; +        (WebKit::imContextPreeditChanged):
&gt; +        (WebKit::EditorClient::shouldBeginEditing):
&gt; +        (WebKit::EditorClient::shouldEndEditing):
&gt; +        (WebKit::interpretEditorCommandKeyEvent):
&gt; +        (WebKit::handleCaretBrowsingKeyboardEvent):
&gt; +        (WebKit::EditorClient::handleKeyboardEvent):
&gt; +        (WebKit::EditorClient::handleInputMethodKeydown):
&gt; +
&gt;  2009-09-14  Gustavo Noronha Silva  &lt;gustavo.noronha@collabora.co.uk&gt;
&gt;  
&gt;          Reviewed by Xan Lopez and Jan Alonzo.
&gt; diff --git a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
&gt; index 71a7c1a..04f6d4d 100644
&gt; --- a/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
&gt; +++ b/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp
&gt; @@ -49,39 +49,22 @@ using namespace WebCore;
&gt;  
&gt;  namespace WebKit {
&gt;  
&gt; +static gchar* pendingComposition = 0;
&gt; +static gchar* pendingPreedit = 0;
&gt; +
&gt;  static void imContextCommitted(GtkIMContext* context, const gchar* str, EditorClient* client)
&gt;  {
&gt; -    Frame* targetFrame = core(client-&gt;m_webView)-&gt;focusController()-&gt;focusedOrMainFrame();
&gt; -
&gt; -    if (!targetFrame || !targetFrame-&gt;editor()-&gt;canEdit())
&gt; -        return;
&gt; -
&gt; -    Editor* editor = targetFrame-&gt;editor();
&gt; -
&gt; -    String commitString = String::fromUTF8(str);
&gt; -    editor-&gt;confirmComposition(commitString);
&gt; +    // This signal will fire during a keydown event. We want to the contents of the

s/We want to the/We want the/ ?

&gt; +    // field to change right before the keyup event, so we wait until then to actually
&gt; +    // commit this composition. 
&gt; +    pendingComposition = g_strdup(str);

Since you seem assume pendingComposition must be always clear at this point I guess it would be good to add an ASSERT(!pendingComposition).

&gt;  }
&gt;  
&gt;  static void imContextPreeditChanged(GtkIMContext* context, EditorClient* client)
&gt;  {
&gt; -    Frame* frame = core(client-&gt;m_webView)-&gt;focusController()-&gt;focusedOrMainFrame();
&gt; -    Editor* editor = frame-&gt;editor();
&gt; -
&gt; -    gchar* preedit = NULL;
&gt; -    gint cursorPos = 0;
&gt;      // We ignore the provided PangoAttrList for now.
&gt; -    gtk_im_context_get_preedit_string(context, &amp;preedit, NULL, &amp;cursorPos);
&gt; -    String preeditString = String::fromUTF8(preedit);
&gt; -    g_free(preedit);
&gt; -
&gt; -    // setComposition() will replace the user selection if passed an empty
&gt; -    // preedit. We don&apos;t want this to happen.
&gt; -    if (preeditString.isEmpty() &amp;&amp; !editor-&gt;hasComposition())
&gt; -        return;
&gt; -
&gt; -    Vector&lt;CompositionUnderline&gt; underlines;
&gt; -    underlines.append(CompositionUnderline(0, preeditString.length(), Color(0, 0, 0), false));
&gt; -    editor-&gt;setComposition(preeditString, underlines, cursorPos, 0);
&gt; +    gint cursorPos = 0;
&gt; +    gtk_im_context_get_preedit_string(context, &amp;pendingPreedit, NULL, &amp;cursorPos);

cursorPos can be just NULL here, the functions seem to check the value before assigning.

And another ASSERT for pendingPreedit? :)

&gt;  }
&gt;  
&gt;  void EditorClient::setInputMethodState(bool active)
&gt; @@ -136,12 +119,22 @@ int EditorClient::spellCheckerDocumentTag()
&gt;  
&gt;  bool EditorClient::shouldBeginEditing(WebCore::Range*)
&gt;  {
&gt; +    g_free(pendingComposition);
&gt; +    pendingComposition = 0;
&gt; +    g_free(pendingPreedit);
&gt; +    pendingPreedit = 0;
&gt; +

As I said in a previous comment, I think it&apos;s worth to put this in a &apos;clearPendingVariables()&apos; function or something, since it&apos;s repeated three/four times.

&gt;      notImplemented();
&gt;      return true;
&gt;  }
&gt;  
&gt;  bool EditorClient::shouldEndEditing(WebCore::Range*)
&gt;  {
&gt; +    g_free(pendingComposition);
&gt; +    pendingComposition = 0;
&gt; +    g_free(pendingPreedit);
&gt; +    pendingPreedit = 0;
&gt; +
&gt;      notImplemented();
&gt;      return true;
&gt;  }
&gt; @@ -421,7 +414,7 @@ static const KeyPressEntry keyPressEntries[] = {
&gt;      { &apos;\r&apos;,   AltKey | ShiftKey,  &quot;InsertNewline&quot;                               },
&gt;  };
&gt;  
&gt; -static const char* interpretKeyEvent(const KeyboardEvent* evt)
&gt; +static const char* interpretEditorCommandKeyEvent(const KeyboardEvent* evt)
&gt;  {
&gt;      ASSERT(evt-&gt;type() == eventNames().keydownEvent || evt-&gt;type() == eventNames().keypressEvent);
&gt;  
&gt; @@ -456,74 +449,120 @@ static const char* interpretKeyEvent(const KeyboardEvent* evt)
&gt;      return mapKey ? keyPressCommandsMap-&gt;get(mapKey) : 0;
&gt;  }
&gt;  
&gt; -static bool handleEditingKeyboardEvent(KeyboardEvent* evt)
&gt; +static bool handleCaretBrowsingKeyboardEvent(Frame* frame, const PlatformKeyboardEvent* keyEvent)
&gt; +{
&gt; +    switch (keyEvent-&gt;windowsVirtualKeyCode()) {
&gt; +        case VK_LEFT:
&gt; +            frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; +                    SelectionController::LEFT,
&gt; +                    keyEvent-&gt;ctrlKey() ? WordGranularity : CharacterGranularity,
&gt; +                    true);
&gt; +            return true;
&gt; +        case VK_RIGHT:
&gt; +            frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; +                    SelectionController::RIGHT,
&gt; +                    keyEvent-&gt;ctrlKey() ? WordGranularity : CharacterGranularity,
&gt; +                    true);
&gt; +            return true;
&gt; +        case VK_UP:
&gt; +            frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; +                    SelectionController::BACKWARD,
&gt; +                    keyEvent-&gt;ctrlKey() ? ParagraphGranularity : LineGranularity,
&gt; +                    true);
&gt; +            return true;
&gt; +        case VK_DOWN:
&gt; +            frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; +                    SelectionController::FORWARD,
&gt; +                    keyEvent-&gt;ctrlKey() ? ParagraphGranularity : LineGranularity,
&gt; +                    true);
&gt; +            return true;
&gt; +        default:
&gt; +            return false; // Not a caret browswing keystroke, so continue processing.
&gt; +    }
&gt; +}
&gt; +
&gt; +void EditorClient::handleKeyboardEvent(KeyboardEvent* event)
&gt;  {
&gt; -    Node* node = evt-&gt;target()-&gt;toNode();
&gt; +    Node* node = event-&gt;target()-&gt;toNode();
&gt;      ASSERT(node);
&gt;      Frame* frame = node-&gt;document()-&gt;frame();
&gt;      ASSERT(frame);
&gt;  
&gt; -    const PlatformKeyboardEvent* keyEvent = evt-&gt;keyEvent();
&gt; -    if (!keyEvent)
&gt; -        return false;
&gt; +    const PlatformKeyboardEvent* platformEvent = event-&gt;keyEvent();
&gt; +    if (!platformEvent)
&gt; +        return;
&gt;  
&gt;      bool caretBrowsing = frame-&gt;settings()-&gt;caretBrowsingEnabled();
&gt; -    if (caretBrowsing) {
&gt; -        switch (keyEvent-&gt;windowsVirtualKeyCode()) {
&gt; -            case VK_LEFT:
&gt; -                frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; -                        SelectionController::LEFT,
&gt; -                        keyEvent-&gt;ctrlKey() ? WordGranularity : CharacterGranularity,
&gt; -                        true);
&gt; -                return true;
&gt; -            case VK_RIGHT:
&gt; -                frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; -                        SelectionController::RIGHT,
&gt; -                        keyEvent-&gt;ctrlKey() ? WordGranularity : CharacterGranularity,
&gt; -                        true);
&gt; -                return true;
&gt; -            case VK_UP:
&gt; -                frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; -                        SelectionController::BACKWARD,
&gt; -                        keyEvent-&gt;ctrlKey() ? ParagraphGranularity : LineGranularity,
&gt; -                        true);
&gt; -                return true;
&gt; -            case VK_DOWN:
&gt; -                frame-&gt;selection()-&gt;modify(keyEvent-&gt;shiftKey() ? SelectionController::EXTEND : SelectionController::MOVE,
&gt; -                        SelectionController::FORWARD,
&gt; -                        keyEvent-&gt;ctrlKey() ? ParagraphGranularity : LineGranularity,
&gt; -                        true);
&gt; -                return true;
&gt; -        }
&gt; +    if (caretBrowsing &amp;&amp; handleCaretBrowsingKeyboardEvent(frame, platformEvent)) {
&gt; +        // This was a caret browsing key event, so prevent it from bubbling up to the DOM.
&gt; +        event-&gt;setDefaultHandled();
&gt; +        return;
&gt;      }
&gt;  
&gt; -    Editor::Command command = frame-&gt;editor()-&gt;command(interpretKeyEvent(evt));
&gt; +    // Don&apos;t allow editor commands or text insertion for nodes that cannot edit.
&gt; +    if (!frame-&gt;editor()-&gt;canEdit())
&gt; +        return;
&gt;  
&gt; -    if (keyEvent-&gt;type() == PlatformKeyboardEvent::RawKeyDown) {
&gt; -        // WebKit doesn&apos;t have enough information about mode to decide how commands that just insert text if executed via Editor should be treated,
&gt; -        // so we leave it upon WebCore to either handle them immediately (e.g. Tab that changes focus) or let a keypress event be generated
&gt; -        // (e.g. Tab that inserts a Tab character, or Enter).
&gt; -        return !command.isTextInsertion() &amp;&amp; command.execute(evt);
&gt; +    const gchar* editorCommandString = interpretEditorCommandKeyEvent(event);
&gt; +    if (editorCommandString)
&gt; +    {

The brace is wrong.

&gt; +        Editor::Command command = frame-&gt;editor()-&gt;command(editorCommandString);
&gt; +
&gt; +        // On editor commands from key down events, we only want to let the event bubble up to
&gt; +        // the DOM if it inserts text. If it doesn&apos;t insert text (e.g. Tab that changes focus)
&gt; +        // we just want WebKit to handle it immediately without a DOM event.
&gt; +        if (platformEvent-&gt;type() == PlatformKeyboardEvent::RawKeyDown) {
&gt; +            if (!command.isTextInsertion() &amp;&amp; command.execute(event))
&gt; +                event-&gt;setDefaultHandled();
&gt; +
&gt; +            return;
&gt; +        } else if (command.execute(event)) {
&gt; +            event-&gt;setDefaultHandled();
&gt; +            return;
&gt; +        }
&gt;      }
&gt;  
&gt; -    if (command.execute(evt))
&gt; -        return true;
&gt; +    // This is just a normal text insertion, so wait to execute the insertion
&gt; +    // until a keyup event happens. This will ensure that the insertion will not
&gt; +    // be reflected in the contents of the field until the keyup DOM event.
&gt; +    if (event-&gt;type() != eventNames().keydownEvent) {
&gt; +
&gt; +        if (pendingComposition) {
&gt; +            String compositionString = String::fromUTF8(pendingComposition);
&gt; +            frame-&gt;editor()-&gt;confirmComposition(compositionString);
&gt; +
&gt; +            g_free(pendingComposition);
&gt; +            pendingComposition = 0;
&gt; +            g_free(pendingPreedit);
&gt; +            pendingPreedit = 0;
&gt; +
&gt; +        } else if (pendingPreedit) {
&gt; +            String preeditString = String::fromUTF8(pendingPreedit);
&gt; +
&gt; +            // Don&apos;t use an empty preedit as it will destroy the current
&gt; +            // selection, even if the composition is cancelled or fails later on.
&gt; +            if (!preeditString.isEmpty()) {
&gt; +                Vector&lt;CompositionUnderline&gt; underlines;
&gt; +                underlines.append(CompositionUnderline(0, preeditString.length(), Color(0, 0, 0), false));
&gt; +                frame-&gt;editor()-&gt;setComposition(preeditString, underlines, 0, 0);
&gt; +            }
&gt;  
&gt; -    // Don&apos;t insert null or control characters as they can result in unexpected behaviour
&gt; -    if (evt-&gt;charCode() &lt; &apos; &apos;)
&gt; -        return false;
&gt; +            g_free(pendingPreedit);
&gt; +            pendingPreedit = 0;
&gt;  
&gt; -    // Don&apos;t insert anything if a modifier is pressed
&gt; -    if (keyEvent-&gt;ctrlKey() || keyEvent-&gt;altKey())
&gt; -        return false;
&gt; +        } else {
&gt; +            // Don&apos;t insert null or control characters as they can result in unexpected behaviour
&gt; +            if (event-&gt;charCode() &lt; &apos; &apos;)
&gt; +                return;
&gt;  
&gt; -    return frame-&gt;editor()-&gt;insertText(evt-&gt;keyEvent()-&gt;text(), evt);
&gt; -}
&gt; +            // Don&apos;t insert anything if a modifier is pressed
&gt; +            if (platformEvent-&gt;ctrlKey() || platformEvent-&gt;altKey())
&gt; +                return;
&gt;  
&gt; -void EditorClient::handleKeyboardEvent(KeyboardEvent* event)
&gt; -{
&gt; -    if (handleEditingKeyboardEvent(event))
&gt; -        event-&gt;setDefaultHandled();
&gt; +            if (frame-&gt;editor()-&gt;insertText(platformEvent-&gt;text(), event))
&gt; +                event-&gt;setDefaultHandled();
&gt; +        }
&gt; +    }
&gt;  }
&gt;  
&gt;  void EditorClient::handleInputMethodKeydown(KeyboardEvent* event)
&gt; @@ -533,9 +572,7 @@ void EditorClient::handleInputMethodKeydown(KeyboardEvent* event)
&gt;          return;
&gt;  
&gt;      WebKitWebViewPrivate* priv = m_webView-&gt;priv;
&gt; -    // TODO: Dispatch IE-compatible text input events for IM events.
&gt; -    if (gtk_im_context_filter_keypress(priv-&gt;imContext, event-&gt;keyEvent()-&gt;gdkEventKey()))
&gt; -        event-&gt;setDefaultHandled();
&gt; +    gtk_im_context_filter_keypress(priv-&gt;imContext, event-&gt;keyEvent()-&gt;gdkEventKey());
&gt;  }
&gt;  
&gt;  EditorClient::EditorClient(WebKitWebView* webView)
&gt; -- 
&gt; 1.6.0.4
&gt; 

Looks good to me, but marking r- to fix those small details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149329</commentid>
    <comment_count>7</comment_count>
      <attachid>39977</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-23 00:04:43 -0700</bug_when>
    <thetext>Created attachment 39977
Updated patch (rev2)

Thank you for your comments. I have updated the patch with the changes you suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149465</commentid>
    <comment_count>8</comment_count>
      <attachid>40008</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-23 12:04:38 -0700</bug_when>
    <thetext>Created attachment 40008
Updated patch (rev3)

Updated to use ASSERT a little more sanely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149469</commentid>
    <comment_count>9</comment_count>
      <attachid>40008</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-23 12:12:20 -0700</bug_when>
    <thetext>Comment on attachment 40008
Updated patch (rev3)

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149506</commentid>
    <comment_count>10</comment_count>
      <attachid>40008</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-23 14:21:34 -0700</bug_when>
    <thetext>Comment on attachment 40008
Updated patch (rev3)

Rejecting patch 40008 from commit-queue.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot; exit_code: 1
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/platform/gtk/Skipped
Merge conflict during commit: Your file or directory &apos;WebCore/ChangeLog&apos; is probably out-of-date: resource out of date; try updating at /usr/local/libexec/git-core//git-svn line 469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149606</commentid>
    <comment_count>11</comment_count>
      <attachid>40008</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-23 18:13:20 -0700</bug_when>
    <thetext>Comment on attachment 40008
Updated patch (rev3)

Sorry, commit-queue bug, not your fault! :(  bug 28316.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149633</commentid>
    <comment_count>12</comment_count>
      <attachid>40008</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-23 19:44:10 -0700</bug_when>
    <thetext>Comment on attachment 40008
Updated patch (rev3)

Clearing flags on attachment: 40008

Committed r48697: &lt;http://trac.webkit.org/changeset/48697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149634</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-23 19:44:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149717</commentid>
    <comment_count>14</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-24 03:57:02 -0700</bug_when>
    <thetext>I reverted this patch and I&apos;m reopening the bug, since it broke keyboard event handling notification to GTK+ pretty massively :/

The thing is, the changes in EditorClientGtk.cpp to not do anything on KeyDown make us report back to GTK+ that key_press was unhandled, *and*, EditorClient is never called by WebCore for KeyUp events, so that code is effectively dead and doing nothing, which is obviously broken.

We need to figure out this more carefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149721</commentid>
    <comment_count>15</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-09-24 04:07:49 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I reverted this patch and I&apos;m reopening the bug, since it broke keyboard event
&gt; handling notification to GTK+ pretty massively :/
&gt; 
&gt; The thing is, the changes in EditorClientGtk.cpp to not do anything on KeyDown
&gt; make us report back to GTK+ that key_press was unhandled, *and*, EditorClient
&gt; is never called by WebCore for KeyUp events, so that code is effectively dead
&gt; and doing nothing, which is obviously broken.
&gt; 
&gt; We need to figure out this more carefully.

So, disregard the last part, EditorClient is called for KeyUp events (fuckup with gdb :)), but the problem is that we never mark the event as handled when finalizing a pending composition coming from keyDown. So if we can fix this I suppose the patch would be OK, since reporting event not handled for press is OK since we actually only insert during KeyUp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151328</commentid>
    <comment_count>16</comment_count>
      <attachid>40392</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2009-09-30 12:50:53 -0700</bug_when>
    <thetext>Created attachment 40392
Updated patch (rev4)

The latest patch fixes an issue where keystrokes from compositions did not mark the event as handled by the default event handler. I&apos;ve also added a test to verify this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151484</commentid>
    <comment_count>17</comment_count>
      <attachid>40392</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-10-01 01:50:12 -0700</bug_when>
    <thetext>Comment on attachment 40392
Updated patch (rev4)

Looks great to me, let&apos;s try this again! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151485</commentid>
    <comment_count>18</comment_count>
      <attachid>40392</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-01 02:02:41 -0700</bug_when>
    <thetext>Comment on attachment 40392
Updated patch (rev4)

Clearing flags on attachment: 40392

Committed r48964: &lt;http://trac.webkit.org/changeset/48964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151486</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-01 02:02:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38597</attachid>
            <date>2009-08-25 22:30:43 -0700</date>
            <delta_ts>2009-09-15 22:44:04 -0700</delta_ts>
            <desc>Patch for this issue</desc>
            <filename>0001-Fixes-for-IME.patch</filename>
            <type>text/plain</type>
            <size>12984</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSAyODczYzQ0MWI1NjRiYWYwM2FiZDUxOTEzMDMyYzI2NDM5MDJjOGY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFN1biwgMjMgQXVnIDIwMDkgMTY6NDU6NTQgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBGaXhlcyBmb3IgSU1FCgotLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKysrCiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEd0ay5jcHAgfCAgMjA4ICsrKysrKysrKysrKysrLS0tLS0tLS0tLQogMiBm
aWxlcyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9ucygrKSwgODcgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBi
ZDI3MTViLi4wZmUwZjA2IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDA5LTA4LTI1ICBNYXJ0aW4g
Um9iaW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEd0a0lNQ29udGV4dCBm
aWx0ZXJpbmcgaW50ZXJmZXJlcyB3aXRoIERPTSBrZXkgZXZlbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODczMworCisgICAgICAgIFJlb3JnYW5p
emUgZWRpdGluZyBpbnRvIHR3byBzdGFnZXMgd2hlcmUgSU1FIGFjdGlvbnMgYXJlIHJlY29yZGVk
IG9uCisgICAgICAgIGtleSBkb3duIGV2ZW50cyBhbmQgY29tbWl0dGVkIG9uIHRoZSBjb3JyZXNw
b25kaW5nIGtleSB1cCBldmVudHMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjppbUNvbnRleHRDb21taXR0ZWQpOgorICAg
ICAgICAoV2ViS2l0OjppbUNvbnRleHRQcmVlZGl0Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6aW50ZXJwcmV0
RWRpdG9yQ29tbWFuZEtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6aGFuZGxlQ2FyZXRCcm93
c2luZ0tleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRs
ZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OmhhbmRsZUlu
cHV0TWV0aG9kS2V5ZG93bik6CisKIDIwMDktMDgtMjQgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAg
PGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
WGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsu
Y3BwCmluZGV4IGI1MTQ4ZDguLmY3ZDE0YWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudEd0ay5jcHAKQEAgLTQ5LDM5ICs0OSwyMiBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBnY2hhciogcGVuZGlu
Z0NvbXBvc2l0aW9uID0gMDsKK3N0YXRpYyBnY2hhciogcGVuZGluZ1ByZWVkaXQgPSAwOworCiBz
dGF0aWMgdm9pZCBpbUNvbnRleHRDb21taXR0ZWQoR3RrSU1Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBnY2hhciogc3RyLCBFZGl0b3JDbGllbnQqIGNsaWVudCkKIHsKLSAgICBGcmFtZSogdGFyZ2V0
RnJhbWUgPSBjb3JlKGNsaWVudC0+bV93ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwotCi0gICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUt
PmVkaXRvcigpLT5jYW5FZGl0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVkaXRvciogZWRp
dG9yID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpOwotCi0gICAgU3RyaW5nIGNvbW1pdFN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihj
b21taXRTdHJpbmcpOworICAgIC8vIFRoaXMgc2lnbmFsIHdpbGwgZmlyZSBkdXJpbmcgYSBrZXlk
b3duIGV2ZW50LiBXZSB3YW50IHRvIHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAvLyBmaWVsZCB0
byBjaGFuZ2UgcmlnaHQgYmVmb3JlIHRoZSBrZXl1cCBldmVudCwgc28gd2Ugd2FpdCB1bnRpbCB0
aGVuIHRvIGFjdHVhbGx5CisgICAgLy8gY29tbWl0IHRoaXMgY29tcG9zaXRpb24uIAorICAgIHBl
bmRpbmdDb21wb3NpdGlvbiA9IGdfc3RyZHVwKHN0cik7CiB9CiAKIHN0YXRpYyB2b2lkIGltQ29u
dGV4dFByZWVkaXRDaGFuZ2VkKEd0a0lNQ29udGV4dCogY29udGV4dCwgRWRpdG9yQ2xpZW50KiBj
bGllbnQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShjbGllbnQtPm1fd2ViVmlldyktPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBFZGl0b3IqIGVkaXRv
ciA9IGZyYW1lLT5lZGl0b3IoKTsKLQotICAgIGdjaGFyKiBwcmVlZGl0ID0gTlVMTDsKLSAgICBn
aW50IGN1cnNvclBvcyA9IDA7CiAgICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRlZCBQYW5nb0F0
dHJMaXN0IGZvciBub3cuCi0gICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRfc3RyaW5nKGNv
bnRleHQsICZwcmVlZGl0LCBOVUxMLCAmY3Vyc29yUG9zKTsKLSAgICBTdHJpbmcgcHJlZWRpdFN0
cmluZyA9IFN0cmluZzo6ZnJvbVVURjgocHJlZWRpdCk7Ci0gICAgZ19mcmVlKHByZWVkaXQpOwot
Ci0gICAgLy8gc2V0Q29tcG9zaXRpb24oKSB3aWxsIHJlcGxhY2UgdGhlIHVzZXIgc2VsZWN0aW9u
IGlmIHBhc3NlZCBhbiBlbXB0eQotICAgIC8vIHByZWVkaXQuIFdlIGRvbid0IHdhbnQgdGhpcyB0
byBoYXBwZW4uCi0gICAgaWYgKHByZWVkaXRTdHJpbmcuaXNFbXB0eSgpICYmICFlZGl0b3ItPmhh
c0NvbXBvc2l0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICB1bmRlcmxpbmVzLmFwcGVuZChDb21wb3NpdGlv
blVuZGVybGluZSgwLCBwcmVlZGl0U3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAwLCAwKSwgZmFs
c2UpKTsKLSAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKHByZWVkaXRTdHJpbmcsIHVuZGVybGlu
ZXMsIGN1cnNvclBvcywgMCk7CisgICAgZ2ludCBjdXJzb3JQb3MgPSAwOworICAgIGd0a19pbV9j
b250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhjb250ZXh0LCAmcGVuZGluZ1ByZWVkaXQsIE5VTEws
ICZjdXJzb3JQb3MpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0
ZShib29sIGFjdGl2ZSkKQEAgLTEzNiwxMiArMTE5LDIyIEBAIGludCBFZGl0b3JDbGllbnQ6OnNw
ZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2lu
RWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCiB7CisgICAgZ19mcmVlKHBlbmRpbmdDb21wb3NpdGlv
bik7CisgICAgcGVuZGluZ0NvbXBvc2l0aW9uID0gMDsKKyAgICBnX2ZyZWUocGVuZGluZ1ByZWVk
aXQpOworICAgIHBlbmRpbmdQcmVlZGl0ID0gMDsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5n
KFdlYkNvcmU6OlJhbmdlKikKIHsKKyAgICBnX2ZyZWUocGVuZGluZ0NvbXBvc2l0aW9uKTsKKyAg
ICBwZW5kaW5nQ29tcG9zaXRpb24gPSAwOworICAgIGdfZnJlZShwZW5kaW5nUHJlZWRpdCk7Cisg
ICAgcGVuZGluZ1ByZWVkaXQgPSAwOworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTQyNiw3ICs0MTksNyBAQCBzdGF0aWMgY29uc3QgS2V5UHJlc3NFbnRy
eSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKICAgICB7ICdccicsICAgQWx0S2V5IHwgU2hpZnRLZXks
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKIH07CiAK
LXN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50
KiBldnQpCitzdGF0aWMgY29uc3QgY2hhciogaW50ZXJwcmV0RWRpdG9yQ29tbWFuZEtleUV2ZW50
KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKIHsKICAgICBBU1NFUlQoZXZ0LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCB8fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCk7CiAKQEAgLTQ2MSw3NCArNDU0LDExNiBAQCBzdGF0aWMgY29uc3QgY2hh
ciogaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZ0KQogICAgIHJldHVy
biBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7CiB9CiAKLXN0
YXRpYyBib29sIGhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCkK
K3N0YXRpYyBib29sIGhhbmRsZUNhcmV0QnJvd3NpbmdLZXlib2FyZEV2ZW50KEZyYW1lKiBmcmFt
ZSwgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlFdmVudCkKK3sKKyAgICBzd2l0Y2gg
KGtleUV2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgeworICAgICAgICBjYXNlIFZLX0xF
RlQ6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hp
ZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQs
CisgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJp
dHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAg
ICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsCisgICAgICAgICAg
ICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0
ZXJHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBWS19VUDoKKyAgICAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxl
cjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAg
ICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsCisgICAgICAgICAgICAgICAgICAgIGtl
eUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0
eSwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgY2FzZSBWS19ET1dOOgorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQg
OiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3Rp
b25Db250cm9sbGVyOjpGT1JXQVJELAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3Ry
bEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCisgICAgICAg
ICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhIGNhcmV0IGJyb3dzd2lu
ZyBrZXlzdHJva2UsIHNvIGNvbnRpbnVlIHByb2Nlc3NpbmcuCisgICAgfQorfQorCit2b2lkIEVk
aXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
LSAgICBOb2RlKiBub2RlID0gZXZ0LT50YXJnZXQoKS0+dG9Ob2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1l
KTsKIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQgPSBldnQtPmtl
eUV2ZW50KCk7Ci0gICAgaWYgKCFrZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlF
dmVudCgpOworICAgIGlmICghcGxhdGZvcm1FdmVudCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Ym9vbCBjYXJldEJyb3dzaW5nID0gZnJhbWUtPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFi
bGVkKCk7Ci0gICAgaWYgKGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgc3dpdGNoIChrZXlFdmVu
dC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVktfTEVGVDoK
LSAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hp
ZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Ok1PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpM
RUZULAotICAgICAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRH
cmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNl
IFZLX1JJR0hUOgotICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtl
eUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0
aW9uQ29udHJvbGxlcjo6TU9WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OlJJR0hULAotICAgICAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxL
ZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICBjYXNlIFZLX1VQOgotICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+
bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5E
IDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELAotICAgICAgICAgICAgICAgICAgICAgICAga2V5
RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5
LAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICBjYXNlIFZLX0RPV046Ci0gICAgICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250
cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExp
bmVHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgaWYgKGNhcmV0QnJvd3NpbmcgJiYg
aGFuZGxlQ2FyZXRCcm93c2luZ0tleWJvYXJkRXZlbnQoZnJhbWUsIHBsYXRmb3JtRXZlbnQpKSB7
CisgICAgICAgIC8vIFRoaXMgd2FzIGEgY2FyZXQgYnJvd3Npbmcga2V5IGV2ZW50LCBzbyBwcmV2
ZW50IGl0IGZyb20gYnViYmxpbmcgdXAgdG8gdGhlIERPTS4KKyAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBFZGl0b3I6OkNv
bW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChpbnRlcnByZXRLZXlFdmVu
dChldnQpKTsKLQotICAgIGlmIChrZXlFdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6UmF3S2V5RG93bikgewotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3Vn
aCBpbmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgY29tbWFuZHMgdGhhdCBqdXN0
IGluc2VydCB0ZXh0IGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3Igc2hvdWxkIGJlIHRyZWF0ZWQsCi0g
ICAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZSB0byBlaXRoZXIgaGFuZGxlIHRo
ZW0gaW1tZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5
cHJlc3MgZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2Vy
dHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAgICAgIHJldHVybiAhY29tbWFuZC5p
c1RleHRJbnNlcnRpb24oKSAmJiBjb21tYW5kLmV4ZWN1dGUoZXZ0KTsKKyAgICBjb25zdCBnY2hh
ciogZWRpdG9yQ29tbWFuZFN0cmluZyA9IGludGVycHJldEVkaXRvckNvbW1hbmRLZXlFdmVudChl
dmVudCk7CisgICAgaWYgKGVkaXRvckNvbW1hbmRTdHJpbmcpCisgICAgeworICAgICAgICBFZGl0
b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChlZGl0b3JDb21t
YW5kU3RyaW5nKTsKKworICAgICAgICAvLyBPbiBlZGl0b3IgY29tbWFuZHMgZnJvbSBrZXkgZG93
biBldmVudHMsIHdlIG9ubHkgd2FudCB0byBsZXQgdGhlIGV2ZW50IGJ1YmJsZSB1cCB0bworICAg
ICAgICAvLyB0aGUgRE9NIGlmIGl0IGluc2VydHMgdGV4dC4gSWYgaXQgZG9lc24ndCBpbnNlcnQg
dGV4dCAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKQorICAgICAgICAvLyB3ZSBqdXN0IHdh
bnQgV2ViS2l0IHRvIGhhbmRsZSBpdCBpbW1lZGlhdGVseSB3aXRob3V0IGEgRE9NIGV2ZW50Lgor
ICAgICAgICBpZiAocGxhdGZvcm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6UmF3S2V5RG93bikgeworICAgICAgICAgICAgaWYgKCFjb21tYW5kLmlzVGV4dEluc2VydGlv
bigpICYmIGNvbW1hbmQuZXhlY3V0ZShldmVudCkpCisgICAgICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgfSBlbHNl
IGlmIChjb21tYW5kLmV4ZWN1dGUoZXZlbnQpKSB7CisgICAgICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChjb21tYW5kLmV4ZWN1dGUoZXZ0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Ly8gVGhpcyBpcyBqdXN0IGEgbm9ybWFsIHRleHQgaW5zZXJ0aW9uLCBzbyB3YWl0IHRvIGV4ZWN1
dGUgdGhlIGluc2VydGlvbgorICAgIC8vIHVudGlsIGEga2V5dXAgZXZlbnQgaGFwcGVucy4gVGhp
cyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBpbnNlcnRpb24gd2lsbCBub3QKKyAgICAvLyBiZSByZWZs
ZWN0ZWQgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWVsZCB1bnRpbCB0aGUga2V5dXAgRE9NIGV2
ZW50LgorICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKKworICAgICAgICBpZiAocGVuZGluZ0NvbXBvc2l0aW9uKSB7CisgICAgICAgICAgICBTdHJp
bmcgY29tcG9zaXRpb25TdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHBlbmRpbmdDb21wb3NpdGlv
bik7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21w
b3NpdGlvblN0cmluZyk7CisKKyAgICAgICAgICAgIGdfZnJlZShwZW5kaW5nQ29tcG9zaXRpb24p
OworICAgICAgICAgICAgcGVuZGluZ0NvbXBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGdfZnJl
ZShwZW5kaW5nUHJlZWRpdCk7CisgICAgICAgICAgICBwZW5kaW5nUHJlZWRpdCA9IDA7CisKKyAg
ICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUHJlZWRpdCkgeworICAgICAgICAgICAgU3RyaW5nIHBy
ZWVkaXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHBlbmRpbmdQcmVlZGl0KTsKKworICAgICAg
ICAgICAgLy8gRG9uJ3QgdXNlIGFuIGVtcHR5IHByZWVkaXQgYXMgaXQgd2lsbCBkZXN0cm95IHRo
ZSBjdXJyZW50CisgICAgICAgICAgICAvLyBzZWxlY3Rpb24sIGV2ZW4gaWYgdGhlIGNvbXBvc2l0
aW9uIGlzIGNhbmNlbGxlZCBvciBmYWlscyBsYXRlciBvbi4KKyAgICAgICAgICAgIGlmICghcHJl
ZWRpdFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Q29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgICAgICAgICAgICAgdW5kZXJsaW5lcy5hcHBl
bmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoMCwgcHJlZWRpdFN0cmluZy5sZW5ndGgoKSwgQ29sb3Io
MCwgMCwgMCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5zZXRD
b21wb3NpdGlvbihwcmVlZGl0U3RyaW5nLCB1bmRlcmxpbmVzLCAwLCAwKTsKKyAgICAgICAgICAg
IH0KIAotICAgIC8vIERvbid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0
aGV5IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICBpZiAoZXZ0LT5jaGFy
Q29kZSgpIDwgJyAnKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBnX2ZyZWUo
cGVuZGluZ1ByZWVkaXQpOworICAgICAgICAgICAgcGVuZGluZ1ByZWVkaXQgPSAwOwogCi0gICAg
Ly8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAotICAgIGlm
IChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0
IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVj
dGVkIGJlaGF2aW91cgorICAgICAgICAgICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPmlu
c2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2dCk7Ci19CisgICAgICAgICAgICAv
LyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmllciBpcyBwcmVzc2VkCisgICAgICAg
ICAgICBpZiAocGxhdGZvcm1FdmVudC0+Y3RybEtleSgpIHx8IHBsYXRmb3JtRXZlbnQtPmFsdEtl
eSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGhhbmRsZUVk
aXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KHBsYXRm
b3JtRXZlbnQtPnRleHQoKSwgZXZlbnQpKQorICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6
aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtNTM3LDEw
ICs1NzIsOSBAQCB2b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKICAgICAvLyBUT0RPOiBEaXNwYXRj
aCBJRS1jb21wYXRpYmxlIHRleHQgaW5wdXQgZXZlbnRzIGZvciBJTSBldmVudHMuCi0gICAgaWYg
KGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2LT5pbUNvbnRleHQsIGV2ZW50LT5r
ZXlFdmVudCgpLT5nZGtFdmVudEtleSgpKSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBtX3dlYlZpZXctPnByaXY7
CisgICAgZ3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHByaXYtPmltQ29udGV4dCwgZXZl
bnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCkpOwogfQogCiBFZGl0b3JDbGllbnQ6OkVkaXRv
ckNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39634</attachid>
            <date>2009-09-15 22:44:04 -0700</date>
            <delta_ts>2009-09-23 00:04:43 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>0001-Ensure-that-even-when-GTKSimpleIMContext-filters-non.patch</filename>
            <type>text/plain</type>
            <size>16958</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA1NzdmZmNlYmQ0OTE4YTIzOTEyNTQzYjliNDAxZTRiZWFiYjkwZTcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMTUgU2VwIDIwMDkgMjE6Mzg6MjUgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBFbnN1cmUgdGhhdCBldmVuIHdoZW4gR1RLU2ltcGxlSU1Db250ZXh0IGZpbHRl
cnMgbm9uLUlNRSBrZXlzdHJva2VzLCBrZXlib2FyZCBldmVudHMgYXJlIGZpcmVkIHByb3Blcmx5
LgoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDExICsrCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCAgICAgICAgICAgICAgfCAg
ICA4IC0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKysKIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcCAgICAgICAgICB8ICAg
IDQgKwogV2ViS2l0L2d0ay9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAy
MCArKysKIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCB8ICAy
MDkgKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAxNzEgaW5zZXJ0
aW9ucygrKSwgOTQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI1NzA4MmMuLmYzMTRmZTYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOS0xNSAgTWFydGluIFJvYmluc29uICA8bWFydGluLmph
bWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQgZmlsdGVyaW5nIGludGVyZmVyZXMg
d2l0aCBET00ga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjg3MzMKKworICAgICAgICBFbmFibGUgdGVzdHMgd2hpY2ggYXJlIG5vdyBw
YXNzaW5nIGJlY2F1c2Ugb2Yga2V5IGV2ZW50IGZpeGVzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1NraXBwZWQ6CisKIDIwMDktMDktMTUgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KIAogICAgICAgICBMYXlvdXQgdGVzdCBmaXguIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAppbmRleCA4ZGIyZWM1Li5lOGE3OTZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApA
QCAtMTYwNSwxMiArMTYwNSw2IEBAIGZhc3QvZXZlbnRzL2RibGNsaWNrLWFkZEV2ZW50TGlzdGVu
ZXIuaHRtbAogZmFzdC9ldmVudHMvZHJhZy1pbi1mcmFtZXMuaHRtbAogZmFzdC9ldmVudHMvZnJh
bWUtdGFiLWZvY3VzLmh0bWwKIGZhc3QvZXZlbnRzL2pzLWtleWJvYXJkLWV2ZW50LWNyZWF0aW9u
Lmh0bWwKLWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtYnV0dG9uLmh0bWwKLWZhc3Qv
ZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sCi1mYXN0L2V2ZW50cy9rZXlkb3du
LWtleXByZXNzLWZvY3VzLWNoYW5nZS5odG1sCi1mYXN0L2V2ZW50cy9rZXlkb3duLWtleXByZXNz
LXByZXZlbnREZWZhdWx0Lmh0bWwKLWZhc3QvZXZlbnRzL2tleXByZXNzLWZvY3VzLWNoYW5nZS5o
dG1sCi1mYXN0L2V2ZW50cy9rZXlwcmVzcy1pbnNlcnQtdGFiLmh0bWwKIGZhc3QvZXZlbnRzL21v
dXNlLWNsaWNrLWV2ZW50cy5odG1sCiBmYXN0L2V2ZW50cy9tb3VzZWNsaWNrLXRhcmdldC1hbmQt
cG9zaXRpb25pbmcuaHRtbAogZmFzdC9ldmVudHMvbW91c2V1cC1mcm9tLWJ1dHRvbjIuaHRtbApA
QCAtMTYyOSw3ICsxNjIzLDYgQEAgZmFzdC9ldmVudHMvcG9pbnRlci1ldmVudHMtMi5odG1sCiBm
YXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy1jbGljay1pbi1pZnJhbWUuaHRtbAogZmFzdC9ldmVu
dHMvcmlnaHQtY2xpY2stZm9jdXMuaHRtbAogZmFzdC9ldmVudHMvc2Nyb2xsYmFyLWRvdWJsZS1j
bGljay5odG1sCi1mYXN0L2V2ZW50cy9zcGVjaWFsLWtleS1ldmVudHMtaW4taW5wdXQtdGV4dC5o
dG1sCiBmYXN0L2V2ZW50cy9zdG9wLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItdXNpbmctZG9jdW1l
bnQtd3JpdGUuaHRtbAogZmFzdC9ldmVudHMvc3RvcC1sb2FkLWluLXVubG9hZC1oYW5kbGVyLXVz
aW5nLXdpbmRvdy1zdG9wLmh0bWwKIGZhc3QvZXZlbnRzL3RhYmluZGV4LWZvY3VzLWJsdXItYWxs
Lmh0bWwKQEAgLTU1ODIsNyArNTU3NSw2IEBAIGVkaXRpbmcvcGFzdGVib2FyZC9maWxlcy1kdXJp
bmctcGFnZS1kcmFncy5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi9leHRlbmQtc2VsZWN0aW9uLWFm
dGVyLWRvdWJsZS1jbGljay5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLXRvLW5hdmlnYXRlLmh0bWwK
IGZhc3QvZXZlbnRzL3ByZXZlbnQtZHJhZy10by1uYXZpZ2F0ZS5odG1sCi1mYXN0L2V2ZW50cy9r
ZXlkb3duLWZ1bmN0aW9uLWtleXMuaHRtbAogZmFzdC9mb3Jtcy9zbGlkZXItZGVsZXRlLXdoaWxl
LWRyYWdnaW5nLXRodW1iLmh0bWwKIGZhc3QvZXZlbnRzL3RhYi1mb2N1cy1hbmNob3IuaHRtbAog
aHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQuaHRtbApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YjE5ZmIxLi5k
ZmNhNTVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDA5LTA5LTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtYXJ0
aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEd0a0lNQ29udGV4dCBmaWx0ZXJpbmcgaW50ZXJm
ZXJlcyB3aXRoIERPTSBrZXkgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODczMworCisgICAgICAgIEdpdmUgR0RLX0JhY2tzcGFjZSBrZXkg
ZXZlbnRzIHRoZSBwcm9wZXIgdGV4dCBwcm9wZXJ0aWVzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisK
IDIwMDktMDktMTUgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvS2V5RXZlbnRHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3Bw
CmluZGV4IDU4NzU1NDcuLjQxODZjMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0tleUV2ZW50R3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5j
cHAKQEAgLTEzNiw2ICsxMzYsOCBAQCBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JHZGtL
ZXlDb2RlKGd1aW50IGtleUNvZGUpCiAgICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQg
REVMIGJlY29tZXMgVSswMDdGLgogICAgICAgICBjYXNlIEdES19EZWxldGU6CiAgICAgICAgICAg
ICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAg
ICAgIHJldHVybiAiVSswMDA4IjsKICAgICAgICAgY2FzZSBHREtfSVNPX0xlZnRfVGFiOgogICAg
ICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6CiAgICAgICAgIGNhc2UgR0RLX1RhYjoKQEAgLTUw
Myw2ICs1MDUsOCBAQCBzdGF0aWMgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhndWludCB2
YWwpCiAgICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgogICAgICAgICBjYXNlIEdES19SZXR1cm46
CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJcciIpOworICAgICAgICBjYXNlIEdES19CYWNr
U3BhY2U6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJceDgiKTsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGd1bmljaGFyIGMgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUodmFsKTsK
ICAgICAgICAgICAgIGdsb25nIG53YzsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggZWEzYzBjMi4uODYzYmM0NSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAwOS0wOS0xNSAgTWFydGluIFJvYmluc29uICA8bWFydGluLmphbWVzLnJv
Ymluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQgZmlsdGVyaW5nIGludGVyZmVyZXMgd2l0aCBE
T00ga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjg3MzMKKworICAgICAgICBFbnN1cmUgdGhhdCBldmVuIHdoZW4gR1RLU2ltcGxlSU1D
b250ZXh0IGZpbHRlcnMgbm9uLUlNRSBrZXlzdHJva2VzLAorICAgICAgICBrZXlib2FyZCBldmVu
dHMgYXJlIGZpcmVkIHByb3Blcmx5LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6aW1Db250ZXh0Q29tbWl0dGVkKToKKyAg
ICAgICAgKFdlYktpdDo6aW1Db250ZXh0UHJlZWRpdENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkVk
aXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OmludGVycHJl
dEVkaXRvckNvbW1hbmRLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmhhbmRsZUNhcmV0QnJv
d3NpbmdLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5kbGVJ
bnB1dE1ldGhvZEtleWRvd24pOgorCiAyMDA5LTA5LTE0ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEg
IDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFhhbiBMb3BleiBhbmQgSmFuIEFsb256by4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCA3MWE3YzFhLi4wNGY2ZDRkIDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCkBAIC00OSwzOSArNDksMjIg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0
aWMgZ2NoYXIqIHBlbmRpbmdDb21wb3NpdGlvbiA9IDA7CitzdGF0aWMgZ2NoYXIqIHBlbmRpbmdQ
cmVlZGl0ID0gMDsKKwogc3RhdGljIHZvaWQgaW1Db250ZXh0Q29tbWl0dGVkKEd0a0lNQ29udGV4
dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIHN0ciwgRWRpdG9yQ2xpZW50KiBjbGllbnQpCiB7Ci0g
ICAgRnJhbWUqIHRhcmdldEZyYW1lID0gY29yZShjbGllbnQtPm1fd2ViVmlldyktPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLQotICAgIGlmICghdGFyZ2V0RnJhbWUg
fHwgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBFZGl0b3IqIGVkaXRvciA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKTsKLQotICAgIFN0cmlu
ZyBjb21taXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgZWRpdG9yLT5jb25m
aXJtQ29tcG9zaXRpb24oY29tbWl0U3RyaW5nKTsKKyAgICAvLyBUaGlzIHNpZ25hbCB3aWxsIGZp
cmUgZHVyaW5nIGEga2V5ZG93biBldmVudC4gV2Ugd2FudCB0byB0aGUgY29udGVudHMgb2YgdGhl
CisgICAgLy8gZmllbGQgdG8gY2hhbmdlIHJpZ2h0IGJlZm9yZSB0aGUga2V5dXAgZXZlbnQsIHNv
IHdlIHdhaXQgdW50aWwgdGhlbiB0byBhY3R1YWxseQorICAgIC8vIGNvbW1pdCB0aGlzIGNvbXBv
c2l0aW9uLiAKKyAgICBwZW5kaW5nQ29tcG9zaXRpb24gPSBnX3N0cmR1cChzdHIpOwogfQogCiBz
dGF0aWMgdm9pZCBpbUNvbnRleHRQcmVlZGl0Q2hhbmdlZChHdGtJTUNvbnRleHQqIGNvbnRleHQs
IEVkaXRvckNsaWVudCogY2xpZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoY2xpZW50
LT5tX3dlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7Ci0KLSAgICBnY2hhciogcHJlZWRp
dCA9IE5VTEw7Ci0gICAgZ2ludCBjdXJzb3JQb3MgPSAwOwogICAgIC8vIFdlIGlnbm9yZSB0aGUg
cHJvdmlkZWQgUGFuZ29BdHRyTGlzdCBmb3Igbm93LgotICAgIGd0a19pbV9jb250ZXh0X2dldF9w
cmVlZGl0X3N0cmluZyhjb250ZXh0LCAmcHJlZWRpdCwgTlVMTCwgJmN1cnNvclBvcyk7Ci0gICAg
U3RyaW5nIHByZWVkaXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHByZWVkaXQpOwotICAgIGdf
ZnJlZShwcmVlZGl0KTsKLQotICAgIC8vIHNldENvbXBvc2l0aW9uKCkgd2lsbCByZXBsYWNlIHRo
ZSB1c2VyIHNlbGVjdGlvbiBpZiBwYXNzZWQgYW4gZW1wdHkKLSAgICAvLyBwcmVlZGl0LiBXZSBk
b24ndCB3YW50IHRoaXMgdG8gaGFwcGVuLgotICAgIGlmIChwcmVlZGl0U3RyaW5nLmlzRW1wdHko
KSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBW
ZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7Ci0gICAgdW5kZXJsaW5lcy5h
cHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoMCwgcHJlZWRpdFN0cmluZy5sZW5ndGgoKSwgQ29s
b3IoMCwgMCwgMCksIGZhbHNlKSk7Ci0gICAgZWRpdG9yLT5zZXRDb21wb3NpdGlvbihwcmVlZGl0
U3RyaW5nLCB1bmRlcmxpbmVzLCBjdXJzb3JQb3MsIDApOworICAgIGdpbnQgY3Vyc29yUG9zID0g
MDsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcoY29udGV4dCwgJnBlbmRp
bmdQcmVlZGl0LCBOVUxMLCAmY3Vyc29yUG9zKTsKIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OnNl
dElucHV0TWV0aG9kU3RhdGUoYm9vbCBhY3RpdmUpCkBAIC0xMzYsMTIgKzExOSwyMiBAQCBpbnQg
RWRpdG9yQ2xpZW50OjpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpCiAKIGJvb2wgRWRpdG9yQ2xp
ZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViQ29yZTo6UmFuZ2UqKQogeworICAgIGdfZnJlZShw
ZW5kaW5nQ29tcG9zaXRpb24pOworICAgIHBlbmRpbmdDb21wb3NpdGlvbiA9IDA7CisgICAgZ19m
cmVlKHBlbmRpbmdQcmVlZGl0KTsKKyAgICBwZW5kaW5nUHJlZWRpdCA9IDA7CisKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEVkaXRvckNsaWVudDo6
c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCiB7CisgICAgZ19mcmVlKHBlbmRpbmdD
b21wb3NpdGlvbik7CisgICAgcGVuZGluZ0NvbXBvc2l0aW9uID0gMDsKKyAgICBnX2ZyZWUocGVu
ZGluZ1ByZWVkaXQpOworICAgIHBlbmRpbmdQcmVlZGl0ID0gMDsKKwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MjEsNyArNDE0LDcgQEAgc3RhdGljIGNv
bnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CiAgICAgeyAnXHInLCAgIEFs
dEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciogaW50ZXJwcmV0S2V5RXZlbnQoY29u
c3QgS2V5Ym9hcmRFdmVudCogZXZ0KQorc3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEVkaXRv
ckNvbW1hbmRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCiB7CiAgICAgQVNTRVJU
KGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgZXZ0LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCkBAIC00NTYsNzQgKzQ0OSwxMjAgQEAg
c3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQq
IGV2dCkKICAgICByZXR1cm4gbWFwS2V5ID8ga2V5UHJlc3NDb21tYW5kc01hcC0+Z2V0KG1hcEtl
eSkgOiAwOwogfQogCi1zdGF0aWMgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KiBldnQpCitzdGF0aWMgYm9vbCBoYW5kbGVDYXJldEJyb3dzaW5nS2V5Ym9hcmRF
dmVudChGcmFtZSogZnJhbWUsIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQp
Cit7CisgICAgc3dpdGNoIChrZXlFdmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAg
ICAgICAgY2FzZSBWS19MRUZUOgorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBT
ZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25D
b250cm9sbGVyOjpMRUZULAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgp
ID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAgICAg
ICAgICAgIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVktf
UklHSFQ6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+
c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJ
R0hULAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51
bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVktfVVA6CisgICAgICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisg
ICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELAorICAgICAg
ICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkg
OiBMaW5lR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVktfRE9XTjoKKyAgICAgICAgICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAg
ICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwKKyAgICAgICAgICAgICAgICAg
ICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51
bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3Qg
YSBjYXJldCBicm93c3dpbmcga2V5c3Ryb2tlLCBzbyBjb250aW51ZSBwcm9jZXNzaW5nLgorICAg
IH0KK30KKwordm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRF
dmVudCogZXZlbnQpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgpOwogICAgIEFTU0VS
VChub2RlKTsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwog
ICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtl
eUV2ZW50ID0gZXZ0LT5rZXlFdmVudCgpOwotICAgIGlmICgha2V5RXZlbnQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3JtRXZl
bnQgPSBldmVudC0+a2V5RXZlbnQoKTsKKyAgICBpZiAoIXBsYXRmb3JtRXZlbnQpCisgICAgICAg
IHJldHVybjsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IGZyYW1lLT5zZXR0aW5ncygpLT5j
YXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmIChjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAg
IHN3aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBT
ZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlcjo6TEVGVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5j
dHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxh
cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAgICAgICAgICBmcmFt
ZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6
IExpbmVHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBWS19ET1dOOgotICAgICAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgp
ID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9W
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldBUkQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICB0
cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGlmIChj
YXJldEJyb3dzaW5nICYmIGhhbmRsZUNhcmV0QnJvd3NpbmdLZXlib2FyZEV2ZW50KGZyYW1lLCBw
bGF0Zm9ybUV2ZW50KSkgeworICAgICAgICAvLyBUaGlzIHdhcyBhIGNhcmV0IGJyb3dzaW5nIGtl
eSBldmVudCwgc28gcHJldmVudCBpdCBmcm9tIGJ1YmJsaW5nIHVwIHRvIHRoZSBET00uCisgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQo
aW50ZXJwcmV0S2V5RXZlbnQoZXZ0KSk7CisgICAgLy8gRG9uJ3QgYWxsb3cgZWRpdG9yIGNvbW1h
bmRzIG9yIHRleHQgaW5zZXJ0aW9uIGZvciBub2RlcyB0aGF0IGNhbm5vdCBlZGl0LgorICAgIGlm
ICghZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChrZXlFdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bikg
ewotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91
dCBtb2RlIHRvIGRlY2lkZSBob3cgY29tbWFuZHMgdGhhdCBqdXN0IGluc2VydCB0ZXh0IGlmIGV4
ZWN1dGVkIHZpYSBFZGl0b3Igc2hvdWxkIGJlIHRyZWF0ZWQsCi0gICAgICAgIC8vIHNvIHdlIGxl
YXZlIGl0IHVwb24gV2ViQ29yZSB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUu
Zy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2Vu
ZXJhdGVkCi0gICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVy
LCBvciBFbnRlcikuCi0gICAgICAgIHJldHVybiAhY29tbWFuZC5pc1RleHRJbnNlcnRpb24oKSAm
JiBjb21tYW5kLmV4ZWN1dGUoZXZ0KTsKKyAgICBjb25zdCBnY2hhciogZWRpdG9yQ29tbWFuZFN0
cmluZyA9IGludGVycHJldEVkaXRvckNvbW1hbmRLZXlFdmVudChldmVudCk7CisgICAgaWYgKGVk
aXRvckNvbW1hbmRTdHJpbmcpCisgICAgeworICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFu
ZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChlZGl0b3JDb21tYW5kU3RyaW5nKTsKKworICAg
ICAgICAvLyBPbiBlZGl0b3IgY29tbWFuZHMgZnJvbSBrZXkgZG93biBldmVudHMsIHdlIG9ubHkg
d2FudCB0byBsZXQgdGhlIGV2ZW50IGJ1YmJsZSB1cCB0bworICAgICAgICAvLyB0aGUgRE9NIGlm
IGl0IGluc2VydHMgdGV4dC4gSWYgaXQgZG9lc24ndCBpbnNlcnQgdGV4dCAoZS5nLiBUYWIgdGhh
dCBjaGFuZ2VzIGZvY3VzKQorICAgICAgICAvLyB3ZSBqdXN0IHdhbnQgV2ViS2l0IHRvIGhhbmRs
ZSBpdCBpbW1lZGlhdGVseSB3aXRob3V0IGEgRE9NIGV2ZW50LgorICAgICAgICBpZiAocGxhdGZv
cm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bikgewor
ICAgICAgICAgICAgaWYgKCFjb21tYW5kLmlzVGV4dEluc2VydGlvbigpICYmIGNvbW1hbmQuZXhl
Y3V0ZShldmVudCkpCisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLmV4ZWN1
dGUoZXZlbnQpKSB7CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjb21tYW5kLmV4
ZWN1dGUoZXZ0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gVGhpcyBpcyBqdXN0IGEg
bm9ybWFsIHRleHQgaW5zZXJ0aW9uLCBzbyB3YWl0IHRvIGV4ZWN1dGUgdGhlIGluc2VydGlvbgor
ICAgIC8vIHVudGlsIGEga2V5dXAgZXZlbnQgaGFwcGVucy4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0
IHRoZSBpbnNlcnRpb24gd2lsbCBub3QKKyAgICAvLyBiZSByZWZsZWN0ZWQgaW4gdGhlIGNvbnRl
bnRzIG9mIHRoZSBmaWVsZCB1bnRpbCB0aGUga2V5dXAgRE9NIGV2ZW50LgorICAgIGlmIChldmVu
dC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKworICAgICAgICBpZiAo
cGVuZGluZ0NvbXBvc2l0aW9uKSB7CisgICAgICAgICAgICBTdHJpbmcgY29tcG9zaXRpb25TdHJp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KHBlbmRpbmdDb21wb3NpdGlvbik7CisgICAgICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7CisK
KyAgICAgICAgICAgIGdfZnJlZShwZW5kaW5nQ29tcG9zaXRpb24pOworICAgICAgICAgICAgcGVu
ZGluZ0NvbXBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIGdfZnJlZShwZW5kaW5nUHJlZWRpdCk7
CisgICAgICAgICAgICBwZW5kaW5nUHJlZWRpdCA9IDA7CisKKyAgICAgICAgfSBlbHNlIGlmIChw
ZW5kaW5nUHJlZWRpdCkgeworICAgICAgICAgICAgU3RyaW5nIHByZWVkaXRTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KHBlbmRpbmdQcmVlZGl0KTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgdXNl
IGFuIGVtcHR5IHByZWVkaXQgYXMgaXQgd2lsbCBkZXN0cm95IHRoZSBjdXJyZW50CisgICAgICAg
ICAgICAvLyBzZWxlY3Rpb24sIGV2ZW4gaWYgdGhlIGNvbXBvc2l0aW9uIGlzIGNhbmNlbGxlZCBv
ciBmYWlscyBsYXRlciBvbi4KKyAgICAgICAgICAgIGlmICghcHJlZWRpdFN0cmluZy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVy
bGluZXM7CisgICAgICAgICAgICAgICAgdW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRl
cmxpbmUoMCwgcHJlZWRpdFN0cmluZy5sZW5ndGgoKSwgQ29sb3IoMCwgMCwgMCksIGZhbHNlKSk7
CisgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbihwcmVlZGl0
U3RyaW5nLCB1bmRlcmxpbmVzLCAwLCAwKTsKKyAgICAgICAgICAgIH0KIAotICAgIC8vIERvbid0
IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQgaW4g
dW5leHBlY3RlZCBiZWhhdmlvdXIKLSAgICBpZiAoZXZ0LT5jaGFyQ29kZSgpIDwgJyAnKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBnX2ZyZWUocGVuZGluZ1ByZWVkaXQpOwor
ICAgICAgICAgICAgcGVuZGluZ1ByZWVkaXQgPSAwOwogCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IGFu
eXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAotICAgIGlmIChrZXlFdmVudC0+Y3RybEtl
eSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBj
aGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAg
ICAgICAgICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlF
dmVudCgpLT50ZXh0KCksIGV2dCk7Ci19CisgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgYW55
dGhpbmcgaWYgYSBtb2RpZmllciBpcyBwcmVzc2VkCisgICAgICAgICAgICBpZiAocGxhdGZvcm1F
dmVudC0+Y3RybEtleSgpIHx8IHBsYXRmb3JtRXZlbnQtPmFsdEtleSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5
Ym9hcmRFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50
KGV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KHBsYXRmb3JtRXZlbnQtPnRleHQoKSwg
ZXZlbnQpKQorICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
ICAgICB9CisgICAgfQogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RL
ZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQpAQCAtNTMzLDkgKzU3Miw3IEBAIHZvaWQgRWRp
dG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gbV93
ZWJWaWV3LT5wcml2OwotICAgIC8vIFRPRE86IERpc3BhdGNoIElFLWNvbXBhdGlibGUgdGV4dCBp
bnB1dCBldmVudHMgZm9yIElNIGV2ZW50cy4KLSAgICBpZiAoZ3RrX2ltX2NvbnRleHRfZmlsdGVy
X2tleXByZXNzKHByaXYtPmltQ29udGV4dCwgZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5
KCkpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICBndGtfaW1fY29u
dGV4dF9maWx0ZXJfa2V5cHJlc3MocHJpdi0+aW1Db250ZXh0LCBldmVudC0+a2V5RXZlbnQoKS0+
Z2RrRXZlbnRLZXkoKSk7CiB9CiAKIEVkaXRvckNsaWVudDo6RWRpdG9yQ2xpZW50KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="20741"
          type_id="1"
          status="-"
          setter="xan.lopez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39977</attachid>
            <date>2009-09-23 00:04:43 -0700</date>
            <delta_ts>2009-09-23 12:04:38 -0700</delta_ts>
            <desc>Updated patch (rev2)</desc>
            <filename>0001-Fixes-for-IME-handling-in-Gtk.patch</filename>
            <type>text/plain</type>
            <size>16833</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBlNDcyMTNmM2QyNGU5ZmI1NDIxYzlmMmZkNzNlNDZkMDJiNjNiZjM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjIgU2VwIDIwMDkgMjM6MzQ6MjcgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBGaXhlcyBmb3IgSU1FIGhhbmRsaW5nIGluIEd0ay4KCi0tLQogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKwogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgICAgICAgICAgICAgIHwgICAgNyAtCiBXZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsrCiBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAgICAgICAgICAgfCAgICA0ICsKIFdlYktpdC9ndGsv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKysrCiBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAgfCAgMTk3ICsrKysrKysrKysrKysr
Ky0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMTY4IGluc2VydGlvbnMoKyksIDg4IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCBiOTY4YTJkLi4xMGRiNDQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMDktMDktMjIgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0dUS10gR3RrSU1Db250ZXh0IGZpbHRlcmluZyBpbnRlcmZlcmVzIHdpdGggRE9NIGtleSBldmVu
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzMz
CisKKyAgICAgICAgRW5hYmxlIHRlc3RzIHdoaWNoIGFyZSBub3cgcGFzc2luZyBiZWNhdXNlIG9m
IGtleSBldmVudCBmaXhlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOgorCiAy
MDA5LTA5LTIyICBDaGFybGVzIFdlaSAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBw
ZWQKaW5kZXggZTNjYmE0OS4uMTA2ODQzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAg
LTE2MDYsMTEgKzE2MDYsNiBAQCBmYXN0L2V2ZW50cy9kYmxjbGljay1hZGRFdmVudExpc3RlbmVy
Lmh0bWwKIGZhc3QvZXZlbnRzL2RyYWctaW4tZnJhbWVzLmh0bWwKIGZhc3QvZXZlbnRzL2ZyYW1l
LXRhYi1mb2N1cy5odG1sCiBmYXN0L2V2ZW50cy9qcy1rZXlib2FyZC1ldmVudC1jcmVhdGlvbi5o
dG1sCi1mYXN0L2V2ZW50cy9rZXktZXZlbnRzLWluLWlucHV0LWJ1dHRvbi5odG1sCi1mYXN0L2V2
ZW50cy9rZXktZXZlbnRzLWluLWlucHV0LXRleHQuaHRtbAotZmFzdC9ldmVudHMva2V5ZG93bi1r
ZXlwcmVzcy1mb2N1cy1jaGFuZ2UuaHRtbAotZmFzdC9ldmVudHMva2V5ZG93bi1rZXlwcmVzcy1w
cmV2ZW50RGVmYXVsdC5odG1sCi1mYXN0L2V2ZW50cy9rZXlwcmVzcy1mb2N1cy1jaGFuZ2UuaHRt
bAogZmFzdC9ldmVudHMva2V5cHJlc3MtaW5zZXJ0LXRhYi5odG1sCiBmYXN0L2V2ZW50cy9tb3Vz
ZS1jbGljay1ldmVudHMuaHRtbAogZmFzdC9ldmVudHMvbW91c2VjbGljay10YXJnZXQtYW5kLXBv
c2l0aW9uaW5nLmh0bWwKQEAgLTE2MzAsNyArMTYyNSw2IEBAIGZhc3QvZXZlbnRzL3BvaW50ZXIt
ZXZlbnRzLTIuaHRtbAogZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tpbmctY2xpY2staW4taWZyYW1l
Lmh0bWwKIGZhc3QvZXZlbnRzL3JpZ2h0LWNsaWNrLWZvY3VzLmh0bWwKIGZhc3QvZXZlbnRzL3Nj
cm9sbGJhci1kb3VibGUtY2xpY2suaHRtbAotZmFzdC9ldmVudHMvc3BlY2lhbC1rZXktZXZlbnRz
LWluLWlucHV0LXRleHQuaHRtbAogZmFzdC9ldmVudHMvc3RvcC1sb2FkLWluLXVubG9hZC1oYW5k
bGVyLXVzaW5nLWRvY3VtZW50LXdyaXRlLmh0bWwKIGZhc3QvZXZlbnRzL3N0b3AtbG9hZC1pbi11
bmxvYWQtaGFuZGxlci11c2luZy13aW5kb3ctc3RvcC5odG1sCiBmYXN0L2V2ZW50cy90YWJpbmRl
eC1mb2N1cy1ibHVyLWFsbC5odG1sCkBAIC01NTgzLDcgKzU1NzcsNiBAQCBlZGl0aW5nL3Bhc3Rl
Ym9hcmQvZmlsZXMtZHVyaW5nLXBhZ2UtZHJhZ3MuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vZXh0
ZW5kLXNlbGVjdGlvbi1hZnRlci1kb3VibGUtY2xpY2suaHRtbAogZmFzdC9ldmVudHMvZHJhZy10
by1uYXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRt
bAotZmFzdC9ldmVudHMva2V5ZG93bi1mdW5jdGlvbi1rZXlzLmh0bWwKIGZhc3QvZm9ybXMvc2xp
ZGVyLWRlbGV0ZS13aGlsZS1kcmFnZ2luZy10aHVtYi5odG1sCiBmYXN0L2V2ZW50cy90YWItZm9j
dXMtYW5jaG9yLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50
Lmh0bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggOWVlOGIwNC4uNGQxMDg4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wOS0yMiAgTWFydGlu
IFJvYmluc29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQg
ZmlsdGVyaW5nIGludGVyZmVyZXMgd2l0aCBET00ga2V5IGV2ZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg3MzMKKworICAgICAgICBHaXZlIEdE
S19CYWNrc3BhY2Uga2V5IGV2ZW50cyB0aGUgcHJvcGVyIHRleHQgcHJvcGVydGllcy4KKworICAg
ICAgICBJbnN0ZWFkIG9mIGFkZGluZyBuZXcgdGVzdHMsIHRoaXMgY2hhbmdlIHJlbW92ZXMgZXhp
c3RpbmcgdGVzdHMKKyAgICAgICAgZnJvbSBHdGsncyBza2lwcGVkIGxpc3QuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6a2V5SWRl
bnRpZmllckZvckdka0tleUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6c2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKToKKwogMjAwOS0wOS0yMiAgQ2hhcmxlcyBXZWkgIDxjaGFybGVzLndlaUB0b3JjaG1v
YmlsZS5jb20uY24+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKaW5kZXggNTg3NTU0Ny4uNDE4NmMyZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcApAQCAtMTM2LDYgKzEzNiw4IEBAIHN0YXRpYyBTdHJp
bmcga2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoZ3VpbnQga2V5Q29kZSkKICAgICAgICAgICAg
IC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwN0YuCiAgICAgICAgIGNhc2Ug
R0RLX0RlbGV0ZToKICAgICAgICAgICAgIHJldHVybiAiVSswMDdGIjsKKyAgICAgICAgY2FzZSBH
REtfQmFja1NwYWNlOgorICAgICAgICAgICAgcmV0dXJuICJVKzAwMDgiOwogICAgICAgICBjYXNl
IEdES19JU09fTGVmdF9UYWI6CiAgICAgICAgIGNhc2UgR0RLXzMyNzBfQmFja1RhYjoKICAgICAg
ICAgY2FzZSBHREtfVGFiOgpAQCAtNTAzLDYgKzUwNSw4IEBAIHN0YXRpYyBTdHJpbmcgc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGd1aW50IHZhbCkKICAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6CiAg
ICAgICAgIGNhc2UgR0RLX1JldHVybjoKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIlxyIik7
CisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
Ilx4OCIpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZ3VuaWNoYXIgYyA9IGdka19r
ZXl2YWxfdG9fdW5pY29kZSh2YWwpOwogICAgICAgICAgICAgZ2xvbmcgbndjOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA5Y2Jm
NDMwLi4yYWJmN2M4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDA5LTA5LTIyICBNYXJ0aW4gUm9i
aW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEd0a0lNQ29udGV4dCBmaWx0
ZXJpbmcgaW50ZXJmZXJlcyB3aXRoIERPTSBrZXkgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODczMworCisgICAgICAgIEVuc3VyZSB0aGF0
IGV2ZW4gd2hlbiBHVEtTaW1wbGVJTUNvbnRleHQgZmlsdGVycyBub24tSU1FIGtleXN0cm9rZXMs
CisgICAgICAgIGtleWJvYXJkIGV2ZW50cyBhcmUgZmlyZWQgcHJvcGVybHkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpj
bGVhclBlbmRpbmdJTURhdGEpOgorICAgICAgICAoV2ViS2l0OjppbUNvbnRleHRDb21taXR0ZWQp
OgorICAgICAgICAoV2ViS2l0OjppbUNvbnRleHRQcmVlZGl0Q2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6aW50
ZXJwcmV0RWRpdG9yQ29tbWFuZEtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6aGFuZGxlQ2Fy
ZXRCcm93c2luZ0tleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6
OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6Omhh
bmRsZUlucHV0TWV0aG9kS2V5ZG93bik6CisKIDIwMDktMDktMjIgIFhhbiBMb3BleiAgPHhsb3Bl
ekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbiBBbG9uem8uCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAgYi9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKaW5kZXggNzFhN2MxYS4u
ZDEwODM0YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGll
bnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3Rr
LmNwcApAQCAtNDksMzkgKzQ5LDMxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIGdjaGFyKiBwZW5kaW5nQ29tcG9zaXRpb24gPSAwOwor
c3RhdGljIGdjaGFyKiBwZW5kaW5nUHJlZWRpdCA9IDA7CisKK3N0YXRpYyB2b2lkIGNsZWFyUGVu
ZGluZ0lNRGF0YSgpCit7CisgICAgZ19mcmVlKHBlbmRpbmdDb21wb3NpdGlvbik7CisgICAgcGVu
ZGluZ0NvbXBvc2l0aW9uID0gMDsKKyAgICBnX2ZyZWUocGVuZGluZ1ByZWVkaXQpOworICAgIHBl
bmRpbmdQcmVlZGl0ID0gMDsKK30KIHN0YXRpYyB2b2lkIGltQ29udGV4dENvbW1pdHRlZChHdGtJ
TUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGdjaGFyKiBzdHIsIEVkaXRvckNsaWVudCogY2xpZW50
KQogewotICAgIEZyYW1lKiB0YXJnZXRGcmFtZSA9IGNvcmUoY2xpZW50LT5tX3dlYlZpZXcpLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNTRVJUKCFwZW5k
aW5nQ29tcG9zaXRpb24pOwogCi0gICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUt
PmVkaXRvcigpLT5jYW5FZGl0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVkaXRvciogZWRp
dG9yID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpOwotCi0gICAgU3RyaW5nIGNvbW1pdFN0cmluZyA9
IFN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihj
b21taXRTdHJpbmcpOworICAgIC8vIFRoaXMgc2lnbmFsIHdpbGwgZmlyZSBkdXJpbmcgYSBrZXlk
b3duIGV2ZW50LiBXZSB3YW50IHRoZSBjb250ZW50cyBvZiB0aGUKKyAgICAvLyBmaWVsZCB0byBj
aGFuZ2UgcmlnaHQgYmVmb3JlIHRoZSBrZXl1cCBldmVudCwgc28gd2Ugd2FpdCB1bnRpbCB0aGVu
IHRvIGFjdHVhbGx5CisgICAgLy8gY29tbWl0IHRoaXMgY29tcG9zaXRpb24uCisgICAgcGVuZGlu
Z0NvbXBvc2l0aW9uID0gZ19zdHJkdXAoc3RyKTsKIH0KIAogc3RhdGljIHZvaWQgaW1Db250ZXh0
UHJlZWRpdENoYW5nZWQoR3RrSU1Db250ZXh0KiBjb250ZXh0LCBFZGl0b3JDbGllbnQqIGNsaWVu
dCkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKGNsaWVudC0+bV93ZWJWaWV3KS0+Zm9jdXND
b250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIEVkaXRvciogZWRpdG9yID0g
ZnJhbWUtPmVkaXRvcigpOwotCi0gICAgZ2NoYXIqIHByZWVkaXQgPSBOVUxMOwotICAgIGdpbnQg
Y3Vyc29yUG9zID0gMDsKICAgICAvLyBXZSBpZ25vcmUgdGhlIHByb3ZpZGVkIFBhbmdvQXR0ckxp
c3QgZm9yIG5vdy4KLSAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcoY29udGV4
dCwgJnByZWVkaXQsIE5VTEwsICZjdXJzb3JQb3MpOwotICAgIFN0cmluZyBwcmVlZGl0U3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChwcmVlZGl0KTsKLSAgICBnX2ZyZWUocHJlZWRpdCk7Ci0KLSAg
ICAvLyBzZXRDb21wb3NpdGlvbigpIHdpbGwgcmVwbGFjZSB0aGUgdXNlciBzZWxlY3Rpb24gaWYg
cGFzc2VkIGFuIGVtcHR5Ci0gICAgLy8gcHJlZWRpdC4gV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGhh
cHBlbi4KLSAgICBpZiAocHJlZWRpdFN0cmluZy5pc0VtcHR5KCkgJiYgIWVkaXRvci0+aGFzQ29t
cG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPENvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzOwotICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5k
ZXJsaW5lKDAsIHByZWVkaXRTdHJpbmcubGVuZ3RoKCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkp
OwotICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywg
Y3Vyc29yUG9zLCAwKTsKKyAgICBndGtfaW1fY29udGV4dF9nZXRfcHJlZWRpdF9zdHJpbmcoY29u
dGV4dCwgJnBlbmRpbmdQcmVlZGl0LCBOVUxMLCBOVUxMKTsKKyAgICBBU1NFUlQocGVuZGluZ1By
ZWVkaXQpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShib29s
IGFjdGl2ZSkKQEAgLTEzNiwxMiArMTI4LDE2IEBAIGludCBFZGl0b3JDbGllbnQ6OnNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCkKIAogYm9vbCBFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGlu
ZyhXZWJDb3JlOjpSYW5nZSopCiB7CisgICAgY2xlYXJQZW5kaW5nSU1EYXRhKCk7CisKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEVkaXRvckNsaWVu
dDo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCiB7CisgICAgY2xlYXJQZW5kaW5n
SU1EYXRhKCk7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtNDIxLDcgKzQxNyw3IEBAIHN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNzRW50
cmllc1tdID0gewogICAgIHsgJ1xyJywgICBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXds
aW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogfTsKIAotc3RhdGljIGNvbnN0
IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKK3N0YXRp
YyBjb25zdCBjaGFyKiBpbnRlcnByZXRFZGl0b3JDb21tYW5kS2V5RXZlbnQoY29uc3QgS2V5Ym9h
cmRFdmVudCogZXZ0KQogewogICAgIEFTU0VSVChldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
a2V5ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50
KTsKIApAQCAtNDU2LDc0ICs0NTIsMTE1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRL
ZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCiAgICAgcmV0dXJuIG1hcEtleSA/IGtl
eVByZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKIH0KIAotc3RhdGljIGJvb2wgaGFu
ZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZ0KQorc3RhdGljIGJvb2wg
aGFuZGxlQ2FyZXRCcm93c2luZ0tleWJvYXJkRXZlbnQoRnJhbWUqIGZyYW1lLCBjb25zdCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KQoreworICAgIHN3aXRjaCAoa2V5RXZlbnQtPndp
bmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKKyAg
ICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6TEVGVCwKKyAgICAgICAgICAg
ICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3Rl
ckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFZLX1JJR0hUOgorICAgICAgICAgICAgZnJhbWUtPnNl
bGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9s
bGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAg
ICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwKKyAgICAgICAgICAgICAgICAgICAga2V5
RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5
LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIFZLX1VQOgorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2Rp
Znkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBT
ZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25D
b250cm9sbGVyOjpCQUNLV0FSRCwKKyAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxL
ZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5LAorICAgICAgICAg
ICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IFZLX0RPV046CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVu
dC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNv
bnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkZPUldBUkQsCisgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJh
Z3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKKyAgICAgICAgICAgICAgICAgICAg
dHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGEgY2FyZXQgYnJvd3N3aW5nIGtleXN0cm9rZSwg
c28gY29udGludWUgcHJvY2Vzc2luZy4KKyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yQ2xpZW50Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIE5vZGUqIG5v
ZGUgPSBldnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gZXZlbnQtPnRh
cmdldCgpLT50b05vZGUoKTsKICAgICBBU1NFUlQobm9kZSk7CiAgICAgRnJhbWUqIGZyYW1lID0g
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwogCi0gICAgY29u
c3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlFdmVudCA9IGV2dC0+a2V5RXZlbnQoKTsKLSAg
ICBpZiAoIWtleUV2ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgUGxhdGZv
cm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CisgICAg
aWYgKCFwbGF0Zm9ybUV2ZW50KQorICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNhcmV0QnJv
d3NpbmcgPSBmcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBp
ZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBzd2l0Y2ggKGtleUV2ZW50LT53aW5kb3dzVmly
dHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBWS19MRUZUOgotICAgICAgICAgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDog
Q2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6Ci0g
ICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0
S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6UklH
SFQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gV29yZEdy
YW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2Ug
VktfVVA6Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZl
bnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25D
b250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJv
bGxlcjo6QkFDS1dBUkQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtl
eSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIGNhc2UgVktfRE9XTjoKLSAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVO
RCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICBT
ZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAotICAgICAgICAgICAgICAgICAgICAgICAga2V5
RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdyYW51bGFyaXR5
LAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KKyAgICBpZiAoY2FyZXRCcm93c2luZyAmJiBoYW5kbGVDYXJldEJy
b3dzaW5nS2V5Ym9hcmRFdmVudChmcmFtZSwgcGxhdGZvcm1FdmVudCkpIHsKKyAgICAgICAgLy8g
VGhpcyB3YXMgYSBjYXJldCBicm93c2luZyBrZXkgZXZlbnQsIHNvIHByZXZlbnQgaXQgZnJvbSBi
dWJibGluZyB1cCB0byB0aGUgRE9NLgorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5k
ID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGludGVycHJldEtleUV2ZW50KGV2dCkpOworICAg
IC8vIERvbid0IGFsbG93IGVkaXRvciBjb21tYW5kcyBvciB0ZXh0IGluc2VydGlvbiBmb3Igbm9k
ZXMgdGhhdCBjYW5ub3QgZWRpdC4KKyAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgp
KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoa2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IGNvbW1hbmRz
IHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2aWEgRWRpdG9yIHNob3VsZCBiZSB0
cmVhdGVkLAotICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUgdG8gZWl0aGVy
IGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9y
IGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAotICAgICAgICAvLyAoZS5nLiBUYWIg
dGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgotICAgICAgICByZXR1cm4g
IWNvbW1hbmQuaXNUZXh0SW5zZXJ0aW9uKCkgJiYgY29tbWFuZC5leGVjdXRlKGV2dCk7CisgICAg
Y29uc3QgZ2NoYXIqIGVkaXRvckNvbW1hbmRTdHJpbmcgPSBpbnRlcnByZXRFZGl0b3JDb21tYW5k
S2V5RXZlbnQoZXZlbnQpOworICAgIGlmIChlZGl0b3JDb21tYW5kU3RyaW5nKSB7CisgICAgICAg
IEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGVkaXRv
ckNvbW1hbmRTdHJpbmcpOworCisgICAgICAgIC8vIE9uIGVkaXRvciBjb21tYW5kcyBmcm9tIGtl
eSBkb3duIGV2ZW50cywgd2Ugb25seSB3YW50IHRvIGxldCB0aGUgZXZlbnQgYnViYmxlIHVwIHRv
CisgICAgICAgIC8vIHRoZSBET00gaWYgaXQgaW5zZXJ0cyB0ZXh0LiBJZiBpdCBkb2Vzbid0IGlu
c2VydCB0ZXh0IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpCisgICAgICAgIC8vIHdlIGp1
c3Qgd2FudCBXZWJLaXQgdG8gaGFuZGxlIGl0IGltbWVkaWF0ZWx5IHdpdGhvdXQgYSBET00gZXZl
bnQuCisgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpSYXdLZXlEb3duKSB7CisgICAgICAgICAgICBpZiAoIWNvbW1hbmQuaXNUZXh0SW5z
ZXJ0aW9uKCkgJiYgY29tbWFuZC5leGVjdXRlKGV2ZW50KSkKKyAgICAgICAgICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
IGVsc2UgaWYgKGNvbW1hbmQuZXhlY3V0ZShldmVudCkpIHsKKyAgICAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGNvbW1hbmQuZXhlY3V0ZShldnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAvLyBUaGlzIGlzIGp1c3QgYSBub3JtYWwgdGV4dCBpbnNlcnRpb24sIHNvIHdhaXQgdG8g
ZXhlY3V0ZSB0aGUgaW5zZXJ0aW9uCisgICAgLy8gdW50aWwgYSBrZXl1cCBldmVudCBoYXBwZW5z
LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGluc2VydGlvbiB3aWxsIG5vdAorICAgIC8vIGJl
IHJlZmxlY3RlZCBpbiB0aGUgY29udGVudHMgb2YgdGhlIGZpZWxkIHVudGlsIHRoZSBrZXl1cCBE
T00gZXZlbnQuCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmtleWRvd25F
dmVudCkgewogCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJz
IGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgotICAgIGlmIChldnQt
PmNoYXJDb2RlKCkgPCAnICcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHBl
bmRpbmdDb21wb3NpdGlvbikgeworICAgICAgICAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5n
ID0gU3RyaW5nOjpmcm9tVVRGOChwZW5kaW5nQ29tcG9zaXRpb24pOworICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcpOwogCi0g
ICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAotICAg
IGlmIChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2xlYXJQZW5kaW5nSU1EYXRhKCk7CiAKLSAgICBy
ZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2dC0+a2V5RXZlbnQoKS0+dGV4dCgp
LCBldnQpOwotfQorICAgICAgICB9IGVsc2UgaWYgKHBlbmRpbmdQcmVlZGl0KSB7CisgICAgICAg
ICAgICBTdHJpbmcgcHJlZWRpdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgocGVuZGluZ1ByZWVk
aXQpOwogCi12b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKLXsKLSAgICBpZiAoaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQp
KQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIC8vIERv
bid0IHVzZSBhbiBlbXB0eSBwcmVlZGl0IGFzIGl0IHdpbGwgZGVzdHJveSB0aGUgY3VycmVudAor
ICAgICAgICAgICAgLy8gc2VsZWN0aW9uLCBldmVuIGlmIHRoZSBjb21wb3NpdGlvbiBpcyBjYW5j
ZWxsZWQgb3IgZmFpbHMgbGF0ZXIgb24uCisgICAgICAgICAgICBpZiAoIXByZWVkaXRTdHJpbmcu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5l
PiB1bmRlcmxpbmVzOworICAgICAgICAgICAgICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0
aW9uVW5kZXJsaW5lKDAsIHByZWVkaXRTdHJpbmcubGVuZ3RoKCksIENvbG9yKDAsIDAsIDApLCBm
YWxzZSkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24o
cHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNsZWFyUGVuZGluZ0lNRGF0YSgpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBEb24ndCBpbnNlcnQgbnVsbCBvciBjb250cm9sIGNoYXJhY3RlcnMgYXMgdGhleSBj
YW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCisgICAgICAgICAgICBpZiAoZXZlbnQt
PmNoYXJDb2RlKCkgPCAnICcpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2RpZmllciBpcyBwcmVzc2VkCisgICAg
ICAgICAgICBpZiAocGxhdGZvcm1FdmVudC0+Y3RybEtleSgpIHx8IHBsYXRmb3JtRXZlbnQtPmFs
dEtleSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChwbGF0Zm9ybUV2ZW50LT50ZXh0KCksIGV2ZW50KSkKKyAg
ICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXli
b2FyZEV2ZW50KiBldmVudCkKQEAgLTUzMyw5ICs1NzAsNyBAQCB2b2lkIEVkaXRvckNsaWVudDo6
aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJp
djsKLSAgICAvLyBUT0RPOiBEaXNwYXRjaCBJRS1jb21wYXRpYmxlIHRleHQgaW5wdXQgZXZlbnRz
IGZvciBJTSBldmVudHMuCi0gICAgaWYgKGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyhw
cml2LT5pbUNvbnRleHQsIGV2ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtleSgpKSkKLSAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZmlsdGVy
X2tleXByZXNzKHByaXYtPmltQ29udGV4dCwgZXZlbnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5
KCkpOwogfQogCiBFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40008</attachid>
            <date>2009-09-23 12:04:38 -0700</date>
            <delta_ts>2009-09-30 12:50:53 -0700</delta_ts>
            <desc>Updated patch (rev3)</desc>
            <filename>0001-Fixes-for-IME-handling-in-Gtk.patch</filename>
            <type>text/plain</type>
            <size>16854</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSBhYTRjYjg0MGE5MzE1MTYxZDJhMWFmNDYyYjU4ZTA3NjdhZTMwM2NjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjIgU2VwIDIwMDkgMjM6MzQ6MjcgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBGaXhlcyBmb3IgSU1FIGhhbmRsaW5nIGluIEd0ay4KCi0tLQogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKwogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgICAgICAgICAgICAgIHwgICAgNyAtCiBXZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsrCiBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAgICAgICAgICAgfCAgICA0ICsKIFdlYktpdC9ndGsv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKysrCiBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAgfCAgMTk2ICsrKysrKysrKysrKysr
Ky0tLS0tLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMTY4IGluc2VydGlvbnMoKyksIDg3IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCAyNTg3OWMwLi43NmUwZDUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMDktMDktMjMgIE1hcnRpbiBSb2JpbnNvbiAgPG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0dUS10gUkVHUkVTU0lPTjogQml0bWFwSW1hZ2U6OmdldEdka1BpeGJ1ZiBmYWlscyBmb3Igbm9u
LXNxdWFyZSBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI5NjU0CisKKyAgICAgICAgRW5hYmxlIHRlc3RzIHdoaWNoIGFyZSBub3cgcGFzc2lu
ZyBiZWNhdXNlIG9mIGtleSBldmVudCBmaXhlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOgorCiAyMDA5LTA5LTIzICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZAppbmRleCA5MTYxZTZiLi45OGFhZTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAt
MTYwNiwxMSArMTYwNiw2IEBAIGZhc3QvZXZlbnRzL2RibGNsaWNrLWFkZEV2ZW50TGlzdGVuZXIu
aHRtbAogZmFzdC9ldmVudHMvZHJhZy1pbi1mcmFtZXMuaHRtbAogZmFzdC9ldmVudHMvZnJhbWUt
dGFiLWZvY3VzLmh0bWwKIGZhc3QvZXZlbnRzL2pzLWtleWJvYXJkLWV2ZW50LWNyZWF0aW9uLmh0
bWwKLWZhc3QvZXZlbnRzL2tleS1ldmVudHMtaW4taW5wdXQtYnV0dG9uLmh0bWwKLWZhc3QvZXZl
bnRzL2tleS1ldmVudHMtaW4taW5wdXQtdGV4dC5odG1sCi1mYXN0L2V2ZW50cy9rZXlkb3duLWtl
eXByZXNzLWZvY3VzLWNoYW5nZS5odG1sCi1mYXN0L2V2ZW50cy9rZXlkb3duLWtleXByZXNzLXBy
ZXZlbnREZWZhdWx0Lmh0bWwKLWZhc3QvZXZlbnRzL2tleXByZXNzLWZvY3VzLWNoYW5nZS5odG1s
CiBmYXN0L2V2ZW50cy9rZXlwcmVzcy1pbnNlcnQtdGFiLmh0bWwKIGZhc3QvZXZlbnRzL21vdXNl
LWNsaWNrLWV2ZW50cy5odG1sCiBmYXN0L2V2ZW50cy9tb3VzZWNsaWNrLXRhcmdldC1hbmQtcG9z
aXRpb25pbmcuaHRtbApAQCAtMTYzMCw3ICsxNjI1LDYgQEAgZmFzdC9ldmVudHMvcG9pbnRlci1l
dmVudHMtMi5odG1sCiBmYXN0L2V2ZW50cy9wb3B1cC1ibG9ja2luZy1jbGljay1pbi1pZnJhbWUu
aHRtbAogZmFzdC9ldmVudHMvcmlnaHQtY2xpY2stZm9jdXMuaHRtbAogZmFzdC9ldmVudHMvc2Ny
b2xsYmFyLWRvdWJsZS1jbGljay5odG1sCi1mYXN0L2V2ZW50cy9zcGVjaWFsLWtleS1ldmVudHMt
aW4taW5wdXQtdGV4dC5odG1sCiBmYXN0L2V2ZW50cy9zdG9wLWxvYWQtaW4tdW5sb2FkLWhhbmRs
ZXItdXNpbmctZG9jdW1lbnQtd3JpdGUuaHRtbAogZmFzdC9ldmVudHMvc3RvcC1sb2FkLWluLXVu
bG9hZC1oYW5kbGVyLXVzaW5nLXdpbmRvdy1zdG9wLmh0bWwKIGZhc3QvZXZlbnRzL3RhYmluZGV4
LWZvY3VzLWJsdXItYWxsLmh0bWwKQEAgLTU1ODMsNyArNTU3Nyw2IEBAIGVkaXRpbmcvcGFzdGVi
b2FyZC9maWxlcy1kdXJpbmctcGFnZS1kcmFncy5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi9leHRl
bmQtc2VsZWN0aW9uLWFmdGVyLWRvdWJsZS1jbGljay5odG1sCiBmYXN0L2V2ZW50cy9kcmFnLXRv
LW5hdmlnYXRlLmh0bWwKIGZhc3QvZXZlbnRzL3ByZXZlbnQtZHJhZy10by1uYXZpZ2F0ZS5odG1s
Ci1mYXN0L2V2ZW50cy9rZXlkb3duLWZ1bmN0aW9uLWtleXMuaHRtbAogZmFzdC9mb3Jtcy9zbGlk
ZXItZGVsZXRlLXdoaWxlLWRyYWdnaW5nLXRodW1iLmh0bWwKIGZhc3QvZXZlbnRzL3RhYi1mb2N1
cy1hbmNob3IuaHRtbAogaHR0cC90ZXN0cy9sb2NhbC9kcmFnLW92ZXItcmVtb3RlLWNvbnRlbnQu
aHRtbApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCA5NjVjNWRmLi5hZDE5YTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDA5LTA5LTIzICBNYXJ0aW4g
Um9iaW5zb24gIDxtYXJ0aW4uamFtZXMucm9iaW5zb25AZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFJFR1JFU1NJT046IEJp
dG1hcEltYWdlOjpnZXRHZGtQaXhidWYgZmFpbHMgZm9yIG5vbi1zcXVhcmUgaW1hZ2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTY1NAorCisgICAg
ICAgIEdpdmUgR0RLX0JhY2tzcGFjZSBrZXkgZXZlbnRzIHRoZSBwcm9wZXIgdGV4dCBwcm9wZXJ0
aWVzLgorCisgICAgICAgIEluc3RlYWQgb2YgYWRkaW5nIG5ldyB0ZXN0cywgdGhpcyBjaGFuZ2Ug
cmVtb3ZlcyBleGlzdGluZyB0ZXN0cworICAgICAgICBmcm9tIEd0aydzIHNraXBwZWQgbGlzdC4K
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpOgorCiAyMDA5LTA5LTIzICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvS2V5RXZlbnRHdGsuY3BwCmluZGV4IDU4NzU1NDcuLjQxODZjMmYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKQEAgLTEzNiw2ICsxMzYsOCBAQCBzdGF0aWMgU3RyaW5n
IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCiAgICAgICAgICAgICAv
LyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgogICAgICAgICBjYXNlIEdE
S19EZWxldGU6CiAgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNhc2UgR0RL
X0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKICAgICAgICAgY2FzZSBH
REtfSVNPX0xlZnRfVGFiOgogICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6CiAgICAgICAg
IGNhc2UgR0RLX1RhYjoKQEAgLTUwMyw2ICs1MDUsOCBAQCBzdGF0aWMgU3RyaW5nIHNpbmdsZUNo
YXJhY3RlclN0cmluZyhndWludCB2YWwpCiAgICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgogICAg
ICAgICBjYXNlIEdES19SZXR1cm46CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJcciIpOwor
ICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJc
eDgiKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGd1bmljaGFyIGMgPSBnZGtfa2V5
dmFsX3RvX3VuaWNvZGUodmFsKTsKICAgICAgICAgICAgIGdsb25nIG53YzsKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggM2ZhM2I1
OS4uZDRlYzY3YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAwOS0wOS0yMyAgTWFydGluIFJvYmlu
c29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBSRUdSRVNTSU9OOiBCaXRtYXBJ
bWFnZTo6Z2V0R2RrUGl4YnVmIGZhaWxzIGZvciBub24tc3F1YXJlIGltYWdlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk2NTQKKworICAgICAgICBF
bnN1cmUgdGhhdCBldmVuIHdoZW4gR1RLU2ltcGxlSU1Db250ZXh0IGZpbHRlcnMgbm9uLUlNRSBr
ZXlzdHJva2VzLAorICAgICAgICBrZXlib2FyZCBldmVudHMgYXJlIGZpcmVkIHByb3Blcmx5Lgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Y2xlYXJQZW5kaW5nSU1EYXRhKToKKyAgICAgICAgKFdlYktpdDo6aW1Db250ZXh0
Q29tbWl0dGVkKToKKyAgICAgICAgKFdlYktpdDo6aW1Db250ZXh0UHJlZWRpdENoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OmludGVycHJldEVkaXRvckNvbW1hbmRLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6
OmhhbmRsZUNhcmV0QnJvd3NpbmdLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRp
dG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9y
Q2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24pOgorCiAyMDA5LTA5LTIzICBKYW4gTWlj
aGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3Rr
LmNwcAppbmRleCA3MWE3YzFhLi4zMDAwZDEzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCkBAIC00OSwzOSArNDksMzIgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgZ2NoYXIqIHBlbmRp
bmdDb21wb3NpdGlvbiA9IDA7CitzdGF0aWMgZ2NoYXIqIHBlbmRpbmdQcmVlZGl0ID0gMDsKKwor
c3RhdGljIHZvaWQgY2xlYXJQZW5kaW5nSU1EYXRhKCkKK3sKKyAgICBnX2ZyZWUocGVuZGluZ0Nv
bXBvc2l0aW9uKTsKKyAgICBwZW5kaW5nQ29tcG9zaXRpb24gPSAwOworICAgIGdfZnJlZShwZW5k
aW5nUHJlZWRpdCk7CisgICAgcGVuZGluZ1ByZWVkaXQgPSAwOworfQogc3RhdGljIHZvaWQgaW1D
b250ZXh0Q29tbWl0dGVkKEd0a0lNQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIHN0ciwg
RWRpdG9yQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgRnJhbWUqIHRhcmdldEZyYW1lID0gY29yZShj
bGllbnQtPm1fd2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKKyAgICBBU1NFUlQoIXBlbmRpbmdDb21wb3NpdGlvbik7CiAKLSAgICBpZiAoIXRhcmdldEZy
YW1lIHx8ICF0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRWRpdG9yKiBlZGl0b3IgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCk7Ci0KLSAgICBT
dHJpbmcgY29tbWl0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGVkaXRvci0+
Y29uZmlybUNvbXBvc2l0aW9uKGNvbW1pdFN0cmluZyk7CisgICAgLy8gVGhpcyBzaWduYWwgd2ls
bCBmaXJlIGR1cmluZyBhIGtleWRvd24gZXZlbnQuIFdlIHdhbnQgdGhlIGNvbnRlbnRzIG9mIHRo
ZQorICAgIC8vIGZpZWxkIHRvIGNoYW5nZSByaWdodCBiZWZvcmUgdGhlIGtleXVwIGV2ZW50LCBz
byB3ZSB3YWl0IHVudGlsIHRoZW4gdG8gYWN0dWFsbHkKKyAgICAvLyBjb21taXQgdGhpcyBjb21w
b3NpdGlvbi4KKyAgICBwZW5kaW5nQ29tcG9zaXRpb24gPSBnX3N0cmR1cChzdHIpOwogfQogCiBz
dGF0aWMgdm9pZCBpbUNvbnRleHRQcmVlZGl0Q2hhbmdlZChHdGtJTUNvbnRleHQqIGNvbnRleHQs
IEVkaXRvckNsaWVudCogY2xpZW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoY2xpZW50
LT5tX3dlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CisgICAgQVNTRVJUKCFwZW5kaW5n
UHJlZWRpdCk7CiAKLSAgICBnY2hhciogcHJlZWRpdCA9IE5VTEw7Ci0gICAgZ2ludCBjdXJzb3JQ
b3MgPSAwOwogICAgIC8vIFdlIGlnbm9yZSB0aGUgcHJvdmlkZWQgUGFuZ29BdHRyTGlzdCBmb3Ig
bm93LgotICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhjb250ZXh0LCAmcHJl
ZWRpdCwgTlVMTCwgJmN1cnNvclBvcyk7Ci0gICAgU3RyaW5nIHByZWVkaXRTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KHByZWVkaXQpOwotICAgIGdfZnJlZShwcmVlZGl0KTsKLQotICAgIC8vIHNl
dENvbXBvc2l0aW9uKCkgd2lsbCByZXBsYWNlIHRoZSB1c2VyIHNlbGVjdGlvbiBpZiBwYXNzZWQg
YW4gZW1wdHkKLSAgICAvLyBwcmVlZGl0LiBXZSBkb24ndCB3YW50IHRoaXMgdG8gaGFwcGVuLgot
ICAgIGlmIChwcmVlZGl0U3RyaW5nLmlzRW1wdHkoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlv
bigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXM7Ci0gICAgdW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUo
MCwgcHJlZWRpdFN0cmluZy5sZW5ndGgoKSwgQ29sb3IoMCwgMCwgMCksIGZhbHNlKSk7Ci0gICAg
ZWRpdG9yLT5zZXRDb21wb3NpdGlvbihwcmVlZGl0U3RyaW5nLCB1bmRlcmxpbmVzLCBjdXJzb3JQ
b3MsIDApOworICAgIGd0a19pbV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhjb250ZXh0LCAm
cGVuZGluZ1ByZWVkaXQsIE5VTEwsIE5VTEwpOwogfQogCiB2b2lkIEVkaXRvckNsaWVudDo6c2V0
SW5wdXRNZXRob2RTdGF0ZShib29sIGFjdGl2ZSkKQEAgLTEzNiwxMiArMTI5LDE2IEBAIGludCBF
ZGl0b3JDbGllbnQ6OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkKIAogYm9vbCBFZGl0b3JDbGll
bnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJDb3JlOjpSYW5nZSopCiB7CisgICAgY2xlYXJQZW5k
aW5nSU1EYXRhKCk7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJDb3JlOjpSYW5nZSop
CiB7CisgICAgY2xlYXJQZW5kaW5nSU1EYXRhKCk7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDIxLDcgKzQxOCw3IEBAIHN0YXRpYyBjb25zdCBLZXlQ
cmVzc0VudHJ5IGtleVByZXNzRW50cmllc1tdID0gewogICAgIHsgJ1xyJywgICBBbHRLZXkgfCBT
aGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJv
YXJkRXZlbnQqIGV2dCkKK3N0YXRpYyBjb25zdCBjaGFyKiBpbnRlcnByZXRFZGl0b3JDb21tYW5k
S2V5RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZ0KQogewogICAgIEFTU0VSVChldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKIApAQCAtNDU2LDc0ICs0NTMsMTE1IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiBpbnRlcnByZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCiAg
ICAgcmV0dXJuIG1hcEtleSA/IGtleVByZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsK
IH0KIAotc3RhdGljIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCogZXZ0KQorc3RhdGljIGJvb2wgaGFuZGxlQ2FyZXRCcm93c2luZ0tleWJvYXJkRXZlbnQoRnJh
bWUqIGZyYW1lLCBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KQoreworICAg
IHN3aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CisgICAgICAgIGNh
c2UgVktfTEVGVDoKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9u
Q29udHJvbGxlcjo6TU9WRSwKKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxl
cjo6TEVGVCwKKyAgICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRH
cmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0
cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFZLX1JJR0hUOgor
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5
KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpN
T1ZFLAorICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwKKyAg
ICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6
IENoYXJhY3RlckdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFZLX1VQOgorICAgICAgICAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25D
b250cm9sbGVyOjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAg
ICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwKKyAgICAgICAgICAgICAg
ICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5IDogTGluZUdy
YW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIFZLX0RPV046CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkZPUldBUkQsCisgICAgICAgICAgICAgICAgICAgIGtleUV2
ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhHcmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwK
KyAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGEgY2FyZXQg
YnJvd3N3aW5nIGtleXN0cm9rZSwgc28gY29udGludWUgcHJvY2Vzc2luZy4KKyAgICB9Cit9CisK
K3ZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogewotICAgIE5vZGUqIG5vZGUgPSBldnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBO
b2RlKiBub2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKICAgICBBU1NFUlQobm9kZSk7
CiAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBBU1NF
UlQoZnJhbWUpOwogCi0gICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlFdmVudCA9
IGV2dC0+a2V5RXZlbnQoKTsKLSAgICBpZiAoIWtleUV2ZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZl
bnQtPmtleUV2ZW50KCk7CisgICAgaWYgKCFwbGF0Zm9ybUV2ZW50KQorICAgICAgICByZXR1cm47
CiAKICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBmcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBzd2l0Y2gg
KGtleUV2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBW
S19MRUZUOgotICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2
ZW50LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9u
Q29udHJvbGxlcjo6TU9WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkxFRlQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgp
ID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIGNhc2UgVktfUklHSFQ6Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQg
OiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVu
dC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIGNhc2UgVktfVVA6Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVy
OjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3Jh
bnVsYXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGNhc2UgVktfRE9XTjoKLSAgICAgICAgICAgICAg
ICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELAotICAgICAg
ICAgICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFy
aXR5IDogTGluZUdyYW51bGFyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICBpZiAoY2FyZXRCcm93
c2luZyAmJiBoYW5kbGVDYXJldEJyb3dzaW5nS2V5Ym9hcmRFdmVudChmcmFtZSwgcGxhdGZvcm1F
dmVudCkpIHsKKyAgICAgICAgLy8gVGhpcyB3YXMgYSBjYXJldCBicm93c2luZyBrZXkgZXZlbnQs
IHNvIHByZXZlbnQgaXQgZnJvbSBidWJibGluZyB1cCB0byB0aGUgRE9NLgorICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVk
aXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGludGVycHJl
dEtleUV2ZW50KGV2dCkpOworICAgIC8vIERvbid0IGFsbG93IGVkaXRvciBjb21tYW5kcyBvciB0
ZXh0IGluc2VydGlvbiBmb3Igbm9kZXMgdGhhdCBjYW5ub3QgZWRpdC4KKyAgICBpZiAoIWZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoa2V5RXZl
bnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24pIHsKLSAgICAg
ICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0
byBkZWNpZGUgaG93IGNvbW1hbmRzIHRoYXQganVzdCBpbnNlcnQgdGV4dCBpZiBleGVjdXRlZCB2
aWEgRWRpdG9yIHNob3VsZCBiZSB0cmVhdGVkLAotICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCB1
cG9uIFdlYkNvcmUgdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0
aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAot
ICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50
ZXIpLgotICAgICAgICByZXR1cm4gIWNvbW1hbmQuaXNUZXh0SW5zZXJ0aW9uKCkgJiYgY29tbWFu
ZC5leGVjdXRlKGV2dCk7CisgICAgY29uc3QgZ2NoYXIqIGVkaXRvckNvbW1hbmRTdHJpbmcgPSBp
bnRlcnByZXRFZGl0b3JDb21tYW5kS2V5RXZlbnQoZXZlbnQpOworICAgIGlmIChlZGl0b3JDb21t
YW5kU3RyaW5nKSB7CisgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVk
aXRvcigpLT5jb21tYW5kKGVkaXRvckNvbW1hbmRTdHJpbmcpOworCisgICAgICAgIC8vIE9uIGVk
aXRvciBjb21tYW5kcyBmcm9tIGtleSBkb3duIGV2ZW50cywgd2Ugb25seSB3YW50IHRvIGxldCB0
aGUgZXZlbnQgYnViYmxlIHVwIHRvCisgICAgICAgIC8vIHRoZSBET00gaWYgaXQgaW5zZXJ0cyB0
ZXh0LiBJZiBpdCBkb2Vzbid0IGluc2VydCB0ZXh0IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9j
dXMpCisgICAgICAgIC8vIHdlIGp1c3Qgd2FudCBXZWJLaXQgdG8gaGFuZGxlIGl0IGltbWVkaWF0
ZWx5IHdpdGhvdXQgYSBET00gZXZlbnQuCisgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50LT50eXBl
KCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duKSB7CisgICAgICAgICAgICBp
ZiAoIWNvbW1hbmQuaXNUZXh0SW5zZXJ0aW9uKCkgJiYgY29tbWFuZC5leGVjdXRlKGV2ZW50KSkK
KyAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQuZXhlY3V0ZShldmVudCkpIHsK
KyAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvbW1hbmQuZXhlY3V0ZShldnQpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBUaGlzIGlzIGp1c3QgYSBub3JtYWwgdGV4dCBp
bnNlcnRpb24sIHNvIHdhaXQgdG8gZXhlY3V0ZSB0aGUgaW5zZXJ0aW9uCisgICAgLy8gdW50aWwg
YSBrZXl1cCBldmVudCBoYXBwZW5zLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGluc2VydGlv
biB3aWxsIG5vdAorICAgIC8vIGJlIHJlZmxlY3RlZCBpbiB0aGUgY29udGVudHMgb2YgdGhlIGZp
ZWxkIHVudGlsIHRoZSBrZXl1cCBET00gZXZlbnQuCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwg
b3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJl
aGF2aW91cgotICAgIGlmIChldnQtPmNoYXJDb2RlKCkgPCAnICcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKHBlbmRpbmdDb21wb3NpdGlvbikgeworICAgICAgICAgICAgU3Ry
aW5nIGNvbXBvc2l0aW9uU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChwZW5kaW5nQ29tcG9zaXRp
b24pOworICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oY29t
cG9zaXRpb25TdHJpbmcpOwogCi0gICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9k
aWZpZXIgaXMgcHJlc3NlZAotICAgIGlmIChrZXlFdmVudC0+Y3RybEtleSgpIHx8IGtleUV2ZW50
LT5hbHRLZXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2xlYXJQZW5k
aW5nSU1EYXRhKCk7CiAKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2
dC0+a2V5RXZlbnQoKS0+dGV4dCgpLCBldnQpOwotfQorICAgICAgICB9IGVsc2UgaWYgKHBlbmRp
bmdQcmVlZGl0KSB7CisgICAgICAgICAgICBTdHJpbmcgcHJlZWRpdFN0cmluZyA9IFN0cmluZzo6
ZnJvbVVURjgocGVuZGluZ1ByZWVkaXQpOwogCi12b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoaGFuZGxlRWRpdGlu
Z0tleWJvYXJkRXZlbnQoZXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKKyAgICAgICAgICAgIC8vIERvbid0IHVzZSBhbiBlbXB0eSBwcmVlZGl0IGFzIGl0IHdpbGwg
ZGVzdHJveSB0aGUgY3VycmVudAorICAgICAgICAgICAgLy8gc2VsZWN0aW9uLCBldmVuIGlmIHRo
ZSBjb21wb3NpdGlvbiBpcyBjYW5jZWxsZWQgb3IgZmFpbHMgbGF0ZXIgb24uCisgICAgICAgICAg
ICBpZiAoIXByZWVkaXRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgVmVjdG9y
PENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgICAgICAgICAgICAgIHVuZGVy
bGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIHByZWVkaXRTdHJpbmcubGVuZ3Ro
KCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0
b3IoKS0+c2V0Q29tcG9zaXRpb24ocHJlZWRpdFN0cmluZywgdW5kZXJsaW5lcywgMCwgMCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNsZWFyUGVuZGluZ0lNRGF0YSgpOworCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgbnVsbCBvciBjb250cm9s
IGNoYXJhY3RlcnMgYXMgdGhleSBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCisg
ICAgICAgICAgICBpZiAoZXZlbnQtPmNoYXJDb2RlKCkgPCAnICcpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgYW55dGhpbmcgaWYgYSBtb2Rp
ZmllciBpcyBwcmVzc2VkCisgICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudC0+Y3RybEtleSgp
IHx8IHBsYXRmb3JtRXZlbnQtPmFsdEtleSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChwbGF0Zm9ybUV2ZW50
LT50ZXh0KCksIGV2ZW50KSkKKyAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUlu
cHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKQEAgLTUzMyw5ICs1NzEsNyBA
QCB2b2lkIEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKLSAgICAvLyBUT0RPOiBEaXNwYXRjaCBJRS1jb21wYXRp
YmxlIHRleHQgaW5wdXQgZXZlbnRzIGZvciBJTSBldmVudHMuCi0gICAgaWYgKGd0a19pbV9jb250
ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2LT5pbUNvbnRleHQsIGV2ZW50LT5rZXlFdmVudCgpLT5n
ZGtFdmVudEtleSgpKSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
Z3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHByaXYtPmltQ29udGV4dCwgZXZlbnQtPmtl
eUV2ZW50KCktPmdka0V2ZW50S2V5KCkpOwogfQogCiBFZGl0b3JDbGllbnQ6OkVkaXRvckNsaWVu
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40392</attachid>
            <date>2009-09-30 12:50:53 -0700</date>
            <delta_ts>2009-10-01 02:02:40 -0700</delta_ts>
            <desc>Updated patch (rev4)</desc>
            <filename>0001-Fixes-for-IME-handling-in-Gtk.patch</filename>
            <type>text/plain</type>
            <size>25620</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA4Mjk2MjY1NWE1MjhhYzRjODE1YTQ4Y2ZhZWIyOTU4Y2NmMTEzMzQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1hcnRpbi5qYW1lcy5yb2JpbnNv
bkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjIgU2VwIDIwMDkgMjM6MzQ6MjcgLTA3MDAKU3ViamVj
dDogW1BBVENIXSBGaXhlcyBmb3IgSU1FIGhhbmRsaW5nIGluIEd0ay4KCi0tLQogQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKwogR05VbWFrZWZp
bGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArLQogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKwogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgICAgICAgICAgICAgIHwgICAgNyAtCiBXZWJDb3JlL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsrCiBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAgICAgICAgICAgfCAgICA0ICsKIFdlYktpdC9ndGsv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKysrKwogV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwIHwgIDIwMCArKysrKysrKysrKysr
KystLS0tLS0tLS0tCiBXZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYyAgICAgICAgICAg
ICAgfCAgMTg2ICsrKysrKysrKysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDM4NyBp
bnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQv
Z3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYwoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBlMmMxZWY1Li5hNzQ1MTYzIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDktMzAgIE1hcnRpbiBSb2JpbnNvbiAg
PG1hcnRpbi5qYW1lcy5yb2JpbnNvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gR3RrSU1Db250ZXh0IGZpbHRlcmluZyBp
bnRlcmZlcmVzIHdpdGggRE9NIGtleSBldmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzMzCisKKyAgICAgICAgQWRkIG5ldyBrZXkgZXZlbnQg
dGVzdCBlbnN1cmluZyB0aGF0IElNRSBrZXlwcmVzc2VzIGFyZSBoYW5kbGVkLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisKIDIwMDktMDktMjYgIERhdmlkIEtpbHplciAgPGRka2lsemVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBHVEsgQlVJTEQgRklYOiBhZGQgRU5BQkxFX09SSUVOVEFU
SU9OX0VWRU5UUyBzdXBwb3J0IHRvIGNvbmZpZ3VyZS5hYwpkaWZmIC0tZ2l0IGEvR05VbWFrZWZp
bGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA0MGM3OTFhLi41YWNhMGU2IDEwMDY0NAotLS0g
YS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtNTgxLDcgKzU4MSw4IEBA
IFRFU1RfUFJPR1MgKz0gUHJvZ3JhbXMvdW5pdHRlc3RzL3Rlc3RodHRwYmFja2VuZCBcCiAJUHJv
Z3JhbXMvdW5pdHRlc3RzL3Rlc3RoaXR0ZXN0cmVzdWx0IFwKIAlQcm9ncmFtcy91bml0dGVzdHMv
dGVzdHdlYnNldHRpbmdzIFwKIAlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYnJlc291cmNlIFwK
LQlQcm9ncmFtcy91bml0dGVzdHMvdGVzdHdlYmRhdGFzb3VyY2UKKwlQcm9ncmFtcy91bml0dGVz
dHMvdGVzdHdlYmRhdGFzb3VyY2UgXAorCVByb2dyYW1zL3VuaXR0ZXN0cy90ZXN0a2V5ZXZlbnRz
CiAKICMgQWRkIGFkZGl0aW9uYWwgdGVzdHMgaGVyZQogUHJvZ3JhbXNfdW5pdHRlc3RzX3Rlc3Ro
dHRwYmFja2VuZF9TT1VSQ0VTID0gV2ViS2l0L2d0ay90ZXN0cy90ZXN0aHR0cGJhY2tlbmQuYwpA
QCAtNjUxLDYgKzY1MiwxMSBAQCBQcm9ncmFtc191bml0dGVzdHNfdGVzdGhpdHRlc3RyZXN1bHRf
U09VUkNFUyA9IFdlYktpdC9ndGsvdGVzdHMvdGVzdGhpdHRlc3RyZXN1bAogUHJvZ3JhbXNfdW5p
dHRlc3RzX3Rlc3RoaXR0ZXN0cmVzdWx0X0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykK
IFByb2dyYW1zX3VuaXR0ZXN0c190ZXN0aGl0dGVzdHJlc3VsdF9MREFERCA9ICQod2Via2l0X3Rl
c3RzX2xkYWRkKQogCitQcm9ncmFtc191bml0dGVzdHNfdGVzdGtleWV2ZW50c19TT1VSQ0VTID0g
V2ViS2l0L2d0ay90ZXN0cy90ZXN0a2V5ZXZlbnRzLmMKK1Byb2dyYW1zX3VuaXR0ZXN0c190ZXN0
a2V5ZXZlbnRzX0NGTEFHUyA9ICQod2Via2l0X3Rlc3RzX2NmbGFncykKK1Byb2dyYW1zX3VuaXR0
ZXN0c190ZXN0a2V5ZXZlbnRzX0xEQUREID0gJCh3ZWJraXRfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c191bml0dGVzdHNfdGVzdGtleWV2ZW50c19MREZMQUdTID0gJCh3ZWJraXRfdGVzdHNfbGRmbGFn
cykKKwogIyBBdXRvZ2VuZXJhdGVkIHNvdXJjZXMKIEJVSUxUX1NPVVJDRVMgOj0gXAogCSQoamF2
YXNjcmlwdGNvcmVfYnVpbHRfc291cmNlcykgXApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM1NTBmNTguLjM4NjQ3YTIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOS0zMCAgTWFydGluIFJvYmluc29uICA8bWFydGlu
LmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQgZmlsdGVyaW5nIGludGVyZmVy
ZXMgd2l0aCBET00ga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg3MzMKKworICAgICAgICBSZS1lbmFibGUgc2tpcHBlZCB0ZXN0cyB3
aGljaCB3ZXJlIHByZXZpb3VzbHkgZmFpbGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOgorCiAyMDA5LTA5LTMwICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQK
aW5kZXggMzY2MjBmZi4uZjNiZTdlMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTE1
OTQsMTEgKzE1OTQsNiBAQCBmYXN0L2V2ZW50cy9kYmxjbGljay1hZGRFdmVudExpc3RlbmVyLmh0
bWwKIGZhc3QvZXZlbnRzL2RyYWctaW4tZnJhbWVzLmh0bWwKIGZhc3QvZXZlbnRzL2ZyYW1lLXRh
Yi1mb2N1cy5odG1sCiBmYXN0L2V2ZW50cy9qcy1rZXlib2FyZC1ldmVudC1jcmVhdGlvbi5odG1s
Ci1mYXN0L2V2ZW50cy9rZXktZXZlbnRzLWluLWlucHV0LWJ1dHRvbi5odG1sCi1mYXN0L2V2ZW50
cy9rZXktZXZlbnRzLWluLWlucHV0LXRleHQuaHRtbAotZmFzdC9ldmVudHMva2V5ZG93bi1rZXlw
cmVzcy1mb2N1cy1jaGFuZ2UuaHRtbAotZmFzdC9ldmVudHMva2V5ZG93bi1rZXlwcmVzcy1wcmV2
ZW50RGVmYXVsdC5odG1sCi1mYXN0L2V2ZW50cy9rZXlwcmVzcy1mb2N1cy1jaGFuZ2UuaHRtbAog
ZmFzdC9ldmVudHMva2V5cHJlc3MtaW5zZXJ0LXRhYi5odG1sCiBmYXN0L2V2ZW50cy9tb3VzZS1j
bGljay1ldmVudHMuaHRtbAogZmFzdC9ldmVudHMvbW91c2VjbGljay10YXJnZXQtYW5kLXBvc2l0
aW9uaW5nLmh0bWwKQEAgLTE2MTgsNyArMTYxMyw2IEBAIGZhc3QvZXZlbnRzL3BvaW50ZXItZXZl
bnRzLTIuaHRtbAogZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tpbmctY2xpY2staW4taWZyYW1lLmh0
bWwKIGZhc3QvZXZlbnRzL3JpZ2h0LWNsaWNrLWZvY3VzLmh0bWwKIGZhc3QvZXZlbnRzL3Njcm9s
bGJhci1kb3VibGUtY2xpY2suaHRtbAotZmFzdC9ldmVudHMvc3BlY2lhbC1rZXktZXZlbnRzLWlu
LWlucHV0LXRleHQuaHRtbAogZmFzdC9ldmVudHMvc3RvcC1sb2FkLWluLXVubG9hZC1oYW5kbGVy
LXVzaW5nLWRvY3VtZW50LXdyaXRlLmh0bWwKIGZhc3QvZXZlbnRzL3N0b3AtbG9hZC1pbi11bmxv
YWQtaGFuZGxlci11c2luZy13aW5kb3ctc3RvcC5odG1sCiBmYXN0L2V2ZW50cy90YWJpbmRleC1m
b2N1cy1ibHVyLWFsbC5odG1sCkBAIC01NTU0LDcgKzU1NDgsNiBAQCBlZGl0aW5nL3Bhc3RlYm9h
cmQvZmlsZXMtZHVyaW5nLXBhZ2UtZHJhZ3MuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vZXh0ZW5k
LXNlbGVjdGlvbi1hZnRlci1kb3VibGUtY2xpY2suaHRtbAogZmFzdC9ldmVudHMvZHJhZy10by1u
YXZpZ2F0ZS5odG1sCiBmYXN0L2V2ZW50cy9wcmV2ZW50LWRyYWctdG8tbmF2aWdhdGUuaHRtbAot
ZmFzdC9ldmVudHMva2V5ZG93bi1mdW5jdGlvbi1rZXlzLmh0bWwKIGZhc3QvZm9ybXMvc2xpZGVy
LWRlbGV0ZS13aGlsZS1kcmFnZ2luZy10aHVtYi5odG1sCiBmYXN0L2V2ZW50cy90YWItZm9jdXMt
YW5jaG9yLmh0bWwKIGh0dHAvdGVzdHMvbG9jYWwvZHJhZy1vdmVyLXJlbW90ZS1jb250ZW50Lmh0
bWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggZTljNmU4Zi4uNDU0N2FjMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wOS0zMCAgTWFydGluIFJv
Ymluc29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQgZmls
dGVyaW5nIGludGVyZmVyZXMgd2l0aCBET00ga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg3MzMKKworICAgICAgICBFbnN1cmUgdGhh
dCBrZXlib2FyZCBldmVudHMgZmlsdGVyZWQgYnkgdGhlIEd0a0lNQ29udGV4dCBzdGlsbCBjcmVh
dGUKKyAgICAgICAgdGhlIHByb3BlciBET00gZXZlbnRzLgorCisgICAgICAgIE5vIHRlc3RzIGFk
ZGVkLiBJbnN0ZWFkIHByZXZpb3VzbHkgc2tpcHBlZCB0ZXN0cyBoYXZlIGJlZW4gZW5hYmxlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpzaW5n
bGVDaGFyYWN0ZXJTdHJpbmcpOgorCiAyMDA5LTA5LTMwICBDaHJpcyBIYXdrICA8aGF3a0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwCmluZGV4IDU4NzU1NDcuLjQxODZjMmYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9LZXlFdmVudEd0ay5jcHAKQEAgLTEzNiw2ICsxMzYsOCBAQCBzdGF0aWMgU3Ry
aW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCiAgICAgICAgICAg
ICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDdGLgogICAgICAgICBjYXNl
IEdES19EZWxldGU6CiAgICAgICAgICAgICByZXR1cm4gIlUrMDA3RiI7CisgICAgICAgIGNhc2Ug
R0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDA4IjsKICAgICAgICAgY2Fz
ZSBHREtfSVNPX0xlZnRfVGFiOgogICAgICAgICBjYXNlIEdES18zMjcwX0JhY2tUYWI6CiAgICAg
ICAgIGNhc2UgR0RLX1RhYjoKQEAgLTUwMyw2ICs1MDUsOCBAQCBzdGF0aWMgU3RyaW5nIHNpbmds
ZUNoYXJhY3RlclN0cmluZyhndWludCB2YWwpCiAgICAgICAgIGNhc2UgR0RLX0tQX0VudGVyOgog
ICAgICAgICBjYXNlIEdES19SZXR1cm46CiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJcciIp
OworICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCJceDgiKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGd1bmljaGFyIGMgPSBnZGtf
a2V5dmFsX3RvX3VuaWNvZGUodmFsKTsKICAgICAgICAgICAgIGdsb25nIG53YzsKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNDI2
NTk4OC4uNzNiNDMwYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAwOS0wOS0zMCAgTWFydGluIFJv
Ymluc29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBHdGtJTUNvbnRleHQgZmls
dGVyaW5nIGludGVyZmVyZXMgd2l0aCBET00ga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg3MzMKKworICAgICAgICBFbnN1cmUgdGhh
dCBrZXlib2FyZCBldmVudHMgZmlsdGVyZWQgYnkgdGhlIEd0a0lNQ29udGV4dCBzdGlsbCBjcmVh
dGUKKyAgICAgICAgdGhlIHByb3BlciBET00gZXZlbnRzLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y2xlYXJQZW5kaW5n
SU1EYXRhKToKKyAgICAgICAgKFdlYktpdDo6aW1Db250ZXh0Q29tbWl0dGVkKToKKyAgICAgICAg
KFdlYktpdDo6aW1Db250ZXh0UHJlZWRpdENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0
b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNs
aWVudDo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OmludGVycHJldEVkaXRv
ckNvbW1hbmRLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OmhhbmRsZUNhcmV0QnJvd3NpbmdL
ZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5kbGVLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1l
dGhvZEtleWRvd24pOgorICAgICAgICAqIHRlc3RzL3Rlc3RrZXlldmVudHMuYzogQWRkZWQuCisg
ICAgICAgICh0ZXN0X2luZm9fbmV3KToKKyAgICAgICAgKHRlc3RfaW5mb19kZXN0cm95KToKKyAg
ICAgICAgKGtleV9ldmVudF9maXh0dXJlX3NldHVwKToKKyAgICAgICAgKGtleV9ldmVudF9maXh0
dXJlX3RlYXJkb3duKToKKyAgICAgICAgKGtleV9wcmVzc19ldmVudF9jYik6CisgICAgICAgIChr
ZXlfcmVsZWFzZV9ldmVudF9jYik6CisgICAgICAgIChsb2FkX3N0YXR1c19jYik6CisgICAgICAg
IChtYXBfZXZlbnRfY2IpOgorICAgICAgICAodGVzdF9rZXlwcmVzcyk6CisgICAgICAgIChtYWlu
KToKKwogMjAwOS0wOS0yOSAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IDcxYTdjMWEuLmI4YmE1YWQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKQEAgLTQ5LDM5ICs0
OSwzMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
K3N0YXRpYyBnY2hhciogcGVuZGluZ0NvbXBvc2l0aW9uID0gMDsKK3N0YXRpYyBnY2hhciogcGVu
ZGluZ1ByZWVkaXQgPSAwOworCitzdGF0aWMgdm9pZCBjbGVhclBlbmRpbmdJTURhdGEoKQorewor
ICAgIGdfZnJlZShwZW5kaW5nQ29tcG9zaXRpb24pOworICAgIHBlbmRpbmdDb21wb3NpdGlvbiA9
IDA7CisgICAgZ19mcmVlKHBlbmRpbmdQcmVlZGl0KTsKKyAgICBwZW5kaW5nUHJlZWRpdCA9IDA7
Cit9CiBzdGF0aWMgdm9pZCBpbUNvbnRleHRDb21taXR0ZWQoR3RrSU1Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBnY2hhciogc3RyLCBFZGl0b3JDbGllbnQqIGNsaWVudCkKIHsKLSAgICBGcmFtZSog
dGFyZ2V0RnJhbWUgPSBjb3JlKGNsaWVudC0+bV93ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFTU0VSVCghcGVuZGluZ0NvbXBvc2l0aW9uKTsK
IAotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRp
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFZGl0b3IqIGVkaXRvciA9IHRhcmdldEZyYW1l
LT5lZGl0b3IoKTsKLQotICAgIFN0cmluZyBjb21taXRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4
KHN0cik7Ci0gICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oY29tbWl0U3RyaW5nKTsKKyAg
ICAvLyBUaGlzIHNpZ25hbCB3aWxsIGZpcmUgZHVyaW5nIGEga2V5ZG93biBldmVudC4gV2Ugd2Fu
dCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgLy8gZmllbGQgdG8gY2hhbmdlIHJpZ2h0IGJlZm9y
ZSB0aGUga2V5dXAgZXZlbnQsIHNvIHdlIHdhaXQgdW50aWwgdGhlbiB0byBhY3R1YWxseQorICAg
IC8vIGNvbW1pdCB0aGlzIGNvbXBvc2l0aW9uLgorICAgIHBlbmRpbmdDb21wb3NpdGlvbiA9IGdf
c3RyZHVwKHN0cik7CiB9CiAKIHN0YXRpYyB2b2lkIGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKEd0
a0lNQ29udGV4dCogY29udGV4dCwgRWRpdG9yQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgRnJhbWUq
IGZyYW1lID0gY29yZShjbGllbnQtPm1fd2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBFZGl0b3IqIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsK
KyAgICBBU1NFUlQoIXBlbmRpbmdQcmVlZGl0KTsKIAotICAgIGdjaGFyKiBwcmVlZGl0ID0gTlVM
TDsKLSAgICBnaW50IGN1cnNvclBvcyA9IDA7CiAgICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRl
ZCBQYW5nb0F0dHJMaXN0IGZvciBub3cuCi0gICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRf
c3RyaW5nKGNvbnRleHQsICZwcmVlZGl0LCBOVUxMLCAmY3Vyc29yUG9zKTsKLSAgICBTdHJpbmcg
cHJlZWRpdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgocHJlZWRpdCk7Ci0gICAgZ19mcmVlKHBy
ZWVkaXQpOwotCi0gICAgLy8gc2V0Q29tcG9zaXRpb24oKSB3aWxsIHJlcGxhY2UgdGhlIHVzZXIg
c2VsZWN0aW9uIGlmIHBhc3NlZCBhbiBlbXB0eQotICAgIC8vIHByZWVkaXQuIFdlIGRvbid0IHdh
bnQgdGhpcyB0byBoYXBwZW4uCi0gICAgaWYgKHByZWVkaXRTdHJpbmcuaXNFbXB0eSgpICYmICFl
ZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxD
b21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICB1bmRlcmxpbmVzLmFwcGVuZChD
b21wb3NpdGlvblVuZGVybGluZSgwLCBwcmVlZGl0U3RyaW5nLmxlbmd0aCgpLCBDb2xvcigwLCAw
LCAwKSwgZmFsc2UpKTsKLSAgICBlZGl0b3ItPnNldENvbXBvc2l0aW9uKHByZWVkaXRTdHJpbmcs
IHVuZGVybGluZXMsIGN1cnNvclBvcywgMCk7CisgICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVk
aXRfc3RyaW5nKGNvbnRleHQsICZwZW5kaW5nUHJlZWRpdCwgTlVMTCwgTlVMTCk7CiB9CiAKIHZv
aWQgRWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgYWN0aXZlKQpAQCAtMTM2
LDEyICsxMjksMTYgQEAgaW50IEVkaXRvckNsaWVudDo6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KQogCiBib29sIEVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6OlJhbmdl
KikKIHsKKyAgICBjbGVhclBlbmRpbmdJTURhdGEoKTsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0
aW5nKFdlYkNvcmU6OlJhbmdlKikKIHsKKyAgICBjbGVhclBlbmRpbmdJTURhdGEoKTsKKwogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00MjEsNyArNDE4LDcg
QEAgc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJlc3NFbnRyaWVzW10gPSB7CiAgICAg
eyAnXHInLCAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciogaW50ZXJwcmV0
S2V5RXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZ0KQorc3RhdGljIGNvbnN0IGNoYXIqIGlu
dGVycHJldEVkaXRvckNvbW1hbmRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCiB7
CiAgICAgQVNTRVJUKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwg
ZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCkBAIC00NTYsNzQg
KzQ1MywxMTcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGludGVycHJldEtleUV2ZW50KGNvbnN0IEtl
eWJvYXJkRXZlbnQqIGV2dCkKICAgICByZXR1cm4gbWFwS2V5ID8ga2V5UHJlc3NDb21tYW5kc01h
cC0+Z2V0KG1hcEtleSkgOiAwOwogfQogCi1zdGF0aWMgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9h
cmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQpCitzdGF0aWMgYm9vbCBoYW5kbGVDYXJldEJyb3dz
aW5nS2V5Ym9hcmRFdmVudChGcmFtZSogZnJhbWUsIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCoga2V5RXZlbnQpCit7CisgICAgc3dpdGNoIChrZXlFdmVudC0+d2luZG93c1ZpcnR1YWxLZXlD
b2RlKCkpIHsKKyAgICAgICAgY2FzZSBWS19MRUZUOgorICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVy
OjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAorICAgICAgICAgICAgICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZULAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVu
dC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisg
ICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNl
bGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OlJJR0hULAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgp
ID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksCisgICAgICAgICAgICAg
ICAgICAgIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVktf
VVA6CisgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hp
ZnRLZXkoKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6Ok1PVkUsCisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tX
QVJELAorICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgpID8gUGFyYWdyYXBo
R3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCisgICAgICAgICAgICAgICAgICAgIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVktfRE9XTjoKKyAgICAg
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50LT5zaGlmdEtleSgpID8g
U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwK
KyAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwKKyAgICAg
ICAgICAgICAgICAgICAga2V5RXZlbnQtPmN0cmxLZXkoKSA/IFBhcmFncmFwaEdyYW51bGFyaXR5
IDogTGluZUdyYW51bGFyaXR5LAorICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBOb3QgYSBjYXJldCBicm93c3dpbmcga2V5c3Ryb2tlLCBzbyBjb250aW51ZSBwcm9j
ZXNzaW5nLgorICAgIH0KK30KKwordm9pZCBFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZl
bnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgTm9kZSogbm9kZSA9IGV2dC0+dGFyZ2V0
KCktPnRvTm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBldmVudC0+dGFyZ2V0KCktPnRvTm9kZSgp
OwogICAgIEFTU0VSVChub2RlKTsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAKLSAgICBjb25zdCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQqIGtleUV2ZW50ID0gZXZ0LT5rZXlFdmVudCgpOwotICAgIGlmICgha2V5RXZlbnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQq
IHBsYXRmb3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKTsKKyAgICBpZiAoIXBsYXRmb3JtRXZl
bnQpCisgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IGZyYW1lLT5z
ZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGlmIChjYXJldEJyb3dzaW5n
KSB7Ci0gICAgICAgIHN3aXRjaCAoa2V5RXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIFZLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLT5tb2RpZnkoa2V5RXZlbnQtPnNoaWZ0S2V5KCkgPyBTZWxlY3Rpb25Db250cm9sbGVy
OjpFWFRFTkQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlcjo6TEVGVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxh
cml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKLSAgICAgICAgICAgICAgICBm
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFy
YWN0ZXJHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBWS19VUDoKLSAgICAgICAg
ICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShrZXlFdmVudC0+c2hpZnRLZXkoKSA/
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGtleUV2ZW50LT5jdHJsS2V5KCkgPyBQYXJhZ3JhcGhH
cmFudWxhcml0eSA6IExpbmVHcmFudWxhcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRy
dWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgY2FzZSBWS19E
T1dOOgotICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KGtleUV2ZW50
LT5zaGlmdEtleSgpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5EIDogU2VsZWN0aW9uQ29u
dHJvbGxlcjo6TU9WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkZPUldBUkQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXlFdmVudC0+Y3RybEtleSgp
ID8gUGFyYWdyYXBoR3JhbnVsYXJpdHkgOiBMaW5lR3JhbnVsYXJpdHksCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQorICAgIGlmIChjYXJldEJyb3dzaW5nICYmIGhhbmRsZUNhcmV0QnJvd3NpbmdLZXlib2FyZEV2
ZW50KGZyYW1lLCBwbGF0Zm9ybUV2ZW50KSkgeworICAgICAgICAvLyBUaGlzIHdhcyBhIGNhcmV0
IGJyb3dzaW5nIGtleSBldmVudCwgc28gcHJldmVudCBpdCBmcm9tIGJ1YmJsaW5nIHVwIHRvIHRo
ZSBET00uCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoaW50ZXJwcmV0S2V5RXZlbnQoZXZ0KSk7CisgICAgLy8gRG9uJ3QgYWxsb3cg
ZWRpdG9yIGNvbW1hbmRzIG9yIHRleHQgaW5zZXJ0aW9uIGZvciBub2RlcyB0aGF0IGNhbm5vdCBl
ZGl0LgorICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpCisgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChrZXlFdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
UmF3S2V5RG93bikgewotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZv
cm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgY29tbWFuZHMgdGhhdCBqdXN0IGluc2Vy
dCB0ZXh0IGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3Igc2hvdWxkIGJlIHRyZWF0ZWQsCi0gICAgICAg
IC8vIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZSB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1t
ZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3Mg
ZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBU
YWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAgICAgIHJldHVybiAhY29tbWFuZC5pc1RleHRJ
bnNlcnRpb24oKSAmJiBjb21tYW5kLmV4ZWN1dGUoZXZ0KTsKKyAgICBjb25zdCBnY2hhciogZWRp
dG9yQ29tbWFuZFN0cmluZyA9IGludGVycHJldEVkaXRvckNvbW1hbmRLZXlFdmVudChldmVudCk7
CisgICAgaWYgKGVkaXRvckNvbW1hbmRTdHJpbmcpIHsKKyAgICAgICAgRWRpdG9yOjpDb21tYW5k
IGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoZWRpdG9yQ29tbWFuZFN0cmluZyk7
CisKKyAgICAgICAgLy8gT24gZWRpdG9yIGNvbW1hbmRzIGZyb20ga2V5IGRvd24gZXZlbnRzLCB3
ZSBvbmx5IHdhbnQgdG8gbGV0IHRoZSBldmVudCBidWJibGUgdXAgdG8KKyAgICAgICAgLy8gdGhl
IERPTSBpZiBpdCBpbnNlcnRzIHRleHQuIElmIGl0IGRvZXNuJ3QgaW5zZXJ0IHRleHQgKGUuZy4g
VGFiIHRoYXQgY2hhbmdlcyBmb2N1cykKKyAgICAgICAgLy8gd2UganVzdCB3YW50IFdlYktpdCB0
byBoYW5kbGUgaXQgaW1tZWRpYXRlbHkgd2l0aG91dCBhIERPTSBldmVudC4KKyAgICAgICAgaWYg
KHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURv
d24pIHsKKyAgICAgICAgICAgIGlmICghY29tbWFuZC5pc1RleHRJbnNlcnRpb24oKSAmJiBjb21t
YW5kLmV4ZWN1dGUoZXZlbnQpKQorICAgICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoY29tbWFu
ZC5leGVjdXRlKGV2ZW50KSkgeworICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29t
bWFuZC5leGVjdXRlKGV2dCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIFRoaXMgaXMg
anVzdCBhIG5vcm1hbCB0ZXh0IGluc2VydGlvbiwgc28gd2FpdCB0byBleGVjdXRlIHRoZSBpbnNl
cnRpb24KKyAgICAvLyB1bnRpbCBhIGtleXByZXNzIGV2ZW50IGhhcHBlbnMuIFRoaXMgd2lsbCBl
bnN1cmUgdGhhdCB0aGUgaW5zZXJ0aW9uIHdpbGwgbm90CisgICAgLy8gYmUgcmVmbGVjdGVkIGlu
IHRoZSBjb250ZW50cyBvZiB0aGUgZmllbGQgdW50aWwgdGhlIGtleXVwIERPTSBldmVudC4KKyAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewogCi0g
ICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkgY2Fu
IHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgotICAgIGlmIChldnQtPmNoYXJDb2RlKCkg
PCAnICcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHBlbmRpbmdDb21wb3Np
dGlvbikgeworICAgICAgICAgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOChwZW5kaW5nQ29tcG9zaXRpb24pOworICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5jb25maXJtQ29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcpOwogCi0gICAgLy8gRG9uJ3Qg
aW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMgcHJlc3NlZAotICAgIGlmIChrZXlFdmVu
dC0+Y3RybEtleSgpIHx8IGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2xlYXJQZW5kaW5nSU1EYXRhKCk7CisgICAgICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKIAotICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPmluc2Vy
dFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2dCk7Ci19CisgICAgICAgIH0gZWxzZSBp
ZiAocGVuZGluZ1ByZWVkaXQpIHsKKyAgICAgICAgICAgIFN0cmluZyBwcmVlZGl0U3RyaW5nID0g
U3RyaW5nOjpmcm9tVVRGOChwZW5kaW5nUHJlZWRpdCk7CiAKLXZvaWQgRWRpdG9yQ2xpZW50Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChoYW5k
bGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIGFuIGVtcHR5IHByZWVkaXQgYXMg
aXQgd2lsbCBkZXN0cm95IHRoZSBjdXJyZW50CisgICAgICAgICAgICAvLyBzZWxlY3Rpb24sIGV2
ZW4gaWYgdGhlIGNvbXBvc2l0aW9uIGlzIGNhbmNlbGxlZCBvciBmYWlscyBsYXRlciBvbi4KKyAg
ICAgICAgICAgIGlmICghcHJlZWRpdFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgICAgICAgICAg
ICAgdW5kZXJsaW5lcy5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUoMCwgcHJlZWRpdFN0cmlu
Zy5sZW5ndGgoKSwgQ29sb3IoMCwgMCwgMCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbihwcmVlZGl0U3RyaW5nLCB1bmRlcmxpbmVzLCAw
LCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2xlYXJQZW5kaW5nSU1EYXRhKCk7
CisgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0
ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAgICAgICAg
ICAgaWYgKGV2ZW50LT5jaGFyQ29kZSgpIDwgJyAnKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IGFueXRoaW5nIGlmIGEgbW9kaWZpZXIgaXMg
cHJlc3NlZAorICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQtPmN0cmxLZXkoKSB8fCBwbGF0
Zm9ybUV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQocGxhdGZvcm1FdmVudC0+dGV4dCgp
LCBldmVudCkpCisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhv
ZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCkBAIC01MzIsMTAgKzU3MiwxMCBAQCB2b2lk
IEVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2
ZW50KQogICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5lZGl0b3IoKS0+Y2Fu
RWRpdCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIGRlY2lk
ZSB3aGljaCBmaWx0ZXJlZCBrZXlzdHJva2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIElNCisgICAg
Ly8gZXZlbnRzIGFuZCB3aGljaCBzaG91bGQgbm90LgogICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiBwcml2ID0gbV93ZWJWaWV3LT5wcml2OwotICAgIC8vIFRPRE86IERpc3BhdGNoIElFLWNvbXBh
dGlibGUgdGV4dCBpbnB1dCBldmVudHMgZm9yIElNIGV2ZW50cy4KLSAgICBpZiAoZ3RrX2ltX2Nv
bnRleHRfZmlsdGVyX2tleXByZXNzKHByaXYtPmltQ29udGV4dCwgZXZlbnQtPmtleUV2ZW50KCkt
Pmdka0V2ZW50S2V5KCkpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICBndGtfaW1fY29udGV4dF9maWx0ZXJfa2V5cHJlc3MocHJpdi0+aW1Db250ZXh0LCBldmVudC0+
a2V5RXZlbnQoKS0+Z2RrRXZlbnRLZXkoKSk7CiB9CiAKIEVkaXRvckNsaWVudDo6RWRpdG9yQ2xp
ZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Rlc3RrZXlldmVudHMuYyBiL1dlYktpdC9ndGsvdGVzdHMvdGVzdGtleWV2ZW50cy5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzcyOGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RrZXlldmVudHMuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gUm9iaW5zb24KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGds
aWIvZ3N0ZGlvLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgorCisjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMiwgMTQsIDApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciogcGFnZTsKKyAg
Z2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkOworfSBUZXN0SW5mbzsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworICAgIEd0a1dpZGdldCogd2luZG93OworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Cisg
ICAgR01haW5Mb29wKiBsb29wOworICAgIFRlc3RJbmZvKiBpbmZvOworfSBLZXlFdmVudEZpeHR1
cmU7CisKK1Rlc3RJbmZvKgordGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBwYWdlLCBnYm9vbGVh
biBzaG91bGRCZUhhbmRsZWQpCit7CisgICAgVGVzdEluZm8qIGluZm87CisKKyAgICBpbmZvID0g
Z19zbGljZV9uZXcoVGVzdEluZm8pOworICAgIGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsK
KyAgICBpbmZvLT5zaG91bGRCZUhhbmRsZWQgPSBzaG91bGRCZUhhbmRsZWQ7CisKKyAgICByZXR1
cm4gaW5mbzsKK30KKwordm9pZAordGVzdF9pbmZvX2Rlc3Ryb3koVGVzdEluZm8qIGluZm8pCit7
CisgICAgZ19mcmVlKGluZm8tPnBhZ2UpOworICAgIGdfc2xpY2VfZnJlZShUZXN0SW5mbywgaW5m
byk7Cit9CisKK3N0YXRpYyB2b2lkIGtleV9ldmVudF9maXh0dXJlX3NldHVwKEtleUV2ZW50Rml4
dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQoreworICAgIGZpeHR1cmUtPmxvb3Ag
PSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7CisKKyAgICBmaXh0dXJlLT53aW5kb3cgPSBn
dGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBmaXh0dXJlLT53ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURHRVQoZml4
dHVyZS0+d2ViVmlldykpOworfQorCitzdGF0aWMgdm9pZCBrZXlfZXZlbnRfZml4dHVyZV90ZWFy
ZG93bihLZXlFdmVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAg
ICBndGtfd2lkZ2V0X2Rlc3Ryb3koZml4dHVyZS0+d2luZG93KTsKKyAgICBnX21haW5fbG9vcF91
bnJlZihmaXh0dXJlLT5sb29wKTsKKyAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJlLT5pbmZv
KTsKK30KKworc3RhdGljIGdib29sZWFuIGtleV9wcmVzc19ldmVudF9jYihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZl
bnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBnYm9vbGVh
biBoYW5kbGVkID0gR1RLX1dJREdFVF9HRVRfQ0xBU1MoZml4dHVyZS0+d2ViVmlldyktPmtleV9w
cmVzc19ldmVudChHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLCAmZXZlbnQtPmtleSk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGhhbmRsZWQsID09LCBmaXh0dXJlLT5pbmZvLT5zaG91bGRCZUhh
bmRsZWQpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCisKK3N0YXRpYyBnYm9vbGVhbiBrZXlf
cmVsZWFzZV9ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZlbnQs
IGdwb2ludGVyIGRhdGEpCit7CisgICAgLy8gV2ViQ29yZSBuZXZlciBzZWVtcyB0byBtYXJrIGtl
eXVwIGV2ZW50cyBhcyBoYW5kbGVkLgorICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChL
ZXlFdmVudEZpeHR1cmUqKWRhdGE7CisgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRf
R0VUX0NMQVNTKGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChm
aXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOworICAgIGdfYXNzZXJ0KCFoYW5kbGVkKTsK
KworICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCit7CisgICAgS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKKyAgICBXZWJLaXRMb2FkU3Rh
dHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Cisg
ICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgeworICAgICAgICBndGtfdGVz
dF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnYScpLCAwKTsK
KyAgICB9CisKK30KKworZ2Jvb2xlYW4gbWFwX2V2ZW50X2NiKEd0a1dpZGdldCAqd2lkZ2V0LCBH
ZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIGRhdGEpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2Zv
Y3VzKHdpZGdldCk7CisgICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4
dHVyZSopZGF0YTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImtl
eS1wcmVzcy1ldmVudCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGtleV9wcmVz
c19ldmVudF9jYiksIGZpeHR1cmUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2Vi
VmlldywgImtleS1yZWxlYXNlLWV2ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJB
Q0soa2V5X3JlbGVhc2VfZXZlbnRfY2IpLCBmaXh0dXJlKTsKKworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAorICAgICAgICAgICAg
ICAgICAgICAgR19DQUxMQkFDSyhsb2FkX3N0YXR1c19jYiksIGZpeHR1cmUpOworCisgICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8t
PnBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRm
LTgiLCAiZmlsZTovLyIpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0X2tleXByZXNzKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQoreworICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCisgICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOworCisgICAgZ3RrX3dpZGdl
dF9zaG93KGZpeHR1cmUtPndpbmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQo
Zml4dHVyZS0+d2ViVmlldykpOworICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZp
eHR1cmUtPndpbmRvdykpOworCisgICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwor
Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBnX3RocmVhZF9p
bml0KE5VTEwpOworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L3RleHRmaWVsZCIsIEtleUV2ZW50Rml4dHVyZSwKKyAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIg
dHlwZT1cInRleHRcIj4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c2NyaXB0PmRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iLCBUUlVFKSwKKyAgICAgICAgICAg
ICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9rZXlwcmVz
cywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvYnV0dG9ucyIsIEtleUV2ZW50Rml4dHVyZSwKKyAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIg
dHlwZT1cImJ1dHRvblwiPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTsiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICI8L3NjcmlwdD48L2JvZHk+PC9odG1sPiIsIEZBTFNFKSwKKyAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAorICAgICAgICAgICAgICAgdGVzdF9rZXlw
cmVzcywKKyAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKKworICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQvbGluayIsIEtleUV2ZW50Rml4dHVyZSwKKyAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxhIGhyZWY9XCJodHRwOi8v
d3d3Lmdub21lLm9yZ1wiIGlkPVwiaW5cIj4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJMSU5LWSBNQ0xJTktFUlNPTjwvYT48c2NyaXB0PiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iLCBGQUxTRSksCisg
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKKyAgICAgICAgICAgICAgIHRl
c3Rfa2V5cHJlc3MsCisgICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7
CisKKyAgICByZXR1cm4gZ190ZXN0X3J1bigpOworfQorCisjZWxzZQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ19jcml0aWNhbCgiWW91IHdpbGwgbmVlZCBhdCBs
ZWFzdCBHVEsrIDIuMTQuMCB0byBydW4gdGhlIHVuaXQgdGVzdHMuIik7CisgICAgcmV0dXJuIDA7
Cit9CisKKyNlbmRpZgotLSAKMS42LjAuNAoK
</data>

          </attachment>
      

    </bug>

</bugzilla>