<?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>103520</bug_id>
          
          <creation_ts>2012-11-28 06:26:15 -0800</creation_ts>
          <short_desc>On Linux, should be able to get spelling suggestions without selecting the misspelled word</short_desc>
          <delta_ts>2013-01-11 06:59:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>104528</blocked>
    
    <blocked>104531</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>andersca</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>enrica</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyatt</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mario</cc>
    
    <cc>mifenton</cc>
    
    <cc>morrita</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>777858</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-11-28 06:26:15 -0800</bug_when>
    <thetext>WebCore assumes that a misspelled word has to be selected to get its suggestions (https://trac.webkit.org/browser/trunk/Source/WebCore/editing/Editor.cpp#L1758).
context-menu-suggestions.html just invokes contextClick method (in fact it&apos;s right click on the given position) to get the context menu items.
IMHO we should modify the tests and emit double click to select the word to retrieve its suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777899</commentid>
    <comment_count>1</comment_count>
      <attachid>176483</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-11-28 07:36:49 -0800</bug_when>
    <thetext>Created attachment 176483
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778084</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-28 11:04:47 -0800</bug_when>
    <thetext>Shouldn&apos;t the word get selected when right clicking?  I think in Chromium we only select the word when it has the red misspelling underline.  Hmm, not sure where that happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778864</commentid>
    <comment_count>3</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-11-29 02:46:45 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Shouldn&apos;t the word get selected when right clicking?  I think in Chromium we only select the word when it has the red misspelling underline.  Hmm, not sure where that happens.

Thanks for your opinions. Yes, you&apos;re right. In Chromium, right click on the misspelled word makes the selection.

It looks like WebCore expects selection on misspelled word to retrieve suggestions so I&apos;ll check possibility to adapt this behaviour to EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778951</commentid>
    <comment_count>4</comment_count>
      <attachid>176483</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-11-29 05:46:14 -0800</bug_when>
    <thetext>Comment on attachment 176483
proposed patch

Clearing the review flag regarding to Tony&apos;s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779917</commentid>
    <comment_count>5</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-11-30 01:04:32 -0800</bug_when>
    <thetext>It seems that making selection for misspelled word it&apos;s common behaviour in WebKit.
Chromium is doing that at: https://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp#L306
This test passes for Mac too, so probably they are doing the same.

How about moving this ports specific implementation to common place to influence other WebKit ports?

I am not sure where it should be implemented. We can consider to change ContextMenuController::populate() method somewhere around https://trac.webkit.org/browser/trunk/Source/WebCore/page/ContextMenuController.cpp#L912</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780205</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-30 10:22:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; It seems that making selection for misspelled word it&apos;s common behaviour in WebKit.
&gt; Chromium is doing that at: https://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp#L306
&gt; This test passes for Mac too, so probably they are doing the same.

Mac is different.  It always highlights the word under the mouse pointer when you right click, even for non editable text.  See the code in EventHandler::sendContextMenuEvent and the shouldSelectOnContextualMenuClick behavior boolean.

&gt; How about moving this ports specific implementation to common place to influence other WebKit ports?
&gt; 
&gt; I am not sure where it should be implemented. We can consider to change ContextMenuController::populate() method somewhere around https://trac.webkit.org/browser/trunk/Source/WebCore/page/ContextMenuController.cpp#L912

Moving this logic to WebCore sounds OK, although it looks like this behavior may be platform specific (e.g., in gedit, if I turn on &quot;Highlight misspelled words&quot;, right clicking on a misspelled word doesn&apos;t select the word).  If we move it to WebCore, it should probably also have a boolean added to EditingBehavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782481</commentid>
    <comment_count>7</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-04 05:28:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; It seems that making selection for misspelled word it&apos;s common behaviour in WebKit.
&gt; &gt; Chromium is doing that at: https://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/ContextMenuClientImpl.cpp#L306
&gt; &gt; This test passes for Mac too, so probably they are doing the same.
&gt; 
&gt; Mac is different.  It always highlights the word under the mouse pointer when you right click, even for non editable text.  See the code in EventHandler::sendContextMenuEvent and the shouldSelectOnContextualMenuClick behavior boolean.

Right. Thanks for clarification.

&gt; 
&gt; &gt; How about moving this ports specific implementation to common place to influence other WebKit ports?
&gt; &gt; 
&gt; &gt; I am not sure where it should be implemented. We can consider to change ContextMenuController::populate() method somewhere around https://trac.webkit.org/browser/trunk/Source/WebCore/page/ContextMenuController.cpp#L912
&gt; 
&gt; Moving this logic to WebCore sounds OK, although it looks like this behavior may be platform specific (e.g., in gedit, if I turn on &quot;Highlight misspelled words&quot;, right clicking on a misspelled word doesn&apos;t select the word).  If we move it to WebCore, it should probably also have a boolean added to EditingBehavior.

I&apos;m in a favour of this proposal. I&apos;ll try to implementing it in that way. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785841</commentid>
    <comment_count>8</comment_count>
      <attachid>178211</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-07 06:05:24 -0800</bug_when>
    <thetext>Created attachment 178211
proposed patch - right click makes selection on misspelled word

This patch is based on Chromium implementation. Tested for 
 - WebKi2-Gtk&apos;s MiniBrowser as it implements spelling and context menu features.
 - WebKit2-EFL layout tests.

TODO:
 - context-menu-suggestions.html is still failing for WebKit-GTK, I am investigating it
 - I am wondering whether this policy could be applied to all Unix WebKit ports
 - I am not able to test how it influences Chromium as this change might make duplication/conflict with their original code. I&apos;d be nice if you could express your suggestions about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787045</commentid>
    <comment_count>9</comment_count>
      <attachid>178211</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-12-10 00:00:01 -0800</bug_when>
    <thetext>Comment on attachment 178211
proposed patch - right click makes selection on misspelled word

View in context: https://bugs.webkit.org/attachment.cgi?id=178211&amp;action=review

The basic approach looks good. I&apos;m asking for some house keeping.

&gt; Source/WebCore/editing/Editor.cpp:4
&gt; + * Copyright (C) 2012 Samsung Electronics

I would hold back doing this unless the size of contribution is significant.

&gt; Source/WebCore/editing/Editor.cpp:1691
&gt; +bool Editor::isWordMisspelledAtCaret(Node* clickedNode) const

If the code is based on Chromium&apos;s implementation, Please file a bug and add FIXME on Chromium side to use this code there.

&gt; Source/WebCore/page/EventHandler.cpp:2882
&gt; +    bool selectOnCtxMenu = m_frame-&gt;editor()-&gt;behavior().shouldSelectOnContextualMenuClick()

Please don&apos;t use abbreviation like ctx.

&gt; Source/WebCore/page/EventHandler.cpp:2886
&gt; +    bool selectOnCtxMenuForMisspelledWord = m_frame-&gt;editor()-&gt;behavior().shouldSelectOnContextualMenuClickForMisspelledWord()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787181</commentid>
    <comment_count>10</comment_count>
      <attachid>178511</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-10 04:00:43 -0800</bug_when>
    <thetext>Created attachment 178511
applied Morrita&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787302</commentid>
    <comment_count>11</comment_count>
      <attachid>178511</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-10 07:16:30 -0800</bug_when>
    <thetext>Comment on attachment 178511
applied Morrita&apos;s suggestions

View in context: https://bugs.webkit.org/attachment.cgi?id=178511&amp;action=review

&gt; Source/WebCore/editing/Editor.cpp:1715
&gt; +    int wordLength = word.length();

This could be moved after the return.

&gt; Source/WebCore/editing/Editor.cpp:1724
&gt; +    return misspellingLength == wordLength ? true : false;

I guess this could just be return misspellingLength == wordLength;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787320</commentid>
    <comment_count>12</comment_count>
      <attachid>178548</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-10 07:32:56 -0800</bug_when>
    <thetext>Created attachment 178548
apply Carlos&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787499</commentid>
    <comment_count>13</comment_count>
      <attachid>178548</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-10 10:31:45 -0800</bug_when>
    <thetext>Comment on attachment 178548
apply Carlos&apos;s suggestions

View in context: https://bugs.webkit.org/attachment.cgi?id=178548&amp;action=review

&gt; Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:307
&gt; +                // FIXME: WebCore selects the misspelled word on context menu, https://bugs.webkit.org/show_bug.cgi?id=104531.
&gt;                  data.misspelledWord = selectMisspelledWord(defaultMenu, selectedFrame);

Is it OK for Chromium Linux to run the code in EventHandler to select the word and to run this code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787626</commentid>
    <comment_count>14</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-10 12:14:38 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 178548 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178548&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/src/ContextMenuClientImpl.cpp:307
&gt; &gt; +                // FIXME: WebCore selects the misspelled word on context menu, https://bugs.webkit.org/show_bug.cgi?id=104531.
&gt; &gt;                  data.misspelledWord = selectMisspelledWord(defaultMenu, selectedFrame);
&gt; 
&gt; Is it OK for Chromium Linux to run the code in EventHandler to select the word and to run this code?

IMO it doesn&apos;t make sense to run this code once again as code in EventHandler will be applied for all Linux WebKit ports. But there are some differences between newly added code and the existing Chromium implementation like specific code for OS(DARWIN) etc. that I could build, run and test.

I created a bug for this issue (bug 104531) and leave FIXME message in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788081</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-10 23:37:42 -0800</bug_when>
    <thetext>I’m not sure if this is something we want on all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788085</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-10 23:39:54 -0800</bug_when>
    <thetext>This is not specific to GTK or EFL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788194</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-12-11 01:51:07 -0800</bug_when>
    <thetext>Grzegorz asked me to comment here about the situation on GTK+. GTK+ apps do not naturally highlight misspelled words when you right-click on them. On the other hand, I&apos;d prefer to fix spelling correction in WebKit sooner and worry about small differences from native apps later, especially if this assumption baked deeply into WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788218</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-11 02:20:00 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Grzegorz asked me to comment here about the situation on GTK+. GTK+ apps do not naturally highlight misspelled words when you right-click on them. On the other hand, I&apos;d prefer to fix spelling correction in WebKit sooner and worry about small differences from native apps later, especially if this assumption baked deeply into WebCore.

I don&apos;t think it&apos;s baked into WebCore. I&apos;m quite puzzled as to why this is needed for EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788224</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-11 02:23:43 -0800</bug_when>
    <thetext>I&apos;m not convinced that this is a good idea. Passing a test is good only if the tested behavior is desirable. Given that native apps behave differently according to comments here, we should probably implement whatever native Linux apps do instead of trying to match what we implemented for OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788236</commentid>
    <comment_count>20</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-11 02:40:48 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Grzegorz asked me to comment here about the situation on GTK+. GTK+ apps do not naturally highlight misspelled words when you right-click on them. On the other hand, I&apos;d prefer to fix spelling correction in WebKit sooner and worry about small differences from native apps later, especially if this assumption baked deeply into WebCore.
&gt; 
&gt; I don&apos;t think it&apos;s baked into WebCore. I&apos;m quite puzzled as to why this is needed for EFL port.

Currently, to get spelling suggestions user has to double click first (tried WebKit2-GTK with MiniBrowser, WebKit2-EFL&apos;s MiniBrowser lacks context menu feature).
WebCore expects selection to get spelling suggestions. see https://trac.webkit.org/browser/trunk/Source/WebCore/editing/Editor.cpp#L1759</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788242</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-11 02:50:08 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt;
&gt; Currently, to get spelling suggestions user has to double click first (tried WebKit2-GTK with MiniBrowser, WebKit2-EFL&apos;s MiniBrowser lacks context menu feature).
&gt; WebCore expects selection to get spelling suggestions. see https://trac.webkit.org/browser/trunk/Source/WebCore/editing/Editor.cpp#L1759

We can always change WebCore code. We shouldn&apos;t be deciding the UI behavior based on what WebCore currently does. That&apos;s backwards. We implement what user wants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788345</commentid>
    <comment_count>22</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-11 05:31:30 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt;
&gt; &gt; Currently, to get spelling suggestions user has to double click first (tried WebKit2-GTK with MiniBrowser, WebKit2-EFL&apos;s MiniBrowser lacks context menu feature).
&gt; &gt; WebCore expects selection to get spelling suggestions. see https://trac.webkit.org/browser/trunk/Source/WebCore/editing/Editor.cpp#L1759
&gt; 
&gt; We can always change WebCore code. We shouldn&apos;t be deciding the UI behavior based on what WebCore currently does. That&apos;s backwards. We implement what user wants.

It definitely makes sense.
Initially, when I found the reason of failing the test, I based on WebCore behaviour to solve this issue, especially if Enlightenment doesn&apos;t provide own text editor (they just invoke gedit) so it was hard to find out how the EFL should behave.
I will try to allow spelling suggestion without selection for EFL and GTK+ WebKit ports. Thanks for your opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792643</commentid>
    <comment_count>23</comment_count>
      <attachid>179721</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-17 05:32:01 -0800</bug_when>
    <thetext>Created attachment 179721
new approach - allow spelling suggestions without selection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792655</commentid>
    <comment_count>24</comment_count>
      <attachid>179721</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-17 05:59:01 -0800</bug_when>
    <thetext>Comment on attachment 179721
new approach - allow spelling suggestions without selection 

Attachment 179721 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15364757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792669</commentid>
    <comment_count>25</comment_count>
      <attachid>179728</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-17 06:10:54 -0800</bug_when>
    <thetext>Created attachment 179728
fix build break on Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792690</commentid>
    <comment_count>26</comment_count>
      <attachid>179728</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-17 06:45:41 -0800</bug_when>
    <thetext>Comment on attachment 179728
fix build break on Mac

Attachment 179728 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15374734</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792726</commentid>
    <comment_count>27</comment_count>
      <attachid>179744</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-12-17 07:57:20 -0800</bug_when>
    <thetext>Created attachment 179744
update WebCore.exp.in</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792812</commentid>
    <comment_count>28</comment_count>
      <attachid>179744</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-17 10:07:11 -0800</bug_when>
    <thetext>Comment on attachment 179744
update WebCore.exp.in

View in context: https://bugs.webkit.org/attachment.cgi?id=179744&amp;action=review

&gt; Source/WebCore/editing/EditingBehavior.h:67
&gt; +#if PLATFORM(EFL) || PLATFORM(GTK)

It&apos;s probably better to say !PLATFORM(CHROMIUM) in accordance with the comment.
Or does Qt port not want this behavior?

&gt; Source/WebCore/editing/Editor.cpp:1684
&gt; +// Helper function to determine whether text is a single word.

We prefer having only &quot;why&quot; comments. This comment repeats the code. Please remove it.

&gt; Source/WebCore/editing/Editor.cpp:1688
&gt; +    return it &amp;&amp; textBreakNext(it) == static_cast&lt;int&gt;(text.length());

I don&apos;t think you can call wordBreakIterator like this on a fragment of text. There are cases where wordBreakIterator needs more context than the word itself to determine whether something is a word or not (e.g. CJK).

&gt; Source/WebCore/editing/Editor.cpp:1693
&gt; +    // Don&apos;t do anything if the spelling for the node is forbidden.

Again, this comment says what the code below already tells us. Please remove it.

&gt; Source/WebCore/editing/Editor.cpp:1708
&gt; +    // Get selected text to check for multiple word selection.
&gt; +    String selectedString = selectedText().stripWhiteSpace();
&gt; +
&gt; +    if (!selectedString.isEmpty()) {
&gt; +        // Don&apos;t provide suggestions for multiple words.
&gt; +        if (!isASingleWord(selectedString))
&gt; +            return String();
&gt; +    }

You should use nextWordPosition and so forth to check whether there are more than one word included in the selection.
r- because of this.

&gt; Source/WebCore/editing/Editor.cpp:1710
&gt; +    // Get the word arround the caret.

Instead of adding a comment like this, please extract the code that extracts the word around the caret as a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792814</commentid>
    <comment_count>29</comment_count>
      <attachid>179744</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-17 10:09:57 -0800</bug_when>
    <thetext>Comment on attachment 179744
update WebCore.exp.in

View in context: https://bugs.webkit.org/attachment.cgi?id=179744&amp;action=review

&gt; Source/WebCore/page/ContextMenuController.cpp:348
&gt; +            frame-&gt;selection()-&gt;modify(FrameSelection::AlterationMove, DirectionBackward, WordGranularity, UserTriggered);
&gt; +            frame-&gt;editor()-&gt;deleteWithDirection(DirectionForward, WordGranularity, false, true);
&gt; +            TypingCommand::insertText(frame-&gt;document(), item-&gt;title(), 0);

We need to call shouldInsertText here as we do it in non-Linux case. We also should be using ReplaceSelectionCommand instead of deleteWordWithDirection and insertText.
Finally, I&apos;m not certain why we don&apos;t want to call revealSelection here. r- because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802244</commentid>
    <comment_count>30</comment_count>
      <attachid>179744</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-08 07:39:03 -0800</bug_when>
    <thetext>Comment on attachment 179744
update WebCore.exp.in

View in context: https://bugs.webkit.org/attachment.cgi?id=179744&amp;action=review

&gt;&gt; Source/WebCore/editing/EditingBehavior.h:67
&gt;&gt; +#if PLATFORM(EFL) || PLATFORM(GTK)
&gt; 
&gt; It&apos;s probably better to say !PLATFORM(CHROMIUM) in accordance with the comment.
&gt; Or does Qt port not want this behavior?

Right. Applied for non Chromium ports.

&gt;&gt; Source/WebCore/editing/Editor.cpp:1684
&gt;&gt; +// Helper function to determine whether text is a single word.
&gt; 
&gt; We prefer having only &quot;why&quot; comments. This comment repeats the code. Please remove it.

OK, this function is no longer needed so it was removed.

&gt;&gt; Source/WebCore/editing/Editor.cpp:1688
&gt;&gt; +    return it &amp;&amp; textBreakNext(it) == static_cast&lt;int&gt;(text.length());
&gt; 
&gt; I don&apos;t think you can call wordBreakIterator like this on a fragment of text. There are cases where wordBreakIterator needs more context than the word itself to determine whether something is a word or not (e.g. CJK).

Thanks for the hint. I was trying to use nextWordPostion/rightWordPosition as you mentioned but in this case I had to take of some conditions to meet the requirements. I propose to check the range between the word under the caret (using expandUsingGranularity) and real selection. If they are different it means that the selection was made on multiple words. However, we allow to get suggestion when the misspelled word is selected.
expandUsingGranularity and freiends are using nextWordPostion as so on.

&gt;&gt; Source/WebCore/editing/Editor.cpp:1693
&gt;&gt; +    // Don&apos;t do anything if the spelling for the node is forbidden.
&gt; 
&gt; Again, this comment says what the code below already tells us. Please remove it.

Removed.

&gt;&gt; Source/WebCore/editing/Editor.cpp:1708
&gt;&gt; +    }
&gt; 
&gt; You should use nextWordPosition and so forth to check whether there are more than one word included in the selection.
&gt; r- because of this.

Did it through expandUsingGranularity to do not take care of all needed conditions.

&gt;&gt; Source/WebCore/editing/Editor.cpp:1710
&gt;&gt; +    // Get the word arround the caret.
&gt; 
&gt; Instead of adding a comment like this, please extract the code that extracts the word around the caret as a function.

The method&apos;s content has been changed. Please let me know if the extract of this functionality is still needed.

&gt;&gt; Source/WebCore/page/ContextMenuController.cpp:348
&gt;&gt; +            TypingCommand::insertText(frame-&gt;document(), item-&gt;title(), 0);
&gt; 
&gt; We need to call shouldInsertText here as we do it in non-Linux case. We also should be using ReplaceSelectionCommand instead of deleteWordWithDirection and insertText.
&gt; Finally, I&apos;m not certain why we don&apos;t want to call revealSelection here. r- because of this.

Ok, added shouldInsertText() call for non-Linux case as well as revealSelection(). I am not sure if we can use ReplaceSelectionCommand as it requires the selection that is made on FrameSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802245</commentid>
    <comment_count>31</comment_count>
      <attachid>181693</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-08 07:40:51 -0800</bug_when>
    <thetext>Created attachment 181693
applied  Ryosuke&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802373</commentid>
    <comment_count>32</comment_count>
      <attachid>181693</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-08 10:52:59 -0800</bug_when>
    <thetext>Comment on attachment 181693
applied  Ryosuke&apos;s suggestions

View in context: https://bugs.webkit.org/attachment.cgi?id=181693&amp;action=review

&gt; Source/WebCore/editing/Editor.cpp:1693
&gt; +    // Get the word&apos;s range arround the caret.

This comment repeats what the code says already. Please remove.

&gt; Source/WebCore/editing/Editor.cpp:1694
&gt; +    VisibleSelection wordSelection(selection.start());

You should use selection.base() instead.

