<?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>173975</bug_id>
          
          <creation_ts>2017-06-29 10:28:48 -0700</creation_ts>
          <short_desc>WTF::Thread should have the threads stack bounds.</short_desc>
          <delta_ts>2017-07-18 21:54:06 -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>Web Template Framework</component>
          <version>WebKit 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>
          <dependson>174108</dependson>
    
    <dependson>174436</dependson>
          <blocked>174081</blocked>
    
    <blocked>174291</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>thorton</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323979</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-06-29 10:28:48 -0700</bug_when>
    <thetext>There are a number of places in JSC that try to walk another threads stack. Currently, the stack bounds are stored on ThreadData but that&apos;s in TLS so other threads cannot see it. Right now we get the stack bounds by iterating the MachineThreads looking for our target thread then getting it&apos;s stack bounds. We should just put the stack bounds on the Thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324368</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-30 02:36:25 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #0)
&gt; There are a number of places in JSC that try to walk another threads stack.
&gt; Currently, the stack bounds are stored on ThreadData but that&apos;s in TLS so
&gt; other threads cannot see it. Right now we get the stack bounds by iterating
&gt; the MachineThreads looking for our target thread then getting it&apos;s stack
&gt; bounds. We should just put the stack bounds on the Thread.

Sounds nice.

I think we put StackBounds in WTFThreadData because of https://bugs.webkit.org/show_bug.cgi?id=102411.
However, right now, we use Fiber Local Storage (FLS) to store TLS data in ThreadSpeific.
Thus, I think the above bug is already fixed: Each fiber can use their own FLS. Fibers do not use TLS in Windows right now instead of FLS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324801</commentid>
    <comment_count>2</comment_count>
      <attachid>314377</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-01 02:20:31 -0700</bug_when>
    <thetext>Created attachment 314377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324802</commentid>
    <comment_count>3</comment_count>
      <attachid>314377</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-01 02:22:14 -0700</bug_when>
    <thetext>Comment on attachment 314377
Patch

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

&gt; Source/WTF/wtf/WTFThreadData.h:-63
&gt; -        // We need to always get a fresh StackBounds from the OS due to how fibers work.
&gt; -        // See https://bugs.webkit.org/show_bug.cgi?id=102411

This is no longer a problem. Right now, our ThreadSpecific (and ThreadHolder) always uses FLS instead of TLS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324820</commentid>
    <comment_count>4</comment_count>
      <attachid>314377</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-01 07:10:13 -0700</bug_when>
    <thetext>Comment on attachment 314377
Patch

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

&gt; Source/WTF/wtf/Threading.cpp:97
&gt; +    // Ack initialization to the creator.
&gt; +    context-&gt;initializationMutex-&gt;unlock();

Passing ownership of a mutex like this (locking on Thread A and unlocking on Thread B) is shady.  It might happen to work out because out parking lot implementation may happen to just work (I haven&apos;t looked into the implementation to know if this is true).  I think the classic way to do this correctly is:
1. Thread A creates mutex and a condvar (guarded by the mutex).
2. Thread A locks mutex and waits on condvar which releases the mutex.
3. Thread B locks mutex and notifies the condvar when ready.
4. Thread B unlocks the mutex.
5. Thread A now wakes from the wait and reacquires the mutex, and may unlock it thereafter.

Can we do this instead?  I think it is clearer about intent (with the wait and notify) and works without depending on any special behavior of the locking system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324903</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 00:27:38 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #4)
&gt; Comment on attachment 314377 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314377&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Threading.cpp:97
&gt; &gt; +    // Ack initialization to the creator.
&gt; &gt; +    context-&gt;initializationMutex-&gt;unlock();
&gt; 
&gt; Passing ownership of a mutex like this (locking on Thread A and unlocking on
&gt; Thread B) is shady.  It might happen to work out because out parking lot
&gt; implementation may happen to just work (I haven&apos;t looked into the
&gt; implementation to know if this is true).  I think the classic way to do this
&gt; correctly is:
&gt; 1. Thread A creates mutex and a condvar (guarded by the mutex).
&gt; 2. Thread A locks mutex and waits on condvar which releases the mutex.
&gt; 3. Thread B locks mutex and notifies the condvar when ready.
&gt; 4. Thread B unlocks the mutex.
&gt; 5. Thread A now wakes from the wait and reacquires the mutex, and may unlock
&gt; it thereafter.
&gt; 
&gt; Can we do this instead?  I think it is clearer about intent (with the wait
&gt; and notify) and works without depending on any special behavior of the
&gt; locking system.

OK, I&apos;ll upload the revised patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324904</commentid>
    <comment_count>6</comment_count>
      <attachid>314409</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 00:29:26 -0700</bug_when>
    <thetext>Created attachment 314409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324905</commentid>
    <comment_count>7</comment_count>
      <attachid>314410</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 00:35:56 -0700</bug_when>
    <thetext>Created attachment 314410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324906</commentid>
    <comment_count>8</comment_count>
      <attachid>314411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 00:40:49 -0700</bug_when>
    <thetext>Created attachment 314411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324924</commentid>
    <comment_count>9</comment_count>
      <attachid>314411</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-02 05:19:05 -0700</bug_when>
    <thetext>Comment on attachment 314411
Patch

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

Nice work.  r=me.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        There is a site in JSC that try to walk another threads stack.

typo: /threads/thread&apos;s/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324925</commentid>
    <comment_count>10</comment_count>
      <attachid>314411</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-02 05:21:09 -0700</bug_when>
    <thetext>Comment on attachment 314411
Patch

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

&gt; Source/WTF/wtf/Threading.cpp:50
&gt; +    Start, Initialize

&quot;Initialize&quot; sounds like the thread is still initializing.  Let&apos;s changed it to &quot;Initialized&quot; to indicate that it&apos;s already done initializing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324977</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 17:50:41 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #10)
&gt; Comment on attachment 314411 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314411&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Threading.cpp:50
&gt; &gt; +    Start, Initialize
&gt; 
&gt; &quot;Initialize&quot; sounds like the thread is still initializing.  Let&apos;s changed it
&gt; to &quot;Initialized&quot; to indicate that it&apos;s already done initializing.

OK, fixed. Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324978</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-02 17:51:00 -0700</bug_when>
    <thetext>Committed r219060: &lt;http://trac.webkit.org/changeset/219060&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325305</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-03 16:10:52 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 174108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325318</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-07-03 16:27:38 -0700</bug_when>
    <thetext>Yusuke, I think you&apos;ll have to work with Keith/Mark to get this re-landed. You *should* be able to reproduce the crashes by building for iOS Simulator and writing a test app that makes a UIWebView (or even just calls [UIWebView class], since the crash is under +initialize).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325390</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-03 23:34:01 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #14)
&gt; Yusuke, I think you&apos;ll have to work with Keith/Mark to get this re-landed.
&gt; You *should* be able to reproduce the crashes by building for iOS Simulator
&gt; and writing a test app that makes a UIWebView (or even just calls [UIWebView
&gt; class], since the crash is under +initialize).

Discussed with Mark, Keith, Wenson, and Tim.
When starting Web thread, WTFThreadData is initialized before calling initializeThreading().
Before that patch, it was OK. But now, WTFThreadData touches Thread::current(). Thus, it causes crashes.
And I think this is why only iOS UIWebView crashes: it is caused in Web thread initialization.

I&apos;ll upload the patch with fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325396</commentid>
    <comment_count>16</comment_count>
      <attachid>314555</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-04 02:51:32 -0700</bug_when>
    <thetext>Created attachment 314555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325639</commentid>
    <comment_count>17</comment_count>
      <attachid>314555</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-07-05 10:45:58 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325650</commentid>
    <comment_count>18</comment_count>
      <attachid>314555</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-05 10:56:52 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

r=me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325859</commentid>
    <comment_count>19</comment_count>
      <attachid>314555</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-05 18:29:28 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325863</commentid>
    <comment_count>20</comment_count>
      <attachid>314555</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-05 18:57:47 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

Clearing flags on attachment: 314555

Committed r219176: &lt;http://trac.webkit.org/changeset/219176&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325864</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-05 18:57:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328243</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-12 15:24:00 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 174436</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328247</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 15:30:03 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #22)
&gt; Re-opened since this is blocked by bug 174436

Rolled out in r219427: &lt;http://trac.webkit.org/changeset/219427&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328332</commentid>
    <comment_count>24</comment_count>
      <attachid>314555</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 18:01:31 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

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

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:193
&gt; +void Thread::initializeCurrentThreadEvenIfNonWTFCreated()
&gt;  {
&gt; +    Thread::current().initialize();

This call to Thread.current() can cause an infinite loop because Thread::current() can call initializeCurrentThreadEvenIfNonWTFCreated().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328333</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 18:03:12 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #24)
&gt; Comment on attachment 314555 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314555&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/ThreadingPthreads.cpp:193
&gt; &gt; +void Thread::initializeCurrentThreadEvenIfNonWTFCreated()
&gt; &gt;  {
&gt; &gt; +    Thread::current().initialize();
&gt; 
&gt; This call to Thread.current() can cause an infinite loop because
&gt; Thread::current() can call initializeCurrentThreadEvenIfNonWTFCreated().

By &quot;infinite loop&quot;, I actually meant infinite recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328362</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-12 20:14:51 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #24)
&gt; Comment on attachment 314555 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314555&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/ThreadingPthreads.cpp:193
&gt; &gt; +void Thread::initializeCurrentThreadEvenIfNonWTFCreated()
&gt; &gt;  {
&gt; &gt; +    Thread::current().initialize();
&gt; 
&gt; This call to Thread.current() can cause an infinite loop because
&gt; Thread::current() can call initializeCurrentThreadEvenIfNonWTFCreated().

What makes infinite loop? I think Thread::current() call will stop because we call ThreadHolder::initialize(thread.get()) before calling initializeCurrentThreadEvenIfNonWTFCreated().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328363</commentid>
    <comment_count>27</comment_count>
      <attachid>314555</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 20:23:38 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:193
&gt;&gt;&gt;&gt; +    Thread::current().initialize();
&gt;&gt;&gt; 
&gt;&gt;&gt; This call to Thread.current() can cause an infinite loop because Thread::current() can call initializeCurrentThreadEvenIfNonWTFCreated().
&gt;&gt; 
&gt;&gt; By &quot;infinite loop&quot;, I actually meant infinite recursion.
&gt; 
&gt; What makes infinite loop? I think Thread::current() call will stop because we call ThreadHolder::initialize(thread.get()) before calling initializeCurrentThreadEvenIfNonWTFCreated().

Here&apos;s the sequence of events I was thinking of:
1. someone calls Thread::current(), which calls currentMayBeNull(), which returns null.
2. Thread::current() calls Thread::initializeCurrentThreadEvenIfNonWTFCreated(), which calls
3. Thread::current(), which calls
4. Thread::initializeCurrentThreadEvenIfNonWTFCreated(), ...

... but I see now that the chain should have stopped at (3) because at line 311, we should have already planted the current Thread into the ThreadHolder.

I&apos;ll do more debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328365</commentid>
    <comment_count>28</comment_count>
      <attachid>314555</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-12 20:31:53 -0700</bug_when>
    <thetext>Comment on attachment 314555
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:193
&gt;&gt;&gt;&gt;&gt; +    Thread::current().initialize();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This call to Thread.current() can cause an infinite loop because Thread::current() can call initializeCurrentThreadEvenIfNonWTFCreated().
&gt;&gt;&gt; 
&gt;&gt;&gt; By &quot;infinite loop&quot;, I actually meant infinite recursion.
&gt;&gt; 
&gt;&gt; What makes infinite loop? I think Thread::current() call will stop because we call ThreadHolder::initialize(thread.get()) before calling initializeCurrentThreadEvenIfNonWTFCreated().
&gt; 
&gt; Here&apos;s the sequence of events I was thinking of:
&gt; 1. someone calls Thread::current(), which calls currentMayBeNull(), which returns null.
&gt; 2. Thread::current() calls Thread::initializeCurrentThreadEvenIfNonWTFCreated(), which calls
&gt; 3. Thread::current(), which calls
&gt; 4. Thread::initializeCurrentThreadEvenIfNonWTFCreated(), ...
&gt; 
&gt; ... but I see now that the chain should have stopped at (3) because at line 311, we should have already planted the current Thread into the ThreadHolder.
&gt; 
&gt; I&apos;ll do more debugging.

Now I&apos;m considering about very edge cases. Can you have a stacktrace for this infinite recursion? When is Thread::current() called in this case?
I guess this is related to TLS deallocation things...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328367</commentid>
    <comment_count>29</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 20:39:07 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #28)
&gt; Now I&apos;m considering about very edge cases. Can you have a stacktrace for
&gt; this infinite recursion? When is Thread::current() called in this case?
&gt; I guess this is related to TLS deallocation things...

Here&apos;s the stack trace:

Thread 8 Crashed:
0   libsystem_malloc.dylib        	0x0000000182c58cb0 _nano_malloc_check_clear + 516 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/nano_malloc.c:0)
1   libsystem_malloc.dylib        	0x0000000182c58b44 _nano_malloc_check_clear + 152 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/nano_malloc.c:681)
2   libsystem_malloc.dylib        	0x0000000182c57b8c nano_malloc + 44 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/nano_malloc.c:871)
3   libsystem_malloc.dylib        	0x0000000182c46a70 malloc_zone_malloc + 172 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/malloc.c:1333)
4   libsystem_malloc.dylib        	0x0000000182c49428 malloc + 32 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/malloc.c:1622)
5   libc++abi.dylib               	0x00000001825df708 operator new(unsigned long) + 44 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxxabi/libcxxabi-400.7/src/stdlib_new_delete.cpp:33)
6   JavaScriptCore                	0x000000018ab84fbc WTF::ThreadHolder::initialize(WTF::Thread&amp;) + 60 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/ThreadHolderPthreads.cpp:57)
7   JavaScriptCore                	0x000000018ab853a8 WTF::Thread::current() + 164 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/ThreadingPthreads.cpp:311)
8   JavaScriptCore                	0x000000018ab853ac WTF::Thread::current() + 168 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/ThreadingPthreads.cpp:193)
9   JavaScriptCore                	0x000000018ab853ac WTF::Thread::current() + 168 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/ThreadingPthreads.cpp:193)
10  JavaScriptCore                	0x000000018ab853ac WTF::Thread::current() + 168 (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/ThreadingPthreads.cpp:193)
... &lt;repeat line 10 all the way down&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328374</commentid>
    <comment_count>30</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-12 21:18:25 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #29)
&gt; (In reply to Yusuke Suzuki from comment #28)
&gt; &gt; Now I&apos;m considering about very edge cases. Can you have a stacktrace for
&gt; &gt; this infinite recursion? When is Thread::current() called in this case?
&gt; &gt; I guess this is related to TLS deallocation things...
&gt; 
&gt; Here&apos;s the stack trace:
&gt; 
&gt; Thread 8 Crashed:
&gt; 0   libsystem_malloc.dylib        	0x0000000182c58cb0
&gt; _nano_malloc_check_clear + 516
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/
&gt; nano_malloc.c:0)
&gt; 1   libsystem_malloc.dylib        	0x0000000182c58b44
&gt; _nano_malloc_check_clear + 152
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/
&gt; nano_malloc.c:681)
&gt; 2   libsystem_malloc.dylib        	0x0000000182c57b8c nano_malloc + 44
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/
&gt; nano_malloc.c:871)
&gt; 3   libsystem_malloc.dylib        	0x0000000182c46a70 malloc_zone_malloc +
&gt; 172
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/
&gt; malloc.c:1333)
&gt; 4   libsystem_malloc.dylib        	0x0000000182c49428 malloc + 32
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libmalloc/libmalloc-139/src/
&gt; malloc.c:1622)
&gt; 5   libc++abi.dylib               	0x00000001825df708 operator new(unsigned
&gt; long) + 44
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxxabi/libcxxabi-400.7/
&gt; src/stdlib_new_delete.cpp:33)
&gt; 6   JavaScriptCore                	0x000000018ab84fbc
&gt; WTF::ThreadHolder::initialize(WTF::Thread&amp;) + 60
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/
&gt; ThreadHolderPthreads.cpp:57)
&gt; 7   JavaScriptCore                	0x000000018ab853a8 WTF::Thread::current()
&gt; + 164
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/
&gt; ThreadingPthreads.cpp:311)
&gt; 8   JavaScriptCore                	0x000000018ab853ac WTF::Thread::current()
&gt; + 168
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/
&gt; ThreadingPthreads.cpp:193)
&gt; 9   JavaScriptCore                	0x000000018ab853ac WTF::Thread::current()
&gt; + 168
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/
&gt; ThreadingPthreads.cpp:193)
&gt; 10  JavaScriptCore                	0x000000018ab853ac WTF::Thread::current()
&gt; + 168
&gt; (/BuildRoot/Library/Caches/com.apple.xbs/Sources/WTF/WTF-7604.1.30/wtf/
&gt; ThreadingPthreads.cpp:193)
&gt; ... &lt;repeat line 10 all the way down&gt;

Thank you! Can we have more logs? I would like to see which code originally issues Thread::current().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328377</commentid>
    <comment_count>31</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-12 21:23:54 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #30)
&gt; Thank you! Can we have more logs? I would like to see which code originally
&gt; issues Thread::current().

The trace is from a crash log, and the trace is cut off (there was more frames than the trace was able to capture).  So, unfortunately, I don&apos;t have the caller unless I can reproduce it.  I haven&apos;t worked on reproducing it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328904</commentid>
    <comment_count>32</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-14 11:34:01 -0700</bug_when>
    <thetext>@Yusuke, here&apos;s another crash trace related to this patch but is not the infinite recursion one:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000000000001f
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   JavaScriptCore                      0x0000000102d47f3c WTF::Thread::currentMayBeNull() + 16
1   JavaScriptCore                      0x0000000102d481b0 WTF::Thread::current() + 20
2   JavaScriptCore                      0x0000000102d52a78 WTF::WTFThreadData::createAndRegisterForGetspecificDirect() + 40
3   JavaScriptCore                      0x0000000102d12adc WTF::AtomicStringImpl::addSlowCase(WTF::StringImpl&amp;) + 304
4   WebCore                             0x00000001042fd020 WebCore::ResourceResponseBase::ResourceResponseBase(WebCore::URL const&amp;, WTF::String const&amp;, long long, WTF::String const&amp;) + 108
5   WebCore                             0x00000001034eb768 WebCore::ArchiveResource::create(WTF::RefPtr&lt;WebCore::SharedBuffer&gt;&amp;&amp;, WebCore::URL const&amp;, WTF::String const&amp;, WTF::String const&amp;, WTF::String const&amp;, WebCorWebCore::ResourceResponse const&amp;) + 144
6   WebKitLegacy                        0x000000010210cea4 -[WebResource(WebResourcePrivate) _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:] + 312
7   WebKitLegacy                        0x000000010210c02c -[WebResource initWithData:URL:MIMEType:textEncodingName:frameName:] + 36
...

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x000000000000001f   x1: 0x0000000000000008   x2: 0x0000000000000000   x3: 0x0000000000000251
    x4: 0x000000016f021340   x5: 0x000000010a8e1008   x6: 0x0000000000000038   x7: 0x0000000000000005
    x8: 0x00000001b7b34c60   x9: 0x00002217eac00000  x10: 0x0000000000000576  x11: 0x00000001b9e7d9ca
   x12: 0x00000001b9e7d9ca  x13: 0x0000000000000003  x14: 0x0000000000000001  x15: 0x0000000000000881
   x16: 0x0000000186817d48  x17: 0x0000000000000080  x18: 0x0000000000000000  x19: 0x00000001c4855150
   x20: 0x00000001148f8020  x21: 0x0000000102df8308  x22: 0x000000016f021348  x23: 0x00000001148d0000
   x24: 0x000000016f021350  x25: 0x0000000000000251  x26: 0x000000016f021058  x27: 0x00000001148fc000
   x28: 0x0000000000000008   fp: 0x000000016f020f50   lr: 0x0000000102d47f38
    sp: 0x000000016f020f50   pc: 0x0000000102d47f3c cpsr: 0x80000000

This one has nothing to do with Thread destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328924</commentid>
    <comment_count>33</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-14 11:58:07 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #32)
&gt; @Yusuke, here&apos;s another crash trace related to this patch but is not the
&gt; infinite recursion one:
&gt; 
&gt; Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
&gt; Exception Subtype: KERN_INVALID_ADDRESS at 0x000000000000001f
&gt; Termination Signal: Segmentation fault: 11
&gt; Termination Reason: Namespace SIGNAL, Code 0xb
&gt; Terminating Process: exc handler [0]
&gt; Triggered by Thread:  0
&gt; 
&gt; Thread 0 name:  Dispatch queue: com.apple.main-thread
&gt; Thread 0 Crashed:
&gt; 0   JavaScriptCore                      0x0000000102d47f3c
&gt; WTF::Thread::currentMayBeNull() + 16
&gt; 1   JavaScriptCore                      0x0000000102d481b0
&gt; WTF::Thread::current() + 20
&gt; 2   JavaScriptCore                      0x0000000102d52a78
&gt; WTF::WTFThreadData::createAndRegisterForGetspecificDirect() + 40
&gt; 3   JavaScriptCore                      0x0000000102d12adc
&gt; WTF::AtomicStringImpl::addSlowCase(WTF::StringImpl&amp;) + 304
&gt; 4   WebCore                             0x00000001042fd020
&gt; WebCore::ResourceResponseBase::ResourceResponseBase(WebCore::URL const&amp;,
&gt; WTF::String const&amp;, long long, WTF::String const&amp;) + 108
&gt; 5   WebCore                             0x00000001034eb768
&gt; WebCore::ArchiveResource::create(WTF::RefPtr&lt;WebCore::SharedBuffer&gt;&amp;&amp;,
&gt; WebCore::URL const&amp;, WTF::String const&amp;, WTF::String const&amp;, WTF::String
&gt; const&amp;, WebCorWebCore::ResourceResponse const&amp;) + 144
&gt; 6   WebKitLegacy                        0x000000010210cea4
&gt; -[WebResource(WebResourcePrivate)
&gt; _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:] +
&gt; 312
&gt; 7   WebKitLegacy                        0x000000010210c02c -[WebResource
&gt; initWithData:URL:MIMEType:textEncodingName:frameName:] + 36
&gt; ...
&gt; 
&gt; Thread 0 crashed with ARM Thread State (64-bit):
&gt;     x0: 0x000000000000001f   x1: 0x0000000000000008   x2: 0x0000000000000000
&gt; x3: 0x0000000000000251
&gt;     x4: 0x000000016f021340   x5: 0x000000010a8e1008   x6: 0x0000000000000038
&gt; x7: 0x0000000000000005
&gt;     x8: 0x00000001b7b34c60   x9: 0x00002217eac00000  x10: 0x0000000000000576
&gt; x11: 0x00000001b9e7d9ca
&gt;    x12: 0x00000001b9e7d9ca  x13: 0x0000000000000003  x14: 0x0000000000000001
&gt; x15: 0x0000000000000881
&gt;    x16: 0x0000000186817d48  x17: 0x0000000000000080  x18: 0x0000000000000000
&gt; x19: 0x00000001c4855150
&gt;    x20: 0x00000001148f8020  x21: 0x0000000102df8308  x22: 0x000000016f021348
&gt; x23: 0x00000001148d0000
&gt;    x24: 0x000000016f021350  x25: 0x0000000000000251  x26: 0x000000016f021058
&gt; x27: 0x00000001148fc000
&gt;    x28: 0x0000000000000008   fp: 0x000000016f020f50   lr: 0x0000000102d47f38
&gt;     sp: 0x000000016f020f50   pc: 0x0000000102d47f3c cpsr: 0x80000000
&gt; 
&gt; This one has nothing to do with Thread destruction.

Thank you!
I think this is because wtfThreadData() is called before calling WTF::initializeThreading().
I thought that WTFThreadData depends on WTF::initializeThreading() because it uses ThreadSpecific&lt;&gt; things.

But I think we should not do that. WTFThreadData can be called without calling WTF::initializeThreading().
I think having StackBounds in both WTFThreadData / Thread would be the simplest design here.
I&apos;m not sure it fixes this infinite recursion, but it seems worth doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328950</commentid>
    <comment_count>34</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-14 12:42:54 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #33)
&gt; Thank you!
&gt; I think this is because wtfThreadData() is called before calling
&gt; WTF::initializeThreading().
&gt; I thought that WTFThreadData depends on WTF::initializeThreading() because
&gt; it uses ThreadSpecific&lt;&gt; things.
&gt; 
&gt; But I think we should not do that. WTFThreadData can be called without
&gt; calling WTF::initializeThreading().
&gt; I think having StackBounds in both WTFThreadData / Thread would be the
&gt; simplest design here.
&gt; I&apos;m not sure it fixes this infinite recursion, but it seems worth doing.

Hmmm ... how is WTFThreadData different than WTF::Thread?  Taking a quick glance at it, I wonder if the 2 should be consolidated.  Aren&apos;t they both describing the thread, and stored in a ThreadSpecific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328978</commentid>
    <comment_count>35</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-14 13:40:44 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #34)
&gt; 
&gt; Hmmm ... how is WTFThreadData different than WTF::Thread?  Taking a quick
&gt; glance at it, I wonder if the 2 should be consolidated.  Aren&apos;t they both
&gt; describing the thread, and stored in a ThreadSpecific?

Yes, merging WTFThreadData and WTF::Thread is one of the goal of my threading refactoring patches.
But it requires substaintial changes in WTFThread, ThreadHolder and WTF::Thread.
So, in this patch, I think having 2 copies of StackBounds is nice.
Currently, I&apos;m planning to merge them when threading patches are almost landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328981</commentid>
    <comment_count>36</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-14 13:44:17 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #35)
