<?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>121801</bug_id>
          
          <creation_ts>2013-09-23 14:02:55 -0700</creation_ts>
          <short_desc>Make WebHistory more type safe</short_desc>
          <delta_ts>2013-09-27 05:33:51 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122010</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Patrick R. Gansterer">paroga</reporter>
          <assigned_to name="Patrick R. Gansterer">paroga</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932277</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2013-09-23 14:02:55 -0700</bug_when>
    <thetext>Make WebHistory more type safe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932280</commentid>
    <comment_count>1</comment_count>
      <attachid>212387</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2013-09-23 14:06:15 -0700</bug_when>
    <thetext>Created attachment 212387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932320</commentid>
    <comment_count>2</comment_count>
      <attachid>212387</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-23 15:30:23 -0700</bug_when>
    <thetext>Comment on attachment 212387
Patch

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

I think the general idea of this change is good, but I don&apos;t agree with removing some of these methods, as they may be used by other WebKit clients.

&gt; Source/WebKit/win/WebHistory.cpp:322
&gt; +    DateToEntriesMap::iterator found = m_entriesByDate.find(dateKey(calendarDate));

How about &apos;auto found = ...&apos;?

&gt; Source/WebKit/win/WebHistory.cpp:343
&gt; +        entriesForDate.at(i).copyRefTo(&amp;items[i]);

Why use the &quot;at(i)&quot; syntax here? Is there some benefit over the square-bracket operator?

&gt; Source/WebKit/win/WebHistory.h:-141
&gt; -    HRESULT insertItem(IWebHistoryItem* entry, DateKey);

We don&apos;t want to get rid of the insertItem method.  I think &quot;addItemToDateCaches&quot; should be implemented in terms of insertItem.

&gt; Source/WebKit/win/WebHistory.h:-143
&gt; -    bool findKey(DateKey*, CFAbsoluteTime forDay);

Why don&apos;t we have &apos;bool findKey(DateKey*, DATE)&apos;?  Why don&apos;t we want to keep this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932328</commentid>
    <comment_count>3</comment_count>
      <attachid>212387</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2013-09-23 15:39:28 -0700</bug_when>
    <thetext>Comment on attachment 212387
Patch

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

&gt;&gt; Source/WebKit/win/WebHistory.cpp:322
&gt;&gt; +    DateToEntriesMap::iterator found = m_entriesByDate.find(dateKey(calendarDate));
&gt; 
&gt; How about &apos;auto found = ...&apos;?

i copy&amp;pasted it from other places, but i&apos;m ok with the auto here too

&gt;&gt; Source/WebKit/win/WebHistory.cpp:343
&gt;&gt; +        entriesForDate.at(i).copyRefTo(&amp;items[i]);
&gt; 
&gt; Why use the &quot;at(i)&quot; syntax here? Is there some benefit over the square-bracket operator?

no, i&apos;ll fix it

&gt;&gt; Source/WebKit/win/WebHistory.h:-141
&gt;&gt; -    HRESULT insertItem(IWebHistoryItem* entry, DateKey);
&gt; 
&gt; We don&apos;t want to get rid of the insertItem method.  I think &quot;addItemToDateCaches&quot; should be implemented in terms of insertItem.

it&apos;s private, so there should be nobody able to use it

&gt;&gt; Source/WebKit/win/WebHistory.h:-143
&gt;&gt; -    bool findKey(DateKey*, CFAbsoluteTime forDay);
&gt; 
&gt; Why don&apos;t we have &apos;bool findKey(DateKey*, DATE)&apos;?  Why don&apos;t we want to keep this?

because we use the iterator now everywhere -&gt; not needed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932329</commentid>
    <comment_count>4</comment_count>
      <attachid>212387</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-23 15:40:46 -0700</bug_when>
    <thetext>Comment on attachment 212387
Patch

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

&gt;&gt;&gt; Source/WebKit/win/WebHistory.h:-141
&gt;&gt;&gt; -    HRESULT insertItem(IWebHistoryItem* entry, DateKey);
&gt;&gt; 
&gt;&gt; We don&apos;t want to get rid of the insertItem method.  I think &quot;addItemToDateCaches&quot; should be implemented in terms of insertItem.
&gt; 
&gt; it&apos;s private, so there should be nobody able to use it

Ah -- I missed that.  Okay -- never mind.

&gt;&gt;&gt; Source/WebKit/win/WebHistory.h:-143
&gt;&gt;&gt; -    bool findKey(DateKey*, CFAbsoluteTime forDay);
&gt;&gt; 
&gt;&gt; Why don&apos;t we have &apos;bool findKey(DateKey*, DATE)&apos;?  Why don&apos;t we want to keep this?
&gt; 
&gt; because we use the iterator now everywhere -&gt; not needed

Seems fine then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932332</commentid>
    <comment_count>5</comment_count>
      <attachid>212401</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2013-09-23 15:49:28 -0700</bug_when>
    <thetext>Created attachment 212401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932346</commentid>
    <comment_count>6</comment_count>
      <attachid>212401</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-23 16:24:45 -0700</bug_when>
    <thetext>Comment on attachment 212401
Patch

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

Looks good.  I did notice a couple of minor things that I missed last time.  The only one I really care about is the naming of the last visited time (I think this should stay as &quot;lastVisitedTime&quot;, not be written as &quot;entryTime&quot;.

You can fix this while landing, or you can upload a final patch and I will r+ that.

&gt; Source/WebKit/win/WebHistory.cpp:590
&gt; +    DATE entryTime;

I just noticed that this should be &quot;lastVisitedTime&quot;.

&gt; Source/WebKit/win/WebHistory.cpp:595
&gt;          return E_FAIL;

This isn&apos;t your doing, but I wonder if attempting to remove an entry that is already not in the entry queue should be considered failure.  Seems like a safe &quot;success&quot; case to me.

&gt; Source/WebKit/win/WebHistory.cpp:601
&gt; +        if (entriesForDate.at(i) == entry)

We don&apos;t tend to use the &quot;at()&quot; method, but this is okay.

&gt; Source/WebKit/win/WebHistory.cpp:625
&gt; +        Vector&lt;COMPtr&lt;IWebHistoryItem&gt; &gt; entries(1);

You don&apos;t need the space here &quot;&gt; &gt;&quot; can be &quot;&gt;&gt;&quot; under C++11. :-)

&gt; Source/WebKit/win/WebHistory.cpp:664
&gt; +        if (FAILED(entriesForDate.at(mid)-&gt;lastVisitedTimeInterval(&amp;itemTime)))

... another &quot;at()&quot;.

&gt; Source/WebKit/win/WebHistory.h:120
&gt; +    typedef HashMap&lt;DateKey, Vector&lt;COMPtr&lt;IWebHistoryItem&gt; &gt; &gt; DateToEntriesMap;

You can write this as &quot;...IWebHistoryItem&gt;&gt;&gt;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932350</commentid>
    <comment_count>7</comment_count>
      <attachid>212405</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2013-09-23 16:42:19 -0700</bug_when>
    <thetext>Created attachment 212405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932351</commentid>
    <comment_count>8</comment_count>
      <attachid>212405</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-09-23 16:47:48 -0700</bug_when>
    <thetext>Comment on attachment 212405
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932449</commentid>
    <comment_count>9</comment_count>
      <attachid>212405</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-24 00:32:26 -0700</bug_when>
    <thetext>Comment on attachment 212405
Patch

Clearing flags on attachment: 212405

Committed r156321: &lt;http://trac.webkit.org/changeset/156321&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932450</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-24 00:32:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212387</attachid>
            <date>2013-09-23 14:06:15 -0700</date>
            <delta_ts>2013-09-23 15:49:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121801.patch</filename>
            <type>text/plain</type>
            <size>12524</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwppbmRleCAxYTAzNTQ1Li5lYTQ5MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTMtMDktMjMgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBXZWJIaXN0b3J5IG1vcmUgdHlwZSBzYWZlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE4MDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYSBXVEY6OlZl
