<?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>58503</bug_id>
          
          <creation_ts>2011-04-13 18:47:15 -0700</creation_ts>
          <short_desc>Make more functions static local in EventHandlers.cpp</short_desc>
          <delta_ts>2011-06-02 14:41:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56410</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>luiz</cc>
    
    <cc>sam</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>385438</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-13 18:47:15 -0700</bug_when>
    <thetext>Some functions in EventHandler.cpp do not need to be member functions. Since EventHandler is implemented in two files for each port, we should localize functions as much as possible to reduce the dependencies between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385442</commentid>
    <comment_count>1</comment_count>
      <attachid>89514</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-13 18:54:02 -0700</bug_when>
    <thetext>Created attachment 89514
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385459</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-13 19:27:52 -0700</bug_when>
    <thetext>Attachment 89514 did not build on win:
Build output: http://queues.webkit.org/results/8404480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385474</commentid>
    <comment_count>3</comment_count>
      <attachid>89520</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-13 20:25:31 -0700</bug_when>
    <thetext>Created attachment 89520
Fixed Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385484</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-13 20:55:42 -0700</bug_when>
    <thetext>Attachment 89520 did not build on win:
Build output: http://queues.webkit.org/results/8400552</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385827</commentid>
    <comment_count>5</comment_count>
      <attachid>89598</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-14 09:52:58 -0700</bug_when>
    <thetext>Created attachment 89598
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386116</commentid>
    <comment_count>6</comment_count>
      <attachid>89598</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-14 15:38:32 -0700</bug_when>
    <thetext>Comment on attachment 89598
cleanup

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

&gt; Source/WebCore/page/EventHandler.cpp:-1726
&gt; -    bool canHandle = false;

&quot;accepted&quot; should be always assigned. (as original did.)

&gt; Source/WebCore/page/EventHandler.cpp:1822
&gt; +    bool accepted;

Always assigning the initial value is good idea in general, Especially the argument is not pointer 
At a glance, it is not clear if this code is correct because readers don&apos;t know &quot;accept&quot; is an output variable or not.

&gt; Source/WebCore/page/EventHandler.cpp:2544
&gt; +    SelectionDirection direction = DirectionForward;

It might be possible to extract following switch statement into a conversion function like as focusDirectionForKey().

&gt; Source/WebCore/page/EventHandler.cpp:2568
&gt; +

This code always calls modify(), which looks different from original. Is it intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392848</commentid>
    <comment_count>7</comment_count>
      <attachid>89598</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-04-26 15:40:58 -0700</bug_when>
    <thetext>Comment on attachment 89598
cleanup

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

r- based mostly on the previous comments

&gt; Source/WebCore/page/EventHandler.cpp:2519
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, Down, (&quot;Down&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, Up, (&quot;Up&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, Left, (&quot;Left&quot;));
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, Right, (&quot;Right&quot;));

I know you&apos;re just moving this code, but these variable names should be lowercase.

Also, is it worth putting these in a map?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393292</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-26 19:56:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Also, is it worth putting these in a map?

No.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395997</commentid>
    <comment_count>9</comment_count>
      <attachid>89598</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-01 12:29:34 -0700</bug_when>
    <thetext>Comment on attachment 89598
cleanup

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1822

&gt; 
&gt; Always assigning the initial value is good idea in general, Especially the argument is not pointer 
&gt; At a glance, it is not clear if this code is correct because readers don&apos;t know &quot;accept&quot; is an output variable or not.

Okay but compiler will give you a warning if I didn&apos;t initialize a variable and passed it into a function by value.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2568
&gt;&gt; +
&gt; 
&gt; This code always calls modify(), which looks different from original. Is it intentional?

There&apos;s no behavioral change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396031</commentid>
    <comment_count>10</comment_count>
      <attachid>91839</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-01 13:47:00 -0700</bug_when>
    <thetext>Created attachment 91839
Fixed per comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396037</commentid>
    <comment_count>11</comment_count>
      <attachid>91842</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-01 14:09:28 -0700</bug_when>
    <thetext>Created attachment 91842
Fixed a regression</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396048</commentid>
    <comment_count>12</comment_count>
      <attachid>91842</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-01 14:41:41 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

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

&gt; Source/WebCore/page/EventHandler.cpp:1783
&gt; +        if (targetIsFrame(newTarget, targetFrame)) {
&gt; +            if (targetFrame)

The case where targetIsFrame returns true and yet targetFrame is 0 seems odd.  Do we test that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396189</commentid>
    <comment_count>13</comment_count>
      <attachid>91842</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-01 19:07:47 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:1783
&gt;&gt; +            if (targetFrame)
&gt; 
&gt; The case where targetIsFrame returns true and yet targetFrame is 0 seems odd.  Do we test that case?

How about when iframe doesn&apos;t have src attribute?  I&apos;m certain this will occur based on the code in HTMLFrameElementBase and the original code here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396561</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-02 12:45:48 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; How about when iframe doesn&apos;t have src attribute?  I&apos;m certain this will occur based on the code in HTMLFrameElementBase and the original code here.

This still creates the content frame.  The only case I can think of is when a frame is in construction or destruction but it&apos;s extremely hard to test this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396573</commentid>
    <comment_count>15</comment_count>
      <attachid>91842</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-02 13:08:50 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

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

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:1783
&gt;&gt;&gt; +            if (targetFrame)
&gt;&gt; 
&gt;&gt; The case where targetIsFrame returns true and yet targetFrame is 0 seems odd.  Do we test that case?
&gt; 
&gt; How about when iframe doesn&apos;t have src attribute?  I&apos;m certain this will occur based on the code in HTMLFrameElementBase and the original code here.

editing/pasteboard/drag-drop-dead-frame.html crashes without this if statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396793</commentid>
    <comment_count>16</comment_count>
      <attachid>91842</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-05-02 16:56:36 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

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

LGTM.

&gt; Source/WebCore/ChangeLog:17
&gt; +        Removed canHandleDragAndDropForTarget and made focusDirectionForKey local to EventHandler.cpp.
&gt; +
&gt; +        * page/EventHandler.cpp:
&gt; +        (WebCore::targetIsFrame): Extracted from canHandleDragAndDropForTarget.
&gt; +        (WebCore::EventHandler::updateDragAndDrop): Calls contentFrameForTarget instead of canHandleDragAndDropForTarget.
&gt; +        (WebCore::EventHandler::cancelDragAndDrop): Ditto.
&gt; +        (WebCore::EventHandler::performDragAndDrop): Ditto.
&gt; +        (WebCore::focusDirectionForKey): No longer a member function of EventHandler class.
&gt; +        (WebCore::EventHandler::handleKeyboardSelectionMovement): Calls focusDirectionForKey instead of manually comparing
&gt; +        strings.

You did not mention in the change log that handleKeyboardSelectionMovement was made local to EventHandler.cpp and is no longer a member of class EventHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396794</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-02 16:58:45 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 91842 [details])
&gt; You did not mention in the change log that handleKeyboardSelectionMovement was made local to EventHandler.cpp and is no longer a member of class EventHandler.

Oh, that&apos;s a good point.  Will fix it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400000</commentid>
    <comment_count>18</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-05-06 18:50:42 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 91842 [details] [details])
&gt; &gt; You did not mention in the change log that handleKeyboardSelectionMovement was made local to EventHandler.cpp and is no longer a member of class EventHandler.
&gt; 
&gt; Oh, that&apos;s a good point.  Will fix it before landing.

Well, I am not an official reviewer. I should have mentioned it in my last comment.
I hope I have not disturbed too much. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413103</commentid>
    <comment_count>19</comment_count>
      <attachid>91842</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-05-31 20:23:25 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

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

&gt; Source/WebCore/page/EventHandler.cpp:1745
&gt; +static bool targetIsFrame(Node* target, Frame*&amp; frame)

What if &apos;targetIsFrame&apos; returned a Frame*?  Then the test for &quot;isFrame&quot; and null could be one and the same.  Do we ever have a case where the target is NOT a frame, and yet we get a valid Frame*?