&gt; Source/WebCore/editing/Editor.cpp:1698
&gt; +    // If some text was selected, don&apos;t provide suggestions for the multiple words.

I don&apos;t think this comment is accurate. The selection could be selecting a part of word instead for the condition below to be true.
Either you have to update the comment or the code, and this is why I prefer making the code self-evident over adding comments.

Also, if you&apos;re adding a comment, please provide &quot;why&quot; comment instead of &quot;what&quot;. In particular, it&apos;s helpful to know why we don&apos;t want to provide suggestions when the current selection doesn&apos;t exactly match the wordSelection.

At glance, I found it odd that we do this because the bug says we should be able to provide suggestions without selection words and yet we bail out when there&apos;s a selection that doesn&apos;t match wordSelection.

&gt; Source/WebCore/editing/Editor.cpp:1714
&gt; +String Editor::misspelledSelection() const

We should rename this to something like misspelledSelectionString instead.

&gt; Source/WebCore/page/ContextMenuController.cpp:349
&gt; +                frame-&gt;selection()-&gt;modify(FrameSelection::AlterationMove, DirectionBackward, WordGranularity, UserTriggered);
&gt; +                frame-&gt;editor()-&gt;deleteWithDirection(DirectionForward, WordGranularity, false, true);

This ain&apos;t right. This, under certain conditions, results in a different selection than VisibleSelection with word granularity. You should do what you did in misspelledWordAtCaretOrRange instead to make sure the selection matches.

&gt; Source/WebCore/page/ContextMenuController.cpp:350
&gt; +                TypingCommand::insertText(document, item-&gt;title(), 0);

Please use ReplaceSelectionCommand and share the code with the else clause.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803181</commentid>
    <comment_count>33</comment_count>
      <attachid>181885</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-09 02:51:48 -0800</bug_when>
    <thetext>Created attachment 181885
polish the patch regarding to Ryosuke&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803467</commentid>
    <comment_count>34</comment_count>
      <attachid>181885</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-09 10:38:12 -0800</bug_when>
    <thetext>Comment on attachment 181885
polish the patch regarding to Ryosuke&apos;s comments

View in context: https://bugs.webkit.org/attachment.cgi?id=181885&amp;action=review

&gt; Source/WebCore/page/ContextMenuController.cpp:361
&gt; -            frame-&gt;selection()-&gt;revealSelection(ScrollAlignment::alignToEdgeIfNeeded);
&gt; +            frameSelection-&gt;revealSelection(ScrollAlignment::alignToEdgeIfNeeded);

Don&apos;t you want to restore selection in this case? Otherwise the caret appears after the replaced text. Is that desired behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803549</commentid>
    <comment_count>35</comment_count>
      <attachid>181885</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-09 11:52:55 -0800</bug_when>
    <thetext>Comment on attachment 181885
polish the patch regarding to Ryosuke&apos;s comments

View in context: https://bugs.webkit.org/attachment.cgi?id=181885&amp;action=review

&gt;&gt; Source/WebCore/page/ContextMenuController.cpp:361
&gt;&gt; +            frameSelection-&gt;revealSelection(ScrollAlignment::alignToEdgeIfNeeded);
&gt; 
&gt; Don&apos;t you want to restore selection in this case? Otherwise the caret appears after the replaced text. Is that desired behavior?

Actually, I don&apos;t have strong opinion on that. I just followed non Linux case where the caret is shown after the replaced text. Additionally it also makes selection on replaced text (replaceOptions |= ReplaceSelectionCommand::SelectReplacement;)

From UX point of view (I believe) it&apos;s good that the caret appears after, in common case user has just replaced the text with the given suggestion and he probably won&apos;t be interested in modification it once again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804996</commentid>
    <comment_count>36</comment_count>
      <attachid>181885</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-10 23:36:41 -0800</bug_when>
    <thetext>Comment on attachment 181885
polish the patch regarding to Ryosuke&apos;s comments

Ryosuke, Tony and Hajime - thanks for supporting me in this bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805009</commentid>
    <comment_count>37</comment_count>
      <attachid>181885</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-10 23:55:35 -0800</bug_when>
    <thetext>Comment on attachment 181885
polish the patch regarding to Ryosuke&apos;s comments

Clearing flags on attachment: 181885

Committed r139412: &lt;http://trac.webkit.org/changeset/139412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>805010</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-10 23:55:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176483</attachid>
            <date>2012-11-28 07:36:49 -0800</date>
            <delta_ts>2012-12-07 06:05:24 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>3160</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1M2EwMDFkLi4wYTk0ZmQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTEt
MjggIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF1bR1RLXSBjb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBmYWlscy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzUyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkNvcmUgYXNz
dW1lcyB0aGF0IGEgbWlzc3BlbGxlZCB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCB0byBnZXQgaXRz
IHN1Z2dlc3Rpb25zLgorICAgICAgICBjb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBqdXN0
IGludm9rZXMgY29udGV4dENsaWNrIG1ldGhvZCAoaW4gZmFjdCByaWdodCBjbGljaworICAgICAg
ICBvbiB0aGUgZ2l2ZW4gcG9zaXRpb24pIHRvIGdldCB0aGUgY29udGV4dCBtZW51IGl0ZW1zLgor
ICAgICAgICBXZSBuZWVkIHRvIGVtaXQgZG91YmxlIGNsaWNrIGluIHRoaXMgdGVzdCB0byBzZWxl
Y3QgdGhlIHdvcmQgdG8gcmV0cmlldmUgaXRzIHN1Z2dlc3Rpb25zLgorCisgICAgICAgICogZWRp
dGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbDogRW1pdCBkb3VibGUg
Y2xpY2sgdG8gc2VsZWN0IGEgd29yZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvVGVzdEV4cGVj
dGF0aW9uczogVW5za2lwIGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1sCisgICAgICAgICog
cGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6IERpdHRvLgorCiAyMDEyLTExLTI4ICBKdXNz
aSBLdWtrb25lbiAgPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtX
SzJdIGFkZCBmbGFreSByZXN1bHRzIGFmdGVyIHIxMzU5MzUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2VkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1sCmlu
ZGV4IDYzOWQ3YjcuLjZiNTU2MzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvc3Bl
bGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbApAQCAtMjEsNyArMjEs
MTMgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIC8vIFRoZSB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCB0byBnZXQg
aXRzIHN1Z2dlc3Rpb25zLgogICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHgsIHkpOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAg
ICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisK
ICAgICB2YXIgaXRlbU5hbWVzV2l0aG91dFNwZWxsQ2hlY2tpbmcgPSBldmVudFNlbmRlci5jb250
ZXh0Q2xpY2soKTsKIAogICAgIGlucHV0LnNldEF0dHJpYnV0ZSgic3BlbGxjaGVjayIsICJ0cnVl
Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDEzZTgy
YzAuLmYyNzlmYWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25z
CkBAIC0xNjg1LDcgKzE2ODUsNCBAQCBCdWcoRUZMKSBodHRwL3Rlc3RzL3NlY3VyaXR5L2lzb2xh
dGVkV29ybGQvd29ybGQtcmV1c2UuaHRtbCBbIEZhaWx1cmUgXQogIyBTdGFydCBvZiBtZWRpYSBw
bGF5ZXIgY2F1c2VzIHRpbWVvdXQuCiBCdWcoRUZMKSBtZWRpYS9jb250cm9scy1yaWdodC1jbGlj
ay1vbi10aW1lYmFyLmh0bWwgWyBGYWlsdXJlIF0KIAotIyBObyBzcGVsbGNoZWNrIHN1Z2dlc3Rp
b25zIGluIGNvbnRleHQgbWVudQotQnVnKEVGTCkgZWRpdGluZy9zcGVsbGluZy9jb250ZXh0LW1l
bnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQotCiB3ZWJraXQub3JnL2IvMTAyNTU3IGZh
c3QvYmFja2dyb3VuZHMvYmFja2dyb3VuZC1vcGFxdWUtaW1hZ2VzLW92ZXItY29sb3IuaHRtbCBb
IEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCAwMDE2OTQyLi4wYTEyZmY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtOTQ1LDkgKzk0NSw2IEBAIHdlYmtpdC5vcmcvYi85OTAwMSBpbnNwZWN0b3Iv
cHJvZmlsZXIvbWVtb3J5LWluc3RydW1lbnRhdGlvbi1jYW52YXMuaHRtbCBbIEZhaWx1CiB3ZWJr
aXQub3JnL2IvMzc2MTMgd2Via2l0Lm9yZy9iLzIwMDExIHByaW50aW5nIFsgU2tpcCBdCiB3ZWJr
aXQub3JnL2IvMzc2MTMgZWRpdGluZy9leGVjQ29tbWFuZC9wcmludC5odG1sIFsgU2tpcCBdCiAK
LSMgTmVlZCB0byBkdW1wIGNvbnRleHQgbWVudSBpdGVtcyBvbiBldmVudFNlbmRlci5jb250ZXh0
Q2xpY2sodHJ1ZSkuCi13ZWJraXQub3JnL2IvMzkxMDIgZWRpdGluZy9zcGVsbGluZy9jb250ZXh0
LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQotCiAjIFNvbWUgaW5wdXQgdHlwZT1y
YW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2YgdGhlIHNpemUKICMgb2YgdGhlIHNsaWRlciB0aHVt
YiBpbiBHVEsrIHRoZW1lcy4KIEJ1ZyhHVEspIGZhc3QvZm9ybXMvcmFuZ2Uvc2xpZGVyLW1vdXNl
LWV2ZW50cy5odG1sIFsgRmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178211</attachid>
            <date>2012-12-07 06:05:24 -0800</date>
            <delta_ts>2012-12-10 04:00:43 -0800</delta_ts>
            <desc>proposed patch - right click makes selection on misspelled word</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>9620</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNTBjOGY5Li5mMGUzY2QyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMTIt
MDcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF1bR1RLXSBjb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBmYWlscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5za2lwIGNvbnRl
eHQtbWVudS1zdWdnZXN0aW9ucy5odG1sIGZvciBXZWJLaXQyLUVGTCBhcyBpdCBwYXNzZXMgbm93
LgorCisgICAgICAgICogcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMTIt
MDcgIErDoW5vcyBCYWRpY3MgIDxqYmFkaWNzQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBb
UXRdIEdhcmRlbmluZyBhZnRlciByMTM2ODU3LCByMTM2ODkzIGFuZCAxMzY5MTkuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGQxYjQ3NzMuLmIyYjAwMTAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNjgwLDkg
KzE2ODAsNiBAQCB3ZWJraXQub3JnL2IvNjExMzggaHR0cC90ZXN0cy93M2Mvd2VicGVyZi9zdWJt
aXNzaW9uL3Jlc291cmNlLXRpbWluZyBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTAzMTA5IGZh
c3QvZG9tL3NoYWRvdy9ob3N0LXdyYXBwZXItcmVjbGFpbWVkLmh0bWwgWyBGYWlsdXJlIF0KIAot
IyBObyBzcGVsbGNoZWNrIHN1Z2dlc3Rpb25zIGluIGNvbnRleHQgbWVudQotQnVnKEVGTCkgZWRp
dGluZy9zcGVsbGluZy9jb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQot
CiAjIE5ld2x5IGFkZGVkIHRlc3QgaW4gcjEzNjIyNSBmYWlscyBvbiBHVEsgYm90IHRvby4KIHdl
YmtpdC5vcmcvYi8xMDM3NDAgZWRpdGluZy9zZWxlY3Rpb24vY2FyZXQtYWxpZ25tZW50LWZvci12
ZXJ0aWNhbC10ZXh0Lmh0bWwgWyBGYWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDBlM2U0YjkuLmFh
NmRlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0xMi0wNyAgR3J6ZWdvcnog
Q3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXVtH
VEtdIGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1sIGZhaWxzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbiBjb250ZXh0dWFsIG1lbnUsIHNlbGVj
dCB0aGUgbWlzc3BlbGxlZCB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisgICAgICAgIFRoaXMgYmVo
YXZpb3IgaXMgYXBwbGllZCBmb3IgVW5peCBXZWJLaXQgcG9ydHMuCisgICAgICAgIFdlYkNvcmUg
YXNzdW1lcyB0aGF0IGEgbWlzc3BlbGxlZCB3b3JkIGhhcyB0byBiZSBzZWxlY3RlZCB0byBnZXQg
aXRzIHN1Z2dlc3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBjb250
ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbC4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ0Jl
aGF2aW9yLmg6CisgICAgICAgIChFZGl0aW5nQmVoYXZpb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ0JlaGF2aW9yOjpzaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2tGb3JNaXNz
cGVsbGVkV29yZCk6CisgICAgICAgIEFkZCBhIG5ldyBiZWhhdmlvciBmb3IgVW5peCwgdG8gc2Vs
ZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQgb24gY3R4IG1lbnUuCisKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY29uc3QgbW9kaWZpZXIsIHRv
IHVzZSB0aGUgbWV0aG9kIGluICdpc1dvcmRNaXNzcGVsbGVkQXRDYXJldCgpIGNvbnN0Jy4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNBU2luZ2xlV29yZCk6CisgICAg
ICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0ZXh0IGlzIGEgc2luZ2xl
IHdvcmQuIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6aXNXb3JkTWlzc3BlbGxlZEF0Q2FyZXQpOgorICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhl
IHdvcmQgdW5kZXIgdGhlIGNhcmV0IGlzIG1pc3NwZWxsZWQuCisKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5oOgorICAgICAgICAoRWRpdG9yKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50KToKKyAgICAgICAgU2VsZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQgb24gY29udGV4dCBtZW51
LgorCisKIDIwMTItMTItMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFVzZSBhbHdheXMgdGhlIG9yZGVyIGl0ZXJhdG9yIGZyb20gZGF0YSBt
ZW1iZXIgaW4gUmVuZGVyRmxleGlibGVCb3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdC
ZWhhdmlvci5oCmluZGV4IDk0MTQzMGYuLjgxNzI4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nQmVoYXZpb3IuaApAQCAtNTksNiArNTksOSBAQCBwdWJsaWM6CiAKICAgICAvLyBP
biBNYWMsIHdoZW4gcHJvY2Vzc2luZyBhIGNvbnRleHR1YWwgY2xpY2ssIHRoZSBvYmplY3QgYmVp
bmcgY2xpY2tlZCB1cG9uIHNob3VsZCBiZSBzZWxlY3RlZC4KICAgICBib29sIHNob3VsZFNlbGVj
dE9uQ29udGV4dHVhbE1lbnVDbGljaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBFZGl0aW5n
TWFjQmVoYXZpb3I7IH0KKworICAgIC8vIE9uIGEgY29udGV4dHVhbCBjbGljaywgdGhlIHdvcmQg
YmVpbmcgY2xpY2tlZCB1cG9uIHNob3VsZCBiZSBzZWxlY3RlZCBpZiBpdCdzIG1pc3NwZWxsZWQu
CisgICAgYm9vbCBzaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2tGb3JNaXNzcGVsbGVk
V29yZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBFZGl0aW5nVW5peEJlaGF2aW9yOyB9CiAg
ICAgCiAgICAgLy8gT24gTWFjIGFuZCBXaW5kb3dzLCBwcmVzc2luZyBiYWNrc3BhY2UgKHdoZW4g
aXQgaXNuJ3QgaGFuZGxlZCBvdGhlcndpc2UpIHNob3VsZCBuYXZpZ2F0ZSBiYWNrLgogICAgIGJv
b2wgc2hvdWxkTmF2aWdhdGVCYWNrT25CYWNrc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
IT0gRWRpdGluZ1VuaXhCZWhhdmlvcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IDZkYTk2NWUuLmMxNTM1NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTEsNiAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwODksNyArMTA5MCw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0KQogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndy
aXRlSW1hZ2UocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLCB1cmwsIHJlc3VsdC5hbHREaXNw
bGF5U3RyaW5nKCkpOwogfQogCi1ib29sIEVkaXRvcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKQorYm9vbCBFZGl0b3I6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CkBAIC0xNjgwLDYgKzE2ODEsNTAgQEAgdm9pZCBF
ZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KQogICAgIH0KIH0KIAorLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRl
eHQgaXMgYSBzaW5nbGUgd29yZC4KK3N0YXRpYyBib29sIGlzQVNpbmdsZVdvcmQoY29uc3QgU3Ry
aW5nJiB0ZXh0KQoreworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJh
dG9yKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gaXQgJiYg
dGV4dEJyZWFrTmV4dChpdCkgPT0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Lmxlbmd0aCgpKTsKK30K
KworYm9vbCBFZGl0b3I6OmlzV29yZE1pc3NwZWxsZWRBdENhcmV0KE5vZGUqIGNsaWNrZWROb2Rl
KSBjb25zdAoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBzcGVsbGluZyBmb3Ig
dGhlIG5vZGUgaXMgZm9yYmlkZGVuLgorICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
Y2xpY2tlZE5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBp
ZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFzZWxlY3Rpb24uaXNDYXJldCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBHZXQgc2VsZWN0ZWQgdGV4dCB0byBj
aGVjayBmb3IgbXVsdGlwbGUgd29yZCBzZWxlY3Rpb24uCisgICAgU3RyaW5nIHNlbGVjdGVkU3Ry
aW5nID0gc2VsZWN0ZWRUZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICAvLyBJZiBzb21l
IHRleHRzIHdlcmUgYWxyZWFkeSBzZWxlY3RlZCwgd2UgZG9uJ3QgY2hhbmdlIHRoZSBzZWxlY3Rp
b24uCisgICAgaWYgKCFzZWxlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRG9u
J3QgcHJvdmlkZSBzdWdnZXN0aW9ucyBmb3IgbXVsdGlwbGUgd29yZHMuCisgICAgICAgIGlmICgh
aXNBU2luZ2xlV29yZChzZWxlY3RlZFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB3b3JkIGFycm91bmQgdGhlIGNhcmV0LgorICAgIHNl
bGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEFT
U0VSVChyYW5nZSk7CisgICAgU3RyaW5nIHdvcmQgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS0+dGV4dCgpOworICAgIGludCB3b3JkTGVuZ3RoID0gd29yZC5sZW5ndGgoKTsKKworICAg
IGlmICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1pc3NwZWxsaW5n
TGVuZ3RoID0gMDsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcod29y
ZC5jaGFyYWN0ZXJzKCksIHdvcmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3Bl
bGxpbmdMZW5ndGgpOworCisgICAgcmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09IHdvcmRMZW5n
dGggPyB0cnVlIDogZmFsc2U7Cit9CisKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxs
ZWQoKQogewogICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMTUyMzRkYi4uMWE0YzlmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBib29s
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgYm9vbCBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlQ29udGludW91
c1NwZWxsQ2hlY2tpbmcoKTsKICAgICBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwog
ICAgIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7CkBAIC0yMjIsNiArMjIyLDcgQEAgcHVi
bGljOgogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpOwogICAgIGJvb2wgaXNTZWxl
Y3Rpb25VbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsK
KyAgICBib29sIGlzV29yZE1pc3NwZWxsZWRBdENhcmV0KE5vZGUqIGNsaWNrZWROb2RlKSBjb25z
dDsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwog
ICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAg
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxl
Y3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggM2Y3MjE5Ny4uNTgyOTI1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjg3NiwxMyArMjg3NiwxOCBAQCBib29sIEV2ZW50
SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dmVudCkKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUp
OwogICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgbWV2ID0gZG9jLT5wcmVwYXJlTW91
c2VFdmVudChyZXF1ZXN0LCB2aWV3cG9ydFBvcywgZXZlbnQpOwogCi0gICAgaWYgKG1fZnJhbWUt
PmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGljaygp
Ci0gICAgICAgICYmICFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+Y29udGFpbnModmlld3BvcnRQb3Mp
Ci0gICAgICAgICYmICFtZXYuc2Nyb2xsYmFyKCkKLSAgICAgICAgLy8gRklYTUU6IEluIHRoZSBl
ZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2VsZWN0cyBjb250ZW50IHRo
YXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCi0gICAgICAgIC8vIElmIHRoZSBzZWxlY3Rp
b24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0byBtYWtlIGl0IGVhc2ll
ciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcwotICAgICAgICAvLyBhdmFpbGFibGUg
Zm9yIHRleHQgc2VsZWN0aW9ucy4gIEJ1dCBvbmx5IGlmIHdlJ3JlIGFib3ZlIHRleHQuCi0gICAg
ICAgICYmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKSB8fCAobWV2
LnRhcmdldE5vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgpLT5pc1RleHROb2RlKCkpKSkgeworICAg
IC8vIEZJWE1FOiBJbiB0aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVz
IHNlbGVjdHMgY29udGVudCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNlLgorICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0
byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcworICAgIC8v
IGF2YWlsYWJsZSBmb3IgdGV4dCBzZWxlY3Rpb25zLiBCdXQgb25seSBpZiB3ZSdyZSBhYm92ZSB0
ZXh0LgorICAgIGJvb2wgc2VsZWN0T25DdHhNZW51ID0gbV9mcmFtZS0+ZWRpdG9yKCktPmJlaGF2
aW9yKCkuc2hvdWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkKKyAgICAgICAgJiYgKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtZXYudGFyZ2V0Tm9k
ZSgpICYmIG1ldi50YXJnZXROb2RlKCktPmlzVGV4dE5vZGUoKSkpOworCisgICAgLy8gVGhlIG1p
c3NwZWxsZWQgd29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgdG8gcmV0cmlldmUgaXRzIHN1Z2dlc3Rp
b25zLgorICAgIGJvb2wgc2VsZWN0T25DdHhNZW51Rm9yTWlzc3BlbGxlZFdvcmQgPSBtX2ZyYW1l
LT5lZGl0b3IoKS0+YmVoYXZpb3IoKS5zaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2tG
b3JNaXNzcGVsbGVkV29yZCgpCisgICAgICAgICYmIG1fZnJhbWUtPmVkaXRvcigpLT5pc1dvcmRN
aXNzcGVsbGVkQXRDYXJldChtZXYudGFyZ2V0Tm9kZSgpKTsKKworICAgIGlmICghbV9mcmFtZS0+
c2VsZWN0aW9uKCktPmNvbnRhaW5zKHZpZXdwb3J0UG9zKQorICAgICAgICAmJiAoc2VsZWN0T25D
dHhNZW51IHx8IHNlbGVjdE9uQ3R4TWVudUZvck1pc3NwZWxsZWRXb3JkKSkgewogICAgICAgICBt
X21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gdHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBh
cmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9ybSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RD
bG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KG1ldik7CiAgICAgfQo=
</data>
<flag name="review"
          id="194651"
          type_id="1"
          status="-"
          setter="morrita"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178511</attachid>
            <date>2012-12-10 04:00:43 -0800</date>
            <delta_ts>2012-12-10 12:22:45 -0800</delta_ts>
            <desc>applied Morrita&apos;s suggestions</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>11788</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNTBjOGY5Li5jMTE5M2NhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MDcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF1bR1RLXSBjb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBmYWlscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9l
ZmwvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgVW5za2lwIGNvbnRleHQtbWVudS1zdWdnZXN0
aW9ucy5odG1sIGZvciBXZWJLaXQtRUZMIGFzIGl0IHBhc3NlcyBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgVXBkYXRlIGZhaWxpbmcgcmVh
c29uLgorCiAyMDEyLTEyLTA3ICBKw6Fub3MgQmFkaWNzICA8amJhZGljc0BpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgW1F0XSBHYXJkZW5pbmcgYWZ0ZXIgcjEzNjg1NywgcjEzNjg5MyBhbmQg
MTM2OTE5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBk
MWI0NzczLi5iMmIwMDEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMTY4MCw5ICsxNjgwLDYgQEAgd2Via2l0Lm9yZy9iLzYxMTM4IGh0dHAvdGVzdHMv
dzNjL3dlYnBlcmYvc3VibWlzc2lvbi9yZXNvdXJjZS10aW1pbmcgWyBTa2lwIF0KIAogd2Via2l0
Lm9yZy9iLzEwMzEwOSBmYXN0L2RvbS9zaGFkb3cvaG9zdC13cmFwcGVyLXJlY2xhaW1lZC5odG1s
IFsgRmFpbHVyZSBdCiAKLSMgTm8gc3BlbGxjaGVjayBzdWdnZXN0aW9ucyBpbiBjb250ZXh0IG1l
bnUKLUJ1ZyhFRkwpIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0
bWwgWyBGYWlsdXJlIF0KLQogIyBOZXdseSBhZGRlZCB0ZXN0IGluIHIxMzYyMjUgZmFpbHMgb24g
R1RLIGJvdCB0b28uCiB3ZWJraXQub3JnL2IvMTAzNzQwIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0
LWFsaWdubWVudC1mb3ItdmVydGljYWwtdGV4dC5odG1sIFsgRmFpbHVyZSBdCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOTQ5ODQwNy4uMDc0NmQ5YyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTk3Nyw3ICs5
NzcsNyBAQCB3ZWJraXQub3JnL2IvOTkwMDEgaW5zcGVjdG9yL3Byb2ZpbGVyL21lbW9yeS1pbnN0
cnVtZW50YXRpb24tY2FudmFzLmh0bWwgWyBGYWlsdQogd2Via2l0Lm9yZy9iLzM3NjEzIHdlYmtp
dC5vcmcvYi8yMDAxMSBwcmludGluZyBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzM3NjEzIGVkaXRp
bmcvZXhlY0NvbW1hbmQvcHJpbnQuaHRtbCBbIFNraXAgXQogCi0jIE5lZWQgdG8gZHVtcCBjb250
ZXh0IG1lbnUgaXRlbXMgb24gZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKHRydWUpLgorIyBEUlQg
ZG9lc24ndCBkaXNwYXRjaCBhbiBldmVudCBmb3IgdGhlIHNlY29uZCBjYWxsIGV2ZW50U2VuZGVy
LmNvbnRleHRDbGljaygpLgogd2Via2l0Lm9yZy9iLzM5MTAyIGVkaXRpbmcvc3BlbGxpbmcvY29u
dGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBTb21lIGlucHV0IHR5
cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUz
ZTRiOS4uZTc3Y2I3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTEyLTA3ICBH
cnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAg
IFtFRkxdW0dUS10gY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZmFpbHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzUyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIGNvbnRleHR1YWwgbWVu
dSwgc2VsZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKyAgICAgICAg
VGhpcyBiZWhhdmlvciBpcyBhcHBsaWVkIGZvciBVbml4IFdlYktpdCBwb3J0cy4KKyAgICAgICAg
V2ViQ29yZSBhc3N1bWVzIHRoYXQgYSBtaXNzcGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVk
IHRvIGdldCBpdHMgc3VnZ2VzdGlvbnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVk
IGJ5IGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1sLgorCisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nQmVoYXZpb3IuaDoKKyAgICAgICAgKEVkaXRpbmdCZWhhdmlvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3I6OnNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGlj
a0Zvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgQWRkIGEgbmV3IGJlaGF2aW9yIGZvciBVbml4
LCB0byBzZWxlY3QgdGhlIG1pc3NwZWxsZWQgd29yZCBvbiBjdHggbWVudS4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICBBZGQgbWlzc2luZyBjb25zdCBtb2Rp
ZmllciwgdG8gdXNlIHRoaXMgbWV0aG9kIGluICdpc1dvcmRNaXNzcGVsbGVkQXRDYXJldCgpIGNv
bnN0Jy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTaW5nbGVX
b3JkKToKKyAgICAgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRleHQg
aXMgYSBzaW5nbGUgd29yZC4gQm9ycm93ZWQgZnJvbSBDaHJvbWl1bS4KKworICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjppc1dvcmRNaXNzcGVsbGVkQXRDYXJldCk6CisgICAgICAgIFJldHVybiB0
cnVlIGlmIHRoZSB3b3JkIHVuZGVyIHRoZSBjYXJldCBpcyBtaXNzcGVsbGVkLgorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKEVkaXRvcik6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29u
dGV4dE1lbnVFdmVudCk6CisgICAgICAgIFNlbGVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkIG9uIGNv
bnRleHQgbWVudS4KKwogMjAxMi0xMi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXNlIGFsd2F5cyB0aGUgb3JkZXIgaXRlcmF0b3IgZnJv
bSBkYXRhIG1lbWJlciBpbiBSZW5kZXJGbGV4aWJsZUJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ0JlaGF2aW9yLmgKaW5kZXggOTQxNDMwZi4uODE3MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKIAog
ICAgIC8vIE9uIE1hYywgd2hlbiBwcm9jZXNzaW5nIGEgY29udGV4dHVhbCBjbGljaywgdGhlIG9i
amVjdCBiZWluZyBjbGlja2VkIHVwb24gc2hvdWxkIGJlIHNlbGVjdGVkLgogICAgIGJvb2wgc2hv
dWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IEVkaXRpbmdNYWNCZWhhdmlvcjsgfQorCisgICAgLy8gT24gYSBjb250ZXh0dWFsIGNsaWNrLCB0
aGUgd29yZCBiZWluZyBjbGlja2VkIHVwb24gc2hvdWxkIGJlIHNlbGVjdGVkIGlmIGl0J3MgbWlz
c3BlbGxlZC4KKyAgICBib29sIHNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGlja0Zvck1p
c3NwZWxsZWRXb3JkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEVkaXRpbmdVbml4QmVoYXZp
b3I7IH0KICAgICAKICAgICAvLyBPbiBNYWMgYW5kIFdpbmRvd3MsIHByZXNzaW5nIGJhY2tzcGFj
ZSAod2hlbiBpdCBpc24ndCBoYW5kbGVkIG90aGVyd2lzZSkgc2hvdWxkIG5hdmlnYXRlIGJhY2su
CiAgICAgYm9vbCBzaG91bGROYXZpZ2F0ZUJhY2tPbkJhY2tzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSAhPSBFZGl0aW5nVW5peEJlaGF2aW9yOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggNmRhOTY1ZS4uOWIyOTFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBFZGl0b3I6OmNvcHlJbWFnZShjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQpCiAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3Jp
dGVJbWFnZShyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCksIHVybCwgcmVzdWx0LmFsdERpc3Bs
YXlTdHJpbmcoKSk7CiB9CiAKLWJvb2wgRWRpdG9yOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpCitib29sIEVkaXRvcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSBjb25zdAogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KQEAgLTE2ODAsNiArMTY4MCw1MCBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgfQogfQogCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGV4
dCBpcyBhIHNpbmdsZSB3b3JkLgorc3RhdGljIGJvb2wgaXNBU2luZ2xlV29yZChjb25zdCBTdHJp
bmcmIHRleHQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0
b3IodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBpdCAmJiB0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHQubGVuZ3RoKCkpOworfQor
Citib29sIEVkaXRvcjo6aXNXb3JkTWlzc3BlbGxlZEF0Q2FyZXQoTm9kZSogY2xpY2tlZE5vZGUp
IGNvbnN0Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHNwZWxsaW5nIGZvciB0
aGUgbm9kZSBpcyBmb3JiaWRkZW4uCisgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpIHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihj
bGlja2VkTm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGlm
ICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIXNlbGVjdGlvbi5pc0NhcmV0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCBzZWxlY3RlZCB0ZXh0IHRvIGNo
ZWNrIGZvciBtdWx0aXBsZSB3b3JkIHNlbGVjdGlvbi4KKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJp
bmcgPSBzZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIC8vIElmIHNvbWUg
dGV4dCB3YXMgYWxyZWFkeSBzZWxlY3RlZCwgd2UgZG9uJ3QgY2hhbmdlIHRoZSBzZWxlY3Rpb24u
CisgICAgaWYgKCFzZWxlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRG9uJ3Qg
cHJvdmlkZSBzdWdnZXN0aW9ucyBmb3IgbXVsdGlwbGUgd29yZHMuCisgICAgICAgIGlmICghaXNB
U2luZ2xlV29yZChzZWxlY3RlZFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gR2V0IHRoZSB3b3JkIGFycm91bmQgdGhlIGNhcmV0LgorICAgIHNlbGVj
dGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEFTU0VS
VChyYW5nZSk7CisgICAgU3RyaW5nIHdvcmQgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS0+dGV4dCgpOworICAgIGludCB3b3JkTGVuZ3RoID0gd29yZC5sZW5ndGgoKTsKKworICAgIGlm
ICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1pc3NwZWxsaW5nTGVu
Z3RoID0gMDsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcod29yZC5j
aGFyYWN0ZXJzKCksIHdvcmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxp
bmdMZW5ndGgpOworCisgICAgcmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09IHdvcmRMZW5ndGgg
PyB0cnVlIDogZmFsc2U7Cit9CisKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQo
KQogewogICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKaW5kZXggMTUyMzRkYi4uMWE0YzlmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBib29sIGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmcoKTsKICAgICBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwogICAg
IHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7CkBAIC0yMjIsNiArMjIyLDcgQEAgcHVibGlj
OgogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpOwogICAgIGJvb2wgaXNTZWxlY3Rp
b25VbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKKyAg
ICBib29sIGlzV29yZE1pc3NwZWxsZWRBdENhcmV0KE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdDsK
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwogICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rp
b24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggM2Y3MjE5Ny4uNzRjYzlhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjg3NiwxMyArMjg3NiwxOSBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwog
ICAgIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgbWV2ID0gZG9jLT5wcmVwYXJlTW91c2VF
dmVudChyZXF1ZXN0LCB2aWV3cG9ydFBvcywgZXZlbnQpOwogCi0gICAgaWYgKG1fZnJhbWUtPmVk
aXRvcigpLT5iZWhhdmlvcigpLnNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGljaygpCisg
ICAgLy8gRklYTUU6IEluIHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGlt
ZXMgc2VsZWN0cyBjb250ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCisgICAg
Ly8gSWYgdGhlIHNlbGVjdGlvbiBpcyBub24tZWRpdGFibGUsIHdlIGRvIHdvcmQgc2VsZWN0aW9u
IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB0aGUgY29udGV4dHVhbCBtZW51IGl0ZW1zCisgICAg
Ly8gYXZhaWxhYmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuIEJ1dCBvbmx5IGlmIHdlJ3JlIGFib3Zl
IHRleHQuCisgICAgYm9vbCBzZWxlY3RPbkNvbnRleHRNZW51ID0gbV9mcmFtZS0+ZWRpdG9yKCkt
PmJlaGF2aW9yKCkuc2hvdWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkKKyAgICAgICAg
JiYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtZXYudGFy
Z2V0Tm9kZSgpICYmIG1ldi50YXJnZXROb2RlKCktPmlzVGV4dE5vZGUoKSkpOworCisgICAgLy8g
VGhlIG1pc3NwZWxsZWQgd29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgdG8gcmV0cmlldmUgaXRzIHN1
Z2dlc3Rpb25zLgorICAgIGJvb2wgc2VsZWN0T25Db250ZXh0TWVudUZvck1pc3NwZWxsZWRXb3Jk
ID0gbV9mcmFtZS0+ZWRpdG9yKCktPmJlaGF2aW9yKCkuc2hvdWxkU2VsZWN0T25Db250ZXh0dWFs
TWVudUNsaWNrRm9yTWlzc3BlbGxlZFdvcmQoKQorICAgICAgICAmJiBtX2ZyYW1lLT5lZGl0b3Io
KS0+aXNXb3JkTWlzc3BlbGxlZEF0Q2FyZXQobWV2LnRhcmdldE5vZGUoKSk7CisKKyAgICBpZiAo
KHNlbGVjdE9uQ29udGV4dE1lbnUgfHwgc2VsZWN0T25Db250ZXh0TWVudUZvck1pc3NwZWxsZWRX
b3JkKQogICAgICAgICAmJiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNvbnRhaW5zKHZpZXdwb3J0
UG9zKQotICAgICAgICAmJiAhbWV2LnNjcm9sbGJhcigpCi0gICAgICAgIC8vIEZJWE1FOiBJbiB0
aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVzIHNlbGVjdHMgY29udGVu
dCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNlLgotICAgICAgICAvLyBJZiB0aGUgc2Vs
ZWN0aW9uIGlzIG5vbi1lZGl0YWJsZSwgd2UgZG8gd29yZCBzZWxlY3Rpb24gdG8gbWFrZSBpdCBl
YXNpZXIgdG8gdXNlIHRoZSBjb250ZXh0dWFsIG1lbnUgaXRlbXMKLSAgICAgICAgLy8gYXZhaWxh
YmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuICBCdXQgb25seSBpZiB3ZSdyZSBhYm92ZSB0ZXh0Lgot
ICAgICAgICAmJiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkgfHwg
KG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsK
KyAgICAgICAgJiYgIW1ldi5zY3JvbGxiYXIoKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0
YXJ0U2VsZWN0ID0gdHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93
ZWQgdG8gcGVyZm9ybSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlu
a0Zyb21Nb3VzZUV2ZW50KG1ldik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBhNjFkYTQzLi4zZDhiMTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEyLTEyLTEwICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW0dUS10gY29udGV4dC1tZW51LXN1Z2dlc3Rpb25z
Lmh0bWwgZmFpbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBub3RlIHRoYXQgV2ViQ29yZSBhbHJlYWR5IHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQg
d29yZCBvbiBjb250ZXh0IG1lbnUgZXZlbnQuCisKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisKIDIwMTItMTItMDcgIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgcm9sbCBj
cmhvbWl1bSB0byByMTcxNzA3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAKaW5kZXggYmRhMWIyZS4uZjQ0M2JlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwu
Y3BwCkBAIC0zMDMsNiArMzAzLDcgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1l
bnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcygKICAgICAgICAgICAg
ICAgICBtX3dlYlZpZXctPmZvY3VzZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9yKCktPmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiAgICAgICAgICAgICAvLyBTcGVsbGNoZWNraW5n
IG1pZ2h0IGJlIGVuYWJsZWQgZm9yIHRoZSBmaWVsZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkIG9u
IHRoZSBub2RlLgogICAgICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFt
ZSgpLT5lZGl0b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZWJDb3JlIHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQg
d29yZCBvbiBjb250ZXh0IG1lbnUsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDQ1MzEuCiAgICAgICAgICAgICAgICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVj
dE1pc3NwZWxsZWRXb3JkKGRlZmF1bHRNZW51LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgICAg
ICAgICBpZiAobV93ZWJWaWV3LT5zcGVsbENoZWNrQ2xpZW50KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaW50IG1pc3NwZWxsZWRPZmZzZXQsIG1pc3NwZWxsZWRMZW5ndGg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178548</attachid>
            <date>2012-12-10 07:32:56 -0800</date>
            <delta_ts>2012-12-17 05:32:01 -0800</delta_ts>
            <desc>apply Carlos&apos;s suggestions</desc>
            <filename>spelling-context-menu-suggestion2.patch</filename>
            <type>text/plain</type>
            <size>11773</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNTBjOGY5Li5jMTE5M2NhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MDcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF1bR1RLXSBjb250ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBmYWlscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9l
ZmwvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgVW5za2lwIGNvbnRleHQtbWVudS1zdWdnZXN0
aW9ucy5odG1sIGZvciBXZWJLaXQtRUZMIGFzIGl0IHBhc3NlcyBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgVXBkYXRlIGZhaWxpbmcgcmVh
c29uLgorCiAyMDEyLTEyLTA3ICBKw6Fub3MgQmFkaWNzICA8amJhZGljc0BpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgW1F0XSBHYXJkZW5pbmcgYWZ0ZXIgcjEzNjg1NywgcjEzNjg5MyBhbmQg
MTM2OTE5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBk
MWI0NzczLi5iMmIwMDEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMTY4MCw5ICsxNjgwLDYgQEAgd2Via2l0Lm9yZy9iLzYxMTM4IGh0dHAvdGVzdHMv
dzNjL3dlYnBlcmYvc3VibWlzc2lvbi9yZXNvdXJjZS10aW1pbmcgWyBTa2lwIF0KIAogd2Via2l0
Lm9yZy9iLzEwMzEwOSBmYXN0L2RvbS9zaGFkb3cvaG9zdC13cmFwcGVyLXJlY2xhaW1lZC5odG1s
IFsgRmFpbHVyZSBdCiAKLSMgTm8gc3BlbGxjaGVjayBzdWdnZXN0aW9ucyBpbiBjb250ZXh0IG1l
bnUKLUJ1ZyhFRkwpIGVkaXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0
bWwgWyBGYWlsdXJlIF0KLQogIyBOZXdseSBhZGRlZCB0ZXN0IGluIHIxMzYyMjUgZmFpbHMgb24g
R1RLIGJvdCB0b28uCiB3ZWJraXQub3JnL2IvMTAzNzQwIGVkaXRpbmcvc2VsZWN0aW9uL2NhcmV0
LWFsaWdubWVudC1mb3ItdmVydGljYWwtdGV4dC5odG1sIFsgRmFpbHVyZSBdCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOTQ5ODQwNy4uMDc0NmQ5YyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTk3Nyw3ICs5
NzcsNyBAQCB3ZWJraXQub3JnL2IvOTkwMDEgaW5zcGVjdG9yL3Byb2ZpbGVyL21lbW9yeS1pbnN0
cnVtZW50YXRpb24tY2FudmFzLmh0bWwgWyBGYWlsdQogd2Via2l0Lm9yZy9iLzM3NjEzIHdlYmtp
dC5vcmcvYi8yMDAxMSBwcmludGluZyBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzM3NjEzIGVkaXRp
bmcvZXhlY0NvbW1hbmQvcHJpbnQuaHRtbCBbIFNraXAgXQogCi0jIE5lZWQgdG8gZHVtcCBjb250
ZXh0IG1lbnUgaXRlbXMgb24gZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKHRydWUpLgorIyBEUlQg
ZG9lc24ndCBkaXNwYXRjaCBhbiBldmVudCBmb3IgdGhlIHNlY29uZCBjYWxsIGV2ZW50U2VuZGVy
LmNvbnRleHRDbGljaygpLgogd2Via2l0Lm9yZy9iLzM5MTAyIGVkaXRpbmcvc3BlbGxpbmcvY29u
dGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBTb21lIGlucHV0IHR5
cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUz
ZTRiOS4uZTc3Y2I3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTEyLTA3ICBH
cnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAg
IFtFRkxdW0dUS10gY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZmFpbHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzUyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9uIGNvbnRleHR1YWwgbWVu
dSwgc2VsZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKyAgICAgICAg
VGhpcyBiZWhhdmlvciBpcyBhcHBsaWVkIGZvciBVbml4IFdlYktpdCBwb3J0cy4KKyAgICAgICAg
V2ViQ29yZSBhc3N1bWVzIHRoYXQgYSBtaXNzcGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVk
IHRvIGdldCBpdHMgc3VnZ2VzdGlvbnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVk
IGJ5IGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1sLgorCisgICAgICAgICogZWRpdGluZy9F
ZGl0aW5nQmVoYXZpb3IuaDoKKyAgICAgICAgKEVkaXRpbmdCZWhhdmlvcik6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3I6OnNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGlj
a0Zvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgQWRkIGEgbmV3IGJlaGF2aW9yIGZvciBVbml4
LCB0byBzZWxlY3QgdGhlIG1pc3NwZWxsZWQgd29yZCBvbiBjdHggbWVudS4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICBBZGQgbWlzc2luZyBjb25zdCBtb2Rp
ZmllciwgdG8gdXNlIHRoaXMgbWV0aG9kIGluICdpc1dvcmRNaXNzcGVsbGVkQXRDYXJldCgpIGNv
bnN0Jy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTaW5nbGVX
b3JkKToKKyAgICAgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRleHQg
aXMgYSBzaW5nbGUgd29yZC4gQm9ycm93ZWQgZnJvbSBDaHJvbWl1bS4KKworICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjppc1dvcmRNaXNzcGVsbGVkQXRDYXJldCk6CisgICAgICAgIFJldHVybiB0
cnVlIGlmIHRoZSB3b3JkIHVuZGVyIHRoZSBjYXJldCBpcyBtaXNzcGVsbGVkLgorCisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKEVkaXRvcik6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29u
dGV4dE1lbnVFdmVudCk6CisgICAgICAgIFNlbGVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkIG9uIGNv
bnRleHQgbWVudS4KKwogMjAxMi0xMi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVXNlIGFsd2F5cyB0aGUgb3JkZXIgaXRlcmF0b3IgZnJv
bSBkYXRhIG1lbWJlciBpbiBSZW5kZXJGbGV4aWJsZUJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ0JlaGF2aW9yLmgKaW5kZXggOTQxNDMwZi4uODE3MjhiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oCkBAIC01OSw2ICs1OSw5IEBAIHB1YmxpYzoKIAog
ICAgIC8vIE9uIE1hYywgd2hlbiBwcm9jZXNzaW5nIGEgY29udGV4dHVhbCBjbGljaywgdGhlIG9i
amVjdCBiZWluZyBjbGlja2VkIHVwb24gc2hvdWxkIGJlIHNlbGVjdGVkLgogICAgIGJvb2wgc2hv
dWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09
IEVkaXRpbmdNYWNCZWhhdmlvcjsgfQorCisgICAgLy8gT24gYSBjb250ZXh0dWFsIGNsaWNrLCB0
aGUgd29yZCBiZWluZyBjbGlja2VkIHVwb24gc2hvdWxkIGJlIHNlbGVjdGVkIGlmIGl0J3MgbWlz
c3BlbGxlZC4KKyAgICBib29sIHNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGlja0Zvck1p
c3NwZWxsZWRXb3JkKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEVkaXRpbmdVbml4QmVoYXZp
b3I7IH0KICAgICAKICAgICAvLyBPbiBNYWMgYW5kIFdpbmRvd3MsIHByZXNzaW5nIGJhY2tzcGFj
ZSAod2hlbiBpdCBpc24ndCBoYW5kbGVkIG90aGVyd2lzZSkgc2hvdWxkIG5hdmlnYXRlIGJhY2su
CiAgICAgYm9vbCBzaG91bGROYXZpZ2F0ZUJhY2tPbkJhY2tzcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSAhPSBFZGl0aW5nVW5peEJlaGF2aW9yOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggNmRhOTY1ZS4uZjU4MDVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBFZGl0b3I6OmNvcHlJbWFnZShjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQpCiAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3Jp
dGVJbWFnZShyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCksIHVybCwgcmVzdWx0LmFsdERpc3Bs
YXlTdHJpbmcoKSk7CiB9CiAKLWJvb2wgRWRpdG9yOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpCitib29sIEVkaXRvcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSBjb25zdAogewogICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KQEAgLTE2ODAsNiArMTY4MCw1MCBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgfQogfQogCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGV4
dCBpcyBhIHNpbmdsZSB3b3JkLgorc3RhdGljIGJvb2wgaXNBU2luZ2xlV29yZChjb25zdCBTdHJp
bmcmIHRleHQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0
b3IodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBpdCAmJiB0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHQubGVuZ3RoKCkpOworfQor
Citib29sIEVkaXRvcjo6aXNXb3JkTWlzc3BlbGxlZEF0Q2FyZXQoTm9kZSogY2xpY2tlZE5vZGUp
IGNvbnN0Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHNwZWxsaW5nIGZvciB0
aGUgbm9kZSBpcyBmb3JiaWRkZW4uCisgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpIHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihj
bGlja2VkTm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGlm
ICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIXNlbGVjdGlvbi5pc0NhcmV0KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEdldCBzZWxlY3RlZCB0ZXh0IHRvIGNo
ZWNrIGZvciBtdWx0aXBsZSB3b3JkIHNlbGVjdGlvbi4KKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJp
bmcgPSBzZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIC8vIElmIHNvbWUg
dGV4dCB3YXMgYWxyZWFkeSBzZWxlY3RlZCwgd2UgZG9uJ3QgY2hhbmdlIHRoZSBzZWxlY3Rpb24u
CisgICAgaWYgKCFzZWxlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRG9uJ3Qg
cHJvdmlkZSBzdWdnZXN0aW9ucyBmb3IgbXVsdGlwbGUgd29yZHMuCisgICAgICAgIGlmICghaXNB
U2luZ2xlV29yZChzZWxlY3RlZFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gR2V0IHRoZSB3b3JkIGFycm91bmQgdGhlIGNhcmV0LgorICAgIHNlbGVj
dGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEFTU0VS
VChyYW5nZSk7CisgICAgU3RyaW5nIHdvcmQgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS0+dGV4dCgpOworCisgICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkLmxlbmd0aCgpOwor
ICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1pc3NwZWxsaW5nTGVu
Z3RoID0gMDsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcod29yZC5j
aGFyYWN0ZXJzKCksIHdvcmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxp
bmdMZW5ndGgpOworCisgICAgcmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09IHdvcmRMZW5ndGg7
Cit9CisKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogewogICAgIFN0cmlu
ZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgK
aW5kZXggMTUyMzRkYi4uMWE0YzlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yMTMs
NyArMjEzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5R
dW90ZWRDb250ZW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBib29sIGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCk7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsK
ICAgICBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlR3Jh
bW1hckNoZWNraW5nKCk7CkBAIC0yMjIsNiArMjIyLDcgQEAgcHVibGljOgogICAgIGludCBzcGVs
bENoZWNrZXJEb2N1bWVudFRhZygpOwogICAgIGJvb2wgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2Fs
KCk7CiAgICAgYm9vbCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKKyAgICBib29sIGlzV29yZE1p
c3NwZWxsZWRBdENhcmV0KE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdDsKICAgICBWZWN0b3I8U3Ry
aW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwogICAgIFZlY3RvcjxTdHJpbmc+
IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmluZz4g
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggM2Y3MjE5Ny4uNzRjYzlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcApAQCAtMjg3NiwxMyArMjg3NiwxOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRl
eHRNZW51RXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKICAgICBIaXRUZXN0
UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMgbWV2ID0gZG9jLT5wcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCB2
aWV3cG9ydFBvcywgZXZlbnQpOwogCi0gICAgaWYgKG1fZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlv
cigpLnNob3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGljaygpCisgICAgLy8gRklYTUU6IElu
IHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2VsZWN0cyBjb250
ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCisgICAgLy8gSWYgdGhlIHNlbGVj
dGlvbiBpcyBub24tZWRpdGFibGUsIHdlIGRvIHdvcmQgc2VsZWN0aW9uIHRvIG1ha2UgaXQgZWFz
aWVyIHRvIHVzZSB0aGUgY29udGV4dHVhbCBtZW51IGl0ZW1zCisgICAgLy8gYXZhaWxhYmxlIGZv
ciB0ZXh0IHNlbGVjdGlvbnMuIEJ1dCBvbmx5IGlmIHdlJ3JlIGFib3ZlIHRleHQuCisgICAgYm9v
bCBzZWxlY3RPbkNvbnRleHRNZW51ID0gbV9mcmFtZS0+ZWRpdG9yKCktPmJlaGF2aW9yKCkuc2hv
dWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkKKyAgICAgICAgJiYgKG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtZXYudGFyZ2V0Tm9kZSgpICYmIG1l
di50YXJnZXROb2RlKCktPmlzVGV4dE5vZGUoKSkpOworCisgICAgLy8gVGhlIG1pc3NwZWxsZWQg
d29yZCBoYXMgdG8gYmUgc2VsZWN0ZWQgdG8gcmV0cmlldmUgaXRzIHN1Z2dlc3Rpb25zLgorICAg
IGJvb2wgc2VsZWN0T25Db250ZXh0TWVudUZvck1pc3NwZWxsZWRXb3JkID0gbV9mcmFtZS0+ZWRp
dG9yKCktPmJlaGF2aW9yKCkuc2hvdWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrRm9yTWlz
c3BlbGxlZFdvcmQoKQorICAgICAgICAmJiBtX2ZyYW1lLT5lZGl0b3IoKS0+aXNXb3JkTWlzc3Bl
bGxlZEF0Q2FyZXQobWV2LnRhcmdldE5vZGUoKSk7CisKKyAgICBpZiAoKHNlbGVjdE9uQ29udGV4
dE1lbnUgfHwgc2VsZWN0T25Db250ZXh0TWVudUZvck1pc3NwZWxsZWRXb3JkKQogICAgICAgICAm
JiAhbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNvbnRhaW5zKHZpZXdwb3J0UG9zKQotICAgICAgICAm
JiAhbWV2LnNjcm9sbGJhcigpCi0gICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZWRpdGFibGUgY2Fz
ZSwgd29yZCBzZWxlY3Rpb24gc29tZXRpbWVzIHNlbGVjdHMgY29udGVudCB0aGF0IGlzbid0IHVu
ZGVybmVhdGggdGhlIG1vdXNlLgotICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIG5vbi1l
ZGl0YWJsZSwgd2UgZG8gd29yZCBzZWxlY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRo
ZSBjb250ZXh0dWFsIG1lbnUgaXRlbXMKLSAgICAgICAgLy8gYXZhaWxhYmxlIGZvciB0ZXh0IHNl
bGVjdGlvbnMuICBCdXQgb25seSBpZiB3ZSdyZSBhYm92ZSB0ZXh0LgotICAgICAgICAmJiAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1ldi50YXJnZXROb2Rl
KCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsKKyAgICAgICAgJiYgIW1l
di5zY3JvbGxiYXIoKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0gdHJ1
ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9ybSBh
IHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50
KG1ldik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhNjFkYTQzLi4zZDhi
MTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTEwICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdW0dUS10gY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZmFpbHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzUyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBub3RlIHRo
YXQgV2ViQ29yZSBhbHJlYWR5IHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQgd29yZCBvbiBjb250ZXh0
IG1lbnUgZXZlbnQuCisKKyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGllbnRJbXBsOjpnZXRDdXN0b21NZW51RnJv
bURlZmF1bHRJdGVtcyk6CisKIDIwMTItMTItMDcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgcm9sbCBjcmhvbWl1bSB0byByMTcx
NzA3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xp
ZW50SW1wbC5jcHAKaW5kZXggYmRhMWIyZS4uZjQ0M2JlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCkBAIC0zMDMsNiAr
MzAzLDcgQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbnRJbXBsOjpn
ZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcygKICAgICAgICAgICAgICAgICBtX3dlYlZpZXct
PmZvY3VzZWRXZWJDb3JlRnJhbWUoKS0+ZWRpdG9yKCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7CiAgICAgICAgICAgICAvLyBTcGVsbGNoZWNraW5nIG1pZ2h0IGJlIGVuYWJs
ZWQgZm9yIHRoZSBmaWVsZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkIG9uIHRoZSBub2RlLgogICAg
ICAgICAgICAgaWYgKG1fd2ViVmlldy0+Zm9jdXNlZFdlYkNvcmVGcmFtZSgpLT5lZGl0b3IoKS0+
aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZWJDb3JlIHNlbGVjdHMgdGhlIG1pc3NwZWxsZWQgd29yZCBvbiBjb250ZXh0
IG1lbnUsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MzEuCiAg
ICAgICAgICAgICAgICAgZGF0YS5taXNzcGVsbGVkV29yZCA9IHNlbGVjdE1pc3NwZWxsZWRXb3Jk
KGRlZmF1bHRNZW51LCBzZWxlY3RlZEZyYW1lKTsKICAgICAgICAgICAgICAgICBpZiAobV93ZWJW
aWV3LT5zcGVsbENoZWNrQ2xpZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IG1pc3Nw
ZWxsZWRPZmZzZXQsIG1pc3NwZWxsZWRMZW5ndGg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179721</attachid>
            <date>2012-12-17 05:32:01 -0800</date>
            <delta_ts>2012-12-17 06:10:54 -0800</delta_ts>
            <desc>new approach - allow spelling suggestions without selection </desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>15027</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMjJjMmE5Li42OGNiNzZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MTcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgT24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9u
cyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICBVbnNraXAgY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZm9y
IFdlYktpdC1FRkwgYXMgaXQgcGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBVcGRhdGUgZmFpbGluZyByZWFzb24uCisKIDIwMTIt
MTItMTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBb
UXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBVcGRhdGUgZXhwZWN0ZWQgZmlsZXMgYWZ0ZXIgcjEz
Nzc5OC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTMw
N2UwZi4uNGVkMjM0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTE2NDQsOSArMTY0NCw2IEBAIHdlYmtpdC5vcmcvYi82MTEzOCBodHRwL3Rlc3RzL3cz
Yy93ZWJwZXJmL3N1Ym1pc3Npb24vcmVzb3VyY2UtdGltaW5nIFsgU2tpcCBdCiAKIHdlYmtpdC5v
cmcvYi8xMDMxMDkgZmFzdC9kb20vc2hhZG93L2hvc3Qtd3JhcHBlci1yZWNsYWltZWQuaHRtbCBb
IEZhaWx1cmUgXQogCi0jIE5vIHNwZWxsY2hlY2sgc3VnZ2VzdGlvbnMgaW4gY29udGV4dCBtZW51
Ci1CdWcoRUZMKSBlZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
IFsgRmFpbHVyZSBdCi0KICMgTm8gc3VwcG9ydCBmb3IgZXhwb3NpbmcgaW4tYmFuZCB0ZXh0IHRy
YWNrcwogQnVnKEVGTCkgbWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC5odG1sIFsgU2tpcCBdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGE3ODhhNS4u
Mjk3MWU2MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTk4NCw3ICs5ODQsNyBAQCB3ZWJraXQub3JnL2IvNTA0ODUgaW5zcGVjdG9yLXByb3RvY29sL3Rh
a2UtaGVhcC1zbmFwc2hvdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgd2Via2l0
Lm9yZy9iLzIwMDExIHByaW50aW5nIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgZWRpdGlu
Zy9leGVjQ29tbWFuZC9wcmludC5odG1sIFsgU2tpcCBdCiAKLSMgTmVlZCB0byBkdW1wIGNvbnRl
eHQgbWVudSBpdGVtcyBvbiBldmVudFNlbmRlci5jb250ZXh0Q2xpY2sodHJ1ZSkuCisjIERSVCBk
b2Vzbid0IGRpc3BhdGNoIGFuIGV2ZW50IGZvciB0aGUgc2Vjb25kIGNhbGwgZXZlbnRTZW5kZXIu
Y29udGV4dENsaWNrKCkuCiB3ZWJraXQub3JnL2IvMzkxMDIgZWRpdGluZy9zcGVsbGluZy9jb250
ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFNvbWUgaW5wdXQgdHlw
ZT1yYW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2YgdGhlIHNpemUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiODVl
ZDFiLi41N2VlNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTItMTItMTcgIEdy
emVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
T24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRo
b3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyB0byBnZXQvaW5zZXJ0IHNwZWxsaW5nIHN1
Z2dlc3Rpb25zIHdpdGhvdXQgc2VsZWN0aW5nIHRoZSBtaXNzcGVsbGVkIHdvcmQgZm9yCisgICAg
ICAgIEVGTCBhbmQgR1RLKyBXZWJLaXQgcG9ydHMuIFdlYkNvcmUgYXNzdW1lcyB0aGF0IHRoZSBt
aXNzcGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkCisgICAgICAgIHRvIGdldCBpdHMgc3Vn
Z2VzdGlvbnMuIEluIGNvbXBsaWFuY2Ugd2l0aCBuYXRpdmUgYXBwbGljYXRpb24gYmVoYXZpb3Vy
IGludHJvZHVjZQorICAgICAgICBhIG5ldyBlZGl0aW5nIHBvbGljeSB0byBkbyBub3QgaGlnaGxp
Z2h0IHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8ganVzdCBnZXQgaXRzIGd1ZXNzZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaDoKKyAgICAgICAgKEVkaXRp
bmdCZWhhdmlvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3I6OnNob3VsZEFs
bG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24pOgorICAgICAgICBBZGQgYSBu
ZXcgYmVoYXZpb3IgZm9yIFVuaXgsIHRvIGFsbG93IHNwZWxsaW5nIHN1Z2dlc3Rpb25zIHdpdGhv
dXQgc2VsZWN0aW5nCisgICAgICAgIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY29uc3QgbW9kaWZp
ZXIsIHRvIHVzZSB0aGlzIG1ldGhvZCBpbiAnbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSgp
IGNvbnN0Jy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTaW5n
bGVXb3JkKToKKyAgICAgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRl
eHQgaXMgYSBzaW5nbGUgd29yZC4gQm9ycm93ZWQgZnJvbSBDaHJvbWl1bS4KKworICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKToKKyAgICAgICAg
QWxsb3cgdG8gY2hlY2sgc3BlbGxpbmcgdW5kZXIgdGhlIGNhcmV0IG9yIHNlbGVjdGVkIHdvcmQu
IERvZXMgbm90aGluZyBmb3Igc2VsZWN0aW9uCisgICAgICAgIG1hZGUgb24gdGhlIG11bHRpcGxl
IHdvcmRzLgorCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb24p
OgorICAgICAgICBSZXR1cm4gdGhlIG1pc3NwZWxsZWQgc2VsZWN0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIFJlbW92
ZSAnU2VsZWN0aW9uJyBmcm9tIG1ldGhvZCBuYW1lIGFzIGl0IG1heSByZXR1cm4gZ3Vlc3NlcyB3
aXRob3V0IHNlbGVjdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoK
KyAgICAgICAgKEVkaXRvcik6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIEFsbG93IHRvIGluc2Vy
dCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGlvbi4KKworICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgIFVwZGF0ZSBn
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCBjYWxsLgorCiAyMDEyLTEyLTE3ICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTM2Nzk0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nQmVoYXZpb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2
aW9yLmgKaW5kZXggOTQxNDMwZi4uMzc0YTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdCZWhhdmlvci5oCkBAIC01OSw2ICs1OSwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPbiBN
YWMsIHdoZW4gcHJvY2Vzc2luZyBhIGNvbnRleHR1YWwgY2xpY2ssIHRoZSBvYmplY3QgYmVpbmcg
Y2xpY2tlZCB1cG9uIHNob3VsZCBiZSBzZWxlY3RlZC4KICAgICBib29sIHNob3VsZFNlbGVjdE9u
Q29udGV4dHVhbE1lbnVDbGljaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBFZGl0aW5nTWFj
QmVoYXZpb3I7IH0KKworICAgIC8vIE9uIExpbnV4LCBzaG91bGQgYmUgYWJsZSB0byBnZXQgYW5k
IGluc2VydCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3Bl
bGxlZCB3b3JkLgorICAgIC8vIFNraXAgdGhpcyBwb2xpY3kgZm9yIENocm9taXVtLCB0aGV5IHJl
cXVpcmUgc2VsZWN0aW9uIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgIGJvb2wgc2hvdWxk
QWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpIGNvbnN0CisgICAgewor
I2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQorICAgICAgICByZXR1cm4gbV90eXBl
ID09IEVkaXRpbmdVbml4QmVoYXZpb3I7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gT24gTWFjIGFuZCBXaW5kb3dzLCBwcmVzc2luZyBi
YWNrc3BhY2UgKHdoZW4gaXQgaXNuJ3QgaGFuZGxlZCBvdGhlcndpc2UpIHNob3VsZCBuYXZpZ2F0
ZSBiYWNrLgogICAgIGJvb2wgc2hvdWxkTmF2aWdhdGVCYWNrT25CYWNrc3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgIT0gRWRpdGluZ1VuaXhCZWhhdmlvcjsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IDVmYzM5NzYuLjYxMDEwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTEwOTAsNyArMTA5MCw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJk
KCktPndyaXRlSW1hZ2UocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLCB1cmwsIHJlc3VsdC5h
bHREaXNwbGF5U3RyaW5nKCkpOwogfQogCi1ib29sIEVkaXRvcjo6aXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKQorYm9vbCBFZGl0b3I6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CkBAIC0xNjgxLDIzICsxNjgxLDYzIEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICB9CiB9CiAKLWJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQo
KQorLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRleHQgaXMgYSBzaW5n
bGUgd29yZC4KK2Jvb2wgaXNBU2luZ2xlV29yZChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAg
VGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dC5jaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCkpOworICAgIHJldHVybiBpdCAmJiB0ZXh0QnJlYWtOZXh0KGl0KSA9
PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHQubGVuZ3RoKCkpOworfQorCitTdHJpbmcgRWRpdG9yOjpt
aXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAorewor
ICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBzcGVsbGluZyBmb3IgdGhlIG5vZGUgaXMg
Zm9yYmlkZGVuLgorICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8
fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgLy8gR2V0IHNlbGVjdGVkIHRleHQgdG8gY2hlY2sgZm9y
IG11bHRpcGxlIHdvcmQgc2VsZWN0aW9uLgorICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNl
bGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgaWYgKCFzZWxlY3RlZFN0cmlu
Zy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJvdmlkZSBzdWdnZXN0aW9ucyBmb3Ig
bXVsdGlwbGUgd29yZHMuCisgICAgICAgIGlmICghaXNBU2luZ2xlV29yZChzZWxlY3RlZFN0cmlu
ZykpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8gR2V0IHRo
ZSB3b3JkIGFycm91bmQgdGhlIGNhcmV0LgorICAgIHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEFTU0VSVChyYW5nZSk7CisgICAgU3RyaW5n
IHdvcmQgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS0+dGV4dCgpOworCisgICAgaWYg
KHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkLmxlbmd0aCgpOworICAgIGludCBtaXNzcGVsbGlu
Z0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICB0ZXh0
Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcod29yZC5jaGFyYWN0ZXJzKCksIHdvcmRM
ZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworCisgICAg
cmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09IHdvcmRMZW5ndGggPyB3b3JkIDogU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb24oKSBjb25zdAogewogICAg
IFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGgg
PSBzZWxlY3RlZFN0cmluZy5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghbGVuZ3RoIHx8ICFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogCi0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAogICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAgICAgaW50IG1pc3NwZWxs
aW5nTGVuZ3RoID0gMDsKICAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmco
c2VsZWN0ZWRTdHJpbmcuY2hhcmFjdGVycygpLCBsZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9u
LCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gb25seSBj
b3VudHMgYXMgbWlzc3BlbGxlZCBpZiB0aGUgc2VsZWN0ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBt
aXNzcGVsbGVkIHdvcmQKICAgICBpZiAobWlzc3BlbGxpbmdMZW5ndGggIT0gbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAv
LyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAo
d2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCiAgICAgLy8g
VGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENo
ZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawpAQCAtMTcwNSw3
ICsxNzQ1LDcgQEAgYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpCiAgICAgLy8g
b3IgYSBncmFtbWFyIGVycm9yLgogICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKHNlbGVjdGVkU3RyaW5nKTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gc2VsZWN0ZWRTdHJpbmc7CiB9CiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVu
Z3JhbW1hdGljYWwoKQpAQCAtMTczNiwxOCArMTc3NiwxNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCkKICNlbmRpZgogfQogCi1WZWN0
b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKK1ZlY3Rv
cjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYg
d29yZCkgY29uc3QKIHsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQo
KTsKLSAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCkpOworICAgIEFTU0VSVCh3b3Jk
Lmxlbmd0aCgpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgaWYgKGNsaWVu
dCgpKQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChzZWxlY3RlZFN0
cmluZywgU3RyaW5nKCksIGd1ZXNzZXMpOworICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVz
c2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7
CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkK
K1ZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5p
ZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTE3NTYsMTAg
KzE3OTUsMTIgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGUKICAgICAgICAgcmV0dXJuIFRleHRD
aGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVu
Z3JhbW1hdGljYWwpOwogICAgIH0KIAotICAgIG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3Nw
ZWxsZWQoKTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBiZWhhdmlvcigpLnNob3VsZEFs
bG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSA/IG1pc3NwZWxsZWRXb3Jk
QXRDYXJldE9yUmFuZ2UobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkgOiBtaXNz
cGVsbGVkU2VsZWN0aW9uKCk7CisgICAgbWlzc3BlbGxlZCA9ICFtaXNzcGVsbGVkV29yZC5pc0Vt
cHR5KCk7CisKICAgICBpZiAobWlzc3BlbGxlZCkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwor
ICAgICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsK
ICAgICB9CiAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpICYmIGlzU2VsZWN0aW9u
VW5ncmFtbWF0aWNhbCgpKSB7CiAgICAgICAgIHVuZ3JhbW1hdGljYWwgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKaW5kZXggMTUyMzRkYi4uYmEzNGM1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7CiAjZW5kaWYKICAgICAKLSAgICBib29sIGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmcoKTsKICAgICBib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwogICAg
IHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7CkBAIC0yMjEsMTAgKzIyMSwxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBsZWFyblNwZWxsaW5nKCk7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnKCk7CiAgICAgYm9vbCBpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKTsKLSAgICBib29s
IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JN
aXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRTZWxlY3Rpb24oKSBj
b25zdDsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlj
a2VkTm9kZSkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRX
b3JkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JV
bmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1p
c3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYg
dW5ncmFtbWF0aWNhbCk7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CiAg
ICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAg
IGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3
b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBi
b29sIGRvUmVwbGFjZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwCmluZGV4IGFkZjBhNzkuLjU3ZGRhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTM0MSwxMiArMzQxLDE5IEBAIHZv
aWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0
TWVudUl0ZW0qIGl0ZW0pCiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgotICAgICAgICBBU1NFUlQoZnJhbWUtPmVkaXRvcigp
LT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7Ci0gICAg
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChk
b2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2Vs
ZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyk7Ci0gICAgICAgICAgICBhcHBs
eUNvbW1hbmQoY29tbWFuZCk7Ci0gICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnJldmVh
bFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdn
ZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUg
d29yZCB1bmRlciB0aGUgY3Vyc29yIHdpdGggdGhlIHN1Z2dlc3Rpb24gZnJvbSB0aGUgY29udGV4
dCBtZW51LgorICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxl
Y3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgV29yZEdyYW51bGFyaXR5
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0
aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHksIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZnJhbWUtPmRvY3VtZW50
KCksIGl0ZW0tPnRpdGxlKCksIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkubGVuZ3RoKCkpOworICAgICAgICAg
ICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBm
cmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvblBhc3RlZCkpIHsKKyAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCksICIi
KSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJl
dmVudE5lc3RpbmcpOworICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKKyAg
ICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxp
bmc6CkBAIC05MTQsNyArOTIxLDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVs
YXRlKCkKICAgICAgICAgICAgICAgICAvLyBpcyBuZXZlciBjb25zaWRlcmVkIGEgbWlzc3BlbGxp
bmcgYW5kIGJhZCBncmFtbWFyIGF0IHRoZSBzYW1lIHRpbWUpCiAgICAgICAgICAgICAgICAgYm9v
bCBtaXNzcGVsbGluZzsKICAgICAgICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7Ci0gICAgICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1lLT5lZGl0b3IoKS0+Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24obWlzc3BlbGxpbmcsIGJhZEdy
YW1tYXIpOworICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+
ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKG1pc3NwZWxsaW5n
LCBiYWRHcmFtbWFyKTsKICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFkR3Jh
bW1hcikgewogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6ZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIXNpemUpIHsK
</data>
<flag name="commit-queue"
          id="196713"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179728</attachid>
            <date>2012-12-17 06:10:54 -0800</date>
            <delta_ts>2012-12-17 07:57:20 -0800</delta_ts>
            <desc>fix build break on Mac</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>15034</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMjJjMmE5Li42OGNiNzZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MTcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgT24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9u
cyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICBVbnNraXAgY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZm9y
IFdlYktpdC1FRkwgYXMgaXQgcGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBVcGRhdGUgZmFpbGluZyByZWFzb24uCisKIDIwMTIt
MTItMTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBb
UXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBVcGRhdGUgZXhwZWN0ZWQgZmlsZXMgYWZ0ZXIgcjEz
Nzc5OC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTMw
N2UwZi4uNGVkMjM0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTE2NDQsOSArMTY0NCw2IEBAIHdlYmtpdC5vcmcvYi82MTEzOCBodHRwL3Rlc3RzL3cz
Yy93ZWJwZXJmL3N1Ym1pc3Npb24vcmVzb3VyY2UtdGltaW5nIFsgU2tpcCBdCiAKIHdlYmtpdC5v
cmcvYi8xMDMxMDkgZmFzdC9kb20vc2hhZG93L2hvc3Qtd3JhcHBlci1yZWNsYWltZWQuaHRtbCBb
IEZhaWx1cmUgXQogCi0jIE5vIHNwZWxsY2hlY2sgc3VnZ2VzdGlvbnMgaW4gY29udGV4dCBtZW51
Ci1CdWcoRUZMKSBlZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
IFsgRmFpbHVyZSBdCi0KICMgTm8gc3VwcG9ydCBmb3IgZXhwb3NpbmcgaW4tYmFuZCB0ZXh0IHRy
YWNrcwogQnVnKEVGTCkgbWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC5odG1sIFsgU2tpcCBdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGE3ODhhNS4u
Mjk3MWU2MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTk4NCw3ICs5ODQsNyBAQCB3ZWJraXQub3JnL2IvNTA0ODUgaW5zcGVjdG9yLXByb3RvY29sL3Rh
a2UtaGVhcC1zbmFwc2hvdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgd2Via2l0
Lm9yZy9iLzIwMDExIHByaW50aW5nIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgZWRpdGlu
Zy9leGVjQ29tbWFuZC9wcmludC5odG1sIFsgU2tpcCBdCiAKLSMgTmVlZCB0byBkdW1wIGNvbnRl
eHQgbWVudSBpdGVtcyBvbiBldmVudFNlbmRlci5jb250ZXh0Q2xpY2sodHJ1ZSkuCisjIERSVCBk
b2Vzbid0IGRpc3BhdGNoIGFuIGV2ZW50IGZvciB0aGUgc2Vjb25kIGNhbGwgZXZlbnRTZW5kZXIu
Y29udGV4dENsaWNrKCkuCiB3ZWJraXQub3JnL2IvMzkxMDIgZWRpdGluZy9zcGVsbGluZy9jb250
ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFNvbWUgaW5wdXQgdHlw
ZT1yYW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2YgdGhlIHNpemUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiODVl
ZDFiLi41N2VlNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTItMTItMTcgIEdy
emVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
T24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRo
b3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyB0byBnZXQvaW5zZXJ0IHNwZWxsaW5nIHN1
Z2dlc3Rpb25zIHdpdGhvdXQgc2VsZWN0aW5nIHRoZSBtaXNzcGVsbGVkIHdvcmQgZm9yCisgICAg
ICAgIEVGTCBhbmQgR1RLKyBXZWJLaXQgcG9ydHMuIFdlYkNvcmUgYXNzdW1lcyB0aGF0IHRoZSBt
aXNzcGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkCisgICAgICAgIHRvIGdldCBpdHMgc3Vn
Z2VzdGlvbnMuIEluIGNvbXBsaWFuY2Ugd2l0aCBuYXRpdmUgYXBwbGljYXRpb24gYmVoYXZpb3Vy
IGludHJvZHVjZQorICAgICAgICBhIG5ldyBlZGl0aW5nIHBvbGljeSB0byBkbyBub3QgaGlnaGxp
Z2h0IHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8ganVzdCBnZXQgaXRzIGd1ZXNzZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaDoKKyAgICAgICAgKEVkaXRp
bmdCZWhhdmlvcik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nQmVoYXZpb3I6OnNob3VsZEFs
bG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24pOgorICAgICAgICBBZGQgYSBu
ZXcgYmVoYXZpb3IgZm9yIFVuaXgsIHRvIGFsbG93IHNwZWxsaW5nIHN1Z2dlc3Rpb25zIHdpdGhv
dXQgc2VsZWN0aW5nCisgICAgICAgIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY29uc3QgbW9kaWZp
ZXIsIHRvIHVzZSB0aGlzIG1ldGhvZCBpbiAnbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSgp
IGNvbnN0Jy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc0FTaW5n
bGVXb3JkKToKKyAgICAgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRl
eHQgaXMgYSBzaW5nbGUgd29yZC4gQm9ycm93ZWQgZnJvbSBDaHJvbWl1bS4KKworICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKToKKyAgICAgICAg
QWxsb3cgdG8gY2hlY2sgc3BlbGxpbmcgdW5kZXIgdGhlIGNhcmV0IG9yIHNlbGVjdGVkIHdvcmQu
IERvZXMgbm90aGluZyBmb3Igc2VsZWN0aW9uCisgICAgICAgIG1hZGUgb24gdGhlIG11bHRpcGxl
IHdvcmRzLgorCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb24p
OgorICAgICAgICBSZXR1cm4gdGhlIG1pc3NwZWxsZWQgc2VsZWN0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIFJlbW92
ZSAnU2VsZWN0aW9uJyBmcm9tIG1ldGhvZCBuYW1lIGFzIGl0IG1heSByZXR1cm4gZ3Vlc3NlcyB3
aXRob3V0IHNlbGVjdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoK
KyAgICAgICAgKEVkaXRvcik6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIEFsbG93IHRvIGluc2Vy
dCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGlvbi4KKworICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgIFVwZGF0ZSBn
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCBjYWxsLgorCiAyMDEyLTEyLTE3ICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTM2Nzk0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nQmVoYXZpb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2
aW9yLmgKaW5kZXggOTQxNDMwZi4uMzc0YTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdCZWhhdmlvci5oCkBAIC01OSw2ICs1OSwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPbiBN
YWMsIHdoZW4gcHJvY2Vzc2luZyBhIGNvbnRleHR1YWwgY2xpY2ssIHRoZSBvYmplY3QgYmVpbmcg
Y2xpY2tlZCB1cG9uIHNob3VsZCBiZSBzZWxlY3RlZC4KICAgICBib29sIHNob3VsZFNlbGVjdE9u
Q29udGV4dHVhbE1lbnVDbGljaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBFZGl0aW5nTWFj
QmVoYXZpb3I7IH0KKworICAgIC8vIE9uIExpbnV4LCBzaG91bGQgYmUgYWJsZSB0byBnZXQgYW5k
IGluc2VydCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3Bl
bGxlZCB3b3JkLgorICAgIC8vIFNraXAgdGhpcyBwb2xpY3kgZm9yIENocm9taXVtLCB0aGV5IHJl
cXVpcmUgc2VsZWN0aW9uIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgIGJvb2wgc2hvdWxk
QWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpIGNvbnN0CisgICAgewor
I2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQorICAgICAgICByZXR1cm4gbV90eXBl
ID09IEVkaXRpbmdVbml4QmVoYXZpb3I7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICB9CiAgICAgCiAgICAgLy8gT24gTWFjIGFuZCBXaW5kb3dzLCBwcmVzc2luZyBi
YWNrc3BhY2UgKHdoZW4gaXQgaXNuJ3QgaGFuZGxlZCBvdGhlcndpc2UpIHNob3VsZCBuYXZpZ2F0
ZSBiYWNrLgogICAgIGJvb2wgc2hvdWxkTmF2aWdhdGVCYWNrT25CYWNrc3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgIT0gRWRpdGluZ1VuaXhCZWhhdmlvcjsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IDVmYzM5NzYuLjc3YmU1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTEwOTAsNyArMTA5MCw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJk
KCktPndyaXRlSW1hZ2UocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLCB1cmwsIHJlc3VsdC5h
bHREaXNwbGF5U3RyaW5nKCkpOwogfQogCi1ib29sIEVkaXRvcjo6aXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKQorYm9vbCBFZGl0b3I6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiB9CkBAIC0xNjgxLDIzICsxNjgxLDYzIEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICB9CiB9CiAKLWJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQo
KQorLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIHRleHQgaXMgYSBzaW5n
bGUgd29yZC4KK3N0YXRpYyBib29sIGlzQVNpbmdsZVdvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQor
eworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQuY2hh
cmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gaXQgJiYgdGV4dEJyZWFrTmV4
dChpdCkgPT0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Lmxlbmd0aCgpKTsKK30KKworU3RyaW5nIEVk
aXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29u
c3QKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgc3BlbGxpbmcgZm9yIHRoZSBu
b2RlIGlzIGZvcmJpZGRlbi4KKyAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkgfHwgIWNsaWNrZWROb2RlIHx8ICFpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKGNsaWNr
ZWROb2RlKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYg
KCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rpb24uaXNOb25lKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIEdldCBzZWxlY3RlZCB0ZXh0IHRvIGNo
ZWNrIGZvciBtdWx0aXBsZSB3b3JkIHNlbGVjdGlvbi4KKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJp
bmcgPSBzZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgIGlmICghc2VsZWN0
ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIERvbid0IHByb3ZpZGUgc3VnZ2VzdGlv
bnMgZm9yIG11bHRpcGxlIHdvcmRzLgorICAgICAgICBpZiAoIWlzQVNpbmdsZVdvcmQoc2VsZWN0
ZWRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIC8v
IEdldCB0aGUgd29yZCBhcnJvdW5kIHRoZSBjYXJldC4KKyAgICBzZWxlY3Rpb24uZXhwYW5kVXNp
bmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBBU1NFUlQocmFuZ2UpOworICAg
IFN0cmluZyB3b3JkID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCktPnRleHQoKTsKKwor
ICAgIGlmICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIGludCB3b3JkTGVuZ3RoID0gd29yZC5sZW5ndGgoKTsKKyAgICBpbnQgbWlz
c3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Cisg
ICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHdvcmQuY2hhcmFjdGVycygp
LCB3b3JkTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsK
KworICAgIHJldHVybiBtaXNzcGVsbGluZ0xlbmd0aCA9PSB3b3JkTGVuZ3RoID8gd29yZCA6IFN0
cmluZygpOworfQorCitTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uKCkgY29uc3QK
IHsKICAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKICAgICBpbnQg
bGVuZ3RoID0gc2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWxlbmd0aCB8fCAhY2xpZW50KCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIGlmICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwogICAgIGludCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7CiAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKHNlbGVjdGVkU3RyaW5nLmNoYXJhY3RlcnMoKSwgbGVuZ3RoLCAmbWlzc3BlbGxpbmdM
b2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICAKICAgICAvLyBUaGUgc2VsZWN0aW9u
IG9ubHkgY291bnRzIGFzIG1pc3NwZWxsZWQgaWYgdGhlIHNlbGVjdGVkIHRleHQgaXMgZXhhY3Rs
eSBvbmUgbWlzc3BlbGxlZCB3b3JkCiAgICAgaWYgKG1pc3NwZWxsaW5nTGVuZ3RoICE9IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAg
CiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMg
ZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgog
ICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05T
U3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKQEAg
LTE3MDUsNyArMTc0NSw3IEBAIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQog
ICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChzZWxlY3RlZFN0cmluZyk7CiAgICAgCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHNlbGVjdGVkU3RyaW5nOwogfQogCiBib29sIEVkaXRvcjo6aXNTZWxl
Y3Rpb25VbmdyYW1tYXRpY2FsKCkKQEAgLTE3MzYsMTggKzE3NzYsMTcgQEAgVmVjdG9yPFN0cmlu
Zz4gRWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpCiAjZW5kaWYKIH0K
IAotVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigp
CitWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBT
dHJpbmcmIHdvcmQpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gc2VsZWN0
ZWRUZXh0KCk7Ci0gICAgQVNTRVJUKHNlbGVjdGVkU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NF
UlQod29yZC5sZW5ndGgoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQoc2Vs
ZWN0ZWRTdHJpbmcsIFN0cmluZygpLCBndWVzc2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+
Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3RyaW5nKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBn
dWVzc2VzOwogfQogCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1h
dGljYWwpCitWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7CiAgICAg
aWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0x
NzU2LDEwICsxNzk1LDEyIEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlCiAgICAgICAgIHJldHVy
biBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVs
bGVkLCB1bmdyYW1tYXRpY2FsKTsKICAgICB9CiAKLSAgICBtaXNzcGVsbGVkID0gaXNTZWxlY3Rp
b25NaXNzcGVsbGVkKCk7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gYmVoYXZpb3IoKS5z
aG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkgPyBtaXNzcGVs
bGVkV29yZEF0Q2FyZXRPclJhbmdlKG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkp
IDogbWlzc3BlbGxlZFNlbGVjdGlvbigpOworICAgIG1pc3NwZWxsZWQgPSAhbWlzc3BlbGxlZFdv
cmQuaXNFbXB0eSgpOworCiAgICAgaWYgKG1pc3NwZWxsZWQpIHsKICAgICAgICAgdW5ncmFtbWF0
aWNhbCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRTZWxlY3Rp
b24oKTsKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVk
V29yZCk7CiAgICAgfQogICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSAmJiBpc1Nl
bGVjdGlvblVuZ3JhbW1hdGljYWwoKSkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDE1MjM0ZGIuLmJhMzRjNTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaApAQCAtMjEzLDcgKzIxMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpOwogI2VuZGlmCiAgICAgCi0gICAg
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIGJvb2wgaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHRvZ2dsZUNvbnRp
bnVvdXNTcGVsbENoZWNraW5nKCk7CiAgICAgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KTsKICAgICB2b2lkIHRvZ2dsZUdyYW1tYXJDaGVja2luZygpOwpAQCAtMjIxLDEwICsyMjEsMTEg
QEAgcHVibGljOgogICAgIHZvaWQgbGVhcm5TcGVsbGluZygpOwogICAgIGludCBzcGVsbENoZWNr
ZXJEb2N1bWVudFRhZygpOwogICAgIGJvb2wgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCk7Ci0g
ICAgYm9vbCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOworICAgIFN0cmluZyBtaXNzcGVsbGVkU2VsZWN0
aW9uKCkgY29uc3Q7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9k
ZSogY2xpY2tlZE5vZGUpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQs
IGJvb2wmIHVuZ3JhbW1hdGljYWwpOworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNz
cGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGlj
YWwpOwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25z
dDsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSopIGNvbnN0OwogICAg
IHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5
cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCBhZGYwYTc5Li41N2RkYTJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0zNDEsMTIgKzM0MSwx
OSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKiBpdGVtKQogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgQVNTRVJUKGZyYW1lLT5l
ZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkubGVuZ3RoKCkpOwotICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGl0ZW0tPnRpdGxlKCksIGZyYW1lLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkg
ewotICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0g
ICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21N
YXJrdXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCksICIiKSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5
bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpOwotICAgICAgICAg
ICAgYXBwbHlDb21tYW5kKGNvbW1hbmQpOwotICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsK
KyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+YmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIC8vIFJlcGxh
Y2UgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciB3aXRoIHRoZSBzdWdnZXN0aW9uIGZyb20gdGhl
IGNvbnRleHQgbWVudS4KKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZy
YW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uQmFja3dhcmQsIFdvcmRHcmFu
dWxhcml0eSwgVXNlclRyaWdnZXJlZCk7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmRl
bGV0ZVdpdGhEaXJlY3Rpb24oRGlyZWN0aW9uRm9yd2FyZCwgV29yZEdyYW51bGFyaXR5LCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lLT5k
b2N1bWVudCgpLCBpdGVtLT50aXRsZSgpLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0
bGUoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7CisgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvY3VtZW50LCBpdGVtLT50aXRs
ZSgpLCAiIiksIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8IFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlByZXZlbnROZXN0aW5nKTsKKyAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoY29tbWFu
ZCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24o
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZVNwZWxsaW5nOgpAQCAtOTE0LDcgKzkyMSw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
Ojpwb3B1bGF0ZSgpCiAgICAgICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1p
c3NwZWxsaW5nIGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQogICAgICAgICAgICAg
ICAgIGJvb2wgbWlzc3BlbGxpbmc7CiAgICAgICAgICAgICAgICAgYm9vbCBiYWRHcmFtbWFyOwot
ICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCkt
Pmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5n
LCBiYWRHcmFtbWFyKTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0g
ZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChtaXNz
cGVsbGluZywgYmFkR3JhbW1hcik7CiAgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nIHx8
IGJhZEdyYW1tYXIpIHsKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBndWVzc2Vz
LnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaXplKSB7Cg==
</data>
<flag name="commit-queue"
          id="196720"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179744</attachid>
            <date>2012-12-17 07:57:20 -0800</date>
            <delta_ts>2013-01-08 07:40:51 -0800</delta_ts>
            <desc>update WebCore.exp.in</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>15912</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMjJjMmE5Li42OGNiNzZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTIt
MTcgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgT24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9u
cyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICBVbnNraXAgY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZm9y
IFdlYktpdC1FRkwgYXMgaXQgcGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBVcGRhdGUgZmFpbGluZyByZWFzb24uCisKIDIwMTIt
MTItMTYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBb
UXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBVcGRhdGUgZXhwZWN0ZWQgZmlsZXMgYWZ0ZXIgcjEz
Nzc5OC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRp
b25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMTMw
N2UwZi4uNGVkMjM0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTE2NDQsOSArMTY0NCw2IEBAIHdlYmtpdC5vcmcvYi82MTEzOCBodHRwL3Rlc3RzL3cz
Yy93ZWJwZXJmL3N1Ym1pc3Npb24vcmVzb3VyY2UtdGltaW5nIFsgU2tpcCBdCiAKIHdlYmtpdC5v
cmcvYi8xMDMxMDkgZmFzdC9kb20vc2hhZG93L2hvc3Qtd3JhcHBlci1yZWNsYWltZWQuaHRtbCBb
IEZhaWx1cmUgXQogCi0jIE5vIHNwZWxsY2hlY2sgc3VnZ2VzdGlvbnMgaW4gY29udGV4dCBtZW51
Ci1CdWcoRUZMKSBlZGl0aW5nL3NwZWxsaW5nL2NvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
IFsgRmFpbHVyZSBdCi0KICMgTm8gc3VwcG9ydCBmb3IgZXhwb3NpbmcgaW4tYmFuZCB0ZXh0IHRy
YWNrcwogQnVnKEVGTCkgbWVkaWEvdHJhY2svdHJhY2staW4tYmFuZC5odG1sIFsgU2tpcCBdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGE3ODhhNS4u
Mjk3MWU2MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTk4NCw3ICs5ODQsNyBAQCB3ZWJraXQub3JnL2IvNTA0ODUgaW5zcGVjdG9yLXByb3RvY29sL3Rh
a2UtaGVhcC1zbmFwc2hvdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgd2Via2l0
Lm9yZy9iLzIwMDExIHByaW50aW5nIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMzc2MTMgZWRpdGlu
Zy9leGVjQ29tbWFuZC9wcmludC5odG1sIFsgU2tpcCBdCiAKLSMgTmVlZCB0byBkdW1wIGNvbnRl
eHQgbWVudSBpdGVtcyBvbiBldmVudFNlbmRlci5jb250ZXh0Q2xpY2sodHJ1ZSkuCisjIERSVCBk
b2Vzbid0IGRpc3BhdGNoIGFuIGV2ZW50IGZvciB0aGUgc2Vjb25kIGNhbGwgZXZlbnRTZW5kZXIu
Y29udGV4dENsaWNrKCkuCiB3ZWJraXQub3JnL2IvMzkxMDIgZWRpdGluZy9zcGVsbGluZy9jb250
ZXh0LW1lbnUtc3VnZ2VzdGlvbnMuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFNvbWUgaW5wdXQgdHlw
ZT1yYW5nZSB0ZXN0cyBmYWlsIGJlY2F1c2Ugb2YgdGhlIHNpemUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiODVl
ZDFiLi4yZDJjMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTItMTItMTcgIEdy
emVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
T24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRo
b3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyB0byBnZXQvaW5zZXJ0IHNwZWxsaW5nIHN1
Z2dlc3Rpb25zIHdpdGhvdXQgc2VsZWN0aW5nIHRoZSBtaXNzcGVsbGVkIHdvcmQgZm9yCisgICAg
ICAgIEVGTCBhbmQgR1RLKyBXZWJLaXQgcG9ydHMuIFdlYkNvcmUgYXNzdW1lcyB0aGF0IHRoZSBt
aXNzcGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkCisgICAgICAgIHRvIGdldCBpdHMgc3Vn
Z2VzdGlvbnMuIEluIGNvbXBsaWFuY2Ugd2l0aCBuYXRpdmUgYXBwbGljYXRpb24gYmVoYXZpb3Vy
IGludHJvZHVjZQorICAgICAgICBhIG5ldyBlZGl0aW5nIHBvbGljeSB0byBkbyBub3QgaGlnaGxp
Z2h0IHRoZSBtaXNzcGVsbGVkIHdvcmQgdG8ganVzdCBnZXQgaXRzIGd1ZXNzZXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGNvbnRleHQtbWVudS1zdWdnZXN0aW9ucy5odG1s
LgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIFJlbW92ZSBfWk43V2ViQ29y
ZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlzc3BlbGxlZEV2IHN5bWJvbCBhcyBNYWMgcG9ydCBkb2Vz
bid0CisgICAgICAgIG5lZWQgaXQgYW55IGxvbmdlci4KKworICAgICAgICAqIGVkaXRpbmcvRWRp
dGluZ0JlaGF2aW9yLmg6CisgICAgICAgIChFZGl0aW5nQmVoYXZpb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ0JlaGF2aW9yOjpzaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRo
b3V0U2VsZWN0aW9uKToKKyAgICAgICAgQWRkIGEgbmV3IGJlaGF2aW9yIGZvciBVbml4LCB0byBh
bGxvdyBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGluZworICAgICAgICB0aGUg
bWlzc3BlbGxlZCB3b3JkLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIEFkZCBtaXNzaW5nIGNvbnN0IG1vZGlmaWVyLCB0byB1c2UgdGhpcyBtZXRob2QgaW4g
J21pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoKSBjb25zdCcuCisKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNBU2luZ2xlV29yZCk6CisgICAgICAgIEhlbHBlciBm
dW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0ZXh0IGlzIGEgc2luZ2xlIHdvcmQuIEJvcnJv
d2VkIGZyb20gQ2hyb21pdW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxl
ZFdvcmRBdENhcmV0T3JSYW5nZSk6CisgICAgICAgIEFsbG93IHRvIGNoZWNrIHNwZWxsaW5nIHVu
ZGVyIHRoZSBjYXJldCBvciBzZWxlY3RlZCB3b3JkLiBEb2VzIG5vdGhpbmcgZm9yIHNlbGVjdGlv
bgorICAgICAgICBtYWRlIG9uIHRoZSBtdWx0aXBsZSB3b3Jkcy4KKworICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uKToKKyAgICAgICAgUmV0dXJuIHRoZSBtaXNz
cGVsbGVkIHNlbGVjdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9y
TWlzc3BlbGxlZFdvcmQpOgorICAgICAgICBSZW1vdmUgJ1NlbGVjdGlvbicgZnJvbSBtZXRob2Qg
bmFtZSBhcyBpdCBtYXkgcmV0dXJuIGd1ZXNzZXMgd2l0aG91dCBzZWxlY3Rpb24uCisKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwp
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChFZGl0b3IpOgorICAgICAg
ICBEaXR0by4KKworICAgICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQpOgorICAgICAgICBBbGxvdyB0byBpbnNlcnQgc3BlbGxpbmcgc3VnZ2VzdGlvbnMgd2l0
aG91dCBzZWxlY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6cG9wdWxhdGUpOgorICAgICAgICBVcGRhdGUgZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWwgY2FsbC4KKwogMjAxMi0xMi0xNyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNjc5NC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KaW5kZXggN2EzNjAzZi4uYzU3MGQwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KQEAgLTg0MCw3ICs4NDAsNiBAQCBfX1pON1dlYkNvcmU2RWRpdG9yMTljb3VudE1hdGNoZXNG
b3JUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181UmFuZ2VFampiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTlkZWxldGVXaXRoRGlyZWN0aW9uRU5TXzE4U2VsZWN0aW9uRGlyZWN0aW9uRU5TXzE1VGV4dEdy
YW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYK
IF9fWk43V2ViQ29yZTZFZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGlvbkVQTlNfMTZTdHlsZVBy
b3BlcnR5U2V0RU5TXzEwRWRpdEFjdGlvbkUKLV9fWk43V2ViQ29yZTZFZGl0b3IyMWlzU2VsZWN0
aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVj
dGlvbkUxNldyaXRpbmdEaXJlY3Rpb24KIF9fWk43V2ViQ29yZTZFZGl0b3IyNGNvbXB1dGVBbmRT
ZXRUeXBpbmdTdHlsZUVQTlNfMTZTdHlsZVByb3BlcnR5U2V0RU5TXzEwRWRpdEFjdGlvbkUKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAppbmRleCA5NDE0MzBmLi4zNzRhOWU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmgKQEAgLTU5LDYgKzU5LDE3IEBA
IHB1YmxpYzoKIAogICAgIC8vIE9uIE1hYywgd2hlbiBwcm9jZXNzaW5nIGEgY29udGV4dHVhbCBj
bGljaywgdGhlIG9iamVjdCBiZWluZyBjbGlja2VkIHVwb24gc2hvdWxkIGJlIHNlbGVjdGVkLgog
ICAgIGJvb2wgc2hvdWxkU2VsZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IEVkaXRpbmdNYWNCZWhhdmlvcjsgfQorCisgICAgLy8gT24gTGludXgsIHNo
b3VsZCBiZSBhYmxlIHRvIGdldCBhbmQgaW5zZXJ0IHNwZWxsaW5nIHN1Z2dlc3Rpb25zIHdpdGhv
dXQgc2VsZWN0aW5nIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAgLy8gU2tpcCB0aGlzIHBvbGlj
eSBmb3IgQ2hyb21pdW0sIHRoZXkgcmVxdWlyZSBzZWxlY3Rpb24gZm9yIHRoZSBtaXNzcGVsbGVk
IHdvcmQuCisgICAgYm9vbCBzaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2Vs
ZWN0aW9uKCkgY29uc3QKKyAgICB7CisjaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEsp
CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gRWRpdGluZ1VuaXhCZWhhdmlvcjsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICAvLyBPbiBNYWMg
YW5kIFdpbmRvd3MsIHByZXNzaW5nIGJhY2tzcGFjZSAod2hlbiBpdCBpc24ndCBoYW5kbGVkIG90
aGVyd2lzZSkgc2hvdWxkIG5hdmlnYXRlIGJhY2suCiAgICAgYm9vbCBzaG91bGROYXZpZ2F0ZUJh
Y2tPbkJhY2tzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBFZGl0aW5nVW5peEJlaGF2
aW9yOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNWZjMzk3Ni4uNzdiZTUwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBF
ZGl0b3I6OmNvcHlJbWFnZShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgUGFzdGVi
b2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVJbWFnZShyZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCksIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CiB9CiAKLWJvb2wgRWRp
dG9yOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCitib29sIEVkaXRvcjo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBjbGll
bnQoKSAmJiBjbGllbnQoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0K
QEAgLTE2ODEsMjMgKzE2ODEsNjMgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVs
bGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIH0KIAotYm9vbCBFZGl0b3I6
OmlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5l
IHdoZXRoZXIgdGV4dCBpcyBhIHNpbmdsZSB3b3JkLgorc3RhdGljIGJvb2wgaXNBU2luZ2xlV29y
ZChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29y
ZEJyZWFrSXRlcmF0b3IodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCkpOworICAgIHJl
dHVybiBpdCAmJiB0ZXh0QnJlYWtOZXh0KGl0KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHQubGVu
Z3RoKCkpOworfQorCitTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdl
KE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlm
IHRoZSBzcGVsbGluZyBmb3IgdGhlIG5vZGUgaXMgZm9yYmlkZGVuLgorICAgIGlmICghaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8
IHNlbGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8g
R2V0IHNlbGVjdGVkIHRleHQgdG8gY2hlY2sgZm9yIG11bHRpcGxlIHdvcmQgc2VsZWN0aW9uLgor
ICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFj
ZSgpOworCisgICAgaWYgKCFzZWxlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
RG9uJ3QgcHJvdmlkZSBzdWdnZXN0aW9ucyBmb3IgbXVsdGlwbGUgd29yZHMuCisgICAgICAgIGlm
ICghaXNBU2luZ2xlV29yZChzZWxlY3RlZFN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgfQorCisgICAgLy8gR2V0IHRoZSB3b3JkIGFycm91bmQgdGhlIGNhcmV0Lgor
ICAgIHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIEFTU0VSVChyYW5nZSk7CisgICAgU3RyaW5nIHdvcmQgPSBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKS0+dGV4dCgpOworCisgICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaW50IHdvcmRMZW5ndGggPSB3b3Jk
Lmxlbmd0aCgpOworICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1p
c3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcod29yZC5jaGFyYWN0ZXJzKCksIHdvcmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9u
LCAmbWlzc3BlbGxpbmdMZW5ndGgpOworCisgICAgcmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09
IHdvcmRMZW5ndGggPyB3b3JkIDogU3RyaW5nKCk7Cit9CisKK1N0cmluZyBFZGl0b3I6Om1pc3Nw
ZWxsZWRTZWxlY3Rpb24oKSBjb25zdAogewogICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNl
bGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBzZWxlY3RlZFN0cmluZy5sZW5ndGgoKTsK
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbGVuZ3Ro
IHx8ICFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYgKCFjbGll
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIGludCBtaXNzcGVsbGluZ0xv
Y2F0aW9uID0gLTE7CiAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKICAgICB0ZXh0Q2hl
Y2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc2VsZWN0ZWRTdHJpbmcuY2hhcmFjdGVycygp
LCBsZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAg
IAogICAgIC8vIFRoZSBzZWxlY3Rpb24gb25seSBjb3VudHMgYXMgbWlzc3BlbGxlZCBpZiB0aGUg
c2VsZWN0ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBtaXNzcGVsbGVkIHdvcmQKICAgICBpZiAobWlz
c3BlbGxpbmdMZW5ndGggIT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVs
IHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5n
IHBhbmVsIGlzIG9uIHNjcmVlbikuCiAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBh
IHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9j
dW1lbnRXaXRoVGFnOl0gd29yawpAQCAtMTcwNSw3ICsxNzQ1LDcgQEAgYm9vbCBFZGl0b3I6Omlz
U2VsZWN0aW9uTWlzc3BlbGxlZCgpCiAgICAgLy8gb3IgYSBncmFtbWFyIGVycm9yLgogICAgIGNs
aWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNlbGVjdGVkU3RyaW5n
KTsKICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0ZWRTdHJpbmc7CiB9
CiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQpAQCAtMTczNiwxOCAr
MTc3NiwxNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRpY2Fs
U2VsZWN0aW9uKCkKICNlbmRpZgogfQogCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKK1ZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIHsKLSAgICBTdHJpbmcg
c2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKLSAgICBBU1NFUlQoc2VsZWN0ZWRTdHJp
bmcubGVuZ3RoKCkpOworICAgIEFTU0VSVCh3b3JkLmxlbmd0aCgpKTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IGd1ZXNzZXM7CiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tlcigp
LT5nZXRHdWVzc2VzRm9yV29yZChzZWxlY3RlZFN0cmluZywgU3RyaW5nKCksIGd1ZXNzZXMpOwor
ICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwg
Z3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEVkaXRv
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlz
c3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKK1ZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYg
dW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7
CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9O
b3JtYWxpemVkUmFuZ2UoKTsKQEAgLTE3NTYsMTAgKzE3OTUsMTIgQEAgVmVjdG9yPFN0cmluZz4g
RWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29s
JiBtaXNzcGUKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFu
Z2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOwogICAgIH0KIAotICAg
IG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKKyAgICBTdHJpbmcgbWlzc3Bl
bGxlZFdvcmQgPSBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhv
dXRTZWxlY3Rpb24oKSA/IG1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UobV9mcmFtZS0+ZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSkgOiBtaXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAgbWlz
c3BlbGxlZCA9ICFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCk7CisKICAgICBpZiAobWlzc3BlbGxl
ZCkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVz
c2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOworICAgICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1p
c3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICB9CiAgICAgaWYgKGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpICYmIGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpKSB7CiAgICAgICAg
IHVuZ3JhbW1hdGljYWwgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMTUyMzRk
Yi4uYmEzNGM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yMTMsNyArMjEzLDcgQEAg
cHVibGljOgogICAgIGJvb2wgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50
KCk7CiAjZW5kaWYKICAgICAKLSAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCk7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0
OwogICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsKICAgICBib29sIGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5n
KCk7CkBAIC0yMjEsMTAgKzIyMSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBsZWFyblNwZWxsaW5n
KCk7CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7CiAgICAgYm9vbCBpc1NlbGVj
dGlvblVuZ3JhbW1hdGljYWwoKTsKLSAgICBib29sIGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwot
ICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAg
U3RyaW5nIG1pc3NwZWxsZWRTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgbWlzc3BlbGxl
ZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3Q7CisgICAgVmVjdG9y
PFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGNvbnN0Owog
ICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxl
Y3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CisgICAgVmVjdG9y
PFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxl
ZEZvcihOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGFkZjBhNzku
LjU3ZGRhMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKQEAgLTM0MSwxMiArMzQxLDE5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCiAgICAgICAgIGJy
ZWFrOwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgot
ICAgICAgICBBU1NFUlQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7
Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0
bGUoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1l
bnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIp
LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2
ZW50TmVzdGluZyk7Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7Ci0gICAgICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5iZWhh
dmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkg
eworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yIHdpdGgg
dGhlIHN1Z2dlc3Rpb24gZnJvbSB0aGUgY29udGV4dCBtZW51LgorICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJl
Y3Rpb25CYWNrd2FyZCwgV29yZEdyYW51bGFyaXR5LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICAgICAg
ICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJk
LCBXb3JkR3JhbnVsYXJpdHksIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFRleHQoZnJhbWUtPmRvY3VtZW50KCksIGl0ZW0tPnRpdGxlKCksIDApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCkubGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c2hv
dWxkSW5zZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpIHsKKyAgICAgICAg
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCksICIiKSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUg
fCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpOworICAgICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6CkBAIC05MTQsNyArOTIxLDcgQEAgdm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICAvLyBp
cyBuZXZlciBjb25zaWRlcmVkIGEgbWlzc3BlbGxpbmcgYW5kIGJhZCBncmFtbWFyIGF0IHRoZSBz
YW1lIHRpbWUpCiAgICAgICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKICAgICAgICAgICAg
ICAgICBib29sIGJhZEdyYW1tYXI7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlcyA9IGZyYW1lLT5lZGl0b3IoKS0+Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWxTZWxlY3Rpb24obWlzc3BlbGxpbmcsIGJhZEdyYW1tYXIpOworICAgICAgICAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKICAgICAgICAgICAg
ICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgewogICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IXNpemUpIHsK
</data>
<flag name="review"
          id="196737"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181693</attachid>
            <date>2013-01-08 07:40:51 -0800</date>
            <delta_ts>2013-01-09 02:51:48 -0800</delta_ts>
            <desc>applied  Ryosuke&apos;s suggestions</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>15137</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YjU5NmJlLi45ZTJkZjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEt
MDggIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgT24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9u
cyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICBVbnNraXAgY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZm9y
IFdlYktpdC1FRkwgYXMgaXQgcGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBVcGRhdGUgZmFpbGluZyByZWFzb24uCisKIDIwMTMt
MDEtMDggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBEb24ndCBjb25maW5lIHBhZ2UgcG9wdXBzIHRvIHJvb3QgdmlldyBvbiBNYWMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOWFkYWRlOC4uNWU4
MGE2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE2
OTAsOSArMTY5MCw2IEBAIHdlYmtpdC5vcmcvYi8xMDE2NzAgbWVkaWEvdmlkZW8tY29udHJvbHMt
Y2FwdGlvbnMtdHJhY2ttZW51LWxvY2FsaXplZC5odG1sIFsgU2tpCiAjIEZhaWxzIHVudGlsIHdl
IGVuYWJsZSB0aGUgUmVzb3VyY2UgVGltaW5nIEFQSS4KIHdlYmtpdC5vcmcvYi82MTEzOCBodHRw
L3Rlc3RzL3czYy93ZWJwZXJmL3N1Ym1pc3Npb24vcmVzb3VyY2UtdGltaW5nIFsgU2tpcCBdCiAK
LSMgTm8gc3BlbGxjaGVjayBzdWdnZXN0aW9ucyBpbiBjb250ZXh0IG1lbnUKLUJ1ZyhFRkwpIGVk
aXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0K
LQogIyBObyBzdXBwb3J0IGZvciBleHBvc2luZyBpbi1iYW5kIHRleHQgdHJhY2tzCiBCdWcoRUZM
KSBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwgWyBTa2lwIF0KIEJ1ZyhFRkwpIG1lZGlh
L3RyYWNrL3RyYWNrLWluLWJhbmQtY3Vlcy1hZGRlZC1vbmNlLmh0bWwgWyBTa2lwIF0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMjkzMjBmMy4uZmIwNzAw
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTk5MSw3
ICs5OTEsNyBAQCB3ZWJraXQub3JnL2IvNzM5MzYgaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJk
L2NhbnZhcy1oYXMtdW5pbnN0cnVtZW50ZWQtY2FudmFzZQogd2Via2l0Lm9yZy9iLzM3NjEzIHdl
YmtpdC5vcmcvYi8yMDAxMSBwcmludGluZyBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzM3NjEzIGVk
aXRpbmcvZXhlY0NvbW1hbmQvcHJpbnQuaHRtbCBbIFNraXAgXQogCi0jIE5lZWQgdG8gZHVtcCBj
b250ZXh0IG1lbnUgaXRlbXMgb24gZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKHRydWUpLgorIyBE
UlQgZG9lc24ndCBkaXNwYXRjaCBhbiBldmVudCBmb3IgdGhlIHNlY29uZCBjYWxsIGV2ZW50U2Vu
ZGVyLmNvbnRleHRDbGljaygpLgogd2Via2l0Lm9yZy9iLzM5MTAyIGVkaXRpbmcvc3BlbGxpbmcv
Y29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBTb21lIGlucHV0
IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWE3NzIzZi4uOTJjMzRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAxLTA4
ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisgICAg
ICAgIE9uIExpbnV4LCBzaG91bGQgYmUgYWJsZSB0byBnZXQgc3BlbGxpbmcgc3VnZ2VzdGlvbnMg
d2l0aG91dCBzZWxlY3RpbmcgdGhlIG1pc3NwZWxsZWQgd29yZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cgdG8gZ2V0L2luc2VydCBzcGVsbGlu
ZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkIGZvcgor
ICAgICAgICBMaW51eCBXZWJLaXQgcG9ydHMuIFdlYkNvcmUgYXNzdW1lcyB0aGF0IHRoZSBtaXNz
cGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkCisgICAgICAgIHRvIGdldCBpdHMgc3VnZ2Vz
dGlvbnMuCisKKyAgICAgICAgSW4gY29tcGxpYW5jZSB3aXRoIG5hdGl2ZSBhcHBsaWNhdGlvbiBi
ZWhhdmlvdXIgYSBuZXcgZWRpdGluZyBwb2xpY3kgaXMgaW50cm9kdWNlZCwKKyAgICAgICAgdG8g
ZG8gbm90IGhpZ2hsaWdodCB0aGUgbWlzc3BlbGxlZCB3b3JkIHRvIGp1c3QgZ2V0IGl0cyBndWVz
c2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBjb250ZXh0LW1lbnUtc3Vn
Z2VzdGlvbnMuaHRtbC4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBSZW1v
dmUgX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3NwZWxsZWRFdiBzeW1ib2wgYXMg
TWFjIHBvcnQgZG9lc24ndAorICAgICAgICBuZWVkIGl0IGFueSBsb25nZXIuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oOgorICAgICAgICAoRWRpdGluZ0JlaGF2aW9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdCZWhhdmlvcjo6c2hvdWxkQWxsb3dTcGVsbGluZ1N1
Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbik6CisgICAgICAgIEFkZCBhIG5ldyBiZWhhdmlvciBm
b3IgTGludXgsIHRvIGFsbG93IHNwZWxsaW5nIHN1Z2dlc3Rpb25zIHdpdGhvdXQgc2VsZWN0aW5n
CisgICAgICAgIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY29uc3QgbW9kaWZpZXIsIHRvIHVzZSB0
aGlzIG1ldGhvZCBpbiAnbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSgpIGNvbnN0Jy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKToK
KyAgICAgICAgQWxsb3cgdG8gY2hlY2sgc3BlbGxpbmcgdW5kZXIgdGhlIGNhcmV0IG9yIHNlbGVj
dGVkIHdvcmQuCisgICAgICAgIERvZXMgbm90aGluZyBmb3Igc2VsZWN0aW9uIG1hZGUgb24gdGhl
IG11bHRpcGxlIHdvcmRzLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkU2Vs
ZWN0aW9uKToKKyAgICAgICAgUmV0dXJuIHRoZSBtaXNzcGVsbGVkIHNlbGVjdGlvbi4KKworICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAg
ICBSZW1vdmUgJ1NlbGVjdGlvbicgZnJvbSBtZXRob2QgbmFtZSBhcyBpdCBtYXkgcmV0dXJuIGd1
ZXNzZXMgd2l0aG91dCBzZWxlY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwpOgorICAgICAgICBEaXR0by4KKworICAg
ICAgICAqIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAg
ICBBbGxvdyB0byBpbnNlcnQgc3BlbGxpbmcgc3VnZ2VzdGlvbnMgd2l0aG91dCBzZWxlY3Rpb24u
CisKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgor
ICAgICAgICBVcGRhdGUgZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwgY2FsbC4K
KwogMjAxMy0wMS0wOCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIERvbid0IGNvbmZpbmUgcGFnZSBwb3B1cHMgdG8gcm9vdCB2aWV3IG9u
IE1hYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBkNDE2MjQ2Li44Y2M0MTYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgpAQCAtODQzLDcgKzg0Myw2IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IxOWNvdW50
TWF0Y2hlc0ZvclRleHRFUktOM1dURjZTdHJpbmdFUE5TXzVSYW5nZUVqamIKIF9fWk43V2ViQ29y
ZTZFZGl0b3IxOWRlbGV0ZVdpdGhEaXJlY3Rpb25FTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25FTlNf
MTVUZXh0R3JhbnVsYXJpdHlFYmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWluc2VydFVub3JkZXJl
ZExpc3RFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIxYXBwbHlTdHlsZVRvU2VsZWN0aW9uRVBOU18x
NlN0eWxlUHJvcGVydHlTZXRFTlNfMTBFZGl0QWN0aW9uRQotX19aTjdXZWJDb3JlNkVkaXRvcjIx
aXNTZWxlY3Rpb25NaXNzcGVsbGVkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyM3NldEJhc2VXcml0
aW5nRGlyZWN0aW9uRTE2V3JpdGluZ0RpcmVjdGlvbgogX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xNlN0eWxlUHJvcGVydHlTZXRFTlNfMTBFZGl0QWN0
aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsRXYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oCmluZGV4IDk0MTQzMGYuLjUzOGVl
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0JlaGF2aW9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaApAQCAtNTksNiAr
NTksMTcgQEAgcHVibGljOgogCiAgICAgLy8gT24gTWFjLCB3aGVuIHByb2Nlc3NpbmcgYSBjb250
ZXh0dWFsIGNsaWNrLCB0aGUgb2JqZWN0IGJlaW5nIGNsaWNrZWQgdXBvbiBzaG91bGQgYmUgc2Vs
ZWN0ZWQuCiAgICAgYm9vbCBzaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2soKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gRWRpdGluZ01hY0JlaGF2aW9yOyB9CisKKyAgICAvLyBPbiBM
aW51eCwgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFuZCBpbnNlcnQgc3BlbGxpbmcgc3VnZ2VzdGlv
bnMgd2l0aG91dCBzZWxlY3RpbmcgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICAvLyBTa2lwIHRo
aXMgcG9saWN5IGZvciBDaHJvbWl1bSwgdGhleSByZXF1aXJlIHNlbGVjdGlvbiBmb3IgdGhlIG1p
c3NwZWxsZWQgd29yZC4KKyAgICBib29sIHNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dp
dGhvdXRTZWxlY3Rpb24oKSBjb25zdAorICAgIHsKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgICAgIHJldHVybiBtX3R5cGUgPT0gRWRpdGluZ1VuaXhCZWhhdmlvcjsKKyNlbHNlCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICAvLyBPbiBNYWMgYW5k
IFdpbmRvd3MsIHByZXNzaW5nIGJhY2tzcGFjZSAod2hlbiBpdCBpc24ndCBoYW5kbGVkIG90aGVy
d2lzZSkgc2hvdWxkIG5hdmlnYXRlIGJhY2suCiAgICAgYm9vbCBzaG91bGROYXZpZ2F0ZUJhY2tP
bkJhY2tzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBFZGl0aW5nVW5peEJlaGF2aW9y
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNWZjMzk3Ni4uMDZjYmQxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBFZGl0
b3I6OmNvcHlJbWFnZShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVJbWFnZShyZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCksIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CiB9CiAKLWJvb2wgRWRpdG9y
Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCitib29sIEVkaXRvcjo6aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBjbGllbnQo
KSAmJiBjbGllbnQoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKIH0KQEAg
LTE2ODEsMjMgKzE2ODEsNTAgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIH0KIAotYm9vbCBFZGl0b3I6Omlz
U2VsZWN0aW9uTWlzc3BlbGxlZCgpCitTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2Fy
ZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAoreworICAgIGlmICghaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSB8fCAhY2xpY2tlZE5vZGUgfHwgIWlzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3IoY2xpY2tlZE5vZGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
KyAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IHNl
bGVjdGlvbi5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gR2V0
IHRoZSB3b3JkJ3MgcmFuZ2UgYXJyb3VuZCB0aGUgY2FyZXQuCisgICAgVmlzaWJsZVNlbGVjdGlv
biB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5zdGFydCgpKTsKKyAgICB3b3JkU2VsZWN0aW9uLmV4
cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICBSZWZQdHI8UmFuZ2U+
IHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKworICAgIC8v
IElmIHNvbWUgdGV4dCB3YXMgc2VsZWN0ZWQsIGRvbid0IHByb3ZpZGUgc3VnZ2VzdGlvbnMgZm9y
IHRoZSBtdWx0aXBsZSB3b3Jkcy4KKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhYXJl
UmFuZ2VzRXF1YWwod29yZFJhbmdlLmdldCgpLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZyB3b3JkID0g
d29yZFJhbmdlLT50ZXh0KCk7CisgICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkLmxl
bmd0aCgpOworICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgaW50IG1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcod29yZC5jaGFyYWN0ZXJzKCksIHdvcmRMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAm
bWlzc3BlbGxpbmdMZW5ndGgpOworCisgICAgcmV0dXJuIG1pc3NwZWxsaW5nTGVuZ3RoID09IHdv
cmRMZW5ndGggPyB3b3JkIDogU3RyaW5nKCk7Cit9CisKK1N0cmluZyBFZGl0b3I6Om1pc3NwZWxs
ZWRTZWxlY3Rpb24oKSBjb25zdAogewogICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVj
dGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBzZWxlY3RlZFN0cmluZy5sZW5ndGgoKTsKLSAg
ICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbGVuZ3RoIHx8
ICFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYgKCFjbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIGludCBtaXNzcGVsbGluZ0xvY2F0
aW9uID0gLTE7CiAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKICAgICB0ZXh0Q2hlY2tl
cigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc2VsZWN0ZWRTdHJpbmcuY2hhcmFjdGVycygpLCBs
ZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgIAog
ICAgIC8vIFRoZSBzZWxlY3Rpb24gb25seSBjb3VudHMgYXMgbWlzc3BlbGxlZCBpZiB0aGUgc2Vs
ZWN0ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBtaXNzcGVsbGVkIHdvcmQKICAgICBpZiAobWlzc3Bl
bGxpbmdMZW5ndGggIT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAKICAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRv
IGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBh
bmVsIGlzIG9uIHNjcmVlbikuCiAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1
YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1l
bnRXaXRoVGFnOl0gd29yawpAQCAtMTcwNSw3ICsxNzMyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU2Vs
ZWN0aW9uTWlzc3BlbGxlZCgpCiAgICAgLy8gb3IgYSBncmFtbWFyIGVycm9yLgogICAgIGNsaWVu
dCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNlbGVjdGVkU3RyaW5nKTsK
ICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2VsZWN0ZWRTdHJpbmc7CiB9CiAK
IGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQpAQCAtMTczNiwxOCArMTc2
MywxNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2Vs
ZWN0aW9uKCkKICNlbmRpZgogfQogCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkU2VsZWN0aW9uKCkKK1ZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIHsKLSAgICBTdHJpbmcgc2Vs
ZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKLSAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcu
bGVuZ3RoKCkpOworICAgIEFTU0VSVCh3b3JkLmxlbmd0aCgpKTsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IGd1ZXNzZXM7CiAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5n
ZXRHdWVzc2VzRm9yV29yZChzZWxlY3RlZFN0cmluZywgU3RyaW5nKCksIGd1ZXNzZXMpOworICAg
ICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBTdHJpbmcoKSwgZ3Vl
c3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKK1ZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5n
cmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKQEAgLTE3NTYsMTAgKzE3ODIsMTIgQEAgVmVjdG9yPFN0cmluZz4gRWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBt
aXNzcGUKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2Up
Lmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOwogICAgIH0KIAotICAgIG1p
c3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKKyAgICBTdHJpbmcgbWlzc3BlbGxl
ZFdvcmQgPSBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRT
ZWxlY3Rpb24oKSA/IG1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UobV9mcmFtZS0+ZG9jdW1l
bnQoKS0+Zm9jdXNlZE5vZGUoKSkgOiBtaXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAgbWlzc3Bl
bGxlZCA9ICFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCk7CisKICAgICBpZiAobWlzc3BlbGxlZCkg
ewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVzc2Vz
Rm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOworICAgICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKICAgICB9CiAgICAgaWYgKGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpICYmIGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpKSB7CiAgICAgICAgIHVu
Z3JhbW1hdGljYWwgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMTUyMzRkYi4u
YmEzNGM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KCk7
CiAjZW5kaWYKICAgICAKLSAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KCk7CisgICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIGNvbnN0Owog
ICAgIHZvaWQgdG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tpbmcoKTsKICAgICBib29sIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpOwogICAgIHZvaWQgdG9nZ2xlR3JhbW1hckNoZWNraW5nKCk7
CkBAIC0yMjEsMTAgKzIyMSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBsZWFyblNwZWxsaW5nKCk7
CiAgICAgaW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7CiAgICAgYm9vbCBpc1NlbGVjdGlv
blVuZ3JhbW1hdGljYWwoKTsKLSAgICBib29sIGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwotICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7CisgICAgU3Ry
aW5nIG1pc3NwZWxsZWRTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdv
cmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3Q7CisgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7Ci0gICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rp
b24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CisgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxl
ZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVk
SW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
cihOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGFkZjBhNzkuLjlm
OWQ5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKQEAgLTM0MSwxMSArMzQxLDE4IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCiAgICAgICAgIGJyZWFr
OwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgotICAg
ICAgICBBU1NFUlQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7CiAg
ICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUo
KSwgZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb25QYXN0ZWQpKSB7CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQs
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50
TmVzdGluZyk7Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7CisgICAgICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLT5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdn
ZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Ug
dGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciB3aXRoIHRoZSBzdWdnZXN0aW9uIGZyb20gdGhlIGNv
bnRleHQgbWVudS4KKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3Jh
bnVsYXJpdHksIFVzZXJUcmlnZ2VyZWQpOworICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+ZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25Gb3J3YXJkLCBXb3JkR3JhbnVsYXJpdHks
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0
KGRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkubGVuZ3Ro
KCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29t
bWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyk7
CisgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKGNvbW1hbmQpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTkxNCw3ICs5MjEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUo
KQogICAgICAgICAgICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVsbGluZyBh
bmQgYmFkIGdyYW1tYXIgYXQgdGhlIHNhbWUgdGltZSkKICAgICAgICAgICAgICAgICBib29sIG1p
c3NwZWxsaW5nOwogICAgICAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1h
cik7CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1lLT5lZGl0
b3IoKS0+Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwobWlzc3BlbGxpbmcsIGJh
ZEdyYW1tYXIpOwogICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFy
KSB7CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gZ3Vlc3Nlcy5zaXplKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2l6ZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181885</attachid>
            <date>2013-01-09 02:51:48 -0800</date>
            <delta_ts>2013-01-10 23:55:35 -0800</delta_ts>
            <desc>polish the patch regarding to Ryosuke&apos;s comments</desc>
            <filename>spelling-context-menu-suggestion.patch</filename>
            <type>text/plain</type>
            <size>15656</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YjU5NmJlLi45ZTJkZjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEt
MDggIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgT24gTGludXgsIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzcGVsbGluZyBzdWdnZXN0aW9u
cyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM1MjAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICBVbnNraXAgY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgZm9y
IFdlYktpdC1FRkwgYXMgaXQgcGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICBVcGRhdGUgZmFpbGluZyByZWFzb24uCisKIDIwMTMt
MDEtMDggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBEb24ndCBjb25maW5lIHBhZ2UgcG9wdXBzIHRvIHJvb3QgdmlldyBvbiBNYWMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggOWFkYWRlOC4uNWU4
MGE2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE2
OTAsOSArMTY5MCw2IEBAIHdlYmtpdC5vcmcvYi8xMDE2NzAgbWVkaWEvdmlkZW8tY29udHJvbHMt
Y2FwdGlvbnMtdHJhY2ttZW51LWxvY2FsaXplZC5odG1sIFsgU2tpCiAjIEZhaWxzIHVudGlsIHdl
IGVuYWJsZSB0aGUgUmVzb3VyY2UgVGltaW5nIEFQSS4KIHdlYmtpdC5vcmcvYi82MTEzOCBodHRw
L3Rlc3RzL3czYy93ZWJwZXJmL3N1Ym1pc3Npb24vcmVzb3VyY2UtdGltaW5nIFsgU2tpcCBdCiAK
LSMgTm8gc3BlbGxjaGVjayBzdWdnZXN0aW9ucyBpbiBjb250ZXh0IG1lbnUKLUJ1ZyhFRkwpIGVk
aXRpbmcvc3BlbGxpbmcvY29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0K
LQogIyBObyBzdXBwb3J0IGZvciBleHBvc2luZyBpbi1iYW5kIHRleHQgdHJhY2tzCiBCdWcoRUZM
KSBtZWRpYS90cmFjay90cmFjay1pbi1iYW5kLmh0bWwgWyBTa2lwIF0KIEJ1ZyhFRkwpIG1lZGlh
L3RyYWNrL3RyYWNrLWluLWJhbmQtY3Vlcy1hZGRlZC1vbmNlLmh0bWwgWyBTa2lwIF0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMjkzMjBmMy4uZmIwNzAw
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTk5MSw3
ICs5OTEsNyBAQCB3ZWJraXQub3JnL2IvNzM5MzYgaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJk
L2NhbnZhcy1oYXMtdW5pbnN0cnVtZW50ZWQtY2FudmFzZQogd2Via2l0Lm9yZy9iLzM3NjEzIHdl
YmtpdC5vcmcvYi8yMDAxMSBwcmludGluZyBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzM3NjEzIGVk
aXRpbmcvZXhlY0NvbW1hbmQvcHJpbnQuaHRtbCBbIFNraXAgXQogCi0jIE5lZWQgdG8gZHVtcCBj
b250ZXh0IG1lbnUgaXRlbXMgb24gZXZlbnRTZW5kZXIuY29udGV4dENsaWNrKHRydWUpLgorIyBE
UlQgZG9lc24ndCBkaXNwYXRjaCBhbiBldmVudCBmb3IgdGhlIHNlY29uZCBjYWxsIGV2ZW50U2Vu
ZGVyLmNvbnRleHRDbGljaygpLgogd2Via2l0Lm9yZy9iLzM5MTAyIGVkaXRpbmcvc3BlbGxpbmcv
Y29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBTb21lIGlucHV0
IHR5cGU9cmFuZ2UgdGVzdHMgZmFpbCBiZWNhdXNlIG9mIHRoZSBzaXplCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWE3NzIzZi4uZGI2ZTBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEzLTAxLTA4
ICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisgICAg
ICAgIE9uIExpbnV4LCBzaG91bGQgYmUgYWJsZSB0byBnZXQgc3BlbGxpbmcgc3VnZ2VzdGlvbnMg
d2l0aG91dCBzZWxlY3RpbmcgdGhlIG1pc3NwZWxsZWQgd29yZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxsb3cgdG8gZ2V0L2luc2VydCBzcGVsbGlu
ZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGluZyB0aGUgbWlzc3BlbGxlZCB3b3JkIGZvcgor
ICAgICAgICBMaW51eCBXZWJLaXQgcG9ydHMuIFdlYkNvcmUgYXNzdW1lcyB0aGF0IHRoZSBtaXNz
cGVsbGVkIHdvcmQgaGFzIHRvIGJlIHNlbGVjdGVkCisgICAgICAgIHRvIGdldCBpdHMgc3VnZ2Vz
dGlvbnMuCisKKyAgICAgICAgSW4gY29tcGxpYW5jZSB3aXRoIG5hdGl2ZSBhcHBsaWNhdGlvbiBi
ZWhhdmlvdXIgYSBuZXcgZWRpdGluZyBwb2xpY3kgaXMgaW50cm9kdWNlZCwKKyAgICAgICAgdG8g
ZG8gbm90IGhpZ2hsaWdodCB0aGUgbWlzc3BlbGxlZCB3b3JkIHRvIGp1c3QgZ2V0IGl0cyBndWVz
c2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBjb250ZXh0LW1lbnUtc3Vn
Z2VzdGlvbnMuaHRtbC4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICBSZW1v
dmUgX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3NwZWxsZWRFdiBzeW1ib2wgYXMg
TWFjIHBvcnQgZG9lc24ndAorICAgICAgICBuZWVkIGl0IGFueSBsb25nZXIuCisKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oOgorICAgICAgICAoRWRpdGluZ0JlaGF2aW9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdCZWhhdmlvcjo6c2hvdWxkQWxsb3dTcGVsbGluZ1N1
Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbik6CisgICAgICAgIEFkZCBhIG5ldyBiZWhhdmlvciBm
b3IgTGludXgsIHRvIGFsbG93IHNwZWxsaW5nIHN1Z2dlc3Rpb25zIHdpdGhvdXQgc2VsZWN0aW5n
CisgICAgICAgIHRoZSBtaXNzcGVsbGVkIHdvcmQuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY29uc3QgbW9kaWZpZXIsIHRvIHVzZSB0
aGlzIG1ldGhvZCBpbiAnbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSgpIGNvbnN0Jy4KKwor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKToK
KyAgICAgICAgQWxsb3cgdG8gY2hlY2sgc3BlbGxpbmcgdW5kZXIgdGhlIGNhcmV0IG9yIHNlbGVj
dGVkIHdvcmQuCisgICAgICAgIERvZXMgbm90aGluZyBmb3Igc2VsZWN0aW9uIG1hZGUgb24gdGhl
IG11bHRpcGxlIHdvcmRzLgorCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1pc3NwZWxsZWRT
ZWxlY3Rpb25TdHJpbmcpOgorICAgICAgICBSZXR1cm4gdGhlIG1pc3NwZWxsZWQgc2VsZWN0aW9u
LgorCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgIFJlbW92ZSAnU2VsZWN0aW9uJyBmcm9tIG1ldGhvZCBuYW1lIGFzIGl0IG1heSBy
ZXR1cm4gZ3Vlc3NlcyB3aXRob3V0IHNlbGVjdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIERpdHRv
LgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6
CisgICAgICAgIFNlbGVjdCB0aGUgd29yZCB1bmRlciBjYXJldCB0byBtZWV0IHRoZSBjb25kaXRp
b25zIGZyb20gbWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZS4KKworICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpwb3B1bGF0ZSk6CisgICAgICAgIFVwZGF0ZSBndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCBjYWxsLgorCiAyMDEzLTAxLTA4ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRG9u
J3QgY29uZmluZSBwYWdlIHBvcHVwcyB0byByb290IHZpZXcgb24gTWFjCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IGQ0MTYyNDYuLjhjYzQxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC04NDMs
NyArODQzLDYgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04z
V1RGNlN0cmluZ0VQTlNfNVJhbmdlRWpqYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5ZGVsZXRlV2l0
aERpcmVjdGlvbkVOU18xOFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVi
YgogX19aTjdXZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNv
cmU2RWRpdG9yMjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE2U3R5bGVQcm9wZXJ0eVNldEVO
U18xMEVkaXRBY3Rpb25FCi1fX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3NwZWxs
ZWRFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FMTZXcml0
aW5nRGlyZWN0aW9uCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGVFUE5TXzE2U3R5bGVQcm9wZXJ0eVNldEVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU2
RWRpdG9yMjRpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ0JlaGF2aW9yLmgKaW5kZXggOTQxNDMwZi4uNTM4ZWUwZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdCZWhhdmlvci5oCkBAIC01OSw2ICs1OSwxNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBPbiBNYWMsIHdoZW4gcHJvY2Vzc2luZyBhIGNvbnRleHR1YWwgY2xpY2ssIHRoZSBv
YmplY3QgYmVpbmcgY2xpY2tlZCB1cG9uIHNob3VsZCBiZSBzZWxlY3RlZC4KICAgICBib29sIHNo
b3VsZFNlbGVjdE9uQ29udGV4dHVhbE1lbnVDbGljaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBFZGl0aW5nTWFjQmVoYXZpb3I7IH0KKworICAgIC8vIE9uIExpbnV4LCBzaG91bGQgYmUgYWJs
ZSB0byBnZXQgYW5kIGluc2VydCBzcGVsbGluZyBzdWdnZXN0aW9ucyB3aXRob3V0IHNlbGVjdGlu
ZyB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgIC8vIFNraXAgdGhpcyBwb2xpY3kgZm9yIENocm9t
aXVtLCB0aGV5IHJlcXVpcmUgc2VsZWN0aW9uIGZvciB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAg
IGJvb2wgc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpIGNv
bnN0CisgICAgeworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgcmV0dXJuIG1fdHlw
ZSA9PSBFZGl0aW5nVW5peEJlaGF2aW9yOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCisgICAgfQogICAgIAogICAgIC8vIE9uIE1hYyBhbmQgV2luZG93cywgcHJlc3Npbmcg
YmFja3NwYWNlICh3aGVuIGl0IGlzbid0IGhhbmRsZWQgb3RoZXJ3aXNlKSBzaG91bGQgbmF2aWdh
dGUgYmFjay4KICAgICBib29sIHNob3VsZE5hdmlnYXRlQmFja09uQmFja3NwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlICE9IEVkaXRpbmdVbml4QmVoYXZpb3I7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCA1ZmMzOTc2Li42OTdhYTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCkBAIC0xMDkwLDcgKzEwOTAsNyBAQCB2b2lkIEVkaXRvcjo6Y29weUltYWdlKGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpLT53cml0ZUltYWdlKHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSwgdXJsLCByZXN1bHQu
YWx0RGlzcGxheVN0cmluZygpKTsKIH0KIAotYm9vbCBFZGl0b3I6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkKK2Jvb2wgRWRpdG9yOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwogfQpAQCAtMTY4MSwyMyArMTY4MSw1MCBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAgICAgfQogfQogCi1ib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25NaXNzcGVsbGVk
KCkKK1N0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xp
Y2tlZE5vZGUpIGNvbnN0Cit7CisgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpIHx8ICFjbGlja2VkTm9kZSB8fCAhaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihjbGlj
a2VkTm9kZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGlm
ICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxl
Y3Rpb24oc2VsZWN0aW9uLmJhc2UoKSk7CisgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dy
YW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CisgICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2Ug
PSB3b3JkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisKKyAgICAvLyBJbiBjb21wbGlh
bmNlIHdpdGggR1RLKyBhcHBsaWNhdGlvbnMsIGFkZGl0aW9uYWxseSBhbGxvdyB0byBwcm92aWRl
IHN1Z2dlc3Rpb25zIHdoZW4gdGhlIGN1cnJlbnQKKyAgICAvLyBzZWxlY3Rpb24gZXhhY3RseSBt
YXRjaCB0aGUgd29yZCBzZWxlY3Rpb24uCisgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYg
IWFyZVJhbmdlc0VxdWFsKHdvcmRSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgd29y
ZCA9IHdvcmRSYW5nZS0+dGV4dCgpOworICAgIGlmICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGludCB3b3JkTGVuZ3RoID0gd29y
ZC5sZW5ndGgoKTsKKyAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgIGludCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKHdvcmQuY2hhcmFjdGVycygpLCB3b3JkTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlv
biwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgIHJldHVybiBtaXNzcGVsbGluZ0xlbmd0aCA9
PSB3b3JkTGVuZ3RoID8gd29yZCA6IFN0cmluZygpOworfQorCitTdHJpbmcgRWRpdG9yOjptaXNz
cGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIHsKICAgICBTdHJpbmcgc2VsZWN0ZWRTdHJp
bmcgPSBzZWxlY3RlZFRleHQoKTsKICAgICBpbnQgbGVuZ3RoID0gc2VsZWN0ZWRTdHJpbmcubGVu
Z3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWxlbmd0aCB8fCAhY2xpZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGlm
ICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKICAgICBpbnQgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IC0xOwogICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CiAgICAg
dGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHNlbGVjdGVkU3RyaW5nLmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3Ro
KTsKICAgICAKICAgICAvLyBUaGUgc2VsZWN0aW9uIG9ubHkgY291bnRzIGFzIG1pc3NwZWxsZWQg
aWYgdGhlIHNlbGVjdGVkIHRleHQgaXMgZXhhY3RseSBvbmUgbWlzc3BlbGxlZCB3b3JkCiAgICAg
aWYgKG1pc3NwZWxsaW5nTGVuZ3RoICE9IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGlu
ZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBz
cGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5T
cGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKQEAgLTE3MDUsNyArMTczMiw3IEBAIGJvb2wgRWRp
dG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4K
ICAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzZWxlY3Rl
ZFN0cmluZyk7CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNlbGVjdGVkU3Ry
aW5nOwogfQogCiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKQEAgLTE3
MzYsMTggKzE3NjMsMTcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yVW5ncmFt
bWF0aWNhbFNlbGVjdGlvbigpCiAjZW5kaWYKIH0KIAotVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpCitWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiB7Ci0gICAg
U3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gc2VsZWN0ZWRUZXh0KCk7Ci0gICAgQVNTRVJUKHNlbGVj
dGVkU3RyaW5nLmxlbmd0aCgpKTsKKyAgICBBU1NFUlQod29yZC5sZW5ndGgoKSk7CiAKICAgICBW
ZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENo
ZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQoc2VsZWN0ZWRTdHJpbmcsIFN0cmluZygpLCBndWVz
c2VzKTsKKyAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQod29yZCwgU3Ry
aW5nKCksIGd1ZXNzZXMpOwogICAgIHJldHVybiBndWVzc2VzOwogfQogCi1WZWN0b3I8U3RyaW5n
PiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJv
b2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCitWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQs
IGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0xNzU2LDEwICsxNzgyLDEyIEBAIFZlY3RvcjxT
dHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rp
b24oYm9vbCYgbWlzc3BlCiAgICAgICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50
KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKICAgICB9
CiAKLSAgICBtaXNzcGVsbGVkID0gaXNTZWxlY3Rpb25NaXNzcGVsbGVkKCk7CisgICAgU3RyaW5n
IG1pc3NwZWxsZWRXb3JkID0gYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlv
bnNXaXRob3V0U2VsZWN0aW9uKCkgPyBtaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKG1fZnJh
bWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpIDogbWlzc3BlbGxlZFNlbGVjdGlvblN0cmlu
ZygpOworICAgIG1pc3NwZWxsZWQgPSAhbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpOworCiAgICAg
aWYgKG1pc3NwZWxsZWQpIHsKICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgICAg
ICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRTZWxlY3Rpb24oKTsKKyAgICAgICAgcmV0dXJu
IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CiAgICAgfQogICAgIGlm
IChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSAmJiBpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwo
KSkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CmluZGV4IDE1MjM0ZGIuLjRmYTc4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMjEz
LDcgKzIxMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGluc2VydFBhcmFncmFwaFNlcGFyYXRvcklu
UXVvdGVkQ29udGVudCgpOwogI2VuZGlmCiAgICAgCi0gICAgYm9vbCBpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOworICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCk7
CiAgICAgYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKICAgICB2b2lkIHRvZ2dsZUdy
YW1tYXJDaGVja2luZygpOwpAQCAtMjIxLDEwICsyMjEsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
bGVhcm5TcGVsbGluZygpOwogICAgIGludCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpOwogICAg
IGJvb2wgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCk7Ci0gICAgYm9vbCBpc1NlbGVjdGlvbk1p
c3NwZWxsZWQoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVj
dGlvbigpOworICAgIFN0cmluZyBtaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3Q7Cisg
ICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5vZGUp
IGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSBjb25zdDsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yVW5ncmFtbWF0
aWNhbFNlbGVjdGlvbigpOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1h
dGljYWwpOworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpOwogICAgIGJvb2wg
aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdDsKICAgICBib29sIGlz
U3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSopIGNvbnN0OwogICAgIHZvaWQgbWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1Jl
cGxhY2VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcAppbmRleCBhZGYwYTc5Li44NWU2YmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0zNDAsMTUgKzM0MCwyOCBAQCB2b2lkIENvbnRl
eHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVt
KiBpdGVtKQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpLmV4
ZWN1dGUoKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nR3Vlc3M6Ci0gICAgICAgIEFTU0VSVChmcmFtZS0+ZWRpdG9yKCktPnNlbGVj
dGVkVGV4dCgpLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c2hvdWxk
SW5zZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpIHsKKyAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKKyAgICAgICAgRnJhbWVTZWxlY3Rpb24q
IGZyYW1lU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICBpZiAoZnJhbWUt
PmVkaXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGl0ZW0tPnRpdGxlKCksIGZyYW1lU2VsZWN0aW9u
LT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7
CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHls
ZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyk7CisgICAgICAgICAg
ICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgcmVwbGFjZU9wdGlvbnMg
PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZzsKKworICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3Io
KS0+YmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZnJhbWVTZWxlY3Rpb24tPmlzQ2FyZXRP
clJhbmdlKCkpOworICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlv
bihmcmFtZVNlbGVjdGlvbi0+YmFzZSgpKTsKKyAgICAgICAgICAgICAgICB3b3JkU2VsZWN0aW9u
LmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAg
ICBmcmFtZVNlbGVjdGlvbi0+c2V0U2VsZWN0aW9uKHdvcmRTZWxlY3Rpb24pOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3RlZFRleHQoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcmVwbGFjZU9wdGlvbnMgfD0g
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQg
PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCksICIiKSwgcmVwbGFjZU9wdGlvbnMp
OwogICAgICAgICAgICAgYXBwbHlDb21tYW5kKGNvbW1hbmQpOwotICAgICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRn
ZUlmTmVlZGVkKTsKKyAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLT5yZXZlYWxTZWxlY3Rpb24o
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGlu
ZzoKICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pZ25vcmVTcGVsbGluZygpOwogICAgICAgICBi
cmVhazsKQEAgLTkxNCw3ICs5MjcsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9w
dWxhdGUoKQogICAgICAgICAgICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVs
bGluZyBhbmQgYmFkIGdyYW1tYXIgYXQgdGhlIHNhbWUgdGltZSkKICAgICAgICAgICAgICAgICBi
b29sIG1pc3NwZWxsaW5nOwogICAgICAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFk
R3JhbW1hcik7CisgICAgICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1l
LT5lZGl0b3IoKS0+Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwobWlzc3BlbGxp
bmcsIGJhZEdyYW1tYXIpOwogICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRH
cmFtbWFyKSB7CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gZ3Vlc3Nlcy5zaXpl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghc2l6ZSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>