Y3RvciBpbnN0ZWFkIG9mIGEgQ0ZNdXRhYmxlQXJyYXkgdG8gYXZvaWQKKyAgICAgICAgY2FzdGlu
ZyBmcm9tIHZvaWQqIGFsbCB0aGUgdGltZSB3aGVuIGFjY2Vzc2luZyB0aGUgZW50cmllcy4KKyAg
ICAgICAgVGhpcyByZWR1Y2VzIHRoZSBkZXBlbmRlbmNpZXMgb24gQ29yZUZvdW5kYXRpb24gdG9v
LgorCisgICAgICAgICogV2ViSGlzdG9yeS5jcHA6CisgICAgICAgIChnZXREYXlCb3VuZGFyaWVz
KToKKyAgICAgICAgKGJlZ2lubmluZ09mRGF5KToKKyAgICAgICAgKGRhdGVLZXkpOgorICAgICAg
ICAoV2ViSGlzdG9yeTo6b3JkZXJlZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheSk6CisgICAgICAgIChX
ZWJIaXN0b3J5OjpyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMpOgorICAgICAgICAoV2ViSGlzdG9y
eTo6YWRkSXRlbVRvRGF0ZUNhY2hlcyk6CisgICAgICAgICogV2ViSGlzdG9yeS5oOgorCiAyMDEz
LTA5LTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVHJ5IHRvIGZp
eCB0aGUgd2luZG93cyBidWlsZCAodGFrZSAyKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKaW5k
ZXggNTU5NTA5MS4uZTQyYWY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlz
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAKQEAgLTc1LDYg
Kzc1LDM1IEBAIHN0YXRpYyBDT01QdHI8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWc+IGNyZWF0ZVVz
ZXJJbmZvRnJvbUhpc3RvcnlJdGVtKEJTVFIgbm90aWZpCiAgICAgcmV0dXJuIGluZm87CiB9CiAK
K3N0YXRpYyB2b2lkIGdldERheUJvdW5kYXJpZXMoQ0ZBYnNvbHV0ZVRpbWUgZGF5LCBDRkFic29s
dXRlVGltZSYgYmVnaW5uaW5nT2ZEYXksIENGQWJzb2x1dGVUaW1lJiBiZWdpbm5pbmdPZk5leHRE
YXkpCit7CisgICAgUmV0YWluUHRyPENGVGltZVpvbmVSZWY+IHRpbWVab25lID0gYWRvcHRDRihD
RlRpbWVab25lQ29weURlZmF1bHQoKSk7CisgICAgQ0ZHcmVnb3JpYW5EYXRlIGRhdGUgPSBDRkFi
c29sdXRlVGltZUdldEdyZWdvcmlhbkRhdGUoZGF5LCB0aW1lWm9uZS5nZXQoKSk7CisgICAgZGF0
ZS5ob3VyID0gMDsKKyAgICBkYXRlLm1pbnV0ZSA9IDA7CisgICAgZGF0ZS5zZWNvbmQgPSAwOwor
ICAgIGJlZ2lubmluZ09mRGF5ID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUs
IHRpbWVab25lLmdldCgpKTsKKyAgICBkYXRlLmRheSArPSAxOworICAgIGJlZ2lubmluZ09mTmV4
dERheSA9IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZShkYXRlLCB0aW1lWm9uZS5nZXQo
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZBYnNvbHV0ZVRpbWUgYmVnaW5uaW5nT2ZEYXkoQ0ZB
YnNvbHV0ZVRpbWUgZGF0ZSkKK3sKKyAgICBzdGF0aWMgQ0ZBYnNvbHV0ZVRpbWUgY2FjaGVkQmVn
aW5uaW5nT2ZEYXkgPSBudW1lcmljX2xpbWl0czxDRkFic29sdXRlVGltZT46OnF1aWV0X05hTigp
OworICAgIHN0YXRpYyBDRkFic29sdXRlVGltZSBjYWNoZWRCZWdpbm5pbmdPZk5leHREYXk7Cisg
ICAgaWYgKCEoZGF0ZSA+PSBjYWNoZWRCZWdpbm5pbmdPZkRheSAmJiBkYXRlIDwgY2FjaGVkQmVn
aW5uaW5nT2ZOZXh0RGF5KSkKKyAgICAgICAgZ2V0RGF5Qm91bmRhcmllcyhkYXRlLCBjYWNoZWRC
ZWdpbm5pbmdPZkRheSwgY2FjaGVkQmVnaW5uaW5nT2ZOZXh0RGF5KTsKKyAgICByZXR1cm4gY2Fj
aGVkQmVnaW5uaW5nT2ZEYXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViSGlzdG9yeTo6RGF0ZUtl
eSBkYXRlS2V5KERBVEUgZGF0ZSkKK3sKKyAgICAvLyBDb252ZXJ0aW5nIGZyb20gZG91YmxlIChD
RkFic29sdXRlVGltZSkgdG8gaW50NjRfdCAoV2ViSGlzdG9yeURhdGVLZXkpIGlzCisgICAgLy8g
c2FmZSBoZXJlIGJlY2F1c2UgYWxsIHNlbnNpYmxlIGRhdGVzIGFyZSBpbiB0aGUgcmFuZ2UgLTIq
KjQ4IC4uIDIqKjQ3IHdoaWNoCisgICAgLy8gc2FmZWx5IGZpdHMgaW4gYW4gaW50NjRfdC4KKyAg
ICByZXR1cm4gYmVnaW5uaW5nT2ZEYXkoTWFyc2hhbGxpbmdIZWxwZXJzOjpEQVRFVG9DRkFic29s
dXRlVGltZShkYXRlKSk7Cit9CisKIC8vIFdlYkhpc3RvcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2ViSGlzdG9y
eTo6V2ViSGlzdG9yeSgpCkBAIC0yOTAsMTkgKzMxOSwxNCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkhpc3Rvcnk6Om9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25EYXkoCiAgICAgLyog
W2luXSAqLyBJV2ViSGlzdG9yeUl0ZW0qKiBpdGVtcywKICAgICAvKiBbaW5dICovIERBVEUgY2Fs
ZW5kYXJEYXRlKQogewotICAgIERhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAoIWZpbmRLZXkoJmRh
dGVLZXksIE1hcnNoYWxsaW5nSGVscGVyczo6REFURVRvQ0ZBYnNvbHV0ZVRpbWUoY2FsZW5kYXJE
YXRlKSkpIHsKLSAgICAgICAgKmNvdW50ID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgQ0ZBcnJheVJlZiBlbnRyaWVzID0gbV9lbnRyaWVzQnlEYXRlLmdldChkYXRlS2V5KS5n
ZXQoKTsKLSAgICBpZiAoIWVudHJpZXMpIHsKKyAgICBEYXRlVG9FbnRyaWVzTWFwOjppdGVyYXRv
ciBmb3VuZCA9IG1fZW50cmllc0J5RGF0ZS5maW5kKGRhdGVLZXkoY2FsZW5kYXJEYXRlKSk7Cisg
ICAgaWYgKGZvdW5kID09IG1fZW50cmllc0J5RGF0ZS5lbmQoKSkgewogICAgICAgICAqY291bnQg
PSAwOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpbnQgbmV3Q291bnQgPSBDRkFy
cmF5R2V0Q291bnQoZW50cmllcyk7CisgICAgYXV0byYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+
dmFsdWU7CisgICAgaW50IG5ld0NvdW50ID0gZW50cmllc0ZvckRhdGUuc2l6ZSgpOwogCiAgICAg
aWYgKCFpdGVtcykgewogICAgICAgICAqY291bnQgPSBuZXdDb3VudDsKQEAgLTMxNSwxMSArMzM5
LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpvcmRlcmVkSXRlbXNM
YXN0VmlzaXRlZE9uRGF5KAogICAgIH0KIAogICAgICpjb3VudCA9IG5ld0NvdW50OwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbmV3Q291bnQ7IGkrKykgewotICAgICAgICBJV2ViSGlzdG9yeUl0
ZW0qIGl0ZW0gPSAoSVdlYkhpc3RvcnlJdGVtKilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGVudHJp
ZXMsIGkpOwotICAgICAgICBpdGVtLT5BZGRSZWYoKTsKLSAgICAgICAgaXRlbXNbaV0gPSBpdGVt
OwotICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0NvdW50OyArK2kpCisgICAgICAg
IGVudHJpZXNGb3JEYXRlLmF0KGkpLmNvcHlSZWZUbygmaXRlbXNbaV0pOwogCiAgICAgcmV0dXJu
IFNfT0s7CiB9CkBAIC01NjQsMTM4ICs1ODUsNzQgQEAgQ09NUHRyPElXZWJIaXN0b3J5SXRlbT4g
V2ViSGlzdG9yeTo6aXRlbUZvclVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY28K
ICAgICByZXR1cm4gbV9lbnRyaWVzQnlVUkwuZ2V0KHVybFN0cmluZyk7CiB9CiAKLUhSRVNVTFQg
V2ViSGlzdG9yeTo6YWRkSXRlbVRvRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQot
ewotICAgIEhSRVNVTFQgaHIgPSBTX09LOwotCi0gICAgREFURSBsYXN0VmlzaXRlZENPTVRpbWU7
Ci0gICAgZW50cnktPmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZsYXN0VmlzaXRlZENPTVRpbWUp
OwotICAgIAotICAgIERhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAoZmluZEtleSgmZGF0ZUtleSwg
TWFyc2hhbGxpbmdIZWxwZXJzOjpEQVRFVG9DRkFic29sdXRlVGltZShsYXN0VmlzaXRlZENPTVRp
bWUpKSkgewotICAgICAgICAvLyBvdGhlciBlbnRyaWVzIGFscmVhZHkgZXhpc3QgZm9yIHRoaXMg
ZGF0ZQotICAgICAgICBociA9IGluc2VydEl0ZW0oZW50cnksIGRhdGVLZXkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVCghbV9lbnRyaWVzQnlEYXRlLmNvbnRhaW5zKGRhdGVLZXkpKTsK
LSAgICAgICAgLy8gbm8gb3RoZXIgZW50cmllcyBleGlzdCBmb3IgdGhpcyBkYXRlCi0gICAgICAg
IFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gZW50cnlBcnJheSA9IGFkb3B0Q0YoCi0gICAg
ICAgICAgICBDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAmTWFyc2hhbGxpbmdIZWxwZXJzOjpr
SVVua25vd25BcnJheUNhbGxCYWNrcykpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50
cnlBcnJheS5nZXQoKSwgZW50cnkpOwotICAgICAgICBtX2VudHJpZXNCeURhdGUuc2V0KGRhdGVL
ZXksIGVudHJ5QXJyYXkpOwotICAgICAgICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERh
eXMgc28gaXQgd2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgotICAgICAg
ICBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgPSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVy
biBocjsKLX0KLQogSFJFU1VMVCBXZWJIaXN0b3J5OjpyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMo
SVdlYkhpc3RvcnlJdGVtKiBlbnRyeSkKIHsKLSAgICBIUkVTVUxUIGhyID0gU19PSzsKLQotICAg
IERBVEUgbGFzdFZpc2l0ZWRDT01UaW1lOwotICAgIGVudHJ5LT5sYXN0VmlzaXRlZFRpbWVJbnRl
cnZhbCgmbGFzdFZpc2l0ZWRDT01UaW1lKTsKKyAgICBEQVRFIGVudHJ5VGltZTsKKyAgICBlbnRy
eS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmVudHJ5VGltZSk7CiAKLSAgICBEYXRlS2V5IGRh
dGVLZXk7Ci0gICAgaWYgKCFmaW5kS2V5KCZkYXRlS2V5LCBNYXJzaGFsbGluZ0hlbHBlcnM6OkRB
VEVUb0NGQWJzb2x1dGVUaW1lKGxhc3RWaXNpdGVkQ09NVGltZSkpKQorICAgIERhdGVUb0VudHJp
ZXNNYXA6Oml0ZXJhdG9yIGZvdW5kID0gbV9lbnRyaWVzQnlEYXRlLmZpbmQoZGF0ZUtleShlbnRy
eVRpbWUpKTsKKyAgICBpZiAoZm91bmQgPT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKQogICAgICAg
ICByZXR1cm4gRV9GQUlMOwogCi0gICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0b3IgZm91bmQg
PSBtX2VudHJpZXNCeURhdGUuZmluZChkYXRlS2V5KTsKLSAgICBBU1NFUlQoZm91bmQgIT0gbV9l
bnRyaWVzQnlEYXRlLmVuZCgpKTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBlbnRyaWVzRm9yRGF0
ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKKyAgICBhdXRvJiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5k
LT52YWx1ZTsKKyAgICBzaXplX3QgY291bnQgPSBlbnRyaWVzRm9yRGF0ZS5zaXplKCk7CiAKLSAg
ICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRlKTsKLSAgICBm
b3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAoKElXZWJI
aXN0b3J5SXRlbSopQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgaSkgPT0g
ZW50cnkpCi0gICAgICAgICAgICBDRkFycmF5UmVtb3ZlVmFsdWVBdEluZGV4KGVudHJpZXNGb3JE
YXRlLCBpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBpZiAoZW50cmllc0ZvckRhdGUuYXQoaSkgPT0gZW50cnkpCisgICAgICAgICAgICBl
bnRyaWVzRm9yRGF0ZS5yZW1vdmUoaSk7CiAgICAgfQogCiAgICAgLy8gcmVtb3ZlIHRoaXMgZGF0
ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdAotICAgIGlmIChD
RkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpID09IDApIHsKKyAgICBpZiAoZW50cmllc0Zv
ckRhdGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZW50cmllc0J5RGF0ZS5yZW1vdmUoZm91bmQp
OwogICAgICAgICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQgd2lsbCBi
ZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgogICAgICAgICBtX29yZGVyZWRMYXN0
VmlzaXRlZERheXMgPSBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBocjsKLX0KLQotc3Rh
dGljIHZvaWQgZ2V0RGF5Qm91bmRhcmllcyhDRkFic29sdXRlVGltZSBkYXksIENGQWJzb2x1dGVU
aW1lJiBiZWdpbm5pbmdPZkRheSwgQ0ZBYnNvbHV0ZVRpbWUmIGJlZ2lubmluZ09mTmV4dERheSkK
LXsKLSAgICBSZXRhaW5QdHI8Q0ZUaW1lWm9uZVJlZj4gdGltZVpvbmUgPSBhZG9wdENGKENGVGlt
ZVpvbmVDb3B5RGVmYXVsdCgpKTsKLSAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZSA9IENGQWJzb2x1
dGVUaW1lR2V0R3JlZ29yaWFuRGF0ZShkYXksIHRpbWVab25lLmdldCgpKTsKLSAgICBkYXRlLmhv
dXIgPSAwOwotICAgIGRhdGUubWludXRlID0gMDsKLSAgICBkYXRlLnNlY29uZCA9IDA7Ci0gICAg
YmVnaW5uaW5nT2ZEYXkgPSBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0ZVRpbWUoZGF0ZSwgdGlt
ZVpvbmUuZ2V0KCkpOwotICAgIGRhdGUuZGF5ICs9IDE7Ci0gICAgYmVnaW5uaW5nT2ZOZXh0RGF5
ID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRpbWVab25lLmdldCgpKTsK
LX0KLQotc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBiZWdpbm5pbmdPZkRheShDRkFic29s
dXRlVGltZSBkYXRlKQotewotICAgIHN0YXRpYyBDRkFic29sdXRlVGltZSBjYWNoZWRCZWdpbm5p
bmdPZkRheSA9IG51bWVyaWNfbGltaXRzPENGQWJzb2x1dGVUaW1lPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgc3RhdGljIENGQWJzb2x1dGVUaW1lIGNhY2hlZEJlZ2lubmluZ09mTmV4dERheTsKLSAgICBp
ZiAoIShkYXRlID49IGNhY2hlZEJlZ2lubmluZ09mRGF5ICYmIGRhdGUgPCBjYWNoZWRCZWdpbm5p
bmdPZk5leHREYXkpKQotICAgICAgICBnZXREYXlCb3VuZGFyaWVzKGRhdGUsIGNhY2hlZEJlZ2lu
bmluZ09mRGF5LCBjYWNoZWRCZWdpbm5pbmdPZk5leHREYXkpOwotICAgIHJldHVybiBjYWNoZWRC
ZWdpbm5pbmdPZkRheTsKLX0KLQotc3RhdGljIGlubGluZSBXZWJIaXN0b3J5OjpEYXRlS2V5IGRh
dGVLZXkoQ0ZBYnNvbHV0ZVRpbWUgZGF0ZSkKLXsKLSAgICAvLyBDb252ZXJ0aW5nIGZyb20gZG91
YmxlIChDRkFic29sdXRlVGltZSkgdG8gaW50NjRfdCAoV2ViSGlzdG9yeURhdGVLZXkpIGlzCi0g
ICAgLy8gc2FmZSBoZXJlIGJlY2F1c2UgYWxsIHNlbnNpYmxlIGRhdGVzIGFyZSBpbiB0aGUgcmFu
Z2UgLTIqKjQ4IC4uIDIqKjQ3IHdoaWNoCi0gICAgLy8gc2FmZWx5IGZpdHMgaW4gYW4gaW50NjRf
dC4KLSAgICByZXR1cm4gYmVnaW5uaW5nT2ZEYXkoZGF0ZSk7Ci19Ci0KLS8vIFJldHVybnMgd2hl
dGhlciB0aGUgZGF5IGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2YgZGF5cywKLS8vIGFuZCBmaWxs
cyBpbiAqa2V5IHdpdGggdGhlIGZvdW5kIG9yIHByb3Bvc2VkIGtleS4KLWJvb2wgV2ViSGlzdG9y
eTo6ZmluZEtleShEYXRlS2V5KiBrZXksIENGQWJzb2x1dGVUaW1lIGZvckRheSkKLXsKLSAgICBB
U1NFUlRfQVJHKGtleSwga2V5KTsKLQotICAgICprZXkgPSBkYXRlS2V5KGZvckRheSk7Ci0gICAg
cmV0dXJuIG1fZW50cmllc0J5RGF0ZS5jb250YWlucygqa2V5KTsKKyAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50
cnksIERhdGVLZXkgZGF0ZUtleSkKK0hSRVNVTFQgV2ViSGlzdG9yeTo6YWRkSXRlbVRvRGF0ZUNh
Y2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQogewogICAgIEFTU0VSVF9BUkcoZW50cnksIGVu
dHJ5KTsKLSAgICBBU1NFUlRfQVJHKGRhdGVLZXksIG1fZW50cmllc0J5RGF0ZS5jb250YWlucyhk
YXRlS2V5KSk7Ci0KLSAgICBIUkVTVUxUIGhyID0gU19PSzsKLQotICAgIGlmICghZW50cnkpCi0g
ICAgICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICBEQVRFIGVudHJ5VGltZTsKICAgICBlbnRyeS0+
bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmVudHJ5VGltZSk7Ci0gICAgQ0ZNdXRhYmxlQXJyYXlS
ZWYgZW50cmllc0ZvckRhdGUgPSBtX2VudHJpZXNCeURhdGUuZ2V0KGRhdGVLZXkpLmdldCgpOwot
ICAgIHVuc2lnbmVkIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRlKTsKKwor
ICAgIERhdGVLZXkga2V5ID0gZGF0ZUtleShlbnRyeVRpbWUpOworICAgIERhdGVUb0VudHJpZXNN
YXA6Oml0ZXJhdG9yIGZvdW5kID0gbV9lbnRyaWVzQnlEYXRlLmZpbmQoa2V5KTsKKyAgICBpZiAo
Zm91bmQgPT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxDT01QdHI8
SVdlYkhpc3RvcnlJdGVtPiA+IGVudHJpZXMoMSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5kKGVu
dHJ5KTsKKyAgICAgICAgbV9lbnRyaWVzQnlEYXRlLnNldChrZXksIGVudHJpZXMpOworICAgICAg
ICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQgd2lsbCBiZSByZWdlbmVy
YXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgorICAgICAgICBtX29yZGVyZWRMYXN0VmlzaXRlZERh
eXMgPSBudWxscHRyOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBhdXRvJiBl
bnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZTsKKyAgICBzaXplX3QgY291bnQgPSBlbnRyaWVz
Rm9yRGF0ZS5zaXplKCk7CiAKICAgICAvLyBUaGUgZW50cmllcyBmb3IgZWFjaCBkYXkgYXJlIHN0
b3JlZCBpbiBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmaXJzdAog
ICAgIC8vIENoZWNrIGZvciB0aGUgY29tbW9uIGNhc2VzIG9mIHRoZSBlbnRyeSBiZWluZyBuZXdl
ciB0aGFuIGFsbCBleGlzdGluZyBlbnRyaWVzIG9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgZGF5
CiAgICAgYm9vbCBpc05ld2VyVGhhbkFsbEVudHJpZXMgPSBmYWxzZTsKICAgICBpZiAoY291bnQp
IHsKLSAgICAgICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVtID0gY29uc3RfY2FzdDxJV2ViSGlzdG9y
eUl0ZW0qPihzdGF0aWNfY2FzdDxjb25zdCBJV2ViSGlzdG9yeUl0ZW0qPihDRkFycmF5R2V0VmFs
dWVBdEluZGV4KGVudHJpZXNGb3JEYXRlLCAwKSkpOwogICAgICAgICBEQVRFIGl0ZW1UaW1lOwot
ICAgICAgICBpc05ld2VyVGhhbkFsbEVudHJpZXMgPSBTVUNDRUVERUQoaXRlbS0+bGFzdFZpc2l0
ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYgaXRlbVRpbWUgPCBlbnRyeVRpbWU7CisgICAg
ICAgIGlzTmV3ZXJUaGFuQWxsRW50cmllcyA9IFNVQ0NFRURFRChlbnRyaWVzRm9yRGF0ZS5maXJz
dCgpLT5sYXN0VmlzaXRlZFRpbWVJbnRlcnZhbCgmaXRlbVRpbWUpKSAmJiBpdGVtVGltZSA8IGVu
dHJ5VGltZTsKICAgICB9CiAgICAgaWYgKCFjb3VudCB8fCBpc05ld2VyVGhhbkFsbEVudHJpZXMp
IHsKLSAgICAgICAgQ0ZBcnJheUluc2VydFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgMCwg
ZW50cnkpOworICAgICAgICBlbnRyaWVzRm9yRGF0ZS5pbnNlcnQoMCwgZW50cnkpOwogICAgICAg
ICByZXR1cm4gU19PSzsKICAgICB9CiAKICAgICAvLyAuLiBvciBvbGRlciB0aGFuIGFsbCBleGlz
dGluZyBlbnRyaWVzCiAgICAgYm9vbCBpc09sZGVyVGhhbkFsbEVudHJpZXMgPSBmYWxzZTsKICAg
ICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgIElXZWJIaXN0b3J5SXRlbSogaXRlbSA9IGNvbnN0
X2Nhc3Q8SVdlYkhpc3RvcnlJdGVtKj4oc3RhdGljX2Nhc3Q8Y29uc3QgSVdlYkhpc3RvcnlJdGVt
Kj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgY291bnQgLSAxKSkpOwog
ICAgICAgICBEQVRFIGl0ZW1UaW1lOwotICAgICAgICBpc09sZGVyVGhhbkFsbEVudHJpZXMgPSBT
VUNDRUVERUQoaXRlbS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYgaXRl
bVRpbWUgPj0gZW50cnlUaW1lOworICAgICAgICBpc09sZGVyVGhhbkFsbEVudHJpZXMgPSBTVUND
RUVERUQoZW50cmllc0ZvckRhdGUubGFzdCgpLT5sYXN0VmlzaXRlZFRpbWVJbnRlcnZhbCgmaXRl
bVRpbWUpKSAmJiBpdGVtVGltZSA+PSBlbnRyeVRpbWU7CiAgICAgfQogICAgIGlmIChpc09sZGVy
VGhhbkFsbEVudHJpZXMpIHsKLSAgICAgICAgQ0ZBcnJheUluc2VydFZhbHVlQXRJbmRleChlbnRy
aWVzRm9yRGF0ZSwgY291bnQsIGVudHJ5KTsKKyAgICAgICAgZW50cmllc0ZvckRhdGUuYXBwZW5k
KGVudHJ5KTsKICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgfQogCkBAIC03MDMsOSArNjYwLDgg
QEAgSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50cnks
IERhdGVLZXkgZGF0ZUtleSkKICAgICB1bnNpZ25lZCBoaWdoID0gY291bnQ7CiAgICAgd2hpbGUg
KGxvdyA8IGhpZ2gpIHsKICAgICAgICAgdW5zaWduZWQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cp
IC8gMjsKLSAgICAgICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVtID0gY29uc3RfY2FzdDxJV2ViSGlz
dG9yeUl0ZW0qPihzdGF0aWNfY2FzdDxjb25zdCBJV2ViSGlzdG9yeUl0ZW0qPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGVudHJpZXNGb3JEYXRlLCBtaWQpKSk7CiAgICAgICAgIERBVEUgaXRlbVRp
bWU7Ci0gICAgICAgIGlmIChGQUlMRUQoaXRlbS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0
ZW1UaW1lKSkpCisgICAgICAgIGlmIChGQUlMRUQoZW50cmllc0ZvckRhdGUuYXQobWlkKS0+bGFz
dFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkpCiAgICAgICAgICAgICByZXR1cm4gRV9G
QUlMOwogCiAgICAgICAgIGlmIChpdGVtVGltZSA+PSBlbnRyeVRpbWUpCkBAIC03MTUsNyArNjcx
LDcgQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50
cnksIERhdGVLZXkgZGF0ZUtleSkKICAgICB9CiAKICAgICAvLyBsb3cgaXMgbm93IHRoZSBpbmRl
eCBvZiB0aGUgZmlyc3QgZW50cnkgdGhhdCBpcyBvbGRlciB0aGFuIGVudHJ5RGF0ZQotICAgIENG
QXJyYXlJbnNlcnRWYWx1ZUF0SW5kZXgoZW50cmllc0ZvckRhdGUsIGxvdywgZW50cnkpOworICAg
IGVudHJpZXNGb3JEYXRlLmluc2VydChsb3csIGVudHJ5KTsKICAgICByZXR1cm4gU19PSzsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5oIGIvU291cmNlL1dl
YktpdC93aW4vV2ViSGlzdG9yeS5oCmluZGV4IGFmNmQ2YmEuLmNkZmEwMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJIaXN0b3J5LmgKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgQ09NUHRyPElXZWJI
aXN0b3J5SXRlbT4gaXRlbUZvclVSTFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYpIGNvbnN0Owog
CiAgICAgdHlwZWRlZiBpbnQ2NF90IERhdGVLZXk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPERhdGVL
ZXksIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gPiBEYXRlVG9FbnRyaWVzTWFwOworICAg
IHR5cGVkZWYgSGFzaE1hcDxEYXRlS2V5LCBWZWN0b3I8Q09NUHRyPElXZWJIaXN0b3J5SXRlbT4g
PiA+IERhdGVUb0VudHJpZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdURjo6U3RyaW5nLCBD
T01QdHI8SVdlYkhpc3RvcnlJdGVtPiA+IFVSTFRvRW50cmllc01hcDsKIAogcHJpdmF0ZToKQEAg
LTEzOCw5ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIEhSRVNVTFQgcmVtb3ZlSXRlbUZvclVSTFN0
cmluZyhjb25zdCBXVEY6OlN0cmluZyYgdXJsU3RyaW5nKTsKICAgICBIUkVTVUxUIGFkZEl0ZW1U
b0RhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7CiAgICAgSFJFU1VMVCByZW1vdmVJ
dGVtRnJvbURhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7Ci0gICAgSFJFU1VMVCBp
bnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50cnksIERhdGVLZXkpOwogICAgIEhSRVNVTFQg
YWdlTGltaXREYXRlKENGQWJzb2x1dGVUaW1lKiB0aW1lKTsKLSAgICBib29sIGZpbmRLZXkoRGF0
ZUtleSosIENGQWJzb2x1dGVUaW1lIGZvckRheSk7CiAgICAgc3RhdGljIENGQWJzb2x1dGVUaW1l
IHRpbWVUb0RhdGUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSk7CiAgICAgQlNUUiBnZXROb3RpZmljYXRp
b25TdHJpbmcoTm90aWZpY2F0aW9uVHlwZSBub3RpZnlUeXBlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212401</attachid>
            <date>2013-09-23 15:49:28 -0700</date>
            <delta_ts>2013-09-23 16:42:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121801-20130924004926.patch</filename>
            <type>text/plain</type>
            <size>12764</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTgwNTVhYThl
YWY0NzcxYzRhZDgyNjYyNjJjM2Q1Y2IzZTcwMmMyNi4uNzU4ODgwYzZiYmYwNTM3NmQ2NDI1MGQ2
YTQwYmUxOGJkNTRiMDZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDEz
LTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCisgICAgICAg
IE1ha2UgV2ViSGlzdG9yeSBtb3JlIHR5cGUgc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGEgV1RGOjpWZWN0b3IgaW5zdGVhZCBvZiBhIENG
TXV0YWJsZUFycmF5IHRvIGF2b2lkCisgICAgICAgIGNhc3RpbmcgZnJvbSB2b2lkKiBhbGwgdGhl
IHRpbWUgd2hlbiBhY2Nlc3NpbmcgdGhlIGVudHJpZXMuCisgICAgICAgIFRoaXMgcmVkdWNlcyB0
aGUgZGVwZW5kZW5jaWVzIG9uIENvcmVGb3VuZGF0aW9uIHRvby4KKworICAgICAgICAqIFdlYkhp
c3RvcnkuY3BwOgorICAgICAgICAoZ2V0RGF5Qm91bmRhcmllcyk6CisgICAgICAgIChiZWdpbm5p
bmdPZkRheSk6CisgICAgICAgIChkYXRlS2V5KToKKyAgICAgICAgKFdlYkhpc3Rvcnk6Om9yZGVy
ZWRJdGVtc0xhc3RWaXNpdGVkT25EYXkpOgorICAgICAgICAoV2ViSGlzdG9yeTo6cmVtb3ZlSXRl
bUZyb21EYXRlQ2FjaGVzKToKKyAgICAgICAgKFdlYkhpc3Rvcnk6OmFkZEl0ZW1Ub0RhdGVDYWNo
ZXMpOgorICAgICAgICAqIFdlYkhpc3RvcnkuaDoKKworMjAxMy0wOS0yMyAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KKwogICAgICAgICBbV0lOXSBJbXBsZW1lbnQgV2Vi
TXV0YWJsZVVSTFJlcXVlc3Q6OnNldEhUVFBCb2R5KCkKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTIwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkhpc3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5jcHAK
aW5kZXggNTU5NTA5MTRkN2M1ZmU1ZDY5ZGM5M2IyOTUxMWVjOGJiNGVmMDMwMC4uZTAyMmFhYzg1
NDlkNTE2YmNlNzdmOTY3YmJhN2FmOTg1ZDkxYzUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vV2ViSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5j
cHAKQEAgLTc1LDYgKzc1LDM1IEBAIHN0YXRpYyBDT01QdHI8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlC
YWc+IGNyZWF0ZVVzZXJJbmZvRnJvbUhpc3RvcnlJdGVtKEJTVFIgbm90aWZpCiAgICAgcmV0dXJu
IGluZm87CiB9CiAKK3N0YXRpYyB2b2lkIGdldERheUJvdW5kYXJpZXMoQ0ZBYnNvbHV0ZVRpbWUg
ZGF5LCBDRkFic29sdXRlVGltZSYgYmVnaW5uaW5nT2ZEYXksIENGQWJzb2x1dGVUaW1lJiBiZWdp
bm5pbmdPZk5leHREYXkpCit7CisgICAgUmV0YWluUHRyPENGVGltZVpvbmVSZWY+IHRpbWVab25l
ID0gYWRvcHRDRihDRlRpbWVab25lQ29weURlZmF1bHQoKSk7CisgICAgQ0ZHcmVnb3JpYW5EYXRl
IGRhdGUgPSBDRkFic29sdXRlVGltZUdldEdyZWdvcmlhbkRhdGUoZGF5LCB0aW1lWm9uZS5nZXQo
KSk7CisgICAgZGF0ZS5ob3VyID0gMDsKKyAgICBkYXRlLm1pbnV0ZSA9IDA7CisgICAgZGF0ZS5z
ZWNvbmQgPSAwOworICAgIGJlZ2lubmluZ09mRGF5ID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1
dGVUaW1lKGRhdGUsIHRpbWVab25lLmdldCgpKTsKKyAgICBkYXRlLmRheSArPSAxOworICAgIGJl
Z2lubmluZ09mTmV4dERheSA9IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGltZShkYXRlLCB0
aW1lWm9uZS5nZXQoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZBYnNvbHV0ZVRpbWUgYmVnaW5u
aW5nT2ZEYXkoQ0ZBYnNvbHV0ZVRpbWUgZGF0ZSkKK3sKKyAgICBzdGF0aWMgQ0ZBYnNvbHV0ZVRp
bWUgY2FjaGVkQmVnaW5uaW5nT2ZEYXkgPSBudW1lcmljX2xpbWl0czxDRkFic29sdXRlVGltZT46
OnF1aWV0X05hTigpOworICAgIHN0YXRpYyBDRkFic29sdXRlVGltZSBjYWNoZWRCZWdpbm5pbmdP
Zk5leHREYXk7CisgICAgaWYgKCEoZGF0ZSA+PSBjYWNoZWRCZWdpbm5pbmdPZkRheSAmJiBkYXRl
IDwgY2FjaGVkQmVnaW5uaW5nT2ZOZXh0RGF5KSkKKyAgICAgICAgZ2V0RGF5Qm91bmRhcmllcyhk
YXRlLCBjYWNoZWRCZWdpbm5pbmdPZkRheSwgY2FjaGVkQmVnaW5uaW5nT2ZOZXh0RGF5KTsKKyAg
ICByZXR1cm4gY2FjaGVkQmVnaW5uaW5nT2ZEYXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViSGlz
dG9yeTo6RGF0ZUtleSBkYXRlS2V5KERBVEUgZGF0ZSkKK3sKKyAgICAvLyBDb252ZXJ0aW5nIGZy
b20gZG91YmxlIChDRkFic29sdXRlVGltZSkgdG8gaW50NjRfdCAoV2ViSGlzdG9yeURhdGVLZXkp
IGlzCisgICAgLy8gc2FmZSBoZXJlIGJlY2F1c2UgYWxsIHNlbnNpYmxlIGRhdGVzIGFyZSBpbiB0
aGUgcmFuZ2UgLTIqKjQ4IC4uIDIqKjQ3IHdoaWNoCisgICAgLy8gc2FmZWx5IGZpdHMgaW4gYW4g
aW50NjRfdC4KKyAgICByZXR1cm4gYmVnaW5uaW5nT2ZEYXkoTWFyc2hhbGxpbmdIZWxwZXJzOjpE
QVRFVG9DRkFic29sdXRlVGltZShkYXRlKSk7Cit9CisKIC8vIFdlYkhpc3RvcnkgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogV2ViSGlzdG9yeTo6V2ViSGlzdG9yeSgpCkBAIC0yOTAsMTkgKzMxOSwxNCBAQCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6Om9yZGVyZWRJdGVtc0xhc3RWaXNpdGVkT25E
YXkoCiAgICAgLyogW2luXSAqLyBJV2ViSGlzdG9yeUl0ZW0qKiBpdGVtcywKICAgICAvKiBbaW5d
ICovIERBVEUgY2FsZW5kYXJEYXRlKQogewotICAgIERhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAo
IWZpbmRLZXkoJmRhdGVLZXksIE1hcnNoYWxsaW5nSGVscGVyczo6REFURVRvQ0ZBYnNvbHV0ZVRp
bWUoY2FsZW5kYXJEYXRlKSkpIHsKLSAgICAgICAgKmNvdW50ID0gMDsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgQ0ZBcnJheVJlZiBlbnRyaWVzID0gbV9lbnRyaWVzQnlEYXRlLmdl
dChkYXRlS2V5KS5nZXQoKTsKLSAgICBpZiAoIWVudHJpZXMpIHsKKyAgICBhdXRvIGZvdW5kID0g
bV9lbnRyaWVzQnlEYXRlLmZpbmQoZGF0ZUtleShjYWxlbmRhckRhdGUpKTsKKyAgICBpZiAoZm91
bmQgPT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKSB7CiAgICAgICAgICpjb3VudCA9IDA7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGludCBuZXdDb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChlbnRyaWVzKTsKKyAgICBhdXRvJiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZTsKKyAg
ICBpbnQgbmV3Q291bnQgPSBlbnRyaWVzRm9yRGF0ZS5zaXplKCk7CiAKICAgICBpZiAoIWl0ZW1z
KSB7CiAgICAgICAgICpjb3VudCA9IG5ld0NvdW50OwpAQCAtMzE1LDExICszMzksOCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkhpc3Rvcnk6Om9yZGVyZWRJdGVtc0xhc3RWaXNpdGVk
T25EYXkoCiAgICAgfQogCiAgICAgKmNvdW50ID0gbmV3Q291bnQ7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuZXdDb3VudDsgaSsrKSB7Ci0gICAgICAgIElXZWJIaXN0b3J5SXRlbSogaXRlbSA9
IChJV2ViSGlzdG9yeUl0ZW0qKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZW50cmllcywgaSk7Ci0g
ICAgICAgIGl0ZW0tPkFkZFJlZigpOwotICAgICAgICBpdGVtc1tpXSA9IGl0ZW07Ci0gICAgfQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3Q291bnQ7ICsraSkKKyAgICAgICAgZW50cmllc0Zv
ckRhdGUuYXQoaSkuY29weVJlZlRvKCZpdGVtc1tpXSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0K
QEAgLTU2NCwxMzggKzU4NSw3NCBAQCBDT01QdHI8SVdlYkhpc3RvcnlJdGVtPiBXZWJIaXN0b3J5
OjppdGVtRm9yVVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjbwogICAgIHJldHVy
biBtX2VudHJpZXNCeVVSTC5nZXQodXJsU3RyaW5nKTsKIH0KIAotSFJFU1VMVCBXZWJIaXN0b3J5
OjphZGRJdGVtVG9EYXRlQ2FjaGVzKElXZWJIaXN0b3J5SXRlbSogZW50cnkpCi17Ci0gICAgSFJF
U1VMVCBociA9IFNfT0s7Ci0KLSAgICBEQVRFIGxhc3RWaXNpdGVkQ09NVGltZTsKLSAgICBlbnRy
eS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmxhc3RWaXNpdGVkQ09NVGltZSk7Ci0gICAgCi0g
ICAgRGF0ZUtleSBkYXRlS2V5OwotICAgIGlmIChmaW5kS2V5KCZkYXRlS2V5LCBNYXJzaGFsbGlu
Z0hlbHBlcnM6OkRBVEVUb0NGQWJzb2x1dGVUaW1lKGxhc3RWaXNpdGVkQ09NVGltZSkpKSB7Ci0g
ICAgICAgIC8vIG90aGVyIGVudHJpZXMgYWxyZWFkeSBleGlzdCBmb3IgdGhpcyBkYXRlCi0gICAg
ICAgIGhyID0gaW5zZXJ0SXRlbShlbnRyeSwgZGF0ZUtleSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKCFtX2VudHJpZXNCeURhdGUuY29udGFpbnMoZGF0ZUtleSkpOwotICAgICAgICAv
LyBubyBvdGhlciBlbnRyaWVzIGV4aXN0IGZvciB0aGlzIGRhdGUKLSAgICAgICAgUmV0YWluUHRy
PENGTXV0YWJsZUFycmF5UmVmPiBlbnRyeUFycmF5ID0gYWRvcHRDRigKLSAgICAgICAgICAgIENG
QXJyYXlDcmVhdGVNdXRhYmxlKDAsIDAsICZNYXJzaGFsbGluZ0hlbHBlcnM6OmtJVW5rbm93bkFy
cmF5Q2FsbEJhY2tzKSk7Ci0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyeUFycmF5Lmdl
dCgpLCBlbnRyeSk7Ci0gICAgICAgIG1fZW50cmllc0J5RGF0ZS5zZXQoZGF0ZUtleSwgZW50cnlB
cnJheSk7Ci0gICAgICAgIC8vIENsZWFyIG1fb3JkZXJlZExhc3RWaXNpdGVkRGF5cyBzbyBpdCB3
aWxsIGJlIHJlZ2VuZXJhdGVkIHdoZW4gbmV4dCByZXF1ZXN0ZWQuCi0gICAgICAgIG1fb3JkZXJl
ZExhc3RWaXNpdGVkRGF5cyA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGhyOwotfQot
CiBIUkVTVUxUIFdlYkhpc3Rvcnk6OnJlbW92ZUl0ZW1Gcm9tRGF0ZUNhY2hlcyhJV2ViSGlzdG9y
eUl0ZW0qIGVudHJ5KQogewotICAgIEhSRVNVTFQgaHIgPSBTX09LOwotCi0gICAgREFURSBsYXN0
VmlzaXRlZENPTVRpbWU7Ci0gICAgZW50cnktPmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZsYXN0
VmlzaXRlZENPTVRpbWUpOworICAgIERBVEUgZW50cnlUaW1lOworICAgIGVudHJ5LT5sYXN0Vmlz
aXRlZFRpbWVJbnRlcnZhbCgmZW50cnlUaW1lKTsKIAotICAgIERhdGVLZXkgZGF0ZUtleTsKLSAg
ICBpZiAoIWZpbmRLZXkoJmRhdGVLZXksIE1hcnNoYWxsaW5nSGVscGVyczo6REFURVRvQ0ZBYnNv
bHV0ZVRpbWUobGFzdFZpc2l0ZWRDT01UaW1lKSkpCisgICAgYXV0byBmb3VuZCA9IG1fZW50cmll
c0J5RGF0ZS5maW5kKGRhdGVLZXkoZW50cnlUaW1lKSk7CisgICAgaWYgKGZvdW5kID09IG1fZW50
cmllc0J5RGF0ZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIERhdGVUb0Vu
dHJpZXNNYXA6Oml0ZXJhdG9yIGZvdW5kID0gbV9lbnRyaWVzQnlEYXRlLmZpbmQoZGF0ZUtleSk7
Ci0gICAgQVNTRVJUKGZvdW5kICE9IG1fZW50cmllc0J5RGF0ZS5lbmQoKSk7Ci0gICAgQ0ZNdXRh
YmxlQXJyYXlSZWYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWUuZ2V0KCk7CisgICAgYXV0
byYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWU7CisgICAgc2l6ZV90IGNvdW50ID0gZW50
cmllc0ZvckRhdGUuc2l6ZSgpOwogCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChlbnRyaWVzRm9yRGF0ZSk7Ci0gICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyAt
LWkpIHsKLSAgICAgICAgaWYgKChJV2ViSGlzdG9yeUl0ZW0qKUNGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoZW50cmllc0ZvckRhdGUsIGkpID09IGVudHJ5KQotICAgICAgICAgICAgQ0ZBcnJheVJlbW92
ZVZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgaSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNv
dW50IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKGVudHJpZXNGb3JEYXRlLmF0KGkp
ID09IGVudHJ5KQorICAgICAgICAgICAgZW50cmllc0ZvckRhdGUucmVtb3ZlKGkpOwogICAgIH0K
IAogICAgIC8vIHJlbW92ZSB0aGlzIGRhdGUgZW50aXJlbHkgaWYgdGhlcmUgYXJlIG5vIG90aGVy
IGVudHJpZXMgb24gaXQKLSAgICBpZiAoQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRlKSA9
PSAwKSB7CisgICAgaWYgKGVudHJpZXNGb3JEYXRlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2Vu
dHJpZXNCeURhdGUucmVtb3ZlKGZvdW5kKTsKICAgICAgICAgLy8gQ2xlYXIgbV9vcmRlcmVkTGFz
dFZpc2l0ZWREYXlzIHNvIGl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2hlbiBuZXh0IHJlcXVlc3Rl
ZC4KICAgICAgICAgbV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbnVsbHB0cjsKICAgICB9CiAK
LSAgICByZXR1cm4gaHI7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldERheUJvdW5kYXJpZXMoQ0ZBYnNv
bHV0ZVRpbWUgZGF5LCBDRkFic29sdXRlVGltZSYgYmVnaW5uaW5nT2ZEYXksIENGQWJzb2x1dGVU
aW1lJiBiZWdpbm5pbmdPZk5leHREYXkpCi17Ci0gICAgUmV0YWluUHRyPENGVGltZVpvbmVSZWY+
IHRpbWVab25lID0gYWRvcHRDRihDRlRpbWVab25lQ29weURlZmF1bHQoKSk7Ci0gICAgQ0ZHcmVn
b3JpYW5EYXRlIGRhdGUgPSBDRkFic29sdXRlVGltZUdldEdyZWdvcmlhbkRhdGUoZGF5LCB0aW1l
Wm9uZS5nZXQoKSk7Ci0gICAgZGF0ZS5ob3VyID0gMDsKLSAgICBkYXRlLm1pbnV0ZSA9IDA7Ci0g
ICAgZGF0ZS5zZWNvbmQgPSAwOwotICAgIGJlZ2lubmluZ09mRGF5ID0gQ0ZHcmVnb3JpYW5EYXRl
R2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRpbWVab25lLmdldCgpKTsKLSAgICBkYXRlLmRheSArPSAx
OwotICAgIGJlZ2lubmluZ09mTmV4dERheSA9IENGR3JlZ29yaWFuRGF0ZUdldEFic29sdXRlVGlt
ZShkYXRlLCB0aW1lWm9uZS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZBYnNvbHV0ZVRp
bWUgYmVnaW5uaW5nT2ZEYXkoQ0ZBYnNvbHV0ZVRpbWUgZGF0ZSkKLXsKLSAgICBzdGF0aWMgQ0ZB
YnNvbHV0ZVRpbWUgY2FjaGVkQmVnaW5uaW5nT2ZEYXkgPSBudW1lcmljX2xpbWl0czxDRkFic29s
dXRlVGltZT46OnF1aWV0X05hTigpOwotICAgIHN0YXRpYyBDRkFic29sdXRlVGltZSBjYWNoZWRC
ZWdpbm5pbmdPZk5leHREYXk7Ci0gICAgaWYgKCEoZGF0ZSA+PSBjYWNoZWRCZWdpbm5pbmdPZkRh
eSAmJiBkYXRlIDwgY2FjaGVkQmVnaW5uaW5nT2ZOZXh0RGF5KSkKLSAgICAgICAgZ2V0RGF5Qm91
bmRhcmllcyhkYXRlLCBjYWNoZWRCZWdpbm5pbmdPZkRheSwgY2FjaGVkQmVnaW5uaW5nT2ZOZXh0
RGF5KTsKLSAgICByZXR1cm4gY2FjaGVkQmVnaW5uaW5nT2ZEYXk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgV2ViSGlzdG9yeTo6RGF0ZUtleSBkYXRlS2V5KENGQWJzb2x1dGVUaW1lIGRhdGUpCi17Ci0g
ICAgLy8gQ29udmVydGluZyBmcm9tIGRvdWJsZSAoQ0ZBYnNvbHV0ZVRpbWUpIHRvIGludDY0X3Qg
KFdlYkhpc3RvcnlEYXRlS2V5KSBpcwotICAgIC8vIHNhZmUgaGVyZSBiZWNhdXNlIGFsbCBzZW5z
aWJsZSBkYXRlcyBhcmUgaW4gdGhlIHJhbmdlIC0yKio0OCAuLiAyKio0NyB3aGljaAotICAgIC8v
IHNhZmVseSBmaXRzIGluIGFuIGludDY0X3QuCi0gICAgcmV0dXJuIGJlZ2lubmluZ09mRGF5KGRh
dGUpOwotfQotCi0vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGRheSBpcyBhbHJlYWR5IGluIHRoZSBs
aXN0IG9mIGRheXMsCi0vLyBhbmQgZmlsbHMgaW4gKmtleSB3aXRoIHRoZSBmb3VuZCBvciBwcm9w
b3NlZCBrZXkuCi1ib29sIFdlYkhpc3Rvcnk6OmZpbmRLZXkoRGF0ZUtleSoga2V5LCBDRkFic29s
dXRlVGltZSBmb3JEYXkpCi17Ci0gICAgQVNTRVJUX0FSRyhrZXksIGtleSk7Ci0KLSAgICAqa2V5
ID0gZGF0ZUtleShmb3JEYXkpOwotICAgIHJldHVybiBtX2VudHJpZXNCeURhdGUuY29udGFpbnMo
KmtleSk7CisgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViSGlzdG9yeTo6aW5zZXJ0
SXRlbShJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5LCBEYXRlS2V5IGRhdGVLZXkpCitIUkVTVUxUIFdl
Ykhpc3Rvcnk6OmFkZEl0ZW1Ub0RhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSkKIHsK
ICAgICBBU1NFUlRfQVJHKGVudHJ5LCBlbnRyeSk7Ci0gICAgQVNTRVJUX0FSRyhkYXRlS2V5LCBt
X2VudHJpZXNCeURhdGUuY29udGFpbnMoZGF0ZUtleSkpOwotCi0gICAgSFJFU1VMVCBociA9IFNf
T0s7Ci0KLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gRV9GQUlMOwogCiAgICAgREFU
RSBlbnRyeVRpbWU7CiAgICAgZW50cnktPmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZlbnRyeVRp
bWUpOwotICAgIENGTXV0YWJsZUFycmF5UmVmIGVudHJpZXNGb3JEYXRlID0gbV9lbnRyaWVzQnlE
YXRlLmdldChkYXRlS2V5KS5nZXQoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IENGQXJyYXlHZXRD
b3VudChlbnRyaWVzRm9yRGF0ZSk7CisKKyAgICBEYXRlS2V5IGtleSA9IGRhdGVLZXkoZW50cnlU
aW1lKTsKKyAgICBhdXRvIGZvdW5kID0gbV9lbnRyaWVzQnlEYXRlLmZpbmQoa2V5KTsKKyAgICBp
ZiAoZm91bmQgPT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxDT01Q
dHI8SVdlYkhpc3RvcnlJdGVtPiA+IGVudHJpZXMoMSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5k
KGVudHJ5KTsKKyAgICAgICAgbV9lbnRyaWVzQnlEYXRlLnNldChrZXksIGVudHJpZXMpOworICAg
ICAgICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQgd2lsbCBiZSByZWdl
bmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgorICAgICAgICBtX29yZGVyZWRMYXN0VmlzaXRl
ZERheXMgPSBudWxscHRyOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBhdXRv
JiBlbnRyaWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZTsKKyAgICBzaXplX3QgY291bnQgPSBlbnRy
aWVzRm9yRGF0ZS5zaXplKCk7CiAKICAgICAvLyBUaGUgZW50cmllcyBmb3IgZWFjaCBkYXkgYXJl
IHN0b3JlZCBpbiBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSBtb3N0IHJlY2VudCBlbnRyeSBmaXJz
dAogICAgIC8vIENoZWNrIGZvciB0aGUgY29tbW9uIGNhc2VzIG9mIHRoZSBlbnRyeSBiZWluZyBu
ZXdlciB0aGFuIGFsbCBleGlzdGluZyBlbnRyaWVzIG9yIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUg
ZGF5CiAgICAgYm9vbCBpc05ld2VyVGhhbkFsbEVudHJpZXMgPSBmYWxzZTsKICAgICBpZiAoY291
bnQpIHsKLSAgICAgICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVtID0gY29uc3RfY2FzdDxJV2ViSGlz
dG9yeUl0ZW0qPihzdGF0aWNfY2FzdDxjb25zdCBJV2ViSGlzdG9yeUl0ZW0qPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGVudHJpZXNGb3JEYXRlLCAwKSkpOwogICAgICAgICBEQVRFIGl0ZW1UaW1l
OwotICAgICAgICBpc05ld2VyVGhhbkFsbEVudHJpZXMgPSBTVUNDRUVERUQoaXRlbS0+bGFzdFZp
c2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYgaXRlbVRpbWUgPCBlbnRyeVRpbWU7Cisg
ICAgICAgIGlzTmV3ZXJUaGFuQWxsRW50cmllcyA9IFNVQ0NFRURFRChlbnRyaWVzRm9yRGF0ZS5m
aXJzdCgpLT5sYXN0VmlzaXRlZFRpbWVJbnRlcnZhbCgmaXRlbVRpbWUpKSAmJiBpdGVtVGltZSA8
IGVudHJ5VGltZTsKICAgICB9CiAgICAgaWYgKCFjb3VudCB8fCBpc05ld2VyVGhhbkFsbEVudHJp
ZXMpIHsKLSAgICAgICAgQ0ZBcnJheUluc2VydFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwg
MCwgZW50cnkpOworICAgICAgICBlbnRyaWVzRm9yRGF0ZS5pbnNlcnQoMCwgZW50cnkpOwogICAg
ICAgICByZXR1cm4gU19PSzsKICAgICB9CiAKICAgICAvLyAuLiBvciBvbGRlciB0aGFuIGFsbCBl
eGlzdGluZyBlbnRyaWVzCiAgICAgYm9vbCBpc09sZGVyVGhhbkFsbEVudHJpZXMgPSBmYWxzZTsK
ICAgICBpZiAoY291bnQgPiAwKSB7Ci0gICAgICAgIElXZWJIaXN0b3J5SXRlbSogaXRlbSA9IGNv
bnN0X2Nhc3Q8SVdlYkhpc3RvcnlJdGVtKj4oc3RhdGljX2Nhc3Q8Y29uc3QgSVdlYkhpc3RvcnlJ
dGVtKj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgY291bnQgLSAxKSkp
OwogICAgICAgICBEQVRFIGl0ZW1UaW1lOwotICAgICAgICBpc09sZGVyVGhhbkFsbEVudHJpZXMg
PSBTVUNDRUVERUQoaXRlbS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYg
aXRlbVRpbWUgPj0gZW50cnlUaW1lOworICAgICAgICBpc09sZGVyVGhhbkFsbEVudHJpZXMgPSBT
VUNDRUVERUQoZW50cmllc0ZvckRhdGUubGFzdCgpLT5sYXN0VmlzaXRlZFRpbWVJbnRlcnZhbCgm
aXRlbVRpbWUpKSAmJiBpdGVtVGltZSA+PSBlbnRyeVRpbWU7CiAgICAgfQogICAgIGlmIChpc09s
ZGVyVGhhbkFsbEVudHJpZXMpIHsKLSAgICAgICAgQ0ZBcnJheUluc2VydFZhbHVlQXRJbmRleChl
bnRyaWVzRm9yRGF0ZSwgY291bnQsIGVudHJ5KTsKKyAgICAgICAgZW50cmllc0ZvckRhdGUuYXBw
ZW5kKGVudHJ5KTsKICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgfQogCkBAIC03MDMsOSArNjYw
LDggQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50
cnksIERhdGVLZXkgZGF0ZUtleSkKICAgICB1bnNpZ25lZCBoaWdoID0gY291bnQ7CiAgICAgd2hp
bGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgICAgdW5zaWduZWQgbWlkID0gbG93ICsgKGhpZ2ggLSBs
b3cpIC8gMjsKLSAgICAgICAgSVdlYkhpc3RvcnlJdGVtKiBpdGVtID0gY29uc3RfY2FzdDxJV2Vi
SGlzdG9yeUl0ZW0qPihzdGF0aWNfY2FzdDxjb25zdCBJV2ViSGlzdG9yeUl0ZW0qPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGVudHJpZXNGb3JEYXRlLCBtaWQpKSk7CiAgICAgICAgIERBVEUgaXRl
bVRpbWU7Ci0gICAgICAgIGlmIChGQUlMRUQoaXRlbS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwo
Jml0ZW1UaW1lKSkpCisgICAgICAgIGlmIChGQUlMRUQoZW50cmllc0ZvckRhdGUuYXQobWlkKS0+
bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkpCiAgICAgICAgICAgICByZXR1cm4g
RV9GQUlMOwogCiAgICAgICAgIGlmIChpdGVtVGltZSA+PSBlbnRyeVRpbWUpCkBAIC03MTUsNyAr
NjcxLDcgQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSog
ZW50cnksIERhdGVLZXkgZGF0ZUtleSkKICAgICB9CiAKICAgICAvLyBsb3cgaXMgbm93IHRoZSBp
bmRleCBvZiB0aGUgZmlyc3QgZW50cnkgdGhhdCBpcyBvbGRlciB0aGFuIGVudHJ5RGF0ZQotICAg
IENGQXJyYXlJbnNlcnRWYWx1ZUF0SW5kZXgoZW50cmllc0ZvckRhdGUsIGxvdywgZW50cnkpOwor
ICAgIGVudHJpZXNGb3JEYXRlLmluc2VydChsb3csIGVudHJ5KTsKICAgICByZXR1cm4gU19PSzsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViSGlzdG9yeS5oIGIvU291cmNl
L1dlYktpdC93aW4vV2ViSGlzdG9yeS5oCmluZGV4IGFmNmQ2YmE5YzA4Y2I1YWViNjdmZWI5MDI5
NDgyZmM4NjY5YjQxNTUuLmNkZmEwMGRiZmFiN2JmYWFkY2NhMWIyM2NiOTVmODU5NjEzZTVjYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3RvcnkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJIaXN0b3J5LmgKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAg
Q09NUHRyPElXZWJIaXN0b3J5SXRlbT4gaXRlbUZvclVSTFN0cmluZyhjb25zdCBXVEY6OlN0cmlu
ZyYpIGNvbnN0OwogCiAgICAgdHlwZWRlZiBpbnQ2NF90IERhdGVLZXk7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPERhdGVLZXksIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gPiBEYXRlVG9FbnRy
aWVzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxEYXRlS2V5LCBWZWN0b3I8Q09NUHRyPElXZWJI
aXN0b3J5SXRlbT4gPiA+IERhdGVUb0VudHJpZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdU
Rjo6U3RyaW5nLCBDT01QdHI8SVdlYkhpc3RvcnlJdGVtPiA+IFVSTFRvRW50cmllc01hcDsKIAog
cHJpdmF0ZToKQEAgLTEzOCw5ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIEhSRVNVTFQgcmVtb3Zl
SXRlbUZvclVSTFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgdXJsU3RyaW5nKTsKICAgICBIUkVT
VUxUIGFkZEl0ZW1Ub0RhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7CiAgICAgSFJF
U1VMVCByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7Ci0g
ICAgSFJFU1VMVCBpbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50cnksIERhdGVLZXkpOwog
ICAgIEhSRVNVTFQgYWdlTGltaXREYXRlKENGQWJzb2x1dGVUaW1lKiB0aW1lKTsKLSAgICBib29s
IGZpbmRLZXkoRGF0ZUtleSosIENGQWJzb2x1dGVUaW1lIGZvckRheSk7CiAgICAgc3RhdGljIENG
QWJzb2x1dGVUaW1lIHRpbWVUb0RhdGUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSk7CiAgICAgQlNUUiBn
ZXROb3RpZmljYXRpb25TdHJpbmcoTm90aWZpY2F0aW9uVHlwZSBub3RpZnlUeXBlKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212405</attachid>
            <date>2013-09-23 16:42:19 -0700</date>
            <delta_ts>2013-09-24 00:32:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121801-20130924014217.patch</filename>
            <type>text/plain</type>
            <size>12989</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2MzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYTgwNTVhYThl
YWY0NzcxYzRhZDgyNjYyNjJjM2Q1Y2IzZTcwMmMyNi4uOGNhYzk0NmVhNTY3ODJiNDVlZGFiZWVj
ZjY1ODdlMjdlZTZmZTc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDEz
LTA5LTIzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCisgICAgICAg
IE1ha2UgV2ViSGlzdG9yeSBtb3JlIHR5cGUgc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJl
bnQgRnVsZ2hhbS4KKworICAgICAgICBVc2UgYSBXVEY6OlZlY3RvciBpbnN0ZWFkIG9mIGEgQ0ZN
dXRhYmxlQXJyYXkgdG8gYXZvaWQKKyAgICAgICAgY2FzdGluZyBmcm9tIHZvaWQqIGFsbCB0aGUg
dGltZSB3aGVuIGFjY2Vzc2luZyB0aGUgZW50cmllcy4KKyAgICAgICAgVGhpcyByZWR1Y2VzIHRo
ZSBkZXBlbmRlbmNpZXMgb24gQ29yZUZvdW5kYXRpb24gdG9vLgorCisgICAgICAgICogV2ViSGlz
dG9yeS5jcHA6CisgICAgICAgIChnZXREYXlCb3VuZGFyaWVzKToKKyAgICAgICAgKGJlZ2lubmlu
Z09mRGF5KToKKyAgICAgICAgKGRhdGVLZXkpOgorICAgICAgICAoV2ViSGlzdG9yeTo6b3JkZXJl
ZEl0ZW1zTGFzdFZpc2l0ZWRPbkRheSk6CisgICAgICAgIChXZWJIaXN0b3J5OjpyZW1vdmVJdGVt
RnJvbURhdGVDYWNoZXMpOgorICAgICAgICAoV2ViSGlzdG9yeTo6YWRkSXRlbVRvRGF0ZUNhY2hl
cyk6CisgICAgICAgICogV2ViSGlzdG9yeS5oOgorCisyMDEzLTA5LTIzICBQYXRyaWNrIEdhbnN0
ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgorCiAgICAgICAgIFtXSU5dIEltcGxlbWVudCBXZWJN
dXRhYmxlVVJMUmVxdWVzdDo6c2V0SFRUUEJvZHkoKQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5MjAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNwcApp
bmRleCA1NTk1MDkxNGQ3YzVmZTVkNjlkYzkzYjI5NTExZWM4YmI0ZWYwMzAwLi43NjA2ZTZkZTQ1
YzFjZmEyMTk1ODdjNmVjMjA5Zjg0MmJkNjE4OTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJIaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmNw
cApAQCAtNzUsNiArNzUsMzUgQEAgc3RhdGljIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJh
Zz4gY3JlYXRlVXNlckluZm9Gcm9tSGlzdG9yeUl0ZW0oQlNUUiBub3RpZmkKICAgICByZXR1cm4g
aW5mbzsKIH0KIAorc3RhdGljIHZvaWQgZ2V0RGF5Qm91bmRhcmllcyhDRkFic29sdXRlVGltZSBk
YXksIENGQWJzb2x1dGVUaW1lJiBiZWdpbm5pbmdPZkRheSwgQ0ZBYnNvbHV0ZVRpbWUmIGJlZ2lu
bmluZ09mTmV4dERheSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZUaW1lWm9uZVJlZj4gdGltZVpvbmUg
PSBhZG9wdENGKENGVGltZVpvbmVDb3B5RGVmYXVsdCgpKTsKKyAgICBDRkdyZWdvcmlhbkRhdGUg
ZGF0ZSA9IENGQWJzb2x1dGVUaW1lR2V0R3JlZ29yaWFuRGF0ZShkYXksIHRpbWVab25lLmdldCgp
KTsKKyAgICBkYXRlLmhvdXIgPSAwOworICAgIGRhdGUubWludXRlID0gMDsKKyAgICBkYXRlLnNl
Y29uZCA9IDA7CisgICAgYmVnaW5uaW5nT2ZEYXkgPSBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0
ZVRpbWUoZGF0ZSwgdGltZVpvbmUuZ2V0KCkpOworICAgIGRhdGUuZGF5ICs9IDE7CisgICAgYmVn
aW5uaW5nT2ZOZXh0RGF5ID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRp
bWVab25lLmdldCgpKTsKK30KKworc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBiZWdpbm5p
bmdPZkRheShDRkFic29sdXRlVGltZSBkYXRlKQoreworICAgIHN0YXRpYyBDRkFic29sdXRlVGlt
ZSBjYWNoZWRCZWdpbm5pbmdPZkRheSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Q0ZBYnNvbHV0ZVRp
bWU+OjpxdWlldF9OYU4oKTsKKyAgICBzdGF0aWMgQ0ZBYnNvbHV0ZVRpbWUgY2FjaGVkQmVnaW5u
aW5nT2ZOZXh0RGF5OworICAgIGlmICghKGRhdGUgPj0gY2FjaGVkQmVnaW5uaW5nT2ZEYXkgJiYg
ZGF0ZSA8IGNhY2hlZEJlZ2lubmluZ09mTmV4dERheSkpCisgICAgICAgIGdldERheUJvdW5kYXJp
ZXMoZGF0ZSwgY2FjaGVkQmVnaW5uaW5nT2ZEYXksIGNhY2hlZEJlZ2lubmluZ09mTmV4dERheSk7
CisgICAgcmV0dXJuIGNhY2hlZEJlZ2lubmluZ09mRGF5OworfQorCitzdGF0aWMgaW5saW5lIFdl
Ykhpc3Rvcnk6OkRhdGVLZXkgZGF0ZUtleShEQVRFIGRhdGUpCit7CisgICAgLy8gQ29udmVydGlu
ZyBmcm9tIGRvdWJsZSAoQ0ZBYnNvbHV0ZVRpbWUpIHRvIGludDY0X3QgKFdlYkhpc3RvcnlEYXRl
S2V5KSBpcworICAgIC8vIHNhZmUgaGVyZSBiZWNhdXNlIGFsbCBzZW5zaWJsZSBkYXRlcyBhcmUg
aW4gdGhlIHJhbmdlIC0yKio0OCAuLiAyKio0NyB3aGljaAorICAgIC8vIHNhZmVseSBmaXRzIGlu
IGFuIGludDY0X3QuCisgICAgcmV0dXJuIGJlZ2lubmluZ09mRGF5KE1hcnNoYWxsaW5nSGVscGVy
czo6REFURVRvQ0ZBYnNvbHV0ZVRpbWUoZGF0ZSkpOworfQorCiAvLyBXZWJIaXN0b3J5IC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIFdlYkhpc3Rvcnk6OldlYkhpc3RvcnkoKQpAQCAtMjkwLDE5ICszMTksMTQgQEAgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpvcmRlcmVkSXRlbXNMYXN0VmlzaXRl
ZE9uRGF5KAogICAgIC8qIFtpbl0gKi8gSVdlYkhpc3RvcnlJdGVtKiogaXRlbXMsCiAgICAgLyog
W2luXSAqLyBEQVRFIGNhbGVuZGFyRGF0ZSkKIHsKLSAgICBEYXRlS2V5IGRhdGVLZXk7Ci0gICAg
aWYgKCFmaW5kS2V5KCZkYXRlS2V5LCBNYXJzaGFsbGluZ0hlbHBlcnM6OkRBVEVUb0NGQWJzb2x1
dGVUaW1lKGNhbGVuZGFyRGF0ZSkpKSB7CisgICAgYXV0byBmb3VuZCA9IG1fZW50cmllc0J5RGF0
ZS5maW5kKGRhdGVLZXkoY2FsZW5kYXJEYXRlKSk7CisgICAgaWYgKGZvdW5kID09IG1fZW50cmll
c0J5RGF0ZS5lbmQoKSkgewogICAgICAgICAqY291bnQgPSAwOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBDRkFycmF5UmVmIGVudHJpZXMgPSBtX2VudHJpZXNCeURhdGUuZ2V0KGRh
dGVLZXkpLmdldCgpOwotICAgIGlmICghZW50cmllcykgewotICAgICAgICAqY291bnQgPSAwOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQgbmV3Q291bnQgPSBDRkFycmF5R2V0
Q291bnQoZW50cmllcyk7CisgICAgYXV0byYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWU7
CisgICAgaW50IG5ld0NvdW50ID0gZW50cmllc0ZvckRhdGUuc2l6ZSgpOwogCiAgICAgaWYgKCFp
dGVtcykgewogICAgICAgICAqY291bnQgPSBuZXdDb3VudDsKQEAgLTMxNSwxMSArMzM5LDggQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5OjpvcmRlcmVkSXRlbXNMYXN0Vmlz
aXRlZE9uRGF5KAogICAgIH0KIAogICAgICpjb3VudCA9IG5ld0NvdW50OwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbmV3Q291bnQ7IGkrKykgewotICAgICAgICBJV2ViSGlzdG9yeUl0ZW0qIGl0
ZW0gPSAoSVdlYkhpc3RvcnlJdGVtKilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGVudHJpZXMsIGkp
OwotICAgICAgICBpdGVtLT5BZGRSZWYoKTsKLSAgICAgICAgaXRlbXNbaV0gPSBpdGVtOwotICAg
IH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0NvdW50OyArK2kpCisgICAgICAgIGVudHJp
ZXNGb3JEYXRlW2ldLmNvcHlSZWZUbygmaXRlbXNbaV0pOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9
CkBAIC01NjQsMTM4ICs1ODUsNzQgQEAgQ09NUHRyPElXZWJIaXN0b3J5SXRlbT4gV2ViSGlzdG9y
eTo6aXRlbUZvclVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY28KICAgICByZXR1
cm4gbV9lbnRyaWVzQnlVUkwuZ2V0KHVybFN0cmluZyk7CiB9CiAKLUhSRVNVTFQgV2ViSGlzdG9y
eTo6YWRkSXRlbVRvRGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQotewotICAgIEhS
RVNVTFQgaHIgPSBTX09LOwotCi0gICAgREFURSBsYXN0VmlzaXRlZENPTVRpbWU7Ci0gICAgZW50
cnktPmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZsYXN0VmlzaXRlZENPTVRpbWUpOwotICAgIAot
ICAgIERhdGVLZXkgZGF0ZUtleTsKLSAgICBpZiAoZmluZEtleSgmZGF0ZUtleSwgTWFyc2hhbGxp
bmdIZWxwZXJzOjpEQVRFVG9DRkFic29sdXRlVGltZShsYXN0VmlzaXRlZENPTVRpbWUpKSkgewot
ICAgICAgICAvLyBvdGhlciBlbnRyaWVzIGFscmVhZHkgZXhpc3QgZm9yIHRoaXMgZGF0ZQotICAg
ICAgICBociA9IGluc2VydEl0ZW0oZW50cnksIGRhdGVLZXkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVCghbV9lbnRyaWVzQnlEYXRlLmNvbnRhaW5zKGRhdGVLZXkpKTsKLSAgICAgICAg
Ly8gbm8gb3RoZXIgZW50cmllcyBleGlzdCBmb3IgdGhpcyBkYXRlCi0gICAgICAgIFJldGFpblB0
cjxDRk11dGFibGVBcnJheVJlZj4gZW50cnlBcnJheSA9IGFkb3B0Q0YoCi0gICAgICAgICAgICBD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCAwLCAmTWFyc2hhbGxpbmdIZWxwZXJzOjprSVVua25vd25B
cnJheUNhbGxCYWNrcykpOwotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cnlBcnJheS5n
ZXQoKSwgZW50cnkpOwotICAgICAgICBtX2VudHJpZXNCeURhdGUuc2V0KGRhdGVLZXksIGVudHJ5
QXJyYXkpOwotICAgICAgICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQg
d2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgotICAgICAgICBtX29yZGVy
ZWRMYXN0VmlzaXRlZERheXMgPSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBocjsKLX0K
LQogSFJFU1VMVCBXZWJIaXN0b3J5OjpyZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMoSVdlYkhpc3Rv
cnlJdGVtKiBlbnRyeSkKIHsKLSAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBEQVRFIGxhc3RW
aXNpdGVkVGltZTsKKyAgICBlbnRyeS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmxhc3RWaXNp
dGVkVGltZSk7CiAKLSAgICBEQVRFIGxhc3RWaXNpdGVkQ09NVGltZTsKLSAgICBlbnRyeS0+bGFz
dFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmxhc3RWaXNpdGVkQ09NVGltZSk7Ci0KLSAgICBEYXRlS2V5
IGRhdGVLZXk7Ci0gICAgaWYgKCFmaW5kS2V5KCZkYXRlS2V5LCBNYXJzaGFsbGluZ0hlbHBlcnM6
OkRBVEVUb0NGQWJzb2x1dGVUaW1lKGxhc3RWaXNpdGVkQ09NVGltZSkpKQotICAgICAgICByZXR1
cm4gRV9GQUlMOworICAgIGF1dG8gZm91bmQgPSBtX2VudHJpZXNCeURhdGUuZmluZChkYXRlS2V5
KGxhc3RWaXNpdGVkVGltZSkpOworICAgIGlmIChmb3VuZCA9PSBtX2VudHJpZXNCeURhdGUuZW5k
KCkpCisgICAgICAgIHJldHVybiBTX09LOwogCi0gICAgRGF0ZVRvRW50cmllc01hcDo6aXRlcmF0
b3IgZm91bmQgPSBtX2VudHJpZXNCeURhdGUuZmluZChkYXRlS2V5KTsKLSAgICBBU1NFUlQoZm91
bmQgIT0gbV9lbnRyaWVzQnlEYXRlLmVuZCgpKTsKLSAgICBDRk11dGFibGVBcnJheVJlZiBlbnRy
aWVzRm9yRGF0ZSA9IGZvdW5kLT52YWx1ZS5nZXQoKTsKKyAgICBhdXRvJiBlbnRyaWVzRm9yRGF0
ZSA9IGZvdW5kLT52YWx1ZTsKKyAgICBzaXplX3QgY291bnQgPSBlbnRyaWVzRm9yRGF0ZS5zaXpl
KCk7CiAKLSAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVudHJpZXNGb3JEYXRl
KTsKLSAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBp
ZiAoKElXZWJIaXN0b3J5SXRlbSopQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0
ZSwgaSkgPT0gZW50cnkpCi0gICAgICAgICAgICBDRkFycmF5UmVtb3ZlVmFsdWVBdEluZGV4KGVu
dHJpZXNGb3JEYXRlLCBpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY291bnQgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBpZiAoZW50cmllc0ZvckRhdGVbaV0gPT0gZW50cnkpCisgICAgICAg
ICAgICBlbnRyaWVzRm9yRGF0ZS5yZW1vdmUoaSk7CiAgICAgfQogCiAgICAgLy8gcmVtb3ZlIHRo
aXMgZGF0ZSBlbnRpcmVseSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcyBvbiBpdAotICAg
IGlmIChDRkFycmF5R2V0Q291bnQoZW50cmllc0ZvckRhdGUpID09IDApIHsKKyAgICBpZiAoZW50
cmllc0ZvckRhdGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZW50cmllc0J5RGF0ZS5yZW1vdmUo
Zm91bmQpOwogICAgICAgICAvLyBDbGVhciBtX29yZGVyZWRMYXN0VmlzaXRlZERheXMgc28gaXQg
d2lsbCBiZSByZWdlbmVyYXRlZCB3aGVuIG5leHQgcmVxdWVzdGVkLgogICAgICAgICBtX29yZGVy
ZWRMYXN0VmlzaXRlZERheXMgPSBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBocjsKLX0K
LQotc3RhdGljIHZvaWQgZ2V0RGF5Qm91bmRhcmllcyhDRkFic29sdXRlVGltZSBkYXksIENGQWJz
b2x1dGVUaW1lJiBiZWdpbm5pbmdPZkRheSwgQ0ZBYnNvbHV0ZVRpbWUmIGJlZ2lubmluZ09mTmV4
dERheSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZUaW1lWm9uZVJlZj4gdGltZVpvbmUgPSBhZG9wdENG
KENGVGltZVpvbmVDb3B5RGVmYXVsdCgpKTsKLSAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZSA9IENG
QWJzb2x1dGVUaW1lR2V0R3JlZ29yaWFuRGF0ZShkYXksIHRpbWVab25lLmdldCgpKTsKLSAgICBk
YXRlLmhvdXIgPSAwOwotICAgIGRhdGUubWludXRlID0gMDsKLSAgICBkYXRlLnNlY29uZCA9IDA7
Ci0gICAgYmVnaW5uaW5nT2ZEYXkgPSBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0ZVRpbWUoZGF0
ZSwgdGltZVpvbmUuZ2V0KCkpOwotICAgIGRhdGUuZGF5ICs9IDE7Ci0gICAgYmVnaW5uaW5nT2ZO
ZXh0RGF5ID0gQ0ZHcmVnb3JpYW5EYXRlR2V0QWJzb2x1dGVUaW1lKGRhdGUsIHRpbWVab25lLmdl
dCgpKTsKLX0KLQotc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBiZWdpbm5pbmdPZkRheShD
RkFic29sdXRlVGltZSBkYXRlKQotewotICAgIHN0YXRpYyBDRkFic29sdXRlVGltZSBjYWNoZWRC
ZWdpbm5pbmdPZkRheSA9IG51bWVyaWNfbGltaXRzPENGQWJzb2x1dGVUaW1lPjo6cXVpZXRfTmFO
KCk7Ci0gICAgc3RhdGljIENGQWJzb2x1dGVUaW1lIGNhY2hlZEJlZ2lubmluZ09mTmV4dERheTsK
LSAgICBpZiAoIShkYXRlID49IGNhY2hlZEJlZ2lubmluZ09mRGF5ICYmIGRhdGUgPCBjYWNoZWRC
ZWdpbm5pbmdPZk5leHREYXkpKQotICAgICAgICBnZXREYXlCb3VuZGFyaWVzKGRhdGUsIGNhY2hl
ZEJlZ2lubmluZ09mRGF5LCBjYWNoZWRCZWdpbm5pbmdPZk5leHREYXkpOwotICAgIHJldHVybiBj
YWNoZWRCZWdpbm5pbmdPZkRheTsKLX0KLQotc3RhdGljIGlubGluZSBXZWJIaXN0b3J5OjpEYXRl
S2V5IGRhdGVLZXkoQ0ZBYnNvbHV0ZVRpbWUgZGF0ZSkKLXsKLSAgICAvLyBDb252ZXJ0aW5nIGZy
b20gZG91YmxlIChDRkFic29sdXRlVGltZSkgdG8gaW50NjRfdCAoV2ViSGlzdG9yeURhdGVLZXkp
IGlzCi0gICAgLy8gc2FmZSBoZXJlIGJlY2F1c2UgYWxsIHNlbnNpYmxlIGRhdGVzIGFyZSBpbiB0
aGUgcmFuZ2UgLTIqKjQ4IC4uIDIqKjQ3IHdoaWNoCi0gICAgLy8gc2FmZWx5IGZpdHMgaW4gYW4g
aW50NjRfdC4KLSAgICByZXR1cm4gYmVnaW5uaW5nT2ZEYXkoZGF0ZSk7Ci19Ci0KLS8vIFJldHVy
bnMgd2hldGhlciB0aGUgZGF5IGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2YgZGF5cywKLS8vIGFu
ZCBmaWxscyBpbiAqa2V5IHdpdGggdGhlIGZvdW5kIG9yIHByb3Bvc2VkIGtleS4KLWJvb2wgV2Vi
SGlzdG9yeTo6ZmluZEtleShEYXRlS2V5KiBrZXksIENGQWJzb2x1dGVUaW1lIGZvckRheSkKLXsK
LSAgICBBU1NFUlRfQVJHKGtleSwga2V5KTsKLQotICAgICprZXkgPSBkYXRlS2V5KGZvckRheSk7
Ci0gICAgcmV0dXJuIG1fZW50cmllc0J5RGF0ZS5jb250YWlucygqa2V5KTsKKyAgICByZXR1cm4g
U19PSzsKIH0KIAotSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRl
bSogZW50cnksIERhdGVLZXkgZGF0ZUtleSkKK0hSRVNVTFQgV2ViSGlzdG9yeTo6YWRkSXRlbVRv
RGF0ZUNhY2hlcyhJV2ViSGlzdG9yeUl0ZW0qIGVudHJ5KQogewogICAgIEFTU0VSVF9BUkcoZW50
cnksIGVudHJ5KTsKLSAgICBBU1NFUlRfQVJHKGRhdGVLZXksIG1fZW50cmllc0J5RGF0ZS5jb250
YWlucyhkYXRlS2V5KSk7CiAKLSAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBEQVRFIGxhc3RW
aXNpdGVkVGltZTsKKyAgICBlbnRyeS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJmxhc3RWaXNp
dGVkVGltZSk7CiAKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gRV9GQUlMOworICAg
IERhdGVLZXkga2V5ID0gZGF0ZUtleShsYXN0VmlzaXRlZFRpbWUpOworICAgIGF1dG8gZm91bmQg
PSBtX2VudHJpZXNCeURhdGUuZmluZChrZXkpOworICAgIGlmIChmb3VuZCA9PSBtX2VudHJpZXNC
eURhdGUuZW5kKCkpIHsKKyAgICAgICAgVmVjdG9yPENPTVB0cjxJV2ViSGlzdG9yeUl0ZW0+PiBl
bnRyaWVzKDEpOworICAgICAgICBlbnRyaWVzLmFwcGVuZChlbnRyeSk7CisgICAgICAgIG1fZW50
cmllc0J5RGF0ZS5zZXQoa2V5LCBlbnRyaWVzKTsKKyAgICAgICAgLy8gQ2xlYXIgbV9vcmRlcmVk
TGFzdFZpc2l0ZWREYXlzIHNvIGl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgd2hlbiBuZXh0IHJlcXVl
c3RlZC4KKyAgICAgICAgbV9vcmRlcmVkTGFzdFZpc2l0ZWREYXlzID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFNfT0s7CisgICAgfQogCi0gICAgREFURSBlbnRyeVRpbWU7Ci0gICAgZW50cnkt
Pmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZlbnRyeVRpbWUpOwotICAgIENGTXV0YWJsZUFycmF5
UmVmIGVudHJpZXNGb3JEYXRlID0gbV9lbnRyaWVzQnlEYXRlLmdldChkYXRlS2V5KS5nZXQoKTsK
LSAgICB1bnNpZ25lZCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChlbnRyaWVzRm9yRGF0ZSk7Cisg
ICAgYXV0byYgZW50cmllc0ZvckRhdGUgPSBmb3VuZC0+dmFsdWU7CisgICAgc2l6ZV90IGNvdW50
ID0gZW50cmllc0ZvckRhdGUuc2l6ZSgpOwogCiAgICAgLy8gVGhlIGVudHJpZXMgZm9yIGVhY2gg
ZGF5IGFyZSBzdG9yZWQgaW4gYSBzb3J0ZWQgYXJyYXkgd2l0aCB0aGUgbW9zdCByZWNlbnQgZW50
cnkgZmlyc3QKICAgICAvLyBDaGVjayBmb3IgdGhlIGNvbW1vbiBjYXNlcyBvZiB0aGUgZW50cnkg
YmVpbmcgbmV3ZXIgdGhhbiBhbGwgZXhpc3RpbmcgZW50cmllcyBvciB0aGUgZmlyc3QgZW50cnkg
b2YgdGhlIGRheQogICAgIGJvb2wgaXNOZXdlclRoYW5BbGxFbnRyaWVzID0gZmFsc2U7CiAgICAg
aWYgKGNvdW50KSB7Ci0gICAgICAgIElXZWJIaXN0b3J5SXRlbSogaXRlbSA9IGNvbnN0X2Nhc3Q8
SVdlYkhpc3RvcnlJdGVtKj4oc3RhdGljX2Nhc3Q8Y29uc3QgSVdlYkhpc3RvcnlJdGVtKj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChlbnRyaWVzRm9yRGF0ZSwgMCkpKTsKICAgICAgICAgREFURSBp
dGVtVGltZTsKLSAgICAgICAgaXNOZXdlclRoYW5BbGxFbnRyaWVzID0gU1VDQ0VFREVEKGl0ZW0t
Pmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZpdGVtVGltZSkpICYmIGl0ZW1UaW1lIDwgZW50cnlU
aW1lOworICAgICAgICBpc05ld2VyVGhhbkFsbEVudHJpZXMgPSBTVUNDRUVERUQoZW50cmllc0Zv
ckRhdGUuZmlyc3QoKS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYgaXRl
bVRpbWUgPCBsYXN0VmlzaXRlZFRpbWU7CiAgICAgfQogICAgIGlmICghY291bnQgfHwgaXNOZXdl
clRoYW5BbGxFbnRyaWVzKSB7Ci0gICAgICAgIENGQXJyYXlJbnNlcnRWYWx1ZUF0SW5kZXgoZW50
cmllc0ZvckRhdGUsIDAsIGVudHJ5KTsKKyAgICAgICAgZW50cmllc0ZvckRhdGUuaW5zZXJ0KDAs
IGVudHJ5KTsKICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgfQogCiAgICAgLy8gLi4gb3Igb2xk
ZXIgdGhhbiBhbGwgZXhpc3RpbmcgZW50cmllcwogICAgIGJvb2wgaXNPbGRlclRoYW5BbGxFbnRy
aWVzID0gZmFsc2U7CiAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICBJV2ViSGlzdG9yeUl0
ZW0qIGl0ZW0gPSBjb25zdF9jYXN0PElXZWJIaXN0b3J5SXRlbSo+KHN0YXRpY19jYXN0PGNvbnN0
IElXZWJIaXN0b3J5SXRlbSo+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZW50cmllc0ZvckRhdGUs
IGNvdW50IC0gMSkpKTsKICAgICAgICAgREFURSBpdGVtVGltZTsKLSAgICAgICAgaXNPbGRlclRo
YW5BbGxFbnRyaWVzID0gU1VDQ0VFREVEKGl0ZW0tPmxhc3RWaXNpdGVkVGltZUludGVydmFsKCZp
dGVtVGltZSkpICYmIGl0ZW1UaW1lID49IGVudHJ5VGltZTsKKyAgICAgICAgaXNPbGRlclRoYW5B
bGxFbnRyaWVzID0gU1VDQ0VFREVEKGVudHJpZXNGb3JEYXRlLmxhc3QoKS0+bGFzdFZpc2l0ZWRU
aW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkgJiYgaXRlbVRpbWUgPj0gbGFzdFZpc2l0ZWRUaW1lOwog
ICAgIH0KICAgICBpZiAoaXNPbGRlclRoYW5BbGxFbnRyaWVzKSB7Ci0gICAgICAgIENGQXJyYXlJ
bnNlcnRWYWx1ZUF0SW5kZXgoZW50cmllc0ZvckRhdGUsIGNvdW50LCBlbnRyeSk7CisgICAgICAg
IGVudHJpZXNGb3JEYXRlLmFwcGVuZChlbnRyeSk7CiAgICAgICAgIHJldHVybiBTX09LOwogICAg
IH0KIApAQCAtNzAzLDE5ICs2NjAsMTggQEAgSFJFU1VMVCBXZWJIaXN0b3J5OjppbnNlcnRJdGVt
KElXZWJIaXN0b3J5SXRlbSogZW50cnksIERhdGVLZXkgZGF0ZUtleSkKICAgICB1bnNpZ25lZCBo
aWdoID0gY291bnQ7CiAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgICAgdW5zaWduZWQg
bWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgSVdlYkhpc3RvcnlJdGVtKiBp
dGVtID0gY29uc3RfY2FzdDxJV2ViSGlzdG9yeUl0ZW0qPihzdGF0aWNfY2FzdDxjb25zdCBJV2Vi
SGlzdG9yeUl0ZW0qPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGVudHJpZXNGb3JEYXRlLCBtaWQp
KSk7CiAgICAgICAgIERBVEUgaXRlbVRpbWU7Ci0gICAgICAgIGlmIChGQUlMRUQoaXRlbS0+bGFz
dFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkpCisgICAgICAgIGlmIChGQUlMRUQoZW50
cmllc0ZvckRhdGVbbWlkXS0+bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWwoJml0ZW1UaW1lKSkpCiAg
ICAgICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgICAgIGlmIChpdGVtVGltZSA+PSBlbnRy
eVRpbWUpCisgICAgICAgIGlmIChpdGVtVGltZSA+PSBsYXN0VmlzaXRlZFRpbWUpCiAgICAgICAg
ICAgICBsb3cgPSBtaWQgKyAxOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBoaWdoID0gbWlk
OwogICAgIH0KIAogICAgIC8vIGxvdyBpcyBub3cgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbnRy
eSB0aGF0IGlzIG9sZGVyIHRoYW4gZW50cnlEYXRlCi0gICAgQ0ZBcnJheUluc2VydFZhbHVlQXRJ
bmRleChlbnRyaWVzRm9yRGF0ZSwgbG93LCBlbnRyeSk7CisgICAgZW50cmllc0ZvckRhdGUuaW5z
ZXJ0KGxvdywgZW50cnkpOwogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJIaXN0b3J5
LmgKaW5kZXggYWY2ZDZiYTljMDhjYjVhZWI2N2ZlYjkwMjk0ODJmYzg2NjliNDE1NS4uZDYyZjI2
ZmI4OGRhNjliMzgxMDhmZTVhYmUwZDc0ODgzYWUyZjU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vV2ViSGlzdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkhpc3Rvcnku
aApAQCAtMTE3LDggKzExNyw4IEBAIHB1YmxpYzoKICAgICBDT01QdHI8SVdlYkhpc3RvcnlJdGVt
PiBpdGVtRm9yVVJMU3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJikgY29uc3Q7CiAKICAgICB0eXBl
ZGVmIGludDY0X3QgRGF0ZUtleTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RGF0ZUtleSwgUmV0YWlu
UHRyPENGTXV0YWJsZUFycmF5UmVmPiA+IERhdGVUb0VudHJpZXNNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFdURjo6U3RyaW5nLCBDT01QdHI8SVdlYkhpc3RvcnlJdGVtPiA+IFVSTFRvRW50cmll
c01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8RGF0ZUtleSwgVmVjdG9yPENPTVB0cjxJV2ViSGlz
dG9yeUl0ZW0+Pj4gRGF0ZVRvRW50cmllc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpT
dHJpbmcsIENPTVB0cjxJV2ViSGlzdG9yeUl0ZW0+PiBVUkxUb0VudHJpZXNNYXA7CiAKIHByaXZh
dGU6CiAKQEAgLTEzOCw5ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIEhSRVNVTFQgcmVtb3ZlSXRl
bUZvclVSTFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYgdXJsU3RyaW5nKTsKICAgICBIUkVTVUxU
IGFkZEl0ZW1Ub0RhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7CiAgICAgSFJFU1VM
VCByZW1vdmVJdGVtRnJvbURhdGVDYWNoZXMoSVdlYkhpc3RvcnlJdGVtKiBlbnRyeSk7Ci0gICAg
SFJFU1VMVCBpbnNlcnRJdGVtKElXZWJIaXN0b3J5SXRlbSogZW50cnksIERhdGVLZXkpOwogICAg
IEhSRVNVTFQgYWdlTGltaXREYXRlKENGQWJzb2x1dGVUaW1lKiB0aW1lKTsKLSAgICBib29sIGZp
bmRLZXkoRGF0ZUtleSosIENGQWJzb2x1dGVUaW1lIGZvckRheSk7CiAgICAgc3RhdGljIENGQWJz
b2x1dGVUaW1lIHRpbWVUb0RhdGUoQ0ZBYnNvbHV0ZVRpbWUgdGltZSk7CiAgICAgQlNUUiBnZXRO
b3RpZmljYXRpb25TdHJpbmcoTm90aWZpY2F0aW9uVHlwZSBub3RpZnlUeXBlKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>