Then calls like:
if (targetIsFrame(newTarget, targetFrame))
    if (targetFrame) {
        // ... do stuff ...

Would become:
Frame* frame = targetIsFrame(newTarget);
if (frame) {
    // ... do stuff ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414118</commentid>
    <comment_count>20</comment_count>
      <attachid>91842</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-02 07:54:33 -0700</bug_when>
    <thetext>Comment on attachment 91842
Fixed a regression

Seems OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414441</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-02 14:29:51 -0700</bug_when>
    <thetext>Committed r87951: &lt;http://trac.webkit.org/changeset/87951&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414459</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-02 14:41:07 -0700</bug_when>
    <thetext>Thanks for the review, landed after fixing the change log entry.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89514</attachid>
            <date>2011-04-13 18:54:02 -0700</date>
            <delta_ts>2011-04-13 20:25:31 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-58503-20110413185401.patch</filename>
            <type>text/plain</type>
            <size>16113</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzODA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDQtMTMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBtb3JlIGZ1bmN0aW9ucyBzdGF0aWMgbG9jYWwgaW4gRXZl
bnRIYW5kbGVycy5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU4NTAzCisKKyAgICAgICAgTWFkZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBFdmVudEhh
bmRsZXIgc3RhdGljIGxvY2FsIGFuZCByZWZhY3RvcmVkIHRoZW0uCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdWJmcmFtZUZvclRhcmdldE5v
ZGUpOiBNYWRlIHN0YXRpYyBsb2NhbC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dGFyZ2V0Tm9kZSk6IEEgYmxhbmsgbGluZSBpcyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6
Y2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQpOiBNYWRlIHN0YXRpYyBsb2NhbDsgYWxzbyBy
ZWZhY3RvcmVkIHRoZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRh
dGVEcmFnQW5kRHJvcCk6IENhbGxzIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0LgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwZXJmb3JtRHJhZ0FuZERyb3ApOiBEaXR0
bzsgbm8gbG9uZ2VyIHJldHVybnMgYSBib29sZWFuIHZhbHVlCisgICAgICAgIGJlY2F1c2UgYWNj
ZXB0IHdhcyBhbHdheXMgZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpmb2N1c0RpcmVjdGlvbkZv
cktleSk6IE1hZGUgc3RhdGljIGxvY2FsLgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlS2V5Ym9h
cmRTZWxlY3Rpb25Nb3ZlbWVudCk6IERpdHRvOyByZXdyaXR0ZW4gdG8gdXNlIGZvY3VzRGlyZWN0
aW9uRm9yS2V5LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9h
cmRFdmVudEhhbmRsZXIpOiBDYWxscyBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Lgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisKIDIwMTEtMDQtMTMgIEFsZXhpcyBNZW5h
cmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAko
cmV2aXNpb24gODM3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1NCw2ICs5NTQsMjIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnN0
YXJ0QXV0b3Njcm9sbFRpbWVyKAogICAgIG1fYXV0b3Njcm9sbFRpbWVyLnN0YXJ0UmVwZWF0aW5n
KGF1dG9zY3JvbGxJbnRlcnZhbCk7CiB9CiAKK3N0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJn
ZXROb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQo
KTsKKyAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5m
cmFtZSgpOworfQorCiB2b2lkIEV2ZW50SGFuZGxlcjo6c3RvcEF1dG9zY3JvbGxUaW1lcihib29s
IHJlbmRlcmVySXNCZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBpZiAobV9hdXRvc2Nyb2xsSW5Qcm9n
cmVzcykgewpAQCAtMTEwMywyMyArMTExOSw3IEBAIEZyYW1lKiBFdmVudEhhbmRsZXI6OnN1YmZy
YW1lRm9ySGl0VGVzdFIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHN1YmZyYW1lRm9y
VGFyZ2V0Tm9kZSh0YXJnZXROb2RlKGhpdFRlc3RSZXN1bHQpKTsKIH0KLQotRnJhbWUqIEV2ZW50
SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBu
b2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdl
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJX
aWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKLSAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpOwotfQotCisgICAgCiBzdGF0aWMgYm9vbCBp
c1N1Ym1pdEltYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFz
VGFnTmFtZShpbnB1dFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUp
LT5pc0ltYWdlQnV0dG9uKCk7CkBAIC0xMzE1LDggKzEzMTUsNyBAQCBOb2RlKiBFdmVudEhhbmRs
ZXI6OnRhcmdldE5vZGUoY29uc3QgSGl0CiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5E
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAotICAgIHJldHVybiBub2RlOwot
CisgICAgcmV0dXJuIG5vZGU7ICAgIAogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKQEAgLTE3
MjEsMzMgKzE3MjAsMzQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNv
bgogICAgIHJldHVybiBtZS0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi1ib29sIEV2ZW50SGFu
ZGxlcjo6Y2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBl
IHR5cGUsIE5vZGUqIHRhcmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQsIGJvb2wqIGFjY2VwdGVkKQorZW51bSBEcmFnQW5kRHJvcEhhbmRs
ZVR5cGUgeworICAgIFVwZGF0ZURyYWdBbmREcm9wLAorICAgIENhbmNlbERyYWdBbmREcm9wLAor
ICAgIFBlcmZvcm1EcmFnQW5kRHJvcAorfTsKKworc3RhdGljIGJvb2wgY2FuSGFuZGxlRHJhZ0Fu
ZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBlIHR5cGUsIE5vZGUqIHRhcmdldCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGJv
b2wmIGFjY2VwdGVkKQogewotICAgIGJvb2wgY2FuSGFuZGxlID0gZmFsc2U7Ci0gICAgYm9vbCB3
YXNBY2NlcHRlZCA9IGZhbHNlOworICAgIGlmICghdGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFn
KSAmJiAhdGFyZ2V0LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpCisgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgdGFyZ2V0LT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8
SFRNTEZyYW1lRWxlbWVudEJhc2UqPih0YXJnZXQpLT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAg
aWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgVXBkYXRlRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQgPSBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYW5jZWxEcmFnQW5kRHJv
cDoKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhbmNlbERyYWdBbmRE
cm9wKGV2ZW50LCBjbGlwYm9hcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBQZXJmb3JtRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQg
PSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJv
YXJkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICBjYW5IYW5kbGUgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4odGFyZ2V0KS0+Y29udGVudEZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGFj
Y2VwdGVkKQotICAgICAgICAqYWNjZXB0ZWQgPSB3YXNBY2NlcHRlZDsKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFVwZGF0ZURyYWdBbmREcm9wOgorICAgICAgICBhY2NlcHRlZCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FuY2VsRHJhZ0FuZERyb3A6CisgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGVyZm9ybURyYWdBbmREcm9wOgorICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJk
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgcmV0dXJuIGNhbkhhbmRsZTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKQEAg
LTE3NzMsNyArMTc3Myw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChj
b24KICAgICAgICAgLy8gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1pbi1mcmFtZXMuaHRt
bC4KICAgICAgICAgLy8KICAgICAgICAgLy8gTW9yZW92ZXIsIHRoaXMgb3JkZXJpbmcgY29uZm9y
bXMgdG8gc2VjdGlvbiA3LjkuNCBvZiB0aGUgSFRNTCA1IHNwZWMuIDxodHRwOi8vZGV2LnczLm9y
Zy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjZHJhZy1hbmQtZHJvcC1wcm9jZXNzaW5nLW1vZGVs
Pi4KLSAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdl
dChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkLCAmYWNjZXB0
KSkgeworICAgICAgICBpZiAobmV3VGFyZ2V0ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFy
Z2V0KFVwZGF0ZURyYWdBbmREcm9wLCBuZXdUYXJnZXQsIGV2ZW50LCBjbGlwYm9hcmQsIGFjY2Vw
dCkpIHsKICAgICAgICAgICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUg
c3BlYy4sIHdlIG11c3QgYWx3YXlzIGZpcmUgYSBkcmFnIGV2ZW50IGJlZm9yZSBmaXJpbmcgYSBk
cmFnZW50ZXIsIGRyYWdsZWF2ZSwgb3IgZHJhZ292ZXIgZXZlbnQuCiAgICAgICAgICAgICBpZiAo
ZHJhZ1N0YXRlKCkubV9kcmFnU3JjICYmIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY01heUJlREhUTUwp
IHsKICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFu
ZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKQEAgLTE3
ODIsNyArMTc4Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24K
ICAgICAgICAgICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFn
ZW50ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQo
VXBkYXRlRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwg
JmFjY2VwdCkpCisgICAgICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERy
b3BGb3JUYXJnZXQoVXBkYXRlRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQs
IGNsaXBib2FyZCwgYWNjZXB0KSkKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50
TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJv
YXJkKTsKICAgICAgICAgCiAgICAgICAgIGlmIChuZXdUYXJnZXQpIHsKQEAgLTE3OTEsNyArMTc5
MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAg
ICAgIG1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChuZXdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BG
b3JUYXJnZXQoVXBkYXRlRHJhZ0FuZERyb3AsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCwg
JmFjY2VwdCkpIHsKKyAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJv
cEZvclRhcmdldChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJk
LCBhY2NlcHQpKSB7CiAgICAgICAgICAgICAvLyBOb3RlLCB3aGVuIGRlYWxpbmcgd2l0aCBzdWIt
ZnJhbWVzLCB3ZSBtYXkgbmVlZCB0byBmaXJlIG9ubHkgYSBkcmFnb3ZlciBldmVudCBhcyBhIGRy
YWcgZXZlbnQgbWF5IGhhdmUgYmVlbiBmaXJlZCBlYXJsaWVyLgogICAgICAgICAgICAgaWYgKCFt
X3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVudCAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYg
ZHJhZ1N0YXRlKCkubV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgICAgIC8vIGZv
ciBub3cgd2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMgZGVmYXVsdCBiZWhh
dmlvciwgc2luY2UgdGhlcmUgaXMgbm9uZQpAQCAtMTgwOCw3ICsxODA4LDggQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbgogCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2Fu
Y2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJk
KiBjbGlwYm9hcmQpCiB7Ci0gICAgaWYgKG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5k
RHJvcEZvclRhcmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVu
dCwgY2xpcGJvYXJkKSkgeworICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYgKG1fZHJhZ1Rhcmdl
dCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9k
cmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkLCBhY2NlcHRlZCkpIHsKICAgICAgICAg
aWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURI
VE1MKQogICAgICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdF
dmVudCwgZXZlbnQpOwogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJh
Z2xlYXZlRXZlbnQsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCk7CkBAIC0x
ODE2LDEzICsxODE3LDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcChj
b24KICAgICBjbGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGVyZm9y
bURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIENsaXBib2FyZCog
Y2xpcGJvYXJkKQordm9pZCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICBi
b29sIGFjY2VwdCA9IGZhbHNlOwotICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJh
Z0FuZERyb3BGb3JUYXJnZXQoUGVyZm9ybURyYWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0KCks
IGV2ZW50LCBjbGlwYm9hcmQsICZhY2NlcHQpKQorICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYg
KG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChQZXJmb3JtRHJh
Z0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwgYWNjZXB0ZWQp
KQogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJvcEV2ZW50LCBtX2Ry
YWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOwogICAgIGNsZWFyRHJhZ1N0YXRlKCk7
Ci0gICAgcmV0dXJuIGFjY2VwdDsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyRHJhZ1N0
YXRlKCkKQEAgLTI1MTEsMzEgKzI1MTEsNjQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50
KGNvbnN0IFBsYXRmbwogICAgIHJldHVybiBrZXlkb3duUmVzdWx0IHx8IGtleXByZXNzLT5kZWZh
dWx0UHJldmVudGVkKCkgfHwga2V5cHJlc3MtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQg
RXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQorc3RhdGljIEZvY3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uRm9yS2V5KGNv
bnN0IEF0b21pY1N0cmluZyYga2V5SWRlbnRpZmllcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgRG93biwgKCJEb3duIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBVcCwgKCJVcCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgTGVmdCwgKCJMZWZ0IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBSaWdodCwgKCJSaWdodCIpKTsKKworICAgIEZvY3VzRGlyZWN0aW9uIHJldFZh
bCA9IEZvY3VzRGlyZWN0aW9uTm9uZTsKKworICAgIGlmIChrZXlJZGVudGlmaWVyID09IERvd24p
CisgICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uRG93bjsKKyAgICBlbHNlIGlmIChrZXlJ
ZGVudGlmaWVyID09IFVwKQorICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvblVwOworICAg
IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gTGVmdCkKKyAgICAgICAgcmV0VmFsID0gRm9jdXNE
aXJlY3Rpb25MZWZ0OworICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gUmlnaHQpCisgICAg
ICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uUmlnaHQ7CisKKyAgICByZXR1cm4gcmV0VmFsOwor
fQorCitzdGF0aWMgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYg
KCFldmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0IFN0cmluZyYga2V5ID0g
ZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKwogICAgIGJvb2wgaXNTaGlmdGVkID0gZXZlbnQtPmdl
dE1vZGlmaWVyU3RhdGUoIlNoaWZ0Iik7CiAgICAgYm9vbCBpc09wdGlvbmVkID0gZXZlbnQtPmdl
dE1vZGlmaWVyU3RhdGUoIkFsdCIpOwogICAgIGJvb2wgaXNDb21tYW5kZWQgPSBldmVudC0+Z2V0
TW9kaWZpZXJTdGF0ZSgiTWV0YSIpOwotICAgIAotICAgIGlmIChrZXkgPT0gIlVwIikgewotICAg
ICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9u
Q29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91
bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsKLSAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91bmRhcnkgOiBM
aW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiTGVmdCIpIHsKLSAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uTGVmdCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdv
cmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlJpZ2h0Iikg
ewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3Vu
ZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFy
aXR5LCB0cnVlKTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSAg
ICAKKworICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5OworICAgIHN3aXRjaCAoZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQt
PmtleUlkZW50aWZpZXIoKSkpIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRm9yd2FyZDoKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uQmFja3dhcmQ6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbk5v
bmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAg
IGRpcmVjdGlvbiA9IERpcmVjdGlvbkJhY2t3YXJkOworICAgICAgICBncmFudWxhcml0eSA9IChp
c0NvbW1hbmRlZCkgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdyYW51bGFyaXR5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgZGlyZWN0aW9u
ID0gRGlyZWN0aW9uRm9yd2FyZDsKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSAoaXNDb21tYW5kZWQp
ID8gRG9jdW1lbnRCb3VuZGFyeSA6IExpbmVHcmFudWxhcml0eTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlv
bkxlZnQ7CisgICAgICAgIGdyYW51bGFyaXR5ID0gKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFy
eSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAg
IGRpcmVjdGlvbiA9IERpcmVjdGlvblJpZ2h0OworICAgICAgICBncmFudWxhcml0eSA9IChpc0Nv
bW1hbmRlZCkgPyBMaW5lQm91bmRhcnkgOiAoaXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkg
OiBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2Vs
ZWN0aW9uLT5tb2RpZnkoKGlzU2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0
aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIHRydWUpOwogfQotICAgIAorCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVm
YXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKQEAgLTI1NTQs
NyArMjU4Nyw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKIAog
ICAgICAgICAvLyBwcm92aWRlcyBLQiBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gZm9yIGVuaGFu
Y2VkIGFjY2Vzc2liaWxpdHkgdXNlcnMKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkKCkpCi0gICAgICAgICAgICBoYW5k
bGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGhhbmRsZUtl
eWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQobV9mcmFtZS0+c2VsZWN0aW9uKCksIGV2ZW50KTsKICAg
ICB9CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQp
IHsKICAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQp
OwpAQCAtMjU2NSwyNyArMjU5OCw2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9h
cmRFdmVudEgKICAgICB9CiB9CiAKLUZvY3VzRGlyZWN0aW9uIEV2ZW50SGFuZGxlcjo6Zm9jdXNE
aXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKSBjb25zdAot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBEb3duLCAoIkRvd24iKSk7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFVwLCAoIlVwIikpOwotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBMZWZ0LCAoIkxlZnQiKSk7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFJpZ2h0LCAoIlJpZ2h0IikpOwotCi0g
ICAgRm9jdXNEaXJlY3Rpb24gcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Ob25lOwotCi0gICAgaWYg
KGtleUlkZW50aWZpZXIgPT0gRG93bikKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25E
b3duOwotICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gVXApCi0gICAgICAgIHJldFZhbCA9
IEZvY3VzRGlyZWN0aW9uVXA7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBMZWZ0KQot
ICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvbkxlZnQ7Ci0gICAgZWxzZSBpZiAoa2V5SWRl
bnRpZmllciA9PSBSaWdodCkKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25SaWdodDsK
LQotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogYm9v
bCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYg
ZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbikgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaAkocmV2aXNpb24gODM3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgog
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKICAgICB2b2lkIGNhbmNlbERyYWdB
bmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgIGJvb2wg
cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCop
OworICAgIHZvaWQgcGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYs
IENsaXBib2FyZCopOwogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0
ZSgpOwpAQCAtMTQyLDcgKzE0Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SWdub3JlV2hl
ZWxFdmVudHMoYm9vbCk7CiAKLSAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9k
ZShOb2RlKik7CiAgICAgc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCiAgICAgYm9vbCBzY3JvbGxPdmVy
ZmxvdyhTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05v
ZGUgPSAwKTsKQEAgLTIzNiwxMiArMjM1LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCi0gICAgZW51bSBEcmFnQW5kRHJvcEhhbmRsZVR5cGUgewotICAg
ICAgICBVcGRhdGVEcmFnQW5kRHJvcCwKLSAgICAgICAgQ2FuY2VsRHJhZ0FuZERyb3AsCi0gICAg
ICAgIFBlcmZvcm1EcmFnQW5kRHJvcAotICAgIH07Ci0KICAgICBzdHJ1Y3QgRXZlbnRIYW5kbGVy
RHJhZ1N0YXRlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRIYW5kbGVyRHJh
Z1N0YXRlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAtMjU4LDgg
KzI1MSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEV2ZW50SGFuZGxlckRyYWdTdGF0ZSYgZHJh
Z1N0YXRlKCk7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBUZXh0RHJhZ0RlbGF5OwogCi0gICAg
Ym9vbCBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChEcmFnQW5kRHJvcEhhbmRsZVR5cGUs
IE5vZGUqIHRhcmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKiwgYm9v
bCogYWNjZXB0ZWQgPSAwKTsKLSAgICAKICAgICBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRl
RHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JU
KQogCkBAIC0yODAsOCArMjcxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1vdXNlRHJh
Z2dlZEV2ZW50KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICNlbmRpZgog
ICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYpOwotCi0gICAgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50
KEtleWJvYXJkRXZlbnQqKTsKICAgICAKICAgICBDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBTY3JvbGxiYXIqKTsKICNpZiBFTkFCTEUoUEFO
X1NDUk9MTElORykKQEAgLTM2OCw4ICszNTcsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
c2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogCi0gICAgRm9jdXNEaXJlY3Rpb24gZm9jdXNE
aXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KICAgICBib29sIGNh
cHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAog
I2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5lZChfX09CSkNfXykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89520</attachid>
            <date>2011-04-13 20:25:31 -0700</date>
            <delta_ts>2011-04-14 09:52:56 -0700</delta_ts>
            <desc>Fixed Windows build</desc>
            <filename>bug-58503-20110413185401.patch</filename>
            <type>text/plain</type>
            <size>16155</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzODA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDQtMTMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBtb3JlIGZ1bmN0aW9ucyBzdGF0aWMgbG9jYWwgaW4gRXZl
bnRIYW5kbGVycy5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU4NTAzCisKKyAgICAgICAgTWFkZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBFdmVudEhh
bmRsZXIgc3RhdGljIGxvY2FsIGFuZCByZWZhY3RvcmVkIHRoZW0uCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdWJmcmFtZUZvclRhcmdldE5v
ZGUpOiBNYWRlIHN0YXRpYyBsb2NhbC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
dGFyZ2V0Tm9kZSk6IEEgYmxhbmsgbGluZSBpcyByZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6
Y2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQpOiBNYWRlIHN0YXRpYyBsb2NhbDsgYWxzbyBy
ZWZhY3RvcmVkIHRoZSBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRh
dGVEcmFnQW5kRHJvcCk6IENhbGxzIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0LgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwZXJmb3JtRHJhZ0FuZERyb3ApOiBEaXR0
bzsgbm8gbG9uZ2VyIHJldHVybnMgYSBib29sZWFuIHZhbHVlCisgICAgICAgIGJlY2F1c2UgYWNj
ZXB0IHdhcyBhbHdheXMgZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpmb2N1c0RpcmVjdGlvbkZv
cktleSk6IE1hZGUgc3RhdGljIGxvY2FsLgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlS2V5Ym9h
cmRTZWxlY3Rpb25Nb3ZlbWVudCk6IERpdHRvOyByZXdyaXR0ZW4gdG8gdXNlIGZvY3VzRGlyZWN0
aW9uRm9yS2V5LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9h
cmRFdmVudEhhbmRsZXIpOiBDYWxscyBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50Lgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6CisKIDIwMTEtMDQtMTMgIEFsZXhpcyBNZW5h
cmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAko
cmV2aXNpb24gODM3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1NCw2ICs5NTQsMjIgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnN0
YXJ0QXV0b3Njcm9sbFRpbWVyKAogICAgIG1fYXV0b3Njcm9sbFRpbWVyLnN0YXJ0UmVwZWF0aW5n
KGF1dG9zY3JvbGxJbnRlcnZhbCk7CiB9CiAKK3N0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJn
ZXROb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdldCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT53aWRnZXQo
KTsKKyAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5m
cmFtZSgpOworfQorCiB2b2lkIEV2ZW50SGFuZGxlcjo6c3RvcEF1dG9zY3JvbGxUaW1lcihib29s
IHJlbmRlcmVySXNCZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBpZiAobV9hdXRvc2Nyb2xsSW5Qcm9n
cmVzcykgewpAQCAtMTEwMywyMyArMTExOSw3IEBAIEZyYW1lKiBFdmVudEhhbmRsZXI6OnN1YmZy
YW1lRm9ySGl0VGVzdFIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHN1YmZyYW1lRm9y
VGFyZ2V0Tm9kZSh0YXJnZXROb2RlKGhpdFRlc3RSZXN1bHQpKTsKIH0KLQotRnJhbWUqIEV2ZW50
SGFuZGxlcjo6c3ViZnJhbWVGb3JUYXJnZXROb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBu
b2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc1dpZGdl
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFdpZGdldCogd2lkZ2V0ID0gdG9SZW5kZXJX
aWRnZXQocmVuZGVyZXIpLT53aWRnZXQoKTsKLSAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5p
c0ZyYW1lVmlldygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpOwotfQotCisgICAgCiBzdGF0aWMgYm9vbCBp
c1N1Ym1pdEltYWdlKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFz
VGFnTmFtZShpbnB1dFRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUp
LT5pc0ltYWdlQnV0dG9uKCk7CkBAIC0xMzE1LDggKzEzMTUsNyBAQCBOb2RlKiBFdmVudEhhbmRs
ZXI6OnRhcmdldE5vZGUoY29uc3QgSGl0CiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5E
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAotICAgIHJldHVybiBub2RlOwot
CisgICAgcmV0dXJuIG5vZGU7ICAgIAogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKQEAgLTE3
MjEsMzMgKzE3MjAsMzQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNv
bgogICAgIHJldHVybiBtZS0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi1ib29sIEV2ZW50SGFu
ZGxlcjo6Y2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBl
IHR5cGUsIE5vZGUqIHRhcmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQsIGJvb2wqIGFjY2VwdGVkKQorZW51bSBEcmFnQW5kRHJvcEhhbmRs
ZVR5cGUgeworICAgIFVwZGF0ZURyYWdBbmREcm9wLAorICAgIENhbmNlbERyYWdBbmREcm9wLAor
ICAgIFBlcmZvcm1EcmFnQW5kRHJvcAorfTsKKworc3RhdGljIGJvb2wgY2FuSGFuZGxlRHJhZ0Fu
ZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBlIHR5cGUsIE5vZGUqIHRhcmdldCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGJv
b2wmIGFjY2VwdGVkKQogewotICAgIGJvb2wgY2FuSGFuZGxlID0gZmFsc2U7Ci0gICAgYm9vbCB3
YXNBY2NlcHRlZCA9IGZhbHNlOworICAgIGlmICghdGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFn
KSAmJiAhdGFyZ2V0LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpCisgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgdGFyZ2V0LT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8
SFRNTEZyYW1lRWxlbWVudEJhc2UqPih0YXJnZXQpLT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAg
aWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgVXBkYXRlRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQgPSBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYW5jZWxEcmFnQW5kRHJv
cDoKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhbmNlbERyYWdBbmRE
cm9wKGV2ZW50LCBjbGlwYm9hcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBQZXJmb3JtRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQg
PSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJv
YXJkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICBjYW5IYW5kbGUgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4odGFyZ2V0KS0+Y29udGVudEZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGFj
Y2VwdGVkKQotICAgICAgICAqYWNjZXB0ZWQgPSB3YXNBY2NlcHRlZDsKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFVwZGF0ZURyYWdBbmREcm9wOgorICAgICAgICBhY2NlcHRlZCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2FuY2VsRHJhZ0FuZERyb3A6CisgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGVyZm9ybURyYWdBbmREcm9wOgorICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJk
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgcmV0dXJuIGNhbkhhbmRsZTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKQEAg
LTE3NzMsNyArMTc3Myw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChj
b24KICAgICAgICAgLy8gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1pbi1mcmFtZXMuaHRt
bC4KICAgICAgICAgLy8KICAgICAgICAgLy8gTW9yZW92ZXIsIHRoaXMgb3JkZXJpbmcgY29uZm9y
bXMgdG8gc2VjdGlvbiA3LjkuNCBvZiB0aGUgSFRNTCA1IHNwZWMuIDxodHRwOi8vZGV2LnczLm9y
Zy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjZHJhZy1hbmQtZHJvcC1wcm9jZXNzaW5nLW1vZGVs
Pi4KLSAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdl
dChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkLCAmYWNjZXB0
KSkgeworICAgICAgICBpZiAobmV3VGFyZ2V0ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFy
Z2V0KFVwZGF0ZURyYWdBbmREcm9wLCBuZXdUYXJnZXQsIGV2ZW50LCBjbGlwYm9hcmQsIGFjY2Vw
dCkpIHsKICAgICAgICAgICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUg
c3BlYy4sIHdlIG11c3QgYWx3YXlzIGZpcmUgYSBkcmFnIGV2ZW50IGJlZm9yZSBmaXJpbmcgYSBk
cmFnZW50ZXIsIGRyYWdsZWF2ZSwgb3IgZHJhZ292ZXIgZXZlbnQuCiAgICAgICAgICAgICBpZiAo
ZHJhZ1N0YXRlKCkubV9kcmFnU3JjICYmIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY01heUJlREhUTUwp
IHsKICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFu
ZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKQEAgLTE3
ODIsNyArMTc4Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24K
ICAgICAgICAgICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFn
ZW50ZXJFdmVudCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQo
VXBkYXRlRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwg
JmFjY2VwdCkpCisgICAgICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERy
b3BGb3JUYXJnZXQoVXBkYXRlRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQs
IGNsaXBib2FyZCwgYWNjZXB0KSkKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50
TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJv
YXJkKTsKICAgICAgICAgCiAgICAgICAgIGlmIChuZXdUYXJnZXQpIHsKQEAgLTE3OTEsNyArMTc5
MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAg
ICAgIG1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChuZXdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BG
b3JUYXJnZXQoVXBkYXRlRHJhZ0FuZERyb3AsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCwg
JmFjY2VwdCkpIHsKKyAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJv
cEZvclRhcmdldChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJk
LCBhY2NlcHQpKSB7CiAgICAgICAgICAgICAvLyBOb3RlLCB3aGVuIGRlYWxpbmcgd2l0aCBzdWIt
ZnJhbWVzLCB3ZSBtYXkgbmVlZCB0byBmaXJlIG9ubHkgYSBkcmFnb3ZlciBldmVudCBhcyBhIGRy
YWcgZXZlbnQgbWF5IGhhdmUgYmVlbiBmaXJlZCBlYXJsaWVyLgogICAgICAgICAgICAgaWYgKCFt
X3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVudCAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYg
ZHJhZ1N0YXRlKCkubV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgICAgIC8vIGZv
ciBub3cgd2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMgZGVmYXVsdCBiZWhh
dmlvciwgc2luY2UgdGhlcmUgaXMgbm9uZQpAQCAtMTgwOCw3ICsxODA4LDggQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbgogCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2Fu
Y2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJk
KiBjbGlwYm9hcmQpCiB7Ci0gICAgaWYgKG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5k
RHJvcEZvclRhcmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVu
dCwgY2xpcGJvYXJkKSkgeworICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYgKG1fZHJhZ1Rhcmdl
dCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9k
cmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkLCBhY2NlcHRlZCkpIHsKICAgICAgICAg
aWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURI
VE1MKQogICAgICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdF
dmVudCwgZXZlbnQpOwogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJh
Z2xlYXZlRXZlbnQsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCk7CkBAIC0x
ODE2LDEzICsxODE3LDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcChj
b24KICAgICBjbGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGVyZm9y
bURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIENsaXBib2FyZCog
Y2xpcGJvYXJkKQordm9pZCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICBi
b29sIGFjY2VwdCA9IGZhbHNlOwotICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJh
Z0FuZERyb3BGb3JUYXJnZXQoUGVyZm9ybURyYWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0KCks
IGV2ZW50LCBjbGlwYm9hcmQsICZhY2NlcHQpKQorICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYg
KG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChQZXJmb3JtRHJh
Z0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwgYWNjZXB0ZWQp
KQogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJvcEV2ZW50LCBtX2Ry
YWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOwogICAgIGNsZWFyRHJhZ1N0YXRlKCk7
Ci0gICAgcmV0dXJuIGFjY2VwdDsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyRHJhZ1N0
YXRlKCkKQEAgLTI1MTEsMzEgKzI1MTEsNjQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50
KGNvbnN0IFBsYXRmbwogICAgIHJldHVybiBrZXlkb3duUmVzdWx0IHx8IGtleXByZXNzLT5kZWZh
dWx0UHJldmVudGVkKCkgfHwga2V5cHJlc3MtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQg
RXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQorc3RhdGljIEZvY3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uRm9yS2V5KGNv
bnN0IEF0b21pY1N0cmluZyYga2V5SWRlbnRpZmllcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgRG93biwgKCJEb3duIikpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBVcCwgKCJVcCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0
b21pY1N0cmluZywgTGVmdCwgKCJMZWZ0IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBSaWdodCwgKCJSaWdodCIpKTsKKworICAgIEZvY3VzRGlyZWN0aW9uIHJldFZh
bCA9IEZvY3VzRGlyZWN0aW9uTm9uZTsKKworICAgIGlmIChrZXlJZGVudGlmaWVyID09IERvd24p
CisgICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uRG93bjsKKyAgICBlbHNlIGlmIChrZXlJ
ZGVudGlmaWVyID09IFVwKQorICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvblVwOworICAg
IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gTGVmdCkKKyAgICAgICAgcmV0VmFsID0gRm9jdXNE
aXJlY3Rpb25MZWZ0OworICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gUmlnaHQpCisgICAg
ICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uUmlnaHQ7CisKKyAgICByZXR1cm4gcmV0VmFsOwor
fQorCitzdGF0aWMgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYg
KCFldmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0IFN0cmluZyYga2V5ID0g
ZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKKwogICAgIGJvb2wgaXNTaGlmdGVkID0gZXZlbnQtPmdl
dE1vZGlmaWVyU3RhdGUoIlNoaWZ0Iik7CiAgICAgYm9vbCBpc09wdGlvbmVkID0gZXZlbnQtPmdl
dE1vZGlmaWVyU3RhdGUoIkFsdCIpOwogICAgIGJvb2wgaXNDb21tYW5kZWQgPSBldmVudC0+Z2V0
TW9kaWZpZXJTdGF0ZSgiTWV0YSIpOwotICAgIAotICAgIGlmIChrZXkgPT0gIlVwIikgewotICAg
ICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9u
Q29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91
bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsKLSAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92
ZSwgRGlyZWN0aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91bmRhcnkgOiBM
aW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiTGVmdCIpIHsKLSAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uTGVmdCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdv
cmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlJpZ2h0Iikg
ewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3Vu
ZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFy
aXR5LCB0cnVlKTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSAg
ICAKKworICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBEaXJlY3Rpb25Gb3J3YXJk
OworICAgIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5
OworICAgIHN3aXRjaCAoZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlkZW50aWZpZXIo
KSkpIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRm9yd2FyZDoKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uQmFja3dhcmQ6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbk5vbmU6CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGRpcmVjdGlvbiA9IERp
cmVjdGlvbkJhY2t3YXJkOworICAgICAgICBncmFudWxhcml0eSA9IChpc0NvbW1hbmRlZCkgPyBE
b2N1bWVudEJvdW5kYXJ5IDogTGluZUdyYW51bGFyaXR5OworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgZGlyZWN0aW9uID0gRGlyZWN0aW9uRm9y
d2FyZDsKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSAoaXNDb21tYW5kZWQpID8gRG9jdW1lbnRCb3Vu
ZGFyeSA6IExpbmVHcmFudWxhcml0eTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkxlZnQ6CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlvbkxlZnQ7CisgICAgICAg
IGdyYW51bGFyaXR5ID0gKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVk
KSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGRpcmVjdGlvbiA9IERp
cmVjdGlvblJpZ2h0OworICAgICAgICBncmFudWxhcml0eSA9IChpc0NvbW1hbmRlZCkgPyBMaW5l
Qm91bmRhcnkgOiAoaXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFu
dWxhcml0eTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2VsZWN0aW9uLT5tb2RpZnko
KGlzU2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IHRydWUpOwogfQotICAgIAorCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZl
bnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKQEAgLTI1NTQsNyArMjU4Nyw3IEBAIHZv
aWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKIAogICAgICAgICAvLyBwcm92
aWRlcyBLQiBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxp
dHkgdXNlcnMKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNl
ZFVzZXJJbnRlcmZhY2VFbmFibGVkKCkpCi0gICAgICAgICAgICBoYW5kbGVLZXlib2FyZFNlbGVj
dGlvbk1vdmVtZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9u
TW92ZW1lbnQobV9mcmFtZS0+c2VsZWN0aW9uKCksIGV2ZW50KTsKICAgICB9CiAgICAgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKICAgICAgICAgbV9m
cmFtZS0+ZWRpdG9yKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwpAQCAtMjU2NSwyNyAr
MjU5OCw2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKICAgICB9
CiB9CiAKLUZvY3VzRGlyZWN0aW9uIEV2ZW50SGFuZGxlcjo6Zm9jdXNEaXJlY3Rpb25Gb3JLZXko
Y29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKSBjb25zdAotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBEb3duLCAoIkRvd24iKSk7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFVwLCAoIlVwIikpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBMZWZ0LCAoIkxlZnQiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIFJpZ2h0LCAoIlJpZ2h0IikpOwotCi0gICAgRm9jdXNEaXJlY3Rp
b24gcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Ob25lOwotCi0gICAgaWYgKGtleUlkZW50aWZpZXIg
PT0gRG93bikKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Eb3duOwotICAgIGVsc2Ug
aWYgKGtleUlkZW50aWZpZXIgPT0gVXApCi0gICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9u
VXA7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBMZWZ0KQotICAgICAgICByZXRWYWwg
PSBGb2N1c0RpcmVjdGlvbkxlZnQ7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBSaWdo
dCkKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25SaWdodDsKLQotICAgIHJldHVybiBy
ZXRWYWw7Ci19Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogYm9vbCBFdmVudEhhbmRsZXI6
OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3Bv
cnRMb2NhdGlvbikgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAko
cmV2aXNpb24gODM3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCiAgICAgYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmLCBDbGlwYm9hcmQqKTsKICAgICB2b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgIGJvb2wgcGVyZm9ybURyYWdBbmRE
cm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOworICAgIHZvaWQgcGVy
Zm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwog
I2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOwpAQCAtMTQyLDcg
KzE0Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0SWdub3JlV2hlZWxFdmVudHMoYm9vbCk7
CiAKLSAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShOb2RlKik7CiAgICAg
c3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYpOwogCiAgICAgYm9vbCBzY3JvbGxPdmVyZmxvdyhTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKQEAgLTIz
NiwxMiArMjM1LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCi0gICAgZW51bSBEcmFnQW5kRHJvcEhhbmRsZVR5cGUgewotICAgICAgICBVcGRhdGVEcmFn
QW5kRHJvcCwKLSAgICAgICAgQ2FuY2VsRHJhZ0FuZERyb3AsCi0gICAgICAgIFBlcmZvcm1EcmFn
QW5kRHJvcAotICAgIH07Ci0KICAgICBzdHJ1Y3QgRXZlbnRIYW5kbGVyRHJhZ1N0YXRlIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRIYW5kbGVyRHJhZ1N0YXRlKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAtMjU4LDggKzI1MSw2IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIEV2ZW50SGFuZGxlckRyYWdTdGF0ZSYgZHJhZ1N0YXRlKCk7CiAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBUZXh0RHJhZ0RlbGF5OwogCi0gICAgYm9vbCBjYW5IYW5kbGVE
cmFnQW5kRHJvcEZvclRhcmdldChEcmFnQW5kRHJvcEhhbmRsZVR5cGUsIE5vZGUqIHRhcmdldCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKiwgYm9vbCogYWNjZXB0ZWQgPSAw
KTsKLSAgICAKICAgICBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRHJhZ2dpbmdDbGlwYm9h
cmQoKSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCkBAIC0yODAsOCAr
MjcxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1vdXNlRHJhZ2dlZEV2ZW50KGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICNlbmRpZgogICAgIGJvb2wgaGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwot
Ci0gICAgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZlbnQq
KTsKICAgICAKICAgICBDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0
VGVzdFJlc3VsdHMmLCBTY3JvbGxiYXIqKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKQEAg
LTM2OCw4ICszNTcsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc2V0RnJhbWVXYXNTY3Jv
bGxlZEJ5VXNlcigpOwogCi0gICAgRm9jdXNEaXJlY3Rpb24gZm9jdXNEaXJlY3Rpb25Gb3JLZXko
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KICAgICBib29sIGNhcHR1cmVzRHJhZ2dpbmco
KSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAogI2lmIFBMQVRGT1JNKE1B
QykgJiYgZGVmaW5lZChfX09CSkNfXykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89598</attachid>
            <date>2011-04-14 09:52:58 -0700</date>
            <delta_ts>2011-05-01 13:46:56 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-58503-20110414095257.patch</filename>
            <type>text/plain</type>
            <size>14489</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzODA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDQtMTMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBtb3JlIGZ1bmN0aW9ucyBzdGF0aWMgbG9jYWwgaW4gRXZl
bnRIYW5kbGVycy5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU4NTAzCisKKyAgICAgICAgTWFkZSBzZXZlcmFsIGZ1bmN0aW9ucyBpbiBFdmVudEhh
bmRsZXIgc3RhdGljIGxvY2FsIGFuZCByZWZhY3RvcmVkIHRoZW0uCisKKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhcmdl
dE5vZGUpOiBBIGJsYW5rIGxpbmUgaXMgcmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNhbkhh
bmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KTogTWFkZSBzdGF0aWMgbG9jYWw7IGFsc28gcmVmYWN0
b3JlZCB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlRHJh
Z0FuZERyb3ApOiBDYWxscyBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuY2VsRHJhZ0FuZERyb3ApOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKTogRGl0dG87IG5v
IGxvbmdlciByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZQorICAgICAgICBiZWNhdXNlIGFjY2VwdCB3
YXMgYWx3YXlzIGZhbHNlLgorICAgICAgICAoV2ViQ29yZTo6Zm9jdXNEaXJlY3Rpb25Gb3JLZXkp
OiBNYWRlIHN0YXRpYyBsb2NhbC4KKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUtleWJvYXJkU2Vs
ZWN0aW9uTW92ZW1lbnQpOiBEaXR0bzsgcmV3cml0dGVuIHRvIHVzZSBmb2N1c0RpcmVjdGlvbkZv
cktleS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZl
bnRIYW5kbGVyKTogQ2FsbHMgaGFuZGxlS2V5Ym9hcmRTZWxlY3Rpb25Nb3ZlbWVudC4KKyAgICAg
ICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorCiAyMDExLTA0LTEzICBBbGV4aXMgTWVuYXJkICA8
YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0
cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDgzODA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzE1LDggKzEzMTUsNyBAQCBOb2RlKiBFdmVudEhhbmRsZXI6OnRhcmdl
dE5vZGUoY29uc3QgSGl0CiAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAotICAgIHJldHVybiBub2RlOwotCisgICAgcmV0
dXJuIG5vZGU7ICAgIAogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKQEAgLTE3MjEsMzMgKzE3
MjAsMzQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbgogICAgIHJl
dHVybiBtZS0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6Y2Fu
SGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBlIHR5cGUsIE5v
ZGUqIHRhcmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBj
bGlwYm9hcmQsIGJvb2wqIGFjY2VwdGVkKQorZW51bSBEcmFnQW5kRHJvcEhhbmRsZVR5cGUgewor
ICAgIFVwZGF0ZURyYWdBbmREcm9wLAorICAgIENhbmNlbERyYWdBbmREcm9wLAorICAgIFBlcmZv
cm1EcmFnQW5kRHJvcAorfTsKKworc3RhdGljIGJvb2wgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JU
YXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBlIHR5cGUsIE5vZGUqIHRhcmdldCwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGJvb2wmIGFjY2Vw
dGVkKQogewotICAgIGJvb2wgY2FuSGFuZGxlID0gZmFsc2U7Ci0gICAgYm9vbCB3YXNBY2NlcHRl
ZCA9IGZhbHNlOworICAgIGlmICghdGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSAmJiAhdGFy
Z2V0LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKHRhcmdldC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgdGFyZ2V0LT5oYXNUYWdOYW1lKGlm
cmFtZVRhZykpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
RWxlbWVudEJhc2UqPih0YXJnZXQpLT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1l
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVXBkYXRl
RHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQgPSBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDYW5jZWxEcmFnQW5kRHJvcDoKLSAgICAg
ICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhbmNlbERyYWdBbmREcm9wKGV2ZW50
LCBjbGlwYm9hcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQ
ZXJmb3JtRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAgICAgd2FzQWNjZXB0ZWQgPSBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICBjYW5IYW5kbGUgPSB0cnVlOworICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19j
YXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4odGFyZ2V0KS0+Y29udGVudEZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGFjY2VwdGVkKQot
ICAgICAgICAqYWNjZXB0ZWQgPSB3YXNBY2NlcHRlZDsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFVwZGF0ZURyYWdBbmREcm9wOgorICAgICAgICBhY2NlcHRlZCA9IGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ2FuY2VsRHJhZ0FuZERyb3A6CisgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGVyZm9ybURyYWdBbmREcm9wOgorICAgICAgICBmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogCi0gICAgcmV0dXJuIGNhbkhhbmRsZTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKQEAgLTE3NzMsNyAr
MTc3Myw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAg
ICAgLy8gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1pbi1mcmFtZXMuaHRtbC4KICAgICAg
ICAgLy8KICAgICAgICAgLy8gTW9yZW92ZXIsIHRoaXMgb3JkZXJpbmcgY29uZm9ybXMgdG8gc2Vj
dGlvbiA3LjkuNCBvZiB0aGUgSFRNTCA1IHNwZWMuIDxodHRwOi8vZGV2LnczLm9yZy9odG1sNS9z
cGVjL092ZXJ2aWV3Lmh0bWwjZHJhZy1hbmQtZHJvcC1wcm9jZXNzaW5nLW1vZGVsPi4KLSAgICAg
ICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChVcGRhdGVE
cmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkLCAmYWNjZXB0KSkgeworICAg
ICAgICBpZiAobmV3VGFyZ2V0ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KFVwZGF0
ZURyYWdBbmREcm9wLCBuZXdUYXJnZXQsIGV2ZW50LCBjbGlwYm9hcmQsIGFjY2VwdCkpIHsKICAg
ICAgICAgICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUgc3BlYy4sIHdl
IG11c3QgYWx3YXlzIGZpcmUgYSBkcmFnIGV2ZW50IGJlZm9yZSBmaXJpbmcgYSBkcmFnZW50ZXIs
IGRyYWdsZWF2ZSwgb3IgZHJhZ292ZXIgZXZlbnQuCiAgICAgICAgICAgICBpZiAoZHJhZ1N0YXRl
KCkubV9kcmFnU3JjICYmIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY01heUJlREhUTUwpIHsKICAgICAg
ICAgICAgICAgICAvLyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFuZGxlciBjYW5j
ZWxzIGRlZmF1bHQgYmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKQEAgLTE3ODIsNyArMTc4
Miw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAg
ICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJFdmVu
dCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoVXBkYXRlRHJh
Z0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwgJmFjY2VwdCkp
CisgICAgICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJn
ZXQoVXBkYXRlRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2Fy
ZCwgYWNjZXB0KSkKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5k
cmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChuZXdUYXJnZXQpIHsKQEAgLTE3OTEsNyArMTc5MSw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgICAgIG1fc2hv
dWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChuZXdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQo
VXBkYXRlRHJhZ0FuZERyb3AsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCwgJmFjY2VwdCkp
IHsKKyAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdl
dChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkLCBhY2NlcHQp
KSB7CiAgICAgICAgICAgICAvLyBOb3RlLCB3aGVuIGRlYWxpbmcgd2l0aCBzdWItZnJhbWVzLCB3
ZSBtYXkgbmVlZCB0byBmaXJlIG9ubHkgYSBkcmFnb3ZlciBldmVudCBhcyBhIGRyYWcgZXZlbnQg
bWF5IGhhdmUgYmVlbiBmaXJlZCBlYXJsaWVyLgogICAgICAgICAgICAgaWYgKCFtX3Nob3VsZE9u
bHlGaXJlRHJhZ092ZXJFdmVudCAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYgZHJhZ1N0YXRl
KCkubV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgICAgIC8vIGZvciBub3cgd2Ug
ZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMgZGVmYXVsdCBiZWhhdmlvciwgc2lu
Y2UgdGhlcmUgaXMgbm9uZQpAQCAtMTgwOCw3ICsxODA4LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnVwZGF0ZURyYWdBbmREcm9wKGNvbgogCiB2b2lkIEV2ZW50SGFuZGxlcjo6Y2FuY2VsRHJhZ0Fu
ZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9h
cmQpCiB7Ci0gICAgaWYgKG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRh
cmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJv
YXJkKSkgeworICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYgKG1fZHJhZ1RhcmdldCAmJiBjYW5I
YW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChDYW5jZWxEcmFnQW5kRHJvcCwgbV9kcmFnVGFyZ2V0
LmdldCgpLCBldmVudCwgY2xpcGJvYXJkLCBhY2NlcHRlZCkpIHsKICAgICAgICAgaWYgKGRyYWdT
dGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURIVE1MKQogICAg
ICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZl
bnQpOwogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZl
bnQsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCk7CkBAIC0xODE2LDEzICsx
ODE3LDEyIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcChjb24KICAgICBj
bGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmRE
cm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIENsaXBib2FyZCogY2xpcGJvYXJk
KQordm9pZCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICBib29sIGFjY2Vw
dCA9IGZhbHNlOwotICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BG
b3JUYXJnZXQoUGVyZm9ybURyYWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBj
bGlwYm9hcmQsICZhY2NlcHQpKQorICAgIGJvb2wgYWNjZXB0ZWQ7CisgICAgaWYgKG1fZHJhZ1Rh
cmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChQZXJmb3JtRHJhZ0FuZERyb3As
IG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwgYWNjZXB0ZWQpKQogICAgICAg
ICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJvcEV2ZW50LCBtX2RyYWdUYXJnZXQu
Z2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpOwogICAgIGNsZWFyRHJhZ1N0YXRlKCk7Ci0gICAgcmV0
dXJuIGFjY2VwdDsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyRHJhZ1N0YXRlKCkKQEAg
LTI1MTEsMzEgKzI1MTEsNjQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBs
YXRmbwogICAgIHJldHVybiBrZXlkb3duUmVzdWx0IHx8IGtleXByZXNzLT5kZWZhdWx0UHJldmVu
dGVkKCkgfHwga2V5cHJlc3MtPmRlZmF1bHRIYW5kbGVkKCk7CiB9CiAKLXZvaWQgRXZlbnRIYW5k
bGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50
KQorc3RhdGljIEZvY3VzRGlyZWN0aW9uIGZvY3VzRGlyZWN0aW9uRm9yS2V5KGNvbnN0IEF0b21p
Y1N0cmluZyYga2V5SWRlbnRpZmllcikKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21p
Y1N0cmluZywgRG93biwgKCJEb3duIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWlj
U3RyaW5nLCBVcCwgKCJVcCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmlu
ZywgTGVmdCwgKCJMZWZ0IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBSaWdodCwgKCJSaWdodCIpKTsKKworICAgIEZvY3VzRGlyZWN0aW9uIHJldFZhbCA9IEZvY3Vz
RGlyZWN0aW9uTm9uZTsKKworICAgIGlmIChrZXlJZGVudGlmaWVyID09IERvd24pCisgICAgICAg
IHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uRG93bjsKKyAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVy
ID09IFVwKQorICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvblVwOworICAgIGVsc2UgaWYg
KGtleUlkZW50aWZpZXIgPT0gTGVmdCkKKyAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25M
ZWZ0OworICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gUmlnaHQpCisgICAgICAgIHJldFZh
bCA9IEZvY3VzRGlyZWN0aW9uUmlnaHQ7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCitzdGF0
aWMgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KFNlbGVjdGlvbkNvbnRyb2xs
ZXIqIHNlbGVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKCFldmVudCkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0IFN0cmluZyYga2V5ID0gZXZlbnQtPmtl
eUlkZW50aWZpZXIoKTsKKwogICAgIGJvb2wgaXNTaGlmdGVkID0gZXZlbnQtPmdldE1vZGlmaWVy
U3RhdGUoIlNoaWZ0Iik7CiAgICAgYm9vbCBpc09wdGlvbmVkID0gZXZlbnQtPmdldE1vZGlmaWVy
U3RhdGUoIkFsdCIpOwogICAgIGJvb2wgaXNDb21tYW5kZWQgPSBldmVudC0+Z2V0TW9kaWZpZXJT
dGF0ZSgiTWV0YSIpOwotICAgIAotICAgIGlmIChrZXkgPT0gIlVwIikgewotICAgICAgICBtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9uQ29udHJvbGxl
cjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3Zl
LCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91bmRhcnkgOiBM
aW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsKLSAgICAgICAgbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVy
YXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50Qm91bmRhcnkgOiBMaW5lR3JhbnVs
YXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9
IGVsc2UgaWYgKGtleSA9PSAiTGVmdCIpIHsKLSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCkt
Pm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRl
bmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uTGVmdCwg
KGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxh
cml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlJpZ2h0IikgewotICAgICAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2VsZWN0aW9uQ29u
dHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25SaWdodCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChp
c09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVl
KTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSAgICAKKworICAg
IFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBEaXJlY3Rpb25Gb3J3YXJkOworICAgIFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OworICAgIHN3
aXRjaCAoZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtleUlkZW50aWZpZXIoKSkpIHsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uRm9yd2FyZDoKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uQmFj
a3dhcmQ6CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbk5vbmU6CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlvbkJh
Y2t3YXJkOworICAgICAgICBncmFudWxhcml0eSA9IChpc0NvbW1hbmRlZCkgPyBEb2N1bWVudEJv
dW5kYXJ5IDogTGluZUdyYW51bGFyaXR5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uRG93bjoKKyAgICAgICAgZGlyZWN0aW9uID0gRGlyZWN0aW9uRm9yd2FyZDsKKyAg
ICAgICAgZ3JhbnVsYXJpdHkgPSAoaXNDb21tYW5kZWQpID8gRG9jdW1lbnRCb3VuZGFyeSA6IExp
bmVHcmFudWxhcml0eTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxl
ZnQ6CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlvbkxlZnQ7CisgICAgICAgIGdyYW51bGFy
aXR5ID0gKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRH
cmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5OworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlvblJp
Z2h0OworICAgICAgICBncmFudWxhcml0eSA9IChpc0NvbW1hbmRlZCkgPyBMaW5lQm91bmRhcnkg
OiAoaXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2VsZWN0aW9uLT5tb2RpZnkoKGlzU2hpZnRl
ZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2VsZWN0aW9uQ29u
dHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHRydWUpOwog
fQotICAgIAorCiB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVy
KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKQEAgLTI1NTQsNyArMjU4Nyw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKIAogICAgICAgICAvLyBwcm92aWRlcyBLQiBu
YXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxpdHkgdXNlcnMK
ICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRl
cmZhY2VFbmFibGVkKCkpCi0gICAgICAgICAgICBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVt
ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQo
bV9mcmFtZS0+c2VsZWN0aW9uKCksIGV2ZW50KTsKICAgICB9CiAgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKICAgICAgICAgbV9mcmFtZS0+ZWRp
dG9yKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwpAQCAtMjU2NSwyNyArMjU5OCw2IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKICAgICB9CiB9CiAKLUZv
Y3VzRGlyZWN0aW9uIEV2ZW50SGFuZGxlcjo6Zm9jdXNEaXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRv
bWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQXRvbWljU3RyaW5nLCBEb3duLCAoIkRvd24iKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChBdG9taWNTdHJpbmcsIFVwLCAoIlVwIikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBMZWZ0LCAoIkxlZnQiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9t
aWNTdHJpbmcsIFJpZ2h0LCAoIlJpZ2h0IikpOwotCi0gICAgRm9jdXNEaXJlY3Rpb24gcmV0VmFs
ID0gRm9jdXNEaXJlY3Rpb25Ob25lOwotCi0gICAgaWYgKGtleUlkZW50aWZpZXIgPT0gRG93bikK
LSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Eb3duOwotICAgIGVsc2UgaWYgKGtleUlk
ZW50aWZpZXIgPT0gVXApCi0gICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uVXA7Ci0gICAg
ZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBMZWZ0KQotICAgICAgICByZXRWYWwgPSBGb2N1c0Rp
cmVjdGlvbkxlZnQ7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBSaWdodCkKLSAgICAg
ICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25SaWdodDsKLQotICAgIHJldHVybiByZXRWYWw7Ci19
Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0
ZXJlc2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3BvcnRMb2NhdGlv
bikgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24g
ODM4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiAgICAgYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBD
bGlwYm9hcmQqKTsKICAgICB2b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgIGJvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOworICAgIHZvaWQgcGVyZm9ybURyYWdB
bmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgpOwpAQCAtMjM2LDEyICsyMzYsNiBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICBlbnVt
IERyYWdBbmREcm9wSGFuZGxlVHlwZSB7Ci0gICAgICAgIFVwZGF0ZURyYWdBbmREcm9wLAotICAg
ICAgICBDYW5jZWxEcmFnQW5kRHJvcCwKLSAgICAgICAgUGVyZm9ybURyYWdBbmREcm9wCi0gICAg
fTsKLQogICAgIHN0cnVjdCBFdmVudEhhbmRsZXJEcmFnU3RhdGUgewogICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShFdmVudEhhbmRsZXJEcmFnU3RhdGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6CkBAIC0yNTgsOCArMjUyLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgRXZlbnRIYW5kbGVyRHJhZ1N0YXRlJiBkcmFnU3RhdGUoKTsKICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIFRleHREcmFnRGVsYXk7CiAKLSAgICBib29sIGNhbkhhbmRsZURyYWdBbmREcm9wRm9y
VGFyZ2V0KERyYWdBbmREcm9wSGFuZGxlVHlwZSwgTm9kZSogdGFyZ2V0LCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqLCBib29sKiBhY2NlcHRlZCA9IDApOwotICAgIAogICAg
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0Owog
I2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKQEAgLTI4MCw4ICsyNzIsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgaGFuZGxlTW91c2VEcmFnZ2VkRXZlbnQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYpOwogI2VuZGlmCiAgICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7Ci0KLSAgICB2b2lkIGhh
bmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQoS2V5Ym9hcmRFdmVudCopOwogICAgIAogICAg
IEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYs
IFNjcm9sbGJhciopOwogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQpAQCAtMzY4LDggKzM1OCw2
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzZXRGcmFtZVdhc1Njcm9sbGVkQnlVc2VyKCk7
CiAKLSAgICBGb2N1c0RpcmVjdGlvbiBmb2N1c0RpcmVjdGlvbkZvcktleShjb25zdCBBdG9taWNT
dHJpbmcmKSBjb25zdDsKLQogICAgIGJvb2wgY2FwdHVyZXNEcmFnZ2luZygpIGNvbnN0IHsgcmV0
dXJuIG1fY2FwdHVyZXNEcmFnZ2luZzsgfQogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVk
KF9fT0JKQ19fKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91839</attachid>
            <date>2011-05-01 13:47:00 -0700</date>
            <delta_ts>2011-05-01 14:09:25 -0700</delta_ts>
            <desc>Fixed per comments</desc>
            <filename>bug-58503-20110501134659.patch</filename>
            <type>text/plain</type>
            <size>13891</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NDI5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDUtMDEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBtb3JlIGZ1bmN0aW9ucyBzdGF0aWMgbG9jYWwgaW4gRXZl
bnRIYW5kbGVycy5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU4NTAzCisKKyAgICAgICAgUmVtb3ZlZCBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRh
cmdldCBhbmQgbWFkZSBmb2N1c0RpcmVjdGlvbkZvcktleSBsb2NhbCB0byBFdmVudEhhbmRsZXIu
Y3BwLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udGVudEZyYW1lRm9yVGFyZ2V0KTogRXh0cmFjdGVkIGZyb20gY2FuSGFuZGxlRHJhZ0Fu
ZERyb3BGb3JUYXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZURy
YWdBbmREcm9wKTogQ2FsbHMgY29udGVudEZyYW1lRm9yVGFyZ2V0IGluc3RlYWQgb2YgY2FuSGFu
ZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNhbmNlbERyYWdBbmREcm9wKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBlcmZvcm1EcmFnQW5kRHJvcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Zm9jdXNE
aXJlY3Rpb25Gb3JLZXkpOiBObyBsb25nZXIgYSBtZW1iZXIgZnVuY3Rpb24gb2YgRXZlbnRIYW5k
bGVyIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2Fy
ZFNlbGVjdGlvbk1vdmVtZW50KTogQ2FsbHMgZm9jdXNEaXJlY3Rpb25Gb3JLZXkgaW5zdGVhZCBv
ZiBtYW51YWxseSBjb21wYXJpbmcKKyAgICAgICAgc3RyaW5ncy4KKyAgICAgICAgKiBwYWdlL0V2
ZW50SGFuZGxlci5oOgorCiAyMDExLTA1LTAxICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gODU0MjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NDIsMzMgKzE3NDIs
MTUgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbgogICAgIHJldHVy
biBtZS0+ZGVmYXVsdFByZXZlbnRlZCgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6Y2FuSGFu
ZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoRHJhZ0FuZERyb3BIYW5kbGVUeXBlIHR5cGUsIE5vZGUq
IHRhcmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQsIGJvb2wqIGFjY2VwdGVkKQorc3RhdGljIEZyYW1lKiBjb250ZW50RnJhbWVGb3JUYXJn
ZXQoTm9kZSogdGFyZ2V0KQogewotICAgIGJvb2wgY2FuSGFuZGxlID0gZmFsc2U7Ci0gICAgYm9v
bCB3YXNBY2NlcHRlZCA9IGZhbHNlOwotCi0gICAgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShmcmFt
ZVRhZykgfHwgdGFyZ2V0LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgRnJhbWUq
IGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPih0YXJnZXQpLT5jb250
ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVXBkYXRlRHJhZ0FuZERyb3A6Ci0gICAgICAgICAgICAg
ICAgd2FzQWNjZXB0ZWQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9w
KGV2ZW50LCBjbGlwYm9hcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDYW5jZWxEcmFnQW5kRHJvcDoKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmNhbmNlbERyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQZXJmb3JtRHJhZ0FuZERyb3A6Ci0gICAgICAg
ICAgICAgICAgd2FzQWNjZXB0ZWQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnBlcmZvcm1EcmFn
QW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBjYW5IYW5kbGUgPSB0cnVl
OworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChhY2NlcHRl
ZCkKLSAgICAgICAgKmFjY2VwdGVkID0gd2FzQWNjZXB0ZWQ7CisgICAgaWYgKCF0YXJnZXQtPmhh
c1RhZ05hbWUoZnJhbWVUYWcpICYmICF0YXJnZXQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY2FuSGFuZGxlOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KHRhcmdldCktPmNvbnRlbnRGcmFtZSgpOwog
fQogCiBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCkBAIC0xNzk0LDcgKzE3NzYs
OSBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3AoY29uCiAgICAgICAgIC8v
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctaW4tZnJhbWVzLmh0bWwuCiAgICAgICAgIC8v
CiAgICAgICAgIC8vIE1vcmVvdmVyLCB0aGlzIG9yZGVyaW5nIGNvbmZvcm1zIHRvIHNlY3Rpb24g
Ny45LjQgb2YgdGhlIEhUTUwgNSBzcGVjLiA8aHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9P
dmVydmlldy5odG1sI2RyYWctYW5kLWRyb3AtcHJvY2Vzc2luZy1tb2RlbD4uCi0gICAgICAgIGlm
IChuZXdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoVXBkYXRlRHJhZ0Fu
ZERyb3AsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBib2FyZCwgJmFjY2VwdCkpIHsKKyAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGNvbnRlbnRGcmFtZUZvclRhcmdldChuZXdUYXJnZXQpKQorICAg
ICAgICAgICAgYWNjZXB0ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT51cGRhdGVEcmFnQW5kRHJv
cChldmVudCwgY2xpcGJvYXJkKTsKKyAgICAgICAgZWxzZSBpZiAobmV3VGFyZ2V0KSB7CiAgICAg
ICAgICAgICAvLyBBcyBwZXIgc2VjdGlvbiA3LjkuNCBvZiB0aGUgSFRNTCA1IHNwZWMuLCB3ZSBt
dXN0IGFsd2F5cyBmaXJlIGEgZHJhZyBldmVudCBiZWZvcmUgZmlyaW5nIGEgZHJhZ2VudGVyLCBk
cmFnbGVhdmUsIG9yIGRyYWdvdmVyIGV2ZW50LgogICAgICAgICAgICAgaWYgKGRyYWdTdGF0ZSgp
Lm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURIVE1MKSB7CiAgICAgICAg
ICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRsZXIgY2FuY2Vs
cyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCkBAIC0xODAzLDE2ICsxNzg3
LDIwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAg
ICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJFdmVu
dCwgbmV3VGFyZ2V0LCBldmVudCwgY2xpcGJvYXJkKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxlRHJhZ0FuZERyb3BGb3JUYXJnZXQoVXBkYXRlRHJh
Z0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCwgJmFjY2VwdCkp
CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWVGb3JUYXJnZXQobV9kcmFn
VGFyZ2V0LmdldCgpKSkKKyAgICAgICAgICAgIGFjY2VwdCA9IGZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CisgICAgICAgIGVsc2UgaWYg
KG1fZHJhZ1RhcmdldCkKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnbGVhdmVFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsK
LSAgICAgICAgCisKICAgICAgICAgaWYgKG5ld1RhcmdldCkgewogICAgICAgICAgICAgLy8gV2Ug
ZG8gbm90IGV4cGxpY2l0bHkgY2FsbCBkaXNwYXRjaERyYWdFdmVudCBoZXJlIGJlY2F1c2UgaXQg
Y291bGQgdWx0aW1hdGVseSByZXN1bHQgaW4gdGhlIGFwcGVhcmFuY2UgdGhhdAogICAgICAgICAg
ICAgLy8gdHdvIGRyYWdvdmVyIGV2ZW50cyBmaXJlZC4gU28sIHdlIG1hcmsgdGhhdCB3ZSBzaG91
bGQgb25seSBmaXJlIGEgZHJhZ292ZXIgZXZlbnQgb24gdGhlIG5leHQgY2FsbCB0byB0aGlzIGZ1
bmN0aW9uLgogICAgICAgICAgICAgbV9zaG91bGRPbmx5RmlyZURyYWdPdmVyRXZlbnQgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBjYW5I
YW5kbGVEcmFnQW5kRHJvcEZvclRhcmdldChVcGRhdGVEcmFnQW5kRHJvcCwgbmV3VGFyZ2V0LCBl
dmVudCwgY2xpcGJvYXJkLCAmYWNjZXB0KSkgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29udGVudEZyYW1lRm9yVGFyZ2V0KG5ld1RhcmdldCkpCisgICAgICAgICAgICBhY2NlcHQgPSBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQp
OworICAgICAgICBlbHNlIGlmIChuZXdUYXJnZXQpIHsKICAgICAgICAgICAgIC8vIE5vdGUsIHdo
ZW4gZGVhbGluZyB3aXRoIHN1Yi1mcmFtZXMsIHdlIG1heSBuZWVkIHRvIGZpcmUgb25seSBhIGRy
YWdvdmVyIGV2ZW50IGFzIGEgZHJhZyBldmVudCBtYXkgaGF2ZSBiZWVuIGZpcmVkIGVhcmxpZXIu
CiAgICAgICAgICAgICBpZiAoIW1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ICYmIGRyYWdT
dGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlCZURIVE1MKSB7CiAg
ICAgICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRsZXIg
Y2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCkBAIC0xODI5LDcg
KzE4MTcsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3AoY29uCiAKIHZv
aWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICBpZiAobV9kcmFnVGFyZ2V0
ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KENhbmNlbERyYWdBbmREcm9wLCBtX2Ry
YWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpKSB7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGNvbnRlbnRGcmFtZUZvclRhcmdldChtX2RyYWdUYXJnZXQuZ2V0KCkpKQorICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhbmNlbERyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQp
OworICAgIGVsc2UgaWYgKG1fZHJhZ1RhcmdldC5nZXQoKSkgewogICAgICAgICBpZiAoZHJhZ1N0
YXRlKCkubV9kcmFnU3JjICYmIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY01heUJlREhUTUwpCiAgICAg
ICAgICAgICBkaXNwYXRjaERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ0V2ZW50LCBldmVu
dCk7CiAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVu
dCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJvYXJkKTsKQEAgLTE4MzcsMTMgKzE4
MjcsMTMgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNhbmNlbERyYWdBbmREcm9wKGNvbgogICAgIGNs
ZWFyRHJhZ1N0YXRlKCk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwZXJmb3JtRHJhZ0FuZERy
b3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQp
Cit2b2lkIEV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQsIENsaXBib2FyZCogY2xpcGJvYXJkKQogewotICAgIGJvb2wgYWNjZXB0
ID0gZmFsc2U7Ci0gICAgaWYgKG1fZHJhZ1RhcmdldCAmJiBjYW5IYW5kbGVEcmFnQW5kRHJvcEZv
clRhcmdldChQZXJmb3JtRHJhZ0FuZERyb3AsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNs
aXBib2FyZCwgJmFjY2VwdCkpCisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvbnRlbnRGcmFtZUZv
clRhcmdldChtX2RyYWdUYXJnZXQuZ2V0KCkpKQorICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKKyAgICBlbHNlIGlmICht
X2RyYWdUYXJnZXQuZ2V0KCkpCiAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMo
KS5kcm9wRXZlbnQsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCk7CiAgICAg
Y2xlYXJEcmFnU3RhdGUoKTsKLSAgICByZXR1cm4gYWNjZXB0OwogfQogCiB2b2lkIEV2ZW50SGFu
ZGxlcjo6Y2xlYXJEcmFnU3RhdGUoKQpAQCAtMjUzMiwyOSArMjUyMiw2MyBAQCBib29sIEV2ZW50
SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvCiAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQg
fHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8fCBrZXlwcmVzcy0+ZGVmYXVsdEhhbmRs
ZWQoKTsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OmhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92
ZW1lbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCitzdGF0aWMgRm9jdXNEaXJlY3Rpb24gZm9jdXNE
aXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBkb3duLCAoIkRvd24iKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHVwLCAoIlVwIikpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBsZWZ0LCAoIkxlZnQiKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHJpZ2h0LCAoIlJpZ2h0IikpOworCisgICAgaWYg
KGtleUlkZW50aWZpZXIgPT0gZG93bikKKyAgICAgICAgcmV0dXJuIEZvY3VzRGlyZWN0aW9uRG93
bjsKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSB1cCkKKyAgICAgICAgcmV0dXJuIEZvY3VzRGly
ZWN0aW9uVXA7CisgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gbGVmdCkKKyAgICAgICAgcmV0dXJu
IEZvY3VzRGlyZWN0aW9uTGVmdDsKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSByaWdodCkKKyAg
ICAgICAgcmV0dXJuIEZvY3VzRGlyZWN0aW9uUmlnaHQ7CisKKyAgICByZXR1cm4gRm9jdXNEaXJl
Y3Rpb25Ob25lOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVt
ZW50KFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7CiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNvbnN0IFN0
cmluZyYga2V5ID0gZXZlbnQtPmtleUlkZW50aWZpZXIoKTsKLSAgICBib29sIGlzU2hpZnRlZCA9
IGV2ZW50LT5nZXRNb2RpZmllclN0YXRlKCJTaGlmdCIpOworCiAgICAgYm9vbCBpc09wdGlvbmVk
ID0gZXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIkFsdCIpOwogICAgIGJvb2wgaXNDb21tYW5kZWQg
PSBldmVudC0+Z2V0TW9kaWZpZXJTdGF0ZSgiTWV0YSIpOwotICAgIAotICAgIGlmIChrZXkgPT0g
IlVwIikgewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQp
ID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25CYWNrd2FyZCwgKGlzQ29tbWFuZGVkKSA/
IERvY3VtZW50Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsK
LSAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpB
bHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgKGlzQ29tbWFuZGVkKSA/IERvY3VtZW50
Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiTGVmdCIpIHsKLSAgICAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeSgoaXNTaGlmdGVkKSA/IFNlbGVjdGlvbkNvbnRy
b2xsZXI6OkFsdGVyYXRpb25FeHRlbmQgOiBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uTGVmdCwgKGlzQ29tbWFuZGVkKSA/IExpbmVCb3VuZGFyeSA6IChpc09w
dGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51bGFyaXR5LCB0cnVlKTsK
LSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgfSBlbHNlIGlmIChrZXkg
PT0gIlJpZ2h0IikgewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1No
aWZ0ZWQpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25SaWdodCwgKGlzQ29tbWFuZGVk
KSA/IExpbmVCb3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJh
Y3RlckdyYW51bGFyaXR5LCB0cnVlKTsKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Ci0gICAgfSAgICAKKyAgICBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gRGlyZWN0
aW9uRm9yd2FyZDsKKyAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eTsKKworICAgIHN3aXRjaCAoZm9jdXNEaXJlY3Rpb25Gb3JLZXkoZXZlbnQtPmtl
eUlkZW50aWZpZXIoKSkpIHsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTm9uZToKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Gb3J3YXJkOgorICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25CYWNrd2FyZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CisgICAgICAgIGRpcmVjdGlvbiA9
IERpcmVjdGlvbkJhY2t3YXJkOworICAgICAgICBncmFudWxhcml0eSA9IGlzQ29tbWFuZGVkID8g
RG9jdW1lbnRCb3VuZGFyeSA6IExpbmVHcmFudWxhcml0eTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkRvd246CisgICAgICAgIGRpcmVjdGlvbiA9IERpcmVjdGlvbkZv
cndhcmQ7CisgICAgICAgIGdyYW51bGFyaXR5ID0gaXNDb21tYW5kZWQgPyBEb2N1bWVudEJvdW5k
YXJ5IDogTGluZUdyYW51bGFyaXR5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uTGVmdDoKKyAgICAgICAgZGlyZWN0aW9uID0gRGlyZWN0aW9uTGVmdDsKKyAgICAgICAg
Z3JhbnVsYXJpdHkgPSAoaXNDb21tYW5kZWQpID8gTGluZUJvdW5kYXJ5IDogKGlzT3B0aW9uZWQp
ID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKKyAgICAgICAgZGlyZWN0aW9uID0gRGly
ZWN0aW9uUmlnaHQ7CisgICAgICAgIGdyYW51bGFyaXR5ID0gKGlzQ29tbWFuZGVkKSA/IExpbmVC
b3VuZGFyeSA6IChpc09wdGlvbmVkKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJhY3RlckdyYW51
bGFyaXR5OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVy
OjpFQWx0ZXJhdGlvbiBhbHRlcm5hdGlvbiA9IGV2ZW50LT5nZXRNb2RpZmllclN0YXRlKCJTaGlm
dCIpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlOworICAgIHNlbGVjdGlvbi0+bW9kaWZ5KGFsdGVybmF0
aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCB0cnVlKTsKKyAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKIH0KICAgICAKIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRF
dmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCkBAIC0yNTc1LDcgKzI1OTksNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiAKICAgICAgICAgLy8gcHJv
dmlkZXMgS0IgbmF2aWdhdGlvbiBhbmQgc2VsZWN0aW9uIGZvciBlbmhhbmNlZCBhY2Nlc3NpYmls
aXR5IHVzZXJzCiAgICAgICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5oYW5j
ZWRVc2VySW50ZXJmYWNlRW5hYmxlZCgpKQotICAgICAgICAgICAgaGFuZGxlS2V5Ym9hcmRTZWxl
Y3Rpb25Nb3ZlbWVudChldmVudCk7CisgICAgICAgICAgICBoYW5kbGVLZXlib2FyZFNlbGVjdGlv
bk1vdmVtZW50KG1fZnJhbWUtPnNlbGVjdGlvbigpLCBldmVudCk7CiAgICAgfQogICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CiAgICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLT5oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50KTsKQEAgLTI1ODYsMjcg
KzI2MTAsNiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiAgICAg
fQogfQogCi1Gb2N1c0RpcmVjdGlvbiBFdmVudEhhbmRsZXI6OmZvY3VzRGlyZWN0aW9uRm9yS2V5
KGNvbnN0IEF0b21pY1N0cmluZyYga2V5SWRlbnRpZmllcikgY29uc3QKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgRG93biwgKCJEb3duIikpOwotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBVcCwgKCJVcCIpKTsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgTGVmdCwgKCJMZWZ0IikpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBSaWdodCwgKCJSaWdodCIpKTsKLQotICAgIEZvY3VzRGlyZWN0
aW9uIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uTm9uZTsKLQotICAgIGlmIChrZXlJZGVudGlmaWVy
ID09IERvd24pCi0gICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uRG93bjsKLSAgICBlbHNl
IGlmIChrZXlJZGVudGlmaWVyID09IFVwKQotICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlv
blVwOwotICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gTGVmdCkKLSAgICAgICAgcmV0VmFs
ID0gRm9jdXNEaXJlY3Rpb25MZWZ0OwotICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gUmln
aHQpCi0gICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uUmlnaHQ7Ci0KLSAgICByZXR1cm4g
cmV0VmFsOwotfQotCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIGJvb2wgRXZlbnRIYW5kbGVy
OjpkcmFnSHlzdGVyZXNpc0V4Y2VlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIGZsb2F0RHJhZ1ZpZXdw
b3J0TG9jYXRpb24pIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJ
KHJldmlzaW9uIDg1NDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQogICAgIGJvb2wgdXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiwgQ2xpcGJvYXJkKik7CiAgICAgdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICBib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKKyAgICB2b2lkIHBl
cmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsK
ICNlbmRpZgogCiAgICAgdm9pZCBzY2hlZHVsZUhvdmVyU3RhdGVVcGRhdGUoKTsKQEAgLTIzNiwx
MiArMjM2LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQp
Ci0gICAgZW51bSBEcmFnQW5kRHJvcEhhbmRsZVR5cGUgewotICAgICAgICBVcGRhdGVEcmFnQW5k
RHJvcCwKLSAgICAgICAgQ2FuY2VsRHJhZ0FuZERyb3AsCi0gICAgICAgIFBlcmZvcm1EcmFnQW5k
RHJvcAotICAgIH07Ci0KICAgICBzdHJ1Y3QgRXZlbnRIYW5kbGVyRHJhZ1N0YXRlIHsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRIYW5kbGVyRHJhZ1N0YXRlKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAtMjU4LDggKzI1Miw2IEBAIHByaXZhdGU6
CiAgICAgc3RhdGljIEV2ZW50SGFuZGxlckRyYWdTdGF0ZSYgZHJhZ1N0YXRlKCk7CiAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBUZXh0RHJhZ0RlbGF5OwogCi0gICAgYm9vbCBjYW5IYW5kbGVEcmFn
QW5kRHJvcEZvclRhcmdldChEcmFnQW5kRHJvcEhhbmRsZVR5cGUsIE5vZGUqIHRhcmdldCwgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKiwgYm9vbCogYWNjZXB0ZWQgPSAwKTsK
LSAgICAKICAgICBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQo
KSBjb25zdDsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCkBAIC0yODEsOCArMjcz
LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwogCi0gICAgdm9pZCBoYW5kbGVL
ZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZlbnQqKTsKLSAgICAKICAgICBDdXJz
b3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBTY3Jv
bGxiYXIqKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKICAgICB2b2lkIHVwZGF0ZVBhblNj
cm9sbFN0YXRlKCk7CkBAIC0zNjgsOCArMzU4LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsKIAotICAgIEZvY3VzRGlyZWN0aW9uIGZvY3Vz
RGlyZWN0aW9uRm9yS2V5KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCiAgICAgYm9vbCBj
YXB0dXJlc0RyYWdnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlc0RyYWdnaW5nOyB9CiAK
ICNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91842</attachid>
            <date>2011-05-01 14:09:28 -0700</date>
            <delta_ts>2011-06-02 07:54:33 -0700</delta_ts>
            <desc>Fixed a regression</desc>
            <filename>bug-58503-20110501140927.patch</filename>
            <type>text/plain</type>
            <size>14187</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NDI5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDUtMDEgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBtb3JlIGZ1bmN0aW9ucyBzdGF0aWMgbG9jYWwgaW4gRXZl
bnRIYW5kbGVycy5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU4NTAzCisKKyAgICAgICAgUmVtb3ZlZCBjYW5IYW5kbGVEcmFnQW5kRHJvcEZvclRh
cmdldCBhbmQgbWFkZSBmb2N1c0RpcmVjdGlvbkZvcktleSBsb2NhbCB0byBFdmVudEhhbmRsZXIu
Y3BwLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dGFyZ2V0SXNGcmFtZSk6IEV4dHJhY3RlZCBmcm9tIGNhbkhhbmRsZURyYWdBbmREcm9wRm9y
VGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJv
cCk6IENhbGxzIGNvbnRlbnRGcmFtZUZvclRhcmdldCBpbnN0ZWFkIG9mIGNhbkhhbmRsZURyYWdB
bmREcm9wRm9yVGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjYW5jZWxE
cmFnQW5kRHJvcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwZXJm
b3JtRHJhZ0FuZERyb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzRGlyZWN0aW9u
Rm9yS2V5KTogTm8gbG9uZ2VyIGEgbWVtYmVyIGZ1bmN0aW9uIG9mIEV2ZW50SGFuZGxlciBjbGFz
cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRTZWxlY3Rp
b25Nb3ZlbWVudCk6IENhbGxzIGZvY3VzRGlyZWN0aW9uRm9yS2V5IGluc3RlYWQgb2YgbWFudWFs
bHkgY29tcGFyaW5nCisgICAgICAgIHN0cmluZ3MuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuaDoKKwogMjAxMS0wNS0wMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDg1NDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQyLDMzICsxNzQyLDE3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaERyYWdFdmVudChjb24KICAgICByZXR1cm4gbWUtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OmNhbkhhbmRsZURyYWdB
bmREcm9wRm9yVGFyZ2V0KERyYWdBbmREcm9wSGFuZGxlVHlwZSB0eXBlLCBOb2RlKiB0YXJnZXQs
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIENsaXBib2FyZCogY2xpcGJvYXJkLCBi
b29sKiBhY2NlcHRlZCkKK3N0YXRpYyBib29sIHRhcmdldElzRnJhbWUoTm9kZSogdGFyZ2V0LCBG
cmFtZSomIGZyYW1lKQogewotICAgIGJvb2wgY2FuSGFuZGxlID0gZmFsc2U7Ci0gICAgYm9vbCB3
YXNBY2NlcHRlZCA9IGZhbHNlOworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAodGFyZ2V0LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCB0YXJnZXQtPmhh
c1RhZ05hbWUoaWZyYW1lVGFnKSkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KHRhcmdldCktPmNvbnRlbnRGcmFtZSgpOwotICAgICAg
ICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAg
Y2FzZSBVcGRhdGVEcmFnQW5kRHJvcDoKLSAgICAgICAgICAgICAgICB3YXNBY2NlcHRlZCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENhbmNlbERyYWdBbmRE
cm9wOgotICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0Fu
ZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFBlcmZvcm1EcmFnQW5kRHJvcDoKLSAgICAgICAgICAgICAgICB3YXNBY2NlcHRl
ZCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+cGVyZm9ybURyYWdBbmREcm9wKGV2ZW50LCBjbGlw
Ym9hcmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbkhhbmRsZSA9IHRydWU7CisgICAgaWYgKCF0YXJnZXQt
Pmhhc1RhZ05hbWUoZnJhbWVUYWcpICYmICF0YXJnZXQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGFjY2VwdGVkKQotICAgICAgICAqYWNj
ZXB0ZWQgPSB3YXNBY2NlcHRlZDsKKyAgICBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVs
ZW1lbnRCYXNlKj4odGFyZ2V0KS0+Y29udGVudEZyYW1lKCk7CiAKLSAgICByZXR1cm4gY2FuSGFu
ZGxlOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJh
Z0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQpCkBAIC0xNzk0LDcgKzE3NzgsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0ZURy
YWdBbmREcm9wKGNvbgogICAgICAgICAvLyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWlu
LWZyYW1lcy5odG1sLgogICAgICAgICAvLwogICAgICAgICAvLyBNb3Jlb3ZlciwgdGhpcyBvcmRl
cmluZyBjb25mb3JtcyB0byBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUgc3BlYy4gPGh0dHA6
Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNkcmFnLWFuZC1kcm9wLXByb2Nl
c3NpbmctbW9kZWw+LgotICAgICAgICBpZiAobmV3VGFyZ2V0ICYmIGNhbkhhbmRsZURyYWdBbmRE
cm9wRm9yVGFyZ2V0KFVwZGF0ZURyYWdBbmREcm9wLCBuZXdUYXJnZXQsIGV2ZW50LCBjbGlwYm9h
cmQsICZhY2NlcHQpKSB7CisgICAgICAgIEZyYW1lKiB0YXJnZXRGcmFtZTsKKyAgICAgICAgaWYg
KHRhcmdldElzRnJhbWUobmV3VGFyZ2V0LCB0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAgICAgIGlm
ICh0YXJnZXRGcmFtZSkKKyAgICAgICAgICAgICAgICBhY2NlcHQgPSB0YXJnZXRGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50LCBjbGlwYm9hcmQpOworICAgICAg
ICB9IGVsc2UgaWYgKG5ld1RhcmdldCkgewogICAgICAgICAgICAgLy8gQXMgcGVyIHNlY3Rpb24g
Ny45LjQgb2YgdGhlIEhUTUwgNSBzcGVjLiwgd2UgbXVzdCBhbHdheXMgZmlyZSBhIGRyYWcgZXZl
bnQgYmVmb3JlIGZpcmluZyBhIGRyYWdlbnRlciwgZHJhZ2xlYXZlLCBvciBkcmFnb3ZlciBldmVu
dC4KICAgICAgICAgICAgIGlmIChkcmFnU3RhdGUoKS5tX2RyYWdTcmMgJiYgZHJhZ1N0YXRlKCku
bV9kcmFnU3JjTWF5QmVESFRNTCkgewogICAgICAgICAgICAgICAgIC8vIGZvciBub3cgd2UgZG9u
J3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMgZGVmYXVsdCBiZWhhdmlvciwgc2luY2Ug
dGhlcmUgaXMgbm9uZQpAQCAtMTgwMywxNiArMTc5MSwyMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
dXBkYXRlRHJhZ0FuZERyb3AoY29uCiAgICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdF
dmVudChldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQsIG5ld1RhcmdldCwgZXZlbnQsIGNsaXBi
b2FyZCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9kcmFnVGFyZ2V0ICYmIGNhbkhhbmRs
ZURyYWdBbmREcm9wRm9yVGFyZ2V0KFVwZGF0ZURyYWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0
KCksIGV2ZW50LCBjbGlwYm9hcmQsICZhY2NlcHQpKQorICAgICAgICBpZiAodGFyZ2V0SXNGcmFt
ZShtX2RyYWdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgeworICAgICAgICAgICAgaWYgKHRh
cmdldEZyYW1lKQorICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+dXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGNsaXBib2FyZCk7CisgICAgICAgIH0g
ZWxzZSBpZiAobV9kcmFnVGFyZ2V0KQogICAgICAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZXZl
bnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlw
Ym9hcmQpOwotICAgICAgICAKKwogICAgICAgICBpZiAobmV3VGFyZ2V0KSB7CiAgICAgICAgICAg
ICAvLyBXZSBkbyBub3QgZXhwbGljaXRseSBjYWxsIGRpc3BhdGNoRHJhZ0V2ZW50IGhlcmUgYmVj
YXVzZSBpdCBjb3VsZCB1bHRpbWF0ZWx5IHJlc3VsdCBpbiB0aGUgYXBwZWFyYW5jZSB0aGF0CiAg
ICAgICAgICAgICAvLyB0d28gZHJhZ292ZXIgZXZlbnRzIGZpcmVkLiBTbywgd2UgbWFyayB0aGF0
IHdlIHNob3VsZCBvbmx5IGZpcmUgYSBkcmFnb3ZlciBldmVudCBvbiB0aGUgbmV4dCBjYWxsIHRv
IHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICAgICBtX3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVu
dCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobmV3VGFyZ2V0
ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KFVwZGF0ZURyYWdBbmREcm9wLCBuZXdU
YXJnZXQsIGV2ZW50LCBjbGlwYm9hcmQsICZhY2NlcHQpKSB7CisgICAgICAgIEZyYW1lKiB0YXJn
ZXRGcmFtZTsKKyAgICAgICAgaWYgKHRhcmdldElzRnJhbWUobmV3VGFyZ2V0LCB0YXJnZXRGcmFt
ZSkpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXRGcmFtZSkKKyAgICAgICAgICAgICAgICBhY2Nl
cHQgPSB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnVwZGF0ZURyYWdBbmREcm9wKGV2ZW50
LCBjbGlwYm9hcmQpOworICAgICAgICB9IGVsc2UgaWYgKG5ld1RhcmdldCkgewogICAgICAgICAg
ICAgLy8gTm90ZSwgd2hlbiBkZWFsaW5nIHdpdGggc3ViLWZyYW1lcywgd2UgbWF5IG5lZWQgdG8g
ZmlyZSBvbmx5IGEgZHJhZ292ZXIgZXZlbnQgYXMgYSBkcmFnIGV2ZW50IG1heSBoYXZlIGJlZW4g
ZmlyZWQgZWFybGllci4KICAgICAgICAgICAgIGlmICghbV9zaG91bGRPbmx5RmlyZURyYWdPdmVy
RXZlbnQgJiYgZHJhZ1N0YXRlKCkubV9kcmFnU3JjICYmIGRyYWdTdGF0ZSgpLm1fZHJhZ1NyY01h
eUJlREhUTUwpIHsKICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlIGRvbid0IGNhcmUgaWYg
ZXZlbnQgaGFuZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVoYXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5v
bmUKQEAgLTE4MjksNyArMTgyNCwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0Fu
ZERyb3AoY29uCiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICBp
ZiAobV9kcmFnVGFyZ2V0ICYmIGNhbkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KENhbmNlbERy
YWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0KCksIGV2ZW50LCBjbGlwYm9hcmQpKSB7CisgICAg
RnJhbWUqIHRhcmdldEZyYW1lOworICAgIGlmICh0YXJnZXRJc0ZyYW1lKG1fZHJhZ1RhcmdldC5n
ZXQoKSwgdGFyZ2V0RnJhbWUpKSB7CisgICAgICAgIGlmICh0YXJnZXRGcmFtZSkKKyAgICAgICAg
ICAgIHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQs
IGNsaXBib2FyZCk7CisgICAgfSBlbHNlIGlmIChtX2RyYWdUYXJnZXQuZ2V0KCkpIHsKICAgICAg
ICAgaWYgKGRyYWdTdGF0ZSgpLm1fZHJhZ1NyYyAmJiBkcmFnU3RhdGUoKS5tX2RyYWdTcmNNYXlC
ZURIVE1MKQogICAgICAgICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRy
YWdFdmVudCwgZXZlbnQpOwogICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCku
ZHJhZ2xlYXZlRXZlbnQsIG1fZHJhZ1RhcmdldC5nZXQoKSwgZXZlbnQsIGNsaXBib2FyZCk7CkBA
IC0xODM3LDEzICsxODM2LDE1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJv
cChjb24KICAgICBjbGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGVy
Zm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIENsaXBib2Fy
ZCogY2xpcGJvYXJkKQordm9pZCBFdmVudEhhbmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAg
ICBib29sIGFjY2VwdCA9IGZhbHNlOwotICAgIGlmIChtX2RyYWdUYXJnZXQgJiYgY2FuSGFuZGxl
RHJhZ0FuZERyb3BGb3JUYXJnZXQoUGVyZm9ybURyYWdBbmREcm9wLCBtX2RyYWdUYXJnZXQuZ2V0
KCksIGV2ZW50LCBjbGlwYm9hcmQsICZhY2NlcHQpKQorICAgIEZyYW1lKiB0YXJnZXRGcmFtZTsK
KyAgICBpZiAodGFyZ2V0SXNGcmFtZShtX2RyYWdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkg
eworICAgICAgICBpZiAodGFyZ2V0RnJhbWUpCisgICAgICAgICAgICB0YXJnZXRGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgY2xpcGJvYXJkKTsKKyAgICB9
IGVsc2UgaWYgKG1fZHJhZ1RhcmdldC5nZXQoKSkKICAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQo
ZXZlbnROYW1lcygpLmRyb3BFdmVudCwgbV9kcmFnVGFyZ2V0LmdldCgpLCBldmVudCwgY2xpcGJv
YXJkKTsKICAgICBjbGVhckRyYWdTdGF0ZSgpOwotICAgIHJldHVybiBhY2NlcHQ7CiB9CiAKIHZv
aWQgRXZlbnRIYW5kbGVyOjpjbGVhckRyYWdTdGF0ZSgpCkBAIC0yNTMyLDI5ICsyNTMzLDYzIEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm8KICAgICByZXR1cm4ga2V5
ZG93blJlc3VsdCB8fCBrZXlwcmVzcy0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IGtleXByZXNzLT5k
ZWZhdWx0SGFuZGxlZCgpOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5Ym9hcmRT
ZWxlY3Rpb25Nb3ZlbWVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3N0YXRpYyBGb2N1c0RpcmVj
dGlvbiBmb2N1c0RpcmVjdGlvbkZvcktleShjb25zdCBBdG9taWNTdHJpbmcmIGtleUlkZW50aWZp
ZXIpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRvd24sICgiRG93
biIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgdXAsICgiVXAiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGxlZnQsICgiTGVmdCIpKTsK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcmlnaHQsICgiUmlnaHQiKSk7
CisKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSBkb3duKQorICAgICAgICByZXR1cm4gRm9jdXNE
aXJlY3Rpb25Eb3duOworICAgIGlmIChrZXlJZGVudGlmaWVyID09IHVwKQorICAgICAgICByZXR1
cm4gRm9jdXNEaXJlY3Rpb25VcDsKKyAgICBpZiAoa2V5SWRlbnRpZmllciA9PSBsZWZ0KQorICAg
ICAgICByZXR1cm4gRm9jdXNEaXJlY3Rpb25MZWZ0OworICAgIGlmIChrZXlJZGVudGlmaWVyID09
IHJpZ2h0KQorICAgICAgICByZXR1cm4gRm9jdXNEaXJlY3Rpb25SaWdodDsKKworICAgIHJldHVy
biBGb2N1c0RpcmVjdGlvbk5vbmU7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZUtleWJvYXJkU2Vs
ZWN0aW9uTW92ZW1lbnQoU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uLCBLZXlib2FyZEV2
ZW50KiBldmVudCkKIHsKICAgICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgY29uc3QgU3RyaW5nJiBrZXkgPSBldmVudC0+a2V5SWRlbnRpZmllcigpOwotICAgIGJvb2wg
aXNTaGlmdGVkID0gZXZlbnQtPmdldE1vZGlmaWVyU3RhdGUoIlNoaWZ0Iik7CisKICAgICBib29s
IGlzT3B0aW9uZWQgPSBldmVudC0+Z2V0TW9kaWZpZXJTdGF0ZSgiQWx0Iik7CiAgICAgYm9vbCBp
c0NvbW1hbmRlZCA9IGV2ZW50LT5nZXRNb2RpZmllclN0YXRlKCJNZXRhIik7Ci0gICAgCi0gICAg
aWYgKGtleSA9PSAiVXAiKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnko
KGlzU2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkJhY2t3YXJkLCAoaXND
b21tYW5kZWQpID8gRG9jdW1lbnRCb3VuZGFyeSA6IExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7Ci0g
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoa2V5ID09
ICJEb3duIikgewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0
ZWQpID8gU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCAoaXNDb21tYW5kZWQp
ID8gRG9jdW1lbnRCb3VuZGFyeSA6IExpbmVHcmFudWxhcml0eSwgdHJ1ZSk7Ci0gICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwotICAgIH0gZWxzZSBpZiAoa2V5ID09ICJMZWZ0Iikg
ewotICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KChpc1NoaWZ0ZWQpID8gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbkV4dGVuZCA6IFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25MZWZ0LCAoaXNDb21tYW5kZWQpID8gTGluZUJvdW5k
YXJ5IDogKGlzT3B0aW9uZWQpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJp
dHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9IGVs
c2UgaWYgKGtleSA9PSAiUmlnaHQiKSB7Ci0gICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5t
b2RpZnkoKGlzU2hpZnRlZCkgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5k
IDogU2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvblJpZ2h0LCAo
aXNDb21tYW5kZWQpID8gTGluZUJvdW5kYXJ5IDogKGlzT3B0aW9uZWQpID8gV29yZEdyYW51bGFy
aXR5IDogQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRydWUpOwotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLSAgICB9ICAgIAorICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBEaXJlY3Rpb25Gb3J3YXJkOworICAgIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9
IENoYXJhY3RlckdyYW51bGFyaXR5OworCisgICAgc3dpdGNoIChmb2N1c0RpcmVjdGlvbkZvcktl
eShldmVudC0+a2V5SWRlbnRpZmllcigpKSkgeworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Ob25l
OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkZvcndhcmQ6CisgICAg
Y2FzZSBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKKyAgICAgICAg
ZGlyZWN0aW9uID0gRGlyZWN0aW9uQmFja3dhcmQ7CisgICAgICAgIGdyYW51bGFyaXR5ID0gaXND
b21tYW5kZWQgPyBEb2N1bWVudEJvdW5kYXJ5IDogTGluZUdyYW51bGFyaXR5OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKKyAgICAgICAgZGlyZWN0aW9uID0g
RGlyZWN0aW9uRm9yd2FyZDsKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSBpc0NvbW1hbmRlZCA/IERv
Y3VtZW50Qm91bmRhcnkgOiBMaW5lR3JhbnVsYXJpdHk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgorICAgICAgICBkaXJlY3Rpb24gPSBEaXJlY3Rpb25MZWZ0
OworICAgICAgICBncmFudWxhcml0eSA9IChpc0NvbW1hbmRlZCkgPyBMaW5lQm91bmRhcnkgOiAo
aXNPcHRpb25lZCkgPyBXb3JkR3JhbnVsYXJpdHkgOiBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBkaXJl
Y3Rpb24gPSBEaXJlY3Rpb25SaWdodDsKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSAoaXNDb21tYW5k
ZWQpID8gTGluZUJvdW5kYXJ5IDogKGlzT3B0aW9uZWQpID8gV29yZEdyYW51bGFyaXR5IDogQ2hh
cmFjdGVyR3JhbnVsYXJpdHk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkVBbHRlcmF0aW9uIGFsdGVybmF0aW9uID0gZXZlbnQtPmdldE1vZGlmaWVy
U3RhdGUoIlNoaWZ0IikgPyBTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9uRXh0ZW5kIDog
U2VsZWN0aW9uQ29udHJvbGxlcjo6QWx0ZXJhdGlvbk1vdmU7CisgICAgc2VsZWN0aW9uLT5tb2Rp
ZnkoYWx0ZXJuYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIHRydWUpOworICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogICAgIAogdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1
bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBldmVudCkKQEAgLTI1NzUsNyAr
MjYxMCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKIAogICAg
ICAgICAvLyBwcm92aWRlcyBLQiBuYXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gZm9yIGVuaGFuY2Vk
IGFjY2Vzc2liaWxpdHkgdXNlcnMKICAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkKCkpCi0gICAgICAgICAgICBoYW5kbGVL
ZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGhhbmRsZUtleWJv
YXJkU2VsZWN0aW9uTW92ZW1lbnQobV9mcmFtZS0+c2VsZWN0aW9uKCksIGV2ZW50KTsKICAgICB9
CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsK
ICAgICAgICAgbV9mcmFtZS0+ZWRpdG9yKCktPmhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQpOwpA
QCAtMjU4NiwyNyArMjYyMSw2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRF
dmVudEgKICAgICB9CiB9CiAKLUZvY3VzRGlyZWN0aW9uIEV2ZW50SGFuZGxlcjo6Zm9jdXNEaXJl
Y3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKSBjb25zdAotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBEb3duLCAoIkRvd24iKSk7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFVwLCAoIlVwIikpOwotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBMZWZ0LCAoIkxlZnQiKSk7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFJpZ2h0LCAoIlJpZ2h0IikpOwotCi0gICAg
Rm9jdXNEaXJlY3Rpb24gcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Ob25lOwotCi0gICAgaWYgKGtl
eUlkZW50aWZpZXIgPT0gRG93bikKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25Eb3du
OwotICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gVXApCi0gICAgICAgIHJldFZhbCA9IEZv
Y3VzRGlyZWN0aW9uVXA7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBMZWZ0KQotICAg
ICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvbkxlZnQ7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRp
ZmllciA9PSBSaWdodCkKLSAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25SaWdodDsKLQot
ICAgIHJldHVybiByZXRWYWw7Ci19Ci0KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogYm9vbCBF
dmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgZmxv
YXREcmFnVmlld3BvcnRMb2NhdGlvbikgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAkocmV2aXNpb24gODU0MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgYm9vbCB1cGRhdGVEcmFnQW5kRHJvcChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKICAgICB2b2lkIGNhbmNlbERyYWdBbmRE
cm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgIGJvb2wgcGVy
Zm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwor
ICAgIHZvaWQgcGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENs
aXBib2FyZCopOwogI2VuZGlmCiAKICAgICB2b2lkIHNjaGVkdWxlSG92ZXJTdGF0ZVVwZGF0ZSgp
OwpAQCAtMjM2LDEyICsyMzYsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKLSAgICBlbnVtIERyYWdBbmREcm9wSGFuZGxlVHlwZSB7Ci0gICAgICAgIFVw
ZGF0ZURyYWdBbmREcm9wLAotICAgICAgICBDYW5jZWxEcmFnQW5kRHJvcCwKLSAgICAgICAgUGVy
Zm9ybURyYWdBbmREcm9wCi0gICAgfTsKLQogICAgIHN0cnVjdCBFdmVudEhhbmRsZXJEcmFnU3Rh
dGUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFdmVudEhhbmRsZXJEcmFnU3RhdGUp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CkBAIC0yNTgsOCArMjUyLDYg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgRXZlbnRIYW5kbGVyRHJhZ1N0YXRlJiBkcmFnU3RhdGUo
KTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIFRleHREcmFnRGVsYXk7CiAKLSAgICBib29sIGNh
bkhhbmRsZURyYWdBbmREcm9wRm9yVGFyZ2V0KERyYWdBbmREcm9wSGFuZGxlVHlwZSwgTm9kZSog
dGFyZ2V0LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqLCBib29sKiBhY2Nl
cHRlZCA9IDApOwotICAgIAogICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCgpIGNvbnN0OwogI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKQEAg
LTI4MSw4ICsyNzMsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBoYW5kbGVNb3VzZVJl
bGVhc2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKLSAgICB2
b2lkIGhhbmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQoS2V5Ym9hcmRFdmVudCopOwotICAg
IAogICAgIEN1cnNvciBzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYsIFNjcm9sbGJhciopOwogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQogICAgIHZvaWQg
dXBkYXRlUGFuU2Nyb2xsU3RhdGUoKTsKQEAgLTM2OCw4ICszNTgsNiBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgc2V0RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogCi0gICAgRm9jdXNEaXJl
Y3Rpb24gZm9jdXNEaXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0K
ICAgICBib29sIGNhcHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVzRHJh
Z2dpbmc7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5lZChfX09CSkNfXykK
</data>
<flag name="review"
          id="84736"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>