<?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>174062</bug_id>
          
          <creation_ts>2017-06-30 19:30:54 -0700</creation_ts>
          <short_desc>[WK2] Prevent ResourceLoadStatistics from triggering a cascade of read/write events</short_desc>
          <delta_ts>2017-07-05 12:05:26 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174111</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324719</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 19:30:54 -0700</bug_when>
    <thetext>We shouldn&apos;t allow the worker thread to consume high CPU resources. This worker should function as a background process, avoiding using the CPU when other work is going on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324720</commentid>
    <comment_count>1</comment_count>
      <attachid>314351</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 19:34:39 -0700</bug_when>
    <thetext>Created attachment 314351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324721</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-30 19:35:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/33090466&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324733</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 19:58:11 -0700</bug_when>
    <thetext>Upon further review, I notice the following:

1. WebResourceLoadStatisticsStore::syncWithExistingStatisticsStorageIfNeeded causes a new FileMonitor to be created. This is currently only called as part of processStatisticsAndDataRecords(), where writeStoreToDisk() is called after we turn off file monitoring as part of an update to the data file. So this seems like it may cause an extra chain of reads to be triggered, which is wasteful.

2. The other place it might be called is setWritePersistentStoreCallback(), which doesn&apos;t ever seem to be used. Still, this closure to always stop monitoring before the write, and begin monitoring again after the write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324734</commentid>
    <comment_count>4</comment_count>
      <attachid>314356</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-06-30 19:58:40 -0700</bug_when>
    <thetext>Created attachment 314356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325161</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-03 10:41:56 -0700</bug_when>
    <thetext>After testing a bit, we should run this thread as a Utility QOS, not a full Background thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325343</commentid>
    <comment_count>6</comment_count>
      <attachid>314542</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-03 17:21:19 -0700</bug_when>
    <thetext>Created attachment 314542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325585</commentid>
    <comment_count>7</comment_count>
      <attachid>314542</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-05 09:09:28 -0700</bug_when>
    <thetext>Comment on attachment 314542
Patch

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