&gt; (In reply to Mark Lam from comment #34)
&gt; &gt; 
&gt; &gt; Hmmm ... how is WTFThreadData different than WTF::Thread?  Taking a quick
&gt; &gt; glance at it, I wonder if the 2 should be consolidated.  Aren&apos;t they both
&gt; &gt; describing the thread, and stored in a ThreadSpecific?
&gt; 
&gt; Yes, merging WTFThreadData and WTF::Thread is one of the goal of my
&gt; threading refactoring patches.
&gt; But it requires substaintial changes in WTFThread, ThreadHolder and
&gt; WTF::Thread.
&gt; So, in this patch, I think having 2 copies of StackBounds is nice.
&gt; Currently, I&apos;m planning to merge them when threading patches are almost
&gt; landed.

OK. Going with 2 copies of StackBounds works for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329061</commentid>
    <comment_count>37</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-14 16:22:32 -0700</bug_when>
    <thetext>I&apos;ve found the source of the infinite recursion.  Basically, it goes something like this:

    [JSContext currentContext] calls
        wtfThreadData(), which calls
            WTFThreadData::createAndRegisterForGetspecificDirect(), which calls
                WTFThreadData() constructor, which calls
                    Thread::current(), which calls
                        Thread::initializeCurrentThreadEvenIfNonWTFCreated().

However, this code path has not called WTF::initializeThreading() yet.  I added a call to WTF::initializeThreading() in [JSContext currentContext] before the call to wtfThreadData(), and all is well again.

In summary, the issue is identical to the other one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329174</commentid>
    <comment_count>38</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-15 06:39:04 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #37)
&gt; I&apos;ve found the source of the infinite recursion.  Basically, it goes
&gt; something like this:
&gt; 
&gt;     [JSContext currentContext] calls
&gt;         wtfThreadData(), which calls
&gt;             WTFThreadData::createAndRegisterForGetspecificDirect(), which
&gt; calls
&gt;                 WTFThreadData() constructor, which calls
&gt;                     Thread::current(), which calls
&gt;                         Thread::initializeCurrentThreadEvenIfNonWTFCreated().
&gt; 
&gt; However, this code path has not called WTF::initializeThreading() yet.  I
&gt; added a call to WTF::initializeThreading() in [JSContext currentContext]
&gt; before the call to wtfThreadData(), and all is well again.
&gt; 
&gt; In summary, the issue is identical to the other one.

Great! I&apos;ll upload the patch with this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329178</commentid>
    <comment_count>39</comment_count>
      <attachid>315544</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-15 07:46:08 -0700</bug_when>
    <thetext>Created attachment 315544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330125</commentid>
    <comment_count>40</comment_count>
      <attachid>315544</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-18 14:31:58 -0700</bug_when>
    <thetext>Comment on attachment 315544
Patch

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

r=me.  I&apos;m going to do a local build and test on iOS to make sure that the previously seen issues are truly resolved (and that there aren&apos;t any other surprises).  Will let you know when all clear to land.  Thanks.

&gt; Source/WTF/wtf/WTFThreadData.h:101
&gt; +    StackStats::PerThreadStats m_stackStats { };

This is not needed.  It should be invoked by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330149</commentid>
    <comment_count>41</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-07-18 15:12:04 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #40)
&gt; Comment on attachment 315544 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315544&amp;action=review
&gt; 
&gt; r=me.  I&apos;m going to do a local build and test on iOS to make sure that the
&gt; previously seen issues are truly resolved (and that there aren&apos;t any other
&gt; surprises).  Will let you know when all clear to land.  Thanks.

Looks like the iOS are indeed resolved.  You&apos;re good to land with the 1 remaining issue fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330274</commentid>
    <comment_count>42</comment_count>
      <attachid>315544</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-18 21:45:49 -0700</bug_when>
    <thetext>Comment on attachment 315544
Patch

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

&gt;&gt; Source/WTF/wtf/WTFThreadData.h:101
&gt;&gt; +    StackStats::PerThreadStats m_stackStats { };
&gt; 
&gt; This is not needed.  It should be invoked by default.

Thanks! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330276</commentid>
    <comment_count>43</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-07-18 21:54:06 -0700</bug_when>
    <thetext>Committed r219647: &lt;http://trac.webkit.org/changeset/219647&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314377</attachid>
            <date>2017-07-01 02:20:31 -0700</date>
            <delta_ts>2017-07-02 00:29:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170701182030.patch</filename>
            <type>text/plain</type>
            <size>24901</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmE4MTQ4ODY2YWZlN2M2YjJiNWQ1ZDQ3NTczNTZlNTg0MmExYmQzLi45M2NhMTY2YjU1YjY1MjY4
NjY4ZGMyZTM1NTQwNzFhMTAzN2IzZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNy0wNy0wMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWRz
IHN0YWNrLgorICAgICAgICBDdXJyZW50bHksIHN0YWNrIGJvdW5kcyBhcmUgc3RvcmVkIGluIFdU
RlRocmVhZERhdGEgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICBpbiBUTFMuIFRodXMsIG9ubHkg
dGhlIHRocmVhZCBpdHNlbGYgY2FuIGFjY2VzcyBpdHMgb3duIFdURlRocmVhZERhdGEuCisgICAg
ICAgIFdlIHdvcmthcm91bmQgdGhpcyBzaXR1YXRpb24gYnkgaG9sZGluZyBTdGFja0JvdW5kcyBp
biBNYWNoaW5lVGhyZWFkIGluIEpTQywKKyAgICAgICAgYnV0IFN0YWNrQm91bmRzIHNob3VsZCBi
ZSBwdXQgaW4gV1RGOjpUaHJlYWQgaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVz
IFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0byBXVEY6OlRocmVhZC4gU3RhY2tCb3Vu
ZHMKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVGhyZWFkLiBU
aHVzIHB1dHRpbmcgaXQgaW4gV1RGOjpUaHJlYWQKKyAgICAgICAgaXMgbmF0dXJhbCBjaG9pY2Uu
CisKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpNYWNoaW5lVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAg
ICAgIChKU0M6OlZNOjp1cGRhdGVTdGFja0xpbWl0cyk6CisgICAgICAgIChKU0M6OlZNOjpjb21t
aXR0ZWRTdGFja0J5dGVDb3VudCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAo
SlNDOjpWTTo6aXNTYWZlVG9SZWN1cnNlKToKKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHA6CisgICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWTTo6ZW5zdXJlU3RhY2tD
YXBhY2l0eUZvcik6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKiB5
YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25z
dHJ1Y3Rvcjo6aXNTYWZlVG9SZWN1cnNlKToKKwogMjAxNy0wNi0zMCAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGb3JjZSBjcmFzaFdpdGhJbmZvIHRv
IGJlIG91dCBvZiBsaW5lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZwppbmRleCA1NGYzMjg5MGEyYmFlMjM3ZGRlN2NlNzJhNWM1OTVlZDVm
ZDc0MDUzLi4zNGE0MDE2MTViN2I0NjA3YmYyMmY4N2M0N2EzYWM5MGNiNTFkY2JiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ4IEBACisyMDE3LTA3LTAxICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFdURjo6VGhyZWFkIHNob3VsZCBoYXZlIHRoZSB0aHJlYWRzIHN0
YWNrIGJvdW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3Mzk3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlIG1vdmUgU3RhY2tCb3VuZHMgZnJvbSBXVEZUaHJlYWREYXRhIHRvIFdURjo6VGhyZWFk
LgorICAgICAgICBPbmUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgd2Ugc2hvdWxkIG1ha2UgdmFs
aWQgU3RhY2tCb3VuZHMKKyAgICAgICAgdmlzaWJsZSB0byBUaHJlYWQ6OmNyZWF0ZSgpIGNhbGxl
ci4gV2hlbiB0aGUgY2FsbGVyIGdldAorICAgICAgICBXVEY6OlRocmVhZCBmcm9tIFRocmVhZDo6
Y3JlYXRlKCksIHRoaXMgV1RGOjpUaHJlYWQgc2hvdWxkCisgICAgICAgIGhhdmUgYSB2YWxpZCBT
dGFja0JvdW5kcy4gQnV0IFN0YWNrQm91bmRzIGluZm9ybWF0aW9uIGNhbiBiZQorICAgICAgICBy
ZXRyaXZlZCBvbmx5IGluIHRoZSBXVEY6OlRocmVhZCdzIHRocmVhZCBpdHNlbGYuCisKKyAgICAg
ICAgVGh1cywgd2UgYWRkIGEgbmV3IE11dGV4LCAiaW5pdGlhbGl6YXRpb25NdXRleCIuIFdoZW4g
Y3JlYXRpbmcKKyAgICAgICAgYSB0aHJlYWQsIHdlIGZpcnN0IGxvY2sgdGhpcyBtdXRleCwgYW5k
IHBhc3MgaXRzIGxvY2tpbmcgb3duZXJzaGlwCisgICAgICAgIHRvIHRoZSB0aHJlYWQuIFRoZW4s
IHRoZSBjYWxsZXIgd2FpdHMgZm9yIHVubG9jayBvZiB0aGlzIG11dGV4LgorICAgICAgICBUaGUg
dGhyZWFkIGluaXRpYWxpemUgV1RGOjpUaHJlYWQsIGFuZCB1bmxvY2sgaXQuCisKKyAgICAgICAg
KiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmVtcHR5Qm91
bmRzKToKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OlN0YWNrQm91bmRzKToKKyAgICAgICAg
KiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAgIChXVEY6OlN0YWNrU3RhdHM6OlBlclRocmVh
ZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6Cisg
ICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudE1heUJlTnVsbCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6OnN0YWNrKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudCk6Cisg
ICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudE1heUJlTnVsbCk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6
CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAq
IHd0Zi9XVEZUaHJlYWREYXRhLmg6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNr
KTogRGVsZXRlZC4KKwogMjAxNy0wNi0zMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBGb3JjZSBjcmFzaFdpdGhJbmZvIHRvIGJlIG91dCBvZiBsaW5l
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAKaW5kZXggNjc2M2VhM2FiMWMyZjQ2NzljMzc3MWIxOTE5NzNjNTMxNmJmNWY0MC4uOGI5YmI2
ODY0NWNjZDRkOGIwMzFiNmNjYWRkMjgwNTkzYjg5NzBkMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCkBAIC0yMzksOSArMjM5LDYg
QEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoQ29uc2VydmF0
aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKIE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFk
OjpNYWNoaW5lVGhyZWFkKCkKICAgICA6IG1fdGhyZWFkKFdURjo6VGhyZWFkOjpjdXJyZW50KCkp
CiB7Ci0gICAgYXV0byBzdGFja0JvdW5kcyA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygpOwotICAg
IG1fc3RhY2tCYXNlID0gc3RhY2tCb3VuZHMub3JpZ2luKCk7Ci0gICAgbV9zdGFja0VuZCA9IHN0
YWNrQm91bmRzLmVuZCgpOwogfQogCiBzaXplX3QgTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJl
YWQ6OmdldFJlZ2lzdGVycyhNYWNoaW5lVGhyZWFkOjpSZWdpc3RlcnMmIHJlZ2lzdGVycykKQEAg
LTMwMiwxNSArMjk5LDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IG9zUmVkWm9uZUFkanVzdG1lbnQo
KQogCiBzdGQ6OnBhaXI8dm9pZCosIHNpemVfdD4gTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJl
YWQ6OmNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCkKIHsKLSAgICBjaGFyKiBiZWdpbiA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrQmFzZSk7CisgICAgY2hhciogYmVnaW4g
PSByZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tCYXNlKCkpOwogICAgIGNoYXIqIGVu
ZCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih2
b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFja1RvcCkpKTsKICAgICBBU1NF
UlQoYmVnaW4gPj0gZW5kKTsKIAogICAgIGNoYXIqIGVuZFdpdGhSZWRab25lID0gZW5kICsgb3NS
ZWRab25lQWRqdXN0bWVudCgpOwogICAgIEFTU0VSVChXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8
c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25l
KSkgPT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVuZFdpdGhSZWRab25lKSk7CiAKLSAg
ICBpZiAoZW5kV2l0aFJlZFpvbmUgPCBtX3N0YWNrRW5kKQotICAgICAgICBlbmRXaXRoUmVkWm9u
ZSA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihtX3N0YWNrRW5kKTsKKyAgICBpZiAoZW5k
V2l0aFJlZFpvbmUgPCBzdGFja0VuZCgpKQorICAgICAgICBlbmRXaXRoUmVkWm9uZSA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0VuZCgpKTsKIAogICAgIHN0ZDo6c3dhcChiZWdp
biwgZW5kV2l0aFJlZFpvbmUpOwogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihiZWdpbiwgZW5k
V2l0aFJlZFpvbmUgLSBiZWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5oCmluZGV4IGI2MmViNDMxMzEyYzhiODUyZDUzMjhjOTc2YTYyMjVi
OWU3OWFjNDMuLmMxNTEwZDYyNTFjMGIzNGFmOWE0ZWI5NTFhNTFlOTZlYTk0ZDVjMjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCkBAIC03
MiwxMiArNzIsMTAgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAgICAgICBzdGQ6OnBhaXI8
dm9pZCosIHNpemVfdD4gY2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKTsKIAogICAgICAgICBX
VEY6OlRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZC0+
aWQoKTsgfQotICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
QmFzZTsgfQotICAgICAgICB2b2lkKiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tF
bmQ7IH0KKyAgICAgICAgdm9pZCogc3RhY2tCYXNlKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQt
PnN0YWNrKCkub3JpZ2luKCk7IH0KKyAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJl
dHVybiBtX3RocmVhZC0+c3RhY2soKS5lbmQoKTsgfQogCiAgICAgICAgIFJlZjxXVEY6OlRocmVh
ZD4gbV90aHJlYWQ7Ci0gICAgICAgIHZvaWQqIG1fc3RhY2tCYXNlOwotICAgICAgICB2b2lkKiBt
X3N0YWNrRW5kOwogICAgICAgICBNYWNoaW5lVGhyZWFkKiBtX25leHQgeyBudWxscHRyIH07CiAg
ICAgICAgIE1hY2hpbmVUaHJlYWQqIG1fcHJldiB7IG51bGxwdHIgfTsKICAgICB9OwpAQCAtMTA0
LDcgKzEwMiw3IEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICNkZWZpbmUgREVDTEFSRV9BTkRf
Q09NUFVURV9DVVJSRU5UX1RIUkVBRF9TVEFURShzdGF0ZU5hbWUpIFwKICAgICBDdXJyZW50VGhy
ZWFkU3RhdGUgc3RhdGVOYW1lOyBcCiAgICAgc3RhdGVOYW1lLnN0YWNrVG9wID0gJnN0YXRlTmFt
ZTsgXAotICAgIHN0YXRlTmFtZS5zdGFja09yaWdpbiA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygp
Lm9yaWdpbigpOyBcCisgICAgc3RhdGVOYW1lLnN0YWNrT3JpZ2luID0gVGhyZWFkOjpjdXJyZW50
KCkuc3RhY2soKS5vcmlnaW4oKTsgXAogICAgIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJfU1RB
VEUoc3RhdGVOYW1lICMjIF9yZWdpc3RlclN0YXRlKTsgXAogICAgIHN0YXRlTmFtZS5yZWdpc3Rl
clN0YXRlID0gJnN0YXRlTmFtZSAjIyBfcmVnaXN0ZXJTdGF0ZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCmluZGV4IDll
ZjE0M2FkNDhlNzFkMjhiMTdiYTQxNmZhM2IxNGJjYmRiNzQ1YWEuLjJlODE0MjcwYjliYTFmMzJi
MzljYzZkNmU0MzQ4YWY5YjVhNzIwM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC03NSw4ICs3NSw3IEBAIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAgICAgICAgIERpc2FsbG93Vk1SZWVudHJ5Ojppbml0
aWFsaXplKCk7CiAjZW5kaWYKICAgICAgICAgaW5pdGlhbGl6ZVN1cGVyU2FtcGxlcigpOwotICAg
ICAgICBXVEZUaHJlYWREYXRhJiB0aHJlYWREYXRhID0gd3RmVGhyZWFkRGF0YSgpOwotICAgICAg
ICB0aHJlYWREYXRhLnNldFNhdmVkTGFzdFN0YWNrVG9wKHRocmVhZERhdGEuc3RhY2soKS5vcmln
aW4oKSk7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRTYXZlZExhc3RTdGFja1RvcChUaHJl
YWQ6OmN1cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICAgICAgV2FzbTo6VGh1bmtzOjppbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKaW5kZXggNDg3MjdhNjYyZWU5NjU2YWJjYTg1YzA1YzM1NmE2Zjk0NjQy
NWQzZS4uNmU2ODYzZmEwMzkyZmNhNWU5MTRhODE4YzBiZTA2ZDNiNTE5ZDA5NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fc2hhZG93Q2hpY2tlbihzdGQ6
Om1ha2VfdW5pcXVlPFNoYWRvd0NoaWNrZW4+KCkpCiB7CiAgICAgaW50ZXJwcmV0ZXIgPSBuZXcg
SW50ZXJwcmV0ZXIoKnRoaXMpOwotICAgIFN0YWNrQm91bmRzIHN0YWNrID0gd3RmVGhyZWFkRGF0
YSgpLnN0YWNrKCk7CisgICAgU3RhY2tCb3VuZHMgc3RhY2sgPSBUaHJlYWQ6OmN1cnJlbnQoKS5z
dGFjaygpOwogICAgIHVwZGF0ZVNvZnRSZXNlcnZlZFpvbmVTaXplKE9wdGlvbnM6OnNvZnRSZXNl
cnZlZFpvbmVTaXplKCkpOwogICAgIHNldExhc3RTdGFja1RvcChzdGFjay5vcmlnaW4oKSk7CiAK
QEAgLTY3MSw3ICs2NzEsNyBAQCBpbmxpbmUgdm9pZCBWTTo6dXBkYXRlU3RhY2tMaW1pdHMoKQog
ICAgIHZvaWQqIGxhc3RTb2Z0U3RhY2tMaW1pdCA9IG1fc29mdFN0YWNrTGltaXQ7CiAjZW5kaWYK
IAotICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHd0ZlRocmVhZERhdGEoKS5zdGFjaygp
OworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IFRocmVhZDo6Y3VycmVudCgpLnN0YWNr
KCk7CiAgICAgc2l6ZV90IHJlc2VydmVkWm9uZVNpemUgPSBPcHRpb25zOjpyZXNlcnZlZFpvbmVT
aXplKCk7CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoYXQgT3B0aW9u
czo6cmVzZXJ2ZWRab25lU2l6ZSgpID49IG1pbmltdW1SZXNlcnZlWm9uZVNpemUgYXQKICAgICAv
LyBvcHRpb25zIGluaXRpYWxpemF0aW9uIHRpbWUsIGFuZCB0aGUgb3B0aW9uIHZhbHVlIHNob3Vs
ZCBub3QgaGF2ZSBiZWVuIGNoYW5nZWQgdGhlcmVhZnRlci4KQEAgLTg4NSw5ICs4ODUsOSBAQCBz
aXplX3QgVk06OmNvbW1pdHRlZFN0YWNrQnl0ZUNvdW50KCkKICNpZiBFTkFCTEUoSklUKQogICAg
IC8vIFdoZW4gdXNpbmcgdGhlIEMgc3RhY2ssIHdlIGRvbid0IGtub3cgaG93IG1hbnkgc3RhY2sg
cGFnZXMgYXJlIGFjdHVhbGx5CiAgICAgLy8gY29tbWl0dGVkLiBTbywgd2UgdXNlIHRoZSBjdXJy
ZW50IHN0YWNrIHVzYWdlIGFzIGFuIGVzdGltYXRlLgotICAgIEFTU0VSVCh3dGZUaHJlYWREYXRh
KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKKyAgICBBU1NFUlQoVGhyZWFkOjpjdXJy
ZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICBpbnQ4X3QqIGN1cnJlbnQg
PSByZWludGVycHJldF9jYXN0PGludDhfdCo+KCZjdXJyZW50KTsKLSAgICBpbnQ4X3QqIGhpZ2gg
PSByZWludGVycHJldF9jYXN0PGludDhfdCo+KHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLm9yaWdp
bigpKTsKKyAgICBpbnQ4X3QqIGhpZ2ggPSByZWludGVycHJldF9jYXN0PGludDhfdCo+KFRocmVh
ZDo6Y3VycmVudCgpLnN0YWNrKCkub3JpZ2luKCkpOwogICAgIHJldHVybiBoaWdoIC0gY3VycmVu
dDsKICNlbHNlCiAgICAgcmV0dXJuIENMb29wU3RhY2s6OmNvbW1pdHRlZEJ5dGVDb3VudCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZGI1YWYzNTFiMmIwYjk0MTY0NzVmMDU3
YWZkZDhjYjE1YWEzN2NiYi4uMmU3NTk5MTBjYzIxYjA1ZWIxNGMzZjFkOTI5NjdiYTMxZDJlODQz
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC02ODksNyArNjg5LDcgQEAgY2xh
c3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+LCBwdWJsaWMgRG91Ymx5TGlu
a2VkTGlzdE5vZGU8Vk0+IHsKIAogICAgIGJvb2wgaXNTYWZlVG9SZWN1cnNlKHZvaWQqIHN0YWNr
TGltaXQpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNr
KCkuaXNHcm93aW5nRG93bndhcmQoKSk7CisgICAgICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQo
KS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgICAgICB2b2lkKiBjdXJyID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oJmN1cnIpOwogICAgICAgICByZXR1cm4gY3VyciA+PSBzdGFj
a0xpbWl0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNRW50cnlTY29wZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5
U2NvcGUuY3BwCmluZGV4IGMyZDliZGExODhjNDc3MjAyNTZkNDAzMDY0ODI4NmVjNDVlMzFjNTku
LmQxMWE4ZmZhNjZkYjVmZTMwZmI5ZjQ5ZjQ1MzEzODM2Yjc4ZDIzNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcApAQCAtNDEsNyArNDEsNyBA
QCBWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7CiAgICAgQVNT
RVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKLSAg
ICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7Cisg
ICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7
CiAgICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7CiAgICAgICAgIHZtLmVudHJ5U2NvcGUgPSB0aGlz
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNSW5saW5lcy5oCmluZGV4IDVhNzc2
MTk1MGUwY2Y2YjI4ODU2MDE5MzFhZjZiNzFhM2JlMDJkNzguLmJjMGMyNWY5MWUyYzE3NjFhMjFj
YTIwZWIwODgyYTA5M2EyMTUxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
SW5saW5lcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogYm9vbCBWTTo6ZW5z
dXJlU3RhY2tDYXBhY2l0eUZvcihSZWdpc3RlciogbmV3VG9wT2ZTdGFjaykKIHsKICNpZiBFTkFC
TEUoSklUKQotICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5pc0dyb3dpbmdEb3du
d2FyZCgpKTsKKyAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdE
b3dud2FyZCgpKTsKICAgICByZXR1cm4gbmV3VG9wT2ZTdGFjayA+PSBtX3NvZnRTdGFja0xpbWl0
OwogI2Vsc2UKICAgICByZXR1cm4gZW5zdXJlU3RhY2tDYXBhY2l0eUZvckNMb29wKG5ld1RvcE9m
U3RhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAw
MmZhNGZkMTBiYWM4Y2U4NjczMmRjNmZiMjA1ODRiM2VmODQ0MjNjLi4zZDg0YWI5OWNhNDIxOTVk
ZmZiNDM3OTZhZDMzM2EwYzRlY2UzMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcApAQCAtMjY5LDI1ICsyNjksNyBAQCBjbGFzcyBWTVRyYXBzOjpTaWduYWxT
ZW5kZXIgZmluYWwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgVGhyZWFkJiB0aHJlYWQgPSAqb3duZXJUaHJl
YWQtPmdldCgpOwotICAgICAgICAgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gU3Rh
Y2tCb3VuZHM6OmVtcHR5Qm91bmRzKCk7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB1c2UgdGhlIG1hY2hpbmUgdGhyZWFkcyBiZWNh
dXNlIGl0IGlzIHRoZSBvbmx5IG5vbi1UTFMgc291cmNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGZvciB0aGUgc3RhY2sgYm91bmRzIG9mIHRoaXMgdGhyZWFkLiBXZSBzaG91bGQga2VlcCBpbiBv
biB0aGUgV1RGOjpUaHJlYWQgaW5zdGVhZC4KLSAgICAgICAgICAgICAgICAgICAgLy8gc2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczOTc1Ci0gICAgICAgICAg
ICAgICAgICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcyA9IHZtLmhlYXAubWFjaGlu
ZVRocmVhZHMoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBtYWNoaW5lVGhyZWFkc0xvY2sg
PSB0cnlIb2xkTG9jayhtYWNoaW5lVGhyZWFkcy5nZXRMb2NrKCkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1hY2hpbmVUaHJlYWRzTG9jaykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsgLy8gVHJ5IGFnYWluIGxhdGVyLgotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHRo
cmVhZExpc3QgPSBtYWNoaW5lVGhyZWFkcy50aHJlYWRzTGlzdEhlYWQobWFjaGluZVRocmVhZHNM
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRo
cmVhZCogbWFjaGluZVRocmVhZCA9IHRocmVhZExpc3QuaGVhZCgpOyBtYWNoaW5lVGhyZWFkOyBt
YWNoaW5lVGhyZWFkID0gbWFjaGluZVRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobWFjaGluZVRocmVhZC0+bV90aHJlYWQuZ2V0KCkgPT0gdGhyZWFkKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQm91bmRzID0gU3RhY2tCb3VuZHMobWFjaGlu
ZVRocmVhZC0+c3RhY2tCYXNlKCksIG1hY2hpbmVUaHJlYWQtPnN0YWNrRW5kKCkpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzdGFj
a0JvdW5kcy5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5k
cyk7CisgICAgICAgICAgICAgICAgdm0udHJhcHMoKS50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRz
KGNvbnRleHQsIHRocmVhZC5zdGFjaygpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcAppbmRleCAxYzJkZDc1
ZGNiNDRjYTI4YjlhNzEwNDg5Y2IwYTRlNzE4ZjRkYWUyLi41ZjI3MzA2YTQ1NjEyZmM1MmU1ZDYz
NTdiZDgzODQ5NDAxNTU2MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFy
ci9ZYXJyUGF0dGVybi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBh
dHRlcm4uY3BwCkBAIC04ODAsNyArODgwLDcgQEAgY2xhc3MgWWFyclBhdHRlcm5Db25zdHJ1Y3Rv
ciB7CiAgICAgewogICAgICAgICBpZiAoIW1fc3RhY2tMaW1pdCkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5n
RG93bndhcmQoKSk7CisgICAgICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlz
R3Jvd2luZ0Rvd253YXJkKCkpOwogICAgICAgICBpbnQ4X3QqIGN1cnIgPSByZWludGVycHJldF9j
YXN0PGludDhfdCo+KCZjdXJyKTsKICAgICAgICAgaW50OF90KiBsaW1pdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50OF90Kj4obV9zdGFja0xpbWl0KTsKICAgICAgICAgcmV0dXJuIGN1cnIgPj0gbGlt
aXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oIGIvU291cmNlL1dU
Ri93dGYvU3RhY2tCb3VuZHMuaAppbmRleCBjZDYyYzE0OGE2YzdlZmM5NTE3YThiMDliOGEzMmM3
ZmUxOTBjZGVmLi4zYzkxMWVmMzZlYzY5NjJjOTdmOWZiZDQzMzMzOTMzZWY2ZDhlYWIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1N0YWNrQm91bmRzLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgU3RhY2tCb3VuZHMgewogICAg
IGNvbnN0IHN0YXRpYyBzaXplX3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA2NCAqIDEw
MjQ7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RhY2tCb3VuZHMgZW1wdHlCb3VuZHMoKSB7IHJl
dHVybiBTdGFja0JvdW5kcygpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBTdGFja0JvdW5kcyBl
bXB0eUJvdW5kcygpIHsgcmV0dXJuIFN0YWNrQm91bmRzKCk7IH0KIAogICAgIHN0YXRpYyBTdGFj
a0JvdW5kcyBjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKQogICAgIHsKQEAgLTEyNyw5ICsxMjcs
OSBAQCBjbGFzcyBTdGFja0JvdW5kcyB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFN0YWNrQm91
bmRzKCkKLSAgICAgICAgOiBtX29yaWdpbigwKQotICAgICAgICAsIG1fYm91bmQoMCkKKyAgICBj
b25zdGV4cHIgU3RhY2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKG51bGxwdHIpCisgICAg
ICAgICwgbV9ib3VuZChudWxscHRyKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwIGIvU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAK
aW5kZXggMDY0ZjJmMDUyYWFmMzhiOWY4MGE2ZGQ0MTEzMmU2NTQ2ZTQ1N2Y0Mi4uNTYxMzBiMDRl
YTI1NDhlMTBkMDhhOWQwMjkyY2IwM2EwYjFiYzg1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvU3RhY2tTdGF0cy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAKQEAg
LTU5LDcgKzU5LDcgQEAgaW50IFN0YWNrU3RhdHM6OnNfbWF4TGF5b3V0UmVlbnRyeURlcHRoID0g
MDsKIAogU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHM6OlBlclRocmVhZFN0YXRzKCkKIHsKLSAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwog
ICAgIG1fcmVlbnRyeURlcHRoID0gMDsKICAgICBtX3N0YWNrU3RhcnQgPSAoY2hhciopc3RhY2su
b3JpZ2luKCk7CiAgICAgbV9jdXJyZW50Q2hlY2tQb2ludCA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApp
bmRleCBkZGMyOGMyYTU0YjMyYTFhNjY0Y2EzYjA5N2YzYWJlMmY3Yzg2Zjk3Li4yNmI3Yzg4YmFj
Y2ViNjExYzk5ZGFhYTcwMTViOGExMjg4ZmZkYjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTUy
LDYgKzUyLDcgQEAgc3RydWN0IE5ld1RocmVhZENvbnRleHQgewogICAgIGNvbnN0IGNoYXIqIG5h
bWU7CiAgICAgRnVuY3Rpb248dm9pZCgpPiBlbnRyeVBvaW50OwogICAgIE11dGV4IGNyZWF0aW9u
TXV0ZXg7CisgICAgTXV0ZXgqIGluaXRpYWxpemF0aW9uTXV0ZXg7CiB9OwogCiBjb25zdCBjaGFy
KiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKQEAg
LTkyLDYgKzkzLDggQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0
RGF0YSkKICAgICB9CiAKICAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJu
YWwoY29udGV4dC0+bmFtZSk7CisgICAgLy8gQWNrIGluaXRpYWxpemF0aW9uIHRvIHRoZSBjcmVh
dG9yLgorICAgIGNvbnRleHQtPmluaXRpYWxpemF0aW9uTXV0ZXgtPnVubG9jaygpOwogCiAgICAg
YXV0byBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKIApAQCAtMTAz
LDEyICsxMDYsMzYgQEAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0
RGF0YSkKIAogUmVmUHRyPFRocmVhZD4gVGhyZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwg
RnVuY3Rpb248dm9pZCgpPiYmIGVudHJ5UG9pbnQpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCog
Y29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50
KSwgeyB9IH07CisgICAgLy8gTG9jayBpbml0aWFsaXphdGlvbk11dGV4IGFuZCB0cmFuc2ZlciBs
b2NraW5nIG93bmVyc2hpcCB0byBhIHRocmVhZC4KKyAgICAvLyBUaGVuLCBjcmVhdG9yIHdpbGwg
d2FpdCB1bnRpbCBpbml0aWFsaXphdGlvbk11dGV4IGlzIHVubG9ja2VkLgorICAgIE11dGV4IGlu
aXRpYWxpemF0aW9uTXV0ZXg7CisgICAgaW5pdGlhbGl6YXRpb25NdXRleC5sb2NrKCk7CiAKLSAg
ICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1bnRpbCB3ZSd2ZSBl
c3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOworICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQg
PSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSwg
JmluaXRpYWxpemF0aW9uTXV0ZXggfTsKIAotICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUludGVy
bmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIFJlZlB0cjxUaHJlYWQ+
IHJlc3VsdDsKKyAgICB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20g
ZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4K
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOworCisg
ICAgICAgIHJlc3VsdCA9IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwg
Y29udGV4dCwgbmFtZSk7CisgICAgfQorCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGluaXRpYWxp
emF0aW9uTXV0ZXgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RocmVhZCogVGhyZWFkOjpj
dXJyZW50TWF5QmVOdWxsKCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xk
ZXI6OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJl
YWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemUo
KQoreworICAgIG1fc3RhY2sgPSBTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRz
KCk7CiB9CiAKIHZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggMzM3MmFj
MTJlZDhmZTBiM2EwMWFmMGYxZmUzNjY1ZWIzNDk2YmRhMi4uMzMxN2MwZGU5MWFkMWU1NTE5NWU5
YzlhZDQ3ZDkyMzU3YWIzNWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+
CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKICNpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCkBAIC02OCw3ICs2OSw3IEBAIGNsYXNzIFRocmVhZCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKIAogICAgIC8vIFJldHVybnMgVGhyZWFk
IG9iamVjdC4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCYgY3VycmVudCgp
OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkKiBjdXJyZW50TWF5QmVOdWxs
KCk7CisgICAgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgLy8gUmV0
dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVzZXIg
b25seSBjYXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQgdGlt
ZSwgdXNlcnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmllciBk
b2VzIG5vdCBlbnN1cmUKQEAgLTEwOSw2ICsxMTAsNyBAQCBjbGFzcyBUaHJlYWQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAgICAgLy8gQ2FsbGVkIGluIHRoZSB0aHJl
YWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICAgIC8vIEhlbHBmdWwgZm9yIHBsYXRmb3JtcyB3
aGVyZSB0aGUgdGhyZWFkIG5hbWUgbXVzdCBiZSBzZXQgZnJvbSB3aXRoaW4gdGhlIHRocmVhZC4K
ICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNo
YXIqIHRocmVhZE5hbWUpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCgpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKIApAQCAtMTI2LDYgKzEyOCwxMSBAQCBjbGFzcyBU
aHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAKICAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKIAorICAgIGNvbnN0IFN0YWNr
Qm91bmRzJiBzdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFjazsKKyAg
ICB9CisKICNpZiBPUyhEQVJXSU4pCiAgICAgbWFjaF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0
dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KICNlbmRpZgpAQCAtMTQxLDYgKzE0OCw3IEBAIGNsYXNz
IFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICNlbHNlCiAg
ICAgdm9pZCBlc3RhYmxpc2goSEFORExFLCBUaHJlYWRJZGVudGlmaWVyKTsKICNlbmRpZgorICAg
IHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAjaWYgVVNFKFBUSFJFQURTKSAmJiAhT1MoREFSV0lOKQog
ICAgIHN0YXRpYyB2b2lkIHNpZ25hbEhhbmRsZXJTdXNwZW5kUmVzdW1lKGludCwgc2lnaW5mb190
Kiwgdm9pZCogdWNvbnRleHQpOwpAQCAtMTcyLDYgKzE4MCw3IEBAIGNsYXNzIFRocmVhZCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAgICBzdGQ6Om11dGV4IG1fbXV0
ZXg7CiAgICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OwogICAgIEpvaW5hYmxlU3RhdGUg
bV9qb2luYWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKKyAgICBTdGFja0JvdW5kcyBtX3N0YWNrIHsg
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKCkgfTsKICAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNl
IH07CiAjaWYgVVNFKFBUSFJFQURTKQogICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBkNmMwYTE3N2E2OTA4ZTFkYzAxMzhhMDY4YzJh
MTEwYTk0MzI1YTJmLi5hZjhlNjdlNTczNjIzMjJiNzk1MTRjNzY2ZDY0YTI4MjZlMGU0MTVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0xODgsOCArMTg4LDkgQEAgdm9p
ZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCkKK3Zv
aWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQog
eworICAgIFRocmVhZDo6Y3VycmVudCgpLmluaXRpYWxpemUoKTsKICNpZiAhT1MoREFSV0lOKQog
ICAgIHNpZ3NldF90IG1hc2s7CiAgICAgc2lnZW1wdHlzZXQoJm1hc2spOwpAQCAtMjk5LDI1ICsz
MDAsMTcgQEAgdm9pZCBUaHJlYWQ6OmRldGFjaCgpCiAgICAgICAgIGRpZEJlY29tZURldGFjaGVk
KCk7CiB9CiAKLVRocmVhZCogVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCkKLXsKLSAgICBUaHJl
YWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKLSAgICBpZiAoZGF0YSkK
LSAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQogVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewogICAgIGlmIChUaHJlYWQqIGN1cnJlbnQg
PSBjdXJyZW50TWF5QmVOdWxsKCkpCiAgICAgICAgIHJldHVybiAqY3VycmVudDsKIAogICAgIC8v
IE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJs
aXNoZWQgeWV0LgotICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJl
YWQoKSk7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7
CiAgICAgdGhyZWFkLT5lc3RhYmxpc2gocHRocmVhZF9zZWxmKCkpOwotICAgIFRocmVhZEhvbGRl
cjo6aW5pdGlhbGl6ZSgqdGhyZWFkKTsKKyAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUodGhy
ZWFkLmdldCgpKTsKICAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0
ZWQoKTsKLSAgICByZXR1cm4gKnRocmVhZDsKKyAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQog
CiBUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4u
Y3BwCmluZGV4IGJkNjE1ZmI5MmM2NDJlNThlMGJhMWM1NzRjYWM0ZDc2ODFlOWYyZmIuLmI0NzUy
ZWYwMGFhOGRjYjQzNTRjM2M5NmNhMDJkNzQ4ZjlkNmJkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcApAQCAtMTE2LDYgKzExNiwxMSBAQCBUaHJlYWQ6On5UaHJlYWQoKQogICAgICAgICBDbG9z
ZUhhbmRsZShtX2hhbmRsZSk7CiB9CiAKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQoreworICAgIFRocmVhZDo6Y3VycmVudCgpLmluaXRp
YWxpemUoKTsKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9OLCBUSFJFQUROQU1FX0lORk8sIGFuZCBz
ZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJvbSA8aHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+Lgogc3RhdGljIGNvbnN0IERXT1JEIE1T
X1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAgLTE0NSw2ICsxNTAsNyBAQCB2b2lkIFRo
cmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiBzelRocmVh
ZE5hbWUpCiAgICAgfSBfX2V4Y2VwdCAoRVhDRVBUSU9OX0NPTlRJTlVFX0VYRUNVVElPTikgewog
ICAgIH0KICNlbmRpZgorICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3Jl
YXRlZCgpOwogfQogCiB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCkK
QEAgLTI2MSw5ICsyNjcsOCBAQCBzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ2lzdGVycykKIAogVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewotICAg
IFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwotICAgIGlmIChk
YXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisgICAgaWYgKFRocmVhZCogY3Vy
cmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKKyAgICAgICAgcmV0dXJuICpjdXJyZW50OwogCiAg
ICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBl
c3RhYmxpc2hlZCB5ZXQuCiAgICAgUmVmPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYoKm5ldyBU
aHJlYWQoKSk7CkBAIC0yNzQsNiArMjc5LDcgQEAgVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQog
CiAgICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBjdXJyZW50SUQoKSk7CiAgICAgVGhyZWFk
SG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSwgVGhyZWFkOjpjdXJyZW50SUQoKSk7Cisg
ICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiAgICAgcmV0
dXJuIHRocmVhZC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV1RGVGhy
ZWFkRGF0YS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAppbmRleCBjZGYz
ZGNiYTZiNjEyM2ZhZjgxYTJiZWFkMGEwMWIyYzRmNmYzZTA0Li5mM2EzZThhOWQ2NjRmMWYwNTJj
OTkzNjE4MmVjMjc1YTI3NGVmZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJl
YWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcApAQCAtNDQs
MTIgKzQ0LDExIEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgICwgbV9jdXJy
ZW50QXRvbWljU3RyaW5nVGFibGUoMCkKICAgICAsIG1fZGVmYXVsdEF0b21pY1N0cmluZ1RhYmxl
KDApCiAgICAgLCBtX2F0b21pY1N0cmluZ1RhYmxlRGVzdHJ1Y3RvcigwKQotICAgICwgbV9zdGFj
a0JvdW5kcyhTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzKCkpCiAjaWYgRU5B
QkxFKFNUQUNLX1NUQVRTKQogICAgICwgbV9zdGFja1N0YXRzKCkKICNlbmRpZgogICAgICwgbV9z
YXZlZFN0YWNrUG9pbnRlckF0Vk1FbnRyeSgwKQotICAgICwgbV9zYXZlZExhc3RTdGFja1RvcChz
dGFjaygpLm9yaWdpbigpKQorICAgICwgbV9zYXZlZExhc3RTdGFja1RvcChUaHJlYWQ6OmN1cnJl
bnQoKS5zdGFjaygpLm9yaWdpbigpKQogewogICAgIEF0b21pY1N0cmluZ1RhYmxlOjpjcmVhdGUo
KnRoaXMpOwogICAgIG1fY3VycmVudEF0b21pY1N0cmluZ1RhYmxlID0gbV9kZWZhdWx0QXRvbWlj
U3RyaW5nVGFibGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKaW5kZXggYTQzYTZlYjBjZDZmYzM5MjI1
MmJiNzU0NTllNDUyMTNkNTYxZDZjNy4uODRlM2MzMDM2MmNlN2RiMDc3MTA2MzI0ZjMxZjkxN2Ri
Y2ZiNmI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5j
bHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNs
dWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogCkBAIC01NywxNiArNTYsNiBAQCBjbGFzcyBX
VEZUaHJlYWREYXRhIHsKICAgICAgICAgcmV0dXJuIG9sZEF0b21pY1N0cmluZ1RhYmxlOwogICAg
IH0KIAotICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjaygpCi0gICAgewotICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFsd2F5cyBnZXQgYSBmcmVzaCBTdGFja0JvdW5kcyBmcm9tIHRoZSBPUyBkdWUg
dG8gaG93IGZpYmVycyB3b3JrLgotICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMjQxMQotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIG1fc3Rh
Y2tCb3VuZHMgPSBTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzKCk7Ci0jZW5k
aWYKLSAgICAgICAgcmV0dXJuIG1fc3RhY2tCb3VuZHM7Ci0gICAgfQotCiAjaWYgRU5BQkxFKFNU
QUNLX1NUQVRTKQogICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzJiBzdGFja1N0YXRzKCkK
ICAgICB7CkBAIC0xMDEsNyArOTAsNiBAQCBjbGFzcyBXVEZUaHJlYWREYXRhIHsKICAgICBBdG9t
aWNTdHJpbmdUYWJsZSogbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGU7CiAgICAgQXRvbWljU3Ry
aW5nVGFibGVEZXN0cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yOwogCi0gICAg
U3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAg
U3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMgbV9zdGFja1N0YXRzOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314409</attachid>
            <date>2017-07-02 00:29:26 -0700</date>
            <delta_ts>2017-07-02 00:35:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170702162925.patch</filename>
            <type>text/plain</type>
            <size>25029</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YjkxOTUyNjdlNGFlOGQyNDZiZTEzNzY4NmMyMzQxMzYzNzY0NTdiLi4yMWQxOTQ5MTM5MmM0MTNj
YWNjNTFmMzU3NDk5MjBlNTEwMTA0NTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNy0wNy0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWRz
IHN0YWNrLgorICAgICAgICBDdXJyZW50bHksIHN0YWNrIGJvdW5kcyBhcmUgc3RvcmVkIGluIFdU
RlRocmVhZERhdGEgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICBpbiBUTFMuIFRodXMsIG9ubHkg
dGhlIHRocmVhZCBpdHNlbGYgY2FuIGFjY2VzcyBpdHMgb3duIFdURlRocmVhZERhdGEuCisgICAg
ICAgIFdlIHdvcmthcm91bmQgdGhpcyBzaXR1YXRpb24gYnkgaG9sZGluZyBTdGFja0JvdW5kcyBp
biBNYWNoaW5lVGhyZWFkIGluIEpTQywKKyAgICAgICAgYnV0IFN0YWNrQm91bmRzIHNob3VsZCBi
ZSBwdXQgaW4gV1RGOjpUaHJlYWQgaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVz
IFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0byBXVEY6OlRocmVhZC4gU3RhY2tCb3Vu
ZHMKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVGhyZWFkLiBU
aHVzIHB1dHRpbmcgaXQgaW4gV1RGOjpUaHJlYWQKKyAgICAgICAgaXMgbmF0dXJhbCBjaG9pY2Uu
CisKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpNYWNoaW5lVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAg
ICAgIChKU0M6OlZNOjp1cGRhdGVTdGFja0xpbWl0cyk6CisgICAgICAgIChKU0M6OlZNOjpjb21t
aXR0ZWRTdGFja0J5dGVDb3VudCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAo
SlNDOjpWTTo6aXNTYWZlVG9SZWN1cnNlKToKKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHA6CisgICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWTTo6ZW5zdXJlU3RhY2tD
YXBhY2l0eUZvcik6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKiB5
YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25z
dHJ1Y3Rvcjo6aXNTYWZlVG9SZWN1cnNlKToKKwogMjAxNy0wNy0wMSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gUmVtb3ZlIGNvZGUgb25seSBuZWVk
ZWQgd2hlbiBidWlsZGluZyBmb3IgT1MgWCBZb3NlbWl0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAwNmNhOTJkZTVjZmM0ZmQ4
ODA0ZjhhMTFjOTk5M2Q2MzZkY2ZlN2VmLi43N2M1NzkxMzlkOWVjMjYxNTE2YTlmYWFhMTA3Njk2
N2ZlODBkODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTAyICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFdURjo6VGhyZWFkIHNob3VsZCBo
YXZlIHRoZSB0aHJlYWRzIHN0YWNrIGJvdW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIG1vdmUgU3RhY2tCb3VuZHMgZnJvbSBXVEZUaHJlYWRE
YXRhIHRvIFdURjo6VGhyZWFkLgorICAgICAgICBPbmUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQg
d2Ugc2hvdWxkIG1ha2UgdmFsaWQgU3RhY2tCb3VuZHMKKyAgICAgICAgdmlzaWJsZSB0byBUaHJl
YWQ6OmNyZWF0ZSgpIGNhbGxlci4gV2hlbiB0aGUgY2FsbGVyIGdldAorICAgICAgICBXVEY6OlRo
cmVhZCBmcm9tIFRocmVhZDo6Y3JlYXRlKCksIHRoaXMgV1RGOjpUaHJlYWQgc2hvdWxkCisgICAg
ICAgIGhhdmUgYSB2YWxpZCBTdGFja0JvdW5kcy4gQnV0IFN0YWNrQm91bmRzIGluZm9ybWF0aW9u
IGNhbiBiZQorICAgICAgICByZXRyaXZlZCBvbmx5IGluIHRoZSBXVEY6OlRocmVhZCdzIHRocmVh
ZCBpdHNlbGYuCisKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKToKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OlN0
YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAgICAgICog
d3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVu
dE1heUJlTnVsbCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnN0YWNrKToKKyAgICAg
ICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Omlu
aXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudE1heUJlTnVsbCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKiB3
dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OldURlRo
cmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmg6CisgICAgICAgIChXVEY6
OldURlRocmVhZERhdGE6OnN0YWNrKTogRGVsZXRlZC4KKwogMjAxNy0wNy0wMSAgQ2FpbyBMaW1h
ICA8dGljYWlvbGltYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gV1RGR2V0QmFja3RyYWNl
IGNhbiByZXR1cm4gbnVtYmVyT2ZGcmFtZXMgPT0gMCBpbiBzb21lIGFyY2hpdGVjdHVyZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCmlu
ZGV4IDY3NjNlYTNhYjFjMmY0Njc5YzM3NzFiMTkxOTczYzUzMTZiZjVmNDAuLjhiOWJiNjg2NDVj
Y2Q0ZDhiMDMxYjZjY2FkZDI4MDU5M2I4OTcwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAtMjM5LDkgKzIzOSw2IEBAIHZv
aWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJv
b3RzJiBjb25zZXJ2YXRpdmVSb290CiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFj
aGluZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewot
ICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBtX3N0
YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIG1fc3RhY2tFbmQgPSBzdGFja0Jv
dW5kcy5lbmQoKTsKIH0KIAogc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMoTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCkBAIC0zMDIs
MTUgKzI5OSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKIAog
c3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpj
YXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVy
cHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOworICAgIGNoYXIqIGJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSgpKTsKICAgICBjaGFyKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCop
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhY2tUb3ApKSk7CiAgICAgQVNTRVJUKGJl
Z2luID49IGVuZCk7CiAKICAgICBjaGFyKiBlbmRXaXRoUmVkWm9uZSA9IGVuZCArIG9zUmVkWm9u
ZUFkanVzdG1lbnQoKTsKICAgICBBU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpID09
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpOwogCi0gICAgaWYg
KGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhS
ZWRab25lIDwgc3RhY2tFbmQoKSkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJl
dF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQoKSk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVu
ZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhS
ZWRab25lIC0gYmVnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAppbmRleCBiNjJlYjQzMTMxMmM4Yjg1MmQ1MzI4Yzk3NmE2MjI1YjllNzlh
YzQzLi5jMTUxMGQ2MjUxYzBiMzRhZjlhNGViOTUxYTUxZTk2ZWE5NGQ1YzI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtNzIsMTIg
KzcyLDEwIEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQq
LCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKICAgICAgICAgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQtPmlkKCk7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0Jhc2U7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrRW5kOyB9
CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5zdGFj
aygpLm9yaWdpbigpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4g
bV90aHJlYWQtPnN0YWNrKCkuZW5kKCk7IH0KIAogICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1f
dGhyZWFkOwotICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogbV9zdGFj
a0VuZDsKICAgICAgICAgTWFjaGluZVRocmVhZCogbV9uZXh0IHsgbnVsbHB0ciB9OwogICAgICAg
ICBNYWNoaW5lVGhyZWFkKiBtX3ByZXYgeyBudWxscHRyIH07CiAgICAgfTsKQEAgLTEwNCw3ICsx
MDIsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAjZGVmaW5lIERFQ0xBUkVfQU5EX0NPTVBV
VEVfQ1VSUkVOVF9USFJFQURfU1RBVEUoc3RhdGVOYW1lKSBcCiAgICAgQ3VycmVudFRocmVhZFN0
YXRlIHN0YXRlTmFtZTsgXAogICAgIHN0YXRlTmFtZS5zdGFja1RvcCA9ICZzdGF0ZU5hbWU7IFwK
LSAgICBzdGF0ZU5hbWUuc3RhY2tPcmlnaW4gPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmln
aW4oKTsgXAorICAgIHN0YXRlTmFtZS5zdGFja09yaWdpbiA9IFRocmVhZDo6Y3VycmVudCgpLnN0
YWNrKCkub3JpZ2luKCk7IFwKICAgICBBTExPQ0FURV9BTkRfR0VUX1JFR0lTVEVSX1NUQVRFKHN0
YXRlTmFtZSAjIyBfcmVnaXN0ZXJTdGF0ZSk7IFwKICAgICBzdGF0ZU5hbWUucmVnaXN0ZXJTdGF0
ZSA9ICZzdGF0ZU5hbWUgIyMgX3JlZ2lzdGVyU3RhdGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRleCA5ZWYxNDNh
ZDQ4ZTcxZDI4YjE3YmE0MTZmYTNiMTRiY2JkYjc0NWFhLi4yZTgxNDI3MGI5YmExZjMyYjM5Y2M2
ZDZlNDM0OGFmOWI1YTcyMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmcoKQogICAgICAgICBEaXNhbGxvd1ZNUmVlbnRyeTo6aW5pdGlhbGl6
ZSgpOwogI2VuZGlmCiAgICAgICAgIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKTsKLSAgICAgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKLSAgICAgICAgdGhy
ZWFkRGF0YS5zZXRTYXZlZExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnN0YWNrKCkub3JpZ2luKCkp
OworICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0U2F2ZWRMYXN0U3RhY2tUb3AoVGhyZWFkOjpj
dXJyZW50KCkuc3RhY2soKS5vcmlnaW4oKSk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgICAgIFdhc206OlRodW5rczo6aW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDQ4NzI3YTY2MmVlOTY1NmFiY2E4NWMwNWMzNTZhNmY5NDY0MjVkM2Uu
LjZlNjg2M2ZhMDM5MmZjYTVlOTE0YTgxOGMwYmUwNmQzYjUxOWQwOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3NoYWRvd0NoaWNrZW4oc3RkOjptYWtl
X3VuaXF1ZTxTaGFkb3dDaGlja2VuPigpKQogewogICAgIGludGVycHJldGVyID0gbmV3IEludGVy
cHJldGVyKCp0aGlzKTsKLSAgICBTdGFja0JvdW5kcyBzdGFjayA9IHd0ZlRocmVhZERhdGEoKS5z
dGFjaygpOworICAgIFN0YWNrQm91bmRzIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KTsKICAgICB1cGRhdGVTb2Z0UmVzZXJ2ZWRab25lU2l6ZShPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRa
b25lU2l6ZSgpKTsKICAgICBzZXRMYXN0U3RhY2tUb3Aoc3RhY2sub3JpZ2luKCkpOwogCkBAIC02
NzEsNyArNjcxLDcgQEAgaW5saW5lIHZvaWQgVk06OnVwZGF0ZVN0YWNrTGltaXRzKCkKICAgICB2
b2lkKiBsYXN0U29mdFN0YWNrTGltaXQgPSBtX3NvZnRTdGFja0xpbWl0OwogI2VuZGlmCiAKLSAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwog
ICAgIHNpemVfdCByZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgp
OwogICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGF0IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSA+PSBtaW5pbXVtUmVzZXJ2ZVpvbmVTaXplIGF0CiAgICAgLy8gb3B0
aW9ucyBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgdGhlIG9wdGlvbiB2YWx1ZSBzaG91bGQgbm90
IGhhdmUgYmVlbiBjaGFuZ2VkIHRoZXJlYWZ0ZXIuCkBAIC04ODUsOSArODg1LDkgQEAgc2l6ZV90
IFZNOjpjb21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBX
aGVuIHVzaW5nIHRoZSBDIHN0YWNrLCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHN0YWNrIHBhZ2Vz
IGFyZSBhY3R1YWxseQogICAgIC8vIGNvbW1pdHRlZC4gU28sIHdlIHVzZSB0aGUgY3VycmVudCBz
dGFjayB1c2FnZSBhcyBhbiBlc3RpbWF0ZS4KLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgp
LnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaW50OF90KiBjdXJyZW50ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPigmY3VycmVudCk7Ci0gICAgaW50OF90KiBoaWdoID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPih3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmlnaW4oKSk7
CisgICAgaW50OF90KiBoaWdoID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihUaHJlYWQ6OmN1
cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpKTsKICAgICByZXR1cm4gaGlnaCAtIGN1cnJlbnQ7CiAj
ZWxzZQogICAgIHJldHVybiBDTG9vcFN0YWNrOjpjb21taXR0ZWRCeXRlQ291bnQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGRiNWFmMzUxYjJiMGI5NDE2NDc1ZjA1N2FmZGQ4
Y2IxNWFhMzdjYmIuLjJlNzU5OTEwY2MyMWIwNWViMTRjM2YxZDkyOTY3YmEzMWQyZTg0M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjg5LDcgKzY4OSw3IEBAIGNsYXNzIFZN
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFZNPiB7CiAKICAgICBib29sIGlzU2FmZVRvUmVjdXJzZSh2b2lkKiBzdGFja0xpbWl0
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlz
R3Jvd2luZ0Rvd253YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3Rh
Y2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICAgICAgdm9pZCogY3VyciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KCZjdXJyKTsKICAgICAgICAgcmV0dXJuIGN1cnIgPj0gc3RhY2tMaW1p
dDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVu
dHJ5U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3Bl
LmNwcAppbmRleCBjMmQ5YmRhMTg4YzQ3NzIwMjU2ZDQwMzA2NDgyODZlYzQ1ZTMxYzU5Li5kMTFh
OGZmYTY2ZGI1ZmUzMGZiOWY0OWY0NTMxMzgzNmI3OGQyMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgVk1F
bnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewogICAgIEFTU0VSVCgh
RGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIEFT
U0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAg
IGlmICghdm0uZW50cnlTY29wZSkgewogICAgICAgICB2bS5lbnRyeVNjb3BlID0gdGhpczsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMuaAppbmRleCA1YTc3NjE5NTBl
MGNmNmIyODg1NjAxOTMxYWY2YjcxYTNiZTAyZDc4Li5iYzBjMjVmOTFlMmMxNzYxYTIxY2EyMGVi
MDg4MmEwOTNhMjE1MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGlu
ZXMuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGJvb2wgVk06OmVuc3VyZVN0
YWNrQ2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQo
KSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndh
cmQoKSk7CiAgICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV9zb2Z0U3RhY2tMaW1pdDsKICNl
bHNlCiAgICAgcmV0dXJuIGVuc3VyZVN0YWNrQ2FwYWNpdHlGb3JDTG9vcChuZXdUb3BPZlN0YWNr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggMDJmYTRm
ZDEwYmFjOGNlODY3MzJkYzZmYjIwNTg0YjNlZjg0NDIzYy4uM2Q4NGFiOTljYTQyMTk1ZGZmYjQz
Nzk2YWQzMzNhMGM0ZWNlMzAxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5jcHAKQEAgLTI2OSwyNSArMjY5LDcgQEAgY2xhc3MgVk1UcmFwczo6U2lnbmFsU2VuZGVy
IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgIFRocmVhZCYgdGhyZWFkID0gKm93bmVyVGhyZWFkLT5n
ZXQoKTsKLSAgICAgICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IFN0YWNrQm91
bmRzOjplbXB0eUJvdW5kcygpOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBtYWNoaW5lIHRocmVhZHMgYmVjYXVzZSBp
dCBpcyB0aGUgb25seSBub24tVExTIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
dGhlIHN0YWNrIGJvdW5kcyBvZiB0aGlzIHRocmVhZC4gV2Ugc2hvdWxkIGtlZXAgaW4gb24gdGhl
IFdURjo6VGhyZWFkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQotICAgICAgICAgICAgICAg
ICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMgPSB2bS5oZWFwLm1hY2hpbmVUaHJl
YWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbWFjaGluZVRocmVhZHNMb2NrID0gdHJ5
SG9sZExvY2sobWFjaGluZVRocmVhZHMuZ2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFtYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICAgICAgICAgICAgICBhdXRvJiB0aHJlYWRM
aXN0ID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQq
IG1hY2hpbmVUaHJlYWQgPSB0aHJlYWRMaXN0LmhlYWQoKTsgbWFjaGluZVRocmVhZDsgbWFjaGlu
ZVRocmVhZCA9IG1hY2hpbmVUaHJlYWQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hY2hpbmVUaHJlYWQtPm1fdGhyZWFkLmdldCgpID09IHRocmVhZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzKG1hY2hpbmVUaHJl
YWQtPnN0YWNrQmFzZSgpLCBtYWNoaW5lVGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RhY2tCb3Vu
ZHMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2bS50
cmFwcygpLnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOwor
ICAgICAgICAgICAgICAgIHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250
ZXh0LCB0aHJlYWQuc3RhY2soKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKaW5kZXggMWMyZGQ3NWRjYjQ0
Y2EyOGI5YTcxMDQ4OWNiMGE0ZTcxOGY0ZGFlMi4uNWYyNzMwNmE0NTYxMmZjNTJlNWQ2MzU3YmQ4
Mzg0OTQwMTU1NjAyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
clBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJu
LmNwcApAQCAtODgwLDcgKzg4MCw3IEBAIGNsYXNzIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3Igewog
ICAgIHsKICAgICAgICAgaWYgKCFtX3N0YWNrTGltaXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253
YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dp
bmdEb3dud2FyZCgpKTsKICAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQ4X3QqPigmY3Vycik7CiAgICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9jYXN0
PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7CiAgICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3Rm
L1N0YWNrQm91bmRzLmgKaW5kZXggY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2ZlMTkw
Y2RlZi4uM2M5MTFlZjM2ZWM2OTYyYzk3ZjlmYmQ0MzMzMzkzM2VmNmQ4ZWFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFj
a0JvdW5kcy5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFN0YWNrQm91bmRzIHsKICAgICBjb25z
dCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhID0gNjQgKiAxMDI0Owog
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0YWNrQm91bmRzIGVtcHR5Qm91bmRzKCkgeyByZXR1cm4g
U3RhY2tCb3VuZHMoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgU3RhY2tCb3VuZHMgZW1wdHlC
b3VuZHMoKSB7IHJldHVybiBTdGFja0JvdW5kcygpOyB9CiAKICAgICBzdGF0aWMgU3RhY2tCb3Vu
ZHMgY3VycmVudFRocmVhZFN0YWNrQm91bmRzKCkKICAgICB7CkBAIC0xMjcsOSArMTI3LDkgQEAg
Y2xhc3MgU3RhY2tCb3VuZHMgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdGFja0JvdW5kcygp
Ci0gICAgICAgIDogbV9vcmlnaW4oMCkKLSAgICAgICAgLCBtX2JvdW5kKDApCisgICAgY29uc3Rl
eHByIFN0YWNrQm91bmRzKCkKKyAgICAgICAgOiBtX29yaWdpbihudWxscHRyKQorICAgICAgICAs
IG1fYm91bmQobnVsbHB0cikKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9TdGFja1N0YXRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCmluZGV4
IDA2NGYyZjA1MmFhZjM4YjlmODBhNmRkNDExMzJlNjU0NmU0NTdmNDIuLjU2MTMwYjA0ZWEyNTQ4
ZTEwZDA4YTlkMDI5MmNiMDNhMGIxYmM4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0
YWNrU3RhdHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCkBAIC01OSw3
ICs1OSw3IEBAIGludCBTdGFja1N0YXRzOjpzX21heExheW91dFJlZW50cnlEZXB0aCA9IDA7CiAK
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7Ci0gICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKICAgICBt
X3JlZW50cnlEZXB0aCA9IDA7CiAgICAgbV9zdGFja1N0YXJ0ID0gKGNoYXIqKXN0YWNrLm9yaWdp
bigpOwogICAgIG1fY3VycmVudENoZWNrUG9pbnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXgg
ZGRjMjhjMmE1NGIzMmExYTY2NGNhM2IwOTdmM2FiZTJmN2M4NmY5Ny4uODlhZjYxMjUyZDBmOGE1
ZDBhMDQ1NzkyZDM5OWM3MDNmMjBjZjhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC01MSw3ICs1
MSw4IEBAIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKIHB1YmxpYzoKICAgICBjb25zdCBjaGFy
KiBuYW1lOwogICAgIEZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludDsKLSAgICBNdXRleCBjcmVh
dGlvbk11dGV4OworICAgIE11dGV4KiBtdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24qIGNvbmRp
dGlvbjsKIH07CiAKIGNvbnN0IGNoYXIqIFRocmVhZDo6bm9ybWFsaXplVGhyZWFkTmFtZShjb25z
dCBjaGFyKiB0aHJlYWROYW1lKQpAQCAtODUsMTQgKzg2LDE0IEBAIHN0YXRpYyB2b2lkIHRocmVh
ZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCog
Y29udGV4dCA9IHN0YXRpY19jYXN0PE5ld1RocmVhZENvbnRleHQqPihjb250ZXh0RGF0YSk7CiAK
LSAgICAvLyBCbG9jayB1bnRpbCBvdXIgY3JlYXRpbmcgdGhyZWFkIGhhcyBjb21wbGV0ZWQgYW55
IGV4dHJhIHNldHVwIHdvcmssIGluY2x1ZGluZwotICAgIC8vIGVzdGFibGlzaGluZyBUaHJlYWRJ
ZGVudGlmaWVyLgogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNy
ZWF0aW9uTXV0ZXgpOworICAgICAgICAvLyBCbG9jayB1bnRpbCBvdXIgY3JlYXRpbmcgdGhyZWFk
IGhhcyBjb21wbGV0ZWQgYW55IGV4dHJhIHNldHVwIHdvcmssIGluY2x1ZGluZyBlc3RhYmxpc2hp
bmcgVGhyZWFkSWRlbnRpZmllci4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKCpjb250ZXh0
LT5tdXRleCk7CisgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bChjb250ZXh0LT5uYW1lKTsKKyAgICAgICAgLy8gQWNrIGNvbXBsZXRpb24gb2YgaW5pdGlhbGl6
YXRpb24gdG8gdGhlIGNyZWF0aW5nIHRocmVhZC4KKyAgICAgICAgY29udGV4dC0+Y29uZGl0aW9u
LT5zaWduYWwoKTsKICAgICB9CiAKLSAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
SW50ZXJuYWwoY29udGV4dC0+bmFtZSk7Ci0KICAgICBhdXRvIGVudHJ5UG9pbnQgPSBXVEZNb3Zl
KGNvbnRleHQtPmVudHJ5UG9pbnQpOwogCiAgICAgLy8gRGVsZXRlIHRoZSBjb250ZXh0IGJlZm9y
ZSBzdGFydGluZyB0aGUgdGhyZWFkLgpAQCAtMTAzLDEyICsxMDQsMzAgQEAgc3RhdGljIHZvaWQg
dGhyZWFkRW50cnlQb2ludCh2b2lkKiBjb250ZXh0RGF0YSkKIAogUmVmUHRyPFRocmVhZD4gVGhy
ZWFkOjpjcmVhdGUoY29uc3QgY2hhciogbmFtZSwgRnVuY3Rpb248dm9pZCgpPiYmIGVudHJ5UG9p
bnQpCiB7Ci0gICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IG5ldyBOZXdUaHJlYWRDb250
ZXh0IHsgbmFtZSwgV1RGTW92ZShlbnRyeVBvaW50KSwgeyB9IH07CisgICAgVGhyZWFkQ29uZGl0
aW9uIGNvbmRpdGlvbjsKKyAgICBNdXRleCBtdXRleDsKKworICAgIE5ld1RocmVhZENvbnRleHQq
IGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2lu
dCksICZtdXRleCwgJmNvbmRpdGlvbiB9OworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4
KTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZXN1bHQgPSBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKHRo
cmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIC8vIEFmdGVyIGVzdGFibGlzaGlu
ZyBUaHJlYWQsIHJlbGVhc2UgdGhlIG11dGV4IGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGlu
aXRpYWxpemF0aW9uLgorICAgIGNvbmRpdGlvbi53YWl0KG11dGV4KTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CiAKLSAgICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGlu
ZyB1bnRpbCB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCi0gICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOworVGhyZWFkKiBUaHJlYWQ6
OmN1cnJlbnRNYXlCZU51bGwoKQoreworICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhv
bGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAgICByZXR1cm4gJmRhdGEtPnRo
cmVhZCgpOworICAgIHJldHVybiBudWxscHRyOworfQogCi0gICAgcmV0dXJuIFRocmVhZDo6Y3Jl
YXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7Cit2b2lkIFRocmVh
ZDo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9zdGFjayA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhy
ZWFkU3RhY2tCb3VuZHMoKTsKIH0KIAogdm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAppbmRleCAzMzcyYWMxMmVkOGZlMGIzYTAxYWYwZjFmZTM2NjVlYjM0OTZiZGEyLi4zMzE3YzBk
ZTkxYWQxZTU1MTk1ZTljOWFkNDdkOTIzNTdhYjM1ZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybVJlZ2lzdGVycy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
U3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAog
I2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKQEAgLTY4LDcgKzY5LDcgQEAgY2xhc3Mg
VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogCiAgICAgLy8g
UmV0dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhy
ZWFkJiBjdXJyZW50KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQqIGN1
cnJlbnRNYXlCZU51bGwoKTsKKyAgICBzdGF0aWMgVGhyZWFkKiBjdXJyZW50TWF5QmVOdWxsKCk7
CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1
bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAgICAgLy8gb2YgdGhyZWFk
cy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhvbGRpbmcgdGhpcyBUaHJl
YWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTA5LDYgKzExMCw3IEBAIGNsYXNzIFRo
cmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAgICAvLyBDYWxs
ZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8gSGVscGZ1bCBm
b3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9tIHdpdGhp
biB0aGUgdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50
ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCkBAIC0xMjYsNiArMTI4
LDExIEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+
IHsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpOwogCisg
ICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3N0YWNrOworICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICBtYWNoX3BvcnRfdCBtYWNo
VGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQogI2VuZGlmCkBAIC0xNDEsNiAr
MTQ4LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVh
ZD4gewogI2Vsc2UKICAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRocmVhZElkZW50aWZpZXIp
OwogI2VuZGlmCisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICNpZiBVU0UoUFRIUkVBRFMpICYm
ICFPUyhEQVJXSU4pCiAgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3BlbmRSZXN1bWUo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CkBAIC0xNzIsNiArMTgwLDcgQEAgY2xh
c3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIHN0
ZDo6bXV0ZXggbV9tdXRleDsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07CiAgICAg
Sm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAgIFN0YWNrQm91
bmRzIG1fc3RhY2sgeyBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKSB9OwogICAgIGJvb2wgbV9k
aWRFeGl0IHsgZmFsc2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFu
ZGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGQ2YzBhMTc3YTY5MDhl
MWRjMDEzOGEwNjhjMmExMTBhOTQzMjVhMmYuLmFmOGU2N2U1NzM2MjMyMmI3OTUxNGM3NjZkNjRh
MjgyNmUwZTQxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRz
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTE4OCw4
ICsxODgsOSBAQCB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCkKICNl
bmRpZgogfQogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldU
RkNyZWF0ZWQoKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9u
V1RGQ3JlYXRlZCgpCiB7CisgICAgVGhyZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6ZSgpOwogI2lm
ICFPUyhEQVJXSU4pCiAgICAgc2lnc2V0X3QgbWFzazsKICAgICBzaWdlbXB0eXNldCgmbWFzayk7
CkBAIC0yOTksMjUgKzMwMCwxNyBAQCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlk
QmVjb21lRGV0YWNoZWQoKTsKIH0KIAotVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwo
KQotewotICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwot
ICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOwotICAgIHJldHVy
biBudWxscHRyOwotfQotCiBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiB7CiAgICAgaWYgKFRo
cmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKICAgICAgICAgcmV0dXJuICpjdXJy
ZW50OwogCiAgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVy
IGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRv
cHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigq
bmV3IFRocmVhZCgpKTsKICAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7Ci0g
ICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCp0aHJlYWQpOworICAgIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOwogICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZl
bklmTm9uV1RGQ3JlYXRlZCgpOwotICAgIHJldHVybiAqdGhyZWFkOworICAgIHJldHVybiB0aHJl
YWQuZ2V0KCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1dpbi5jcHAKaW5kZXggYmQ2MTVmYjkyYzY0MmU1OGUwYmExYzU3NGNhYzRkNzY4
MWU5ZjJmYi4uYjQ3NTJlZjAwYWE4ZGNiNDM1NGMzYzk2Y2EwMmQ3NDhmOWQ2YmQyZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC0xMTYsNiArMTE2LDExIEBAIFRocmVhZDo6flRocmVhZCgp
CiAgICAgICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsKIH0KIAordm9pZCBUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCit7CisgICAgVGhyZWFkOjpj
dXJyZW50KCkuaW5pdGlhbGl6ZSgpOworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5B
TUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0aWMg
Y29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTQ1LDYgKzE1
MCw3IEBAIHZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0
IGNoYXIqIHN6VGhyZWFkTmFtZSkKICAgICB9IF9fZXhjZXB0IChFWENFUFRJT05fQ09OVElOVUVf
RVhFQ1VUSU9OKSB7CiAgICAgfQogI2VuZGlmCisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRF
dmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9CiAKIHZvaWQgVGhyZWFkOjppbml0aWFsaXplUGxhdGZv
cm1UaHJlYWRpbmcoKQpAQCAtMjYxLDkgKzI2Nyw4IEBAIHNpemVfdCBUaHJlYWQ6OmdldFJlZ2lz
dGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogCiBUaHJlYWQmIFRocmVhZDo6Y3Vy
cmVudCgpCiB7Ci0gICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50
KCk7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKKyAgICBp
ZiAoVGhyZWFkKiBjdXJyZW50ID0gY3VycmVudE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4g
KmN1cnJlbnQ7CiAKICAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50
aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBh
ZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKQEAgLTI3NCw2ICsyNzksNyBAQCBUaHJlYWQmIFRocmVh
ZDo6Y3VycmVudCgpCiAKICAgICB0aHJlYWQtPmVzdGFibGlzaChoYW5kbGUsIGN1cnJlbnRJRCgp
KTsKICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUodGhyZWFkLmdldCgpLCBUaHJlYWQ6OmN1
cnJlbnRJRCgpKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0
ZWQoKTsKICAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEu
Y3BwCmluZGV4IGNkZjNkY2JhNmI2MTIzZmFmODFhMmJlYWQwYTAxYjJjNGY2ZjNlMDQuLmYzYTNl
OGE5ZDY2NGYxZjA1MmM5OTM2MTgyZWMyNzVhMjc0ZWZmMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1dURlRocmVhZERhdGEuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERh
dGEuY3BwCkBAIC00NCwxMiArNDQsMTEgQEAgV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgp
CiAgICAgLCBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9kZWZhdWx0QXRv
bWljU3RyaW5nVGFibGUoMCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKDAp
Ci0gICAgLCBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3Vu
ZHMoKSkKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgLCBtX3N0YWNrU3RhdHMoKQogI2Vu
ZGlmCiAgICAgLCBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5KDApCi0gICAgLCBtX3NhdmVk
TGFzdFN0YWNrVG9wKHN0YWNrKCkub3JpZ2luKCkpCisgICAgLCBtX3NhdmVkTGFzdFN0YWNrVG9w
KFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkub3JpZ2luKCkpCiB7CiAgICAgQXRvbWljU3RyaW5n
VGFibGU6OmNyZWF0ZSgqdGhpcyk7CiAgICAgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGUgPSBt
X2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dU
RlRocmVhZERhdGEuaCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAppbmRleCBhNDNh
NmViMGNkNmZjMzkyMjUyYmI3NTQ1OWU0NTIxM2Q1NjFkNmM3Li44NGUzYzMwMzYyY2U3ZGIwNzcx
MDYzMjRmMzFmOTE3ZGJjZmI2YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJl
YWREYXRhLmgKKysrIGIvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCkBAIC0yOSw3ICsy
OSw2IEBACiAKICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFj
a1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKQEAgLTU3LDE2ICs1
Niw2IEBAIGNsYXNzIFdURlRocmVhZERhdGEgewogICAgICAgICByZXR1cm4gb2xkQXRvbWljU3Ry
aW5nVGFibGU7CiAgICAgfQogCi0gICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkKLSAgICB7
Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gYWx3YXlzIGdldCBhIGZyZXNoIFN0YWNrQm91bmRzIGZy
b20gdGhlIE9TIGR1ZSB0byBob3cgZmliZXJzIHdvcmsuCi0gICAgICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNDExCi0jaWYgT1MoV0lORE9XUykK
LSAgICAgICAgbV9zdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tC
b3VuZHMoKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gbV9zdGFja0JvdW5kczsKLSAgICB9Ci0K
ICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMm
IHN0YWNrU3RhdHMoKQogICAgIHsKQEAgLTEwMSw3ICs5MCw2IEBAIGNsYXNzIFdURlRocmVhZERh
dGEgewogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsK
ICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJsZURlc3Ry
dWN0b3I7CiAKLSAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRzOwogI2lmIEVOQUJMRShTVEFD
S19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBtX3N0YWNrU3RhdHM7CiAj
ZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314410</attachid>
            <date>2017-07-02 00:35:56 -0700</date>
            <delta_ts>2017-07-02 00:40:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170702163555.patch</filename>
            <type>text/plain</type>
            <size>25149</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YjkxOTUyNjdlNGFlOGQyNDZiZTEzNzY4NmMyMzQxMzYzNzY0NTdiLi4yMWQxOTQ5MTM5MmM0MTNj
YWNjNTFmMzU3NDk5MjBlNTEwMTA0NTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNy0wNy0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWRz
IHN0YWNrLgorICAgICAgICBDdXJyZW50bHksIHN0YWNrIGJvdW5kcyBhcmUgc3RvcmVkIGluIFdU
RlRocmVhZERhdGEgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICBpbiBUTFMuIFRodXMsIG9ubHkg
dGhlIHRocmVhZCBpdHNlbGYgY2FuIGFjY2VzcyBpdHMgb3duIFdURlRocmVhZERhdGEuCisgICAg
ICAgIFdlIHdvcmthcm91bmQgdGhpcyBzaXR1YXRpb24gYnkgaG9sZGluZyBTdGFja0JvdW5kcyBp
biBNYWNoaW5lVGhyZWFkIGluIEpTQywKKyAgICAgICAgYnV0IFN0YWNrQm91bmRzIHNob3VsZCBi
ZSBwdXQgaW4gV1RGOjpUaHJlYWQgaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVz
IFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0byBXVEY6OlRocmVhZC4gU3RhY2tCb3Vu
ZHMKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVGhyZWFkLiBU
aHVzIHB1dHRpbmcgaXQgaW4gV1RGOjpUaHJlYWQKKyAgICAgICAgaXMgbmF0dXJhbCBjaG9pY2Uu
CisKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpNYWNoaW5lVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAg
ICAgIChKU0M6OlZNOjp1cGRhdGVTdGFja0xpbWl0cyk6CisgICAgICAgIChKU0M6OlZNOjpjb21t
aXR0ZWRTdGFja0J5dGVDb3VudCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAo
SlNDOjpWTTo6aXNTYWZlVG9SZWN1cnNlKToKKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHA6CisgICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWTTo6ZW5zdXJlU3RhY2tD
YXBhY2l0eUZvcik6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKiB5
YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25z
dHJ1Y3Rvcjo6aXNTYWZlVG9SZWN1cnNlKToKKwogMjAxNy0wNy0wMSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gUmVtb3ZlIGNvZGUgb25seSBuZWVk
ZWQgd2hlbiBidWlsZGluZyBmb3IgT1MgWCBZb3NlbWl0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAwNmNhOTJkZTVjZmM0ZmQ4
ODA0ZjhhMTFjOTk5M2Q2MzZkY2ZlN2VmLi43N2M1NzkxMzlkOWVjMjYxNTE2YTlmYWFhMTA3Njk2
N2ZlODBkODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTAyICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFdURjo6VGhyZWFkIHNob3VsZCBo
YXZlIHRoZSB0aHJlYWRzIHN0YWNrIGJvdW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIG1vdmUgU3RhY2tCb3VuZHMgZnJvbSBXVEZUaHJlYWRE
YXRhIHRvIFdURjo6VGhyZWFkLgorICAgICAgICBPbmUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQg
d2Ugc2hvdWxkIG1ha2UgdmFsaWQgU3RhY2tCb3VuZHMKKyAgICAgICAgdmlzaWJsZSB0byBUaHJl
YWQ6OmNyZWF0ZSgpIGNhbGxlci4gV2hlbiB0aGUgY2FsbGVyIGdldAorICAgICAgICBXVEY6OlRo
cmVhZCBmcm9tIFRocmVhZDo6Y3JlYXRlKCksIHRoaXMgV1RGOjpUaHJlYWQgc2hvdWxkCisgICAg
ICAgIGhhdmUgYSB2YWxpZCBTdGFja0JvdW5kcy4gQnV0IFN0YWNrQm91bmRzIGluZm9ybWF0aW9u
IGNhbiBiZQorICAgICAgICByZXRyaXZlZCBvbmx5IGluIHRoZSBXVEY6OlRocmVhZCdzIHRocmVh
ZCBpdHNlbGYuCisKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKToKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OlN0
YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAgICAgICog
d3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVu
dE1heUJlTnVsbCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnN0YWNrKToKKyAgICAg
ICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Omlu
aXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudE1heUJlTnVsbCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKiB3
dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OldURlRo
cmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmg6CisgICAgICAgIChXVEY6
OldURlRocmVhZERhdGE6OnN0YWNrKTogRGVsZXRlZC4KKwogMjAxNy0wNy0wMSAgQ2FpbyBMaW1h
ICA8dGljYWlvbGltYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gV1RGR2V0QmFja3RyYWNl
IGNhbiByZXR1cm4gbnVtYmVyT2ZGcmFtZXMgPT0gMCBpbiBzb21lIGFyY2hpdGVjdHVyZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCmlu
ZGV4IDY3NjNlYTNhYjFjMmY0Njc5YzM3NzFiMTkxOTczYzUzMTZiZjVmNDAuLjhiOWJiNjg2NDVj
Y2Q0ZDhiMDMxYjZjY2FkZDI4MDU5M2I4OTcwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAtMjM5LDkgKzIzOSw2IEBAIHZv
aWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJv
b3RzJiBjb25zZXJ2YXRpdmVSb290CiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFj
aGluZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewot
ICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBtX3N0
YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIG1fc3RhY2tFbmQgPSBzdGFja0Jv
dW5kcy5lbmQoKTsKIH0KIAogc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMoTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCkBAIC0zMDIs
MTUgKzI5OSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKIAog
c3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpj
YXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVy
cHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOworICAgIGNoYXIqIGJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSgpKTsKICAgICBjaGFyKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCop
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhY2tUb3ApKSk7CiAgICAgQVNTRVJUKGJl
Z2luID49IGVuZCk7CiAKICAgICBjaGFyKiBlbmRXaXRoUmVkWm9uZSA9IGVuZCArIG9zUmVkWm9u
ZUFkanVzdG1lbnQoKTsKICAgICBBU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpID09
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpOwogCi0gICAgaWYg
KGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhS
ZWRab25lIDwgc3RhY2tFbmQoKSkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJl
dF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQoKSk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVu
ZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhS
ZWRab25lIC0gYmVnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAppbmRleCBiNjJlYjQzMTMxMmM4Yjg1MmQ1MzI4Yzk3NmE2MjI1YjllNzlh
YzQzLi5jMTUxMGQ2MjUxYzBiMzRhZjlhNGViOTUxYTUxZTk2ZWE5NGQ1YzI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtNzIsMTIg
KzcyLDEwIEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQq
LCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKICAgICAgICAgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQtPmlkKCk7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0Jhc2U7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrRW5kOyB9
CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5zdGFj
aygpLm9yaWdpbigpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4g
bV90aHJlYWQtPnN0YWNrKCkuZW5kKCk7IH0KIAogICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1f
dGhyZWFkOwotICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogbV9zdGFj
a0VuZDsKICAgICAgICAgTWFjaGluZVRocmVhZCogbV9uZXh0IHsgbnVsbHB0ciB9OwogICAgICAg
ICBNYWNoaW5lVGhyZWFkKiBtX3ByZXYgeyBudWxscHRyIH07CiAgICAgfTsKQEAgLTEwNCw3ICsx
MDIsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAjZGVmaW5lIERFQ0xBUkVfQU5EX0NPTVBV
VEVfQ1VSUkVOVF9USFJFQURfU1RBVEUoc3RhdGVOYW1lKSBcCiAgICAgQ3VycmVudFRocmVhZFN0
YXRlIHN0YXRlTmFtZTsgXAogICAgIHN0YXRlTmFtZS5zdGFja1RvcCA9ICZzdGF0ZU5hbWU7IFwK
LSAgICBzdGF0ZU5hbWUuc3RhY2tPcmlnaW4gPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmln
aW4oKTsgXAorICAgIHN0YXRlTmFtZS5zdGFja09yaWdpbiA9IFRocmVhZDo6Y3VycmVudCgpLnN0
YWNrKCkub3JpZ2luKCk7IFwKICAgICBBTExPQ0FURV9BTkRfR0VUX1JFR0lTVEVSX1NUQVRFKHN0
YXRlTmFtZSAjIyBfcmVnaXN0ZXJTdGF0ZSk7IFwKICAgICBzdGF0ZU5hbWUucmVnaXN0ZXJTdGF0
ZSA9ICZzdGF0ZU5hbWUgIyMgX3JlZ2lzdGVyU3RhdGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRleCA5ZWYxNDNh
ZDQ4ZTcxZDI4YjE3YmE0MTZmYTNiMTRiY2JkYjc0NWFhLi4yZTgxNDI3MGI5YmExZjMyYjM5Y2M2
ZDZlNDM0OGFmOWI1YTcyMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmcoKQogICAgICAgICBEaXNhbGxvd1ZNUmVlbnRyeTo6aW5pdGlhbGl6
ZSgpOwogI2VuZGlmCiAgICAgICAgIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKTsKLSAgICAgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKLSAgICAgICAgdGhy
ZWFkRGF0YS5zZXRTYXZlZExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnN0YWNrKCkub3JpZ2luKCkp
OworICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0U2F2ZWRMYXN0U3RhY2tUb3AoVGhyZWFkOjpj
dXJyZW50KCkuc3RhY2soKS5vcmlnaW4oKSk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgICAgIFdhc206OlRodW5rczo6aW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDQ4NzI3YTY2MmVlOTY1NmFiY2E4NWMwNWMzNTZhNmY5NDY0MjVkM2Uu
LjZlNjg2M2ZhMDM5MmZjYTVlOTE0YTgxOGMwYmUwNmQzYjUxOWQwOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3NoYWRvd0NoaWNrZW4oc3RkOjptYWtl
X3VuaXF1ZTxTaGFkb3dDaGlja2VuPigpKQogewogICAgIGludGVycHJldGVyID0gbmV3IEludGVy
cHJldGVyKCp0aGlzKTsKLSAgICBTdGFja0JvdW5kcyBzdGFjayA9IHd0ZlRocmVhZERhdGEoKS5z
dGFjaygpOworICAgIFN0YWNrQm91bmRzIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KTsKICAgICB1cGRhdGVTb2Z0UmVzZXJ2ZWRab25lU2l6ZShPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRa
b25lU2l6ZSgpKTsKICAgICBzZXRMYXN0U3RhY2tUb3Aoc3RhY2sub3JpZ2luKCkpOwogCkBAIC02
NzEsNyArNjcxLDcgQEAgaW5saW5lIHZvaWQgVk06OnVwZGF0ZVN0YWNrTGltaXRzKCkKICAgICB2
b2lkKiBsYXN0U29mdFN0YWNrTGltaXQgPSBtX3NvZnRTdGFja0xpbWl0OwogI2VuZGlmCiAKLSAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwog
ICAgIHNpemVfdCByZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgp
OwogICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGF0IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSA+PSBtaW5pbXVtUmVzZXJ2ZVpvbmVTaXplIGF0CiAgICAgLy8gb3B0
aW9ucyBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgdGhlIG9wdGlvbiB2YWx1ZSBzaG91bGQgbm90
IGhhdmUgYmVlbiBjaGFuZ2VkIHRoZXJlYWZ0ZXIuCkBAIC04ODUsOSArODg1LDkgQEAgc2l6ZV90
IFZNOjpjb21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBX
aGVuIHVzaW5nIHRoZSBDIHN0YWNrLCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHN0YWNrIHBhZ2Vz
IGFyZSBhY3R1YWxseQogICAgIC8vIGNvbW1pdHRlZC4gU28sIHdlIHVzZSB0aGUgY3VycmVudCBz
dGFjayB1c2FnZSBhcyBhbiBlc3RpbWF0ZS4KLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgp
LnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaW50OF90KiBjdXJyZW50ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPigmY3VycmVudCk7Ci0gICAgaW50OF90KiBoaWdoID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPih3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmlnaW4oKSk7
CisgICAgaW50OF90KiBoaWdoID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihUaHJlYWQ6OmN1
cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpKTsKICAgICByZXR1cm4gaGlnaCAtIGN1cnJlbnQ7CiAj
ZWxzZQogICAgIHJldHVybiBDTG9vcFN0YWNrOjpjb21taXR0ZWRCeXRlQ291bnQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGRiNWFmMzUxYjJiMGI5NDE2NDc1ZjA1N2FmZGQ4
Y2IxNWFhMzdjYmIuLjJlNzU5OTEwY2MyMWIwNWViMTRjM2YxZDkyOTY3YmEzMWQyZTg0M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjg5LDcgKzY4OSw3IEBAIGNsYXNzIFZN
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFZNPiB7CiAKICAgICBib29sIGlzU2FmZVRvUmVjdXJzZSh2b2lkKiBzdGFja0xpbWl0
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlz
R3Jvd2luZ0Rvd253YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3Rh
Y2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICAgICAgdm9pZCogY3VyciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KCZjdXJyKTsKICAgICAgICAgcmV0dXJuIGN1cnIgPj0gc3RhY2tMaW1p
dDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVu
dHJ5U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3Bl
LmNwcAppbmRleCBjMmQ5YmRhMTg4YzQ3NzIwMjU2ZDQwMzA2NDgyODZlYzQ1ZTMxYzU5Li5kMTFh
OGZmYTY2ZGI1ZmUzMGZiOWY0OWY0NTMxMzgzNmI3OGQyMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgVk1F
bnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewogICAgIEFTU0VSVCgh
RGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIEFT
U0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAg
IGlmICghdm0uZW50cnlTY29wZSkgewogICAgICAgICB2bS5lbnRyeVNjb3BlID0gdGhpczsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMuaAppbmRleCA1YTc3NjE5NTBl
MGNmNmIyODg1NjAxOTMxYWY2YjcxYTNiZTAyZDc4Li5iYzBjMjVmOTFlMmMxNzYxYTIxY2EyMGVi
MDg4MmEwOTNhMjE1MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGlu
ZXMuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGJvb2wgVk06OmVuc3VyZVN0
YWNrQ2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQo
KSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndh
cmQoKSk7CiAgICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV9zb2Z0U3RhY2tMaW1pdDsKICNl
bHNlCiAgICAgcmV0dXJuIGVuc3VyZVN0YWNrQ2FwYWNpdHlGb3JDTG9vcChuZXdUb3BPZlN0YWNr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggMDJmYTRm
ZDEwYmFjOGNlODY3MzJkYzZmYjIwNTg0YjNlZjg0NDIzYy4uM2Q4NGFiOTljYTQyMTk1ZGZmYjQz
Nzk2YWQzMzNhMGM0ZWNlMzAxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5jcHAKQEAgLTI2OSwyNSArMjY5LDcgQEAgY2xhc3MgVk1UcmFwczo6U2lnbmFsU2VuZGVy
IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgIFRocmVhZCYgdGhyZWFkID0gKm93bmVyVGhyZWFkLT5n
ZXQoKTsKLSAgICAgICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IFN0YWNrQm91
bmRzOjplbXB0eUJvdW5kcygpOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBtYWNoaW5lIHRocmVhZHMgYmVjYXVzZSBp
dCBpcyB0aGUgb25seSBub24tVExTIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
dGhlIHN0YWNrIGJvdW5kcyBvZiB0aGlzIHRocmVhZC4gV2Ugc2hvdWxkIGtlZXAgaW4gb24gdGhl
IFdURjo6VGhyZWFkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQotICAgICAgICAgICAgICAg
ICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMgPSB2bS5oZWFwLm1hY2hpbmVUaHJl
YWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbWFjaGluZVRocmVhZHNMb2NrID0gdHJ5
SG9sZExvY2sobWFjaGluZVRocmVhZHMuZ2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFtYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICAgICAgICAgICAgICBhdXRvJiB0aHJlYWRM
aXN0ID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQq
IG1hY2hpbmVUaHJlYWQgPSB0aHJlYWRMaXN0LmhlYWQoKTsgbWFjaGluZVRocmVhZDsgbWFjaGlu
ZVRocmVhZCA9IG1hY2hpbmVUaHJlYWQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hY2hpbmVUaHJlYWQtPm1fdGhyZWFkLmdldCgpID09IHRocmVhZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzKG1hY2hpbmVUaHJl
YWQtPnN0YWNrQmFzZSgpLCBtYWNoaW5lVGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RhY2tCb3Vu
ZHMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2bS50
cmFwcygpLnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOwor
ICAgICAgICAgICAgICAgIHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250
ZXh0LCB0aHJlYWQuc3RhY2soKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKaW5kZXggMWMyZGQ3NWRjYjQ0
Y2EyOGI5YTcxMDQ4OWNiMGE0ZTcxOGY0ZGFlMi4uNWYyNzMwNmE0NTYxMmZjNTJlNWQ2MzU3YmQ4
Mzg0OTQwMTU1NjAyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
clBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJu
LmNwcApAQCAtODgwLDcgKzg4MCw3IEBAIGNsYXNzIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3Igewog
ICAgIHsKICAgICAgICAgaWYgKCFtX3N0YWNrTGltaXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253
YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dp
bmdEb3dud2FyZCgpKTsKICAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQ4X3QqPigmY3Vycik7CiAgICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9jYXN0
PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7CiAgICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3Rm
L1N0YWNrQm91bmRzLmgKaW5kZXggY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2ZlMTkw
Y2RlZi4uM2M5MTFlZjM2ZWM2OTYyYzk3ZjlmYmQ0MzMzMzkzM2VmNmQ4ZWFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFj
a0JvdW5kcy5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFN0YWNrQm91bmRzIHsKICAgICBjb25z
dCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhID0gNjQgKiAxMDI0Owog
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0YWNrQm91bmRzIGVtcHR5Qm91bmRzKCkgeyByZXR1cm4g
U3RhY2tCb3VuZHMoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgU3RhY2tCb3VuZHMgZW1wdHlC
b3VuZHMoKSB7IHJldHVybiBTdGFja0JvdW5kcygpOyB9CiAKICAgICBzdGF0aWMgU3RhY2tCb3Vu
ZHMgY3VycmVudFRocmVhZFN0YWNrQm91bmRzKCkKICAgICB7CkBAIC0xMjcsOSArMTI3LDkgQEAg
Y2xhc3MgU3RhY2tCb3VuZHMgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdGFja0JvdW5kcygp
Ci0gICAgICAgIDogbV9vcmlnaW4oMCkKLSAgICAgICAgLCBtX2JvdW5kKDApCisgICAgY29uc3Rl
eHByIFN0YWNrQm91bmRzKCkKKyAgICAgICAgOiBtX29yaWdpbihudWxscHRyKQorICAgICAgICAs
IG1fYm91bmQobnVsbHB0cikKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9TdGFja1N0YXRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCmluZGV4
IDA2NGYyZjA1MmFhZjM4YjlmODBhNmRkNDExMzJlNjU0NmU0NTdmNDIuLjU2MTMwYjA0ZWEyNTQ4
ZTEwZDA4YTlkMDI5MmNiMDNhMGIxYmM4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0
YWNrU3RhdHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCkBAIC01OSw3
ICs1OSw3IEBAIGludCBTdGFja1N0YXRzOjpzX21heExheW91dFJlZW50cnlEZXB0aCA9IDA7CiAK
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7Ci0gICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKICAgICBt
X3JlZW50cnlEZXB0aCA9IDA7CiAgICAgbV9zdGFja1N0YXJ0ID0gKGNoYXIqKXN0YWNrLm9yaWdp
bigpOwogICAgIG1fY3VycmVudENoZWNrUG9pbnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXgg
ZGRjMjhjMmE1NGIzMmExYTY2NGNhM2IwOTdmM2FiZTJmN2M4NmY5Ny4uZGIyNTk5NzI2MjdiODRi
ZGVhNzZjYjI5MDg3YjMwNmFkZWZjYTdlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NywxMSAr
NDcsMTAgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6CiAgICAgY29uc3QgY2hhciogbmFt
ZTsKICAgICBGdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7Ci0gICAgTXV0ZXggY3JlYXRpb25N
dXRleDsKKyAgICBNdXRleCBtdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24gY29uZGl0aW9uOwog
fTsKIAogY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIq
IHRocmVhZE5hbWUpCkBAIC04NCwzMSArODMsNDQgQEAgY29uc3QgY2hhciogVGhyZWFkOjpub3Jt
YWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiBzdGF0aWMgdm9pZCB0aHJl
YWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogewogICAgIE5ld1RocmVhZENvbnRleHQq
IGNvbnRleHQgPSBzdGF0aWNfY2FzdDxOZXdUaHJlYWRDb250ZXh0Kj4oY29udGV4dERhdGEpOwot
Ci0gICAgLy8gQmxvY2sgdW50aWwgb3VyIGNyZWF0aW5nIHRocmVhZCBoYXMgY29tcGxldGVkIGFu
eSBleHRyYSBzZXR1cCB3b3JrLCBpbmNsdWRpbmcKLSAgICAvLyBlc3RhYmxpc2hpbmcgVGhyZWFk
SWRlbnRpZmllci4KKyAgICBGdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7CiAgICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7Ci0gICAgfQor
ICAgICAgICAvLyBCbG9jayB1bnRpbCBvdXIgY3JlYXRpbmcgdGhyZWFkIGhhcyBjb21wbGV0ZWQg
YW55IGV4dHJhIHNldHVwIHdvcmssIGluY2x1ZGluZyBlc3RhYmxpc2hpbmcgVGhyZWFkSWRlbnRp
Zmllci4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQtPm11dGV4KTsKIAotICAg
IFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb250ZXh0LT5uYW1lKTsK
KyAgICAgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQt
Pm5hbWUpOworICAgICAgICBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50
KTsKIAotICAgIGF1dG8gZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7
Ci0KLSAgICAvLyBEZWxldGUgdGhlIGNvbnRleHQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0aHJlYWQu
Ci0gICAgZGVsZXRlIGNvbnRleHQ7CisgICAgICAgIC8vIEFjayBjb21wbGV0aW9uIG9mIGluaXRp
YWxpemF0aW9uIHRvIHRoZSBjcmVhdGluZyB0aHJlYWQuCisgICAgICAgIGNvbnRleHQtPmNvbmRp
dGlvbi5zaWduYWwoKTsKKyAgICB9CiAKICAgICBlbnRyeVBvaW50KCk7CiB9CiAKIFJlZlB0cjxU
aHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4m
JiBlbnRyeVBvaW50KQogewotICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3
VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSB9OworICAgIE5l
d1RocmVhZENvbnRleHQgY29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSwg
eyB9IH07CiAKLSAgICAvLyBQcmV2ZW50IHRoZSB0aHJlYWQgYm9keSBmcm9tIGV4ZWN1dGluZyB1
bnRpbCB3ZSd2ZSBlc3RhYmxpc2hlZCB0aGUgdGhyZWFkIGlkZW50aWZpZXIuCi0gICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKGNvbnRleHQtPmNyZWF0aW9uTXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihjb250ZXh0Lm11dGV4KTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZXN1bHQgPSBUaHJlYWQ6
OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsICZjb250ZXh0LCBuYW1lKTsKKyAgICAv
LyBBZnRlciBlc3RhYmxpc2hpbmcgVGhyZWFkLCByZWxlYXNlIHRoZSBtdXRleCBhbmQgd2FpdCBm
b3IgY29tcGxldGlvbiBvZiBpbml0aWFsaXphdGlvbi4KKyAgICBjb250ZXh0LmNvbmRpdGlvbi53
YWl0KGNvbnRleHQubXV0ZXgpOwogCi0gICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwo
dGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKQoreworICAgIFRocmVhZEhvbGRl
ciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRhKQorICAgICAg
ICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lk
IFRocmVhZDo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9zdGFjayA9IFN0YWNrQm91bmRzOjpjdXJy
ZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKIH0KIAogdm9pZCBUaHJlYWQ6OmRpZEV4aXQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAppbmRleCAzMzcyYWMxMmVkOGZlMGIzYTAxYWYwZjFmZTM2NjVlYjM0OTZiZGEyLi4z
MzE3YzBkZTkxYWQxZTU1MTk1ZTljOWFkNDdkOTIzNTdhYjM1ZTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KIAogI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKQEAgLTY4LDcgKzY5LDcgQEAg
Y2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogCiAg
ICAgLy8gUmV0dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgVGhyZWFkJiBjdXJyZW50KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJl
YWQqIGN1cnJlbnRNYXlCZU51bGwoKTsKKyAgICBzdGF0aWMgVGhyZWFkKiBjdXJyZW50TWF5QmVO
dWxsKCk7CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlz
IHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAgICAgLy8gb2Yg
dGhyZWFkcy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhvbGRpbmcgdGhp
cyBUaHJlYWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTA5LDYgKzExMCw3IEBAIGNs
YXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAgICAv
LyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8gSGVs
cGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBmcm9t
IHdpdGhpbiB0aGUgdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiAKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCkBAIC0xMjYs
NiArMTI4LDExIEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxU
aHJlYWQ+IHsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygp
OwogCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3N0YWNrOworICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICBtYWNoX3BvcnRf
dCBtYWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQogI2VuZGlmCkBAIC0x
NDEsNiArMTQ4LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFRocmVhZD4gewogI2Vsc2UKICAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRocmVhZElkZW50
aWZpZXIpOwogI2VuZGlmCisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICNpZiBVU0UoUFRIUkVB
RFMpICYmICFPUyhEQVJXSU4pCiAgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3BlbmRS
ZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CkBAIC0xNzIsNiArMTgwLDcg
QEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewog
ICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07
CiAgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAgIFN0
YWNrQm91bmRzIG1fc3RhY2sgeyBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKSB9OwogICAgIGJv
b2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90
IG1faGFuZGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGQ2YzBhMTc3
YTY5MDhlMWRjMDEzOGEwNjhjMmExMTBhOTQzMjVhMmYuLmFmOGU2N2U1NzM2MjMyMmI3OTUxNGM3
NjZkNjRhMjgyNmUwZTQxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0
aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAg
LTE4OCw4ICsxODgsOSBAQCB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5n
KCkKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5J
Zk5vbldURkNyZWF0ZWQoKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZl
bklmTm9uV1RGQ3JlYXRlZCgpCiB7CisgICAgVGhyZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6ZSgp
OwogI2lmICFPUyhEQVJXSU4pCiAgICAgc2lnc2V0X3QgbWFzazsKICAgICBzaWdlbXB0eXNldCgm
bWFzayk7CkBAIC0yOTksMjUgKzMwMCwxNyBAQCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAg
ICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0KIAotVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlC
ZU51bGwoKQotewotICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOwotICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOwotICAg
IHJldHVybiBudWxscHRyOwotfQotCiBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiB7CiAgICAg
aWYgKFRocmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKICAgICAgICAgcmV0dXJu
ICpjdXJyZW50OwogCiAgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVu
dGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgUmVmUHRyPFRocmVhZD4gdGhyZWFk
ID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9w
dFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYo
KSk7Ci0gICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCp0aHJlYWQpOworICAgIFRocmVhZEhv
bGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOwogICAgIGluaXRpYWxpemVDdXJyZW50VGhy
ZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotICAgIHJldHVybiAqdGhyZWFkOworICAgIHJldHVy
biB0aHJlYWQuZ2V0KCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggYmQ2MTVmYjkyYzY0MmU1OGUwYmExYzU3NGNh
YzRkNzY4MWU5ZjJmYi4uYjQ3NTJlZjAwYWE4ZGNiNDM1NGMzYzk2Y2EwMmQ3NDhmOWQ2YmQyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC0xMTYsNiArMTE2LDExIEBAIFRocmVhZDo6flRo
cmVhZCgpCiAgICAgICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsKIH0KIAordm9pZCBUaHJlYWQ6
OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCit7CisgICAgVGhy
ZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6ZSgpOworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRI
UkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxo
dHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBz
dGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTQ1
LDYgKzE1MCw3IEBAIHZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICAgICB9IF9fZXhjZXB0IChFWENFUFRJT05fQ09O
VElOVUVfRVhFQ1VUSU9OKSB7CiAgICAgfQogI2VuZGlmCisgICAgaW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9CiAKIHZvaWQgVGhyZWFkOjppbml0aWFsaXpl
UGxhdGZvcm1UaHJlYWRpbmcoKQpAQCAtMjYxLDkgKzI2Nyw4IEBAIHNpemVfdCBUaHJlYWQ6Omdl
dFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogCiBUaHJlYWQmIFRocmVh
ZDo6Y3VycmVudCgpCiB7Ci0gICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpj
dXJyZW50KCk7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsK
KyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3VycmVudE1heUJlTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVh
ZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAgICBSZWY8VGhyZWFkPiB0aHJl
YWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKQEAgLTI3NCw2ICsyNzksNyBAQCBUaHJlYWQm
IFRocmVhZDo6Y3VycmVudCgpCiAKICAgICB0aHJlYWQtPmVzdGFibGlzaChoYW5kbGUsIGN1cnJl
bnRJRCgpKTsKICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUodGhyZWFkLmdldCgpLCBUaHJl
YWQ6OmN1cnJlbnRJRCgpKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldU
RkNyZWF0ZWQoKTsKICAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVh
ZERhdGEuY3BwCmluZGV4IGNkZjNkY2JhNmI2MTIzZmFmODFhMmJlYWQwYTAxYjJjNGY2ZjNlMDQu
LmYzYTNlOGE5ZDY2NGYxZjA1MmM5OTM2MTgyZWMyNzVhMjc0ZWZmMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dURlRo
cmVhZERhdGEuY3BwCkBAIC00NCwxMiArNDQsMTEgQEAgV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFk
RGF0YSgpCiAgICAgLCBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9kZWZh
dWx0QXRvbWljU3RyaW5nVGFibGUoMCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVj
dG9yKDApCi0gICAgLCBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3Rh
Y2tCb3VuZHMoKSkKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgLCBtX3N0YWNrU3RhdHMo
KQogI2VuZGlmCiAgICAgLCBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5KDApCi0gICAgLCBt
X3NhdmVkTGFzdFN0YWNrVG9wKHN0YWNrKCkub3JpZ2luKCkpCisgICAgLCBtX3NhdmVkTGFzdFN0
YWNrVG9wKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkub3JpZ2luKCkpCiB7CiAgICAgQXRvbWlj
U3RyaW5nVGFibGU6OmNyZWF0ZSgqdGhpcyk7CiAgICAgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFi
bGUgPSBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1dURlRocmVhZERhdGEuaCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAppbmRl
eCBhNDNhNmViMGNkNmZjMzkyMjUyYmI3NTQ1OWU0NTIxM2Q1NjFkNmM3Li44NGUzYzMwMzYyY2U3
ZGIwNzcxMDYzMjRmMzFmOTE3ZGJjZmI2YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9X
VEZUaHJlYWREYXRhLmgKKysrIGIvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCkBAIC0y
OSw3ICsyOSw2IEBACiAKICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0
Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKQEAgLTU3
LDE2ICs1Niw2IEBAIGNsYXNzIFdURlRocmVhZERhdGEgewogICAgICAgICByZXR1cm4gb2xkQXRv
bWljU3RyaW5nVGFibGU7CiAgICAgfQogCi0gICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkK
LSAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gYWx3YXlzIGdldCBhIGZyZXNoIFN0YWNrQm91
bmRzIGZyb20gdGhlIE9TIGR1ZSB0byBob3cgZmliZXJzIHdvcmsuCi0gICAgICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNDExCi0jaWYgT1MoV0lO
RE9XUykKLSAgICAgICAgbV9zdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFk
U3RhY2tCb3VuZHMoKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gbV9zdGFja0JvdW5kczsKLSAg
ICB9Ci0KICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFk
U3RhdHMmIHN0YWNrU3RhdHMoKQogICAgIHsKQEAgLTEwMSw3ICs5MCw2IEBAIGNsYXNzIFdURlRo
cmVhZERhdGEgewogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2RlZmF1bHRBdG9taWNTdHJpbmdU
YWJsZTsKICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJs
ZURlc3RydWN0b3I7CiAKLSAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRzOwogI2lmIEVOQUJM
RShTVEFDS19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBtX3N0YWNrU3Rh
dHM7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314411</attachid>
            <date>2017-07-02 00:40:49 -0700</date>
            <delta_ts>2017-07-04 02:51:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170702164048.patch</filename>
            <type>text/plain</type>
            <size>25329</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YjkxOTUyNjdlNGFlOGQyNDZiZTEzNzY4NmMyMzQxMzYzNzY0NTdiLi4yMWQxOTQ5MTM5MmM0MTNj
YWNjNTFmMzU3NDk5MjBlNTEwMTA0NTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNy0wNy0wMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWRz
IHN0YWNrLgorICAgICAgICBDdXJyZW50bHksIHN0YWNrIGJvdW5kcyBhcmUgc3RvcmVkIGluIFdU
RlRocmVhZERhdGEgd2hpY2ggaXMgbG9jYXRlZAorICAgICAgICBpbiBUTFMuIFRodXMsIG9ubHkg
dGhlIHRocmVhZCBpdHNlbGYgY2FuIGFjY2VzcyBpdHMgb3duIFdURlRocmVhZERhdGEuCisgICAg
ICAgIFdlIHdvcmthcm91bmQgdGhpcyBzaXR1YXRpb24gYnkgaG9sZGluZyBTdGFja0JvdW5kcyBp
biBNYWNoaW5lVGhyZWFkIGluIEpTQywKKyAgICAgICAgYnV0IFN0YWNrQm91bmRzIHNob3VsZCBi
ZSBwdXQgaW4gV1RGOjpUaHJlYWQgaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIG1vdmVz
IFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0byBXVEY6OlRocmVhZC4gU3RhY2tCb3Vu
ZHMKKyAgICAgICAgaW5mb3JtYXRpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVGhyZWFkLiBU
aHVzIHB1dHRpbmcgaXQgaW4gV1RGOjpUaHJlYWQKKyAgICAgICAgaXMgbmF0dXJhbCBjaG9pY2Uu
CisKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHA6CisgICAgICAgIChKU0M6
Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpNYWNoaW5lVGhyZWFkKToKKyAgICAgICAg
KEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OmNhcHR1cmVTdGFjayk6CisgICAg
ICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRo
cmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNrQmFzZSk6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0VuZCk6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAg
ICAgIChKU0M6OlZNOjp1cGRhdGVTdGFja0xpbWl0cyk6CisgICAgICAgIChKU0M6OlZNOjpjb21t
aXR0ZWRTdGFja0J5dGVDb3VudCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAo
SlNDOjpWTTo6aXNTYWZlVG9SZWN1cnNlKToKKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29w
ZS5jcHA6CisgICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWTTo6ZW5zdXJlU3RhY2tD
YXBhY2l0eUZvcik6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNwcDoKKyAgICAgICAgKiB5
YXJyL1lhcnJQYXR0ZXJuLmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyclBhdHRlcm5Db25z
dHJ1Y3Rvcjo6aXNTYWZlVG9SZWN1cnNlKToKKwogMjAxNy0wNy0wMSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gUmVtb3ZlIGNvZGUgb25seSBuZWVk
ZWQgd2hlbiBidWlsZGluZyBmb3IgT1MgWCBZb3NlbWl0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAwNmNhOTJkZTVjZmM0ZmQ4
ODA0ZjhhMTFjOTk5M2Q2MzZkY2ZlN2VmLi43N2M1NzkxMzlkOWVjMjYxNTE2YTlmYWFhMTA3Njk2
N2ZlODBkODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE3LTA3LTAyICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFdURjo6VGhyZWFkIHNob3VsZCBo
YXZlIHRoZSB0aHJlYWRzIHN0YWNrIGJvdW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIG1vdmUgU3RhY2tCb3VuZHMgZnJvbSBXVEZUaHJlYWRE
YXRhIHRvIFdURjo6VGhyZWFkLgorICAgICAgICBPbmUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQg
d2Ugc2hvdWxkIG1ha2UgdmFsaWQgU3RhY2tCb3VuZHMKKyAgICAgICAgdmlzaWJsZSB0byBUaHJl
YWQ6OmNyZWF0ZSgpIGNhbGxlci4gV2hlbiB0aGUgY2FsbGVyIGdldAorICAgICAgICBXVEY6OlRo
cmVhZCBmcm9tIFRocmVhZDo6Y3JlYXRlKCksIHRoaXMgV1RGOjpUaHJlYWQgc2hvdWxkCisgICAg
ICAgIGhhdmUgYSB2YWxpZCBTdGFja0JvdW5kcy4gQnV0IFN0YWNrQm91bmRzIGluZm9ybWF0aW9u
IGNhbiBiZQorICAgICAgICByZXRyaXZlZCBvbmx5IGluIHRoZSBXVEY6OlRocmVhZCdzIHRocmVh
ZCBpdHNlbGYuCisKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6
U3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKToKKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OlN0
YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvU3RhY2tTdGF0cy5jcHA6CisgICAgICAgIChXVEY6
OlN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cyk6CisgICAgICAgICog
d3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVu
dE1heUJlTnVsbCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OnN0YWNrKToKKyAgICAg
ICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6Omlu
aXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6
OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Vy
cmVudE1heUJlTnVsbCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6
CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25X
VEZDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKiB3
dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OldURlRo
cmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRhLmg6CisgICAgICAgIChXVEY6
OldURlRocmVhZERhdGE6OnN0YWNrKTogRGVsZXRlZC4KKwogMjAxNy0wNy0wMSAgQ2FpbyBMaW1h
ICA8dGljYWlvbGltYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gV1RGR2V0QmFja3RyYWNl
IGNhbiByZXR1cm4gbnVtYmVyT2ZGcmFtZXMgPT0gMCBpbiBzb21lIGFyY2hpdGVjdHVyZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwCmlu
ZGV4IDY3NjNlYTNhYjFjMmY0Njc5YzM3NzFiMTkxOTczYzUzMTZiZjVmNDAuLjhiOWJiNjg2NDVj
Y2Q0ZDhiMDMxYjZjY2FkZDI4MDU5M2I4OTcwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAtMjM5LDkgKzIzOSw2IEBAIHZv
aWQgTWFjaGluZVRocmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJv
b3RzJiBjb25zZXJ2YXRpdmVSb290CiBNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFj
aGluZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZChXVEY6OlRocmVhZDo6Y3VycmVudCgpKQogewot
ICAgIGF1dG8gc3RhY2tCb3VuZHMgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKLSAgICBtX3N0
YWNrQmFzZSA9IHN0YWNrQm91bmRzLm9yaWdpbigpOwotICAgIG1fc3RhY2tFbmQgPSBzdGFja0Jv
dW5kcy5lbmQoKTsKIH0KIAogc2l6ZV90IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpn
ZXRSZWdpc3RlcnMoTWFjaGluZVRocmVhZDo6UmVnaXN0ZXJzJiByZWdpc3RlcnMpCkBAIC0zMDIs
MTUgKzI5OSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBvc1JlZFpvbmVBZGp1c3RtZW50KCkKIAog
c3RkOjpwYWlyPHZvaWQqLCBzaXplX3Q+IE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpj
YXB0dXJlU3RhY2sodm9pZCogc3RhY2tUb3ApCiB7Ci0gICAgY2hhciogYmVnaW4gPSByZWludGVy
cHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0Jhc2UpOworICAgIGNoYXIqIGJlZ2luID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrQmFzZSgpKTsKICAgICBjaGFyKiBlbmQgPSBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCop
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhY2tUb3ApKSk7CiAgICAgQVNTRVJUKGJl
Z2luID49IGVuZCk7CiAKICAgICBjaGFyKiBlbmRXaXRoUmVkWm9uZSA9IGVuZCArIG9zUmVkWm9u
ZUFkanVzdG1lbnQoKTsKICAgICBBU1NFUlQoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVv
Zih2b2lkKik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpID09
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihlbmRXaXRoUmVkWm9uZSkpOwogCi0gICAgaWYg
KGVuZFdpdGhSZWRab25lIDwgbV9zdGFja0VuZCkKLSAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjaGFyKj4obV9zdGFja0VuZCk7CisgICAgaWYgKGVuZFdpdGhS
ZWRab25lIDwgc3RhY2tFbmQoKSkKKyAgICAgICAgZW5kV2l0aFJlZFpvbmUgPSByZWludGVycHJl
dF9jYXN0X3B0cjxjaGFyKj4oc3RhY2tFbmQoKSk7CiAKICAgICBzdGQ6OnN3YXAoYmVnaW4sIGVu
ZFdpdGhSZWRab25lKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmVnaW4sIGVuZFdpdGhS
ZWRab25lIC0gYmVnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAppbmRleCBiNjJlYjQzMTMxMmM4Yjg1MmQ1MzI4Yzk3NmE2MjI1YjllNzlh
YzQzLi5jMTUxMGQ2MjUxYzBiMzRhZjlhNGViOTUxYTUxZTk2ZWE5NGQ1YzI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApAQCAtNzIsMTIg
KzcyLDEwIEBAIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAgc3RkOjpwYWlyPHZvaWQq
LCBzaXplX3Q+IGNhcHR1cmVTdGFjayh2b2lkKiBzdGFja1RvcCk7CiAKICAgICAgICAgV1RGOjpU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV90aHJlYWQtPmlkKCk7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja0Jhc2U7
IH0KLSAgICAgICAgdm9pZCogc3RhY2tFbmQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrRW5kOyB9
CisgICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5zdGFj
aygpLm9yaWdpbigpOyB9CisgICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3QgeyByZXR1cm4g
bV90aHJlYWQtPnN0YWNrKCkuZW5kKCk7IH0KIAogICAgICAgICBSZWY8V1RGOjpUaHJlYWQ+IG1f
dGhyZWFkOwotICAgICAgICB2b2lkKiBtX3N0YWNrQmFzZTsKLSAgICAgICAgdm9pZCogbV9zdGFj
a0VuZDsKICAgICAgICAgTWFjaGluZVRocmVhZCogbV9uZXh0IHsgbnVsbHB0ciB9OwogICAgICAg
ICBNYWNoaW5lVGhyZWFkKiBtX3ByZXYgeyBudWxscHRyIH07CiAgICAgfTsKQEAgLTEwNCw3ICsx
MDIsNyBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAjZGVmaW5lIERFQ0xBUkVfQU5EX0NPTVBV
VEVfQ1VSUkVOVF9USFJFQURfU1RBVEUoc3RhdGVOYW1lKSBcCiAgICAgQ3VycmVudFRocmVhZFN0
YXRlIHN0YXRlTmFtZTsgXAogICAgIHN0YXRlTmFtZS5zdGFja1RvcCA9ICZzdGF0ZU5hbWU7IFwK
LSAgICBzdGF0ZU5hbWUuc3RhY2tPcmlnaW4gPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmln
aW4oKTsgXAorICAgIHN0YXRlTmFtZS5zdGFja09yaWdpbiA9IFRocmVhZDo6Y3VycmVudCgpLnN0
YWNrKCkub3JpZ2luKCk7IFwKICAgICBBTExPQ0FURV9BTkRfR0VUX1JFR0lTVEVSX1NUQVRFKHN0
YXRlTmFtZSAjIyBfcmVnaXN0ZXJTdGF0ZSk7IFwKICAgICBzdGF0ZU5hbWUucmVnaXN0ZXJTdGF0
ZSA9ICZzdGF0ZU5hbWUgIyMgX3JlZ2lzdGVyU3RhdGUKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRleCA5ZWYxNDNh
ZDQ4ZTcxZDI4YjE3YmE0MTZmYTNiMTRiY2JkYjc0NWFhLi4yZTgxNDI3MGI5YmExZjMyYjM5Y2M2
ZDZlNDM0OGFmOWI1YTcyMDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmcoKQogICAgICAgICBEaXNhbGxvd1ZNUmVlbnRyeTo6aW5pdGlhbGl6
ZSgpOwogI2VuZGlmCiAgICAgICAgIGluaXRpYWxpemVTdXBlclNhbXBsZXIoKTsKLSAgICAgICAg
V1RGVGhyZWFkRGF0YSYgdGhyZWFkRGF0YSA9IHd0ZlRocmVhZERhdGEoKTsKLSAgICAgICAgdGhy
ZWFkRGF0YS5zZXRTYXZlZExhc3RTdGFja1RvcCh0aHJlYWREYXRhLnN0YWNrKCkub3JpZ2luKCkp
OworICAgICAgICB3dGZUaHJlYWREYXRhKCkuc2V0U2F2ZWRMYXN0U3RhY2tUb3AoVGhyZWFkOjpj
dXJyZW50KCkuc3RhY2soKS5vcmlnaW4oKSk7CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgICAgIFdhc206OlRodW5rczo6aW5pdGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDQ4NzI3YTY2MmVlOTY1NmFiY2E4NWMwNWMzNTZhNmY5NDY0MjVkM2Uu
LjZlNjg2M2ZhMDM5MmZjYTVlOTE0YTgxOGMwYmUwNmQzYjUxOWQwOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIxMSw3ICsyMTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX3NoYWRvd0NoaWNrZW4oc3RkOjptYWtl
X3VuaXF1ZTxTaGFkb3dDaGlja2VuPigpKQogewogICAgIGludGVycHJldGVyID0gbmV3IEludGVy
cHJldGVyKCp0aGlzKTsKLSAgICBTdGFja0JvdW5kcyBzdGFjayA9IHd0ZlRocmVhZERhdGEoKS5z
dGFjaygpOworICAgIFN0YWNrQm91bmRzIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2so
KTsKICAgICB1cGRhdGVTb2Z0UmVzZXJ2ZWRab25lU2l6ZShPcHRpb25zOjpzb2Z0UmVzZXJ2ZWRa
b25lU2l6ZSgpKTsKICAgICBzZXRMYXN0U3RhY2tUb3Aoc3RhY2sub3JpZ2luKCkpOwogCkBAIC02
NzEsNyArNjcxLDcgQEAgaW5saW5lIHZvaWQgVk06OnVwZGF0ZVN0YWNrTGltaXRzKCkKICAgICB2
b2lkKiBsYXN0U29mdFN0YWNrTGltaXQgPSBtX3NvZnRTdGFja0xpbWl0OwogI2VuZGlmCiAKLSAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAg
ICBjb25zdCBTdGFja0JvdW5kcyYgc3RhY2sgPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpOwog
ICAgIHNpemVfdCByZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgp
OwogICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGF0IE9wdGlvbnM6OnJl
c2VydmVkWm9uZVNpemUoKSA+PSBtaW5pbXVtUmVzZXJ2ZVpvbmVTaXplIGF0CiAgICAgLy8gb3B0
aW9ucyBpbml0aWFsaXphdGlvbiB0aW1lLCBhbmQgdGhlIG9wdGlvbiB2YWx1ZSBzaG91bGQgbm90
IGhhdmUgYmVlbiBjaGFuZ2VkIHRoZXJlYWZ0ZXIuCkBAIC04ODUsOSArODg1LDkgQEAgc2l6ZV90
IFZNOjpjb21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjaWYgRU5BQkxFKEpJVCkKICAgICAvLyBX
aGVuIHVzaW5nIHRoZSBDIHN0YWNrLCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IHN0YWNrIHBhZ2Vz
IGFyZSBhY3R1YWxseQogICAgIC8vIGNvbW1pdHRlZC4gU28sIHdlIHVzZSB0aGUgY3VycmVudCBz
dGFjayB1c2FnZSBhcyBhbiBlc3RpbWF0ZS4KLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0
YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgp
LnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgaW50OF90KiBjdXJyZW50ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPigmY3VycmVudCk7Ci0gICAgaW50OF90KiBoaWdoID0gcmVp
bnRlcnByZXRfY2FzdDxpbnQ4X3QqPih3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmlnaW4oKSk7
CisgICAgaW50OF90KiBoaWdoID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihUaHJlYWQ6OmN1
cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpKTsKICAgICByZXR1cm4gaGlnaCAtIGN1cnJlbnQ7CiAj
ZWxzZQogICAgIHJldHVybiBDTG9vcFN0YWNrOjpjb21taXR0ZWRCeXRlQ291bnQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGRiNWFmMzUxYjJiMGI5NDE2NDc1ZjA1N2FmZGQ4
Y2IxNWFhMzdjYmIuLjJlNzU5OTEwY2MyMWIwNWViMTRjM2YxZDkyOTY3YmEzMWQyZTg0M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNjg5LDcgKzY4OSw3IEBAIGNsYXNzIFZN
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExp
c3ROb2RlPFZNPiB7CiAKICAgICBib29sIGlzU2FmZVRvUmVjdXJzZSh2b2lkKiBzdGFja0xpbWl0
KSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlz
R3Jvd2luZ0Rvd253YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3Rh
Y2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICAgICAgdm9pZCogY3VyciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KCZjdXJyKTsKICAgICAgICAgcmV0dXJuIGN1cnIgPj0gc3RhY2tMaW1p
dDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVu
dHJ5U2NvcGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3Bl
LmNwcAppbmRleCBjMmQ5YmRhMTg4YzQ3NzIwMjU2ZDQwMzA2NDgyODZlYzQ1ZTMxYzU5Li5kMTFh
OGZmYTY2ZGI1ZmUzMGZiOWY0OWY0NTMxMzgzNmI3OGQyMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgVk1F
bnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewogICAgIEFTU0VSVCgh
RGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgQVNT
RVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIEFT
U0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAg
IGlmICghdm0uZW50cnlTY29wZSkgewogICAgICAgICB2bS5lbnRyeVNjb3BlID0gdGhpczsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGluZXMuaAppbmRleCA1YTc3NjE5NTBl
MGNmNmIyODg1NjAxOTMxYWY2YjcxYTNiZTAyZDc4Li5iYzBjMjVmOTFlMmMxNzYxYTIxY2EyMGVi
MDg4MmEwOTNhMjE1MTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUlubGlu
ZXMuaApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGJvb2wgVk06OmVuc3VyZVN0
YWNrQ2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICBBU1NFUlQod3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQo
KSk7CisgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndh
cmQoKSk7CiAgICAgcmV0dXJuIG5ld1RvcE9mU3RhY2sgPj0gbV9zb2Z0U3RhY2tMaW1pdDsKICNl
bHNlCiAgICAgcmV0dXJuIGVuc3VyZVN0YWNrQ2FwYWNpdHlGb3JDTG9vcChuZXdUb3BPZlN0YWNr
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggMDJmYTRm
ZDEwYmFjOGNlODY3MzJkYzZmYjIwNTg0YjNlZjg0NDIzYy4uM2Q4NGFiOTljYTQyMTk1ZGZmYjQz
Nzk2YWQzMzNhMGM0ZWNlMzAxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1U
cmFwcy5jcHAKQEAgLTI2OSwyNSArMjY5LDcgQEAgY2xhc3MgVk1UcmFwczo6U2lnbmFsU2VuZGVy
IGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICAgICAgICAgIFRocmVhZCYgdGhyZWFkID0gKm93bmVyVGhyZWFkLT5n
ZXQoKTsKLSAgICAgICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IFN0YWNrQm91
bmRzOjplbXB0eUJvdW5kcygpOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBtYWNoaW5lIHRocmVhZHMgYmVjYXVzZSBp
dCBpcyB0aGUgb25seSBub24tVExTIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
dGhlIHN0YWNrIGJvdW5kcyBvZiB0aGlzIHRocmVhZC4gV2Ugc2hvdWxkIGtlZXAgaW4gb24gdGhl
IFdURjo6VGhyZWFkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQotICAgICAgICAgICAgICAg
ICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMgPSB2bS5oZWFwLm1hY2hpbmVUaHJl
YWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbWFjaGluZVRocmVhZHNMb2NrID0gdHJ5
SG9sZExvY2sobWFjaGluZVRocmVhZHMuZ2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFtYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIFRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICAgICAgICAgICAgICBhdXRvJiB0aHJlYWRM
aXN0ID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9jayk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQq
IG1hY2hpbmVUaHJlYWQgPSB0aHJlYWRMaXN0LmhlYWQoKTsgbWFjaGluZVRocmVhZDsgbWFjaGlu
ZVRocmVhZCA9IG1hY2hpbmVUaHJlYWQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hY2hpbmVUaHJlYWQtPm1fdGhyZWFkLmdldCgpID09IHRocmVhZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzKG1hY2hpbmVUaHJl
YWQtPnN0YWNrQmFzZSgpLCBtYWNoaW5lVGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RhY2tCb3Vu
ZHMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2bS50
cmFwcygpLnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOwor
ICAgICAgICAgICAgICAgIHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250
ZXh0LCB0aHJlYWQuc3RhY2soKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKaW5kZXggMWMyZGQ3NWRjYjQ0
Y2EyOGI5YTcxMDQ4OWNiMGE0ZTcxOGY0ZGFlMi4uNWYyNzMwNmE0NTYxMmZjNTJlNWQ2MzU3YmQ4
Mzg0OTQwMTU1NjAyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
clBhdHRlcm4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJu
LmNwcApAQCAtODgwLDcgKzg4MCw3IEBAIGNsYXNzIFlhcnJQYXR0ZXJuQ29uc3RydWN0b3Igewog
ICAgIHsKICAgICAgICAgaWYgKCFtX3N0YWNrTGltaXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253
YXJkKCkpOworICAgICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dp
bmdEb3dud2FyZCgpKTsKICAgICAgICAgaW50OF90KiBjdXJyID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQ4X3QqPigmY3Vycik7CiAgICAgICAgIGludDhfdCogbGltaXQgPSByZWludGVycHJldF9jYXN0
PGludDhfdCo+KG1fc3RhY2tMaW1pdCk7CiAgICAgICAgIHJldHVybiBjdXJyID49IGxpbWl0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3Rm
L1N0YWNrQm91bmRzLmgKaW5kZXggY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2ZlMTkw
Y2RlZi4uM2M5MTFlZjM2ZWM2OTYyYzk3ZjlmYmQ0MzMzMzkzM2VmNmQ4ZWFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFj
a0JvdW5kcy5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFN0YWNrQm91bmRzIHsKICAgICBjb25z
dCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhID0gNjQgKiAxMDI0Owog
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0YWNrQm91bmRzIGVtcHR5Qm91bmRzKCkgeyByZXR1cm4g
U3RhY2tCb3VuZHMoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgU3RhY2tCb3VuZHMgZW1wdHlC
b3VuZHMoKSB7IHJldHVybiBTdGFja0JvdW5kcygpOyB9CiAKICAgICBzdGF0aWMgU3RhY2tCb3Vu
ZHMgY3VycmVudFRocmVhZFN0YWNrQm91bmRzKCkKICAgICB7CkBAIC0xMjcsOSArMTI3LDkgQEAg
Y2xhc3MgU3RhY2tCb3VuZHMgewogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTdGFja0JvdW5kcygp
Ci0gICAgICAgIDogbV9vcmlnaW4oMCkKLSAgICAgICAgLCBtX2JvdW5kKDApCisgICAgY29uc3Rl
eHByIFN0YWNrQm91bmRzKCkKKyAgICAgICAgOiBtX29yaWdpbihudWxscHRyKQorICAgICAgICAs
IG1fYm91bmQobnVsbHB0cikKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9TdGFja1N0YXRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCmluZGV4
IDA2NGYyZjA1MmFhZjM4YjlmODBhNmRkNDExMzJlNjU0NmU0NTdmNDIuLjU2MTMwYjA0ZWEyNTQ4
ZTEwZDA4YTlkMDI5MmNiMDNhMGIxYmM4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0
YWNrU3RhdHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrU3RhdHMuY3BwCkBAIC01OSw3
ICs1OSw3IEBAIGludCBTdGFja1N0YXRzOjpzX21heExheW91dFJlZW50cnlEZXB0aCA9IDA7CiAK
IFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzOjpQZXJUaHJlYWRTdGF0cygpCiB7Ci0gICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgY29u
c3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKTsKICAgICBt
X3JlZW50cnlEZXB0aCA9IDA7CiAgICAgbV9zdGFja1N0YXJ0ID0gKGNoYXIqKXN0YWNrLm9yaWdp
bigpOwogICAgIG1fY3VycmVudENoZWNrUG9pbnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXgg
ZGRjMjhjMmE1NGIzMmExYTY2NGNhM2IwOTdmM2FiZTJmN2M4NmY5Ny4uMjc2YTMwYWRiYWMzYTRj
ZjQwZTJiNTI0MjFmZWJlNjBiZTAxOTVhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC00NiwxMiAr
NDYsMTYgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK2VudW0gY2xhc3MgU3RhZ2UgeworICAgIFN0
YXJ0LCBJbml0aWFsaXplCit9OworCiBzdHJ1Y3QgTmV3VGhyZWFkQ29udGV4dCB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6CiAgICAgY29uc3QgY2hhciogbmFtZTsKICAg
ICBGdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7Ci0gICAgTXV0ZXggY3JlYXRpb25NdXRleDsK
KyAgICBTdGFnZSBzdGFnZTsKKyAgICBNdXRleCBtdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24g
Y29uZGl0aW9uOwogfTsKIAogY29uc3QgY2hhciogVGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1l
KGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCkBAIC04NCwzMSArODgsNDYgQEAgY29uc3QgY2hhciog
VGhyZWFkOjpub3JtYWxpemVUaHJlYWROYW1lKGNvbnN0IGNoYXIqIHRocmVhZE5hbWUpCiBzdGF0
aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHREYXRhKQogewogICAgIE5ld1Ro
cmVhZENvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxOZXdUaHJlYWRDb250ZXh0Kj4oY29u
dGV4dERhdGEpOwotCi0gICAgLy8gQmxvY2sgdW50aWwgb3VyIGNyZWF0aW5nIHRocmVhZCBoYXMg
Y29tcGxldGVkIGFueSBleHRyYSBzZXR1cCB3b3JrLCBpbmNsdWRpbmcKLSAgICAvLyBlc3RhYmxp
c2hpbmcgVGhyZWFkSWRlbnRpZmllci4KKyAgICBGdW5jdGlvbjx2b2lkKCk+IGVudHJ5UG9pbnQ7
CiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRl
eCk7Ci0gICAgfQotCi0gICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnRleHQtPm5hbWUpOworICAgICAgICAvLyBCbG9jayB1bnRpbCBvdXIgY3JlYXRpbmcgdGhy
ZWFkIGhhcyBjb21wbGV0ZWQgYW55IGV4dHJhIHNldHVwIHdvcmssIGluY2x1ZGluZyBlc3RhYmxp
c2hpbmcgVGhyZWFkSWRlbnRpZmllci4KKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRl
eHQtPm11dGV4KTsKIAotICAgIGF1dG8gZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+ZW50
cnlQb2ludCk7CisgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5h
bChjb250ZXh0LT5uYW1lKTsKKyAgICAgICAgZW50cnlQb2ludCA9IFdURk1vdmUoY29udGV4dC0+
ZW50cnlQb2ludCk7CiAKLSAgICAvLyBEZWxldGUgdGhlIGNvbnRleHQgYmVmb3JlIHN0YXJ0aW5n
IHRoZSB0aHJlYWQuCi0gICAgZGVsZXRlIGNvbnRleHQ7CisgICAgICAgIC8vIEFjayBjb21wbGV0
aW9uIG9mIGluaXRpYWxpemF0aW9uIHRvIHRoZSBjcmVhdGluZyB0aHJlYWQuCisgICAgICAgIGNv
bnRleHQtPnN0YWdlID0gU3RhZ2U6OkluaXRpYWxpemU7CisgICAgICAgIGNvbnRleHQtPmNvbmRp
dGlvbi5zaWduYWwoKTsKKyAgICB9CiAKICAgICBlbnRyeVBvaW50KCk7CiB9CiAKIFJlZlB0cjxU
aHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4m
JiBlbnRyeVBvaW50KQogewotICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3
VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSB9OworICAgIE5l
d1RocmVhZENvbnRleHQgY29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIFN0YWdl
OjpTdGFydCwgeyB9LCB7IH0gfTsKIAotICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZy
b20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmll
ci4KLSAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQubXV0ZXgpOworICAgIFJlZlB0cjxUaHJlYWQ+IHJl
c3VsdCA9IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgJmNvbnRleHQs
IG5hbWUpOworICAgIC8vIEFmdGVyIGVzdGFibGlzaGluZyBUaHJlYWQsIHJlbGVhc2UgdGhlIG11
dGV4IGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGluaXRpYWxpemF0aW9uLgorICAgIHdoaWxl
IChjb250ZXh0LnN0YWdlICE9IFN0YWdlOjpJbml0aWFsaXplKQorICAgICAgICBjb250ZXh0LmNv
bmRpdGlvbi53YWl0KGNvbnRleHQubXV0ZXgpOwogCi0gICAgcmV0dXJuIFRocmVhZDo6Y3JlYXRl
SW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgY29udGV4dCwgbmFtZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKQoreworICAgIFRo
cmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOworICAgIGlmIChkYXRh
KQorICAgICAgICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9zdGFjayA9IFN0YWNrQm91
bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKIH0KIAogdm9pZCBUaHJlYWQ6OmRpZEV4
aXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaAppbmRleCAzMzcyYWMxMmVkOGZlMGIzYTAxYWYwZjFmZTM2NjVlYjM0
OTZiZGEyLi4zMzE3YzBkZTkxYWQxZTU1MTk1ZTljOWFkNDdkOTIzNTdhYjM1ZTRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KIAogI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKQEAgLTY4LDcg
KzY5LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVh
ZD4gewogCiAgICAgLy8gUmV0dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBUaHJlYWQqIGN1cnJlbnRNYXlCZU51bGwoKTsKKyAgICBzdGF0aWMgVGhyZWFkKiBjdXJy
ZW50TWF5QmVOdWxsKCk7CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0
bHkuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAg
ICAgLy8gb2YgdGhyZWFkcy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhv
bGRpbmcgdGhpcyBUaHJlYWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTA5LDYgKzEx
MCw3IEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+
IHsKICAgICAvLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAg
ICAgLy8gSGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJl
IHNldCBmcm9tIHdpdGhpbiB0aGUgdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
CkBAIC0xMjYsNiArMTI4LDExIEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxUaHJlYWQ+IHsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRo
cmVhZGluZygpOwogCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N0YWNrOworICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICBt
YWNoX3BvcnRfdCBtYWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQogI2Vu
ZGlmCkBAIC0xNDEsNiArMTQ4LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFRocmVhZD4gewogI2Vsc2UKICAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRo
cmVhZElkZW50aWZpZXIpOwogI2VuZGlmCisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICNpZiBV
U0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCiAgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxl
clN1c3BlbmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CkBAIC0xNzIs
NiArMTgwLDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRo
cmVhZD4gewogICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1f
aWQgeyAwIH07CiAgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9
OworICAgIFN0YWNrQm91bmRzIG1fc3RhY2sgeyBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKSB9
OwogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAg
cHRocmVhZF90IG1faGFuZGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4
IGQ2YzBhMTc3YTY5MDhlMWRjMDEzOGEwNjhjMmExMTBhOTQzMjVhMmYuLmFmOGU2N2U1NzM2MjMy
MmI3OTUxNGM3NjZkNjRhMjgyNmUwZTQxNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKQEAgLTE4OCw4ICsxODgsOSBAQCB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3Jt
VGhyZWFkaW5nKCkKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7CisgICAgVGhyZWFkOjpjdXJyZW50KCkuaW5p
dGlhbGl6ZSgpOwogI2lmICFPUyhEQVJXSU4pCiAgICAgc2lnc2V0X3QgbWFzazsKICAgICBzaWdl
bXB0eXNldCgmbWFzayk7CkBAIC0yOTksMjUgKzMwMCwxNyBAQCB2b2lkIFRocmVhZDo6ZGV0YWNo
KCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0KIAotVGhyZWFkKiBUaHJlYWQ6OmN1
cnJlbnRNYXlCZU51bGwoKQotewotICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRl
cjo6Y3VycmVudCgpOwotICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gJmRhdGEtPnRocmVh
ZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCiBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgp
CiB7CiAgICAgaWYgKFRocmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKICAgICAg
ICAgcmV0dXJuICpjdXJyZW50OwogCiAgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBU
aHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCi0gICAgUmVmUHRyPFRocmVh
ZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKKyAgICBSZWY8VGhyZWFkPiB0aHJl
YWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB0aHJlYWQtPmVzdGFibGlzaChwdGhy
ZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKCp0aHJlYWQpOworICAg
IFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQuZ2V0KCkpOwogICAgIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotICAgIHJldHVybiAqdGhyZWFkOwor
ICAgIHJldHVybiB0aHJlYWQuZ2V0KCk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpj
dXJyZW50SUQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggYmQ2MTVmYjkyYzY0MmU1OGUw
YmExYzU3NGNhYzRkNzY4MWU5ZjJmYi4uYjQ3NTJlZjAwYWE4ZGNiNDM1NGMzYzk2Y2EwMmQ3NDhm
OWQ2YmQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC0xMTYsNiArMTE2LDExIEBAIFRo
cmVhZDo6flRocmVhZCgpCiAgICAgICAgIENsb3NlSGFuZGxlKG1faGFuZGxlKTsKIH0KIAordm9p
ZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCit7
CisgICAgVGhyZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6ZSgpOworfQorCiAvLyBNU19WQ19FWENF
UFRJT04sIFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRocmVhZE5hbWVJbnRlcm5hbCBhbGwgY29t
ZSBmcm9tIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMu
YXNweD4uCiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNfRVhDRVBUSU9OID0gMHg0MDZEMTM4ODsK
IApAQCAtMTQ1LDYgKzE1MCw3IEBAIHZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFtZSkKICAgICB9IF9fZXhjZXB0IChFWENF
UFRJT05fQ09OVElOVUVfRVhFQ1VUSU9OKSB7CiAgICAgfQogI2VuZGlmCisgICAgaW5pdGlhbGl6
ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiB9CiAKIHZvaWQgVGhyZWFkOjpp
bml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKQpAQCAtMjYxLDkgKzI2Nyw4IEBAIHNpemVfdCBU
aHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQogCiBUaHJl
YWQmIFRocmVhZDo6Y3VycmVudCgpCiB7Ci0gICAgVGhyZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFk
SG9sZGVyOjpjdXJyZW50KCk7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIHJldHVybiBkYXRhLT50
aHJlYWQoKTsKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3VycmVudE1heUJlTnVsbCgpKQor
ICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJl
YWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAgICBSZWY8VGhy
ZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKQEAgLTI3NCw2ICsyNzksNyBA
QCBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiAKICAgICB0aHJlYWQtPmVzdGFibGlzaChoYW5k
bGUsIGN1cnJlbnRJRCgpKTsKICAgICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUodGhyZWFkLmdl
dCgpLCBUaHJlYWQ6OmN1cnJlbnRJRCgpKTsKKyAgICBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2
ZW5JZk5vbldURkNyZWF0ZWQoKTsKICAgICByZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1dURlRocmVhZERhdGEuY3BwCmluZGV4IGNkZjNkY2JhNmI2MTIzZmFmODFhMmJlYWQwYTAxYjJj
NGY2ZjNlMDQuLmYzYTNlOGE5ZDY2NGYxZjA1MmM5OTM2MTgyZWMyNzVhMjc0ZWZmMDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1dURlRocmVhZERhdGEuY3BwCkBAIC00NCwxMiArNDQsMTEgQEAgV1RGVGhyZWFkRGF0YTo6
V1RGVGhyZWFkRGF0YSgpCiAgICAgLCBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSgwKQogICAg
ICwgbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUoMCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFi
bGVEZXN0cnVjdG9yKDApCi0gICAgLCBtX3N0YWNrQm91bmRzKFN0YWNrQm91bmRzOjpjdXJyZW50
VGhyZWFkU3RhY2tCb3VuZHMoKSkKICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgLCBtX3N0
YWNrU3RhdHMoKQogI2VuZGlmCiAgICAgLCBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5KDAp
Ci0gICAgLCBtX3NhdmVkTGFzdFN0YWNrVG9wKHN0YWNrKCkub3JpZ2luKCkpCisgICAgLCBtX3Nh
dmVkTGFzdFN0YWNrVG9wKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkub3JpZ2luKCkpCiB7CiAg
ICAgQXRvbWljU3RyaW5nVGFibGU6OmNyZWF0ZSgqdGhpcyk7CiAgICAgbV9jdXJyZW50QXRvbWlj
U3RyaW5nVGFibGUgPSBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERh
dGEuaAppbmRleCBhNDNhNmViMGNkNmZjMzkyMjUyYmI3NTQ1OWU0NTIxM2Q1NjFkNmM3Li44NGUz
YzMwMzYyY2U3ZGIwNzcxMDYzMjRmMzFmOTE3ZGJjZmI2YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKKysrIGIvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0
YS5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CiAKQEAgLTU3LDE2ICs1Niw2IEBAIGNsYXNzIFdURlRocmVhZERhdGEgewogICAgICAgICByZXR1
cm4gb2xkQXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQogCi0gICAgY29uc3QgU3RhY2tCb3VuZHMm
IHN0YWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gYWx3YXlzIGdldCBhIGZyZXNo
IFN0YWNrQm91bmRzIGZyb20gdGhlIE9TIGR1ZSB0byBob3cgZmliZXJzIHdvcmsuCi0gICAgICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNDExCi0j
aWYgT1MoV0lORE9XUykKLSAgICAgICAgbV9zdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjpjdXJy
ZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gbV9zdGFja0Jv
dW5kczsKLSAgICB9Ci0KICNpZiBFTkFCTEUoU1RBQ0tfU1RBVFMpCiAgICAgU3RhY2tTdGF0czo6
UGVyVGhyZWFkU3RhdHMmIHN0YWNrU3RhdHMoKQogICAgIHsKQEAgLTEwMSw3ICs5MCw2IEBAIGNs
YXNzIFdURlRocmVhZERhdGEgewogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2RlZmF1bHRBdG9t
aWNTdHJpbmdUYWJsZTsKICAgICBBdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IgbV9hdG9taWNT
dHJpbmdUYWJsZURlc3RydWN0b3I7CiAKLSAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRzOwog
I2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBt
X3N0YWNrU3RhdHM7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314555</attachid>
            <date>2017-07-04 02:51:32 -0700</date>
            <delta_ts>2017-07-15 07:46:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170704185131.patch</filename>
            <type>text/plain</type>
            <size>29266</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZTFhMThiZTZiYzY2NmUyODMzNzNiZTFlZDVkMWNlNGViMGNjZThhLi5hMGMwZWE2OTM5ZTllZmRl
MmQ2ZGY1Nzc3ZDZlZjM1ODU3N2I3Y2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxNy0wNy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWQn
cyBzdGFjay4KKyAgICAgICAgQ3VycmVudGx5LCBzdGFjayBib3VuZHMgYXJlIHN0b3JlZCBpbiBX
VEZUaHJlYWREYXRhIHdoaWNoIGlzIGxvY2F0ZWQKKyAgICAgICAgaW4gVExTLiBUaHVzLCBvbmx5
IHRoZSB0aHJlYWQgaXRzZWxmIGNhbiBhY2Nlc3MgaXRzIG93biBXVEZUaHJlYWREYXRhLgorICAg
ICAgICBXZSB3b3JrYXJvdW5kIHRoaXMgc2l0dWF0aW9uIGJ5IGhvbGRpbmcgU3RhY2tCb3VuZHMg
aW4gTWFjaGluZVRocmVhZCBpbiBKU0MsCisgICAgICAgIGJ1dCBTdGFja0JvdW5kcyBzaG91bGQg
YmUgcHV0IGluIFdURjo6VGhyZWFkIGluc3RlYWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3Zl
cyBTdGFja0JvdW5kcyBmcm9tIFdURlRocmVhZERhdGEgdG8gV1RGOjpUaHJlYWQuIFN0YWNrQm91
bmRzCisgICAgICAgIGluZm9ybWF0aW9uIGlzIHRpZ2h0bHkgY291cGxlZCB3aXRoIFRocmVhZC4g
VGh1cyBwdXR0aW5nIGl0IGluIFdURjo6VGhyZWFkCisgICAgICAgIGlzIG5hdHVyYWwgY2hvaWNl
LgorCisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwOgorICAgICAgICAoSlND
OjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6TWFjaGluZVRocmVhZCk6CisgICAgICAg
IChKU0M6Ok1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpjYXB0dXJlU3RhY2spOgorICAg
ICAgICAqIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmg6CisgICAgICAgIChKU0M6Ok1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkOjpzdGFja0Jhc2UpOgorICAgICAgICAoSlNDOjpNYWNoaW5l
VGhyZWFkczo6TWFjaGluZVRocmVhZDo6c3RhY2tFbmQpOgorICAgICAgICAqIHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcp
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAg
ICAgICAoSlNDOjpWTTo6dXBkYXRlU3RhY2tMaW1pdHMpOgorICAgICAgICAoSlNDOjpWTTo6Y29t
bWl0dGVkU3RhY2tCeXRlQ291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAg
KEpTQzo6Vk06OmlzU2FmZVRvUmVjdXJzZSk6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2Nv
cGUuY3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisgICAg
ICAgICogcnVudGltZS9WTUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Vk06OmVuc3VyZVN0YWNr
Q2FwYWNpdHlGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAgICAgICog
eWFyci9ZYXJyUGF0dGVybi5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJQYXR0ZXJuQ29u
c3RydWN0b3I6OmlzU2FmZVRvUmVjdXJzZSk6CisKIDIwMTctMDctMDQgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbnVwIHNvbWUgU3RyaW5nQnVp
bGRlciB1c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKaW5kZXggOTlkNTQwMDRmNWQ4Y2Q1ODM5NWNlMmJlNTg1YzA5ZmUwYzBjZDMwMC4u
NjM1MjkyMjhhMjNmNmJjM2ZkNmYxZjI2ZjIwYmMxNzU3MWFhNmExOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
MiBAQAorMjAxNy0wNy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4K
KworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFjayBib3Vu
ZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM5
NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBt
b3ZlIFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0byBXVEY6OlRocmVhZC4KKyAgICAg
ICAgT25lIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHdlIHNob3VsZCBtYWtlIHZhbGlkIFN0YWNr
Qm91bmRzCisgICAgICAgIHZpc2libGUgdG8gVGhyZWFkOjpjcmVhdGUoKSBjYWxsZXIuIFdoZW4g
dGhlIGNhbGxlciBnZXQKKyAgICAgICAgV1RGOjpUaHJlYWQgZnJvbSBUaHJlYWQ6OmNyZWF0ZSgp
LCB0aGlzIFdURjo6VGhyZWFkIHNob3VsZAorICAgICAgICBoYXZlIGEgdmFsaWQgU3RhY2tCb3Vu
ZHMuIEJ1dCBTdGFja0JvdW5kcyBpbmZvcm1hdGlvbiBjYW4gYmUKKyAgICAgICAgcmV0cml2ZWQg
b25seSBpbiB0aGUgV1RGOjpUaHJlYWQncyB0aHJlYWQgaXRzZWxmLgorCisgICAgICAgIFdlIGFs
c28gY2xlYW4gdXAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nLiBTdHJpbmdJbXBsOjplbXB0eSgp
CisgICAgICAgIGlzIG5vdyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIGJ5IHVzaW5nIGNvbnN0ZXhw
ciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgVGh1cyB3ZSBkbyBub3QgbmVlZCB0byBjYWxsIFN0cmlu
Z0ltcGw6OmVtcHR5KCkgZXhwbGljaXRseSBoZXJlLgorICAgICAgICBBbmQgV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKCkgZG9lcyBub3QgaGF2ZSBhbnkgbWFpbiB0aHJlYWQKKyAgICAgICAgYWZm
aW5pdHkgcmlnaHQgbm93IGluIGFsbCB0aGUgcGxhdGZvcm1zLiBTbyB3ZSBmaXggdGhlIGNvbW1l
bnQKKyAgICAgICAgaW4gVGhyZWFkaW5nLmguIFRoZW4sIG5vdywgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCkgaXMgY2FsbGVkCisgICAgICAgIGluIFVJIHRocmVhZCB3aGVuIHVzaW5nIFdlYiB0
aHJlYWQgaW4gaU9TLgorCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChX
VEY6OlN0YWNrQm91bmRzOjplbXB0eUJvdW5kcyk6CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRz
OjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3RmL1N0YWNrU3RhdHMuY3BwOgorICAgICAgICAo
V1RGOjpTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0czo6UGVyVGhyZWFkU3RhdHMpOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjp0aHJlYWRFbnRyeVBvaW50KToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1
cnJlbnRNYXlCZU51bGwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
Lmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6c3RhY2spOgorICAgICAgICAqIHd0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRU
aHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50
KToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVh
dGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKTog
RGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nV2luLmNwcDoKKyAgICAgICAgKFdURjo6
VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwpOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
LmNwcDoKKyAgICAgICAgKFdURjo6V1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSk6CisgICAg
ICAgICogd3RmL1dURlRocmVhZERhdGEuaDoKKyAgICAgICAgKFdURjo6V1RGVGhyZWFkRGF0YTo6
c3RhY2spOiBEZWxldGVkLgorCiAyMDE3LTA3LTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgogCiAgICAgICAgIExheW91dFRlc3Qgd29ya2Vycy9ib21iLmh0bWwgaXMgYSBDcmFz
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDQ2YzYyODdmYmYzYmI0MGMwYTc1M2M5ZDU3YjliOWU3YjM5MjYyZjYu
LmE5ZmVhNDVjMTAyZTk3NDY3NWQ3NGE1Y2E4YmEyODAzNDc1ZTJmMDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOCBAQAorMjAxNy0wNy0wNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBz
dGFjayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXaGVuIGNyZWF0aW5nIFdlYlRocmVhZCwgd2UgZmlyc3QgYWxsb2NhdGUgV2ViQ29yZTo6
VGhyZWFkR2xvYmFsRGF0YSBpbiBVSSB0aHJlYWQKKyAgICAgICAgYW5kIHNoYXJlIGl0IHdpdGgg
V2ViVGhyZWFkLgorICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IFdlYkNvcmU6OlRocmVhZEds
b2JhbERhdGEgaGFzIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuCisgICAgICAgIEl0
IGFsbG9jYXRlcyBBdG9taWNTdHJpbmcsIHdoaWNoIHJlcXVpcmVzIFdURlRocmVhZERhdGEuCisK
KyAgICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gsIGl0IHdhcyBPSyBiZWNhdXNlIFdURlRocmVhZERh
dGEgZG9lcyBub3QgdG91Y2ggdGhyZWFkaW5nIHJlbGF0ZWQKKyAgICAgICAgdGhpbmdzIGV4Y2Vw
dCBmb3IgVGhyZWFkU3BlY2lmaWM8Pi4gSG93ZXZlciwgYWZ0ZXIgdGhpcyBwYXRjaCwgaXQgdG91
Y2hlcworICAgICAgICBXVEY6OlRocmVhZDo6Y3VycmVudCgpIHdoaWNoIHJlcXVpcmVzIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIGNhbGwg
V1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgYmVmb3JlIGFsbG9jYXRpbmcgV2ViQ29yZTo6VGhy
ZWFkR2xvYmFsRGF0YS4KKyAgICAgICAgQW5kIHdlIGFsc28gY2FsbCBBdG9taWNTdHJpbmc6Omlu
aXQoKSBiZWZvcmUgY2FsbGluZyBXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhIHNpbmNlCisgICAg
ICAgIFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGEgYWxsb2NhdGVzIEF0b21pY1N0cmluZy4KKwor
ICAgICAgICBUaGlzIGZpeGVzIGNyYXNoZXMgaW4gdGhlIGlPUyB3ZWIgdGhyZWFkaW5nIGVudmly
b25tZW50IChVSVdlYlZpZXcpLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL3dhay9XZWJDb3Jl
VGhyZWFkLm1tOgorICAgICAgICAoU3RhcnRXZWJUaHJlYWQpOgorCiAyMDE3LTA3LTA0ICBKb3Nl
cGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW51cCBzb21l
IFN0cmluZ0J1aWxkZXIgdXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmNwcAppbmRleCA2NzYzZWEzYWIxYzJmNDY3OWMzNzcxYjE5MTk3M2M1
MzE2YmY1ZjQwLi44YjliYjY4NjQ1Y2NkNGQ4YjAzMWI2Y2NhZGQyODA1OTNiODk3MGQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAK
QEAgLTIzOSw5ICsyMzksNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9tQ3VycmVu
dFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogTWFjaGluZVRocmVh
ZHM6Ok1hY2hpbmVUaHJlYWQ6Ok1hY2hpbmVUaHJlYWQoKQogICAgIDogbV90aHJlYWQoV1RGOjpU
aHJlYWQ6OmN1cnJlbnQoKSkKIHsKLSAgICBhdXRvIHN0YWNrQm91bmRzID0gd3RmVGhyZWFkRGF0
YSgpLnN0YWNrKCk7Ci0gICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4oKTsKLSAg
ICBtX3N0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKIHNpemVfdCBNYWNoaW5lVGhy
ZWFkczo6TWFjaGluZVRocmVhZDo6Z2V0UmVnaXN0ZXJzKE1hY2hpbmVUaHJlYWQ6OlJlZ2lzdGVy
cyYgcmVnaXN0ZXJzKQpAQCAtMzAyLDE1ICsyOTksMTUgQEAgc3RhdGljIGlubGluZSBpbnQgb3NS
ZWRab25lQWRqdXN0bWVudCgpCiAKIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNoaW5lVGhy
ZWFkczo6TWFjaGluZVRocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQogewotICAg
IGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tCYXNlKTsK
KyAgICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFja0Jhc2Uo
KSk7CiAgICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNr
VG9wKSkpOwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5kV2l0aFJl
ZFpvbmUgPSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oZW5kV2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZW5kV2l0
aFJlZFpvbmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQpCi0gICAg
ICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tF
bmQpOworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKCkpCisgICAgICAgIGVuZFdp
dGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrRW5kKCkpOwogCiAg
ICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggYjYyZWI0MzEzMTJjOGI4
NTJkNTMyOGM5NzZhNjIyNWI5ZTc5YWM0My4uYzE1MTBkNjI1MWMwYjM0YWY5YTRlYjk1MWE1MWU5
NmVhOTRkNWMyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0
YWNrTWFya2VyLmgKQEAgLTcyLDEyICs3MiwxMCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAg
ICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCogc3RhY2tU
b3ApOwogCiAgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkLT5pZCgpOyB9Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2tCYXNlOyB9Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFja0VuZDsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBjb25zdCB7
IHJldHVybiBtX3RocmVhZC0+c3RhY2soKS5vcmlnaW4oKTsgfQorICAgICAgICB2b2lkKiBzdGFj
a0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5zdGFjaygpLmVuZCgpOyB9CiAKICAgICAg
ICAgUmVmPFdURjo6VGhyZWFkPiBtX3RocmVhZDsKLSAgICAgICAgdm9pZCogbV9zdGFja0Jhc2U7
Ci0gICAgICAgIHZvaWQqIG1fc3RhY2tFbmQ7CiAgICAgICAgIE1hY2hpbmVUaHJlYWQqIG1fbmV4
dCB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjaGluZVRocmVhZCogbV9wcmV2IHsgbnVsbHB0ciB9
OwogICAgIH07CkBAIC0xMDQsNyArMTAyLDcgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogI2Rl
ZmluZSBERUNMQVJFX0FORF9DT01QVVRFX0NVUlJFTlRfVEhSRUFEX1NUQVRFKHN0YXRlTmFtZSkg
XAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSBzdGF0ZU5hbWU7IFwKICAgICBzdGF0ZU5hbWUuc3Rh
Y2tUb3AgPSAmc3RhdGVOYW1lOyBcCi0gICAgc3RhdGVOYW1lLnN0YWNrT3JpZ2luID0gd3RmVGhy
ZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCk7IFwKKyAgICBzdGF0ZU5hbWUuc3RhY2tPcmlnaW4g
PSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpOyBcCiAgICAgQUxMT0NBVEVfQU5E
X0dFVF9SRUdJU1RFUl9TVEFURShzdGF0ZU5hbWUgIyMgX3JlZ2lzdGVyU3RhdGUpOyBcCiAgICAg
c3RhdGVOYW1lLnJlZ2lzdGVyU3RhdGUgPSAmc3RhdGVOYW1lICMjIF9yZWdpc3RlclN0YXRlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKaW5kZXggOWVmMTQzYWQ0OGU3MWQyOGIxN2JhNDE2ZmEzYjE0YmNiZGI3NDVhYS4u
MmU4MTQyNzBiOWJhMWYzMmIzOWNjNmQ2ZTQzNDhhZjliNWE3MjAzZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAg
LTc1LDggKzc1LDcgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICAgICAgRGlzYWxs
b3dWTVJlZW50cnk6OmluaXRpYWxpemUoKTsKICNlbmRpZgogICAgICAgICBpbml0aWFsaXplU3Vw
ZXJTYW1wbGVyKCk7Ci0gICAgICAgIFdURlRocmVhZERhdGEmIHRocmVhZERhdGEgPSB3dGZUaHJl
YWREYXRhKCk7Ci0gICAgICAgIHRocmVhZERhdGEuc2V0U2F2ZWRMYXN0U3RhY2tUb3AodGhyZWFk
RGF0YS5zdGFjaygpLm9yaWdpbigpKTsKKyAgICAgICAgd3RmVGhyZWFkRGF0YSgpLnNldFNhdmVk
TGFzdFN0YWNrVG9wKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkub3JpZ2luKCkpOwogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBXYXNtOjpUaHVua3M6OmluaXRpYWxpemUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA0ODcyN2E2NjJlZTk2NTZhYmNh
ODVjMDVjMzU2YTZmOTQ2NDI1ZDNlLi42ZTY4NjNmYTAzOTJmY2E1ZTkxNGE4MThjMGJlMDZkM2I1
MTlkMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yMTEsNyArMjEx
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9z
aGFkb3dDaGlja2VuKHN0ZDo6bWFrZV91bmlxdWU8U2hhZG93Q2hpY2tlbj4oKSkKIHsKICAgICBp
bnRlcnByZXRlciA9IG5ldyBJbnRlcnByZXRlcigqdGhpcyk7Ci0gICAgU3RhY2tCb3VuZHMgc3Rh
Y2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICBTdGFja0JvdW5kcyBzdGFjayA9IFRo
cmVhZDo6Y3VycmVudCgpLnN0YWNrKCk7CiAgICAgdXBkYXRlU29mdFJlc2VydmVkWm9uZVNpemUo
T3B0aW9uczo6c29mdFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAgc2V0TGFzdFN0YWNrVG9wKHN0
YWNrLm9yaWdpbigpKTsKIApAQCAtNjcxLDcgKzY3MSw3IEBAIGlubGluZSB2b2lkIFZNOjp1cGRh
dGVTdGFja0xpbWl0cygpCiAgICAgdm9pZCogbGFzdFNvZnRTdGFja0xpbWl0ID0gbV9zb2Z0U3Rh
Y2tMaW1pdDsKICNlbmRpZgogCi0gICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gd3RmVGhy
ZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrID0gVGhyZWFk
OjpjdXJyZW50KCkuc3RhY2soKTsKICAgICBzaXplX3QgcmVzZXJ2ZWRab25lU2l6ZSA9IE9wdGlv
bnM6OnJlc2VydmVkWm9uZVNpemUoKTsKICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGVu
c3VyZWQgdGhhdCBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgPj0gbWluaW11bVJlc2VydmVa
b25lU2l6ZSBhdAogICAgIC8vIG9wdGlvbnMgaW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIHRoZSBv
cHRpb24gdmFsdWUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2hhbmdlZCB0aGVyZWFmdGVyLgpAQCAt
ODg1LDkgKzg4NSw5IEBAIHNpemVfdCBWTTo6Y29tbWl0dGVkU3RhY2tCeXRlQ291bnQoKQogI2lm
IEVOQUJMRShKSVQpCiAgICAgLy8gV2hlbiB1c2luZyB0aGUgQyBzdGFjaywgd2UgZG9uJ3Qga25v
dyBob3cgbWFueSBzdGFjayBwYWdlcyBhcmUgYWN0dWFsbHkKICAgICAvLyBjb21taXR0ZWQuIFNv
LCB3ZSB1c2UgdGhlIGN1cnJlbnQgc3RhY2sgdXNhZ2UgYXMgYW4gZXN0aW1hdGUuCi0gICAgQVNT
RVJUKHd0ZlRocmVhZERhdGEoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIEFT
U0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAg
IGludDhfdCogY3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJmN1cnJlbnQpOwot
ICAgIGludDhfdCogaGlnaCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4od3RmVGhyZWFkRGF0
YSgpLnN0YWNrKCkub3JpZ2luKCkpOworICAgIGludDhfdCogaGlnaCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50OF90Kj4oVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5vcmlnaW4oKSk7CiAgICAgcmV0
dXJuIGhpZ2ggLSBjdXJyZW50OwogI2Vsc2UKICAgICByZXR1cm4gQ0xvb3BTdGFjazo6Y29tbWl0
dGVkQnl0ZUNvdW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBkYjVhZjM1
MWIyYjBiOTQxNjQ3NWYwNTdhZmRkOGNiMTVhYTM3Y2JiLi4yZTc1OTkxMGNjMjFiMDVlYjE0YzNm
MWQ5Mjk2N2JhMzFkMmU4NDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTY4
OSw3ICs2ODksNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4s
IHB1YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogCiAgICAgYm9vbCBpc1NhZmVUb1Jl
Y3Vyc2Uodm9pZCogc3RhY2tMaW1pdCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVCh3dGZU
aHJlYWREYXRhKCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKKyAgICAgICAgQVNTRVJU
KFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgICAg
IHZvaWQqIGN1cnIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigmY3Vycik7CiAgICAgICAgIHJl
dHVybiBjdXJyID49IHN0YWNrTGltaXQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKaW5kZXggYzJkOWJkYTE4OGM0NzcyMDI1NmQ0MDMw
NjQ4Mjg2ZWM0NWUzMWM1OS4uZDExYThmZmE2NmRiNWZlMzBmYjlmNDlmNDUzMTM4MzZiNzhkMjM1
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3Bl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3Bw
CkBAIC00MSw3ICs0MSw3IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdCkKIHsKICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5Ojppc0luRWZmZWN0T25DdXJy
ZW50VGhyZWFkKCkpOwotICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5pc0dyb3dp
bmdEb3dud2FyZCgpKTsKKyAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dy
b3dpbmdEb3dud2FyZCgpKTsKICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsKICAgICAgICAgdm0u
ZW50cnlTY29wZSA9IHRoaXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1Jbmxp
bmVzLmgKaW5kZXggNWE3NzYxOTUwZTBjZjZiMjg4NTYwMTkzMWFmNmI3MWEzYmUwMmQ3OC4uYmMw
YzI1ZjkxZTJjMTc2MWEyMWNhMjBlYjA4ODJhMDkzYTIxNTE5MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1JbmxpbmVzLmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBib29sIFZNOjplbnN1cmVTdGFja0NhcGFjaXR5Rm9yKFJlZ2lzdGVyKiBuZXdUb3BPZlN0
YWNrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgQVNTRVJUKHd0ZlRocmVhZERhdGEoKS5zdGFj
aygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOworICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5z
dGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIHJldHVybiBuZXdUb3BPZlN0YWNrID49
IG1fc29mdFN0YWNrTGltaXQ7CiAjZWxzZQogICAgIHJldHVybiBlbnN1cmVTdGFja0NhcGFjaXR5
Rm9yQ0xvb3AobmV3VG9wT2ZTdGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuY3BwCmluZGV4IDI0Nzk5MTgzMTNiNGQ4OGRkODE5ODcyNWYyZGUyZGY0Zjc3ZWQ3NDAu
LmRlYWE0NDliNmJhMjZhY2NjZWRjMTI3MmUzMjU4OTJkNzViODc4ZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC0yNjcsMjUgKzI2Nyw3IEBAIGNsYXNz
IFZNVHJhcHM6OlNpZ25hbFNlbmRlciBmaW5hbCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICBUaHJlYWQmIHRo
cmVhZCA9ICpvd25lclRocmVhZC0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgU3RhY2tCb3VuZHMg
c3RhY2tCb3VuZHMgPSBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKTsKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHVzZSB0aGUgbWFj
aGluZSB0aHJlYWRzIGJlY2F1c2UgaXQgaXMgdGhlIG9ubHkgbm9uLVRMUyBzb3VyY2UKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBzdGFjayBib3VuZHMgb2YgdGhpcyB0aHJlYWQuIFdl
IHNob3VsZCBrZWVwIGluIG9uIHRoZSBXVEY6OlRocmVhZCBpbnN0ZWFkLgotICAgICAgICAgICAg
ICAgICAgICAvLyBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzM5NzUKLSAgICAgICAgICAgICAgICAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRz
ID0gdm0uaGVhcC5tYWNoaW5lVGhyZWFkcygpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIG1h
Y2hpbmVUaHJlYWRzTG9jayA9IHRyeUhvbGRMb2NrKG1hY2hpbmVUaHJlYWRzLmdldExvY2soKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbWFjaGluZVRocmVhZHNMb2NrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUcnkgYWdhaW4gbGF0ZXIuCi0KLSAgICAgICAgICAg
ICAgICAgICAgYXV0byYgdGhyZWFkTGlzdCA9IG1hY2hpbmVUaHJlYWRzLnRocmVhZHNMaXN0SGVh
ZChtYWNoaW5lVGhyZWFkc0xvY2spOwotICAgICAgICAgICAgICAgICAgICBmb3IgKE1hY2hpbmVU
aHJlYWRzOjpNYWNoaW5lVGhyZWFkKiBtYWNoaW5lVGhyZWFkID0gdGhyZWFkTGlzdC5oZWFkKCk7
IG1hY2hpbmVUaHJlYWQ7IG1hY2hpbmVUaHJlYWQgPSBtYWNoaW5lVGhyZWFkLT5uZXh0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWNoaW5lVGhyZWFkLT5tX3RocmVhZC5nZXQo
KSA9PSB0aHJlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tCb3VuZHMgPSBT
dGFja0JvdW5kcyhtYWNoaW5lVGhyZWFkLT5zdGFja0Jhc2UoKSwgbWFjaGluZVRocmVhZC0+c3Rh
Y2tFbmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXN0YWNrQm91bmRzLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdm0udHJhcHMoKS50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNv
bnRleHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgICAgICB2bS50cmFwcygpLnRyeUluc3Rh
bGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgdGhyZWFkLnN0YWNrKCkpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyclBhdHRlcm4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRlcm4u
Y3BwCmluZGV4IDFjMmRkNzVkY2I0NGNhMjhiOWE3MTA0ODljYjBhNGU3MThmNGRhZTIuLjVmMjcz
MDZhNDU2MTJmYzUyZTVkNjM1N2JkODM4NDk0MDE1NTYwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0ZXJuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUveWFyci9ZYXJyUGF0dGVybi5jcHAKQEAgLTg4MCw3ICs4ODAsNyBAQCBjbGFzcyBZYXJy
UGF0dGVybkNvbnN0cnVjdG9yIHsKICAgICB7CiAgICAgICAgIGlmICghbV9zdGFja0xpbWl0KQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIEFTU0VSVCh3dGZUaHJlYWREYXRhKCku
c3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKKyAgICAgICAgQVNTRVJUKFRocmVhZDo6Y3Vy
cmVudCgpLnN0YWNrKCkuaXNHcm93aW5nRG93bndhcmQoKSk7CiAgICAgICAgIGludDhfdCogY3Vy
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJmN1cnIpOwogICAgICAgICBpbnQ4X3QqIGxp
bWl0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihtX3N0YWNrTGltaXQpOwogICAgICAgICBy
ZXR1cm4gY3VyciA+PSBsaW1pdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91
bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IGNkNjJjMTQ4YTZjN2Vm
Yzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYuLjNjOTExZWYzNmVjNjk2MmM5N2Y5ZmJkNDMzMzM5
MzNlZjZkOGVhYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysr
IGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBT
dGFja0JvdW5kcyB7CiAgICAgY29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1bHRBdmFpbGFiaWxp
dHlEZWx0YSA9IDY0ICogMTAyNDsKIAogcHVibGljOgotICAgIHN0YXRpYyBTdGFja0JvdW5kcyBl
bXB0eUJvdW5kcygpIHsgcmV0dXJuIFN0YWNrQm91bmRzKCk7IH0KKyAgICBzdGF0aWMgY29uc3Rl
eHByIFN0YWNrQm91bmRzIGVtcHR5Qm91bmRzKCkgeyByZXR1cm4gU3RhY2tCb3VuZHMoKTsgfQog
CiAgICAgc3RhdGljIFN0YWNrQm91bmRzIGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpCiAgICAg
ewpAQCAtMTI3LDkgKzEyNyw5IEBAIGNsYXNzIFN0YWNrQm91bmRzIHsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgU3RhY2tCb3VuZHMoKQotICAgICAgICA6IG1fb3JpZ2luKDApCi0gICAgICAgICwg
bV9ib3VuZCgwKQorICAgIGNvbnN0ZXhwciBTdGFja0JvdW5kcygpCisgICAgICAgIDogbV9vcmln
aW4obnVsbHB0cikKKyAgICAgICAgLCBtX2JvdW5kKG51bGxwdHIpCiAgICAgewogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tTdGF0cy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9TdGFja1N0YXRzLmNwcAppbmRleCAwNjRmMmYwNTJhYWYzOGI5ZjgwYTZkZDQxMTMyZTY1NDZl
NDU3ZjQyLi41NjEzMGIwNGVhMjU0OGUxMGQwOGE5ZDAyOTJjYjAzYTBiMWJjODUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja1N0YXRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
dGFja1N0YXRzLmNwcApAQCAtNTksNyArNTksNyBAQCBpbnQgU3RhY2tTdGF0czo6c19tYXhMYXlv
dXRSZWVudHJ5RGVwdGggPSAwOwogCiBTdGFja1N0YXRzOjpQZXJUaHJlYWRTdGF0czo6UGVyVGhy
ZWFkU3RhdHMoKQogewotICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IHd0ZlRocmVhZERh
dGEoKS5zdGFjaygpOworICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjayA9IFRocmVhZDo6Y3Vy
cmVudCgpLnN0YWNrKCk7CiAgICAgbV9yZWVudHJ5RGVwdGggPSAwOwogICAgIG1fc3RhY2tTdGFy
dCA9IChjaGFyKilzdGFjay5vcmlnaW4oKTsKICAgICBtX2N1cnJlbnRDaGVja1BvaW50ID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGRkYzI4YzJhNTRiMzJhMWE2NjRjYTNiMDk3ZjNhYmUyZjdj
ODZmOTcuLjliZjI5MGNmZjgwZjdkMmVhNGQ5NzUxYWQyZGYzMGIzNjk0NjA3YWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcApAQCAtNDYsMTIgKzQ2LDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitlbnVt
IGNsYXNzIFN0YWdlIHsKKyAgICBTdGFydCwgSW5pdGlhbGl6ZWQKK307CisKIHN0cnVjdCBOZXdU
aHJlYWRDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKICAg
ICBjb25zdCBjaGFyKiBuYW1lOwogICAgIEZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludDsKLSAg
ICBNdXRleCBjcmVhdGlvbk11dGV4OworICAgIFN0YWdlIHN0YWdlOworICAgIE11dGV4IG11dGV4
OworICAgIFRocmVhZENvbmRpdGlvbiBjb25kaXRpb247CiB9OwogCiBjb25zdCBjaGFyKiBUaHJl
YWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKQEAgLTg0LDMx
ICs4OCw0NiBAQCBjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3Qg
Y2hhciogdGhyZWFkTmFtZSkKIHN0YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29u
dGV4dERhdGEpCiB7CiAgICAgTmV3VGhyZWFkQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0
PE5ld1RocmVhZENvbnRleHQqPihjb250ZXh0RGF0YSk7Ci0KLSAgICAvLyBCbG9jayB1bnRpbCBv
dXIgY3JlYXRpbmcgdGhyZWFkIGhhcyBjb21wbGV0ZWQgYW55IGV4dHJhIHNldHVwIHdvcmssIGlu
Y2x1ZGluZwotICAgIC8vIGVzdGFibGlzaGluZyBUaHJlYWRJZGVudGlmaWVyLgorICAgIEZ1bmN0
aW9uPHZvaWQoKT4gZW50cnlQb2ludDsKICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihjb250ZXh0LT5jcmVhdGlvbk11dGV4KTsKLSAgICB9Ci0KLSAgICBUaHJlYWQ6OmluaXRpYWxp
emVDdXJyZW50VGhyZWFkSW50ZXJuYWwoY29udGV4dC0+bmFtZSk7CisgICAgICAgIC8vIEJsb2Nr
IHVudGlsIG91ciBjcmVhdGluZyB0aHJlYWQgaGFzIGNvbXBsZXRlZCBhbnkgZXh0cmEgc2V0dXAg
d29yaywgaW5jbHVkaW5nIGVzdGFibGlzaGluZyBUaHJlYWRJZGVudGlmaWVyLgorICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+bXV0ZXgpOwogCi0gICAgYXV0byBlbnRyeVBvaW50
ID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKKyAgICAgICAgVGhyZWFkOjppbml0aWFs
aXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5hbWUpOworICAgICAgICBlbnRyeVBv
aW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRyeVBvaW50KTsKIAotICAgIC8vIERlbGV0ZSB0aGUg
Y29udGV4dCBiZWZvcmUgc3RhcnRpbmcgdGhlIHRocmVhZC4KLSAgICBkZWxldGUgY29udGV4dDsK
KyAgICAgICAgLy8gQWNrIGNvbXBsZXRpb24gb2YgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGNyZWF0
aW5nIHRocmVhZC4KKyAgICAgICAgY29udGV4dC0+c3RhZ2UgPSBTdGFnZTo6SW5pdGlhbGl6ZWQ7
CisgICAgICAgIGNvbnRleHQtPmNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CiAKICAgICBlbnRy
eVBvaW50KCk7CiB9CiAKIFJlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIq
IG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4mJiBlbnRyeVBvaW50KQogewotICAgIE5ld1RocmVhZENv
bnRleHQqIGNvbnRleHQgPSBuZXcgTmV3VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50
cnlQb2ludCksIHsgfSB9OworICAgIE5ld1RocmVhZENvbnRleHQgY29udGV4dCB7IG5hbWUsIFdU
Rk1vdmUoZW50cnlQb2ludCksIFN0YWdlOjpTdGFydCwgeyB9LCB7IH0gfTsKIAotICAgIC8vIFBy
ZXZlbnQgdGhlIHRocmVhZCBib2R5IGZyb20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlz
aGVkIHRoZSB0aHJlYWQgaWRlbnRpZmllci4KLSAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4
dC0+Y3JlYXRpb25NdXRleCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQubXV0ZXgp
OworICAgIFJlZlB0cjxUaHJlYWQ+IHJlc3VsdCA9IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhy
ZWFkRW50cnlQb2ludCwgJmNvbnRleHQsIG5hbWUpOworICAgIC8vIEFmdGVyIGVzdGFibGlzaGlu
ZyBUaHJlYWQsIHJlbGVhc2UgdGhlIG11dGV4IGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGlu
aXRpYWxpemF0aW9uLgorICAgIHdoaWxlIChjb250ZXh0LnN0YWdlICE9IFN0YWdlOjpJbml0aWFs
aXplZCkKKyAgICAgICAgY29udGV4dC5jb25kaXRpb24ud2FpdChjb250ZXh0Lm11dGV4KTsKIAot
ICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRl
eHQsIG5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1RocmVhZCogVGhyZWFkOjpjdXJy
ZW50TWF5QmVOdWxsKCkKK3sKKyAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6
OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemUoKQor
eworICAgIG1fc3RhY2sgPSBTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzKCk7
CiB9CiAKIHZvaWQgVGhyZWFkOjpkaWRFeGl0KCkKQEAgLTE2Nyw5ICsxODYsNiBAQCB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXksIFtd
IHsKICAgICAgICAgV1RGOjpkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwogICAgICAg
ICBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVPbmNlKCk7Ci0gICAgICAgIC8vIFN0cmluZ0ltcGw6
OmVtcHR5KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFk
c2FmZSBmYXNoaW9uLAotICAgICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6
ZWQgZnJvbSBoZXJlLgotICAgICAgICBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgICAgICBpbml0
aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKTsK
ICAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGI3NGYzODFlNWU2
NzY0MGIwZWFjMTM2ZmYyZGI0MTYzYWFhY2ZmZjYuLjg4ODFjY2VlOGRhNDBlM2QwZjQyYWI4MDY4
NDgzMDA5ODc2NjlhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiAjaWYgVVNFKFBUSFJFQURTKSAm
JiAhT1MoREFSV0lOKQpAQCAtNjcsNyArNjgsNyBAQCBjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmpl
Y3QuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwor
ICAgIHN0YXRpYyBUaHJlYWQqIGN1cnJlbnRNYXlCZU51bGwoKTsKIAogICAgIC8vIFJldHVybnMg
VGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkg
Y2FyZXMgYWJvdXQgaWRlbnRpdHkKICAgICAvLyBvZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVz
ZXJzIHNob3VsZCBrbm93IHRoYXQgaG9sZGluZyB0aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBu
b3QgZW5zdXJlCkBAIC0xMDgsNiArMTA5LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIC8vIENhbGxlZCBpbiB0aGUgdGhyZWFkIGR1
cmluZyBpbml0aWFsaXphdGlvbi4KICAgICAvLyBIZWxwZnVsIGZvciBwbGF0Zm9ybXMgd2hlcmUg
dGhlIHRocmVhZCBuYW1lIG11c3QgYmUgc2V0IGZyb20gd2l0aGluIHRoZSB0aHJlYWQuCiAgICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChjb25zdCBjaGFyKiB0
aHJlYWROYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5J
Zk5vbldURkNyZWF0ZWQoKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CiAKQEAgLTEyNSw2ICsxMjcsMTEgQEAgY2xhc3MgVGhyZWFk
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogCiAgICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CiAKKyAgICBjb25zdCBTdGFja0JvdW5k
cyYgc3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2s7CisgICAgfQor
CiAjaWYgT1MoREFSV0lOKQogICAgIG1hY2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBt
X3BsYXRmb3JtVGhyZWFkOyB9CiAjZW5kaWYKQEAgLTE0MCw2ICsxNDcsNyBAQCBjbGFzcyBUaHJl
YWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAjZWxzZQogICAgIHZv
aWQgZXN0YWJsaXNoKEhBTkRMRSwgVGhyZWFkSWRlbnRpZmllcik7CiAjZW5kaWYKKyAgICB2b2lk
IGluaXRpYWxpemUoKTsKIAogI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKICAgICBz
dGF0aWMgdm9pZCBzaWduYWxIYW5kbGVyU3VzcGVuZFJlc3VtZShpbnQsIHNpZ2luZm9fdCosIHZv
aWQqIHVjb250ZXh0KTsKQEAgLTE3MSw2ICsxNzksNyBAQCBjbGFzcyBUaHJlYWQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAgICAgc3RkOjptdXRleCBtX211dGV4Owog
ICAgIFRocmVhZElkZW50aWZpZXIgbV9pZCB7IDAgfTsKICAgICBKb2luYWJsZVN0YXRlIG1fam9p
bmFibGVTdGF0ZSB7IEpvaW5hYmxlIH07CisgICAgU3RhY2tCb3VuZHMgbV9zdGFjayB7IFN0YWNr
Qm91bmRzOjplbXB0eUJvdW5kcygpIH07CiAgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9Owog
I2lmIFVTRShQVEhSRUFEUykKICAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CkBAIC0xOTAsOSArMTk5
LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4g
ewogI2VuZGlmCiB9OwogCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gdGhl
IG1haW4gdGhyZWFkLiBJdCBpcyBzYWZlIHRvIGNhbGwgaXQgcmVwZWF0ZWRseS4KLS8vIERhcndp
biBpcyBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCBpcyBPSyB0byBjYWxsIGl0IGZyb20g
YW55IHRocmVhZCwgdGhlIG9ubHkKLS8vIHJlcXVpcmVtZW50IGlzIHRoYXQgdGhlIGNhbGxzIGFy
ZSBub3QgcmVlbnRyYW50LgorLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55
IHRocmVhZHMuCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7
CiAKIGlubGluZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGQ2YzBhMTc3YTY5MDhlMWRjMDEzOGEwNjhjMmExMTBh
OTQzMjVhMmYuLmFmOGU2N2U1NzM2MjMyMmI3OTUxNGM3NjZkNjRhMjgyNmUwZTQxNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKQEAgLTE4OCw4ICsxODgsOSBAQCB2b2lkIFRo
cmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCkKICNlbmRpZgogfQogCi1zdGF0aWMg
dm9pZCBpbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQordm9pZCBU
aHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpCiB7Cisg
ICAgVGhyZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6ZSgpOwogI2lmICFPUyhEQVJXSU4pCiAgICAg
c2lnc2V0X3QgbWFzazsKICAgICBzaWdlbXB0eXNldCgmbWFzayk7CkBAIC0yOTksMjUgKzMwMCwx
NyBAQCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsK
IH0KIAotVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKQotewotICAgIFRocmVhZEhv
bGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwotICAgIGlmIChkYXRhKQotICAg
ICAgICByZXR1cm4gJmRhdGEtPnRocmVhZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCiBU
aHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiB7CiAgICAgaWYgKFRocmVhZCogY3VycmVudCA9IGN1
cnJlbnRNYXlCZU51bGwoKSkKICAgICAgICAgcmV0dXJuICpjdXJyZW50OwogCiAgICAgLy8gTm90
IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hl
ZCB5ZXQuCi0gICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgp
KTsKKyAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKICAg
ICB0aHJlYWQtPmVzdGFibGlzaChwdGhyZWFkX3NlbGYoKSk7Ci0gICAgVGhyZWFkSG9sZGVyOjpp
bml0aWFsaXplKCp0aHJlYWQpOworICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSh0aHJlYWQu
Z2V0KCkpOwogICAgIGluaXRpYWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgp
OwotICAgIHJldHVybiAqdGhyZWFkOworICAgIHJldHVybiB0aHJlYWQuZ2V0KCk7CiB9CiAKIFRo
cmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAK
aW5kZXggYmQ2MTVmYjkyYzY0MmU1OGUwYmExYzU3NGNhYzRkNzY4MWU5ZjJmYi4uYjQ3NTJlZjAw
YWE4ZGNiNDM1NGMzYzk2Y2EwMmQ3NDhmOWQ2YmQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3Bw
CkBAIC0xMTYsNiArMTE2LDExIEBAIFRocmVhZDo6flRocmVhZCgpCiAgICAgICAgIENsb3NlSGFu
ZGxlKG1faGFuZGxlKTsKIH0KIAordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFk
RXZlbklmTm9uV1RGQ3JlYXRlZCgpCit7CisgICAgVGhyZWFkOjpjdXJyZW50KCkuaW5pdGlhbGl6
ZSgpOworfQorCiAvLyBNU19WQ19FWENFUFRJT04sIFRIUkVBRE5BTUVfSU5GTywgYW5kIHNldFRo
cmVhZE5hbWVJbnRlcm5hbCBhbGwgY29tZSBmcm9tIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29t
L2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweD4uCiBzdGF0aWMgY29uc3QgRFdPUkQgTVNfVkNf
RVhDRVBUSU9OID0gMHg0MDZEMTM4ODsKIApAQCAtMTQ1LDYgKzE1MCw3IEBAIHZvaWQgVGhyZWFk
Ojppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnN0IGNoYXIqIHN6VGhyZWFkTmFt
ZSkKICAgICB9IF9fZXhjZXB0IChFWENFUFRJT05fQ09OVElOVUVfRVhFQ1VUSU9OKSB7CiAgICAg
fQogI2VuZGlmCisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVk
KCk7CiB9CiAKIHZvaWQgVGhyZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKQpAQCAt
MjYxLDkgKzI2Nyw4IEBAIHNpemVfdCBUaHJlYWQ6OmdldFJlZ2lzdGVycyhQbGF0Zm9ybVJlZ2lz
dGVycyYgcmVnaXN0ZXJzKQogCiBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiB7Ci0gICAgVGhy
ZWFkSG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7Ci0gICAgaWYgKGRhdGEp
Ci0gICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50
ID0gY3VycmVudE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAv
LyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFi
bGlzaGVkIHlldC4KICAgICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVh
ZCgpKTsKQEAgLTI3NCw2ICsyNzksNyBAQCBUaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCiAKICAg
ICB0aHJlYWQtPmVzdGFibGlzaChoYW5kbGUsIGN1cnJlbnRJRCgpKTsKICAgICBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemUodGhyZWFkLmdldCgpLCBUaHJlYWQ6OmN1cnJlbnRJRCgpKTsKKyAgICBp
bml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKICAgICByZXR1cm4g
dGhyZWFkLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWRE
YXRhLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCmluZGV4IGNkZjNkY2Jh
NmI2MTIzZmFmODFhMmJlYWQwYTAxYjJjNGY2ZjNlMDQuLmYzYTNlOGE5ZDY2NGYxZjA1MmM5OTM2
MTgyZWMyNzVhMjc0ZWZmMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwCkBAIC00NCwxMiAr
NDQsMTEgQEAgV1RGVGhyZWFkRGF0YTo6V1RGVGhyZWFkRGF0YSgpCiAgICAgLCBtX2N1cnJlbnRB
dG9taWNTdHJpbmdUYWJsZSgwKQogICAgICwgbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUoMCkK
ICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yKDApCi0gICAgLCBtX3N0YWNrQm91
bmRzKFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKSkKICNpZiBFTkFCTEUo
U1RBQ0tfU1RBVFMpCiAgICAgLCBtX3N0YWNrU3RhdHMoKQogI2VuZGlmCiAgICAgLCBtX3NhdmVk
U3RhY2tQb2ludGVyQXRWTUVudHJ5KDApCi0gICAgLCBtX3NhdmVkTGFzdFN0YWNrVG9wKHN0YWNr
KCkub3JpZ2luKCkpCisgICAgLCBtX3NhdmVkTGFzdFN0YWNrVG9wKFRocmVhZDo6Y3VycmVudCgp
LnN0YWNrKCkub3JpZ2luKCkpCiB7CiAgICAgQXRvbWljU3RyaW5nVGFibGU6OmNyZWF0ZSgqdGhp
cyk7CiAgICAgbV9jdXJyZW50QXRvbWljU3RyaW5nVGFibGUgPSBtX2RlZmF1bHRBdG9taWNTdHJp
bmdUYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaCBiL1Nv
dXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAppbmRleCBhNDNhNmViMGNkNmZjMzkyMjUyYmI3
NTQ1OWU0NTIxM2Q1NjFkNmM3Li44NGUzYzMwMzYyY2U3ZGIwNzcxMDYzMjRmMzFmOTE3ZGJjZmI2
YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKKysrIGIvU291
cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRl
IDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUg
PHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAKQEAgLTU3LDE2ICs1Niw2IEBAIGNsYXNzIFdURlRo
cmVhZERhdGEgewogICAgICAgICByZXR1cm4gb2xkQXRvbWljU3RyaW5nVGFibGU7CiAgICAgfQog
Ci0gICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWx3YXlzIGdldCBhIGZyZXNoIFN0YWNrQm91bmRzIGZyb20gdGhlIE9TIGR1ZSB0byBo
b3cgZmliZXJzIHdvcmsuCi0gICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAyNDExCi0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgbV9zdGFja0Jv
dW5kcyA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsKLSNlbmRpZgot
ICAgICAgICByZXR1cm4gbV9zdGFja0JvdW5kczsKLSAgICB9Ci0KICNpZiBFTkFCTEUoU1RBQ0tf
U1RBVFMpCiAgICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMmIHN0YWNrU3RhdHMoKQogICAg
IHsKQEAgLTEwMSw3ICs5MCw2IEBAIGNsYXNzIFdURlRocmVhZERhdGEgewogICAgIEF0b21pY1N0
cmluZ1RhYmxlKiBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZTsKICAgICBBdG9taWNTdHJpbmdU
YWJsZURlc3RydWN0b3IgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3I7CiAKLSAgICBTdGFj
a0JvdW5kcyBtX3N0YWNrQm91bmRzOwogI2lmIEVOQUJMRShTVEFDS19TVEFUUykKICAgICBTdGFj
a1N0YXRzOjpQZXJUaHJlYWRTdGF0cyBtX3N0YWNrU3RhdHM7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQppbmRleCAxMGJkNzc5
NWI0YjA5ZDVjNzExMGQzN2NiOTVmODA3NDdiMDhkNTU3Li4wNjUxNjY1ZTcwMWI3ZTM2OGZlOTc5
MmE5NjA3YjI0YWIwNzUyYjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XZWJDb3JlVGhyZWFkLm1tCkBAIC03MDQsMTQgKzcwNCwxNyBAQCBzdGF0aWMgdm9pZCBT
dGFydFdlYlRocmVhZCgpCiB7CiAgICAgd2ViVGhyZWFkU3RhcnRlZCA9IFRSVUU7CiAKKyAgICAv
LyBUaHJlYWRHbG9iYWxEYXRhIHRvdWNoZXMgQXRvbWljU3RyaW5nLCB3aGljaCByZXF1aXJlcyBX
VEZUaHJlYWREYXRhIGFuZCBUaHJlYWRpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgV1RGOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICAvLyBJbml0aWFsaXplIEF0b21pY1N0cmluZyBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgV1RGOjpBdG9taWNTdHJpbmc6OmluaXQoKTsKKwogICAgIC8v
IEluaXRpYWxpemUgVGhyZWFkR2xvYmFsRGF0YSBvbiB0aGUgbWFpbiBVSSB0aHJlYWQgc28gdGhh
dCB0aGUgV2ViQ29yZSB0aHJlYWQKICAgICAvLyBjYW4gbGF0ZXIgc2V0IGl0J3MgdGhyZWFkLXNw
ZWNpZmljIGRhdGEgdG8gcG9pbnQgdG8gdGhlIHNhbWUgb2JqZWN0cy4KICAgICBXZWJDb3JlOjpU
aHJlYWRHbG9iYWxEYXRhJiB1bnVzZWQgPSBXZWJDb3JlOjp0aHJlYWRHbG9iYWxEYXRhKCk7CiAg
ICAgKHZvaWQpdW51c2VkOwogCi0gICAgLy8gSW5pdGlhbGl6ZSBBdG9taWNTdHJpbmcgb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIFdURjo6QXRvbWljU3RyaW5nOjppbml0KCk7Ci0KICAgICBSdW5M
b29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKIAogICAgIC8vIHJlZ2lzdGVyIGNsYXNzIGZv
ciBXZWJUaHJlYWQgZGVhbGxvY2F0aW9uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315544</attachid>
            <date>2017-07-15 07:46:08 -0700</date>
            <delta_ts>2017-07-18 14:31:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173975-20170715234607.patch</filename>
            <type>text/plain</type>
            <size>22820</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5NTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZTIwYzM1NTE5YmI2ZDU0OGFiNjg1NTFkMmRkZmFlNmZiZTBjMGJiLi45NDcwMGZhOGQ3ZjNjM2Qy
NWNhMmY0MDBjNzE0NTNhYmVlMDY3MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAxNy0wNy0xNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0aGUgdGhyZWFkcyBzdGFj
ayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGVyZSBpcyBhIHNpdGUgaW4gSlNDIHRoYXQgdHJ5IHRvIHdhbGsgYW5vdGhlciB0aHJlYWQn
cyBzdGFjay4KKyAgICAgICAgQ3VycmVudGx5LCBzdGFjayBib3VuZHMgYXJlIHN0b3JlZCBpbiBX
VEZUaHJlYWREYXRhIHdoaWNoIGlzIGxvY2F0ZWQKKyAgICAgICAgaW4gVExTLiBUaHVzLCBvbmx5
IHRoZSB0aHJlYWQgaXRzZWxmIGNhbiBhY2Nlc3MgaXRzIG93biBXVEZUaHJlYWREYXRhLgorICAg
ICAgICBXZSB3b3JrYXJvdW5kIHRoaXMgc2l0dWF0aW9uIGJ5IGhvbGRpbmcgU3RhY2tCb3VuZHMg
aW4gTWFjaGluZVRocmVhZCBpbiBKU0MsCisgICAgICAgIGJ1dCBTdGFja0JvdW5kcyBzaG91bGQg
YmUgcHV0IGluIFdURjo6VGhyZWFkIGluc3RlYWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IFN0YWNrQm91bmRzIHRvIFdURjo6VGhyZWFkLiBTdGFja0JvdW5kcyBpbmZvcm1hdGlvbiBpcyB0
aWdodGx5CisgICAgICAgIGNvdXBsZWQgd2l0aCBUaHJlYWQuIFRodXMgcHV0dGluZyBpdCBpbiBX
VEY6OlRocmVhZCBpcyBuYXR1cmFsIGNob2ljZS4KKworICAgICAgICAqIGhlYXAvTWFjaGluZVN0
YWNrTWFya2VyLmNwcDoKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJl
YWQ6Ok1hY2hpbmVUaHJlYWQpOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGlu
ZVRocmVhZDo6Y2FwdHVyZVN0YWNrKToKKyAgICAgICAgKiBoZWFwL01hY2hpbmVTdGFja01hcmtl
ci5oOgorICAgICAgICAoSlNDOjpNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6c3RhY2tC
YXNlKToKKyAgICAgICAgKEpTQzo6TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6OnN0YWNr
RW5kKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorCiAyMDE3LTA3LTE0ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtXVEZdIFVzZSBz
dGQ6OnVuaXF1ZV9wdHIgZm9yIFN0YWNrVHJhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDE4MDgxOGMwZmNiYzg4MjUxNjhk
MmI5N2E5YmQ0NGRjMWZhNGVmZS4uYzVhNDlkZDhjMWRmMWIzYjFmZmRkOWJjYzgzNjI2ZDVjYjY1
NDQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxNy0wNy0xNSAgWXVzdWtlIFN1enVraSAgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBXVEY6OlRocmVhZCBzaG91bGQgaGF2ZSB0
aGUgdGhyZWFkcyBzdGFjayBib3VuZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzM5NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXZSBtb3ZlIFN0YWNrQm91bmRzIGZyb20gV1RGVGhyZWFkRGF0YSB0
byBXVEY6OlRocmVhZC4KKyAgICAgICAgT25lIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHdlIHNo
b3VsZCBtYWtlIHZhbGlkIFN0YWNrQm91bmRzCisgICAgICAgIHZpc2libGUgdG8gVGhyZWFkOjpj
cmVhdGUoKSBjYWxsZXIuIFdoZW4gdGhlIGNhbGxlciBnZXQKKyAgICAgICAgV1RGOjpUaHJlYWQg
ZnJvbSBUaHJlYWQ6OmNyZWF0ZSgpLCB0aGlzIFdURjo6VGhyZWFkIHNob3VsZAorICAgICAgICBo
YXZlIGEgdmFsaWQgU3RhY2tCb3VuZHMuIEJ1dCBTdGFja0JvdW5kcyBpbmZvcm1hdGlvbiBjYW4g
YmUKKyAgICAgICAgcmV0cml2ZWQgb25seSBpbiB0aGUgV1RGOjpUaHJlYWQncyB0aHJlYWQgaXRz
ZWxmLgorCisgICAgICAgIFdlIGFsc28gY2xlYW4gdXAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5n
LiBTdHJpbmdJbXBsOjplbXB0eSgpCisgICAgICAgIGlzIG5vdyBzdGF0aWNhbGx5IGluaXRpYWxp
emVkIGJ5IHVzaW5nIGNvbnN0ZXhwciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgVGh1cyB3ZSBkbyBu
b3QgbmVlZCB0byBjYWxsIFN0cmluZ0ltcGw6OmVtcHR5KCkgZXhwbGljaXRseSBoZXJlLgorICAg
ICAgICBBbmQgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgZG9lcyBub3QgaGF2ZSBhbnkgbWFp
biB0aHJlYWQKKyAgICAgICAgYWZmaW5pdHkgcmlnaHQgbm93IGluIGFsbCB0aGUgcGxhdGZvcm1z
LiBTbyB3ZSBmaXggdGhlIGNvbW1lbnQKKyAgICAgICAgaW4gVGhyZWFkaW5nLmguIFRoZW4sIG5v
dywgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCkgaXMgY2FsbGVkCisgICAgICAgIGluIFVJIHRo
cmVhZCB3aGVuIHVzaW5nIFdlYiB0aHJlYWQgaW4gaU9TLgorCisgICAgICAgICogd3RmL1N0YWNr
Qm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjplbXB0eUJvdW5kcyk6CisgICAg
ICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3RmL1RocmVh
ZGluZy5jcHA6CisgICAgICAgIChXVEY6OnRocmVhZEVudHJ5UG9pbnQpOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudE1heUJlTnVs
bCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6Omlu
aXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpzdGFjayk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5v
bldURkNyZWF0ZWQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAgICAo
V1RGOjppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OlRo
cmVhZDo6Y3VycmVudCk6CisgICAgICAgICogd3RmL1dURlRocmVhZERhdGEuY3BwOgorICAgICAg
ICAoV1RGOjpXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKToKKyAgICAgICAgKiB3dGYvV1RG
VGhyZWFkRGF0YS5oOgorICAgICAgICAoV1RGOjpXVEZUaHJlYWREYXRhOjpzdGFjayk6CisKIDIw
MTctMDctMTQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBpT1MgMTEgU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRlYWIwNTJjZjViYmRhOTU1NGUwOTI1ODNk
YTk5YjU2ZjBiNDc4Yy4uYTA3ZjY0NjMzY2M5NjcxYThkMzkzNjEzNzYzMDc0NjE5N2I0YTY3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE3LTA3LTE1ICBZdXN1a2UgU3V6dWtpICA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFdURjo6VGhyZWFkIHNob3VsZCBoYXZl
IHRoZSB0aHJlYWRzIHN0YWNrIGJvdW5kcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gY3JlYXRpbmcgV2ViVGhyZWFkLCB3ZSBmaXJzdCBhbGxv
Y2F0ZSBXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhIGluIFVJIHRocmVhZAorICAgICAgICBhbmQg
c2hhcmUgaXQgd2l0aCBXZWJUaHJlYWQuCisgICAgICAgIFRoZSBwcm9ibGVtIGlzIHRoYXQgV2Vi
Q29yZTo6VGhyZWFkR2xvYmFsRGF0YSBoYXMgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9y
cy4KKyAgICAgICAgSXQgYWxsb2NhdGVzIEF0b21pY1N0cmluZywgd2hpY2ggcmVxdWlyZXMgV1RG
VGhyZWFkRGF0YS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBjYWxsIFdURjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpIGJlZm9yZSBhbGxvY2F0aW5nIFdlYkNvcmU6OlRocmVhZEdsb2JhbERh
dGEuCisgICAgICAgIEFuZCB3ZSBhbHNvIGNhbGwgQXRvbWljU3RyaW5nOjppbml0KCkgYmVmb3Jl
IGNhbGxpbmcgV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YSBzaW5jZQorICAgICAgICBXZWJDb3Jl
OjpUaHJlYWRHbG9iYWxEYXRhIGFsbG9jYXRlcyBBdG9taWNTdHJpbmcuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW06CisgICAgICAgIChTdGFydFdlYlRocmVh
ZCk6CisKIDIwMTctMDctMTQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBpT1MgMTEgU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAppbmRleCA2NzYzZWEzYWIxYzJmNDY3OWMzNzcxYjE5
MTk3M2M1MzE2YmY1ZjQwLi44YjliYjY4NjQ1Y2NkNGQ4YjAzMWI2Y2NhZGQyODA1OTNiODk3MGQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtl
ci5jcHAKQEAgLTIzOSw5ICsyMzksNiBAQCB2b2lkIE1hY2hpbmVUaHJlYWRzOjpnYXRoZXJGcm9t
Q3VycmVudFRocmVhZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdAogTWFjaGlu
ZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ6Ok1hY2hpbmVUaHJlYWQoKQogICAgIDogbV90aHJlYWQo
V1RGOjpUaHJlYWQ6OmN1cnJlbnQoKSkKIHsKLSAgICBhdXRvIHN0YWNrQm91bmRzID0gd3RmVGhy
ZWFkRGF0YSgpLnN0YWNrKCk7Ci0gICAgbV9zdGFja0Jhc2UgPSBzdGFja0JvdW5kcy5vcmlnaW4o
KTsKLSAgICBtX3N0YWNrRW5kID0gc3RhY2tCb3VuZHMuZW5kKCk7CiB9CiAKIHNpemVfdCBNYWNo
aW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6Z2V0UmVnaXN0ZXJzKE1hY2hpbmVUaHJlYWQ6OlJl
Z2lzdGVycyYgcmVnaXN0ZXJzKQpAQCAtMzAyLDE1ICsyOTksMTUgQEAgc3RhdGljIGlubGluZSBp
bnQgb3NSZWRab25lQWRqdXN0bWVudCgpCiAKIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBNYWNo
aW5lVGhyZWFkczo6TWFjaGluZVRocmVhZDo6Y2FwdHVyZVN0YWNrKHZvaWQqIHN0YWNrVG9wKQog
ewotICAgIGNoYXIqIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1fc3RhY2tC
YXNlKTsKKyAgICBjaGFyKiBiZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNoYXIqPihzdGFj
a0Jhc2UoKSk7CiAgICAgY2hhciogZW5kID0gYml0d2lzZV9jYXN0PGNoYXIqPihXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHZvaWQqKT4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YWNrVG9wKSkpOwogICAgIEFTU0VSVChiZWdpbiA+PSBlbmQpOwogCiAgICAgY2hhciogZW5k
V2l0aFJlZFpvbmUgPSBlbmQgKyBvc1JlZFpvbmVBZGp1c3RtZW50KCk7CiAgICAgQVNTRVJUKFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZW5kV2l0aFJlZFpvbmUpKSA9PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
ZW5kV2l0aFJlZFpvbmUpKTsKIAotICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IG1fc3RhY2tFbmQp
Ci0gICAgICAgIGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KG1f
c3RhY2tFbmQpOworICAgIGlmIChlbmRXaXRoUmVkWm9uZSA8IHN0YWNrRW5kKCkpCisgICAgICAg
IGVuZFdpdGhSZWRab25lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y2hhcio+KHN0YWNrRW5kKCkp
OwogCiAgICAgc3RkOjpzd2FwKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSk7CiAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKGJlZ2luLCBlbmRXaXRoUmVkWm9uZSAtIGJlZ2luKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggYjYyZWI0MzEz
MTJjOGI4NTJkNTMyOGM5NzZhNjIyNWI5ZTc5YWM0My4uYzE1MTBkNjI1MWMwYjM0YWY5YTRlYjk1
MWE1MWU5NmVhOTRkNWMyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgKQEAgLTcyLDEyICs3MiwxMCBAQCBjbGFzcyBNYWNoaW5lVGhyZWFk
cyB7CiAgICAgICAgIHN0ZDo6cGFpcjx2b2lkKiwgc2l6ZV90PiBjYXB0dXJlU3RhY2sodm9pZCog
c3RhY2tUb3ApOwogCiAgICAgICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5pZCgpOyB9Ci0gICAgICAgIHZvaWQqIHN0YWNrQmFzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tCYXNlOyB9Ci0gICAgICAgIHZvaWQqIHN0YWNrRW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFja0VuZDsgfQorICAgICAgICB2b2lkKiBzdGFja0Jhc2UoKSBj
b25zdCB7IHJldHVybiBtX3RocmVhZC0+c3RhY2soKS5vcmlnaW4oKTsgfQorICAgICAgICB2b2lk
KiBzdGFja0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFkLT5zdGFjaygpLmVuZCgpOyB9CiAK
ICAgICAgICAgUmVmPFdURjo6VGhyZWFkPiBtX3RocmVhZDsKLSAgICAgICAgdm9pZCogbV9zdGFj
a0Jhc2U7Ci0gICAgICAgIHZvaWQqIG1fc3RhY2tFbmQ7CiAgICAgICAgIE1hY2hpbmVUaHJlYWQq
IG1fbmV4dCB7IG51bGxwdHIgfTsKICAgICAgICAgTWFjaGluZVRocmVhZCogbV9wcmV2IHsgbnVs
bHB0ciB9OwogICAgIH07CkBAIC0xMDQsNyArMTAyLDcgQEAgY2xhc3MgTWFjaGluZVRocmVhZHMg
ewogI2RlZmluZSBERUNMQVJFX0FORF9DT01QVVRFX0NVUlJFTlRfVEhSRUFEX1NUQVRFKHN0YXRl
TmFtZSkgXAogICAgIEN1cnJlbnRUaHJlYWRTdGF0ZSBzdGF0ZU5hbWU7IFwKICAgICBzdGF0ZU5h
bWUuc3RhY2tUb3AgPSAmc3RhdGVOYW1lOyBcCi0gICAgc3RhdGVOYW1lLnN0YWNrT3JpZ2luID0g
d3RmVGhyZWFkRGF0YSgpLnN0YWNrKCkub3JpZ2luKCk7IFwKKyAgICBzdGF0ZU5hbWUuc3RhY2tP
cmlnaW4gPSBUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLm9yaWdpbigpOyBcCiAgICAgQUxMT0NB
VEVfQU5EX0dFVF9SRUdJU1RFUl9TVEFURShzdGF0ZU5hbWUgIyMgX3JlZ2lzdGVyU3RhdGUpOyBc
CiAgICAgc3RhdGVOYW1lLnJlZ2lzdGVyU3RhdGUgPSAmc3RhdGVOYW1lICMjIF9yZWdpc3RlclN0
YXRlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggMjQ3
OTkxODMxM2I0ZDg4ZGQ4MTk4NzI1ZjJkZTJkZjRmNzdlZDc0MC4uZGVhYTQ0OWI2YmEyNmFjY2Nl
ZGMxMjcyZTMyNTg5MmQ3NWI4NzhkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1UcmFwcy5jcHAKQEAgLTI2NywyNSArMjY3LDcgQEAgY2xhc3MgVk1UcmFwczo6U2lnbmFsU2Vu
ZGVyIGZpbmFsIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICAgICAgICAgIFRocmVhZCYgdGhyZWFkID0gKm93bmVyVGhyZWFk
LT5nZXQoKTsKLSAgICAgICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IFN0YWNr
Qm91bmRzOjplbXB0eUJvdW5kcygpOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdXNlIHRoZSBtYWNoaW5lIHRocmVhZHMgYmVjYXVz
ZSBpdCBpcyB0aGUgb25seSBub24tVExTIHNvdXJjZQotICAgICAgICAgICAgICAgICAgICAvLyBm
b3IgdGhlIHN0YWNrIGJvdW5kcyBvZiB0aGlzIHRocmVhZC4gV2Ugc2hvdWxkIGtlZXAgaW4gb24g
dGhlIFdURjo6VGhyZWFkIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzk3NQotICAgICAgICAgICAg
ICAgICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMgPSB2bS5oZWFwLm1hY2hpbmVU
aHJlYWRzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gbWFjaGluZVRocmVhZHNMb2NrID0g
dHJ5SG9sZExvY2sobWFjaGluZVRocmVhZHMuZ2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYWNoaW5lVGhyZWFkc0xvY2spCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIFRyeSBhZ2FpbiBsYXRlci4KLQotICAgICAgICAgICAgICAgICAgICBhdXRvJiB0aHJl
YWRMaXN0ID0gbWFjaGluZVRocmVhZHMudGhyZWFkc0xpc3RIZWFkKG1hY2hpbmVUaHJlYWRzTG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJl
YWQqIG1hY2hpbmVUaHJlYWQgPSB0aHJlYWRMaXN0LmhlYWQoKTsgbWFjaGluZVRocmVhZDsgbWFj
aGluZVRocmVhZCA9IG1hY2hpbmVUaHJlYWQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hY2hpbmVUaHJlYWQtPm1fdGhyZWFkLmdldCgpID09IHRocmVhZCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzKG1hY2hpbmVU
aHJlYWQtPnN0YWNrQmFzZSgpLCBtYWNoaW5lVGhyZWFkLT5zdGFja0VuZCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3RhY2tC
b3VuZHMuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2
bS50cmFwcygpLnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMp
OworICAgICAgICAgICAgICAgIHZtLnRyYXBzKCkudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhj
b250ZXh0LCB0aHJlYWQuc3RhY2soKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oIGIvU291cmNlL1dURi93dGYv
U3RhY2tCb3VuZHMuaAppbmRleCBjZDYyYzE0OGE2YzdlZmM5NTE3YThiMDliOGEzMmM3ZmUxOTBj
ZGVmLi4zYzkxMWVmMzZlYzY5NjJjOTdmOWZiZDQzMzMzOTMzZWY2ZDhlYWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNr
Qm91bmRzLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgU3RhY2tCb3VuZHMgewogICAgIGNvbnN0
IHN0YXRpYyBzaXplX3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA2NCAqIDEwMjQ7CiAK
IHB1YmxpYzoKLSAgICBzdGF0aWMgU3RhY2tCb3VuZHMgZW1wdHlCb3VuZHMoKSB7IHJldHVybiBT
dGFja0JvdW5kcygpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBTdGFja0JvdW5kcyBlbXB0eUJv
dW5kcygpIHsgcmV0dXJuIFN0YWNrQm91bmRzKCk7IH0KIAogICAgIHN0YXRpYyBTdGFja0JvdW5k
cyBjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKQogICAgIHsKQEAgLTEyNyw5ICsxMjcsOSBAQCBj
bGFzcyBTdGFja0JvdW5kcyB7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFN0YWNrQm91bmRzKCkK
LSAgICAgICAgOiBtX29yaWdpbigwKQotICAgICAgICAsIG1fYm91bmQoMCkKKyAgICBjb25zdGV4
cHIgU3RhY2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKG51bGxwdHIpCisgICAgICAgICwg
bV9ib3VuZChudWxscHRyKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGJi
YmM1NjQ1MGVlYWFhYmM3OTVhY2NmYTgzZTViODM4YmIzYmU5MTkuLjgzNjJlZTM4Zjg1YzA3ODYz
MzA3MWU5MGQyMjQ0MWUwNzc4OTRlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtNDYsMTIgKzQ2
LDE2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitlbnVtIGNsYXNzIFN0YWdlIHsKKyAgICBTdGFy
dCwgSW5pdGlhbGl6ZWQKK307CisKIHN0cnVjdCBOZXdUaHJlYWRDb250ZXh0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAg
IEZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludDsKLSAgICBNdXRleCBjcmVhdGlvbk11dGV4Owor
ICAgIFN0YWdlIHN0YWdlOworICAgIE11dGV4IG11dGV4OworICAgIFRocmVhZENvbmRpdGlvbiBj
b25kaXRpb247CiB9OwogCiBjb25zdCBjaGFyKiBUaHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSkKQEAgLTg0LDMxICs4OCw0NiBAQCBjb25zdCBjaGFyKiBU
aHJlYWQ6Om5vcm1hbGl6ZVRocmVhZE5hbWUoY29uc3QgY2hhciogdGhyZWFkTmFtZSkKIHN0YXRp
YyB2b2lkIHRocmVhZEVudHJ5UG9pbnQodm9pZCogY29udGV4dERhdGEpCiB7CiAgICAgTmV3VGhy
ZWFkQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PE5ld1RocmVhZENvbnRleHQqPihjb250
ZXh0RGF0YSk7Ci0KLSAgICAvLyBCbG9jayB1bnRpbCBvdXIgY3JlYXRpbmcgdGhyZWFkIGhhcyBj
b21wbGV0ZWQgYW55IGV4dHJhIHNldHVwIHdvcmssIGluY2x1ZGluZwotICAgIC8vIGVzdGFibGlz
aGluZyBUaHJlYWRJZGVudGlmaWVyLgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gZW50cnlQb2ludDsK
ICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5jcmVhdGlvbk11dGV4
KTsKLSAgICB9Ci0KLSAgICBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VGhyZWFkSW50ZXJuYWwo
Y29udGV4dC0+bmFtZSk7CisgICAgICAgIC8vIEJsb2NrIHVudGlsIG91ciBjcmVhdGluZyB0aHJl
YWQgaGFzIGNvbXBsZXRlZCBhbnkgZXh0cmEgc2V0dXAgd29yaywgaW5jbHVkaW5nIGVzdGFibGlz
aGluZyBUaHJlYWRJZGVudGlmaWVyLgorICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4
dC0+bXV0ZXgpOwogCi0gICAgYXV0byBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5lbnRy
eVBvaW50KTsKKyAgICAgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFs
KGNvbnRleHQtPm5hbWUpOworICAgICAgICBlbnRyeVBvaW50ID0gV1RGTW92ZShjb250ZXh0LT5l
bnRyeVBvaW50KTsKIAotICAgIC8vIERlbGV0ZSB0aGUgY29udGV4dCBiZWZvcmUgc3RhcnRpbmcg
dGhlIHRocmVhZC4KLSAgICBkZWxldGUgY29udGV4dDsKKyAgICAgICAgLy8gQWNrIGNvbXBsZXRp
b24gb2YgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGNyZWF0aW5nIHRocmVhZC4KKyAgICAgICAgY29u
dGV4dC0+c3RhZ2UgPSBTdGFnZTo6SW5pdGlhbGl6ZWQ7CisgICAgICAgIGNvbnRleHQtPmNvbmRp
dGlvbi5zaWduYWwoKTsKKyAgICB9CiAKICAgICBlbnRyeVBvaW50KCk7CiB9CiAKIFJlZlB0cjxU
aHJlYWQ+IFRocmVhZDo6Y3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUsIEZ1bmN0aW9uPHZvaWQoKT4m
JiBlbnRyeVBvaW50KQogewotICAgIE5ld1RocmVhZENvbnRleHQqIGNvbnRleHQgPSBuZXcgTmV3
VGhyZWFkQ29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIHsgfSB9OworICAgIE5l
d1RocmVhZENvbnRleHQgY29udGV4dCB7IG5hbWUsIFdURk1vdmUoZW50cnlQb2ludCksIFN0YWdl
OjpTdGFydCwgeyB9LCB7IH0gfTsKIAotICAgIC8vIFByZXZlbnQgdGhlIHRocmVhZCBib2R5IGZy
b20gZXhlY3V0aW5nIHVudGlsIHdlJ3ZlIGVzdGFibGlzaGVkIHRoZSB0aHJlYWQgaWRlbnRpZmll
ci4KLSAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+Y3JlYXRpb25NdXRleCk7CisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQubXV0ZXgpOworICAgIFJlZlB0cjxUaHJlYWQ+IHJl
c3VsdCA9IFRocmVhZDo6Y3JlYXRlSW50ZXJuYWwodGhyZWFkRW50cnlQb2ludCwgJmNvbnRleHQs
IG5hbWUpOworICAgIC8vIEFmdGVyIGVzdGFibGlzaGluZyBUaHJlYWQsIHJlbGVhc2UgdGhlIG11
dGV4IGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIG9mIGluaXRpYWxpemF0aW9uLgorICAgIHdoaWxl
IChjb250ZXh0LnN0YWdlICE9IFN0YWdlOjpJbml0aWFsaXplZCkKKyAgICAgICAgY29udGV4dC5j
b25kaXRpb24ud2FpdChjb250ZXh0Lm11dGV4KTsKIAotICAgIHJldHVybiBUaHJlYWQ6OmNyZWF0
ZUludGVybmFsKHRocmVhZEVudHJ5UG9pbnQsIGNvbnRleHQsIG5hbWUpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1RocmVhZCogVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCkKK3sKKyAgICBU
aHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKKyAgICBpZiAoZGF0
YSkKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBUaHJlYWQ6OmluaXRpYWxpemUoKQoreworICAgIG1fc3RhY2sgPSBTdGFja0Jv
dW5kczo6Y3VycmVudFRocmVhZFN0YWNrQm91bmRzKCk7CiB9CiAKIHZvaWQgVGhyZWFkOjpkaWRF
eGl0KCkKQEAgLTE2Niw5ICsxODUsNiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplS2V5OwogICAgIHN0ZDo6Y2FsbF9vbmNl
KGluaXRpYWxpemVLZXksIFtdIHsKICAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplT25j
ZSgpOwotICAgICAgICAvLyBTdHJpbmdJbXBsOjplbXB0eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBp
dHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUgZmFzaGlvbiwKLSAgICAgICAgLy8gc28g
ZW5zdXJlIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkIGZyb20gaGVyZS4KLSAgICAgICAgU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigp
OwogICAgICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgICAgIGluaXRpYWxpemVEYXRlcygpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaAppbmRleCBiNzRmMzgxZTVlNjc2NDBiMGVhYzEzNmZmMmRiNDE2M2FhYWNmZmY2
Li44ODgxY2NlZThkYTQwZTNkMGY0MmFiODA2ODQ4MzAwOTg3NjY5YWJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KIAogI2lmIFVTRShQVEhSRUFEUykgJiYgIU9TKERBUldJTikKQEAgLTY3LDcgKzY4LDcg
QEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewog
CiAgICAgLy8gUmV0dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgVGhyZWFkJiBjdXJyZW50KCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBU
aHJlYWQqIGN1cnJlbnRNYXlCZU51bGwoKTsKKyAgICBzdGF0aWMgVGhyZWFkKiBjdXJyZW50TWF5
QmVOdWxsKCk7CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0
IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAgICAgLy8g
b2YgdGhyZWFkcy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhvbGRpbmcg
dGhpcyBUaHJlYWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTA4LDYgKzEwOSw3IEBA
IGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAg
ICAvLyBDYWxsZWQgaW4gdGhlIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8g
SGVscGZ1bCBmb3IgcGxhdGZvcm1zIHdoZXJlIHRoZSB0aHJlYWQgbmFtZSBtdXN0IGJlIHNldCBm
cm9tIHdpdGhpbiB0aGUgdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVDdXJyZW50
VGhyZWFkSW50ZXJuYWwoY29uc3QgY2hhciogdGhyZWFkTmFtZSk7CisgICAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZDcmVhdGVkKCk7CiAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCkBAIC0x
MjUsNiArMTI3LDExIEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxUaHJlYWQ+IHsKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGlu
ZygpOwogCisgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3N0YWNrOworICAgIH0KKwogI2lmIE9TKERBUldJTikKICAgICBtYWNoX3Bv
cnRfdCBtYWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQogI2VuZGlmCkBA
IC0xNDAsNiArMTQ3LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFRocmVhZD4gewogI2Vsc2UKICAgICB2b2lkIGVzdGFibGlzaChIQU5ETEUsIFRocmVhZElk
ZW50aWZpZXIpOwogI2VuZGlmCisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICNpZiBVU0UoUFRI
UkVBRFMpICYmICFPUyhEQVJXSU4pCiAgICAgc3RhdGljIHZvaWQgc2lnbmFsSGFuZGxlclN1c3Bl
bmRSZXN1bWUoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1Y29udGV4dCk7CkBAIC0xNzEsNiArMTc5
LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4g
ewogICAgIHN0ZDo6bXV0ZXggbV9tdXRleDsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAw
IH07CiAgICAgSm9pbmFibGVTdGF0ZSBtX2pvaW5hYmxlU3RhdGUgeyBKb2luYWJsZSB9OworICAg
IFN0YWNrQm91bmRzIG1fc3RhY2sgeyBTdGFja0JvdW5kczo6ZW1wdHlCb3VuZHMoKSB9OwogICAg
IGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVh
ZF90IG1faGFuZGxlOwpAQCAtMTkwLDkgKzE5OSw3IEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICNlbmRpZgogfTsKIAotLy8gVGhpcyBmdW5j
dGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4gSXQgaXMgc2FmZSB0byBj
YWxsIGl0IHJlcGVhdGVkbHkuCi0vLyBEYXJ3aW4gaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVs
ZTogaXQgaXMgT0sgdG8gY2FsbCBpdCBmcm9tIGFueSB0aHJlYWQsIHRoZSBvbmx5Ci0vLyByZXF1
aXJlbWVudCBpcyB0aGF0IHRoZSBjYWxscyBhcmUgbm90IHJlZW50cmFudC4KKy8vIFRoaXMgZnVu
Y3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWRzLgogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOwogCiBpbmxpbmUgVGhyZWFkSWRlbnRpZmllciBj
dXJyZW50VGhyZWFkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzNWJl
ODQ1YjNkYTY5OWZmZTAxMDVjZDc4ZmI5YTlmNzBkMWEyNzc1Li5mYTgwYzA0ODAxOWQ4OWQzYTk4
MDI5NjkzYjc2ZGIyODljYTcxNTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
CkBAIC0xODgsOCArMTg4LDkgQEAgdm9pZCBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVh
ZGluZygpCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRF
dmVuSWZOb25XVEZDcmVhdGVkKCkKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVh
ZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQogeworICAgIFRocmVhZDo6Y3VycmVudCgpLmluaXRpYWxp
emUoKTsKICNpZiAhT1MoREFSV0lOKQogICAgIHNpZ3NldF90IG1hc2s7CiAgICAgc2lnZW1wdHlz
ZXQoJm1hc2spOwpAQCAtMjk5LDI1ICszMDAsMTcgQEAgdm9pZCBUaHJlYWQ6OmRldGFjaCgpCiAg
ICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7CiB9CiAKLVRocmVhZCogVGhyZWFkOjpjdXJyZW50
TWF5QmVOdWxsKCkKLXsKLSAgICBUaHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1
cnJlbnQoKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQoKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogewog
ICAgIGlmIChUaHJlYWQqIGN1cnJlbnQgPSBjdXJyZW50TWF5QmVOdWxsKCkpCiAgICAgICAgIHJl
dHVybiAqY3VycmVudDsKIAogICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFk
SWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgotICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CisgICAgUmVmPFRocmVhZD4gdGhyZWFkID0g
YWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CiAgICAgdGhyZWFkLT5lc3RhYmxpc2gocHRocmVhZF9z
ZWxmKCkpOwotICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZSgqdGhyZWFkKTsKKyAgICBUaHJl
YWRIb2xkZXI6OmluaXRpYWxpemUodGhyZWFkLmdldCgpKTsKICAgICBpbml0aWFsaXplQ3VycmVu
dFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKLSAgICByZXR1cm4gKnRocmVhZDsKKyAgICBy
ZXR1cm4gdGhyZWFkLmdldCgpOwogfQogCiBUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVu
dElEKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IGE3YzFhODkwMTliNmEwNTI4OTg0ZjJh
MGU5MWFlNmJkMzIyNjRjZGMuLmVlMWM0ZDQzZmU3ZjE1MjM2YWQ5NWJhOWE3YmFkN2ExZTQxMzY0
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtMTE2LDYgKzExNiwxMSBAQCBUaHJlYWQ6
On5UaHJlYWQoKQogICAgICAgICBDbG9zZUhhbmRsZShtX2hhbmRsZSk7CiB9CiAKK3ZvaWQgVGhy
ZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKQoreworICAg
IFRocmVhZDo6Y3VycmVudCgpLmluaXRpYWxpemUoKTsKK30KKwogLy8gTVNfVkNfRVhDRVBUSU9O
LCBUSFJFQUROQU1FX0lORk8sIGFuZCBzZXRUaHJlYWROYW1lSW50ZXJuYWwgYWxsIGNvbWUgZnJv
bSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3hjYjJ6OGhzLmFzcHg+
Lgogc3RhdGljIGNvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CiAKQEAg
LTE0NSw2ICsxNTAsNyBAQCB2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRl
cm5hbChjb25zdCBjaGFyKiBzelRocmVhZE5hbWUpCiAgICAgfSBfX2V4Y2VwdCAoRVhDRVBUSU9O
X0NPTlRJTlVFX0VYRUNVVElPTikgewogICAgIH0KICNlbmRpZgorICAgIGluaXRpYWxpemVDdXJy
ZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwogfQogCiB2b2lkIFRocmVhZDo6aW5pdGlh
bGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCkKQEAgLTI2MSw5ICsyNjcsOCBAQCBzaXplX3QgVGhyZWFk
OjpnZXRSZWdpc3RlcnMoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKIAogVGhyZWFkJiBU
aHJlYWQ6OmN1cnJlbnQoKQogewotICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRl
cjo6Y3VycmVudCgpOwotICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFk
KCk7CisgICAgaWYgKFRocmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKKyAgICAg
ICAgcmV0dXJuICpjdXJyZW50OwogCiAgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhyZWFkLCBU
aHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCiAgICAgUmVmPFRocmVhZD4g
dGhyZWFkID0gYWRvcHRSZWYoKm5ldyBUaHJlYWQoKSk7CkBAIC0yNzQsNiArMjc5LDcgQEAgVGhy
ZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQogCiAgICAgdGhyZWFkLT5lc3RhYmxpc2goaGFuZGxlLCBj
dXJyZW50SUQoKSk7CiAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKHRocmVhZC5nZXQoKSwg
VGhyZWFkOjpjdXJyZW50SUQoKSk7CisgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZO
b25XVEZDcmVhdGVkKCk7CiAgICAgcmV0dXJuIHRocmVhZC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9XVEZU
aHJlYWREYXRhLmNwcAppbmRleCBjZGYzZGNiYTZiNjEyM2ZhZjgxYTJiZWFkMGEwMWIyYzRmNmYz
ZTA0Li43M2U3N2QyNTg1ZjhhNjE0NDRmOTc0ZTdjM2I4YWQxM2ExY2I2NjkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9X
VEZUaHJlYWREYXRhLmNwcApAQCAtNDAsMTUgKzQwLDcgQEAgVGhyZWFkU3BlY2lmaWM8V1RGVGhy
ZWFkRGF0YT4qIFdURlRocmVhZERhdGE6OnN0YXRpY0RhdGE7CiAjZW5kaWYKIAogV1RGVGhyZWFk
RGF0YTo6V1RGVGhyZWFkRGF0YSgpCi0gICAgOiBtX2FwaURhdGEoMCkKLSAgICAsIG1fY3VycmVu
dEF0b21pY1N0cmluZ1RhYmxlKDApCi0gICAgLCBtX2RlZmF1bHRBdG9taWNTdHJpbmdUYWJsZSgw
KQotICAgICwgbV9hdG9taWNTdHJpbmdUYWJsZURlc3RydWN0b3IoMCkKLSAgICAsIG1fc3RhY2tC
b3VuZHMoU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpKQotI2lmIEVOQUJM
RShTVEFDS19TVEFUUykKLSAgICAsIG1fc3RhY2tTdGF0cygpCi0jZW5kaWYKLSAgICAsIG1fc2F2
ZWRTdGFja1BvaW50ZXJBdFZNRW50cnkoMCkKKyAgICA6IG1fc3RhY2tCb3VuZHMoU3RhY2tCb3Vu
ZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpKQogICAgICwgbV9zYXZlZExhc3RTdGFja1Rv
cChzdGFjaygpLm9yaWdpbigpKQogewogICAgIEF0b21pY1N0cmluZ1RhYmxlOjpjcmVhdGUoKnRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV1RGVGhyZWFkRGF0YS5oIGIvU291cmNl
L1dURi93dGYvV1RGVGhyZWFkRGF0YS5oCmluZGV4IGE0M2E2ZWIwY2Q2ZmMzOTIyNTJiYjc1NDU5
ZTQ1MjEzZDU2MWQ2YzcuLjhjMTZmMmRjMGU5ODc0NTgyMjQ0MWUxYmIyMDNmYTQzMmVmYzEyMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9XVEZUaHJlYWREYXRhLmgKQEAgLTU5LDExICs1OSw2IEBAIGNsYXNzIFdURlRocmVh
ZERhdGEgewogCiAgICAgY29uc3QgU3RhY2tCb3VuZHMmIHN0YWNrKCkKICAgICB7Ci0gICAgICAg
IC8vIFdlIG5lZWQgdG8gYWx3YXlzIGdldCBhIGZyZXNoIFN0YWNrQm91bmRzIGZyb20gdGhlIE9T
IGR1ZSB0byBob3cgZmliZXJzIHdvcmsuCi0gICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNDExCi0jaWYgT1MoV0lORE9XUykKLSAgICAgICAg
bV9zdGFja0JvdW5kcyA9IFN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKTsK
LSNlbmRpZgogICAgICAgICByZXR1cm4gbV9zdGFja0JvdW5kczsKICAgICB9CiAKQEAgLTk0LDE4
ICs4OSwxOCBAQCBjbGFzcyBXVEZUaHJlYWREYXRhIHsKICAgICAgICAgbV9zYXZlZExhc3RTdGFj
a1RvcCA9IGxhc3RTdGFja1RvcDsKICAgICB9CiAKLSAgICB2b2lkKiBtX2FwaURhdGE7CisgICAg
dm9pZCogbV9hcGlEYXRhIHsgbnVsbHB0ciB9OwogCiBwcml2YXRlOgotICAgIEF0b21pY1N0cmlu
Z1RhYmxlKiBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZTsKLSAgICBBdG9taWNTdHJpbmdUYWJs
ZSogbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGU7Ci0gICAgQXRvbWljU3RyaW5nVGFibGVEZXN0
cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yOworICAgIEF0b21pY1N0cmluZ1Rh
YmxlKiBtX2N1cnJlbnRBdG9taWNTdHJpbmdUYWJsZSB7IG51bGxwdHIgfTsKKyAgICBBdG9taWNT
dHJpbmdUYWJsZSogbV9kZWZhdWx0QXRvbWljU3RyaW5nVGFibGUgeyBudWxscHRyIH07CisgICAg
QXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9yIG1fYXRvbWljU3RyaW5nVGFibGVEZXN0cnVjdG9y
IHsgbnVsbHB0ciB9OwogCiAgICAgU3RhY2tCb3VuZHMgbV9zdGFja0JvdW5kczsKICNpZiBFTkFC
TEUoU1RBQ0tfU1RBVFMpCi0gICAgU3RhY2tTdGF0czo6UGVyVGhyZWFkU3RhdHMgbV9zdGFja1N0
YXRzOworICAgIFN0YWNrU3RhdHM6OlBlclRocmVhZFN0YXRzIG1fc3RhY2tTdGF0cyB7IH07CiAj
ZW5kaWYKLSAgICB2b2lkKiBtX3NhdmVkU3RhY2tQb2ludGVyQXRWTUVudHJ5OworICAgIHZvaWQq
IG1fc2F2ZWRTdGFja1BvaW50ZXJBdFZNRW50cnkgeyBudWxscHRyIH07CiAgICAgdm9pZCogbV9z
YXZlZExhc3RTdGFja1RvcDsKIAogI2lmIEhBVkUoRkFTVF9UTFMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KaW5kZXggYWY0ZWM0NDRmMGVl
MGE1YjkxZDQyMTVkZTU5N2IxNzIyOWQ3ODRlYS4uNjEyMmI0ZjJjNTBiNjRiYTVjN2ZmYzlkZGUz
ZjRkYTU2MjlhMDM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dh
ay9XZWJDb3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsv
V2ViQ29yZVRocmVhZC5tbQpAQCAtNzAyLDE0ICs3MDIsMTcgQEAgc3RhdGljIHZvaWQgU3RhcnRX
ZWJUaHJlYWQoKQogewogICAgIHdlYlRocmVhZFN0YXJ0ZWQgPSBUUlVFOwogCisgICAgLy8gVGhy
ZWFkR2xvYmFsRGF0YSB0b3VjaGVzIEF0b21pY1N0cmluZywgd2hpY2ggcmVxdWlyZXMgV1RGVGhy
ZWFkRGF0YSBhbmQgVGhyZWFkaW5nIGluaXRpYWxpemF0aW9uLgorICAgIFdURjo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOworCisgICAgLy8gSW5pdGlhbGl6ZSBBdG9taWNTdHJpbmcgb24gdGhlIG1h
aW4gdGhyZWFkLgorICAgIFdURjo6QXRvbWljU3RyaW5nOjppbml0KCk7CisKICAgICAvLyBJbml0
aWFsaXplIFRocmVhZEdsb2JhbERhdGEgb24gdGhlIG1haW4gVUkgdGhyZWFkIHNvIHRoYXQgdGhl
IFdlYkNvcmUgdGhyZWFkCiAgICAgLy8gY2FuIGxhdGVyIHNldCBpdCdzIHRocmVhZC1zcGVjaWZp
YyBkYXRhIHRvIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdHMuCiAgICAgV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YSYgdW51c2VkID0gV2ViQ29yZTo6dGhyZWFkR2xvYmFsRGF0YSgpOwogICAgICh2
b2lkKXVudXNlZDsKIAotICAgIC8vIEluaXRpYWxpemUgQXRvbWljU3RyaW5nIG9uIHRoZSBtYWlu
IHRocmVhZC4KLSAgICBXVEY6OkF0b21pY1N0cmluZzo6aW5pdCgpOwotCiAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CiAKICAgICAvLyByZWdpc3RlciBjbGFzcyBmb3IgV2Vi
VGhyZWFkIGRlYWxsb2NhdGlvbgo=
</data>
<flag name="review"
          id="336369"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>