&gt; Source/WebCore/platform/cocoa/FileMonitorCocoa.mm:66
&gt;          if (flag &amp; DISPATCH_VNODE_DELETE) {

Shouldn&apos;t be treat DISPATCH_VNODE_RENAME (and DISPATCH_VNODE_REVOKE) the same way as a delete as well? I think our behavior should be the same wether the db file is removed or moved out of the way.
Also, should we really listen for DISPATCH_VNODE_EXTEND since we already listen for DISPATCH_VNODE_WRITE?

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:273
&gt; +        return WallTime();

return { };

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:290
&gt; +        if (!fileExists(resourceLog)) {

Could be merged with the previous if case.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:297
&gt; +            // No need to grandfather in this case

Missing period at the end.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:389
&gt; +    m_statisticsFileLastReadTime = WallTime::now();

It is weird to update a member called named m_statisticsFileLastReadTime from a writeToDisk() function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:513
&gt; +    if (!fileExists(resourceLog))

Could be merged in previous if case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325587</commentid>
    <comment_count>8</comment_count>
      <attachid>314542</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-05 09:11:22 -0700</bug_when>
    <thetext>Comment on attachment 314542
Patch

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

&gt; Source/WebKit2/ChangeLog:9
&gt; +        We shouldn&apos;t allow the ResourceLoadStatistics worker thread to consume high CPU resources. Run it

While changing the work queue priority is probably a good thing here, I doubt this is the only fix needed for the extremely high CPU usage. You are changing a lot of things in this patch, could you please clarify what fixes the CPU usage issue and why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325593</commentid>
    <comment_count>9</comment_count>
      <attachid>314542</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-05 09:24:53 -0700</bug_when>
    <thetext>Comment on attachment 314542
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:9
&gt;&gt; +        We shouldn&apos;t allow the ResourceLoadStatistics worker thread to consume high CPU resources. Run it
&gt; 
&gt; While changing the work queue priority is probably a good thing here, I doubt this is the only fix needed for the extremely high CPU usage. You are changing a lot of things in this patch, could you please clarify what fixes the CPU usage issue and why?

We don&apos;t have a lot of control over how much CPU is used while reading/writing the data file. So, I tried to address the issue by preventing the process from doing the expensive operation more often than necessary.

1. The &apos;makeRefPtr&apos; call in FileMonitor::startMonitoring captured a reference to itself, preventing the FileMonitor from being destroyed. This caused the file modification handler to fire in response to our own write events, creating a ridiculous read/write cycle. I&apos;m sure this was a huge part of the problem. This was addressed by stopping the file monitor in WebResourceLoadStatisticsStore::stopMonitoringStatisticsStorage, rather than relying on the destructor to shut things down. Perhaps there is a tidier way to do so.
2. The work queue priority was higher than it needs to be for this process, which might have contributed to the problem.
3. I found that &apos;syncWithExistingStatisticsStoageIfNeeded&apos; was creating a FileMonitor during our write operation, which exacerbated the chain of read/writes already present due to the self-reference I described above.
4. Because VNODE dispatch sources are low level, they do not offer a means of filtering out operations triggered by the current process. To avoid this, I added code to track the file modification time, so that we don&apos;t bother reading a file that holds data that is older than the in-memory data, even though we receive a file modification dispatch. Writes seem to trigger a chain of notification events in rapid succession. Once&apos; we&apos;ve responded to the first of these events, we don&apos;t need to to further reads until the data on disk changes again.

These changes may not prevent CF from using 100% cpu when serializing a file, but at least we will no longer have to experience this CPU use for long periods of time, or as a cascade of read/write/read events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325601</commentid>
    <comment_count>10</comment_count>
      <attachid>314542</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-05 09:38:17 -0700</bug_when>
    <thetext>Comment on attachment 314542
Patch

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

&gt;&gt; Source/WebCore/platform/cocoa/FileMonitorCocoa.mm:66
&gt;&gt;          if (flag &amp; DISPATCH_VNODE_DELETE) {
&gt; 
&gt; Shouldn&apos;t be treat DISPATCH_VNODE_RENAME (and DISPATCH_VNODE_REVOKE) the same way as a delete as well? I think our behavior should be the same wether the db file is removed or moved out of the way.
&gt; Also, should we really listen for DISPATCH_VNODE_EXTEND since we already listen for DISPATCH_VNODE_WRITE?

DISPATCH_VNODE_RENAME and DISPATCH_VNODE_REVOKE do make sense as DELETE proxies. I&apos;ll change that.

I wasn&apos;t sure if we received DISPATCH_VNODE_EXTEND in the absence of DISPATCH_VNODE_WRITE; I suppose it makes sense to ignore EXTEND if we are listening for WRITE since they seem to occur in close proximity during writes that make the file larger.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:273
&gt;&gt; +        return WallTime();
&gt; 
&gt; return { };

Will fix.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:290
&gt;&gt; +        if (!fileExists(resourceLog)) {
&gt; 
&gt; Could be merged with the previous if case.

OK.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:297
&gt;&gt; +            // No need to grandfather in this case
&gt; 
&gt; Missing period at the end.

Will fix.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:389
&gt;&gt; +    m_statisticsFileLastReadTime = WallTime::now();
&gt; 
&gt; It is weird to update a member called named m_statisticsFileLastReadTime from a writeToDisk() function.

I can rename it to &quot;m_statisticsFileLastModificationTime&quot;. This is meant to avoid reading a file that contains no new information.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:513
&gt;&gt; +    if (!fileExists(resourceLog))
&gt; 
&gt; Could be merged in previous if case.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325602</commentid>
    <comment_count>11</comment_count>
      <attachid>314542</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-05 09:40:23 -0700</bug_when>
    <thetext>Comment on attachment 314542
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:389
&gt;&gt;&gt; +    m_statisticsFileLastReadTime = WallTime::now();
&gt;&gt; 
&gt;&gt; It is weird to update a member called named m_statisticsFileLastReadTime from a writeToDisk() function.
&gt; 
&gt; I can rename it to &quot;m_statisticsFileLastModificationTime&quot;. This is meant to avoid reading a file that contains no new information.

Or m_lastStatisticsFileSyncTime?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325612</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-05 10:05:36 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; Comment on attachment 314542 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314542&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:389
&gt; &gt;&gt;&gt; +    m_statisticsFileLastReadTime = WallTime::now();
&gt; &gt;&gt; 
&gt; &gt;&gt; It is weird to update a member called named m_statisticsFileLastReadTime from a writeToDisk() function.
&gt; &gt; 
&gt; &gt; I can rename it to &quot;m_statisticsFileLastModificationTime&quot;. This is meant to avoid reading a file that contains no new information.
&gt; 
&gt; Or m_lastStatisticsFileSyncTime?

Yes! I&apos;ll use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325628</commentid>
    <comment_count>13</comment_count>
      <attachid>314613</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-05 10:24:50 -0700</bug_when>
    <thetext>Created attachment 314613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325635</commentid>
    <comment_count>14</comment_count>
      <attachid>314613</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-05 10:40:30 -0700</bug_when>
    <thetext>Comment on attachment 314613
Patch

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

r=me with changes.

&gt; Source/WebCore/platform/FileMonitor.h:53
&gt; +#if USE(COCOA_EVENT_LOOP)

I wish we did not have to add an extra #if in this class&apos; API. Do we really need to expose this?

&gt; Source/WebCore/platform/cocoa/FileMonitorCocoa.mm:70
&gt;          } else

Can we please ASSERT(flag &amp; DISPATCH_VNODE_WRITE); in the else case?

&gt; Source/WebKit2/ChangeLog:11
&gt; +        (1) The &apos;makeRefPtr&apos; call in FileMonitor::startMonitoring was capturing a reference to itself, preventing

As discussed offline, we should consider using a WeakPtr instead of a RefPtr to address this issue in a follow-up.

&gt; Source/WebKit2/ChangeLog:17
&gt; +        (2) &apos;syncWithExistingStatisticsStoageIfNeeded&apos; was creating a FileMonitor during the write operation,

typo: stoage.

&gt; Source/WebKit2/ChangeLog:27
&gt; +        as a utility process, avoiding using the CPU when other work is going on.

s/as a utility process/as utility QoS/

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:291
&gt; +        if (fileModificationTime &lt;= m_lastStatisticsFileSyncTime) {

Can we move move these 2 lines to a utility method?
bool WebResourceLoadStatisticsStore::hasStatisticFileChangedSinceLastSync(path)
{
    return statisticsFileModificationTime(path) &gt; m_lastStatisticsFileSyncTime;
}

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:292
&gt; +            // No need to grandfather in this case.n

typo, extra &apos;n&apos;.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:325
&gt; +    WallTime fileModificationTime = statisticsFileModificationTime(resourceLog);

Could use utility function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:336
&gt; +    auto monitor = m_statisticsStorageMonitor ? m_statisticsStorageMonitor-&gt;platformMonitor() : nullptr;

This means non-cocoa WK2 ports will no longer be able to enable logging at compile time. I don&apos;t think we should expose the underlying monitor.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:430
&gt; +    auto monitor = m_statisticsStorageMonitor ? m_statisticsStorageMonitor-&gt;platformMonitor() : nullptr;

Ditto about build breakage for other ports.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:492
&gt; +    // The FileMonitor captures itself, incrementing its refcount. Manually stopping the monitor shuts down the lambda holding the extra

Should probably be a FIXME comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325688</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-05 12:05:26 -0700</bug_when>
    <thetext>Committed r219144: &lt;http://trac.webkit.org/changeset/219144&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314351</attachid>
            <date>2017-06-30 19:34:39 -0700</date>
            <delta_ts>2017-06-30 19:58:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174062-20170630193436.patch</filename>
            <type>text/plain</type>
            <size>1842</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA2LTMwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIFJ1biBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIHdvcmtlciBhcyBhIGJhY2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwNjJcCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMzA4Njc0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6IFJ1biBvdXIgd29ya2VyIHF1ZXVlCisg
ICAgICAgIGFzIGEgYmFja2dyb3VuZC1sZXZlbCBwcm9jZXNzLgorCiAyMDE3LTA2LTMwICBNZWdh
biBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEFQSSB0
byBnZXQgV0tBY3RpdmF0ZWRFbGVtZW50SW5mbwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHJldmlzaW9uIDIxOTAyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBA
IFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlIKIAogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3Qg
U3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogICAgIDogbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUo
KSkKLSAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikpCisgICAgLCBtX3N0YXRp
c3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVl
dWU6OlFPUzo6QmFja2dyb3VuZCkpCiAgICAgLCBtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aChyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogICAgICwgbV90ZWxlbWV0cnlPbmVTaG90VGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp0ZWxlbWV0cnlUaW1lckZpcmVkKQogICAgICwgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVs
ZW1ldHJ5VGltZXJGaXJlZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314356</attachid>
            <date>2017-06-30 19:58:40 -0700</date>
            <delta_ts>2017-07-03 17:21:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174062-20170630195837.patch</filename>
            <type>text/plain</type>
            <size>2740</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTAzNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA2LTMwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIFJ1biBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIHdvcmtlciBhcyBhIGJhY2tncm91bmQgdGhyZWFkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwNjJcCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8zMzA4Njc0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6IFJ1biBvdXIgd29ya2VyIHF1ZXVlCisg
ICAgICAgIGFzIGEgYmFja2dyb3VuZC1sZXZlbCBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyU2hhcmVkUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIpOiBTdG9wIGNoZWNraW5nIGZvcgorICAgICAgICB1cGRhdGVzIGJlZm9yZSB3cml0
aW5nLCBhbmQgYmVnaW4gY2hlY2tpbmcgYWdhaW4gb25jZSB0aGUgd3JpdGUgaXMgY29tcGxldGUu
CisKIDIwMTctMDYtMzAgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgQVBJIHRvIGdldCBXS0FjdGl2YXRlZEVsZW1lbnRJbmZvCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE5MDI4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDcgQEAgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4g
V2ViUgogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkpCiAgICAgOiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQotICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1ZXVl
OjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEgUXVl
dWUiKSkKKyAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpCYWNrZ3JvdW5kKSkKICAgICAsIG1fc3RhdGlz
dGljc1N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiAgICAgLCBt
X3RlbGVtZXRyeU9uZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiAgICAgLCBtX3RlbGVt
ZXRyeVJlcGVhdGVkVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQpAQCAtMjIyLDcgKzIyMiw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWcKICAgICB9KTsKICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVDYWxs
YmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CiAgICAgICAgIG1f
c3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3Rl
ZFRoaXMuY29weVJlZigpXSB7CisgICAgICAgICAgICBzdG9wTW9uaXRvcmluZ1N0YXRpc3RpY3NT
dG9yYWdlKCk7CiAgICAgICAgICAgICB3cml0ZVN0b3JlVG9EaXNrKCk7CisgICAgICAgICAgICBz
dGFydE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFnZSgpOwogICAgICAgICB9KTsKICAgICB9KTsK
ICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJFeGlzdGlu
Z1dlYnNpdGVEYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewpAQCAtNDQ3LDggKzQ0OSw2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzeW4KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHJlZnJlc2hGcm9tRGlzaygpOwot
ICAgIAotICAgIHN0YXJ0TW9uaXRvcmluZ1N0YXRpc3RpY3NTdG9yYWdlKCk7CiB9CiAgICAgCiAg
ICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314542</attachid>
            <date>2017-07-03 17:21:19 -0700</date>
            <delta_ts>2017-07-05 10:24:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174062-20170703172119.patch</filename>
            <type>text/plain</type>
            <size>15228</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA3LTAzICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIFJ1biBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIHdvcmtlciBhcyBhIHV0aWxpdHkgdGhyZWFkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwNjJcCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zMzA4Njc0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGVzZSBjaGFuZ2VzIGp1c3QgYWRkIHNvbWUgbG9nZ2luZyBkb25lIGlu
IHN1cHBvcnQgb2YgYWRkcmVzc2luZyB0aGUgaGlnaCBDUFUgdXNlIGluIFdlYktpdDIuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9GaWxlTW9uaXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZU1v
bml0b3I6OnBsYXRmb3JtTW9uaXRvcik6IEV4cG9zZSBkaXNwYXRjaF9zb3VyY2VfdCBmb3IgbG9n
Z2luZyBwdXJwb3Nlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9GaWxlTW9uaXRvckNvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsZU1vbml0b3I6OnN0YXJ0TW9uaXRvcmluZyk6IEFk
ZCBsb2dnaW5nLgorICAgICAgICAoV2ViQ29yZTo6RmlsZU1vbml0b3I6OnN0b3BNb25pdG9yaW5n
KTogRGl0dG8uCisKIDIwMTctMDctMDMgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29t
PgogCiAgICAgICAgIE51bGwgUmVuZGVyTGF5ZXIqIGRlcmVmIGluIEZyYW1lVmlldzo6YWRqdXN0
VGlsZWRCYWNraW5nQ292ZXJhZ2UoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZU1vbml0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTW9u
aXRvci5oCShyZXZpc2lvbiAyMTkxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
TW9uaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFydE1vbml0b3JpbmcoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0b3BNb25pdG9yaW5nKCk7CiAKKyNpZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKKyAg
ICBXRUJDT1JFX0VYUE9SVCBkaXNwYXRjaF9zb3VyY2VfdCBwbGF0Zm9ybU1vbml0b3IoKSBjb25z
dCB7IHJldHVybiBtX3BsYXRmb3JtTW9uaXRvci5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6
CiAgICAgRmlsZU1vbml0b3IoY29uc3QgU3RyaW5nJiwgUmVmPFdvcmtRdWV1ZT4mJiBoYW5kbGVy
UXVldWUsIFdURjo6RnVuY3Rpb248dm9pZChGaWxlQ2hhbmdlVHlwZSk+JiYgbW9kaWZpY2F0aW9u
SGFuZGxlcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0ZpbGVNb25p
dG9yQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
RmlsZU1vbml0b3JDb2NvYS5tbQkocmV2aXNpb24gMjE5MTA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRmlsZU1vbml0b3JDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMs
MTMgKzUzLDE2IEBAIHZvaWQgRmlsZU1vbml0b3I6OnN0YXJ0TW9uaXRvcmluZygpCiAgICAgfQog
CiAgICAgbV9wbGF0Zm9ybU1vbml0b3IgPSBhZG9wdERpc3BhdGNoKGRpc3BhdGNoX3NvdXJjZV9j
cmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfVk5PREUsIGhhbmRsZSwgbW9uaXRvck1hc2ssIG1f
aGFuZGxlclF1ZXVlLT5kaXNwYXRjaFF1ZXVlKCkpKTsKLSAgICAKKworICAgIExPRyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCAiQ3JlYXRpbmcgbW9uaXRvciAlcCIsIHBsYXRmb3JtTW9uaXRvcigp
KTsKKwogICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3BsYXRmb3JtTW9u
aXRvci5nZXQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCBmaWxl
TW9uaXRvciA9IG1fcGxhdGZvcm1Nb25pdG9yLmdldCgpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
Ly8gSWYgdGhpcyBpcyBnZXR0aW5nIGNhbGxlZCBhZnRlciB0aGUgbW9uaXRvciB3YXMgY2FuY2Vs
bGVkLCBqdXN0IGRyb3AgdGhlIG5vdGlmaWNhdGlvbi4KICAgICAgICAgaWYgKGRpc3BhdGNoX3Nv
dXJjZV90ZXN0Y2FuY2VsKGZpbGVNb25pdG9yKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB1bnNpZ25lZCBmbGFnID0gZGlzcGF0Y2hfc291cmNlX2dldF9kYXRhKGZpbGVNb25pdG9y
KTsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJGaWxlIGV2ZW50ICUjWCBm
b3IgbW9uaXRvciAlcCIsIGZsYWcsIGZpbGVNb25pdG9yKTsKICAgICAgICAgaWYgKGZsYWcgJiBE
SVNQQVRDSF9WTk9ERV9ERUxFVEUpIHsKICAgICAgICAgICAgIG1fbW9kaWZpY2F0aW9uSGFuZGxl
cihGaWxlQ2hhbmdlVHlwZTo6UmVtb3ZhbCk7CiAgICAgICAgICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGZpbGVNb25pdG9yKTsKQEAgLTc5LDcgKzgyLDkgQEAgdm9pZCBGaWxlTW9uaXRvcjo6
c3RvcE1vbml0b3JpbmcoKQogewogICAgIGlmICghbV9wbGF0Zm9ybU1vbml0b3IpCiAgICAgICAg
IHJldHVybjsKLSAgICAKKworICAgIExPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiU3RvcHBp
bmcgbW9uaXRvciAlcCIsIHBsYXRmb3JtTW9uaXRvcigpKTsKKwogICAgIGRpc3BhdGNoX3NvdXJj
ZV9jYW5jZWwobV9wbGF0Zm9ybU1vbml0b3IuZ2V0KCkpOwogICAgIG1fcGxhdGZvcm1Nb25pdG9y
ID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTEwOSkKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE3
LTA3LTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtX
SzJdIFJ1biBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHdvcmtlciBhcyBhIHV0aWxpdHkgdGhyZWFk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwNjJc
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzA4Njc0ND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBzaG91bGRuJ3QgYWxsb3cgdGhlIFJlc291
cmNlTG9hZFN0YXRpc3RpY3Mgd29ya2VyIHRocmVhZCB0byBjb25zdW1lIGhpZ2ggQ1BVIHJlc291
cmNlcy4gUnVuIGl0CisgICAgICAgIGFzIGEgdXRpbGl0eSBwcm9jZXNzLCBhdm9pZGluZyB1c2lu
ZyB0aGUgQ1BVIHdoZW4gb3RoZXIgd29yayBpcyBnb2luZyBvbi4KKworICAgICAgICBGaXggdHdv
IG90aGVyIGJ1Z3MgcmVsYXRlZCB0byBhY2Nlc3NpbmcgdGhlIHN0YXRpc3RpY3MgZmlsZXM6Cisg
ICAgICAgICgxKSBzeW5jV2l0aEV4aXN0aW5nU3RhdGlzdGljc1N0b3JhZ2VJZk5lZWRlZCBjYXVz
ZXMgYSBuZXcgRmlsZU1vbml0b3IgdG8gYmUgY3JlYXRlZC4gVGhpcyBjb2RlIGlzIG9ubHkKKyAg
ICAgICAgICAgIGNhbGxlZCBhcyBwYXJ0IG9mIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKSwgd2hlcmUgd3JpdGVTdG9yZVRvRGlzaygpIGlzIGNhbGxlZCBhZnRlciB3ZSB0dXJuCisg
ICAgICAgICAgICBvZmYgZmlsZSBtb25pdG9yaW5nIGFzIHBhcnQgb2YgYW4gdXBkYXRlIHRvIHRo
ZSBkYXRhIGZpbGUuIENyZWF0aW5nIHRoaXMgRmlsZU1vbml0b3IgY2F1c2VzIGFuIGV4dHJhCisg
ICAgICAgICAgICBjaGFpbiBvZiByZWFkcyB0byBiZSB0cmlnZ2VyZWQsIHdoaWNoIGlzIHdhc3Rl
ZnVsLgorICAgICAgICAoMikgVGhlIGNsb3N1cmUgaW4gc2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVD
YWxsYmFjaygpIHNob3VsZCBzdG9wIG1vbml0b3JpbmcgYmVmb3JlIHdyaXRpbmcgZGF0YSwgYW5k
CisgICAgICAgICAgICBzaG91bGQgc3RhcnQgbW9uaXRvcmluZyBhZnRlciB0aGUgd3JpdGUgY29t
cGxldGVzLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKTogUnVuIG91ciB3b3JrZXIgcXVldWUK
KyAgICAgICAgYXMgYSB1dGlsaXR5LWxldmVsIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRP
YnNlcnZlcik6IFN0b3AgY2hlY2tpbmcgZm9yCisgICAgICAgIHVwZGF0ZXMgYmVmb3JlIHdyaXRp
bmcsIGFuZCBiZWdpbiBjaGVja2luZyBhZ2FpbiBvbmNlIHRoZSB3cml0ZSBpcyBjb21wbGV0ZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0
aWNzRmlsZU1vZGlmaWNhdGlvblRpbWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWFkRGF0YUZyb21EaXNrSWZOZWVkZWQpOiBBdm9p
ZCByZWFkaW5nIHRoZSBmaWxlIGlmIGl0CisgICAgICAgIHdhcyBsYXN0IG1vZGlmaWVkIG9uIChv
ciBiZWZvcmUpIHRoZSB0aW1lIHdlIGxhc3QgcmVhZCB0aGUgZmlsZS4KKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWZyZXNoRnJvbURpc2spOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzeW5j
V2l0aEV4aXN0aW5nU3RhdGlzdGljc1N0b3JhZ2VJZk5lZWRlZCk6IERvIG5vdCBiZWdpbgorICAg
ICAgICBtb25pdG9yaW5nIHRoZSBmaWxlIGFmdGVyIHN5bmNpbmcsIHNpbmNlIHRoaXMgaXMgb25s
eSB1c2VkIGFzIHBhcnQgb2YgYW4gb25nb2luZyB3cml0ZSBvcGVyYXRpb24uCisKIDIwMTctMDct
MDMgIE1hdHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZC9yZW1vdmUg
YXBwcm9wcmlhdGUgbWVkaWEgZWxlbWVudCBiZWhhdmlvciByZXN0cmljdGlvbnMgd2hlbiB1cGRh
dGVXZWJzaXRlUG9saWNpZXMgaXMgY2FsbGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAko
cmV2aXNpb24gMjE5MTA5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKICNpZiBQTEFURk9STShD
T0NPQSkKQEAgLTkzLDcgKzk0LDcgQEAgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gV2ViUgogCiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnkpCiAgICAgOiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQotICAgICwgbV9zdGF0aXN0aWNzUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBQcm9jZXNzIERhdGEg
UXVldWUiKSkKKyAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIiwgV29ya1F1ZXVl
OjpUeXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpVdGlsaXR5KSkKICAgICAsIG1fc3RhdGlz
dGljc1N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiAgICAgLCBt
X3RlbGVtZXRyeU9uZVNob3RUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnRlbGVtZXRyeVRpbWVyRmlyZWQpCiAgICAgLCBtX3RlbGVt
ZXRyeVJlcGVhdGVkVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0ZWxlbWV0cnlUaW1lckZpcmVkKQpAQCAtMjE5LDcgKzIyMCw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWcKICAgICB9KTsKICAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0V3JpdGVQZXJzaXN0ZW50U3RvcmVDYWxs
YmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CiAgICAgICAgIG1f
c3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3Rl
ZFRoaXMuY29weVJlZigpXSB7CisgICAgICAgICAgICBzdG9wTW9uaXRvcmluZ1N0YXRpc3RpY3NT
dG9yYWdlKCk7CiAgICAgICAgICAgICB3cml0ZVN0b3JlVG9EaXNrKCk7CisgICAgICAgICAgICBz
dGFydE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFnZSgpOwogICAgICAgICB9KTsKICAgICB9KTsK
ICAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJFeGlzdGlu
Z1dlYnNpdGVEYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewpAQCAtMjYyLDEzICsyNjUsNDIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmdyYQogICAgIH0pOwogfQogCitXYWxsVGltZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBh
dGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgdGltZV90
IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRo
LCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIFdhbGxUaW1lKCk7CisKKyAgICBy
ZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKG1vZGlmaWNhdGlvblRpbWUpOworfQorCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9tRGlza0lmTmVl
ZGVkKCkKIHsKICAgICBpZiAoIW1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIGF1dG8gZGVjb2RlciA9IGNy
ZWF0ZURlY29kZXJGcm9tRGlzayhBU0NJSUxpdGVyYWwoImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbiIp
KTsKKyAgICAgICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVyc2lzdGVudFN0b3JhZ2VQYXRoKEFT
Q0lJTGl0ZXJhbCgiZnVsbF9icm93c2luZ19zZXNzaW9uIikpOworICAgICAgICBpZiAocmVzb3Vy
Y2VMb2cuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0
ZURhdGEoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
ZmlsZUV4aXN0cyhyZXNvdXJjZUxvZykpIHsKKyAgICAgICAgICAgIGdyYW5kZmF0aGVyRXhpc3Rp
bmdXZWJzaXRlRGF0YSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgV2FsbFRpbWUgZmlsZU1vZGlmaWNhdGlvblRpbWUgPSBzdGF0aXN0aWNzRmlsZU1vZGlmaWNh
dGlvblRpbWUocmVzb3VyY2VMb2cpOworICAgICAgICBpZiAoZmlsZU1vZGlmaWNhdGlvblRpbWUg
PD0gbV9zdGF0aXN0aWNzRmlsZUxhc3RSZWFkVGltZSkgeworICAgICAgICAgICAgLy8gTm8gbmVl
ZCB0byBncmFuZGZhdGhlciBpbiB0aGlzIGNhc2UKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIFdhbGxUaW1lIHJlYWRUaW1lID0gV2FsbFRpbWU6Om5vdygpOworCisg
ICAgICAgIGF1dG8gZGVjb2RlciA9IGNyZWF0ZURlY29kZXJGcm9tRGlzayhyZXNvdXJjZUxvZyk7
CiAgICAgICAgIGlmICghZGVjb2RlcikgewogICAgICAgICAgICAgZ3JhbmRmYXRoZXJFeGlzdGlu
Z1dlYnNpdGVEYXRhKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzcsNiArMzA5LDggQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYQogICAgICAgICBjb3JlU3Rv
cmUoKS5jbGVhckluTWVtb3J5KCk7CiAgICAgICAgIGNvcmVTdG9yZSgpLnJlYWREYXRhRnJvbURl
Y29kZXIoKmRlY29kZXIpOwogCisgICAgICAgIG1fc3RhdGlzdGljc0ZpbGVMYXN0UmVhZFRpbWUg
PSByZWFkVGltZTsKKwogICAgICAgICBpZiAoY29yZVN0b3JlKCkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKCk7CiAgICAgfSk7CkBAIC0yODUs
MTEgKzMxOSwzMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVmcmVzaEZyb21EaXNrKCkKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBhdXRvIGRlY29kZXIgPSBjcmVh
dGVEZWNvZGVyRnJvbURpc2soQVNDSUlMaXRlcmFsKCJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKSk7
CisKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2cgPSBwZXJzaXN0ZW50U3RvcmFnZVBhdGgoQVNDSUlM
aXRlcmFsKCJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKSk7CisgICAgaWYgKHJlc291cmNlTG9nLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugc29tZXRpbWVzIHNlZSBmaWxl
IGNoYW5nZWQgZXZlbnRzIGZyb20gYmVmb3JlIG91ciBsb2FkIGNvbXBsZXRlZCAod2Ugc3RhcnQK
KyAgICAvLyByZWFkaW5nIGF0IHRoZSBmaXJzdCBjaGFuZ2UgZXZlbnQsIGJ1dCB3ZSBtaWdodCBy
ZWNlaXZlIGEgc2VyaWVzIG9mIGV2ZW50cyByZWxhdGVkCisgICAgLy8gdG8gdGhlIHNhbWUgZmls
ZSBvcGVyYXRpb24pLiBDYXRjaCB0aGlzIGNhc2UgdG8gYXZvaWQgcmVhZGluZyBvdmVybHkgb2Z0
ZW4uCisgICAgV2FsbFRpbWUgZmlsZU1vZGlmaWNhdGlvblRpbWUgPSBzdGF0aXN0aWNzRmlsZU1v
ZGlmaWNhdGlvblRpbWUocmVzb3VyY2VMb2cpOworICAgIGlmIChmaWxlTW9kaWZpY2F0aW9uVGlt
ZSA8PSBtX3N0YXRpc3RpY3NGaWxlTGFzdFJlYWRUaW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXYWxsVGltZSByZWFkVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKworICAgIGF1dG8gZGVjb2Rl
ciA9IGNyZWF0ZURlY29kZXJGcm9tRGlzayhyZXNvdXJjZUxvZyk7CiAgICAgaWYgKCFkZWNvZGVy
KQogICAgICAgICByZXR1cm47CiAKKyNpZm5kZWYgTE9HX0RJU0FCTEVECisgICAgYXV0byBtb25p
dG9yID0gbV9zdGF0aXN0aWNzU3RvcmFnZU1vbml0b3IgPyBtX3N0YXRpc3RpY3NTdG9yYWdlTW9u
aXRvci0+cGxhdGZvcm1Nb25pdG9yKCkgOiBudWxscHRyOworICAgIExPRyhSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCAiUmVhZGluZyBkYXRhIHdpdGggbW9uaXRvciAlcCBhY3RpdmUiLCBtb25pdG9y
KTsKKyNlbmRpZgorCiAgICAgY29yZVN0b3JlKCkucmVhZERhdGFGcm9tRGVjb2RlcigqZGVjb2Rl
cik7CisgICAgbV9zdGF0aXN0aWNzRmlsZUxhc3RSZWFkVGltZSA9IHJlYWRUaW1lOwogfQogICAg
IAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NXaWxsT3BlbkNv
bm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5JiwgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQpA
QCAtMzI4LDcgKzM4MiwxMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
d3JpCiAgICAgc3luY1dpdGhFeGlzdGluZ1N0YXRpc3RpY3NTdG9yYWdlSWZOZWVkZWQoKTsKIAog
ICAgIGF1dG8gZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpOwot
ICAgIHdyaXRlRW5jb2RlclRvRGlzaygqZW5jb2Rlci5nZXQoKSwgImZ1bGxfYnJvd3Npbmdfc2Vz
c2lvbiIpOworCisgICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVyc2lzdGVudFN0b3JhZ2VQYXRo
KEFTQ0lJTGl0ZXJhbCgiZnVsbF9icm93c2luZ19zZXNzaW9uIikpOworICAgIHdyaXRlRW5jb2Rl
clRvRGlzaygqZW5jb2Rlci5nZXQoKSwgcmVzb3VyY2VMb2cpOworCisgICAgbV9zdGF0aXN0aWNz
RmlsZUxhc3RSZWFkVGltZSA9IFdhbGxUaW1lOjpub3coKTsKIH0KIAogc3RhdGljIFBsYXRmb3Jt
RmlsZUhhbmRsZSBvcGVuQW5kTG9ja0ZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1v
ZGUgbW9kZSkKQEAgLTM1Niw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUFuZFVubG9ja0Zp
bGUoUGxhdGZvcm1GCiAgICAgY2xvc2VGaWxlKGhhbmRsZSk7CiB9CiAKLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp3cml0ZUVuY29kZXJUb0Rpc2soS2V5ZWRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdAordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OndyaXRlRW5jb2RlclRvRGlzayhLZXllZEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKQEAgLTM2NCwxOSArNDIyLDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjp3cmkKICAgICBpZiAoIXJhd0RhdGEpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFN0cmluZyByZXNvdXJjZUxvZyA9IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChsYWJlbCk7Ci0g
ICAgaWYgKHJlc291cmNlTG9nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYg
KCFtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgbWFrZUFsbERp
cmVjdG9yaWVzKG1fc3RhdGlzdGljc1N0b3JhZ2VQYXRoKTsKICAgICAgICAgcGxhdGZvcm1FeGNs
dWRlRnJvbUJhY2t1cCgpOwogICAgIH0KIAotICAgIGF1dG8gaGFuZGxlID0gb3BlbkFuZExvY2tG
aWxlKHJlc291cmNlTG9nLCBPcGVuRm9yV3JpdGUpOworICAgIGF1dG8gaGFuZGxlID0gb3BlbkFu
ZExvY2tGaWxlKHBhdGgsIE9wZW5Gb3JXcml0ZSk7CiAgICAgaWYgKGhhbmRsZSA9PSBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyNpZm5kZWYgTE9H
X0RJU0FCTEVECisgICAgYXV0byBtb25pdG9yID0gbV9zdGF0aXN0aWNzU3RvcmFnZU1vbml0b3Ig
PyBtX3N0YXRpc3RpY3NTdG9yYWdlTW9uaXRvci0+cGxhdGZvcm1Nb25pdG9yKCkgOiBudWxscHRy
OworICAgIExPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV3JpdGluZyBkYXRhIHdpdGggbW9u
aXRvciAlcCBhY3RpdmUiLCBtb25pdG9yKTsKKyNlbmRpZgorCiAgICAgaW50NjRfdCB3cml0dGVu
Qnl0ZXMgPSB3cml0ZVRvRmlsZShoYW5kbGUsIHJhd0RhdGEtPmRhdGEoKSwgcmF3RGF0YS0+c2l6
ZSgpKTsKICAgICBjbG9zZUFuZFVubG9ja0ZpbGUoaGFuZGxlKTsKIApAQCAtNDMyLDYgKzQ5MSwx
MiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhCiB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFn
ZSgpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKCFtX3N0YXRp
c3RpY3NTdG9yYWdlTW9uaXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIEZpbGVN
b25pdG9yIGNhcHR1cmVzIGl0c2VsZiwgaW5jcmVtZW50aW5nIGl0cyByZWZjb3VudC4gTWFudWFs
bHkgc3RvcHBpbmcgdGhlIG1vbml0b3Igc2h1dHMgZG93biB0aGUgbGFtYmRhIGhvbGRpbmcgdGhl
IGV4dHJhCisgICAgLy8gcmVmZXJlbmNlLCBzbyB0aGUgb2JqZWN0IHdpbGwgYmUgY2xlYW5lZCB1
cCBwcm9wZXJseS4KKyAgICBtX3N0YXRpc3RpY3NTdG9yYWdlTW9uaXRvci0+c3RvcE1vbml0b3Jp
bmcoKTsKICAgICBtX3N0YXRpc3RpY3NTdG9yYWdlTW9uaXRvciA9IG51bGxwdHI7CiB9CiAKQEAg
LTQ0MCwxMCArNTA1LDE1IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
eW4KICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmFnZU1vbml0b3IpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIFN0cmluZyByZXNv
dXJjZUxvZyA9IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChBU0NJSUxpdGVyYWwoImZ1bGxfYnJvd3Np
bmdfc2Vzc2lvbiIpKTsKKyAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWZpbGVFeGlzdHMocmVzb3VyY2VMb2cpKQorICAgICAgICByZXR1
cm47CisKICAgICByZWZyZXNoRnJvbURpc2soKTsKLSAgICAKLSAgICBzdGFydE1vbml0b3JpbmdT
dGF0aXN0aWNzU3RvcmFnZSgpOwogfQogICAgIAogICAgIApAQCAtNDU0LDE0ICs1MjQsMTAgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBsYQogfQogI2VuZGlmCiAKLXN0
ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0CitzdGQ6
OnVuaXF1ZV9wdHI8S2V5ZWREZWNvZGVyPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNyZWF0ZURlY29kZXJGcm9tRGlzayhjb25zdCBTdHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgU3RyaW5nIHJlc291cmNlTG9nID0gcGVy
c2lzdGVudFN0b3JhZ2VQYXRoKGxhYmVsKTsKLSAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaGFuZGxlID0gb3BlbkFuZExv
Y2tGaWxlKHJlc291cmNlTG9nLCBPcGVuRm9yUmVhZCk7CisgICAgYXV0byBoYW5kbGUgPSBvcGVu
QW5kTG9ja0ZpbGUocGF0aCwgT3BlbkZvclJlYWQpOwogICAgIGlmIChoYW5kbGUgPT0gaW52YWxp
ZFBsYXRmb3JtRmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTkxMDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFdhbGxU
aW1lOwogY2xhc3MgV29ya1F1ZXVlOwogfQogCkBAIC0xMjEsOCArMTIyLDkgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSgpOwogCiAgICAgdm9pZCB3
cml0ZVN0b3JlVG9EaXNrKCk7Ci0gICAgdm9pZCB3cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6
S2V5ZWRFbmNvZGVyJiwgY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rlcj4gY3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0
IFN0cmluZyYgbGFiZWwpIGNvbnN0OworICAgIHZvaWQgd3JpdGVFbmNvZGVyVG9EaXNrKFdlYkNv
cmU6OktleWVkRW5jb2RlciYsIGNvbnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rlcj4gY3JlYXRlRGVjb2RlckZyb21EaXNrKGNv
bnN0IFN0cmluZyYgcGF0aCkgY29uc3Q7CisgICAgV2FsbFRpbWUgc3RhdGlzdGljc0ZpbGVNb2Rp
ZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZv
cm1FeGNsdWRlRnJvbUJhY2t1cCgpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRlU3RvcmVGcm9tRGlz
aygpOwogICAgIHZvaWQgY2xlYXJJbk1lbW9yeURhdGEoKTsKQEAgLTE0NCw2ICsxNDYsNyBAQCBw
cml2YXRlOgogICAgIFJlZjxXVEY6OldvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAg
UmVmUHRyPFdlYkNvcmU6OkZpbGVNb25pdG9yPiBtX3N0YXRpc3RpY3NTdG9yYWdlTW9uaXRvcjsK
ICAgICBTdHJpbmcgbV9zdGF0aXN0aWNzU3RvcmFnZVBhdGg7CisgICAgV1RGOjpXYWxsVGltZSBt
X3N0YXRpc3RpY3NGaWxlTGFzdFJlYWRUaW1lOwogICAgIGJvb2wgbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPiBtX3RlbGVtZXRyeU9uZVNob3RUaW1lcjsKICAgICBSdW5Mb29w
OjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5UmVwZWF0
ZWRUaW1lcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314613</attachid>
            <date>2017-07-05 10:24:50 -0700</date>
            <delta_ts>2017-07-05 10:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174062-20170705102449.patch</filename>
            <type>text/plain</type>
            <size>17303</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA3LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIFByZXZlbnQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyBmcm9tIHRyaWdnZXJpbmcgYSBjYXNjYWRlIG9mIHJlYWQvd3Jp
dGUgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzQwNjJcCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzA4Njc0ND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUcmVhdCBESVNQQVRDSF9WTk9E
RV9ERUxFVEUsIERJU1BBVENIX1ZOT0RFX1JFTkFNRSwgYW5kIERJU1BBVENIX1ZOT0RFX1JFVk9L
RSBhcyBlcXVpdmFsZW50CisgICAgICAgICJmaWxlIGlzIHVuYXZhaWxhYmxlIiBldmVudHMsIGFu
ZCBhY3QgYXMgdGhvdWdoIHRoZSBmaWxlIHdhcyBkZWxldGVkLiBEb24ndCBsaXN0ZW4gZm9yCisg
ICAgICAgIERJU1BBVENIX1ZOT0RFX0VYVEVORCwgc2luY2Ugd2UgYWx3YXlzIGdldCBhIERJU1BB
VENIX1ZOT0RFX1dSSVRFIGFzIHdlbGwsIGFuZCB3ZSBvbmx5CisgICAgICAgIHdhbnQgdG8gcmVh
ZCBvbmNlLgorCisgICAgICAgIEZpbmFsbHksIGFkZCBzb21lIGxvZ2dpbmcgdG8gc3VwcG9ydCBm
dXR1cmUgaW52ZXN0aWdhdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlTW9uaXRvci5o
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZU1vbml0b3I6OnBsYXRmb3JtTW9uaXRvcik6IEV4cG9z
ZSBkaXNwYXRjaF9zb3VyY2VfdCBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9GaWxlTW9uaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsZU1v
bml0b3I6OnN0YXJ0TW9uaXRvcmluZyk6IEFkZCBsb2dnaW5nLgorICAgICAgICAoV2ViQ29yZTo6
RmlsZU1vbml0b3I6OnN0b3BNb25pdG9yaW5nKTogRGl0dG8uCisKIDIwMTctMDctMDMgIEFuZHJl
YXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE51bGwgUmVuZGVyTGF5ZXIq
IGRlcmVmIGluIEZyYW1lVmlldzo6YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZU1vbml0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTW9uaXRvci5oCShyZXZpc2lvbiAyMTkxMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlTW9uaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFydE1vbml0
b3JpbmcoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0b3BNb25pdG9yaW5nKCk7CiAKKyNp
ZiBVU0UoQ09DT0FfRVZFTlRfTE9PUCkKKyAgICBXRUJDT1JFX0VYUE9SVCBkaXNwYXRjaF9zb3Vy
Y2VfdCBwbGF0Zm9ybU1vbml0b3IoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtTW9uaXRvci5n
ZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgRmlsZU1vbml0b3IoY29uc3QgU3RyaW5n
JiwgUmVmPFdvcmtRdWV1ZT4mJiBoYW5kbGVyUXVldWUsIFdURjo6RnVuY3Rpb248dm9pZChGaWxl
Q2hhbmdlVHlwZSk+JiYgbW9kaWZpY2F0aW9uSGFuZGxlcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0ZpbGVNb25pdG9yQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRmlsZU1vbml0b3JDb2NvYS5tbQkocmV2aXNpb24g
MjE5MTA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRmlsZU1vbml0b3JDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgCi1jb25zdGV4cHIgdW5zaWduZWQgbW9uaXRvck1hc2sgPSBESVNQQVRDSF9WTk9E
RV9ERUxFVEUgfCBESVNQQVRDSF9WTk9ERV9XUklURSB8IERJU1BBVENIX1ZOT0RFX0VYVEVORCB8
IERJU1BBVENIX1ZOT0RFX1JFTkFNRSB8IERJU1BBVENIX1ZOT0RFX1JFVk9LRTsKLSAgICAKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBtb25pdG9yTWFzayA9IERJU1BBVENIX1ZOT0RFX0RFTEVURSB8IERJ
U1BBVENIX1ZOT0RFX1dSSVRFIHwgRElTUEFUQ0hfVk5PREVfUkVOQU1FIHwgRElTUEFUQ0hfVk5P
REVfUkVWT0tFOworY29uc3RleHByIHVuc2lnbmVkIGZpbGVVbmF2YWlsYWJsZU1hc2sgPSBESVNQ
QVRDSF9WTk9ERV9ERUxFVEUgfCBESVNQQVRDSF9WTk9ERV9SRU5BTUUgfCBESVNQQVRDSF9WTk9E
RV9SRVZPS0U7CisKIHZvaWQgRmlsZU1vbml0b3I6OnN0YXJ0TW9uaXRvcmluZygpCiB7CiAgICAg
aWYgKG1fcGxhdGZvcm1Nb25pdG9yKQpAQCAtNTMsMTQgKzU0LDE3IEBAIHZvaWQgRmlsZU1vbml0
b3I6OnN0YXJ0TW9uaXRvcmluZygpCiAgICAgfQogCiAgICAgbV9wbGF0Zm9ybU1vbml0b3IgPSBh
ZG9wdERpc3BhdGNoKGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVf
Vk5PREUsIGhhbmRsZSwgbW9uaXRvck1hc2ssIG1faGFuZGxlclF1ZXVlLT5kaXNwYXRjaFF1ZXVl
KCkpKTsKLSAgICAKKworICAgIExPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiQ3JlYXRpbmcg
bW9uaXRvciAlcCIsIHBsYXRmb3JtTW9uaXRvcigpKTsKKwogICAgIGRpc3BhdGNoX3NvdXJjZV9z
ZXRfZXZlbnRfaGFuZGxlcihtX3BsYXRmb3JtTW9uaXRvci5nZXQoKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpLCBmaWxlTW9uaXRvciA9IG1fcGxhdGZvcm1Nb25pdG9y
LmdldCgpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgLy8gSWYgdGhpcyBpcyBnZXR0aW5nIGNhbGxl
ZCBhZnRlciB0aGUgbW9uaXRvciB3YXMgY2FuY2VsbGVkLCBqdXN0IGRyb3AgdGhlIG5vdGlmaWNh
dGlvbi4KICAgICAgICAgaWYgKGRpc3BhdGNoX3NvdXJjZV90ZXN0Y2FuY2VsKGZpbGVNb25pdG9y
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB1bnNpZ25lZCBmbGFnID0gZGlzcGF0
Y2hfc291cmNlX2dldF9kYXRhKGZpbGVNb25pdG9yKTsKLSAgICAgICAgaWYgKGZsYWcgJiBESVNQ
QVRDSF9WTk9ERV9ERUxFVEUpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
ICJGaWxlIGV2ZW50ICUjWCBmb3IgbW9uaXRvciAlcCIsIGZsYWcsIGZpbGVNb25pdG9yKTsKKyAg
ICAgICAgaWYgKGZsYWcgJiBmaWxlVW5hdmFpbGFibGVNYXNrKSB7CiAgICAgICAgICAgICBtX21v
ZGlmaWNhdGlvbkhhbmRsZXIoRmlsZUNoYW5nZVR5cGU6OlJlbW92YWwpOwogICAgICAgICAgICAg
ZGlzcGF0Y2hfc291cmNlX2NhbmNlbChmaWxlTW9uaXRvcik7CiAgICAgICAgIH0gZWxzZQpAQCAt
NzksNyArODMsOSBAQCB2b2lkIEZpbGVNb25pdG9yOjpzdG9wTW9uaXRvcmluZygpCiB7CiAgICAg
aWYgKCFtX3BsYXRmb3JtTW9uaXRvcikKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgTE9H
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJTdG9wcGluZyBtb25pdG9yICVwIiwgcGxhdGZvcm1N
b25pdG9yKCkpOworCiAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChtX3BsYXRmb3JtTW9uaXRv
ci5nZXQoKSk7CiAgICAgbV9wbGF0Zm9ybU1vbml0b3IgPSBudWxscHRyOwogfQpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjE5MTA5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTctMDctMDUgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gUHJldmVudCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGZyb20gdHJpZ2dlcmluZyBhIGNhc2NhZGUgb2YgcmVhZC93cml0ZSBldmVudHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDA2MlwK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMDg2NzQ0PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgd2FzIHRy
aWdnZXJpbmcgcGVyaW9kcyBvZiBoaWdoIENQVSB1c2UgZHVlIHRvIGEgY2FzY2FkZSBvZiByZWFk
L3dyaXRlCisgICAgICAgIG9wZXJhdGlvbnM6CisgICAgICAgICgxKSBUaGUgJ21ha2VSZWZQdHIn
IGNhbGwgaW4gRmlsZU1vbml0b3I6OnN0YXJ0TW9uaXRvcmluZyB3YXMgY2FwdHVyaW5nIGEgcmVm
ZXJlbmNlIHRvIGl0c2VsZiwgcHJldmVudGluZworICAgICAgICAgICAgdGhlIEZpbGVNb25pdG9y
IGZyb20gYmVpbmcgZGVzdHJveWVkLiBUaGlzIGNhdXNlZCB0aGUgZmlsZSBtb2RpZmljYXRpb24g
aGFuZGxlciB0byBmaXJlIGluIHJlc3BvbnNlCisgICAgICAgICAgICB0byBvdXIgb3duIHdyaXRl
IGV2ZW50cywgY3JlYXRpbmcgYSByaWRpY3Vsb3VzIHJlYWQvd3JpdGUgY3ljbGUuIFRoaXMgcHJv
YmxlbSB3YXMgYWRkcmVzc2VkIGluCisgICAgICAgICAgICB0aGUgc2hvcnQgdGVybSBieSBzdG9w
cGluZyB0aGUgZmlsZSBtb25pdG9yIGluIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c3RvcE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFnZSwKKyAgICAgICAgICAgIHJhdGhlciB0aGFu
IHJlbHlpbmcgb24gdGhlIGRlc3RydWN0b3IgdG8gc2h1dCB0aGluZ3MgZG93bi4gVGhpcyB3aWxs
IGJlIGltcHJvdmVkIGluIGEKKyAgICAgICAgICAgIHN1YnNlcXVlbnQgcGF0Y2guCisgICAgICAg
ICgyKSAnc3luY1dpdGhFeGlzdGluZ1N0YXRpc3RpY3NTdG9hZ2VJZk5lZWRlZCcgd2FzIGNyZWF0
aW5nIGEgRmlsZU1vbml0b3IgZHVyaW5nIHRoZSB3cml0ZSBvcGVyYXRpb24sCisgICAgICAgICAg
ICAgd2hpY2ggZXhhY2VyYmF0ZWQgdGhlIGNoYWluIG9mIHJlYWQvd3JpdGVzIGFscmVhZHkgcHJl
c2VudCBkdWUgdG8gdGhlIHNlbGYtcmVmZXJlbmNlIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAg
KDMpIEJlY2F1c2UgVk5PREUgZGlzcGF0Y2ggc291cmNlcyBhcmUgbG93IGxldmVsLCB0aGV5IGRv
IG5vdCBvZmZlciBhIG1lYW5zIG9mIGZpbHRlcmluZyBvdXQgb3BlcmF0aW9ucworICAgICAgICAg
ICAgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MuIFRvIGF2b2lkIHRoaXMsIEkgYWRk
ZWQgY29kZSB0byB0cmFjayB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZSwgc28KKyAgICAgICAg
ICAgIHRoYXQgd2UgZG9uJ3QgYm90aGVyIHJlYWRpbmcgYSBmaWxlIHRoYXQgaG9sZHMgZGF0YSB0
aGF0IGlzIG9sZGVyIHRoYW4gdGhlIGluLW1lbW9yeSBkYXRhLCBldmVuIHRob3VnaAorICAgICAg
ICAgICAgd2UgcmVjZWl2ZSBhIGZpbGUgbW9kaWZpY2F0aW9uIGRpc3BhdGNoLiBXcml0ZXMgc2Vl
bSB0byB0cmlnZ2VyIGEgY2hhaW4gb2Ygbm90aWZpY2F0aW9uIGV2ZW50cyBpbiByYXBpZAorICAg
ICAgICAgICAgc3VjY2Vzc2lvbi4gT25jZSB3ZSd2ZSByZXNwb25kZWQgdG8gdGhlIGZpcnN0IG9m
IHRoZXNlIGV2ZW50cywgd2UgZG9uJ3QgbmVlZCB0byB0byBmdXJ0aGVyIHJlYWRzIHVudGlsCisg
ICAgICAgICAgICB0aGUgZGF0YSBvbiBkaXNrIGNoYW5nZXMgYWdhaW4uICAgIAorCisgICAgICAg
IFdlIGFsc28gc2hvdWxkbid0IGFsbG93IHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHdvcmtl
ciB0aHJlYWQgdG8gY29uc3VtZSBoaWdoIENQVSByZXNvdXJjZXMuIFJ1biBpdAorICAgICAgICBh
cyBhIHV0aWxpdHkgcHJvY2VzcywgYXZvaWRpbmcgdXNpbmcgdGhlIENQVSB3aGVuIG90aGVyIHdv
cmsgaXMgZ29pbmcgb24uCisKKyAgICAgICAgRHJpdmUtYnkgZml4OiBUaGUgY2xvc3VyZSBpbiBz
ZXRXcml0ZVBlcnNpc3RlbnRTdG9yZUNhbGxiYWNrKCkgc2hvdWxkIHN0b3AgbW9uaXRvcmluZyBi
ZWZvcmUgd3JpdGluZworICAgICAgICBkYXRhLCBhbmQgc2hvdWxkIHN0YXJ0IG1vbml0b3Jpbmcg
YWZ0ZXIgdGhlIHdyaXRlIGNvbXBsZXRlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6IFJ1
biBvdXIgd29ya2VyIHF1ZXVlCisgICAgICAgIGFzIGEgdXRpbGl0eS1sZXZlbCBwcm9jZXNzLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVy
U2hhcmVkUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOiBTdG9wIGNoZWNraW5nIGZvcgorICAgICAgICB1
cGRhdGVzIGJlZm9yZSB3cml0aW5nLCBhbmQgYmVnaW4gY2hlY2tpbmcgYWdhaW4gb25jZSB0aGUg
d3JpdGUgaXMgY29tcGxldGUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c3RhdGlzdGljc0ZpbGVNb2RpZmljYXRpb25UaW1lKTogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVhZERhdGFGcm9t
RGlza0lmTmVlZGVkKTogQXZvaWQgcmVhZGluZyB0aGUgZmlsZSBpZiBpdAorICAgICAgICB3YXMg
bGFzdCBtb2RpZmllZCBvbiAob3IgYmVmb3JlKSB0aGUgdGltZSB3ZSBsYXN0IHJlYWQgdGhlIGZp
bGUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVm
cmVzaEZyb21EaXNrKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c3RvcE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFnZSk6IEV4cGxpY2l0
bHkgc3RvcCBmaWxlCisgICAgICAgIG1vbml0b3Jpbmcgc28gdGhhdCB0aGUgYWN0aXZlIGZpbGUg
bW9kaWZpY2F0aW9uIGhhbmRsZXIgd2lsbCB0ZXJtaW5hdGUuCisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3luY1dpdGhFeGlzdGluZ1N0YXRpc3RpY3NT
dG9yYWdlSWZOZWVkZWQpOiBEbyBub3QgYmVnaW4KKyAgICAgICAgbW9uaXRvcmluZyB0aGUgZmls
ZSBhZnRlciBzeW5jaW5nLCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBhcyBwYXJ0IG9mIGFuIG9u
Z29pbmcgd3JpdGUgb3BlcmF0aW9uLgorCiAyMDE3LTA3LTAzICBNYXR0IFJhamNhICA8bXJhamNh
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQvcmVtb3ZlIGFwcHJvcHJpYXRlIG1lZGlhIGVsZW1l
bnQgYmVoYXZpb3IgcmVzdHJpY3Rpb25zIHdoZW4gdXBkYXRlV2Vic2l0ZVBvbGljaWVzIGlzIGNh
bGxlZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTEwOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25k
cy5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0Jp
bmFyeVNlbWFwaG9yZS5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05Myw3ICs5NCw3IEBA
IFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlIKIAogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3Qg
U3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogICAgIDogbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUo
KSkKLSAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikpCisgICAgLCBtX3N0YXRp
c3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsLCBXb3JrUXVl
dWU6OlFPUzo6VXRpbGl0eSkpCiAgICAgLCBtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aChyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogICAgICwgbV90ZWxlbWV0cnlPbmVTaG90VGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp0
ZWxlbWV0cnlUaW1lckZpcmVkKQogICAgICwgbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dGVsZW1l
dHJ5VGltZXJGaXJlZCkKQEAgLTIxOSw3ICsyMjAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVnCiAgICAgfSk7CiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUtPnNldFdyaXRlUGVyc2lzdGVudFN0b3JlQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewogICAgICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKV0geworICAg
ICAgICAgICAgc3RvcE1vbml0b3JpbmdTdGF0aXN0aWNzU3RvcmFnZSgpOwogICAgICAgICAgICAg
d3JpdGVTdG9yZVRvRGlzaygpOworICAgICAgICAgICAgc3RhcnRNb25pdG9yaW5nU3RhdGlzdGlj
c1N0b3JhZ2UoKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAgICAgbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUtPnNldEdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YUNhbGxiYWNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKQEAgLTI2MiwxMyArMjY1LDM3
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmEKICAgICB9KTsKIH0K
IAorV2FsbFRpbWUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRmls
ZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAg
IGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KG1vZGlmaWNhdGlvblRpbWUpOworfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVhZERhdGFGcm9tRGlza0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc3RhdGlzdGlj
c1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7
Ci0gICAgICAgIGF1dG8gZGVjb2RlciA9IGNyZWF0ZURlY29kZXJGcm9tRGlzayhBU0NJSUxpdGVy
YWwoImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbiIpKTsKKyAgICAgICAgU3RyaW5nIHJlc291cmNlTG9n
ID0gcGVyc2lzdGVudFN0b3JhZ2VQYXRoKEFTQ0lJTGl0ZXJhbCgiZnVsbF9icm93c2luZ19zZXNz
aW9uIikpOworICAgICAgICBpZiAocmVzb3VyY2VMb2cuaXNFbXB0eSgpIHx8ICFmaWxlRXhpc3Rz
KHJlc291cmNlTG9nKSkgeworICAgICAgICAgICAgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBXYWxsVGlt
ZSBmaWxlTW9kaWZpY2F0aW9uVGltZSA9IHN0YXRpc3RpY3NGaWxlTW9kaWZpY2F0aW9uVGltZShy
ZXNvdXJjZUxvZyk7CisgICAgICAgIGlmIChmaWxlTW9kaWZpY2F0aW9uVGltZSA8PSBtX2xhc3RT
dGF0aXN0aWNzRmlsZVN5bmNUaW1lKSB7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGdyYW5k
ZmF0aGVyIGluIHRoaXMgY2FzZS5uCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBXYWxsVGltZSByZWFkVGltZSA9IFdhbGxUaW1lOjpub3coKTsKKworICAgICAgICBh
dXRvIGRlY29kZXIgPSBjcmVhdGVEZWNvZGVyRnJvbURpc2socmVzb3VyY2VMb2cpOwogICAgICAg
ICBpZiAoIWRlY29kZXIpIHsKICAgICAgICAgICAgIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRl
RGF0YSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc3LDYgKzMwNCw4IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWEKICAgICAgICAgY29yZVN0b3JlKCkuY2xl
YXJJbk1lbW9yeSgpOwogICAgICAgICBjb3JlU3RvcmUoKS5yZWFkRGF0YUZyb21EZWNvZGVyKCpk
ZWNvZGVyKTsKIAorICAgICAgICBtX2xhc3RTdGF0aXN0aWNzRmlsZVN5bmNUaW1lID0gcmVhZFRp
bWU7CisKICAgICAgICAgaWYgKGNvcmVTdG9yZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGdy
YW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSgpOwogICAgIH0pOwpAQCAtMjg1LDExICszMTQs
MzEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYQogdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZnJlc2hGcm9tRGlzaygpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgYXV0byBkZWNvZGVyID0gY3JlYXRlRGVjb2Rl
ckZyb21EaXNrKEFTQ0lJTGl0ZXJhbCgiZnVsbF9icm93c2luZ19zZXNzaW9uIikpOworCisgICAg
U3RyaW5nIHJlc291cmNlTG9nID0gcGVyc2lzdGVudFN0b3JhZ2VQYXRoKEFTQ0lJTGl0ZXJhbCgi
ZnVsbF9icm93c2luZ19zZXNzaW9uIikpOworICAgIGlmIChyZXNvdXJjZUxvZy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHNvbWV0aW1lcyBzZWUgZmlsZSBjaGFuZ2Vk
IGV2ZW50cyBmcm9tIGJlZm9yZSBvdXIgbG9hZCBjb21wbGV0ZWQgKHdlIHN0YXJ0CisgICAgLy8g
cmVhZGluZyBhdCB0aGUgZmlyc3QgY2hhbmdlIGV2ZW50LCBidXQgd2UgbWlnaHQgcmVjZWl2ZSBh
IHNlcmllcyBvZiBldmVudHMgcmVsYXRlZAorICAgIC8vIHRvIHRoZSBzYW1lIGZpbGUgb3BlcmF0
aW9uKS4gQ2F0Y2ggdGhpcyBjYXNlIHRvIGF2b2lkIHJlYWRpbmcgb3Zlcmx5IG9mdGVuLgorICAg
IFdhbGxUaW1lIGZpbGVNb2RpZmljYXRpb25UaW1lID0gc3RhdGlzdGljc0ZpbGVNb2RpZmljYXRp
b25UaW1lKHJlc291cmNlTG9nKTsKKyAgICBpZiAoZmlsZU1vZGlmaWNhdGlvblRpbWUgPD0gbV9s
YXN0U3RhdGlzdGljc0ZpbGVTeW5jVGltZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2FsbFRp
bWUgcmVhZFRpbWUgPSBXYWxsVGltZTo6bm93KCk7CisKKyAgICBhdXRvIGRlY29kZXIgPSBjcmVh
dGVEZWNvZGVyRnJvbURpc2socmVzb3VyY2VMb2cpOwogICAgIGlmICghZGVjb2RlcikKICAgICAg
ICAgcmV0dXJuOwogCisjaWZuZGVmIExPR19ESVNBQkxFRAorICAgIGF1dG8gbW9uaXRvciA9IG1f
c3RhdGlzdGljc1N0b3JhZ2VNb25pdG9yID8gbV9zdGF0aXN0aWNzU3RvcmFnZU1vbml0b3ItPnBs
YXRmb3JtTW9uaXRvcigpIDogbnVsbHB0cjsKKyAgICBMT0coUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgIlJlYWRpbmcgZGF0YSB3aXRoIG1vbml0b3IgJXAgYWN0aXZlIiwgbW9uaXRvcik7CisjZW5k
aWYKKwogICAgIGNvcmVTdG9yZSgpLnJlYWREYXRhRnJvbURlY29kZXIoKmRlY29kZXIpOworICAg
IG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWUgPSByZWFkVGltZTsKIH0KICAgICAKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9u
KFdlYlByb2Nlc3NQcm94eSYsIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKQEAgLTMyOCw3
ICszNzcsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OndyaQogICAg
IHN5bmNXaXRoRXhpc3RpbmdTdGF0aXN0aWNzU3RvcmFnZUlmTmVlZGVkKCk7CiAKICAgICBhdXRv
IGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsKLSAgICB3cml0
ZUVuY29kZXJUb0Rpc2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsK
KworICAgIFN0cmluZyByZXNvdXJjZUxvZyA9IHBlcnNpc3RlbnRTdG9yYWdlUGF0aChBU0NJSUxp
dGVyYWwoImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbiIpKTsKKyAgICB3cml0ZUVuY29kZXJUb0Rpc2so
KmVuY29kZXIuZ2V0KCksIHJlc291cmNlTG9nKTsKKworICAgIG1fbGFzdFN0YXRpc3RpY3NGaWxl
U3luY1RpbWUgPSBXYWxsVGltZTo6bm93KCk7CiB9CiAKIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkFuZExvY2tGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CkBAIC0zNTYsNyArNDA5LDcgQEAgc3RhdGljIHZvaWQgY2xvc2VBbmRVbmxvY2tGaWxlKFBsYXRm
b3JtRgogICAgIGNsb3NlRmlsZShoYW5kbGUpOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6d3JpdGVFbmNvZGVyVG9EaXNrKEtleWVkRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3QKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp3cml0ZUVuY29kZXJUb0Rpc2soS2V5ZWRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBT
dHJpbmcmIHBhdGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCkBAIC0zNjQsMTkgKzQxNywyMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6d3JpCiAgICAgaWYgKCFyYXdEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmcgcmVzb3VyY2VMb2cgPSBwZXJzaXN0ZW50U3RvcmFnZVBhdGgobGFiZWwpOwotICAgIGlmIChy
ZXNvdXJjZUxvZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghbV9zdGF0
aXN0aWNzU3RvcmFnZVBhdGguaXNFbXB0eSgpKSB7CiAgICAgICAgIG1ha2VBbGxEaXJlY3Rvcmll
cyhtX3N0YXRpc3RpY3NTdG9yYWdlUGF0aCk7CiAgICAgICAgIHBsYXRmb3JtRXhjbHVkZUZyb21C
YWNrdXAoKTsKICAgICB9CiAKLSAgICBhdXRvIGhhbmRsZSA9IG9wZW5BbmRMb2NrRmlsZShyZXNv
dXJjZUxvZywgT3BlbkZvcldyaXRlKTsKKyAgICBhdXRvIGhhbmRsZSA9IG9wZW5BbmRMb2NrRmls
ZShwYXRoLCBPcGVuRm9yV3JpdGUpOwogICAgIGlmIChoYW5kbGUgPT0gaW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisjaWZuZGVmIExPR19ESVNBQkxF
RAorICAgIGF1dG8gbW9uaXRvciA9IG1fc3RhdGlzdGljc1N0b3JhZ2VNb25pdG9yID8gbV9zdGF0
aXN0aWNzU3RvcmFnZU1vbml0b3ItPnBsYXRmb3JtTW9uaXRvcigpIDogbnVsbHB0cjsKKyAgICBM
T0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldyaXRpbmcgZGF0YSB3aXRoIG1vbml0b3IgJXAg
YWN0aXZlIiwgbW9uaXRvcik7CisjZW5kaWYKKwogICAgIGludDY0X3Qgd3JpdHRlbkJ5dGVzID0g
d3JpdGVUb0ZpbGUoaGFuZGxlLCByYXdEYXRhLT5kYXRhKCksIHJhd0RhdGEtPnNpemUoKSk7CiAg
ICAgY2xvc2VBbmRVbmxvY2tGaWxlKGhhbmRsZSk7CiAKQEAgLTQzMiw2ICs0ODYsMTIgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YQogdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnN0b3BNb25pdG9yaW5nU3RhdGlzdGljc1N0b3JhZ2UoKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICghbV9zdGF0aXN0aWNzU3Rv
cmFnZU1vbml0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBGaWxlTW9uaXRvciBj
YXB0dXJlcyBpdHNlbGYsIGluY3JlbWVudGluZyBpdHMgcmVmY291bnQuIE1hbnVhbGx5IHN0b3Bw
aW5nIHRoZSBtb25pdG9yIHNodXRzIGRvd24gdGhlIGxhbWJkYSBob2xkaW5nIHRoZSBleHRyYQor
ICAgIC8vIHJlZmVyZW5jZSwgc28gdGhlIG9iamVjdCB3aWxsIGJlIGNsZWFuZWQgdXAgcHJvcGVy
bHkuCisgICAgbV9zdGF0aXN0aWNzU3RvcmFnZU1vbml0b3ItPnN0b3BNb25pdG9yaW5nKCk7CiAg
ICAgbV9zdGF0aXN0aWNzU3RvcmFnZU1vbml0b3IgPSBudWxscHRyOwogfQogCkBAIC00NDAsMTAg
KzUwMCwxMiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3luCiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JhZ2VN
b25pdG9yKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBTdHJpbmcgcmVzb3VyY2VMb2cg
PSBwZXJzaXN0ZW50U3RvcmFnZVBhdGgoQVNDSUlMaXRlcmFsKCJmdWxsX2Jyb3dzaW5nX3Nlc3Np
b24iKSk7CisgICAgaWYgKHJlc291cmNlTG9nLmlzRW1wdHkoKSB8fCAhZmlsZUV4aXN0cyhyZXNv
dXJjZUxvZykpCisgICAgICAgIHJldHVybjsKKwogICAgIHJlZnJlc2hGcm9tRGlzaygpOwotICAg
IAotICAgIHN0YXJ0TW9uaXRvcmluZ1N0YXRpc3RpY3NTdG9yYWdlKCk7CiB9CiAgICAgCiAgICAg
CkBAIC00NTQsMTQgKzUxNiwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cGxhCiB9CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEtleWVkRGVjb2Rlcj4gV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3Ry
aW5nJiBsYWJlbCkgY29uc3QKK3N0ZDo6dW5pcXVlX3B0cjxLZXllZERlY29kZXI+IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlRGVjb2RlckZyb21EaXNrKGNvbnN0IFN0cmlu
ZyYgcGF0aCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBT
dHJpbmcgcmVzb3VyY2VMb2cgPSBwZXJzaXN0ZW50U3RvcmFnZVBhdGgobGFiZWwpOwotICAgIGlm
IChyZXNvdXJjZUxvZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byBoYW5kbGUgPSBvcGVuQW5kTG9ja0ZpbGUocmVzb3VyY2VMb2csIE9wZW5Gb3JSZWFkKTsK
KyAgICBhdXRvIGhhbmRsZSA9IG9wZW5BbmRMb2NrRmlsZShwYXRoLCBPcGVuRm9yUmVhZCk7CiAg
ICAgaWYgKGhhbmRsZSA9PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxOTEw
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXVEYgeworY2xhc3MgV2FsbFRpbWU7CiBjbGFzcyBXb3JrUXVldWU7CiB9CiAKQEAgLTEy
MSw4ICsxMjIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNp
dGVEYXRhKCk7CiAKICAgICB2b2lkIHdyaXRlU3RvcmVUb0Rpc2soKTsKLSAgICB2b2lkIHdyaXRl
RW5jb2RlclRvRGlzayhXZWJDb3JlOjpLZXllZEVuY29kZXImLCBjb25zdCBTdHJpbmcmIGxhYmVs
KSBjb25zdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBjcmVh
dGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBsYWJlbCkgY29uc3Q7CisgICAgdm9pZCB3
cml0ZUVuY29kZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3QgU3RyaW5nJiBw
YXRoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWREZWNvZGVyPiBj
cmVhdGVEZWNvZGVyRnJvbURpc2soY29uc3QgU3RyaW5nJiBwYXRoKSBjb25zdDsKKyAgICBXYWxs
VGltZSBzdGF0aXN0aWNzRmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBsYWJlbCkg
Y29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybUV4Y2x1ZGVGcm9tQmFja3VwKCkgY29uc3Q7CiAgICAg
dm9pZCBkZWxldGVTdG9yZUZyb21EaXNrKCk7CiAgICAgdm9pZCBjbGVhckluTWVtb3J5RGF0YSgp
OwpAQCAtMTQ0LDYgKzE0Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBt
X3N0YXRpc3RpY3NRdWV1ZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZU1vbml0b3I+IG1fc3Rh
dGlzdGljc1N0b3JhZ2VNb25pdG9yOwogICAgIFN0cmluZyBtX3N0YXRpc3RpY3NTdG9yYWdlUGF0
aDsKKyAgICBXVEY6OldhbGxUaW1lIG1fbGFzdFN0YXRpc3RpY3NGaWxlU3luY1RpbWU7CiAgICAg
Ym9vbCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkIHsgZmFsc2UgfTsKICAgICBSdW5M
b29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fdGVsZW1ldHJ5T25l
U2hvdFRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZT4gbV90ZWxlbWV0cnlSZXBlYXRlZFRpbWVyOwo=
</data>
<flag name="review"
          id="335482"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="335486"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>