<?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>135800</bug_id>
          
          <creation_ts>2014-08-11 08:20:39 -0700</creation_ts>
          <short_desc>[GTK] GMainLoopSource is exposed to race conditions</short_desc>
          <delta_ts>2014-09-18 06:07:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135801</dependson>
    
    <dependson>135833</dependson>
    
    <dependson>136538</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1028184</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-11 08:20:39 -0700</bug_when>
    <thetext>GMainLoopSource is exposed to race conditions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028189</commentid>
    <comment_count>1</comment_count>
      <attachid>236370</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-11 09:01:07 -0700</bug_when>
    <thetext>Created attachment 236370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028190</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-11 09:03:44 -0700</bug_when>
    <thetext>Attachment 236370 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:74:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:91:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:311:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028195</commentid>
    <comment_count>3</comment_count>
      <attachid>236370</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-11 09:20:33 -0700</bug_when>
    <thetext>Comment on attachment 236370
Patch

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

Is there a test case to reproduce the issue? Would it be possible to add a test case to the unit test? Have you considered that GSource is already thread-safe?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:44
&gt; +    , m_mutex(new GMutex)

Why a heap allocated mutex?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:46
&gt; +    g_mutex_init(m_mutex);

You can use g_mutex_init with a stack allocated mutex.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:54
&gt; +    , m_mutex(new GMutex)
&gt;  {
&gt; +    g_mutex_init(m_mutex);

Ditto.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:64
&gt; +    g_mutex_clear(m_mutex);

And then you don&apos;t need this

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:65
&gt; +    delete m_mutex;

Neither this.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:71
&gt; +    GMutexLocker locker(m_mutex);
&gt;      return m_status == Scheduled;

Do we really need a mutex lock to this simple query?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:77
&gt; +    GMutexLocker locker(m_mutex);
&gt;      return m_status != Ready;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028212</commentid>
    <comment_count>4</comment_count>
      <attachid>236370</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-11 10:19:00 -0700</bug_when>
    <thetext>Comment on attachment 236370
Patch

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

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:44
&gt;&gt; +    , m_mutex(new GMutex)
&gt; 
&gt; Why a heap allocated mutex?

That&apos;s how GMutex is currently allocated elsewhere in the code base. I&apos;ll switch those cases to a non-heap-allocated GMutex as well.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:64
&gt;&gt; +    g_mutex_clear(m_mutex);
&gt; 
&gt; And then you don&apos;t need this

Are you sure? g_mutex_clear() frees up the pthread mutex that g_mutex_init() allocates via malloc.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:71
&gt;&gt;      return m_status == Scheduled;
&gt; 
&gt; Do we really need a mutex lock to this simple query?

On a second thought I think mutex locking shouldn&apos;t matter here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028439</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-12 00:01:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 236370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236370&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:44
&gt; &gt;&gt; +    , m_mutex(new GMutex)
&gt; &gt; 
&gt; &gt; Why a heap allocated mutex?
&gt; 
&gt; That&apos;s how GMutex is currently allocated elsewhere in the code base. I&apos;ll switch those cases to a non-heap-allocated GMutex as well.
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:64
&gt; &gt;&gt; +    g_mutex_clear(m_mutex);
&gt; &gt; 
&gt; &gt; And then you don&apos;t need this
&gt; 
&gt; Are you sure? g_mutex_clear() frees up the pthread mutex that g_mutex_init() allocates via malloc.

I was wrong, I don&apos;t know why I was assuming it was a static mutex.

&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:71
&gt; &gt;&gt;      return m_status == Scheduled;
&gt; &gt; 
&gt; &gt; Do we really need a mutex lock to this simple query?
&gt; 
&gt; On a second thought I think mutex locking shouldn&apos;t matter here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028499</commentid>
    <comment_count>6</comment_count>
      <attachid>236441</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-12 05:37:30 -0700</bug_when>
    <thetext>Created attachment 236441
Patch

Doesn&apos;t yet include a test case. It should build, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028500</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-12 05:39:12 -0700</bug_when>
    <thetext>Attachment 236441 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029053</commentid>
    <comment_count>8</comment_count>
      <attachid>236583</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-14 02:14:45 -0700</bug_when>
    <thetext>Created attachment 236583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029054</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 02:17:05 -0700</bug_when>
    <thetext>Attachment 236583 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029073</commentid>
    <comment_count>10</comment_count>
      <attachid>236583</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-14 06:21:04 -0700</bug_when>
    <thetext>Comment on attachment 236583
Patch

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

Thanks for the patch, I haven&apos;t had time to look at this in detail yet, so I have only a couple of comments.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt; -    cancel();
&gt; +    {
&gt; +        GMutexLocker locker(m_mutex);
&gt; +        cancelInternal();
&gt; +    }

This is exactly cancel now, no?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:81
&gt; +void GMainLoopSource::cancelInternal()

I would rather use cancelUnlocked()

&gt; Tools/ChangeLog:12
&gt; +        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
&gt; +        * TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp: Added.

This is not public WebKit2GTK API, would it be possible to add it to the TestWTF instead? like Tools/TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp:136
&gt; +    GMainLoopSourceTest::add(&quot;GMainLoopSource&quot;, &quot;rescheduling-from-different-thread-during-dispatch&quot;, testGMainLoopSourceDifferentThreadRescheduling);

So, this one fails with current code? or is it flaky because the issue is indeed a race condition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029078</commentid>
    <comment_count>11</comment_count>
      <attachid>236583</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-14 07:29:58 -0700</bug_when>
    <thetext>Comment on attachment 236583
Patch

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

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt;&gt; +    }
&gt; 
&gt; This is exactly cancel now, no?

Ah, yes it is.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:81
&gt;&gt; +void GMainLoopSource::cancelInternal()
&gt; 
&gt; I would rather use cancelUnlocked()

cancelUnlocked() tells me that the mutex is not locked during the execution of that method, even if the caller did lock it. How about cancelWithoutLocking()?

&gt;&gt; Tools/ChangeLog:12
&gt;&gt; +        * TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp: Added.
&gt; 
&gt; This is not public WebKit2GTK API, would it be possible to add it to the TestWTF instead? like Tools/TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp

Yeah, it&apos;ll fit better there.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp:136
&gt;&gt; +    GMainLoopSourceTest::add(&quot;GMainLoopSource&quot;, &quot;rescheduling-from-different-thread-during-dispatch&quot;, testGMainLoopSourceDifferentThreadRescheduling);
&gt; 
&gt; So, this one fails with current code? or is it flaky because the issue is indeed a race condition?

That&apos;s the one. It&apos;s easy to fail the test on single-threaded systems, but it&apos;s rather hard to have it fail on multi-threaded ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029108</commentid>
    <comment_count>12</comment_count>
      <attachid>236592</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-14 09:45:35 -0700</bug_when>
    <thetext>Created attachment 236592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029111</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 09:47:28 -0700</bug_when>
    <thetext>Attachment 236592 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029118</commentid>
    <comment_count>14</comment_count>
      <attachid>236592</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2014-08-14 09:53:56 -0700</bug_when>
    <thetext>Comment on attachment 236592
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:26
&gt; +#if 0

o_O</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029330</commentid>
    <comment_count>15</comment_count>
      <attachid>236649</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-15 06:05:11 -0700</bug_when>
    <thetext>Created attachment 236649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029331</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-15 06:07:27 -0700</bug_when>
    <thetext>Attachment 236649 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031946</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-28 02:09:36 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 236583 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236583&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; This is exactly cancel now, no?
&gt; 
&gt; Ah, yes it is.
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:81
&gt; &gt;&gt; +void GMainLoopSource::cancelInternal()
&gt; &gt; 
&gt; &gt; I would rather use cancelUnlocked()
&gt; 
&gt; cancelUnlocked() tells me that the mutex is not locked during the execution of that method,

That&apos;s exactly what is happening

&gt; even if the caller did lock it. 

ah!, well, the unlocked suffix is a common pattern in glib, but I&apos;m fine with any name that makes it clear this is executed without the lock. Internal is a very confusing name in this case, IMO.

&gt; How about cancelWithoutLocking()?

Sounds good to me.

&gt; &gt;&gt; Tools/ChangeLog:12
&gt; &gt;&gt; +        * TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp: Added.
&gt; &gt; 
&gt; &gt; This is not public WebKit2GTK API, would it be possible to add it to the TestWTF instead? like Tools/TestWebKitAPI/Tests/WTF/gobject/GUniquePtr.cpp
&gt; 
&gt; Yeah, it&apos;ll fit better there.
&gt; 
&gt; &gt;&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestGMainLoopSource.cpp:136
&gt; &gt;&gt; +    GMainLoopSourceTest::add(&quot;GMainLoopSource&quot;, &quot;rescheduling-from-different-thread-during-dispatch&quot;, testGMainLoopSourceDifferentThreadRescheduling);
&gt; &gt; 
&gt; &gt; So, this one fails with current code? or is it flaky because the issue is indeed a race condition?
&gt; 
&gt; That&apos;s the one. It&apos;s easy to fail the test on single-threaded systems, but it&apos;s rather hard to have it fail on multi-threaded ones.

I see</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031997</commentid>
    <comment_count>18</comment_count>
      <attachid>237313</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-08-28 09:16:37 -0700</bug_when>
    <thetext>Created attachment 237313
Patch

Thought I have already uploaded the refined version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031998</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-28 09:19:35 -0700</bug_when>
    <thetext>Attachment 237313 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:306:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032137</commentid>
    <comment_count>20</comment_count>
      <attachid>237313</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-29 03:41:06 -0700</bug_when>
    <thetext>Comment on attachment 237313
Patch

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

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt; -    cancel();
&gt; +    {
&gt; +        GMutexLocker locker(m_mutex);
&gt; +        cancelWithoutLocking();
&gt; +    }

I still think this is not needed, because cancel() is now lock + cancelWithoutLocking()

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:84
&gt; +        m_status = Ready;

Shouldn&apos;t this be Ready when context is NULL? Should we add an assert instead?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:94
&gt; +    destroy(context.destroyCallback);
&gt; +    g_source_destroy(context.source.get());

Are you sure we can change the order here?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:204
&gt; +        if (!m_context.source)
&gt; +            return;

Do we really need this check inside the lock?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:219
&gt; +    bool shouldDestroy = false;
&gt; +    {
&gt; +        GMutexLocker locker(m_mutex);
&gt; +        shouldDestroy = !m_context.source;
&gt; +    }

Ok, so we no longer need to check if the source is the same, because with the move, the m_context is reset and its sources is NULL, right? so we only need to check if a new source has been scheduled. Since it&apos;s only a null check, do we really need to take the lock here?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:223
&gt; +    g_source_destroy(context.source.get());

I don&apos;t think you need to destroy the source here, voidSourceCallback always returns G_SOURCE_REMOVE so it will be destroyed.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:253
&gt; +        if (retval) {
&gt; +            if (!m_context.source)
&gt; +                m_context = WTF::move(context);
&gt; +            return Continue;
&gt; +        }
&gt; +
&gt; +        shouldDestroy = !m_context.source;

Maybe we could simply this a bit:

if (retval &amp;&amp; !m_context.source)
    m_context = WTF::move(context);
else
    shouldDestroy = !m_context.source;

And then leave it returning retval instead of Stop.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:258
&gt; +    g_source_destroy(context.source.get());

I don&apos;t think you should explicitly destroy the source, it will be destroyed when we return Stop here.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:281
&gt; +        g_source_destroy(context.source.get());

Same here.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:294
&gt; +        if (retval) {
&gt; +            if (!m_context.source)
&gt; +                m_context = WTF::move(context);
&gt; +            return Continue;
&gt; +        }

Same comments here since it&apos;s mostly the same than the bool callback case.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:301
&gt; +    g_source_destroy(context.source.get());

Ditto.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:309
&gt; +void GMainLoopSource::destroy(const std::function&lt;void ()&gt;&amp; destroyCallback)
&gt;  {
&gt; -    auto destroyCallback = WTF::move(m_destroyCallback);
&gt; -    auto deleteOnDestroy = m_deleteOnDestroy;
&gt; -    reset();
&gt; +    m_status = Ready;
&gt; +    DeleteOnDestroyType deleteOnDestroy = m_deleteOnDestroy;

So, since we don&apos;t have reset now, because the reset is done by the move and the callback func is passed as an argument, we should make sure this destroy is always called on an already reset(moved) context, right? Could we add an assert here to ensure that?

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:30
&gt; +        : m_mainLoop(g_main_loop_new(0, TRUE))

Use nullptr instead of 0 here.

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:64
&gt; +        ASSERT_NOT_REACHED();

I guess this is noop in Release builds, the unit tests should assert also in Release builds. I don&apos;t understand the test, though, why the callback should never be called?

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:67
&gt; +    context.test.source().schedule(&quot;[Test] SecondTask&quot;, [&amp;] {

Ah, ok, because it&apos;s the same source, the first one is cancelled. I think it would be easier to understand if you add a comment before the ASSERT or you use another bool variable finishedFirstTask and then you also check it&apos;s false.

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:73
&gt; +    ASSERT(context.finishedSecondTask);

You should use the gtest assert macros instead, ASSERT_TRUE/ASSERT_FALSE, etc.

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:81
&gt; +        bool finishedFirstTask = false;
&gt; +        bool finishedSecondTask = false;

Like this :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032138</commentid>
    <comment_count>21</comment_count>
      <attachid>237313</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-29 03:52:45 -0700</bug_when>
    <thetext>Comment on attachment 237313
Patch

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

&gt; Tools/ChangeLog:11
&gt; +        * TestWebKitAPI/PlatformGTK.cmake:

This change is not part of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032511</commentid>
    <comment_count>22</comment_count>
      <attachid>237313</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-01 11:58:13 -0700</bug_when>
    <thetext>Comment on attachment 237313
Patch

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

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:60
&gt;&gt; +    }
&gt; 
&gt; I still think this is not needed, because cancel() is now lock + cancelWithoutLocking()

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:84
&gt;&gt; +        m_status = Ready;
&gt; 
&gt; Shouldn&apos;t this be Ready when context is NULL? Should we add an assert instead?

No, m_status isn&apos;t Ready when a callback that is being executed in e.g. voidCallback() (m_status at that point equaling Dispatched) reschedules the same GMainLoopSource with a new callback.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:94
&gt;&gt; +    g_source_destroy(context.source.get());
&gt; 
&gt; Are you sure we can change the order here?

I&apos;ll revert it, just in case. It shouldn&apos;t affect anything.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:204
&gt;&gt; +            return;
&gt; 
&gt; Do we really need this check inside the lock?

We do, because between the time this check is performed outside of this scope (with m_context being non-null) and entering the scope and moving out of m_context below, the ::reset() method could have been called, and suddenly the context ends up with a null value.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:219
&gt;&gt; +    }
&gt; 
&gt; Ok, so we no longer need to check if the source is the same, because with the move, the m_context is reset and its sources is NULL, right? so we only need to check if a new source has been scheduled. Since it&apos;s only a null check, do we really need to take the lock here?

Correct on the first part.

Again, the lock is required here to avoid parallel clashes with the execution of the ::cancel() method, for instance if the GMainLoopSource object was rescheduled inside the callback and a cancellation followed immediately after.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:223
&gt;&gt; +    g_source_destroy(context.source.get());
&gt; 
&gt; I don&apos;t think you need to destroy the source here, voidSourceCallback always returns G_SOURCE_REMOVE so it will be destroyed.

OK, makes sense.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:253
&gt;&gt; +        shouldDestroy = !m_context.source;
&gt; 
&gt; Maybe we could simply this a bit:
&gt; 
&gt; if (retval &amp;&amp; !m_context.source)
&gt;     m_context = WTF::move(context);
&gt; else
&gt;     shouldDestroy = !m_context.source;
&gt; 
&gt; And then leave it returning retval instead of Stop.

OK, I&apos;ll try this out.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:258
&gt;&gt; +    g_source_destroy(context.source.get());
&gt; 
&gt; I don&apos;t think you should explicitly destroy the source, it will be destroyed when we return Stop here.

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:281
&gt;&gt; +        g_source_destroy(context.source.get());
&gt; 
&gt; Same here.

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:294
&gt;&gt; +        }
&gt; 
&gt; Same comments here since it&apos;s mostly the same than the bool callback case.

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:301
&gt;&gt; +    g_source_destroy(context.source.get());
&gt; 
&gt; Ditto.

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:309
&gt;&gt; +    DeleteOnDestroyType deleteOnDestroy = m_deleteOnDestroy;
&gt; 
&gt; So, since we don&apos;t have reset now, because the reset is done by the move and the callback func is passed as an argument, we should make sure this destroy is always called on an already reset(moved) context, right? Could we add an assert here to ensure that?

OK, I&apos;ll add an assert for a null m_socket.source.

&gt;&gt; Tools/ChangeLog:11
&gt;&gt; +        * TestWebKitAPI/PlatformGTK.cmake:
&gt; 
&gt; This change is not part of the patch

Right.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:30
&gt;&gt; +        : m_mainLoop(g_main_loop_new(0, TRUE))
&gt; 
&gt; Use nullptr instead of 0 here.

OK.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:67
&gt;&gt; +    context.test.source().schedule(&quot;[Test] SecondTask&quot;, [&amp;] {
&gt; 
&gt; Ah, ok, because it&apos;s the same source, the first one is cancelled. I think it would be easier to understand if you add a comment before the ASSERT or you use another bool variable finishedFirstTask and then you also check it&apos;s false.

I&apos;ll add the finishFirstTask variable.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:73
&gt;&gt; +    ASSERT(context.finishedSecondTask);
&gt; 
&gt; You should use the gtest assert macros instead, ASSERT_TRUE/ASSERT_FALSE, etc.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032514</commentid>
    <comment_count>23</comment_count>
      <attachid>237458</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-01 12:21:46 -0700</bug_when>
    <thetext>Created attachment 237458
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032515</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-01 12:23:32 -0700</bug_when>
    <thetext>Attachment 237458 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:290:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032570</commentid>
    <comment_count>25</comment_count>
      <attachid>237476</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-01 23:53:03 -0700</bug_when>
    <thetext>Created attachment 237476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032571</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-01 23:55:38 -0700</bug_when>
    <thetext>Attachment 237476 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.cpp:290:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 6 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032597</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-02 03:33:09 -0700</bug_when>
    <thetext>I wonder if we can remove the mutex used in UIProcess/Plugins/gtk/PluginInfoCache.cpp once this lands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032870</commentid>
    <comment_count>28</comment_count>
      <attachid>237476</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-03 02:36:53 -0700</bug_when>
    <thetext>Comment on attachment 237476
Patch

Clearing flags on attachment: 237476

Committed r173201: &lt;http://trac.webkit.org/changeset/173201&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032871</commentid>
    <comment_count>29</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-03 02:37:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033197</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-09-04 07:19:20 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; All reviewed patches have been landed.  Closing bug.

This has caused a regression the test TestWebKitAPI/WebKit2Gtk/TestDownloads. Reported here: https://bugs.webkit.org/show_bug.cgi?id=136530</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033252</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-04 11:25:20 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 136538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033789</commentid>
    <comment_count>32</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-08 01:09:54 -0700</bug_when>
    <thetext>*** Bug 136523 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034101</commentid>
    <comment_count>33</comment_count>
      <attachid>237846</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-09 04:34:28 -0700</bug_when>
    <thetext>Created attachment 237846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034102</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-09 04:36:42 -0700</bug_when>
    <thetext>Attachment 237846 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034268</commentid>
    <comment_count>35</comment_count>
      <attachid>237846</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-10 05:04:08 -0700</bug_when>
    <thetext>Comment on attachment 237846
Patch

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

GCC 4.9 has some issues with deducing the bool-returning lambda types, hence the build errors. I&apos;ll address it. Adding a few more comments addressing concerns that were left in bug #136523.

&gt; Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:222
&gt; +    context.test.delayedFinish();
&gt; +    context.test.runLoop();

This avoids controlling the main loop runtime via scheduling the destroy callbacks on GMainLoopSource. I don&apos;t think controlling that through the destroy callbacks is a good idea, especially when destroy callbacks are being explicitly tested.

But there are a few instances where we quit the loop in the destroy callback. I&apos;d rather switch those cases to using delayedFinish().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034270</commentid>
    <comment_count>36</comment_count>
      <attachid>237846</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-10 06:03:35 -0700</bug_when>
    <thetext>Comment on attachment 237846
Patch

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

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:88
&gt; +    g_cancellable_cancel(m_cancellable.get());

We should also cancel the socket cancellable here I guess.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:95
&gt; +    Context context = WTF::move(m_context);
&gt; +    context.destroySource();

hmm, so I guess that something like:

GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
source.schedule();
source.cancel();

would leak the source, no? I agree this is not the normal use of a delete on destroy source, but this case is already covered by current code. 
It seems also that a delete on destroy repeating source that is cancelled between two iterations is leaked too, because the object is only deleted in the callbacks.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:124
&gt; +    m_context = {
&gt; +        adoptGRef(g_idle_source_new()),
&gt; +        adoptGRef(g_cancellable_new()),
&gt; +        nullptr, // socketCancellable
&gt; +        WTF::move(function),
&gt; +        nullptr, // boolCallback
&gt; +        nullptr, // socketCallback
&gt; +        WTF::move(destroyFunction)
&gt; +    };

Is there any reason for this change? or does it just look better for you than the individual assignments? I&apos;m just curious.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:152
&gt; +    // Do not allow scheduling this type of callback on delete-on-destroy GMainLoopSources.
&gt; +    ASSERT(m_deleteOnDestroy == DoNotDeleteOnDestroy);

Why was this? IIRC what is not allowed is re-scheduling a delete on destroy source, because cancelling the current source would destroy the object, and if the source finished the object has already been destroyed.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:159
&gt; +        adoptGRef(socketCancellable),

Why do you need a local variable for this one?

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:278
&gt; +        context.destroySource();

I don&apos;t think we want to destroy the source here, since it will be destroyed already when this callback returns, what we want is the destroy callback to be called and the object to be deleted in case of delete on destroy sources. That&apos;s why the current destroy() method doesn&apos;t call g_source_destroy(), when we need that (when cancelling a source) we destroy the source before calling destroy().

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:290
&gt; +    context.destroySource();

Same here. I agree previous code was not correct either, because in case of a re-schedule we were not calling the destroy callback.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:308
&gt; +        ASSERT(m_status == Scheduled);
&gt; +        m_status = Dispatched;

I don&apos;t think this is correct, the status can be Dispatched at this point, since this is a repeating source.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:323
&gt; +        m_status = Ready;

This should be ready only when retval is Stop

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:329
&gt; +            m_status = Scheduled;

A repeating source returning Continue is in Dispatched status all that time, it should only transition to Scheduled from ready state when it&apos;s re-scheduled.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:406
&gt; +    g_cancellable_cancel(socketCancellable.get());

It&apos;s a bit weird that this is called here, I think this should only be called by cancel()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034406</commentid>
    <comment_count>37</comment_count>
      <attachid>237846</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-10 14:19:27 -0700</bug_when>
    <thetext>Comment on attachment 237846
Patch

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

I&apos;ll update the patch tomorrow, along with the build fixes for GCC 4.9.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:88
&gt;&gt; +    g_cancellable_cancel(m_cancellable.get());
&gt; 
&gt; We should also cancel the socket cancellable here I guess.

OK.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:95
&gt;&gt; +    context.destroySource();
&gt; 
&gt; hmm, so I guess that something like:
&gt; 
&gt; GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
&gt; source.schedule();
&gt; source.cancel();
&gt; 
&gt; would leak the source, no? I agree this is not the normal use of a delete on destroy source, but this case is already covered by current code. 
&gt; It seems also that a delete on destroy repeating source that is cancelled between two iterations is leaked too, because the object is only deleted in the callbacks.

Yeah, correct.

The main problem here is how to delete the GMainLoopSource. The mutex is already locked at this point, and a complete lockdown would occur if you enter the destructor from this point.

As you said, cancelling the delete-on-destroy source shouldn&apos;t generally be done, so I added an assertion at the top of this method that should prevent that. The only allowable situation for delete-on-destroy sources is calling cancel() with no callbacks scheduled

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:124
&gt;&gt; +    };
&gt; 
&gt; Is there any reason for this change? or does it just look better for you than the individual assignments? I&apos;m just curious.

It constructs the object in one expression, making it clearer overall.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:152
&gt;&gt; +    ASSERT(m_deleteOnDestroy == DoNotDeleteOnDestroy);
&gt; 
&gt; Why was this? IIRC what is not allowed is re-scheduling a delete on destroy source, because cancelling the current source would destroy the object, and if the source finished the object has already been destroyed.

There&apos;s no such scheduling in the current code, and it would be a pain to test it properly, as with other delete-on-destroy sources.

I&apos;ll remove this assertion for now and it can be discussed later.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:159
&gt;&gt; +        adoptGRef(socketCancellable),
&gt; 
&gt; Why do you need a local variable for this one?

Because it&apos;s also passed to g_socket_create_source().

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:278
&gt;&gt; +        context.destroySource();
&gt; 
&gt; I don&apos;t think we want to destroy the source here, since it will be destroyed already when this callback returns, what we want is the destroy callback to be called and the object to be deleted in case of delete on destroy sources. That&apos;s why the current destroy() method doesn&apos;t call g_source_destroy(), when we need that (when cancelling a source) we destroy the source before calling destroy().

The docs say it&apos;s safe to call g_source_destroy() on a GSource multiple times, so I took advantage of that and packed everything that Context should take care of at destruction-time in ::destroySource().

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:308
&gt;&gt; +        m_status = Dispatched;
&gt; 
&gt; I don&apos;t think this is correct, the status can be Dispatched at this point, since this is a repeating source.

I see, this would break the ::isDispatched() method. OTOH, not sure if I grepped precisely enough but I don&apos;t see that method used anywhere.

I did put some assertions in cancelWithoutLocking() that rely on differentiating between Dispatched and Scheduled during the repeatable dispatch.

I&apos;d rather see isDispatched() removed, if possible. Unless there&apos;s something else relying on keeping the status as Dispatched throughout the dispatch of repeatable callbacks.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:323
&gt;&gt; +        m_status = Ready;
&gt; 
&gt; This should be ready only when retval is Stop

That&apos;s applied in the if statement below.

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:406
&gt;&gt; +    g_cancellable_cancel(socketCancellable.get());
&gt; 
&gt; It&apos;s a bit weird that this is called here, I think this should only be called by cancel()

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034537</commentid>
    <comment_count>38</comment_count>
      <attachid>237936</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-10 23:38:23 -0700</bug_when>
    <thetext>Created attachment 237936
Patch

Fixed the build, removed the assertion in the GIOCondition callback, moved the cancellation of socketCancellable into ::cancelWithoutLocking().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034539</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-10 23:40:08 -0700</bug_when>
    <thetext>Attachment 237936 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:211:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:262:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:318:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:389:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:393:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:470:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 12 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035471</commentid>
    <comment_count>40</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-16 08:46:04 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 237846 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237846&amp;action=review
&gt;
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:308
&gt; &gt;&gt; +        m_status = Dispatched;
&gt; &gt; 
&gt; &gt; I don&apos;t think this is correct, the status can be Dispatched at this point, since this is a repeating source.
&gt; 
&gt; I see, this would break the ::isDispatched() method. OTOH, not sure if I grepped precisely enough but I don&apos;t see that method used anywhere.

Because isDispatched doesn&apos;t exist. A source is dispatched once the callback is called, and in case of repeating sources, it&apos;s considered dispatched all the time, until it&apos;s destroyed. 

&gt; I did put some assertions in cancelWithoutLocking() that rely on differentiating between Dispatched and Scheduled during the repeatable dispatch.

I&apos;m not sure I understand those assertions . . . 

&gt; I&apos;d rather see isDispatched() removed, if possible. Unless there&apos;s something else relying on keeping the status as Dispatched throughout the dispatch of repeatable callbacks.

Are you talking about isDispatched() or isScheduled() because isDispatched() doesn&apos;t exist and is Scheduled() is very important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035474</commentid>
    <comment_count>41</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-16 08:56:46 -0700</bug_when>
    <thetext>Ah, I guess you mean isActive(), no? That&apos;s used by GST code to check if the seeking source is active. But we could use isScheduled in that case because, since the seek sources are non repeating ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035483</commentid>
    <comment_count>42</comment_count>
      <attachid>237936</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-16 09:18:06 -0700</bug_when>
    <thetext>Comment on attachment 237936
Patch

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

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:305
&gt; +        ASSERT(m_status == Scheduled);

I still think this could be Dispatched, we shouldn&apos;t change the status of a repeating source while it&apos;s active.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:327
&gt; +            m_status = Scheduled;

This should still be Dispatched, I don&apos;t think we should change the status, the source is only dispatched when schedule methods are called. We usually check whether a sources is dispatched to know whether the callback has been called already or not

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:353
&gt; +        m_status = Dispatched;

Ditto.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:372
&gt; +        m_status = Ready;

This should only be ready when retval is False.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035856</commentid>
    <comment_count>43</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 00:36:53 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Ah, I guess you mean isActive(), no? That&apos;s used by GST code to check if the seeking source is active. But we could use isScheduled in that case because, since the seek sources are non repeating ones.

Can&apos;t remember anymore what I was looking at, but neither isActive() or isScheduled() can be removed. isDispatched() doesn&apos;t exist, so that&apos;s why grepping for it returned nothing ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035874</commentid>
    <comment_count>44</comment_count>
      <attachid>238298</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 02:04:31 -0700</bug_when>
    <thetext>Created attachment 238298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035875</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-18 02:07:12 -0700</bug_when>
    <thetext>Attachment 238298 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:211:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:262:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:318:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:389:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:393:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:470:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 12 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035876</commentid>
    <comment_count>46</comment_count>
      <attachid>238298</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 02:09:29 -0700</bug_when>
    <thetext>Comment on attachment 238298
Patch

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

Dispatched -&gt; Dispatching. Makes it a bit easier to understand when the callbacks in question are dispatched continuously, and not just once.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:336
&gt; +        if (retval &amp;&amp; !m_context.source)
&gt; +            m_context = WTF::move(context);
&gt; +        else if (!retval)
&gt; +            m_status = Ready;

Only sets m_status back to Ready if we&apos;ll be shutting down the GMainLoopSource. Otherwise m_status remains Dispatching if the callback will continue to be dispatched, or Scheduled if GMainLoopSource was rescheduled during dispatch.

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:388
&gt; +        if (retval &amp;&amp; !m_context.source)
&gt; +            m_context = WTF::move(context);
&gt; +        else if (!retval)
&gt; +            m_status = Ready;

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035895</commentid>
    <comment_count>47</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 03:56:05 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 238298 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238298&amp;action=review
&gt; 
&gt; Dispatched -&gt; Dispatching. Makes it a bit easier to understand when the callbacks in question are dispatched continuously, and not just once.

Ok, make sense to me, I agree the dispatched thing is a bit confusing for repeating sources, because they are actually dispatched multiple times, but what we want to know with isScheduled/isActive is whether the callback has already been called and whether the ongoing source has finished or not.

&gt; &gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:336
&gt; &gt; +        if (retval &amp;&amp; !m_context.source)
&gt; &gt; +            m_context = WTF::move(context);
&gt; &gt; +        else if (!retval)
&gt; &gt; +            m_status = Ready;
&gt; 
&gt; Only sets m_status back to Ready if we&apos;ll be shutting down the GMainLoopSource. Otherwise m_status remains Dispatching if the callback will continue to be dispatched, or Scheduled if GMainLoopSource was rescheduled during dispatch.

That&apos;s correct, and the reason why ready was only set in the reset method.

&gt; &gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:388
&gt; &gt; +        if (retval &amp;&amp; !m_context.source)
&gt; &gt; +            m_context = WTF::move(context);
&gt; &gt; +        else if (!retval)
&gt; &gt; +            m_status = Ready;
&gt; 
&gt; Same here.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035896</commentid>
    <comment_count>48</comment_count>
      <attachid>238298</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 04:12:29 -0700</bug_when>
    <thetext>Comment on attachment 238298
Patch

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

&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:85
&gt; +    // Delete-on-destroy GMainLoopSource objects can only be cancelled when there&apos;s callback either scheduled
&gt; +    // or in the middle of dispatch. At that point cancellation will have no effect.
&gt; +    ASSERT(m_deleteOnDestroy != DeleteOnDestroy || (m_status == Ready &amp;&amp; !m_context.source));

When a callback is scheduled and before dispatching, m_context.source is a valid pointer, so that cancel destroys the source before the callback is called, but the object is leaked. If cancel is called for a repeating source between two callback invocations, the same happens. That&apos;s why in current code cancel() deletes the object.

&gt; Source/cmake/OptionsGTK.cmake:374
&gt; -    &quot;${COMMAND_LINE_TO_BUILD} $@&quot;
&gt; +    &quot;${COMMAND_LINE_TO_BUILD} -- $@&quot;

This looks unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035900</commentid>
    <comment_count>49</comment_count>
      <attachid>238298</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 04:34:33 -0700</bug_when>
    <thetext>Comment on attachment 238298
Patch

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

&gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:85
&gt;&gt; +    ASSERT(m_deleteOnDestroy != DeleteOnDestroy || (m_status == Ready &amp;&amp; !m_context.source));
&gt; 
&gt; When a callback is scheduled and before dispatching, m_context.source is a valid pointer, so that cancel destroys the source before the callback is called, but the object is leaked. If cancel is called for a repeating source between two callback invocations, the same happens. That&apos;s why in current code cancel() deletes the object.

But this only affects delete-on-destroy GMainLoopSources and those should never be cancelled before or during dispatch, simply because you&apos;re not supposed to take the reference to the heap-allocated object and interact with it later, like this:

    GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
    source.schedule(...);
    ...
    source.cancel();

You can, but you&apos;re not supposed to. There might be some way of preventing this either at run-time with an assertion or ideally at compile-time. No clear idea about this at the moment, though.


This assertion only allows cancellation on a delete-on-destroy GMainLoopSource if there wasn&apos;t yet a callback scheduled on it:

    GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
    source.cancel();

The assertion also allows the cancel() invocation from the destructor, at which point the callback was both scheduled and dispatched so m_status is Ready and m_context.source is null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035901</commentid>
    <comment_count>50</comment_count>
      <attachid>238304</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 04:36:25 -0700</bug_when>
    <thetext>Created attachment 238304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035902</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-18 04:38:08 -0700</bug_when>
    <thetext>Attachment 238304 did not pass style-queue:


ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:97:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:99:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/gobject/GMainLoopSource.h:100:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:211:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:262:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:318:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:389:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:393:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/gobject/GMainLoopSource.cpp:470:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 12 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035906</commentid>
    <comment_count>52</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 05:01:04 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 238298 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238298&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/gobject/GMainLoopSource.cpp:85
&gt; &gt;&gt; +    ASSERT(m_deleteOnDestroy != DeleteOnDestroy || (m_status == Ready &amp;&amp; !m_context.source));
&gt; &gt; 
&gt; &gt; When a callback is scheduled and before dispatching, m_context.source is a valid pointer, so that cancel destroys the source before the callback is called, but the object is leaked. If cancel is called for a repeating source between two callback invocations, the same happens. That&apos;s why in current code cancel() deletes the object.
&gt; 
&gt; But this only affects delete-on-destroy GMainLoopSources and those should never be cancelled before or during dispatch, simply because you&apos;re not supposed to take the reference to the heap-allocated object and interact with it later, like this:
&gt; 
&gt;     GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
&gt;     source.schedule(...);
&gt;     ...
&gt;     source.cancel();
&gt; 
&gt; You can, but you&apos;re not supposed to. There might be some way of preventing this either at run-time with an assertion or ideally at compile-time. No clear idea about this at the moment, though.
&gt; 
&gt; 
&gt; This assertion only allows cancellation on a delete-on-destroy GMainLoopSource if there wasn&apos;t yet a callback scheduled on it:
&gt; 
&gt;     GMainLoopSource&amp; source = GMainLoopSource::createAndDeleteOnDestroy();
&gt;     source.cancel();
&gt; 
&gt; The assertion also allows the cancel() invocation from the destructor, at which point the callback was both scheduled and dispatched so m_status is Ready and m_context.source is null.

Since schedule is then the only allowed method on a delete on destroy source, what do you think about adding static schedule methods instead? Something like:

GMainLoopSource::scheduleAndDeleteOnDestroy() or even just GMainLoopSource::schedule() and assume the static members create a temp source that is deleted on destroy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035909</commentid>
    <comment_count>53</comment_count>
      <attachid>238304</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-18 05:28:53 -0700</bug_when>
    <thetext>Comment on attachment 238304
Patch

Ok, let&apos;s try again, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035911</commentid>
    <comment_count>54</comment_count>
      <attachid>238304</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 06:07:30 -0700</bug_when>
    <thetext>Comment on attachment 238304
Patch

Clearing flags on attachment: 238304

Committed r173720: &lt;http://trac.webkit.org/changeset/173720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035912</commentid>
    <comment_count>55</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-09-18 06:07:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236370</attachid>
            <date>2014-08-11 09:01:07 -0700</date>
            <delta_ts>2014-08-12 05:37:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140811090055.patch</filename>
            <type>text/plain</type>
            <size>17658</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzIzOTQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE0LTA4LTExICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGNhbiBiZSBkaXNwYXRjaGluZyB0YXNr
IG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1bGVk
IG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNlIG9j
Y3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2FsbGJh
Y2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lCisg
ICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAoY3Jl
YXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRpYWwg
c29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAgICAg
ICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFuIHRv
IGFkZCBiZXR0ZXIKKyAgICAgICAgYXNzZXJ0aW9ucywgc29tZSBtZWFuaW5nZnVsIGNvbW1lbnRz
IGFuZCByZXNlYXJjaCBhIHBvc3NpYmlsaXR5CisgICAgICAgIG9mIGNyZWF0aW5nIHRocmVhZC1z
cGVjaWZpYyBHTWFpbkxvb3BTb3VyY2Ugb2JqZWN0cyB0aGF0IHdvdWxkbid0CisgICAgICAgIHJl
cXVpcmUgdGhlIHVzZSBvZiBHTXV0ZXguCisKKyAgICAgICAgR1NvdXJjZSwgR0NhbmNlbGxhYmxl
IGFuZCBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0cyBhcmUgbm93IHBhY2tlZAorICAgICAgICBpbnRv
IGFuIGludGVybmFsIENvbnRleHQgc3RydWN0dXJlLiBXaXRoIGl0cyBtb3ZlIHNlbWFudGljcywg
aXQncworICAgICAgICBzaW1wbGUgdG8gYXQgdGhlIHRpbWUgb2YgZGlzcGF0Y2ggbW92ZSB0aGUg
Y3VycmVudCBjb250ZXh0IG91dCBvZgorICAgICAgICB0aGUgR01haW5Mb29wU291cmNlIG9iamVj
dCBpbiBjYXNlIHRoZSBkaXNwYXRjaCBjYXVzZXMgYSByZXNjaGVkdWxlCisgICAgICAgIG9uIHRo
YXQgc2FtZSBvYmplY3QuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSooKSBtZXRob2RzIGFu
ZCB0aGUgY2FuY2VsSW50ZXJuYWwoKSBtZXRob2QgY2FsbGVycworICAgICAgICBub3cgbG9jayB0
aGUgR011dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3NpbmcgdGhlIGRhdGEgYXQK
KyAgICAgICAgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRpc3BhdGNoIG1ldGhv
ZHMsIGJ1dCB0aG9zZSBkbworICAgICAgICB0aGUgZGlzcGF0Y2ggYW5kIHBvc3NpYmxlIGRlc3Ry
dWN0aW9uIGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAgICAgVGhlIGRpc3Bh
dGNoIGNhbiBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5Mb29wU291cmNlIG9i
amVjdCwKKyAgICAgICAgYW5kIGRlc3RydWN0aW9uIHByb2Nlc3MgY2FuIGxlYWQgdG8gdGhlIEdN
YWluTG9vcFNvdXJjZSBkZWxldGluZyBpdHNlbGYKKyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUg
ZG9uZSB3aXRoIGEgbG9ja2VkIG11dGV4LgorCisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5M
b29wU291cmNlLmNwcDoKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BT
b3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2Up
OgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKToKKyAgICAgICAg
KFdURjo6R01haW5Mb29wU291cmNlOjppc0FjdGl2ZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9v
cFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpjYW5jZWxJ
bnRlcm5hbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291
cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKToKKyAgICAgICAg
KFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkpOgorICAgICAgICAoV1RG
OjpHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9v
cFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpz
b2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveSk6
CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOgorCiAyMDE0LTA4LTEwICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgSGFzaFRh
YmxlJ3Mgb3BlcmF0b3I9IGFmdGVyIHIxNzIxNjcgcGVyIHJldmlldyBjb21tZW50cwpJbmRleDog
U291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAkocmV2aXNpb24gMTcy
Mzk0KQorKysgU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgVVNFKEdMSUIpCiAKICNpbmNsdWRlICJH
TWFpbkxvb3BTb3VyY2UuaCIKLQogI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQxLDUyICs0
MSw2MiBAQCBHTWFpbkxvb3BTb3VyY2UmIEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlCiBHTWFpbkxv
b3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSgpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShEb05v
dERlbGV0ZU9uRGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJlYWR5KQorICAgICwgbV9tdXRleChu
ZXcgR011dGV4KQogeworICAgIGdfbXV0ZXhfaW5pdChtX211dGV4KTsKIH0KIAogR01haW5Mb29w
U291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ry
b3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBtX3N0
YXR1cyhSZWFkeSkKKyAgICAsIG1fbXV0ZXgobmV3IEdNdXRleCkKIHsKKyAgICBnX211dGV4X2lu
aXQobV9tdXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCiB7
Ci0gICAgY2FuY2VsKCk7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBjYW5jZWxJbnRlcm5hbCgpOworICAgIH0KKworICAgIGdfbXV0ZXhfY2xl
YXIobV9tdXRleCk7CisgICAgZGVsZXRlIG1fbXV0ZXg7CiB9CiAKIGJvb2wgR01haW5Mb29wU291
cmNlOjppc1NjaGVkdWxlZCgpIGNvbnN0CiB7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKICAgICByZXR1cm4gbV9zdGF0dXMgPT0gU2NoZWR1bGVkOwogfQogCiBib29sIEdNYWlu
TG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAogeworICAgIEdNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CiAgICAgcmV0dXJuIG1fc3RhdHVzICE9IFJlYWR5OwogfQogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIEdNdXRleExv
Y2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKK30KKwordm9pZCBH
TWFpbkxvb3BTb3VyY2U6OmNhbmNlbEludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5z
b3VyY2UpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKICAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOwotICAgIG1fc291cmNlLnN3YXAoc291
cmNlKTsKKyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAg
IGlmIChtX2NhbmNlbGxhYmxlKQotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNl
bGxhYmxlLmdldCgpKTsKLSAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAg
ZGVzdHJveSgpOwotfQorICAgIGlmIChjb250ZXh0LmNhbmNlbGxhYmxlKQorICAgICAgICBnX2Nh
bmNlbGxhYmxlX2NhbmNlbChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKTsKIAotdm9pZCBHTWFp
bkxvb3BTb3VyY2U6OnJlc2V0KCkKLXsKLSAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291
cmNlID0gbnVsbHB0cjsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRD
YWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1f
ZGVzdHJveUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNh
bGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIH0K
IAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBu
YW1lLCBHU291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRl
eHQqIGNvbnRleHQpCkBAIC05NCw0MyArMTA0LDQ2IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZUlkbGVTb3VyY2UKICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1f
c3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3Nv
dXJjZV9uZXcoKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUp
OworICAgIG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7
CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CiAg
ICAgaWYgKHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKQotICAgICAgICBnX3Nv
dXJjZV9zZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKLSAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxs
cHRyKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAg
ICAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcHJpb3Jp
dHkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBz
b3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fY29u
dGV4dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlv
biwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwg
R01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fdm9pZENhbGxi
YWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0gV1RG
Ojptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBj
b250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4
dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9u
KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFs
KCk7CisgICAgbV9jb250ZXh0LmJvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Cisg
ICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKEdJT0NvbmRpdGlvbik+IGZ1bmN0aW9uLCBHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRp
dGlvbiBjb25kaXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBH
TWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxJbnRlcm5hbCgpOwogICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7CiAKLSAgICBtX3NvY2tl
dENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwotICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdS
ZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19zb2Nr
ZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgbV9jYW5jZWxsYWJsZS5nZXQoKSkp
OwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKLSAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHNvY2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHQuc29ja2V0
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuY2FuY2Vs
bGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgbV9jb250ZXh0LnNv
dXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9u
LCBtX2NvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZSht
X2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2so
bV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29j
a2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2go
bV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMg
c291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQpAQCAt
MTM4LDEwOSArMTUxLDE2OCBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0
U291CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVk
dWxlZDsKIAotICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUobV9z
b3VyY2UuZ2V0KCksIG5hbWUpOworICAgIEFTU0VSVChtX2NvbnRleHQuc291cmNlKTsKKyAgICBn
X3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAo
cHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQotICAgICAgICBnX3NvdXJjZV9zZXRfcHJp
b3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJh
Y2sobV9zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKLSAgICBn
X3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAgICAgICBnX3NvdXJj
ZV9zZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOworICAgIGdf
c291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlv
biwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fY29udGV4dC5zb3VyY2Uu
Z2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRl
ckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24s
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNl
X25ldyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVu
Y3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxJbnRlcm5h
bCgpOworICAgIG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXcoZGVsYXkuY291bnQoKSkpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6Om1v
dmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUo
ZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRl
cnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNv
bnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNv
bnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5j
ZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxh
eS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwot
ICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxJbnRlcm5hbCgpOworICAg
IG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXku
Y291bnQoKSkpOworICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rp
b24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1
bmN0aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwog
fQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNv
bmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1
bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9z
b3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3Vu
dCgpKSk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1f
ZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxJbnRlcm5hbCgpOworICAgIG1fY29u
dGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxh
eS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNl
Y29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95
RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBt
X3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNv
dW50KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAg
bV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9j
b250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRl
bGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1
bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ry
b3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0
KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCiB7Ci0gICAgaWYg
KCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuOworICAgIENvbnRleHQgY29udGV4dDsKIAotICAg
IEFTU0VSVChtX3ZvaWRDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxl
ZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwotCi0gICAgR1NvdXJjZSogc291cmNlID0g
bV9zb3VyY2UuZ2V0KCk7Ci0gICAgbV92b2lkQ2FsbGJhY2soKTsKLSAgICBpZiAoc291cmNlID09
IG1fc291cmNlLmdldCgpKQotICAgICAgICBkZXN0cm95KCk7CisgICAgeworICAgICAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2Up
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2Nv
bnRleHQpOworCisgICAgICAgIEFTU0VSVChjb250ZXh0LnZvaWRDYWxsYmFjayk7CisgICAgICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworICAgICAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoZWQ7CisgICAgfQorCisgICAgY29udGV4dC52b2lkQ2FsbGJhY2soKTsKKworICAgIGJvb2wg
c2hvdWxkRGVzdHJveSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tl
cihtX211dGV4KTsKKyAgICAgICAgc2hvdWxkRGVzdHJveSA9ICFtX2NvbnRleHQuc291cmNlOwor
ICAgIH0KKworICAgIGlmIChzaG91bGREZXN0cm95KQorICAgICAgICBkZXN0cm95KGNvbnRleHQu
ZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdl
dCgpKTsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjaygpCiB7Ci0gICAg
aWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENvbnRleHQgY29udGV4
dDsKKworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIFN0b3A7CisKKyAg
ICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworCisgICAgICAgIEFTU0VSVChj
b250ZXh0LmJvb2xDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVs
ZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0
Y2hlZDsKKyAgICB9CisKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9vbENhbGxiYWNrKCk7
CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIEdNdXRl
eExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAg
ICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQgPSBX
VEY6Om1vdmUoY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gQ29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQog
Ci0gICAgQVNTRVJUKG1fYm9vbENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2No
ZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0
Y2hlZDsKLQotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wg
cmV0dmFsID0gbV9ib29sQ2FsbGJhY2soKTsKLSAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0g
bV9zb3VyY2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ryb3koKTsKKyAgICBpZiAoc2hvdWxkRGVzdHJv
eSkKKyAgICAgICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgZ19zb3Vy
Y2VfZGVzdHJveShjb250ZXh0LnNvdXJjZS5nZXQoKSk7CiAKLSAgICByZXR1cm4gcmV0dmFsOwor
ICAgIHJldHVybiBTdG9wOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJh
Y2soR0lPQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJUKG1fc29j
a2V0Q2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0
dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIHsKKyAg
ICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIFN0b3A7CisKKyAgICAgICAgY29udGV4dCA9
IFdURjo6bW92ZShtX2NvbnRleHQpOworCisgICAgICAgIEFTU0VSVChjb250ZXh0LnNvY2tldENh
bGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1
cyA9PSBEaXNwYXRjaGVkKTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIH0K
IAotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChtX2NhbmNlbGxhYmxlLmdldCgp
KSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
Z19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpIHsK
KyAgICAgICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgICAgIGdfc291
cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOworICAgICAgICByZXR1cm4gU3RvcDsK
ICAgICB9CiAKLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsKLSAgICBib29s
IHJldHZhbCA9IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKLSAgICBpZiAoIXJldHZhbCAm
JiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ryb3koKTsKKyAgICBib29s
IHJldHZhbCA9IGNvbnRleHQuc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKworICAgIGJvb2wg
c2hvdWxkRGVzdHJveSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tl
cihtX211dGV4KTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgaWYgKCFtX2Nv
bnRleHQuc291cmNlKQorICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92ZShjb250
ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IHNob3VsZERlc3Ryb3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKLSAgICByZXR1cm4g
cmV0dmFsOworICAgIGlmIChzaG91bGREZXN0cm95KQorICAgICAgICBkZXN0cm95KGNvbnRleHQu
ZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdl
dCgpKTsKKworICAgIHJldHVybiBTdG9wOwogfQogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6ZGVz
dHJveSgpCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveShjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+JiBkZXN0cm95Q2FsbGJhY2spCiB7Ci0gICAgYXV0byBkZXN0cm95Q2FsbGJhY2sg
PSBXVEY6Om1vdmUobV9kZXN0cm95Q2FsbGJhY2spOwotICAgIGF1dG8gZGVsZXRlT25EZXN0cm95
ID0gbV9kZWxldGVPbkRlc3Ryb3k7Ci0gICAgcmVzZXQoKTsKKyAgICBtX3N0YXR1cyA9IFJlYWR5
OworICAgIERlbGV0ZU9uRGVzdHJveVR5cGUgZGVsZXRlT25EZXN0cm95ID0gbV9kZWxldGVPbkRl
c3Ryb3k7CisKICAgICBpZiAoZGVzdHJveUNhbGxiYWNrKQogICAgICAgICBkZXN0cm95Q2FsbGJh
Y2soKTsKIApJbmRleDogU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCShy
ZXZpc2lvbiAxNzIzOTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMyArNjUsMTMgQEAgcHJpdmF0ZToKIAogICAgIGVu
dW0gU3RhdHVzIHsgUmVhZHksIFNjaGVkdWxlZCwgRGlzcGF0Y2hlZCB9OwogCi0gICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgY2FuY2VsSW50ZXJuYWwoKTsKICAgICB2b2lkIHNjaGVkdWxlSWRs
ZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFp
bkNvbnRleHQqKTsKICAgICB2b2lkIHNjaGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBu
YW1lLCBHU291cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKICAgICB2b2lk
IHZvaWRDYWxsYmFjaygpOwogICAgIGJvb2wgYm9vbENhbGxiYWNrKCk7CiAgICAgYm9vbCBzb2Nr
ZXRDYWxsYmFjayhHSU9Db25kaXRpb24pOwotICAgIHZvaWQgZGVzdHJveSgpOworICAgIHZvaWQg
ZGVzdHJveShjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Jik7CiAKICAgICBzdGF0aWMgZ2Jv
b2xlYW4gdm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSopOwogICAgIHN0YXRpYyBn
Ym9vbGVhbiBib29sU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CkBAIC03OSwxMiAr
NzksMjAgQEAgcHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVzdHJveVR5cGUgbV9kZWxldGVPbkRl
c3Ryb3k7CiAgICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3Vy
Y2U7Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wg
KCk+IG1fYm9vbENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9u
KT4gbV9zb2NrZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZGVzdHJv
eUNhbGxiYWNrOworICAgIEdNdXRleCogbV9tdXRleDsKKworICAgIHN0cnVjdCBDb250ZXh0IHsK
KyAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dChDb250ZXh0JiYp
ID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dCYgb3BlcmF0b3I9KENvbnRleHQmJikgPSBkZWZh
dWx0OworCisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOworICAgICAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGJvb2xDYWxs
YmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBzb2NrZXRD
YWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95Q2FsbGJhY2s7
CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236441</attachid>
            <date>2014-08-12 05:37:30 -0700</date>
            <delta_ts>2014-08-14 02:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140812053718.patch</filename>
            <type>text/plain</type>
            <size>15852</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzI0NDUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE0LTA4LTEyICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDoKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFp
bkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BT
b3VyY2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsSW50
ZXJuYWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJj
ZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJjZSk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToKKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BT
b3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c29j
a2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmRlc3Ryb3kpOgor
ICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDoKKwogMjAxNC0wOC0xMiAgWmFuIERvYmVy
c2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2xlYW4gdXAgR011dGV4TG9j
a2VyCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShy
ZXZpc2lvbiAxNzI0NDApCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikKIAog
I2luY2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtNDIsMTcgKzQyLDI0IEBAIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkKICAg
ICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0
dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29w
U291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ry
b3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBtX3N0
YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UoKQogewotICAgIGNhbmNlbCgpOworICAgIHsKKyAg
ICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgY2FuY2VsSW50ZXJu
YWwoKTsKKyAgICB9CisKKyAgICBnX211dGV4X2NsZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBH
TWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QKQEAgLTY3LDI2ICs3NCwyNCBAQCBi
b29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIEdNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKK30KKwordm9pZCBHTWFpbkxv
b3BTb3VyY2U6OmNhbmNlbEludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2Up
IHsKKyAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOwotICAgIG1fc291cmNlLnN3YXAoc291cmNlKTsK
KyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIGlmICht
X2NhbmNlbGxhYmxlKQotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxl
LmdldCgpKTsKLSAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAgZGVzdHJv
eSgpOwotfQorICAgIGlmIChjb250ZXh0LmNhbmNlbGxhYmxlKQorICAgICAgICBnX2NhbmNlbGxh
YmxlX2NhbmNlbChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKTsKIAotdm9pZCBHTWFpbkxvb3BT
b3VyY2U6OnJlc2V0KCkKLXsKLSAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0g
bnVsbHB0cjsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFj
ayA9IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJv
eUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
KTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIH0KIAogdm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBH
U291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCkBAIC05NCw0MyArOTksNDYgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxl
SWRsZVNvdXJjZQogICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMg
PSBTY2hlZHVsZWQ7CiAKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25l
dygpKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAg
bV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBn
X3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAo
cHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3Nl
dF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwot
ICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdf
c291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7Cisg
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1
bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNv
dXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBX
VEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxJbnRlcm5hbCgpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUo
ZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVz
dHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQp
OwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewot
ICAgIGNhbmNlbCgpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
LSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAg
IEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAg
ICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Nv
bnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAg
c2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJv
b2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAo
R0lPQ29uZGl0aW9uKT4gZnVuY3Rpb24sIEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29u
dGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09
IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1fc29ja2V0Q2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7Ci0gICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2Nh
bmNlbGxhYmxlX25ldygpKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVh
dGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOwotICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
c29ja2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRh
Y2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAgIG1fY29udGV4dC5zb2NrZXRDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0g
YWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY29u
dGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRl
eHQuc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzb2NrZXRTb3Vy
Y2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRl
eHQuc291cmNlLmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VG
dW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC0xMzgsMTA5
ICsxNDYsMTY4IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3UKICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwog
Ci0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5n
ZXQoKSwgbmFtZSk7CisgICAgQVNTRVJUKG1fY29udGV4dC5zb3VyY2UpOworICAgIGdfc291cmNl
X3NldF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0
eSAhPSBHX1BSSU9SSVRZX0RFRkFVTFQpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eSht
X3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3Nv
dXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNl
X2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9w
cmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlz
LCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwg
Y29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNh
bmNlbCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7
Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7Cisg
ICAgbV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxh
eS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRl
c3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwot
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50
KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9k
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250
ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgp
KSk7CisgICAgbV9jb250ZXh0LmJvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Cisg
ICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVs
YXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24s
IEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9
IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsK
LSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNv
dXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50
KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
KyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAog
dm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBk
ZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNl
ID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkp
OwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ry
b3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQu
c291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291
bnQoKSkpOworICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24p
OworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0
aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQog
CiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291
cmNlKQotICAgICAgICByZXR1cm47CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJU
KG1fdm9pZENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKLSAg
ICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJj
ZS5nZXQoKTsKLSAgICBtX3ZvaWRDYWxsYmFjaygpOwotICAgIGlmIChzb3VyY2UgPT0gbV9zb3Vy
Y2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7
CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQudm9pZENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsK
KyAgICB9CisKKyAgICBjb250ZXh0LnZvaWRDYWxsYmFjaygpOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQor
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwog
fQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OworCisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAo
IW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBj
b250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQu
Ym9vbENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBt
X3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwor
ICAgIH0KKworICAgIGJvb2wgcmV0dmFsID0gY29udGV4dC5ib29sQ2FsbGJhY2soKTsKKworICAg
IGJvb2wgc2hvdWxkRGVzdHJveSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgaWYg
KCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92
ZShjb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBDb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNob3VsZERlc3Ryb3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKLSAgICBB
U1NFUlQobV9ib29sQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwot
Ci0gICAgR1NvdXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwg
PSBtX2Jvb2xDYWxsYmFjaygpOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJj
ZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmIChzaG91bGREZXN0cm95KQorICAg
ICAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0
cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIAotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0
dXJuIFN0b3A7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayhHSU9D
b25kaXRpb24gY29uZGl0aW9uKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9zb2NrZXRDYWxs
YmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBE
aXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgeworICAgICAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3Vy
Y2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjpt
b3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuc29ja2V0Q2FsbGJhY2sp
OworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERp
c3BhdGNoZWQpOworICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgfQogCi0gICAg
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7Ci0g
ICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAg
ICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICAgICAgZ19zb3VyY2VfZGVz
dHJveShjb250ZXh0LnNvdXJjZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTdG9wOwogICAgIH0K
IAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFs
ID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJj
ZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGJvb2wgcmV0dmFs
ID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dC5z
b3VyY2UpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOwor
ICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxk
RGVzdHJveSA9ICFtX2NvbnRleHQuc291cmNlOworICAgIH0KIAotICAgIHJldHVybiByZXR2YWw7
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwor
CisgICAgcmV0dXJuIFN0b3A7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkK
K3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4mIGRlc3Ryb3lDYWxsYmFjaykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2Rl
bGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOworICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAg
RGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsK
KwogICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCiAgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOwog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHJldmlzaW9u
IDE3MjQ0MCkKKysrIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Cit0eXBlZGVmIHVuaW9u
IF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNjUsMTMgKzY2LDEzIEBA
IHByaXZhdGU6CiAKICAgICBlbnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNo
ZWQgfTsKIAotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNhbmNlbEludGVybmFsKCk7CiAg
ICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMs
IGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5D
b250ZXh0Kik7CiAgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKICAgICBib29sIGJvb2xDYWxsYmFj
aygpOwogICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKLSAgICB2b2lkIGRl
c3Ryb3koKTsKKyAgICB2b2lkIGRlc3Ryb3koY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYp
OwogCiAgICAgc3RhdGljIGdib29sZWFuIHZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4gYm9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNv
dXJjZSopOwpAQCAtNzksMTIgKzgwLDIwIEBAIHByaXZhdGU6CiAKICAgICBEZWxldGVPbkRlc3Ry
b3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OwogICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBHUmVm
UHRyPEdTb3VyY2U+IG1fc291cmNlOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNl
bGxhYmxlOwotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV92b2lkQ2FsbGJhY2s7Ci0gICAg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBtX2Jvb2xDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKEdJT0NvbmRpdGlvbik+IG1fc29ja2V0Q2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBtX2Rlc3Ryb3lDYWxsYmFjazsKKyAgICBHTXV0ZXggbV9tdXRleDsKKworICAg
IHN0cnVjdCBDb250ZXh0IHsKKyAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICAgICAg
Q29udGV4dChDb250ZXh0JiYpID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dCYgb3BlcmF0b3I9
KENvbnRleHQmJikgPSBkZWZhdWx0OworCisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNl
OworICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKCk+IGJvb2xDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9D
b25kaXRpb24pPiBzb2NrZXRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBkZXN0cm95Q2FsbGJhY2s7CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236583</attachid>
            <date>2014-08-14 02:14:45 -0700</date>
            <delta_ts>2014-08-14 09:45:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140814021434.patch</filename>
            <type>text/plain</type>
            <size>23973</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzI1NzgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTA4LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisKKyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRh
c2tzIG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1
bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNl
IG9jY3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2Fs
bGJhY2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1l
CisgICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAo
Y3JlYXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRp
YWwgc29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAg
ICAgICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFu
IHRvIGFkZCBiZXR0ZXIKKyAgICAgICAgYXNzZXJ0aW9ucywgc29tZSBtZWFuaW5nZnVsIGNvbW1l
bnRzIGFuZCBsb29rIGF0IHRoZSBwb3NzaWJpbGl0eQorICAgICAgICBvZiBjcmVhdGluZyB0aHJl
YWQtc3BlY2lmaWMgR01haW5Mb29wU291cmNlIG9iamVjdHMgdGhhdCB3b3VsZG4ndAorICAgICAg
ICByZXF1aXJlIHRoZSB1c2Ugb2YgR011dGV4LgorCisgICAgICAgIEdTb3VyY2UsIEdDYW5jZWxs
YWJsZSBhbmQgc3RkOjpmdW5jdGlvbjw+IG9iamVjdHMgYXJlIG5vdyBwYWNrZWQKKyAgICAgICAg
aW50byBhbiBpbnRlcm5hbCBDb250ZXh0IHN0cnVjdHVyZS4gVXNpbmcgdGhlIEMrKzExIG1vdmUg
c2VtYW50aWNzCisgICAgICAgIGl0J3Mgc2ltcGxlIHRvLCBhdCB0aGUgdGltZSBvZiBkaXNwYXRj
aCwgbW92ZSB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgIG91dCBvZiB0aGUgR01haW5Mb29w
U291cmNlIG9iamVjdCBpbiBjYXNlIHRoZSBkaXNwYXRjaCBjYXVzZXMgYQorICAgICAgICByZXNj
aGVkdWxpbmcgb24gdGhhdCBzYW1lIG9iamVjdC4KKworICAgICAgICBBbGwgdGhlIHNjaGVkdWxl
KigpIG1ldGhvZHMgYW5kIHRoZSBjYW5jZWxJbnRlcm5hbCgpIG1ldGhvZCBjYWxsZXJzCisgICAg
ICAgIG5vdyBsb2NrIHRoZSBHTXV0ZXggdG8gZW5zdXJlIG5vIG9uZSBlbHNlIGlzIGFjY2Vzc2lu
ZyB0aGUgZGF0YSBhdAorICAgICAgICB0aGF0IG1vbWVudC4gU2ltaWxhciBnb2VzIGZvciB0aGUg
ZGlzcGF0Y2ggbWV0aG9kcywgYnV0IHRob3NlIGRvCisgICAgICAgIHRoZSBkaXNwYXRjaCBhbmQg
cG9zc2libGUgZGVzdHJ1Y3Rpb24gZHV0aWVzIHdpdGggdGhlIG11dGV4IHVubG9ja2VkLgorICAg
ICAgICBUaGUgZGlzcGF0Y2ggY2FuIGNhdXNlIHJlc2NoZWR1bGluZyBvbiB0aGUgc2FtZSBHTWFp
bkxvb3BTb3VyY2Ugb2JqZWN0LAorICAgICAgICB3aGljaCBtdXN0IG5vdCBiZSBkb25lIHdpdGgg
YSBsb2NrZWQgbXV0ZXguCisKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
Y3BwOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSk6Cisg
ICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29w
U291cmNlOjpjYW5jZWxJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291
cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkp
OgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01h
aW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOgorCiAyMDE0
LTA4LTEyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgRWxlbWVudHMgd2hvc2UgY29udGVudHMgc3RhcnQgd2l0aCBhbiBhc3RyYWwgVW5pY29kZSBz
eW1ib2wgZGlzYXBwZWFyIHdoZW4gQ1NTIGA6OmZpcnN0LWxldHRlcmAgaXMgYXBwbGllZCB0byB0
aGVtCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShy
ZXZpc2lvbiAxNzI1NzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikKIAog
I2luY2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtNDIsMTcgKzQyLDI0IEBAIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkKICAg
ICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0
dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29w
U291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ry
b3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBtX3N0
YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UoKQogewotICAgIGNhbmNlbCgpOworICAgIHsKKyAg
ICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgY2FuY2VsSW50ZXJu
YWwoKTsKKyAgICB9CisKKyAgICBnX211dGV4X2NsZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBH
TWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QKQEAgLTY3LDI2ICs3NCwyNCBAQCBi
b29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIEdNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKK30KKwordm9pZCBHTWFpbkxv
b3BTb3VyY2U6OmNhbmNlbEludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2Up
IHsKKyAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOwotICAgIG1fc291cmNlLnN3YXAoc291cmNlKTsK
KyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIGlmICht
X2NhbmNlbGxhYmxlKQotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxl
LmdldCgpKTsKLSAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAgZGVzdHJv
eSgpOwotfQorICAgIGlmIChjb250ZXh0LmNhbmNlbGxhYmxlKQorICAgICAgICBnX2NhbmNlbGxh
YmxlX2NhbmNlbChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKTsKIAotdm9pZCBHTWFpbkxvb3BT
b3VyY2U6OnJlc2V0KCkKLXsKLSAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0g
bnVsbHB0cjsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFj
ayA9IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJv
eUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
KTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIH0KIAogdm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBH
U291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCkBAIC05NCw0MyArOTksNDYgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxl
SWRsZVNvdXJjZQogICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMg
PSBTY2hlZHVsZWQ7CiAKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25l
dygpKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAg
bV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBn
X3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAo
cHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3Nl
dF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwot
ICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdf
c291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7Cisg
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1
bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNv
dXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBX
VEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxJbnRlcm5hbCgpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUo
ZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVz
dHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQp
OwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewot
ICAgIGNhbmNlbCgpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
LSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAg
IEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAg
ICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Nv
bnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAg
c2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJv
b2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAo
R0lPQ29uZGl0aW9uKT4gZnVuY3Rpb24sIEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29u
dGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09
IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1fc29ja2V0Q2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7Ci0gICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2Nh
bmNlbGxhYmxlX25ldygpKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVh
dGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOwotICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
c29ja2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRh
Y2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAgIG1fY29udGV4dC5zb2NrZXRDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0g
YWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY29u
dGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRl
eHQuc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzb2NrZXRTb3Vy
Y2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRl
eHQuc291cmNlLmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VG
dW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC0xMzgsMTA5
ICsxNDYsMTY4IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3UKICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwog
Ci0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5n
ZXQoKSwgbmFtZSk7CisgICAgQVNTRVJUKG1fY29udGV4dC5zb3VyY2UpOworICAgIGdfc291cmNl
X3NldF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0
eSAhPSBHX1BSSU9SSVRZX0RFRkFVTFQpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eSht
X3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3Nv
dXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNl
X2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9w
cmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlz
LCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwg
Y29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNh
bmNlbCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7
Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7Cisg
ICAgbV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxh
eS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRl
c3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwot
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50
KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9k
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250
ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgp
KSk7CisgICAgbV9jb250ZXh0LmJvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Cisg
ICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVs
YXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24s
IEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9
IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsK
LSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNv
dXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50
KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
KyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAog
dm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBk
ZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNl
ID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkp
OwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ry
b3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQu
c291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291
bnQoKSkpOworICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24p
OworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0
aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQog
CiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291
cmNlKQotICAgICAgICByZXR1cm47CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJU
KG1fdm9pZENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKLSAg
ICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJj
ZS5nZXQoKTsKLSAgICBtX3ZvaWRDYWxsYmFjaygpOwotICAgIGlmIChzb3VyY2UgPT0gbV9zb3Vy
Y2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7
CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQudm9pZENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsK
KyAgICB9CisKKyAgICBjb250ZXh0LnZvaWRDYWxsYmFjaygpOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQor
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwog
fQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OworCisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAo
IW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBj
b250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQu
Ym9vbENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBt
X3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwor
ICAgIH0KKworICAgIGJvb2wgcmV0dmFsID0gY29udGV4dC5ib29sQ2FsbGJhY2soKTsKKworICAg
IGJvb2wgc2hvdWxkRGVzdHJveSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgaWYg
KCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92
ZShjb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBDb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNob3VsZERlc3Ryb3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKLSAgICBB
U1NFUlQobV9ib29sQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwot
Ci0gICAgR1NvdXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwg
PSBtX2Jvb2xDYWxsYmFjaygpOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJj
ZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmIChzaG91bGREZXN0cm95KQorICAg
ICAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0
cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIAotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0
dXJuIFN0b3A7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayhHSU9D
b25kaXRpb24gY29uZGl0aW9uKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9zb2NrZXRDYWxs
YmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBE
aXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgeworICAgICAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3Vy
Y2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjpt
b3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuc29ja2V0Q2FsbGJhY2sp
OworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERp
c3BhdGNoZWQpOworICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgfQogCi0gICAg
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7Ci0g
ICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAg
ICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICAgICAgZ19zb3VyY2VfZGVz
dHJveShjb250ZXh0LnNvdXJjZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTdG9wOwogICAgIH0K
IAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFs
ID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJj
ZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGJvb2wgcmV0dmFs
ID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dC5z
b3VyY2UpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOwor
ICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxk
RGVzdHJveSA9ICFtX2NvbnRleHQuc291cmNlOworICAgIH0KIAotICAgIHJldHVybiByZXR2YWw7
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwor
CisgICAgcmV0dXJuIFN0b3A7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkK
K3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4mIGRlc3Ryb3lDYWxsYmFjaykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2Rl
bGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOworICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAg
RGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsK
KwogICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCiAgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOwog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHJldmlzaW9u
IDE3MjU3OCkKKysrIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Cit0eXBlZGVmIHVuaW9u
IF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNjUsMTMgKzY2LDEzIEBA
IHByaXZhdGU6CiAKICAgICBlbnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNo
ZWQgfTsKIAotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNhbmNlbEludGVybmFsKCk7CiAg
ICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMs
IGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5D
b250ZXh0Kik7CiAgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKICAgICBib29sIGJvb2xDYWxsYmFj
aygpOwogICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKLSAgICB2b2lkIGRl
c3Ryb3koKTsKKyAgICB2b2lkIGRlc3Ryb3koY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYp
OwogCiAgICAgc3RhdGljIGdib29sZWFuIHZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4gYm9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNv
dXJjZSopOwpAQCAtNzksMTIgKzgwLDIwIEBAIHByaXZhdGU6CiAKICAgICBEZWxldGVPbkRlc3Ry
b3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OwogICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBHUmVm
UHRyPEdTb3VyY2U+IG1fc291cmNlOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNl
bGxhYmxlOwotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV92b2lkQ2FsbGJhY2s7Ci0gICAg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBtX2Jvb2xDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKEdJT0NvbmRpdGlvbik+IG1fc29ja2V0Q2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBtX2Rlc3Ryb3lDYWxsYmFjazsKKyAgICBHTXV0ZXggbV9tdXRleDsKKworICAg
IHN0cnVjdCBDb250ZXh0IHsKKyAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICAgICAg
Q29udGV4dChDb250ZXh0JiYpID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dCYgb3BlcmF0b3I9
KENvbnRleHQmJikgPSBkZWZhdWx0OworCisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNl
OworICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKCk+IGJvb2xDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9D
b25kaXRpb24pPiBzb2NrZXRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBkZXN0cm95Q2FsbGJhY2s7CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3MjU3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI2IEBACisyMDE0LTA4LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0byByYWNlIGNv
bmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIHVuaXQgdGVzdCBmb3IgR01haW5Mb29wU291cmNlIHRoYXQgdGVzdHMgZGlmZmVyZW50
CisgICAgICAgIHR5cGVzIG9mIHJlc2NoZWR1bGluZyB0YXNrcyBvbiBhbHJlYWR5LWFjdGl2ZSBz
b3VyY2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
R01haW5Mb29wU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0
OjpHTWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6On5H
TWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6OnJ1bkxv
b3ApOgorICAgICAgICAoR01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToKKyAgICAgICAgKEdN
YWluTG9vcFNvdXJjZVRlc3Q6OnNvdXJjZSk6CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNl
QmFzaWNSZXNjaGVkdWxpbmcpOgorICAgICAgICAodGVzdEdNYWluTG9vcFNvdXJjZVJlZW50cmFu
dFJlc2NoZWR1bGluZyk6CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNlRGlmZmVyZW50VGhy
ZWFkUmVzY2hlZHVsaW5nKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFs
bCk6CisKIDIwMTQtMDgtMTMgIEFrb3MgS2lzcyAgPGFraXNzQGluZi51LXN6ZWdlZC5odT4KIAog
ICAgICAgICBbRUZMXSBCdW1wIHVwIGFuZCBwYXRjaCBkZXBlbmRlbmNpZXMgdG8gYWxsb3cgYnVp
bGRpbmcgZm9yIGFhcmNoNjQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MjU3OCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtOTMsNiArOTMsNyBAQCBBRERfV0syX1RFU1QoVGVzdERPTU5vZGUgVGVzdERPTU5v
ZGUuY3BwCiBBRERfV0syX1RFU1QoVGVzdERPTU5vZGVGaWx0ZXIgVGVzdERPTU5vZGVGaWx0ZXIu
Y3BwKQogQUREX1dLMl9URVNUKFRlc3RET01YUGF0aE5TUmVzb2x2ZXIgVGVzdERPTVhQYXRoTlNS
ZXNvbHZlci5jcHApCiBBRERfV0syX1RFU1QoVGVzdERvd25sb2FkcyBUZXN0RG93bmxvYWRzLmNw
cCkKK0FERF9XSzJfVEVTVChUZXN0R01haW5Mb29wU291cmNlIFRlc3RHTWFpbkxvb3BTb3VyY2Uu
Y3BwKQogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgVGVzdFdlYktpdEZh
dmljb25EYXRhYmFzZS5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdlYktpdEZpbmRDb250cm9sbGVy
IFRlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHApCiBBRERfV0syX1RFU1QoVGVzdEZyYW1lIFRl
c3RGcmFtZS5jcHApCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdEdNYWluTG9vcFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RHTWFpbkxvb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RHTWFpbkxvb3BTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
TWFpbi5oIgorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKworY2xhc3MgR01haW5Mb29wU291cmNlVGVzdCA6IHB1YmxpYyBUZXN0
IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEdNYWluTG9vcFNvdXJjZVRl
c3QpOworCisgICAgR01haW5Mb29wU291cmNlVGVzdCgpCisgICAgICAgIDogbV9tYWluTG9vcChn
X21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgeworICAgIH0KKworICAgIH5HTWFpbkxvb3BT
b3VyY2VUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHZvaWQgcnVuTG9vcCgpCisgICAgeworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2goKQorICAgIHsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHTWFpbkxv
b3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9CisKK3ByaXZhdGU6CisgICAg
R01haW5Mb29wKiBtX21haW5Mb29wOworICAgIEdNYWluTG9vcFNvdXJjZSBtX3NvdXJjZTsKK307
CisKK3N0YXRpYyB2b2lkIHRlc3RHTWFpbkxvb3BTb3VyY2VCYXNpY1Jlc2NoZWR1bGluZyhHTWFp
bkxvb3BTb3VyY2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0cnVjdCBUZXN0
aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QmIHRlc3Q7CisgICAgICAg
IGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrOworICAgIH0gY29udGV4dCA9IHsgKnRlc3QsIGZhbHNl
IH07CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRh
c2siLCBbXSB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfSk7CisKKyAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZd
IHsKKyAgICAgICAgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2sgPSB0cnVlOworICAgICAgICBj
b250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3QucnVuTG9v
cCgpOworICAgIGdfYXNzZXJ0KGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrKTsKK30KKworc3Rh
dGljIHZvaWQgdGVzdEdNYWluTG9vcFNvdXJjZVJlZW50cmFudFJlc2NoZWR1bGluZyhHTWFpbkxv
b3BTb3VyY2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0cnVjdCBUZXN0aW5n
Q29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QmIHRlc3Q7CisgICAgICAgIGJv
b2wgZmluaXNoZWRGaXJzdFRhc2s7CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrOwor
ICAgIH0gY29udGV4dCA9IHsgKnRlc3QsIGZhbHNlLCBmYWxzZSB9OworCisgICAgY29udGV4dC50
ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7
CisgICAgICAgICAgICBnX2Fzc2VydChjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnRleHQudGVzdC5maW5pc2goKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dC5maW5p
c2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3QucnVuTG9v
cCgpOworICAgIGdfYXNzZXJ0KGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sgJiYgY29udGV4dC5m
aW5pc2hlZFNlY29uZFRhc2spOworfQorCitzdGF0aWMgdm9pZCB0ZXN0R01haW5Mb29wU291cmNl
RGlmZmVyZW50VGhyZWFkUmVzY2hlZHVsaW5nKEdNYWluTG9vcFNvdXJjZVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01h
aW5Mb29wU291cmNlVGVzdCYgdGVzdDsKKyAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzazsK
KyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2s7CisgICAgfSBjb250ZXh0ID0geyAqdGVz
dCwgZmFsc2UsIGZhbHNlIH07CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUo
IltUZXN0XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICBnX3VzbGVlcCgxICogR19VU0VDX1BF
Ul9TRUMpOworICAgICAgICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9
KTsKKworICAgIGdfdGhyZWFkX25ldyhudWxscHRyLCBbXShncG9pbnRlciBkYXRhKSAtPiBncG9p
bnRlciB7CisgICAgICAgIGdfdXNsZWVwKDAuMjUgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAg
ICAgVGVzdGluZ0NvbnRleHQmIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8VGVzdGluZ0NvbnRleHQq
PihkYXRhKTsKKyAgICAgICAgZ19hc3NlcnQoIWNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOwor
CisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRh
c2siLCBbJl0geworICAgICAgICAgICAgZ19hc3NlcnQoY29udGV4dC5maW5pc2hlZEZpcnN0VGFz
ayk7CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAg
ICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGdf
dGhyZWFkX2V4aXQobnVsbHB0cik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0sICZj
b250ZXh0KTsKKworICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisgICAgZ19hc3NlcnQoY29u
dGV4dC5maW5pc2hlZEZpcnN0VGFzayAmJiBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBHTWFpbkxvb3BTb3VyY2VUZXN0OjphZGQoIkdN
YWluTG9vcFNvdXJjZSIsICJiYXNpYy1yZXNjaGVkdWxpbmciLCB0ZXN0R01haW5Mb29wU291cmNl
QmFzaWNSZXNjaGVkdWxpbmcpOworICAgIEdNYWluTG9vcFNvdXJjZVRlc3Q6OmFkZCgiR01haW5M
b29wU291cmNlIiwgInJlZW50cmFudC1yZXNjaGVkdWxpbmciLCB0ZXN0R01haW5Mb29wU291cmNl
UmVlbnRyYW50UmVzY2hlZHVsaW5nKTsKKyAgICBHTWFpbkxvb3BTb3VyY2VUZXN0OjphZGQoIkdN
YWluTG9vcFNvdXJjZSIsICJyZXNjaGVkdWxpbmctZnJvbS1kaWZmZXJlbnQtdGhyZWFkLWR1cmlu
Zy1kaXNwYXRjaCIsIHRlc3RHTWFpbkxvb3BTb3VyY2VEaWZmZXJlbnRUaHJlYWRSZXNjaGVkdWxp
bmcpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236592</attachid>
            <date>2014-08-14 09:45:35 -0700</date>
            <delta_ts>2014-08-15 06:04:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140814094523.patch</filename>
            <type>text/plain</type>
            <size>26811</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzI1OTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTA4LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisKKyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRh
c2tzIG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1
bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNl
IG9jY3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2Fs
bGJhY2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1l
CisgICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAo
Y3JlYXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRp
YWwgc29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAg
ICAgICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFu
IHRvIGFkZCBiZXR0ZXIKKyAgICAgICAgYXNzZXJ0aW9ucywgc29tZSBtZWFuaW5nZnVsIGNvbW1l
bnRzIGFuZCBsb29rIGF0IHRoZSBwb3NzaWJpbGl0eQorICAgICAgICBvZiBjcmVhdGluZyB0aHJl
YWQtc3BlY2lmaWMgR01haW5Mb29wU291cmNlIG9iamVjdHMgdGhhdCB3b3VsZG4ndAorICAgICAg
ICByZXF1aXJlIHRoZSB1c2Ugb2YgR011dGV4LgorCisgICAgICAgIEdTb3VyY2UsIEdDYW5jZWxs
YWJsZSBhbmQgc3RkOjpmdW5jdGlvbjw+IG9iamVjdHMgYXJlIG5vdyBwYWNrZWQKKyAgICAgICAg
aW50byBhbiBpbnRlcm5hbCBDb250ZXh0IHN0cnVjdHVyZS4gVXNpbmcgdGhlIEMrKzExIG1vdmUg
c2VtYW50aWNzCisgICAgICAgIGl0J3Mgc2ltcGxlIHRvLCBhdCB0aGUgdGltZSBvZiBkaXNwYXRj
aCwgbW92ZSB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgIG91dCBvZiB0aGUgR01haW5Mb29w
U291cmNlIG9iamVjdCBpbiBjYXNlIHRoZSBkaXNwYXRjaCBjYXVzZXMgYQorICAgICAgICByZXNj
aGVkdWxpbmcgb24gdGhhdCBzYW1lIG9iamVjdC4KKworICAgICAgICBBbGwgdGhlIHNjaGVkdWxl
KigpIG1ldGhvZHMgYW5kIHRoZSBjYW5jZWxJbnRlcm5hbCgpIG1ldGhvZCBjYWxsZXJzCisgICAg
ICAgIG5vdyBsb2NrIHRoZSBHTXV0ZXggdG8gZW5zdXJlIG5vIG9uZSBlbHNlIGlzIGFjY2Vzc2lu
ZyB0aGUgZGF0YSBhdAorICAgICAgICB0aGF0IG1vbWVudC4gU2ltaWxhciBnb2VzIGZvciB0aGUg
ZGlzcGF0Y2ggbWV0aG9kcywgYnV0IHRob3NlIGRvCisgICAgICAgIHRoZSBkaXNwYXRjaCBhbmQg
cG9zc2libGUgZGVzdHJ1Y3Rpb24gZHV0aWVzIHdpdGggdGhlIG11dGV4IHVubG9ja2VkLgorICAg
ICAgICBUaGUgZGlzcGF0Y2ggY2FuIGNhdXNlIHJlc2NoZWR1bGluZyBvbiB0aGUgc2FtZSBHTWFp
bkxvb3BTb3VyY2Ugb2JqZWN0LAorICAgICAgICB3aGljaCBtdXN0IG5vdCBiZSBkb25lIHdpdGgg
YSBsb2NrZWQgbXV0ZXguCisKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
Y3BwOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSk6Cisg
ICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29w
U291cmNlOjpjYW5jZWxJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291
cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkp
OgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01h
aW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOgorCiAyMDE0
LTA4LTEyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgRWxlbWVudHMgd2hvc2UgY29udGVudHMgc3RhcnQgd2l0aCBhbiBhc3RyYWwgVW5pY29kZSBz
eW1ib2wgZGlzYXBwZWFyIHdoZW4gQ1NTIGA6OmZpcnN0LWxldHRlcmAgaXMgYXBwbGllZCB0byB0
aGVtCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShy
ZXZpc2lvbiAxNzI1OTApCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikKIAog
I2luY2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtNDIsMTcgKzQyLDI0IEBAIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkKICAg
ICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0
dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29w
U291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ry
b3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBtX3N0
YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UoKQogewotICAgIGNhbmNlbCgpOworICAgIHsKKyAg
ICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgY2FuY2VsSW50ZXJu
YWwoKTsKKyAgICB9CisKKyAgICBnX211dGV4X2NsZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBH
TWFpbkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QKQEAgLTY3LDI2ICs3NCwyNCBAQCBi
b29sIEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIEdNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKK30KKwordm9pZCBHTWFpbkxv
b3BTb3VyY2U6OmNhbmNlbEludGVybmFsKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2Up
IHsKKyAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOwotICAgIG1fc291cmNlLnN3YXAoc291cmNlKTsK
KyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIGlmICht
X2NhbmNlbGxhYmxlKQotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxl
LmdldCgpKTsKLSAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAgZGVzdHJv
eSgpOwotfQorICAgIGlmIChjb250ZXh0LmNhbmNlbGxhYmxlKQorICAgICAgICBnX2NhbmNlbGxh
YmxlX2NhbmNlbChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKTsKIAotdm9pZCBHTWFpbkxvb3BT
b3VyY2U6OnJlc2V0KCkKLXsKLSAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0g
bnVsbHB0cjsKLSAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFj
ayA9IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJv
eUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
KTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIH0KIAogdm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBH
U291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCkBAIC05NCw0MyArOTksNDYgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxl
SWRsZVNvdXJjZQogICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMg
PSBTY2hlZHVsZWQ7CiAKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25l
dygpKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAg
bV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBn
X3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAo
cHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3Nl
dF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwot
ICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdf
c291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7Cisg
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1
bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNv
dXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBX
VEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxJbnRlcm5hbCgpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUo
ZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVz
dHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQp
OwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewot
ICAgIGNhbmNlbCgpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
LSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAg
IEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAg
ICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2Nv
bnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAg
c2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJv
b2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAo
R0lPQ29uZGl0aW9uKT4gZnVuY3Rpb24sIEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29u
dGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09
IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1fc29ja2V0Q2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7Ci0gICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2Nh
bmNlbGxhYmxlX25ldygpKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVh
dGVfc291cmNlKHNvY2tldCwgY29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOwotICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
c29ja2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRh
Y2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAgIG1fY29udGV4dC5zb2NrZXRDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0g
YWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY29u
dGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRl
eHQuc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzb2NrZXRTb3Vy
Y2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRl
eHQuc291cmNlLmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VG
dW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC0xMzgsMTA5
ICsxNDYsMTY4IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3UKICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwog
Ci0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5n
ZXQoKSwgbmFtZSk7CisgICAgQVNTRVJUKG1fY29udGV4dC5zb3VyY2UpOworICAgIGdfc291cmNl
X3NldF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0
eSAhPSBHX1BSSU9SSVRZX0RFRkFVTFQpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eSht
X3NvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3Nv
dXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNl
X2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9w
cmlvcml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlz
LCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwg
Y29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXko
Y29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNh
bmNlbCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7
Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7Cisg
ICAgbV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxh
eS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRl
c3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwot
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50
KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9k
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250
ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgp
KSk7CisgICAgbV9jb250ZXh0LmJvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Cisg
ICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVs
YXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24s
IEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9
IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsK
LSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNv
dXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50
KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
KyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAog
dm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBk
ZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlv
biwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNl
ID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkp
OwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ry
b3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQu
c291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291
bnQoKSkpOworICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24p
OworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0
aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQog
CiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291
cmNlKQotICAgICAgICByZXR1cm47CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJU
KG1fdm9pZENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKLSAg
ICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJj
ZS5nZXQoKTsKLSAgICBtX3ZvaWRDYWxsYmFjaygpOwotICAgIGlmIChzb3VyY2UgPT0gbV9zb3Vy
Y2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tl
ciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7
CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQudm9pZENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsK
KyAgICB9CisKKyAgICBjb250ZXh0LnZvaWRDYWxsYmFjaygpOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQor
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwog
fQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OworCisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAo
IW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBj
b250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQu
Ym9vbENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBt
X3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwor
ICAgIH0KKworICAgIGJvb2wgcmV0dmFsID0gY29udGV4dC5ib29sQ2FsbGJhY2soKTsKKworICAg
IGJvb2wgc2hvdWxkRGVzdHJveSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgaWYg
KCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92
ZShjb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBDb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNob3VsZERlc3Ryb3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKLSAgICBB
U1NFUlQobV9ib29sQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwot
Ci0gICAgR1NvdXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwg
PSBtX2Jvb2xDYWxsYmFjaygpOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJj
ZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmIChzaG91bGREZXN0cm95KQorICAg
ICAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0
cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIAotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0
dXJuIFN0b3A7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayhHSU9D
b25kaXRpb24gY29uZGl0aW9uKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9zb2NrZXRDYWxs
YmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBE
aXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgeworICAgICAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3Vy
Y2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjpt
b3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuc29ja2V0Q2FsbGJhY2sp
OworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERp
c3BhdGNoZWQpOworICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgfQogCi0gICAg
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7Ci0g
ICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAg
ICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICAgICAgZ19zb3VyY2VfZGVz
dHJveShjb250ZXh0LnNvdXJjZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTdG9wOwogICAgIH0K
IAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFs
ID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJj
ZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGJvb2wgcmV0dmFs
ID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOworCisgICAgYm9vbCBzaG91bGRE
ZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dC5z
b3VyY2UpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOwor
ICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxk
RGVzdHJveSA9ICFtX2NvbnRleHQuc291cmNlOworICAgIH0KIAotICAgIHJldHVybiByZXR2YWw7
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwor
CisgICAgcmV0dXJuIFN0b3A7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkK
K3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4mIGRlc3Ryb3lDYWxsYmFjaykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2Rl
bGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOworICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAg
RGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsK
KwogICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCiAgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOwog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHJldmlzaW9u
IDE3MjU5MCkKKysrIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Cit0eXBlZGVmIHVuaW9u
IF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNjUsMTMgKzY2LDEzIEBA
IHByaXZhdGU6CiAKICAgICBlbnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNo
ZWQgfTsKIAotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNhbmNlbEludGVybmFsKCk7CiAg
ICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMs
IGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRT
b3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5D
b250ZXh0Kik7CiAgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKICAgICBib29sIGJvb2xDYWxsYmFj
aygpOwogICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKLSAgICB2b2lkIGRl
c3Ryb3koKTsKKyAgICB2b2lkIGRlc3Ryb3koY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYp
OwogCiAgICAgc3RhdGljIGdib29sZWFuIHZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3Vy
Y2UqKTsKICAgICBzdGF0aWMgZ2Jvb2xlYW4gYm9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNv
dXJjZSopOwpAQCAtNzksMTIgKzgwLDIwIEBAIHByaXZhdGU6CiAKICAgICBEZWxldGVPbkRlc3Ry
b3lUeXBlIG1fZGVsZXRlT25EZXN0cm95OwogICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBHUmVm
UHRyPEdTb3VyY2U+IG1fc291cmNlOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNl
bGxhYmxlOwotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV92b2lkQ2FsbGJhY2s7Ci0gICAg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBtX2Jvb2xDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKEdJT0NvbmRpdGlvbik+IG1fc29ja2V0Q2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBtX2Rlc3Ryb3lDYWxsYmFjazsKKyAgICBHTXV0ZXggbV9tdXRleDsKKworICAg
IHN0cnVjdCBDb250ZXh0IHsKKyAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICAgICAg
Q29udGV4dChDb250ZXh0JiYpID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dCYgb3BlcmF0b3I9
KENvbnRleHQmJikgPSBkZWZhdWx0OworCisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNl
OworICAgICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKCk+IGJvb2xDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9D
b25kaXRpb24pPiBzb2NrZXRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBkZXN0cm95Q2FsbGJhY2s7CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3MjU5MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMyIEBACisyMDE0LTA4LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0byByYWNlIGNv
bmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIHVuaXQgdGVzdCBmb3IgR01haW5Mb29wU291cmNlIHRoYXQgdGVzdHMgZGlmZmVyZW50
CisgICAgICAgIHR5cGVzIG9mIHJlc2NoZWR1bGluZyB0YXNrcyBvbiBhbHJlYWR5LWFjdGl2ZSBz
b3VyY2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5j
cHA6IEFkZGVkLgorICAgICAgICAoR01haW5Mb29wU291cmNlVGVzdDo6R01haW5Mb29wU291cmNl
VGVzdCk6CisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0Ojp+R01haW5Mb29wU291cmNlVGVz
dCk6CisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0OjpydW5Mb29wKToKKyAgICAgICAgKEdN
YWluTG9vcFNvdXJjZVRlc3Q6OmZpbmlzaCk6CisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0
Ojpzb3VyY2UpOgorICAgICAgICAodGVzdEdNYWluTG9vcFNvdXJjZUJhc2ljUmVzY2hlZHVsaW5n
KToKKyAgICAgICAgKHRlc3RHTWFpbkxvb3BTb3VyY2VSZWVudHJhbnRSZXNjaGVkdWxpbmcpOgor
ICAgICAgICAodGVzdEdNYWluTG9vcFNvdXJjZURpZmZlcmVudFRocmVhZFJlc2NoZWR1bGluZyk6
CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6R01haW5Mb29wU291cmNlVGVzdCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojp+R01haW5Mb29wU291
cmNlVGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojpy
dW5Mb29wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OmZp
bmlzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojpzb3Vy
Y2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTQtMDgtMTQgIFphbiBE
b2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEluaXRpYWxpemUgYSBz
ZXBhcmF0ZSB2YXJpYWJsZSAoVGVzdFdURl9TT1VSQ0VTKSB3aXRoIHRoZSBsaXN0IG9mIGZpbGVz
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDE3MjU5
MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNiw1ICsxMzYsNiBAQCBzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQ
Uk9QRVJUCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVElFUyBSVU5U
SU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0vV2ViQ29yZSkKIAogbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCisgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9nb2JqZWN0L0dVbmlxdWVQdHIuY3BwCiAp
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29i
amVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKworI2lmIDAKKworY2xhc3MgR01haW5Mb29w
U291cmNlVGVzdCA6IHB1YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEdNYWluTG9vcFNvdXJjZVRlc3QpOworCisgICAgR01haW5Mb29wU291cmNlVGVzdCgp
CisgICAgICAgIDogbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgewor
ICAgIH0KKworICAgIH5HTWFpbkxvb3BTb3VyY2VUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFp
bl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcnVuTG9vcCgpCisg
ICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAg
dm9pZCBmaW5pc2goKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICBHTWFpbkxvb3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291
cmNlOyB9CisKK3ByaXZhdGU6CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIEdNYWlu
TG9vcFNvdXJjZSBtX3NvdXJjZTsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RHTWFpbkxvb3BTb3Vy
Y2VCYXNpY1Jlc2NoZWR1bGluZyhHTWFpbkxvb3BTb3VyY2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNv
dXJjZVRlc3QmIHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrOworICAgIH0g
Y29udGV4dCA9IHsgKnRlc3QsIGZhbHNlIH07CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCku
c2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbXSB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7CisgICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUo
IltUZXN0XSBTZWNvbmRUYXNrIiwgWyZdIHsKKyAgICAgICAgY29udGV4dC5maW5pc2hlZFNlY29u
ZFRhc2sgPSB0cnVlOworICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgfSk7CisK
KyAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworICAgIGdfYXNzZXJ0KGNvbnRleHQuZmluaXNo
ZWRTZWNvbmRUYXNrKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEdNYWluTG9vcFNvdXJjZVJlZW50
cmFudFJlc2NoZWR1bGluZyhHTWFpbkxvb3BTb3VyY2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJj
ZVRlc3QmIHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2s7CisgICAgICAgIGJv
b2wgZmluaXNoZWRTZWNvbmRUYXNrOworICAgIH0gY29udGV4dCA9IHsgKnRlc3QsIGZhbHNlLCBm
YWxzZSB9OworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmly
c3RUYXNrIiwgWyZdIHsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJb
VGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7CisgICAgICAgICAgICBnX2Fzc2VydChjb250ZXh0LmZp
bmlzaGVkRmlyc3RUYXNrKTsKKyAgICAgICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNr
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRleHQudGVzdC5maW5pc2goKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisK
KyAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworICAgIGdfYXNzZXJ0KGNvbnRleHQuZmluaXNo
ZWRGaXJzdFRhc2sgJiYgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0R01haW5Mb29wU291cmNlRGlmZmVyZW50VGhyZWFkUmVzY2hlZHVsaW5nKEdNYWlu
TG9vcFNvdXJjZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RydWN0IFRlc3Rp
bmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCYgdGVzdDsKKyAgICAgICAg
Ym9vbCBmaW5pc2hlZEZpcnN0VGFzazsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2s7
CisgICAgfSBjb250ZXh0ID0geyAqdGVzdCwgZmFsc2UsIGZhbHNlIH07CisKKyAgICBjb250ZXh0
LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0geworICAgICAg
ICBnX3VzbGVlcCgxICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBjb250ZXh0LmZpbmlzaGVk
Rmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGdfdGhyZWFkX25ldyhudWxscHRyLCBb
XShncG9pbnRlciBkYXRhKSAtPiBncG9pbnRlciB7CisgICAgICAgIGdfdXNsZWVwKDAuMjUgKiBH
X1VTRUNfUEVSX1NFQyk7CisKKyAgICAgICAgVGVzdGluZ0NvbnRleHQmIGNvbnRleHQgPSAqc3Rh
dGljX2Nhc3Q8VGVzdGluZ0NvbnRleHQqPihkYXRhKTsKKyAgICAgICAgZ19hc3NlcnQoIWNvbnRl
eHQuZmluaXNoZWRGaXJzdFRhc2spOworCisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5z
Y2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0geworICAgICAgICAgICAgZ19hc3NlcnQo
Y29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVk
U2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGdfdGhyZWFkX2V4aXQobnVsbHB0cik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0sICZjb250ZXh0KTsKKworICAgIGNvbnRleHQudGVzdC5ydW5M
b29wKCk7CisgICAgZ19hc3NlcnQoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayAmJiBjb250ZXh0
LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBHTWFp
bkxvb3BTb3VyY2VUZXN0OjphZGQoIkdNYWluTG9vcFNvdXJjZSIsICJiYXNpYy1yZXNjaGVkdWxp
bmciLCB0ZXN0R01haW5Mb29wU291cmNlQmFzaWNSZXNjaGVkdWxpbmcpOworICAgIEdNYWluTG9v
cFNvdXJjZVRlc3Q6OmFkZCgiR01haW5Mb29wU291cmNlIiwgInJlZW50cmFudC1yZXNjaGVkdWxp
bmciLCB0ZXN0R01haW5Mb29wU291cmNlUmVlbnRyYW50UmVzY2hlZHVsaW5nKTsKKyAgICBHTWFp
bkxvb3BTb3VyY2VUZXN0OjphZGQoIkdNYWluTG9vcFNvdXJjZSIsICJyZXNjaGVkdWxpbmctZnJv
bS1kaWZmZXJlbnQtdGhyZWFkLWR1cmluZy1kaXNwYXRjaCIsIHRlc3RHTWFpbkxvb3BTb3VyY2VE
aWZmZXJlbnRUaHJlYWRSZXNjaGVkdWxpbmcpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30K
KworI2VuZGlmCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgR01haW5Mb29w
U291cmNlVGVzdCB7CitwdWJsaWM6CisgICAgR01haW5Mb29wU291cmNlVGVzdCgpCisgICAgICAg
IDogbV9tYWluTG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgeworICAgIH0KKwor
ICAgIH5HTWFpbkxvb3BTb3VyY2VUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3Vu
cmVmKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcnVuTG9vcCgpCisgICAgeworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBmaW5p
c2goKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBHTWFpbkxvb3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9CisK
K3ByaXZhdGU6CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIEdNYWluTG9vcFNvdXJj
ZSBtX3NvdXJjZTsKK307CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNSZXNjaGVk
dWxpbmcpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29w
U291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNl
OworICAgIH0gY29udGV4dDsKKworICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgi
W1Rlc3RdIEZpcnN0VGFzayIsIFtdIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNv
bmRUYXNrIiwgWyZdIHsKKyAgICAgICAgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2sgPSB0cnVl
OworICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgfSk7CisKKyAgICBjb250ZXh0
LnRlc3QucnVuTG9vcCgpOworICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7
Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50UmVzY2hlZHVsaW5nKQor
eworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRl
c3QgdGVzdDsKKyAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOworICAgICAg
ICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0gY29udGV4dDsKKworICAg
IGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEZpcnN0VGFzayIsIFsmXSB7
CisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRh
c2siLCBbJl0geworICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sp
OworICAgICAgICAgICAgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2sgPSB0cnVlOworICAgICAg
ICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAgICB9KTsKKworICAgICAgICBjb250
ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGNvbnRleHQudGVz
dC5ydW5Mb29wKCk7CisgICAgQVNTRVJUKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sgJiYgY29u
dGV4dC5maW5pc2hlZFNlY29uZFRhc2spOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2Us
IFJlc2NoZWR1bGluZ0Zyb21EaWZmZXJlbnRUaHJlYWQpCit7CisgICAgc3RydWN0IFRlc3RpbmdD
b250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29s
IGZpbmlzaGVkRmlyc3RUYXNrOworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKKyAg
ICB9IGNvbnRleHQ7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0
XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICBnX3VzbGVlcCgxICogR19VU0VDX1BFUl9TRUMp
OworICAgICAgICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKwor
ICAgIGdfdGhyZWFkX25ldyhudWxscHRyLCBbXShncG9pbnRlciBkYXRhKSAtPiBncG9pbnRlciB7
CisgICAgICAgIGdfdXNsZWVwKDAuMjUgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAgICAgVGVz
dGluZ0NvbnRleHQmIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8VGVzdGluZ0NvbnRleHQqPihkYXRh
KTsKKyAgICAgICAgQVNTRVJUKCFjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKworICAgICAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZd
IHsKKyAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnRleHQudGVzdC5maW5pc2goKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ190aHJlYWRfZXhp
dChudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwgJmNvbnRleHQpOwor
CisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBBU1NFUlQoY29udGV4dC5maW5pc2hl
ZEZpcnN0VGFzayAmJiBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236649</attachid>
            <date>2014-08-15 06:05:11 -0700</date>
            <delta_ts>2014-08-28 09:16:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140815060500.patch</filename>
            <type>text/plain</type>
            <size>23389</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzI2MjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE0LTA4LTE1ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisKKyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRh
c2tzIG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1
bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNl
IG9jY3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2Fs
bGJhY2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1l
CisgICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAo
Y3JlYXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRp
YWwgc29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAg
ICAgICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFu
IHRvIGFkZCBiZXR0ZXIKKyAgICAgICAgYXNzZXJ0aW9ucywgc29tZSBtZWFuaW5nZnVsIGNvbW1l
bnRzIGFuZCBsb29rIGF0IHRoZSBwb3NzaWJpbGl0eQorICAgICAgICBvZiBjcmVhdGluZyB0aHJl
YWQtc3BlY2lmaWMgR01haW5Mb29wU291cmNlIG9iamVjdHMgdGhhdCB3b3VsZG4ndAorICAgICAg
ICByZXF1aXJlIHRoZSB1c2Ugb2YgR011dGV4LgorCisgICAgICAgIEdTb3VyY2UsIEdDYW5jZWxs
YWJsZSBhbmQgc3RkOjpmdW5jdGlvbjw+IG9iamVjdHMgYXJlIG5vdyBwYWNrZWQKKyAgICAgICAg
aW50byBhbiBpbnRlcm5hbCBDb250ZXh0IHN0cnVjdHVyZS4gVXNpbmcgdGhlIEMrKzExIG1vdmUg
c2VtYW50aWNzCisgICAgICAgIGl0J3Mgc2ltcGxlIHRvLCBhdCB0aGUgdGltZSBvZiBkaXNwYXRj
aCwgbW92ZSB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgIG91dCBvZiB0aGUgR01haW5Mb29w
U291cmNlIG9iamVjdCBpbiBjYXNlIHRoZSBkaXNwYXRjaCBjYXVzZXMgYQorICAgICAgICByZXNj
aGVkdWxpbmcgb24gdGhhdCBzYW1lIG9iamVjdC4KKworICAgICAgICBBbGwgdGhlIHNjaGVkdWxl
KigpIG1ldGhvZHMgYW5kIHRoZSBjYW5jZWxJbnRlcm5hbCgpIG1ldGhvZCBjYWxsZXJzCisgICAg
ICAgIG5vdyBsb2NrIHRoZSBHTXV0ZXggdG8gZW5zdXJlIG5vIG9uZSBlbHNlIGlzIGFjY2Vzc2lu
ZyB0aGUgZGF0YSBhdAorICAgICAgICB0aGF0IG1vbWVudC4gU2ltaWxhciBnb2VzIGZvciB0aGUg
ZGlzcGF0Y2ggbWV0aG9kcywgYnV0IHRob3NlIGRvCisgICAgICAgIHRoZSBkaXNwYXRjaCBhbmQg
cG9zc2libGUgZGVzdHJ1Y3Rpb24gZHV0aWVzIHdpdGggdGhlIG11dGV4IHVubG9ja2VkLgorICAg
ICAgICBUaGUgZGlzcGF0Y2ggY2FuIGNhdXNlIHJlc2NoZWR1bGluZyBvbiB0aGUgc2FtZSBHTWFp
bkxvb3BTb3VyY2Ugb2JqZWN0LAorICAgICAgICB3aGljaCBtdXN0IG5vdCBiZSBkb25lIHdpdGgg
YSBsb2NrZWQgbXV0ZXguCisKKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
Y3BwOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZSk6Cisg
ICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKToKKyAgICAgICAgKFdURjo6R01haW5Mb29w
U291cmNlOjpjYW5jZWxJbnRlcm5hbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291
cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkp
OgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjayk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01h
aW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOgorCiAyMDE0
LTA4LTE0ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBDU1MgSklUOiBjb21waWxlIHRoZSA6ZW1wdHkgcHNldWRvIGNsYXNzCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShyZXZpc2lvbiAxNzI2MjUpCisr
KyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikKIAogI2luY2x1ZGUgIkdNYWluTG9v
cFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDIsMTcgKzQyLDI0IEBA
IEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkKICAgICA6IG1fZGVsZXRlT25EZXN0
cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9zdGF0dXMoUmVhZHkpCiB7CisgICAg
Z19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BT
b3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRlc3Ryb3kpCiAgICAgOiBtX2RlbGV0
ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBtX3N0YXR1cyhSZWFkeSkKIHsKKyAg
ICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxv
b3BTb3VyY2UoKQogewotICAgIGNhbmNlbCgpOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICB9CisKKyAg
ICBnX211dGV4X2NsZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6Omlz
U2NoZWR1bGVkKCkgY29uc3QKQEAgLTY3LDI2ICs3NCwyNCBAQCBib29sIEdNYWluTG9vcFNvdXJj
ZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsKCkKIHsK
LSAgICBpZiAoIW1fc291cmNlKQorICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7Cisg
ICAgY2FuY2VsSW50ZXJuYWwoKTsKK30KKwordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbElu
dGVybmFsKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpIHsKKyAgICAgICAgbV9zdGF0
dXMgPSBSZWFkeTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEdSZWZQdHI8R1NvdXJj
ZT4gc291cmNlOwotICAgIG1fc291cmNlLnN3YXAoc291cmNlKTsKKyAgICBDb250ZXh0IGNvbnRl
eHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIGlmIChtX2NhbmNlbGxhYmxlKQotICAg
ICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKLSAgICBnX3Nv
dXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7Ci0gICAgZGVzdHJveSgpOwotfQorICAgIGlmIChj
b250ZXh0LmNhbmNlbGxhYmxlKQorICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChjb250ZXh0
LmNhbmNlbGxhYmxlLmdldCgpKTsKIAotdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KCkKLXsK
LSAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0gbnVsbHB0cjsKLSAgICBtX2Nh
bmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAg
bV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gbnVsbHB0
cjsKKyAgICBkZXN0cm95KGNvbnRleHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9k
ZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VG
dW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC05NCw0MyAr
OTksNDYgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZQogICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7CiAKLSAg
ICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKLSAgICBnX3NvdXJj
ZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgbV9jb250ZXh0LnNvdXJjZSA9
IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZSht
X2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAocHJpb3JpdHkgIT0gR19QUklP
UklUWV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJj
ZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5n
ZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFj
aChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0
eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2Nh
bGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxs
cHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4
dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1l
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24p
OwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7Cisg
ICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxJbnRlcm5hbCgpOwor
ICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1f
Y29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAg
ICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
dm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29s
ICgpPiBmdW5jdGlvbiwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ry
b3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAg
IG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxs
YmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQuYm9vbENh
bGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxi
YWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVJZGxlU291cmNl
KG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayks
IHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxl
KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gZnVu
Y3Rpb24sIEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICBjYW5jZWwoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNh
bmNlbEludGVybmFsKCk7CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0
YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1fc29ja2V0Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVu
Y3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bik7Ci0gICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsK
LSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldCwg
Y29uZGl0aW9uLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUo
bV9zb3VyY2UuZ2V0KCksIG5hbWUpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJj
ZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29ja2V0U291cmNlQ2FsbGJh
Y2spLCB0aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCks
IGNvbnRleHQpOworICAgIG1fY29udGV4dC5zb2NrZXRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOworICAgIG1fY29udGV4dC5jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNl
bGxhYmxlX25ldygpKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0
X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY29udGV4dC5jYW5jZWxsYWJsZS5n
ZXQoKSkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5h
bWUpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzb2NrZXRTb3VyY2VDYWxsYmFjayksIHRoaXMs
IG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgpLCBj
b250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJj
ZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9y
aXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC0xMzgsMTA5ICsxNDYsMTY4IEBAIHZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3UKICAgICBBU1NFUlQobV9zdGF0dXMg
PT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgQVNTRVJUKG1fc291
cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAg
QVNTRVJUKG1fY29udGV4dC5zb3VyY2UpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAhPSBHX1BSSU9SSVRZX0RF
RkFVTFQpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJp
b3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNl
RnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5n
ZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQu
c291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29u
dGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBn
X3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5j
dGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291
cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKLSAg
ICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNvdXJj
ZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7CisgICAg
bV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250
ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwogICAgIHNj
aGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2
b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5M
b29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5j
dGlvbjxib29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwg
aW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01h
aW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNlID0gYWRv
cHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKLSAgICBtX2Jvb2xD
YWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBX
VEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0
R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0
LmJvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ry
b3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGlt
ZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNl
Q2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNl
OjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVv
dXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKLSAgICBtX3ZvaWRDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1v
dmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgIGNhbmNlbEludGVybmFsKCk7CisgICAgbV9jb250ZXh0LnNvdXJjZSA9IGFkb3B0R1JlZihn
X3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRl
eHQudm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVz
dHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVU
aW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3Vy
Y2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3Vy
Y2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJv
b2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBj
b250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGlt
ZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOwotICAgIG1fYm9vbENhbGxi
YWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgY2FuY2VsSW50ZXJuYWwoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVm
KGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOworICAgIG1fY29u
dGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5k
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVs
ZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNv
dXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6dm9pZENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1
cm47CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJUKG1fdm9pZENhbGxiYWNrKTsK
LSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsKLSAgICBtX3Zv
aWRDYWxsYmFjaygpOwotICAgIGlmIChzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCi0gICAgICAg
IGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJU
KGNvbnRleHQudm9pZENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVk
dWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKKyAgICB9CisKKyAgICBjb250
ZXh0LnZvaWRDYWxsYmFjaygpOworCisgICAgYm9vbCBzaG91bGREZXN0cm95ID0gZmFsc2U7Cisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBzaG91
bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQorCisgICAgaWYgKHNob3VsZERl
c3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2spOworICAgIGdf
c291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwogfQogCiBib29sIEdNYWluTG9v
cFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OworCisgICAgeworICAgICAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2Up
CisgICAgICAgICAgICByZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3Zl
KG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuYm9vbENhbGxiYWNrKTsKKyAg
ICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRj
aGVkKTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIH0KKworICAgIGJvb2wg
cmV0dmFsID0gY29udGV4dC5ib29sQ2FsbGJhY2soKTsKKworICAgIGJvb2wgc2hvdWxkRGVzdHJv
eSA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
KyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNl
KQorICAgICAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92ZShjb250ZXh0KTsKKyAgICAg
ICAgICAgIHJldHVybiBDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNob3VsZERlc3Ry
b3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKLSAgICBBU1NFUlQobV9ib29sQ2FsbGJh
Y2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlz
cGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwotCi0gICAgR1NvdXJjZSogc291
cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xDYWxsYmFjaygp
OwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAg
ZGVzdHJveSgpOworICAgIGlmIChzaG91bGREZXN0cm95KQorICAgICAgICBkZXN0cm95KGNvbnRl
eHQuZGVzdHJveUNhbGxiYWNrKTsKKyAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNl
LmdldCgpKTsKIAotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0dXJuIFN0b3A7CiB9CiAKIGJv
b2wgR01haW5Mb29wU291cmNlOjpzb2NrZXRDYWxsYmFjayhHSU9Db25kaXRpb24gY29uZGl0aW9u
KQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250
ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9zb2NrZXRDYWxsYmFjayk7Ci0gICAgQVNTRVJU
KG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBt
X3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICBy
ZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisK
KyAgICAgICAgQVNTRVJUKGNvbnRleHQuc29ja2V0Q2FsbGJhY2spOworICAgICAgICBBU1NFUlQo
bV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQpOworICAgICAg
ICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgfQogCi0gICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBkZXN0cm95KGNvbnRleHQu
ZGVzdHJveUNhbGxiYWNrKTsKKyAgICAgICAgZ19zb3VyY2VfZGVzdHJveShjb250ZXh0LnNvdXJj
ZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBTdG9wOwogICAgIH0KIAotICAgIEdTb3VyY2UqIHNv
dXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFsID0gbV9zb2NrZXRDYWxsYmFj
ayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQo
KSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGJvb2wgcmV0dmFsID0gY29udGV4dC5zb2NrZXRD
YWxsYmFjayhjb25kaXRpb24pOworCisgICAgYm9vbCBzaG91bGREZXN0cm95ID0gZmFsc2U7Cisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAo
cmV0dmFsKSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJu
IENvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxkRGVzdHJveSA9ICFtX2NvbnRl
eHQuc291cmNlOworICAgIH0KIAotICAgIHJldHVybiByZXR2YWw7CisgICAgaWYgKHNob3VsZERl
c3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2spOworICAgIGdf
c291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIFN0b3A7
CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KCkKK3ZvaWQgR01haW5Mb29wU291
cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4mIGRlc3Ryb3lDYWxsYmFj
aykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShtX2Rlc3Ryb3lDYWxs
YmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsKLSAg
ICByZXNldCgpOworICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAgRGVsZXRlT25EZXN0cm95VHlw
ZSBkZWxldGVPbkRlc3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsKKwogICAgIGlmIChkZXN0cm95
Q2FsbGJhY2spCiAgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOwogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHJldmlzaW9uIDE3MjYyNSkKKysrIFNvdXJj
ZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYg
c3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Cit0eXBlZGVmIHVuaW9uIF9HTXV0ZXggR011dGV4Owog
CiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNjUsMTMgKzY2LDEzIEBAIHByaXZhdGU6CiAKICAgICBl
bnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNoZWQgfTsKIAotICAgIHZvaWQg
cmVzZXQoKTsKKyAgICB2b2lkIGNhbmNlbEludGVybmFsKCk7CiAgICAgdm9pZCBzY2hlZHVsZUlk
bGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01h
aW5Db250ZXh0Kik7CiAgICAgdm9pZCBzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciog
bmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9p
ZCB2b2lkQ2FsbGJhY2soKTsKICAgICBib29sIGJvb2xDYWxsYmFjaygpOwogICAgIGJvb2wgc29j
a2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICB2b2lk
IGRlc3Ryb3koY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYpOwogCiAgICAgc3RhdGljIGdi
b29sZWFuIHZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqKTsKICAgICBzdGF0aWMg
Z2Jvb2xlYW4gYm9vbFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSopOwpAQCAtNzksMTIg
KzgwLDIwIEBAIHByaXZhdGU6CiAKICAgICBEZWxldGVPbkRlc3Ryb3lUeXBlIG1fZGVsZXRlT25E
ZXN0cm95OwogICAgIFN0YXR1cyBtX3N0YXR1czsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291
cmNlOwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwotICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gbV92b2lkQ2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlvbjxib29s
ICgpPiBtX2Jvb2xDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlv
bik+IG1fc29ja2V0Q2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2Rlc3Ry
b3lDYWxsYmFjazsKKyAgICBHTXV0ZXggbV9tdXRleDsKKworICAgIHN0cnVjdCBDb250ZXh0IHsK
KyAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dChDb250ZXh0JiYp
ID0gZGVmYXVsdDsKKyAgICAgICAgQ29udGV4dCYgb3BlcmF0b3I9KENvbnRleHQmJikgPSBkZWZh
dWx0OworCisgICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gc291cmNlOworICAgICAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGJvb2xDYWxs
YmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBzb2NrZXRD
YWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95Q2FsbGJhY2s7
CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjYy
NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisy
MDE0LTA4LTE1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAg
ICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHVuaXQgdGVzdCBm
b3IgR01haW5Mb29wU291cmNlIHRoYXQgdGVzdHMgZGlmZmVyZW50CisgICAgICAgIHR5cGVzIG9m
IHJlc2NoZWR1bGluZyB0YXNrcyBvbiBhbHJlYWR5LWFjdGl2ZSBzb3VyY2VzLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoR01haW5Mb29wU291cmNlVGVzdDo6R01haW5Mb29wU291cmNlVGVzdCk6CisgICAgICAgIChH
TWFpbkxvb3BTb3VyY2VUZXN0Ojp+R01haW5Mb29wU291cmNlVGVzdCk6CisgICAgICAgIChHTWFp
bkxvb3BTb3VyY2VUZXN0OjpydW5Mb29wKToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6
OmZpbmlzaCk6CisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0Ojpzb3VyY2UpOgorICAgICAg
ICAodGVzdEdNYWluTG9vcFNvdXJjZUJhc2ljUmVzY2hlZHVsaW5nKToKKyAgICAgICAgKHRlc3RH
TWFpbkxvb3BTb3VyY2VSZWVudHJhbnRSZXNjaGVkdWxpbmcpOgorICAgICAgICAodGVzdEdNYWlu
TG9vcFNvdXJjZURpZmZlcmVudFRocmVhZFJlc2NoZWR1bGluZyk6CisgICAgICAgIChiZWZvcmVB
bGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5M
b29wU291cmNlVGVzdDo6R01haW5Mb29wU291cmNlVGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojp+R01haW5Mb29wU291cmNlVGVzdCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpydW5Mb29wKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OmZpbmlzaCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojpzb3VyY2UpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTQtMDgtMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRXh0ZW5kIGF1dG8tdmVyc2lvbiBhbmQgdmVy
c2lvbi1zdGFtcCBmb3IgUkNfUHJvamVjdEJ1aWxkVmVyc2lvbgpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAxNzI2MjUpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNSArMTM2LDYg
QEAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVAogc2V0X3RhcmdldF9w
cm9wZXJ0aWVzKFRlc3RXZWJDb3JlIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZ
ICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dlYkNvcmUpCiAKIGxp
c3QoQVBQRU5EIFRlc3RXVEZfU09VUkNFUworICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvZ29iamVjdC9HVW5pcXVlUHRyLmNwcAogKQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmpl
Y3QvR01haW5Mb29wU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEdNYWluTG9vcFNv
dXJjZVRlc3QgeworcHVibGljOgorICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQorICAgICAgICA6
IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgIHsKKyAgICB9CisKKyAg
ICB+R01haW5Mb29wU291cmNlVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF91bnJl
ZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkxvb3AoKQorICAgIHsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgZmluaXNo
KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQor
CisgICAgR01haW5Mb29wU291cmNlJiBzb3VyY2UoKSB7IHJldHVybiBtX3NvdXJjZTsgfQorCitw
cml2YXRlOgorICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBHTWFpbkxvb3BTb3VyY2Ug
bV9zb3VyY2U7Cit9OworCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIEJhc2ljUmVzY2hlZHVs
aW5nKQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNv
dXJjZVRlc3QgdGVzdDsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsK
KyAgICB9IGNvbnRleHQ7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltU
ZXN0XSBGaXJzdFRhc2siLCBbXSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0pOworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25k
VGFzayIsIFsmXSB7CisgICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsK
KyAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgIH0pOworCisgICAgY29udGV4dC50
ZXN0LnJ1bkxvb3AoKTsKKyAgICBBU1NFUlQoY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOwor
fQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJlZW50cmFudFJlc2NoZWR1bGluZykKK3sK
KyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0
IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAg
Ym9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBj
b250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0gewor
ICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNr
IiwgWyZdIHsKKyAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsK
KyAgICAgICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGNvbnRleHQudGVzdC5maW5pc2goKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4
dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3Qu
cnVuTG9vcCgpOworICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrICYmIGNvbnRl
eHQuZmluaXNoZWRTZWNvbmRUYXNrKTsKK30KKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBS
ZXNjaGVkdWxpbmdGcm9tRGlmZmVyZW50VGhyZWFkKQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29u
dGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAgYm9vbCBm
aW5pc2hlZEZpcnN0VGFzazsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2s7CisgICAg
fSBjb250ZXh0OworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0g
Rmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAgZ191c2xlZXAoMSAqIEdfVVNFQ19QRVJfU0VDKTsK
KyAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisKKyAg
ICBnX3RocmVhZF9uZXcobnVsbHB0ciwgW10oZ3BvaW50ZXIgZGF0YSkgLT4gZ3BvaW50ZXIgewor
ICAgICAgICBnX3VzbGVlcCgwLjI1ICogR19VU0VDX1BFUl9TRUMpOworCisgICAgICAgIFRlc3Rp
bmdDb250ZXh0JiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PFRlc3RpbmdDb250ZXh0Kj4oZGF0YSk7
CisgICAgICAgIEFTU0VSVCghY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisKKyAgICAgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7
CisgICAgICAgICAgICBBU1NFUlQoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisgICAgICAg
ICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgICAgICBjb250
ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGdfdGhyZWFkX2V4aXQo
bnVsbHB0cik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0sICZjb250ZXh0KTsKKwor
ICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisgICAgQVNTRVJUKGNvbnRleHQuZmluaXNoZWRG
aXJzdFRhc2sgJiYgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237313</attachid>
            <date>2014-08-28 09:16:37 -0700</date>
            <delta_ts>2014-09-01 12:21:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140828091629.patch</filename>
            <type>text/plain</type>
            <size>22869</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzMwNjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA4LTI4ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGNhbiBiZSBkaXNwYXRjaGluZyB0YXNr
cyBvbiBvbmUgdGhyZWFkCisgICAgICAgIHdoaWxlIGhhdmluZyBhIG5ldyB0YXNrIHNjaGVkdWxl
ZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQuIFRoaXMKKyAgICAgICAgY2FuIGZvciBpbnN0YW5jZSBv
Y2N1ciBpbiBXZWJLaXRWaWRlb1NpbmssIHdoZXJlIHRoZSB0aW1lb3V0CisgICAgICAgIGNhbGxi
YWNrIGNhbiBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hpbGUgYXQgdGhlIHNhbWUgdGltZQor
ICAgICAgICBpdCBpcyBiZWluZyByZXNjaGVkdWxlZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQgKGNy
ZWF0ZWQgdGhyb3VnaAorICAgICAgICBHU3RyZWFtZXIpLgorCisgICAgICAgIFRoZSBpbml0aWFs
IHNvbHV0aW9uIGlzIHRvIHVzZSBHTXV0ZXggdG8gcHJldmVudCBwYXJhbGxlbCBkYXRhCisgICAg
ICAgIGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBJbiB0aGUgZnV0dXJlIEkgcGxhbiB0
byBhZGQgYmV0dGVyCisgICAgICAgIGFzc2VydGlvbnMsIHNvbWUgbWVhbmluZ2Z1bCBjb21tZW50
cyBhbmQgbG9vayBhdCB0aGUgcG9zc2liaWxpdHkKKyAgICAgICAgb2YgY3JlYXRpbmcgdGhyZWFk
LXNwZWNpZmljIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIHRoYXQgd291bGRuJ3QKKyAgICAgICAg
cmVxdWlyZSB0aGUgdXNlIG9mIEdNdXRleC4KKworICAgICAgICBHU291cmNlLCBHQ2FuY2VsbGFi
bGUgYW5kIHN0ZDo6ZnVuY3Rpb248PiBvYmplY3RzIGFyZSBub3cgcGFja2VkCisgICAgICAgIGlu
dG8gYW4gaW50ZXJuYWwgQ29udGV4dCBzdHJ1Y3R1cmUuIFVzaW5nIHRoZSBDKysxMSBtb3ZlIHNl
bWFudGljcworICAgICAgICBpdCdzIHNpbXBsZSB0bywgYXQgdGhlIHRpbWUgb2YgZGlzcGF0Y2gs
IG1vdmUgdGhlIGN1cnJlbnQgY29udGV4dAorICAgICAgICBvdXQgb2YgdGhlIEdNYWluTG9vcFNv
dXJjZSBvYmplY3QgaW4gY2FzZSB0aGUgZGlzcGF0Y2ggY2F1c2VzIGEKKyAgICAgICAgcmVzY2hl
ZHVsaW5nIG9uIHRoYXQgc2FtZSBvYmplY3QuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSoo
KSBtZXRob2RzIGFuZCB0aGUgY2FuY2VsSW50ZXJuYWwoKSBtZXRob2QgY2FsbGVycworICAgICAg
ICBub3cgbG9jayB0aGUgR011dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3Npbmcg
dGhlIGRhdGEgYXQKKyAgICAgICAgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRp
c3BhdGNoIG1ldGhvZHMsIGJ1dCB0aG9zZSBkbworICAgICAgICB0aGUgZGlzcGF0Y2ggYW5kIHBv
c3NpYmxlIGRlc3RydWN0aW9uIGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAg
ICAgVGhlIGRpc3BhdGNoIGNhbiBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5M
b29wU291cmNlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEg
bG9ja2VkIG11dGV4LgorCisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNw
cDoKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAg
ICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlSWRsZVNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJj
ZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToK
KyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWlu
TG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDoKKwogMjAxNC0w
OC0yNyAgTmljbyBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRGVsZXRl
IGEgTVNWUzIwMTAgd29ya2Fyb3VuZC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dN
YWluTG9vcFNvdXJjZS5jcHAJKHJldmlzaW9uIDE3MzA2MykKKysrIFNvdXJjZS9XVEYvd3RmL2dv
YmplY3QvR01haW5Mb29wU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBA
QAogI2lmIFVTRShHTElCKQogCiAjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCi0KICNpbmNs
dWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAK
IG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwxNyArNDIsMjQgQEAgR01haW5Mb29wU291cmNlOjpH
TWFpbkxvb3BTb3VyY2UoKQogICAgIDogbV9kZWxldGVPbkRlc3Ryb3koRG9Ob3REZWxldGVPbkRl
c3Ryb3kpCiAgICAgLCBtX3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0
ZXgpOwogfQogCiBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRlc3Ry
b3lUeXBlIGRlbGV0ZU9uRGVzdHJveSkKICAgICA6IG1fZGVsZXRlT25EZXN0cm95KGRlbGV0ZU9u
RGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJlYWR5KQogeworICAgIGdfbXV0ZXhfaW5pdCgmbV9t
dXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCiB7Ci0gICAg
Y2FuY2VsKCk7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworICAgIH0KKworICAgIGdfbXV0ZXhfY2xl
YXIoJm1fbXV0ZXgpOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6aXNTY2hlZHVsZWQoKSBj
b25zdApAQCAtNjcsMjYgKzc0LDI0IEBAIGJvb2wgR01haW5Mb29wU291cmNlOjppc0FjdGl2ZSgp
IGNvbnN0CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKQogewotICAgIGlmICghbV9z
b3VyY2UpCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRo
b3V0TG9ja2luZygpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsV2l0aG91dExv
Y2tpbmcoKQoreworICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkgeworICAgICAgICBtX3N0YXR1
cyA9IFJlYWR5OwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR1JlZlB0cjxHU291cmNl
PiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOworICAgIENvbnRleHQgY29udGV4
dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgaWYgKG1fY2FuY2VsbGFibGUpCi0gICAg
ICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwotICAgIGdfc291
cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsKLSAgICBkZXN0cm95KCk7Ci19CisgICAgaWYgKGNv
bnRleHQuY2FuY2VsbGFibGUpCisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGNvbnRleHQu
Y2FuY2VsbGFibGUuZ2V0KCkpOwogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVzZXQoKQotewot
ICAgIG1fc3RhdHVzID0gUmVhZHk7Ci0gICAgbV9zb3VyY2UgPSBudWxscHRyOwotICAgIG1fY2Fu
Y2VsbGFibGUgPSBudWxscHRyOwotICAgIG1fdm9pZENhbGxiYWNrID0gbnVsbHB0cjsKLSAgICBt
X2Jvb2xDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBudWxscHRy
OworICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2spOworICAgIGdfc291cmNlX2Rl
c3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAgLTk0LDQzICs5
OSw0NiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNlCiAgICAgQVNT
RVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAg
IG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAgIGdfc291cmNl
X3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0g
YWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1f
Y29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAhPSBHX1BSSU9S
SVRZX0RFRkFVTFRfSURMRSkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fc291cmNl
LmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdl
dCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNo
KG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5
KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxw
dHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgpLCBjb250ZXh0
KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsK
LSAgICBjYW5jZWwoKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7
Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5n
KCk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Cisg
ICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9u
PGJvb2wgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4g
ZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7
Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJv
eUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworICAgIG1fY29u
dGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5k
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVs
ZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJj
ZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25k
aXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9u
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBj
b250ZXh0KQogewotICAgIGNhbmNlbCgpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKICAgICBBU1NFUlQobV9zdGF0dXMgPT0g
UmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgbV9zb2NrZXRDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1v
dmUoZGVzdHJveUZ1bmN0aW9uKTsKLSAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0
ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY2FuY2VsbGFibGUuZ2V0KCkpKTsKLSAgICBn
X3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7Ci0gICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihz
b2NrZXRTb3VyY2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFj
aChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgbV9jb250ZXh0LnNvY2tldENhbGxiYWNr
ID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0g
V1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmNhbmNlbGxhYmxlID0g
YWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIG1fY29udGV4dC5zb3VyY2UgPSBh
ZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgbV9jb250
ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0
LnNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNvY2tldFNvdXJj
ZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2No
ZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAgLTEzOCwxMDkg
KzE0NiwxNjggQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdQogICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7CiAK
LSAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdl
dCgpLCBuYW1lKTsKKyAgICBBU1NFUlQobV9jb250ZXh0LnNvdXJjZSk7CisgICAgZ19zb3VyY2Vf
c2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CiAgICAgaWYgKHByaW9yaXR5
ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1f
c291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291
cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2Vf
YXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3By
aW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9z
ZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMs
IG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgpLCBj
b250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShj
b25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2Fu
Y2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVs
YXkuY291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsK
LSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAg
IEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmco
KTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3
KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0gV1RGOjptb3Zl
KGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250
ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25z
dCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2Vs
KCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXku
Y291bnQoKSkpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAg
ICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsK
KyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1
bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ry
b3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0
KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6
c2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ry
b3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAg
IG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXku
Y291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAg
ICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsK
KyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3Nl
Y29uZHMoZGVsYXkuY291bnQoKSkpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJhY2sgPSBXVEY6
Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1v
dmUoZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHks
IGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5
KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6
Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2Vs
KCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25k
cyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rp
b24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7
CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9j
a2luZygpOworICAgIG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJj
ZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LmJvb2xDYWxsYmFj
ayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9
IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShu
YW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBw
cmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJh
Y2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybjsKKyAgICBDb250ZXh0
IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV92b2lkQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKLQotICAgIEdT
b3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxiYWNrKCk7Ci0g
ICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAg
IHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKCFt
X2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnRleHQg
PSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQoY29udGV4dC52b2lkQ2Fs
bGJhY2spOworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKKyAgICAgICAg
bV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIH0KKworICAgIGNvbnRleHQudm9pZENhbGxiYWNr
KCk7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIEdN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIHNob3VsZERlc3Ryb3kgPSAhbV9j
b250ZXh0LnNvdXJjZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkKKyAgICAgICAg
ZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgZ19zb3VyY2VfZGVzdHJveShj
b250ZXh0LnNvdXJjZS5nZXQoKSk7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNlOjpib29sQ2Fs
bGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBDb250ZXh0IGNvbnRleHQ7CisKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybiBTdG9wOworCisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKwor
ICAgICAgICBBU1NFUlQoY29udGV4dC5ib29sQ2FsbGJhY2spOworICAgICAgICBBU1NFUlQobV9z
dGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQpOworICAgICAgICBt
X3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgfQorCisgICAgYm9vbCByZXR2YWwgPSBjb250ZXh0
LmJvb2xDYWxsYmFjaygpOworCisgICAgYm9vbCBzaG91bGREZXN0cm95ID0gZmFsc2U7CisgICAg
eworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAocmV0
dmFsKSB7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICAg
ICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuIENv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2hvdWxkRGVzdHJveSA9ICFtX2NvbnRleHQu
c291cmNlOworICAgIH0KIAotICAgIEFTU0VSVChtX2Jvb2xDYWxsYmFjayk7Ci0gICAgQVNTRVJU
KG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBt
X3N0YXR1cyA9IERpc3BhdGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5n
ZXQoKTsKLSAgICBib29sIHJldHZhbCA9IG1fYm9vbENhbGxiYWNrKCk7Ci0gICAgaWYgKCFyZXR2
YWwgJiYgc291cmNlID09IG1fc291cmNlLmdldCgpKQotICAgICAgICBkZXN0cm95KCk7CisgICAg
aWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJh
Y2spOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwogCi0gICAg
cmV0dXJuIHJldHZhbDsKKyAgICByZXR1cm4gU3RvcDsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3Vy
Y2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgaWYgKCFt
X3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENvbnRleHQgY29udGV4dDsKIAot
ICAgIEFTU0VSVChtX3NvY2tldENhbGxiYWNrKTsKLSAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2No
ZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0
Y2hlZDsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAg
ICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBTdG9wOworCisg
ICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQo
Y29udGV4dC5zb2NrZXRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hl
ZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlz
cGF0Y2hlZDsKKyAgICB9CiAKLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQobV9j
YW5jZWxsYWJsZS5nZXQoKSkpIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNvbnRleHQuY2FuY2Vs
bGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2sp
OworICAgICAgICBnX3NvdXJjZV9kZXN0cm95KGNvbnRleHQuc291cmNlLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIFN0b3A7CiAgICAgfQogCi0gICAgR1NvdXJjZSogc291cmNlID0gbV9zb3VyY2Uu
Z2V0KCk7Ci0gICAgYm9vbCByZXR2YWwgPSBtX3NvY2tldENhbGxiYWNrKGNvbmRpdGlvbik7Ci0g
ICAgaWYgKCFyZXR2YWwgJiYgc291cmNlID09IG1fc291cmNlLmdldCgpKQotICAgICAgICBkZXN0
cm95KCk7CisgICAgYm9vbCByZXR2YWwgPSBjb250ZXh0LnNvY2tldENhbGxiYWNrKGNvbmRpdGlv
bik7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIEdN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAg
ICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXVEY6Om1vdmUoY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gQ29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAg
fQogCi0gICAgcmV0dXJuIHJldHZhbDsKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkKKyAgICAgICAg
ZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgZ19zb3VyY2VfZGVzdHJveShj
b250ZXh0LnNvdXJjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gU3RvcDsKIH0KIAotdm9pZCBHTWFp
bkxvb3BTb3VyY2U6OmRlc3Ryb3koKQordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmRlc3Ryb3koY29u
c3Qgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiYgZGVzdHJveUNhbGxiYWNrKQogewotICAgIGF1dG8g
ZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKG1fZGVzdHJveUNhbGxiYWNrKTsKLSAgICBhdXRv
IGRlbGV0ZU9uRGVzdHJveSA9IG1fZGVsZXRlT25EZXN0cm95OwotICAgIHJlc2V0KCk7CisgICAg
bV9zdGF0dXMgPSBSZWFkeTsKKyAgICBEZWxldGVPbkRlc3Ryb3lUeXBlIGRlbGV0ZU9uRGVzdHJv
eSA9IG1fZGVsZXRlT25EZXN0cm95OworCiAgICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKICAgICAg
ICAgZGVzdHJveUNhbGxiYWNrKCk7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFp
bkxvb3BTb3VyY2UuaAkocmV2aXNpb24gMTczMDYzKQorKysgU291cmNlL1dURi93dGYvZ29iamVj
dC9HTWFpbkxvb3BTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQg
R1NvY2tldDsKK3R5cGVkZWYgdW5pb24gX0dNdXRleCBHTXV0ZXg7CiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC02NSwxMyArNjYsMTMgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gU3RhdHVzIHsgUmVh
ZHksIFNjaGVkdWxlZCwgRGlzcGF0Y2hlZCB9OwogCi0gICAgdm9pZCByZXNldCgpOworICAgIHZv
aWQgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKICAgICB2b2lkIHNjaGVkdWxlSWRsZVNvdXJjZShj
b25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQq
KTsKICAgICB2b2lkIHNjaGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291
cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKICAgICB2b2lkIHZvaWRDYWxs
YmFjaygpOwogICAgIGJvb2wgYm9vbENhbGxiYWNrKCk7CiAgICAgYm9vbCBzb2NrZXRDYWxsYmFj
ayhHSU9Db25kaXRpb24pOwotICAgIHZvaWQgZGVzdHJveSgpOworICAgIHZvaWQgZGVzdHJveShj
b25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+Jik7CiAKICAgICBzdGF0aWMgZ2Jvb2xlYW4gdm9p
ZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSopOwogICAgIHN0YXRpYyBnYm9vbGVhbiBi
b29sU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CkBAIC03OSwxMiArODAsMjAgQEAg
cHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVzdHJveVR5cGUgbV9kZWxldGVPbkRlc3Ryb3k7CiAg
ICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Ci0gICAg
R1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9v
bENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2Nr
ZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNr
OworICAgIEdNdXRleCBtX211dGV4OworCisgICAgc3RydWN0IENvbnRleHQgeworICAgICAgICBD
b250ZXh0KCkgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0KENvbnRleHQmJikgPSBkZWZhdWx0
OworICAgICAgICBDb250ZXh0JiBvcGVyYXRvcj0oQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICAgICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2U7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxh
YmxlPiBjYW5jZWxsYWJsZTsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiB2b2lkQ2Fs
bGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gYm9vbENhbGxiYWNrOworICAg
ICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0NvbmRpdGlvbik+IHNvY2tldENhbGxiYWNrOwor
ICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lDYWxsYmFjazsKKyAgICB9IG1f
Y29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMDYzKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDgtMjgg
IFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9v
cFNvdXJjZSBpcyBleHBvc2VkIHRvIHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdW5pdCB0ZXN0IGZvciBHTWFpbkxv
b3BTb3VyY2UgdGhhdCB0ZXN0cyBkaWZmZXJlbnQKKyAgICAgICAgdHlwZXMgb2YgcmVzY2hlZHVs
aW5nIHRhc2tzIG9uIGFscmVhZHktYWN0aXZlIHNvdXJjZXMuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChHTWFpbkxv
b3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNv
dXJjZVRlc3Q6On5HTWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJj
ZVRlc3Q6OnJ1bkxvb3ApOgorICAgICAgICAoR01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToK
KyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6OnNvdXJjZSk6CisgICAgICAgICh0ZXN0R01h
aW5Mb29wU291cmNlQmFzaWNSZXNjaGVkdWxpbmcpOgorICAgICAgICAodGVzdEdNYWluTG9vcFNv
dXJjZVJlZW50cmFudFJlc2NoZWR1bGluZyk6CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNl
RGlmZmVyZW50VGhyZWFkUmVzY2hlZHVsaW5nKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAg
ICAgIChhZnRlckFsbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VU
ZXN0OjpHTWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWlu
TG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxvb3BTb3VyY2VUZXN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OnJ1bkxvb3ApOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OnNvdXJjZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAxNC0wOC0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X2h0
dHBfaGVhZGVycyB0byBXZWJLaXQyIEdUSysgQVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCShy
ZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFp
bkxvb3BTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgR01haW5Mb29wU291cmNlVGVz
dCB7CitwdWJsaWM6CisgICAgR01haW5Mb29wU291cmNlVGVzdCgpCisgICAgICAgIDogbV9tYWlu
TG9vcChnX21haW5fbG9vcF9uZXcoMCwgVFJVRSkpCisgICAgeworICAgIH0KKworICAgIH5HTWFp
bkxvb3BTb3VyY2VUZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIHZvaWQgcnVuTG9vcCgpCisgICAgeworICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2goKQorICAg
IHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBH
TWFpbkxvb3BTb3VyY2UmIHNvdXJjZSgpIHsgcmV0dXJuIG1fc291cmNlOyB9CisKK3ByaXZhdGU6
CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIEdNYWluTG9vcFNvdXJjZSBtX3NvdXJj
ZTsKK307CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQmFzaWNSZXNjaGVkdWxpbmcpCit7
CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVz
dCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0g
Y29udGV4dDsKKworICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEZp
cnN0VGFzayIsIFtdIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSk7CisK
KyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwg
WyZdIHsKKyAgICAgICAgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2sgPSB0cnVlOworICAgICAg
ICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgfSk7CisKKyAgICBjb250ZXh0LnRlc3QucnVu
TG9vcCgpOworICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RF
U1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50UmVzY2hlZHVsaW5nKQoreworICAgIHN0
cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsK
KyAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOworICAgICAgICBib29sIGZp
bmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0gY29udGV4dDsKKworICAgIGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEZpcnN0VGFzayIsIFsmXSB7CisgICAgICAg
IGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0g
eworICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworICAgICAg
ICAgICAgY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2sgPSB0cnVlOworICAgICAgICAgICAgY29u
dGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0LmZpbmlz
aGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGNvbnRleHQudGVzdC5ydW5Mb29w
KCk7CisgICAgQVNTRVJUKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sgJiYgY29udGV4dC5maW5p
c2hlZFNlY29uZFRhc2spOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJlc2NoZWR1
bGluZ0Zyb21EaWZmZXJlbnRUaHJlYWQpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsK
KyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVk
Rmlyc3RUYXNrOworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKKyAgICB9IGNvbnRl
eHQ7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRh
c2siLCBbJl0geworICAgICAgICBnX3VzbGVlcCgxICogR19VU0VDX1BFUl9TRUMpOworICAgICAg
ICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGdfdGhy
ZWFkX25ldyhudWxscHRyLCBbXShncG9pbnRlciBkYXRhKSAtPiBncG9pbnRlciB7CisgICAgICAg
IGdfdXNsZWVwKDAuMjUgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAgICAgVGVzdGluZ0NvbnRl
eHQmIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8VGVzdGluZ0NvbnRleHQqPihkYXRhKTsKKyAgICAg
ICAgQVNTRVJUKCFjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKworICAgICAgICBjb250ZXh0
LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZdIHsKKyAgICAg
ICAgICAgIEFTU0VSVChjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICAgICAgICAgIGNv
bnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRleHQudGVz
dC5maW5pc2goKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ190aHJlYWRfZXhpdChudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwgJmNvbnRleHQpOworCisgICAgY29u
dGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBBU1NFUlQoY29udGV4dC5maW5pc2hlZEZpcnN0VGFz
ayAmJiBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237458</attachid>
            <date>2014-09-01 12:21:46 -0700</date>
            <delta_ts>2014-09-01 23:52:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140901122139.patch</filename>
            <type>text/plain</type>
            <size>19269</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA5LTAxICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGNhbiBiZSBkaXNwYXRjaGluZyB0YXNr
cyBvbiBvbmUgdGhyZWFkCisgICAgICAgIHdoaWxlIGhhdmluZyBhIG5ldyB0YXNrIHNjaGVkdWxl
ZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQuIFRoaXMKKyAgICAgICAgY2FuIGZvciBpbnN0YW5jZSBv
Y2N1ciBpbiBXZWJLaXRWaWRlb1NpbmssIHdoZXJlIHRoZSB0aW1lb3V0CisgICAgICAgIGNhbGxi
YWNrIGNhbiBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hpbGUgYXQgdGhlIHNhbWUgdGltZQor
ICAgICAgICBpdCBpcyBiZWluZyByZXNjaGVkdWxlZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQgKGNy
ZWF0ZWQgdGhyb3VnaAorICAgICAgICBHU3RyZWFtZXIpLgorCisgICAgICAgIFRoZSBpbml0aWFs
IHNvbHV0aW9uIGlzIHRvIHVzZSBHTXV0ZXggdG8gcHJldmVudCBwYXJhbGxlbCBkYXRhCisgICAg
ICAgIGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBJbiB0aGUgZnV0dXJlIEkgcGxhbiB0
byBhZGQgYmV0dGVyCisgICAgICAgIGFzc2VydGlvbnMsIHNvbWUgbWVhbmluZ2Z1bCBjb21tZW50
cyBhbmQgbG9vayBhdCB0aGUgcG9zc2liaWxpdHkKKyAgICAgICAgb2YgY3JlYXRpbmcgdGhyZWFk
LXNwZWNpZmljIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIHRoYXQgd291bGRuJ3QKKyAgICAgICAg
cmVxdWlyZSB0aGUgdXNlIG9mIEdNdXRleC4KKworICAgICAgICBHU291cmNlLCBHQ2FuY2VsbGFi
bGUgYW5kIHN0ZDo6ZnVuY3Rpb248PiBvYmplY3RzIGFyZSBub3cgcGFja2VkCisgICAgICAgIGlu
dG8gYW4gaW50ZXJuYWwgQ29udGV4dCBzdHJ1Y3R1cmUuIFVzaW5nIHRoZSBDKysxMSBtb3ZlIHNl
bWFudGljcworICAgICAgICBpdCdzIHNpbXBsZSB0bywgYXQgdGhlIHRpbWUgb2YgZGlzcGF0Y2gs
IG1vdmUgdGhlIGN1cnJlbnQgY29udGV4dAorICAgICAgICBvdXQgb2YgdGhlIEdNYWluTG9vcFNv
dXJjZSBvYmplY3QgaW4gY2FzZSB0aGUgZGlzcGF0Y2ggY2F1c2VzIGEKKyAgICAgICAgcmVzY2hl
ZHVsaW5nIG9uIHRoYXQgc2FtZSBvYmplY3QuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSoo
KSBtZXRob2RzIGFuZCB0aGUgY2FuY2VsSW50ZXJuYWwoKSBtZXRob2QgY2FsbGVycworICAgICAg
ICBub3cgbG9jayB0aGUgR011dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3Npbmcg
dGhlIGRhdGEgYXQKKyAgICAgICAgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRp
c3BhdGNoIG1ldGhvZHMsIGJ1dCB0aG9zZSBkbworICAgICAgICB0aGUgZGlzcGF0Y2ggYW5kIHBv
c3NpYmxlIGRlc3RydWN0aW9uIGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAg
ICAgVGhlIGRpc3BhdGNoIGNhbiBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5M
b29wU291cmNlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEg
bG9ja2VkIG11dGV4LgorCisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNw
cDoKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAg
ICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlSWRsZVNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJj
ZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToK
KyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWlu
TG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDoKKwogMjAxNC0w
OC0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBS
ZXRhaW5QdHI6OmF1dG9yZWxlYXNlIGluIHNvbWUgcGxhY2VzIHdoZXJlIGl0IHNlZW1zIGFwcHJv
cHJpYXRlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3Bw
CShyZXZpc2lvbiAxNzMxNjEpCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikK
IAogI2luY2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IApAQCAtNDIsMTcgKzQyLDIwIEBAIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkK
ICAgICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9z
dGF0dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5M
b29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRl
c3Ryb3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBt
X3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFp
bkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UoKQogewogICAgIGNhbmNlbCgpOworICAgIGdf
bXV0ZXhfY2xlYXIoJm1fbXV0ZXgpOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6aXNTY2hl
ZHVsZWQoKSBjb25zdApAQCAtNjcsMjYgKzcwLDI0IEBAIGJvb2wgR01haW5Mb29wU291cmNlOjpp
c0FjdGl2ZSgpIGNvbnN0CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKQogewotICAg
IGlmICghbV9zb3VyY2UpCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxXaXRob3V0TG9ja2luZygpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2Vs
V2l0aG91dExvY2tpbmcoKQoreworICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkgeworICAgICAg
ICBtX3N0YXR1cyA9IFJlYWR5OwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR1JlZlB0
cjxHU291cmNlPiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOworICAgIENvbnRl
eHQgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgaWYgKG1fY2FuY2VsbGFi
bGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwot
ICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsKLSAgICBkZXN0cm95KCk7Ci19Cisg
ICAgaWYgKGNvbnRleHQuY2FuY2VsbGFibGUpCisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2Vs
KGNvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpOwogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVz
ZXQoKQotewotICAgIG1fc3RhdHVzID0gUmVhZHk7Ci0gICAgbV9zb3VyY2UgPSBudWxscHRyOwot
ICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwotICAgIG1fdm9pZENhbGxiYWNrID0gbnVsbHB0
cjsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sg
PSBudWxscHRyOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwor
ICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2spOwogfQogCiB2b2lkIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
IHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAg
LTk0LDQzICs5NSw0NiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNl
CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxl
ZDsKIAotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAg
IGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBtX2NvbnRleHQu
c291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3Nl
dF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAh
PSBHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5
KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1f
c291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0
X3ByaW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRo
aXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgp
LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShm
dW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0
aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhv
dXRMb2NraW5nKCk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9
CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
Y2FuY2VsKCk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAg
IG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011
dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOwor
ICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1f
Y29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAg
ICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
Ym9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29s
IChHSU9Db25kaXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24g
Y29uZGl0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5D
b250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKICAgICBBU1NFUlQobV9z
dGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgbV9zb2Nr
ZXRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sg
PSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKLSAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRH
UmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfc29j
a2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY2FuY2VsbGFibGUuZ2V0KCkp
KTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7Ci0gICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihzb2NrZXRTb3VyY2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgbV9jb250ZXh0LnNvY2tl
dENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNh
bGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmNhbmNl
bGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIG1fY29udGV4dC5z
b3VyY2UgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlv
biwgbV9jb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUo
bV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNr
KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNv
Y2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNo
KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
IHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAg
LTEzOCwxMDkgKzE0MiwxNTggQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91
dFNvdQogICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hl
ZHVsZWQ7CiAKLSAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1f
c291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBBU1NFUlQobV9jb250ZXh0LnNvdXJjZSk7CisgICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CiAgICAgaWYg
KHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3By
aW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxi
YWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAg
Z19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3Vy
Y2Vfc2V0X3ByaW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rp
b24sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNl
LmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0
ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9u
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJj
ZV9uZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1
bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rp
b24pOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91
dExvY2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9z
b3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0g
V1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9y
aXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0
aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExv
Y2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RG
Ojptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5
LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxh
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6
OmNocm9ubzo6c2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNl
bCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29u
ZHMoZGVsYXkuY291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0
aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExv
Y2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sg
PSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2Uo
bmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwg
cHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVB
ZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rp
b24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1v
dmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lG
dW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxX
aXRob3V0TG9ja2luZygpOworICAgIG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1l
b3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LmJv
b2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lD
YWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91
dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2Fs
bGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjp2
b2lkQ2FsbGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybjsKKyAg
ICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV92b2lkQ2FsbGJhY2spOwotICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsK
LQotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxi
YWNrKCk7Ci0gICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJv
eSgpOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQoY29udGV4
dC52b2lkQ2FsbGJhY2spOworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsK
KyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIH0KKworICAgIGNvbnRleHQudm9p
ZENhbGxiYWNrKCk7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7Cisg
ICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIHNob3VsZERlc3Ry
b3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkK
KyAgICAgICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CiB9CiAKIGJvb2wgR01h
aW5Mb29wU291cmNlOjpib29sQ2FsbGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9i
b29sQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0
dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwotCi0gICAgR1Nv
dXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xD
YWxsYmFjaygpOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkK
LSAgICAgICAgZGVzdHJveSgpOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlciht
X211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0
dXJuIFN0b3A7CisKKyAgICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworCisg
ICAgICAgIEFTU0VSVChjb250ZXh0LmJvb2xDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1f
c3RhdHVzID0gRGlzcGF0Y2hlZDsKKyAgICB9CisKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQu
Ym9vbENhbGxiYWNrKCk7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7
CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmIChyZXR2
YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICBtX2NvbnRleHQgPSBXVEY6Om1v
dmUoY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNob3VsZERlc3Ryb3kgPSAh
bV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkKKyAgICAg
ICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CiAgICAgcmV0dXJuIHJldHZhbDsK
IH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBj
b25kaXRpb24pCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIENvbnRleHQgY29udGV4dDsKIAotICAgIEFTU0VSVChtX3NvY2tldENhbGxiYWNrKTsKLSAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQp
OwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKLQotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChtX2NhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBkZXN0cm95KCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3Nv
dXJjZS5nZXQoKTsKLSAgICBib29sIHJldHZhbCA9IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9u
KTsKLSAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCi0gICAgICAg
IGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBTdG9w
OworCisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBB
U1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9
PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1fc3RhdHVz
ID0gRGlzcGF0Y2hlZDsKKyAgICB9CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoY29udGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpIHsKKyAgICAgICAgZGVzdHJveShjb250ZXh0
LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgICAgIHJldHVybiBTdG9wOworICAgIH0KKworICAgIGJv
b2wgcmV0dmFsID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwogCisgICAgYm9v
bCBzaG91bGREZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNlKQor
ICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQor
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNl
OjpkZXN0cm95KCkKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4mIGRlc3Ryb3lDYWxsYmFjaykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxs
YmFjayA9IFdURjo6bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRl
c3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOworICAgIC8vIE5vdGhpbmcg
c2hvdWxkIGJlIHNjaGVkdWxlZCBvbiB0aGlzIG9iamVjdCBhdCB0aGlzIHBvaW50LgorICAgIEFT
U0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CisgICAgbV9zdGF0dXMgPSBSZWFkeTsKKyAgICBEZWxl
dGVPbkRlc3Ryb3lUeXBlIGRlbGV0ZU9uRGVzdHJveSA9IG1fZGVsZXRlT25EZXN0cm95OworCiAg
ICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKICAgICAgICAgZGVzdHJveUNhbGxiYWNrKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAkocmV2aXNpb24gMTcz
MTYxKQorKysgU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQgR1NvY2tldDsKK3R5cGVkZWYgdW5pb24gX0dN
dXRleCBHTXV0ZXg7CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSwxMyArNjYsMTMgQEAgcHJp
dmF0ZToKIAogICAgIGVudW0gU3RhdHVzIHsgUmVhZHksIFNjaGVkdWxlZCwgRGlzcGF0Y2hlZCB9
OwogCi0gICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsK
ICAgICB2b2lkIHNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVu
YywgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKICAgICB2b2lkIHNjaGVkdWxlVGltZW91
dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFp
bkNvbnRleHQqKTsKICAgICB2b2lkIHZvaWRDYWxsYmFjaygpOwogICAgIGJvb2wgYm9vbENhbGxi
YWNrKCk7CiAgICAgYm9vbCBzb2NrZXRDYWxsYmFjayhHSU9Db25kaXRpb24pOwotICAgIHZvaWQg
ZGVzdHJveSgpOworICAgIHZvaWQgZGVzdHJveShjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
Jik7CiAKICAgICBzdGF0aWMgZ2Jvb2xlYW4gdm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNv
dXJjZSopOwogICAgIHN0YXRpYyBnYm9vbGVhbiBib29sU291cmNlQ2FsbGJhY2soR01haW5Mb29w
U291cmNlKik7CkBAIC03OSwxMiArODAsMjAgQEAgcHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVz
dHJveVR5cGUgbV9kZWxldGVPbkRlc3Ryb3k7CiAgICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdS
ZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2Fu
Y2VsbGFibGU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAg
ICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNrOworICAgIEdNdXRleCBtX211dGV4OworCisg
ICAgc3RydWN0IENvbnRleHQgeworICAgICAgICBDb250ZXh0KCkgPSBkZWZhdWx0OworICAgICAg
ICBDb250ZXh0KENvbnRleHQmJikgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0JiBvcGVyYXRv
cj0oQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgR1JlZlB0cjxHU291cmNlPiBzb3Vy
Y2U7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKKyAgICAgICAg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiB2b2lkQ2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoKT4gYm9vbENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJ
T0NvbmRpdGlvbik+IHNvY2tldENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lDYWxsYmFjazsKKyAgICB9IG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTczMTYxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMDEgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2VkIHRvIHJhY2Ug
Y29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgdW5pdCB0ZXN0IGZvciBHTWFpbkxvb3BTb3VyY2UgdGhhdCB0ZXN0cyBkaWZmZXJl
bnQKKyAgICAgICAgdHlwZXMgb2YgcmVzY2hlZHVsaW5nIHRhc2tzIG9uIGFscmVhZHktYWN0aXZl
IHNvdXJjZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcDogQWRkZWQuCisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3Vy
Y2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxvb3BTb3VyY2VU
ZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6OnJ1bkxvb3ApOgorICAgICAgICAo
R01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRl
c3Q6OnNvdXJjZSk6CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNlQmFzaWNSZXNjaGVkdWxp
bmcpOgorICAgICAgICAodGVzdEdNYWluTG9vcFNvdXJjZVJlZW50cmFudFJlc2NoZWR1bGluZyk6
CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNlRGlmZmVyZW50VGhyZWFkUmVzY2hlZHVsaW5n
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3VyY2VUZXN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxvb3BT
b3VyY2VUZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6
OnJ1bkxvb3ApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6
ZmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OnNv
dXJjZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNC0wOS0wMSAgQ2Fy
bG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBbSkhCdWlsZF0gQ3ljbGljIGRlcGVuZGVuY3kgYmV0d2VlbiBjYWlybyBhbmQgbGlicnN2
Zy4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMTcz
MTYxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDUgKzEzNiw2IEBAIHNldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RXZWJDb3Jl
IFBST1BFUlQKIHNldF90YXJnZXRfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFJV
TlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElS
RUNUT1JZfS9XZWJDb3JlKQogCiBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKKyAgICAke1RF
U1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dvYmplY3QvR1VuaXF1ZVB0ci5jcHAK
ICkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237476</attachid>
            <date>2014-09-01 23:53:03 -0700</date>
            <delta_ts>2014-09-09 04:34:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140901235256.patch</filename>
            <type>text/plain</type>
            <size>23460</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzMxNjcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE0LTA5LTAxICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGNhbiBiZSBkaXNwYXRjaGluZyB0YXNr
cyBvbiBvbmUgdGhyZWFkCisgICAgICAgIHdoaWxlIGhhdmluZyBhIG5ldyB0YXNrIHNjaGVkdWxl
ZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQuIFRoaXMKKyAgICAgICAgY2FuIGZvciBpbnN0YW5jZSBv
Y2N1ciBpbiBXZWJLaXRWaWRlb1NpbmssIHdoZXJlIHRoZSB0aW1lb3V0CisgICAgICAgIGNhbGxi
YWNrIGNhbiBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hpbGUgYXQgdGhlIHNhbWUgdGltZQor
ICAgICAgICBpdCBpcyBiZWluZyByZXNjaGVkdWxlZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQgKGNy
ZWF0ZWQgdGhyb3VnaAorICAgICAgICBHU3RyZWFtZXIpLgorCisgICAgICAgIFRoZSBpbml0aWFs
IHNvbHV0aW9uIGlzIHRvIHVzZSBHTXV0ZXggdG8gcHJldmVudCBwYXJhbGxlbCBkYXRhCisgICAg
ICAgIGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBJbiB0aGUgZnV0dXJlIEkgcGxhbiB0
byBhZGQgYmV0dGVyCisgICAgICAgIGFzc2VydGlvbnMsIHNvbWUgbWVhbmluZ2Z1bCBjb21tZW50
cyBhbmQgbG9vayBhdCB0aGUgcG9zc2liaWxpdHkKKyAgICAgICAgb2YgY3JlYXRpbmcgdGhyZWFk
LXNwZWNpZmljIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIHRoYXQgd291bGRuJ3QKKyAgICAgICAg
cmVxdWlyZSB0aGUgdXNlIG9mIEdNdXRleC4KKworICAgICAgICBHU291cmNlLCBHQ2FuY2VsbGFi
bGUgYW5kIHN0ZDo6ZnVuY3Rpb248PiBvYmplY3RzIGFyZSBub3cgcGFja2VkCisgICAgICAgIGlu
dG8gYW4gaW50ZXJuYWwgQ29udGV4dCBzdHJ1Y3R1cmUuIFVzaW5nIHRoZSBDKysxMSBtb3ZlIHNl
bWFudGljcworICAgICAgICBpdCdzIHNpbXBsZSB0bywgYXQgdGhlIHRpbWUgb2YgZGlzcGF0Y2gs
IG1vdmUgdGhlIGN1cnJlbnQgY29udGV4dAorICAgICAgICBvdXQgb2YgdGhlIEdNYWluTG9vcFNv
dXJjZSBvYmplY3QgaW4gY2FzZSB0aGUgZGlzcGF0Y2ggY2F1c2VzIGEKKyAgICAgICAgcmVzY2hl
ZHVsaW5nIG9uIHRoYXQgc2FtZSBvYmplY3QuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSoo
KSBtZXRob2RzIGFuZCB0aGUgY2FuY2VsSW50ZXJuYWwoKSBtZXRob2QgY2FsbGVycworICAgICAg
ICBub3cgbG9jayB0aGUgR011dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3Npbmcg
dGhlIGRhdGEgYXQKKyAgICAgICAgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRp
c3BhdGNoIG1ldGhvZHMsIGJ1dCB0aG9zZSBkbworICAgICAgICB0aGUgZGlzcGF0Y2ggYW5kIHBv
c3NpYmxlIGRlc3RydWN0aW9uIGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAg
ICAgVGhlIGRpc3BhdGNoIGNhbiBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5M
b29wU291cmNlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEg
bG9ja2VkIG11dGV4LgorCisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNw
cDoKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAg
ICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNv
dXJjZTo6Y2FuY2VsSW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlSWRsZVNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGUpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJj
ZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToK
KyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAo
V1RGOjpHTWFpbkxvb3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWlu
TG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnJlc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaDoKKwogMjAxNC0w
OC0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBS
ZXRhaW5QdHI6OmF1dG9yZWxlYXNlIGluIHNvbWUgcGxhY2VzIHdoZXJlIGl0IHNlZW1zIGFwcHJv
cHJpYXRlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3Bw
CShyZXZpc2lvbiAxNzMxNjcpCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpZiBVU0UoR0xJQikK
IAogI2luY2x1ZGUgIkdNYWluTG9vcFNvdXJjZS5oIgotCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IApAQCAtNDIsMTcgKzQyLDIwIEBAIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKCkK
ICAgICA6IG1fZGVsZXRlT25EZXN0cm95KERvTm90RGVsZXRlT25EZXN0cm95KQogICAgICwgbV9z
dGF0dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZtX211dGV4KTsKIH0KIAogR01haW5M
b29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSBkZWxldGVPbkRl
c3Ryb3kpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShkZWxldGVPbkRlc3Ryb3kpCiAgICAgLCBt
X3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQogCiBHTWFp
bkxvb3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UoKQogewogICAgIGNhbmNlbCgpOworICAgIGdf
bXV0ZXhfY2xlYXIoJm1fbXV0ZXgpOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6aXNTY2hl
ZHVsZWQoKSBjb25zdApAQCAtNjcsMjYgKzcwLDI0IEBAIGJvb2wgR01haW5Mb29wU291cmNlOjpp
c0FjdGl2ZSgpIGNvbnN0CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpjYW5jZWwoKQogewotICAg
IGlmICghbV9zb3VyY2UpCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxXaXRob3V0TG9ja2luZygpOworfQorCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2Vs
V2l0aG91dExvY2tpbmcoKQoreworICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkgeworICAgICAg
ICBtX3N0YXR1cyA9IFJlYWR5OwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR1JlZlB0
cjxHU291cmNlPiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOworICAgIENvbnRl
eHQgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwogCi0gICAgaWYgKG1fY2FuY2VsbGFi
bGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwot
ICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsKLSAgICBkZXN0cm95KCk7Ci19Cisg
ICAgaWYgKGNvbnRleHQuY2FuY2VsbGFibGUpCisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2Vs
KGNvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpOwogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVz
ZXQoKQotewotICAgIG1fc3RhdHVzID0gUmVhZHk7Ci0gICAgbV9zb3VyY2UgPSBudWxscHRyOwot
ICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwotICAgIG1fdm9pZENhbGxiYWNrID0gbnVsbHB0
cjsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sg
PSBudWxscHRyOworICAgIGdfc291cmNlX2Rlc3Ryb3koY29udGV4dC5zb3VyY2UuZ2V0KCkpOwor
ICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95Q2FsbGJhY2spOwogfQogCiB2b2lkIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
IHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAg
LTk0LDQzICs5NSw0NiBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNl
CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxl
ZDsKIAotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAg
IGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBtX2NvbnRleHQu
c291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOworICAgIGdfc291cmNlX3Nl
dF9uYW1lKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAh
PSBHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5
KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1f
c291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0
X3ByaW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRo
aXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgp
LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNo
YXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShm
dW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0
aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhv
dXRMb2NraW5nKCk7CisgICAgbV9jb250ZXh0LnZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95
RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9
CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAg
Y2FuY2VsKCk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAg
IG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011
dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOwor
ICAgIG1fY29udGV4dC5ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1f
Y29udGV4dC5kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAg
ICBzY2hlZHVsZUlkbGVTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
Ym9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWlu
TG9vcFNvdXJjZTo6c2NoZWR1bGUoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29s
IChHSU9Db25kaXRpb24pPiBmdW5jdGlvbiwgR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24g
Y29uZGl0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5D
b250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKICAgICBBU1NFUlQobV9z
dGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgbV9zb2Nr
ZXRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sg
PSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKLSAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRH
UmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfc29j
a2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY2FuY2VsbGFibGUuZ2V0KCkp
KTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7Ci0gICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihzb2NrZXRTb3VyY2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgbV9jb250ZXh0LnNvY2tl
dENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNh
bGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmNhbmNl
bGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIG1fY29udGV4dC5z
b3VyY2UgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlv
biwgbV9jb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUo
bV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNr
KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHNv
Y2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNo
KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
IHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAg
LTEzOCwxMDkgKzE0MiwxNTggQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91
dFNvdQogICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hl
ZHVsZWQ7CiAKLSAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1f
c291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBBU1NFUlQobV9jb250ZXh0LnNvdXJjZSk7CisgICAg
Z19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CiAgICAgaWYg
KHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3By
aW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxi
YWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAg
Z19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3Vy
Y2Vfc2V0X3ByaW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rp
b24sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNl
LmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0
ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9u
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJj
ZV9uZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1
bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rp
b24pOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91
dExvY2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9z
b3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQudm9pZENhbGxiYWNrID0g
V1RGOjptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9y
aXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0
aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExv
Y2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKKyAgICBtX2NvbnRleHQuYm9vbENhbGxiYWNrID0gV1RG
Ojptb3ZlKGZ1bmN0aW9uKTsKKyAgICBtX2NvbnRleHQuZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5
LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxh
eShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6
OmNocm9ubzo6c2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNl
bCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29u
ZHMoZGVsYXkuY291bnQoKSkpOwotICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0
aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExv
Y2tpbmcoKTsKKyAgICBtX2NvbnRleHQuc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3Vy
Y2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOworICAgIG1fY29udGV4dC52b2lkQ2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOworICAgIG1fY29udGV4dC5kZXN0cm95Q2FsbGJhY2sg
PSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2Uo
bmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwg
cHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVB
ZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rp
b24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1v
dmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lG
dW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxX
aXRob3V0TG9ja2luZygpOworICAgIG1fY29udGV4dC5zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1l
b3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7CisgICAgbV9jb250ZXh0LmJv
b2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7CisgICAgbV9jb250ZXh0LmRlc3Ryb3lD
YWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwogICAgIHNjaGVkdWxlVGltZW91
dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2Fs
bGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjp2
b2lkQ2FsbGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybjsKKyAg
ICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV92b2lkQ2FsbGJhY2spOwotICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsK
LQotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxi
YWNrKCk7Ci0gICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJv
eSgpOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQoY29udGV4
dC52b2lkQ2FsbGJhY2spOworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsK
KyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIH0KKworICAgIGNvbnRleHQudm9p
ZENhbGxiYWNrKCk7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7Cisg
ICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIHNob3VsZERlc3Ry
b3kgPSAhbV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkK
KyAgICAgICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CiB9CiAKIGJvb2wgR01h
aW5Mb29wU291cmNlOjpib29sQ2FsbGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0IGNvbnRleHQ7CiAKLSAgICBBU1NFUlQobV9i
b29sQ2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0
dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOwotCi0gICAgR1Nv
dXJjZSogc291cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwgPSBtX2Jvb2xD
YWxsYmFjaygpOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkK
LSAgICAgICAgZGVzdHJveSgpOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlciht
X211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0
dXJuIFN0b3A7CisKKyAgICAgICAgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworCisg
ICAgICAgIEFTU0VSVChjb250ZXh0LmJvb2xDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1f
c3RhdHVzID0gRGlzcGF0Y2hlZDsKKyAgICB9CisKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQu
Ym9vbENhbGxiYWNrKCk7CisKKyAgICBib29sIHNob3VsZERlc3Ryb3kgPSBmYWxzZTsKKyAgICB7
CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmIChyZXR2
YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICBtX2NvbnRleHQgPSBXVEY6Om1v
dmUoY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNob3VsZERlc3Ryb3kgPSAh
bV9jb250ZXh0LnNvdXJjZTsKKyAgICB9CiAKKyAgICBpZiAoc2hvdWxkRGVzdHJveSkKKyAgICAg
ICAgZGVzdHJveShjb250ZXh0LmRlc3Ryb3lDYWxsYmFjayk7CiAgICAgcmV0dXJuIHJldHZhbDsK
IH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbiBj
b25kaXRpb24pCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIENvbnRleHQgY29udGV4dDsKIAotICAgIEFTU0VSVChtX3NvY2tldENhbGxiYWNrKTsKLSAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoZWQp
OwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKLQotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChtX2NhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBkZXN0cm95KCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3Nv
dXJjZS5nZXQoKTsKLSAgICBib29sIHJldHZhbCA9IG1fc29ja2V0Q2FsbGJhY2soY29uZGl0aW9u
KTsKLSAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCi0gICAgICAg
IGRlc3Ryb3koKTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7
CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBTdG9w
OworCisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBB
U1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9
PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1fc3RhdHVz
ID0gRGlzcGF0Y2hlZDsKKyAgICB9CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoY29udGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpIHsKKyAgICAgICAgZGVzdHJveShjb250ZXh0
LmRlc3Ryb3lDYWxsYmFjayk7CisgICAgICAgIHJldHVybiBTdG9wOworICAgIH0KKworICAgIGJv
b2wgcmV0dmFsID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwogCisgICAgYm9v
bCBzaG91bGREZXN0cm95ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNlKQor
ICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzaG91bGREZXN0cm95ID0gIW1fY29udGV4dC5zb3VyY2U7CisgICAgfQor
CisgICAgaWYgKHNob3VsZERlc3Ryb3kpCisgICAgICAgIGRlc3Ryb3koY29udGV4dC5kZXN0cm95
Q2FsbGJhY2spOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNl
OjpkZXN0cm95KCkKK3ZvaWQgR01haW5Mb29wU291cmNlOjpkZXN0cm95KGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4mIGRlc3Ryb3lDYWxsYmFjaykKIHsKLSAgICBhdXRvIGRlc3Ryb3lDYWxs
YmFjayA9IFdURjo6bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRl
c3Ryb3kgPSBtX2RlbGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOworICAgIC8vIE5vdGhpbmcg
c2hvdWxkIGJlIHNjaGVkdWxlZCBvbiB0aGlzIG9iamVjdCBhdCB0aGlzIHBvaW50LgorICAgIEFT
U0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CisgICAgbV9zdGF0dXMgPSBSZWFkeTsKKyAgICBEZWxl
dGVPbkRlc3Ryb3lUeXBlIGRlbGV0ZU9uRGVzdHJveSA9IG1fZGVsZXRlT25EZXN0cm95OworCiAg
ICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKICAgICAgICAgZGVzdHJveUNhbGxiYWNrKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAkocmV2aXNpb24gMTcz
MTY3KQorKysgU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXQgR1NvY2tldDsKK3R5cGVkZWYgdW5pb24gX0dN
dXRleCBHTXV0ZXg7CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02NSwxMyArNjYsMTMgQEAgcHJp
dmF0ZToKIAogICAgIGVudW0gU3RhdHVzIHsgUmVhZHksIFNjaGVkdWxlZCwgRGlzcGF0Y2hlZCB9
OwogCi0gICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsK
ICAgICB2b2lkIHNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVu
YywgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqKTsKICAgICB2b2lkIHNjaGVkdWxlVGltZW91
dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYywgaW50IHByaW9yaXR5LCBHTWFp
bkNvbnRleHQqKTsKICAgICB2b2lkIHZvaWRDYWxsYmFjaygpOwogICAgIGJvb2wgYm9vbENhbGxi
YWNrKCk7CiAgICAgYm9vbCBzb2NrZXRDYWxsYmFjayhHSU9Db25kaXRpb24pOwotICAgIHZvaWQg
ZGVzdHJveSgpOworICAgIHZvaWQgZGVzdHJveShjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
Jik7CiAKICAgICBzdGF0aWMgZ2Jvb2xlYW4gdm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNv
dXJjZSopOwogICAgIHN0YXRpYyBnYm9vbGVhbiBib29sU291cmNlQ2FsbGJhY2soR01haW5Mb29w
U291cmNlKik7CkBAIC03OSwxMiArODAsMjAgQEAgcHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVz
dHJveVR5cGUgbV9kZWxldGVPbkRlc3Ryb3k7CiAgICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdS
ZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Ci0gICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2Fu
Y2VsbGFibGU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAg
ICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNrOworICAgIEdNdXRleCBtX211dGV4OworCisg
ICAgc3RydWN0IENvbnRleHQgeworICAgICAgICBDb250ZXh0KCkgPSBkZWZhdWx0OworICAgICAg
ICBDb250ZXh0KENvbnRleHQmJikgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0JiBvcGVyYXRv
cj0oQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgR1JlZlB0cjxHU291cmNlPiBzb3Vy
Y2U7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKKyAgICAgICAg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiB2b2lkQ2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoKT4gYm9vbENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJ
T0NvbmRpdGlvbik+IHNvY2tldENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IGRlc3Ryb3lDYWxsYmFjazsKKyAgICB9IG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTczMTY3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzIgQEAKKzIwMTQtMDktMDEgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2VkIHRvIHJhY2Ug
Y29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgdW5pdCB0ZXN0IGZvciBHTWFpbkxvb3BTb3VyY2UgdGhhdCB0ZXN0cyBkaWZmZXJl
bnQKKyAgICAgICAgdHlwZXMgb2YgcmVzY2hlZHVsaW5nIHRhc2tzIG9uIGFscmVhZHktYWN0aXZl
IHNvdXJjZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcDogQWRkZWQuCisgICAgICAgIChHTWFpbkxvb3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3Vy
Y2VUZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxvb3BTb3VyY2VU
ZXN0KToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRlc3Q6OnJ1bkxvb3ApOgorICAgICAgICAo
R01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToKKyAgICAgICAgKEdNYWluTG9vcFNvdXJjZVRl
c3Q6OnNvdXJjZSk6CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNlQmFzaWNSZXNjaGVkdWxp
bmcpOgorICAgICAgICAodGVzdEdNYWluTG9vcFNvdXJjZVJlZW50cmFudFJlc2NoZWR1bGluZyk6
CisgICAgICAgICh0ZXN0R01haW5Mb29wU291cmNlRGlmZmVyZW50VGhyZWFkUmVzY2hlZHVsaW5n
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3VyY2VUZXN0KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxvb3BT
b3VyY2VUZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6
OnJ1bkxvb3ApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6
ZmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OnNv
dXJjZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNC0wOS0wMSAgQnJp
YW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAgICAgUHJvdmlkZSBj
b2x1bW4gbnVtYmVycyB0byBEVHJhY2Ugd2lsbEV4ZWN1dGUvZGlkRXhlY3V0ZSBwcm9iZXMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMTczMTY3KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDUgKzEzNiw2IEBAIHNldF90ZXN0c19wcm9wZXJ0aWVzKFRlc3RXZWJDb3JlIFBST1BF
UlQKIHNldF90YXJnZXRfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFJVTlRJTUVf
T1VUUFVUX0RJUkVDVE9SWSAke1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZ
fS9XZWJDb3JlKQogCiBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKKyAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dvYmplY3QvR1VuaXF1ZVB0ci5jcHAKICkKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNl
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitj
bGFzcyBHTWFpbkxvb3BTb3VyY2VUZXN0IHsKK3B1YmxpYzoKKyAgICBHTWFpbkxvb3BTb3VyY2VU
ZXN0KCkKKyAgICAgICAgOiBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBUUlVF
KSkKKyAgICB7CisgICAgfQorCisgICAgfkdNYWluTG9vcFNvdXJjZVRlc3QoKQorICAgIHsKKyAg
ICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBy
dW5Mb29wKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZpbmlzaCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdNYWluTG9vcFNvdXJjZSYgc291cmNlKCkgeyBy
ZXR1cm4gbV9zb3VyY2U7IH0KKworcHJpdmF0ZToKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7
CisgICAgR01haW5Mb29wU291cmNlIG1fc291cmNlOworfTsKKworVEVTVChXVEZfR01haW5Mb29w
U291cmNlLCBCYXNpY1Jlc2NoZWR1bGluZykKK3sKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQg
eworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNo
ZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBm
YWxzZTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1
bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZl
ciBiZSBjYWxsZWQuIFRoYXQncyB3aHkgd2UgYXNzZXJ0CisgICAgICAgIC8vIHRoYXQgdGhlIHZh
cmlhYmxlIGlzIGZhbHNlIGEgZmV3IGxpbmVzIGxhdGVyLgorICAgICAgICBjb250ZXh0LmZpbmlz
aGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKworICAgIGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0geworICAgICAgICBjb250ZXh0LmZp
bmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgIGNvbnRleHQudGVzdC5maW5pc2goKTsK
KyAgICB9KTsKKworICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisgICAgRVhQRUNUX0ZBTFNF
KGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmlu
aXNoZWRTZWNvbmRUYXNrKTsKK30KKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBSZWVudHJh
bnRSZXNjaGVkdWxpbmcpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAg
R01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNr
ID0gZmFsc2U7CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrID0gZmFsc2U7CisgICAg
fSBjb250ZXh0OworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0g
Rmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxl
KCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7CisgICAgICAgICAgICBBU1NFUlQoY29udGV4dC5m
aW5pc2hlZEZpcnN0VGFzayk7CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFz
ayA9IHRydWU7CisgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0p
OworCisgICAgICAgIGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sgPSB0cnVlOworICAgIH0pOwor
CisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZp
bmlzaGVkRmlyc3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkU2Vjb25k
VGFzayk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVzY2hlZHVsaW5nRnJvbURp
ZmZlcmVudFRocmVhZCkKK3sKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBH
TWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2s7
CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrOworICAgIH0gY29udGV4dDsKKworICAg
IGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEZpcnN0VGFzayIsIFsmXSB7
CisgICAgICAgIGdfdXNsZWVwKDEgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgICAgIGNvbnRleHQu
ZmluaXNoZWRGaXJzdFRhc2sgPSB0cnVlOworICAgIH0pOworCisgICAgZ190aHJlYWRfbmV3KG51
bGxwdHIsIFtdKGdwb2ludGVyIGRhdGEpIC0+IGdwb2ludGVyIHsKKyAgICAgICAgZ191c2xlZXAo
MC4yNSAqIEdfVVNFQ19QRVJfU0VDKTsKKworICAgICAgICBUZXN0aW5nQ29udGV4dCYgY29udGV4
dCA9ICpzdGF0aWNfY2FzdDxUZXN0aW5nQ29udGV4dCo+KGRhdGEpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisKKyAgICAgICAgY29udGV4dC50ZXN0
LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7CisgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICAgICAgICAgIGNv
bnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRleHQudGVz
dC5maW5pc2goKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ190aHJlYWRfZXhpdChudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwgJmNvbnRleHQpOworCisgICAgY29u
dGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkRmly
c3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237846</attachid>
            <date>2014-09-09 04:34:28 -0700</date>
            <delta_ts>2014-09-10 23:38:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140909043422.patch</filename>
            <type>text/plain</type>
            <size>40513</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzM0MjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDE0LTA5LTA5ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2UgaXMgZXhwb3NlZCB0
byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGNhbiBiZSBkaXNwYXRjaGluZyB0YXNr
cyBvbiBvbmUgdGhyZWFkCisgICAgICAgIHdoaWxlIGhhdmluZyBhIG5ldyB0YXNrIHNjaGVkdWxl
ZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQuIFRoaXMKKyAgICAgICAgY2FuIGZvciBpbnN0YW5jZSBv
Y2N1ciBpbiBXZWJLaXRWaWRlb1NpbmssIHdoZXJlIHRoZSB0aW1lb3V0CisgICAgICAgIGNhbGxi
YWNrIGNhbiBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgd2hpbGUgYXQgdGhlIHNhbWUgdGltZQor
ICAgICAgICBpdCBpcyBiZWluZyByZXNjaGVkdWxlZCBvbiBhIGRpZmZlcmVudCB0aHJlYWQgKGNy
ZWF0ZWQgdGhyb3VnaAorICAgICAgICBHU3RyZWFtZXIpLgorCisgICAgICAgIFRoZSBpbml0aWFs
IHNvbHV0aW9uIGlzIHRvIHVzZSBHTXV0ZXggdG8gcHJldmVudCBwYXJhbGxlbCBkYXRhCisgICAg
ICAgIGFjY2VzcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLiBJbiB0aGUgZnV0dXJlIEkgcGxhbiB0
byBsb29rIGF0CisgICAgICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyB0aHJlYWQtc3Bl
Y2lmaWMgR01haW5Mb29wU291cmNlCisgICAgICAgIG9iamVjdHMgdGhhdCB3b3VsZG4ndCByZXF1
aXJlIHRoZSB1c2Ugb2YgR011dGV4LgorCisgICAgICAgIEdTb3VyY2UsIEdDYW5jZWxsYWJsZSBh
bmQgc3RkOjpmdW5jdGlvbjw+IG9iamVjdHMgYXJlIG5vdyBwYWNrZWQKKyAgICAgICAgaW50byBh
biBpbnRlcm5hbCBDb250ZXh0IHN0cnVjdHVyZS4gVXNpbmcgdGhlIEMrKzExIG1vdmUgc2VtYW50
aWNzCisgICAgICAgIGl0J3Mgc2ltcGxlIHRvLCBhdCB0aGUgdGltZSBvZiBkaXNwYXRjaCwgbW92
ZSB0aGUgY3VycmVudCBjb250ZXh0CisgICAgICAgIG91dCBvZiB0aGUgR01haW5Mb29wU291cmNl
IG9iamVjdCBpbiBjYXNlIHRoZSBkaXNwYXRjaCBjYXVzZXMgYQorICAgICAgICByZXNjaGVkdWxp
bmcgb24gdGhhdCBzYW1lIG9iamVjdC4KKworICAgICAgICBBbHNvIGFkZGVkIGluIHRoZSBDb250
ZXh0IHN0cnVjdCBpcyBhIG5ldyBHQ2FuY2VsbGFibGUuIFRoZSBwb2ludGVyCisgICAgICAgIG9m
IHRoYXQgb2JqZWN0IGlzIHNoYXJlZCB3aXRoIHRoZSBHTWFpbkxvb3BTb3VyY2UgYmVmb3JlIHRo
ZSBDb250ZXh0CisgICAgICAgIGlzIG1vdmVkIG91dCBmb3IgdGhlIGNhbGxiYWNrIGRpc3BhdGNo
LiBUaGlzIG1ha2VzIGl0IHNhZmUgdG8gY2FuY2VsCisgICAgICAgIG9yIGV2ZW4gZGVsZXRlIHRo
ZSBHTWFpbkxvb3BTb3VyY2UgZHVyaW5nIHRoZSBkaXNwYXRjaCBhbmQgcHJldmVudHMKKyAgICAg
ICAgdXNlLWFmdGVyLWRlbGV0ZSBvbiBHTWFpbkxvb3BTb3VyY2Ugb25jZSB0aGUgZGlzcGF0Y2gg
aXMgZG9uZSBpbgorICAgICAgICB0aGUgR01haW5Mb29wU291cmNlOjoqQ2FsbGJhY2soKSBtZXRo
b2RzLgorCisgICAgICAgIEFsbCB0aGUgc2NoZWR1bGUqKCkgbWV0aG9kcyBhbmQgdGhlIGNhbmNl
bFdpdGhvdXRMb2NraW5nKCkgbWV0aG9kCisgICAgICAgIGNhbGxlcnMgbm93IGxvY2sgdGhlIEdN
dXRleCB0byBlbnN1cmUgbm8gb25lIGVsc2UgaXMgYWNjZXNzaW5nIHRoZQorICAgICAgICBkYXRh
IGF0IHRoYXQgbW9tZW50LiBTaW1pbGFyIGdvZXMgZm9yIHRoZSBkaXNwYXRjaCBtZXRob2RzLCBi
dXQgdGhvc2UKKyAgICAgICAgZG8gdGhlIGRpc3BhdGNoIGFuZCBwb3NzaWJsZSBkZXN0cnVjdGlv
biBkdXRpZXMgd2l0aCB0aGUgbXV0ZXggdW5sb2NrZWQuCisgICAgICAgIFRoZSBkaXNwYXRjaCBj
YW4gY2F1c2UgcmVzY2hlZHVsaW5nIG9uIHRoZSBzYW1lIEdNYWluTG9vcFNvdXJjZSBvYmplY3Qs
CisgICAgICAgIHdoaWNoIG11c3Qgbm90IGJlIGRvbmUgd2l0aCBhIGxvY2tlZCBtdXRleC4KKwor
ICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHA6CisgICAgICAgIChXVEY6
OkdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5M
b29wU291cmNlOjp+R01haW5Mb29wU291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291
cmNlOjpjYW5jZWwpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbFdpdGhv
dXRMb2NraW5nKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVT
b3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKToKKyAgICAg
ICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheSk6CisgICAgICAgIChX
VEY6OkdNYWluTG9vcFNvdXJjZTo6dm9pZENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5M
b29wU291cmNlOjpib29sQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6
OnNvY2tldENhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpzb2NrZXRT
b3VyY2VDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Q29udGV4dDo6
ZGVzdHJveVNvdXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6cmVzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OmRlc3Ryb3kpOiBEZWxldGVk
LgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oOgorCiAyMDE0LTA5LTA3
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBo
YXZlIGEgcmV1c2FibGUgU1NBIGJ1aWxkZXIKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2dvYmplY3Qv
R01haW5Mb29wU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAJKHJldmlzaW9uIDE3MzQyNikKKysrIFNvdXJjZS9XVEYvd3Rm
L2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
OCBAQAogI2lmIFVTRShHTElCKQogCiAjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCi0KICNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC00MiwxNyArNDIsMjAgQEAgR01haW5Mb29wU291cmNl
OjpHTWFpbkxvb3BTb3VyY2UoKQogICAgIDogbV9kZWxldGVPbkRlc3Ryb3koRG9Ob3REZWxldGVP
bkRlc3Ryb3kpCiAgICAgLCBtX3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1f
bXV0ZXgpOwogfQogCiBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRl
c3Ryb3lUeXBlIGRlbGV0ZU9uRGVzdHJveSkKICAgICA6IG1fZGVsZXRlT25EZXN0cm95KGRlbGV0
ZU9uRGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJlYWR5KQogeworICAgIGdfbXV0ZXhfaW5pdCgm
bV9tdXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCiB7CiAg
ICAgY2FuY2VsKCk7CisgICAgZ19tdXRleF9jbGVhcigmbV9tdXRleCk7CiB9CiAKIGJvb2wgR01h
aW5Mb29wU291cmNlOjppc1NjaGVkdWxlZCgpIGNvbnN0CkBAIC02NywyNiArNzAsMjkgQEAgYm9v
bCBHTWFpbkxvb3BTb3VyY2U6OmlzQWN0aXZlKCkgY29uc3QKIAogdm9pZCBHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCgpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOwot
Ci0gICAgaWYgKG1fY2FuY2VsbGFibGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1f
Y2FuY2VsbGFibGUuZ2V0KCkpOwotICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsK
LSAgICBkZXN0cm95KCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxXaXRob3V0TG9ja2luZygpOwogfQogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVzZXQo
KQordm9pZCBHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbFdpdGhvdXRMb2NraW5nKCkKIHsKKyAgICAv
LyBBIHZhbGlkIGNvbnRleHQgc2hvdWxkIG9ubHkgYmUgcHJlc2VudCBpZiBHTWFpbkxvb3BTb3Vy
Y2UgaXMgaW4gdGhlIFNjaGVkdWxlZCBzdGF0ZS4KKyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3Vy
Y2UgfHwgbV9zdGF0dXMgPT0gU2NoZWR1bGVkKTsKKyAgICBBU1NFUlQoIW1fY2FuY2VsbGFibGUg
fHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgQVNTRVJUKG1fZGVsZXRlT25EZXN0cm95
ICE9IERlbGV0ZU9uRGVzdHJveSB8fCAobV9zdGF0dXMgPT0gUmVhZHkgJiYgIW1fY29udGV4dC5z
b3VyY2UpKTsKICAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0gbnVsbHB0cjsK
KworICAgIC8vIFRoZSBzb3VyY2UgaXMgcGVyaGFwcyBiZWluZyBjYW5jZWxsZWQgaW4gdGhlIG1p
ZGRsZSBvZiBhIGNhbGxiYWNrIGRpc3BhdGNoLgorICAgIC8vIENhbmNlbGxpbmcgdGhpcyBHQ2Fu
Y2VsbGFibGUgb2JqZWN0IHdpbGwgY29udmV5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCisgICAg
Ly8gY3VycmVudCBleGVjdXRpb24gY29udGV4dCB3aGVuIHRoZSBjYWxsYmFjayBkaXNwYXRjaCBp
cyBmaW5pc2hlZC4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgp
KTsKICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IG51
bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJveUNhbGxi
YWNrID0gbnVsbHB0cjsKKworICAgIGlmICghbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ29udGV4dCBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisgICAg
Y29udGV4dC5kZXN0cm95U291cmNlKCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuY3Rp
b24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQpAQCAtOTQsNDMgKzEwMCw3
NCBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVJZGxlU291cmNlCiAgICAgQVNTRVJU
KG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1f
c291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAgIGdfc291cmNlX3Nl
dF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2Nv
bnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklU
WV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5n
ZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQo
KSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFjaCht
X3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eSht
X2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxi
YWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRy
KTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwot
ICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygp
OworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7Cisg
ICAgICAgIGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKSwKKyAgICAgICAgYWRvcHRHUmVm
KGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxs
YWJsZQorICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBi
b29sQ2FsbGJhY2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAg
V1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlSWRsZVNvdXJj
ZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2sp
LCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBpbnQg
cHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBX
VEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRl
c3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBj
YW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsK
KyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygp
KSwKKyAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxs
cHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJh
Y2sKKyAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29j
a2V0Q2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9Owog
ICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
Pihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01h
aW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJv
b2wgKEdJT0NvbmRpdGlvbik+IGZ1bmN0aW9uLCBHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlv
biBjb25kaXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFp
bkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgR011dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgLy8gRG8g
bm90IGFsbG93IHNjaGVkdWxpbmcgdGhpcyB0eXBlIG9mIGNhbGxiYWNrIG9uIGRlbGV0ZS1vbi1k
ZXN0cm95IEdNYWluTG9vcFNvdXJjZXMuCisgICAgQVNTRVJUKG1fZGVsZXRlT25EZXN0cm95ID09
IERvTm90RGVsZXRlT25EZXN0cm95KTsKKworICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7
CisgICAgR0NhbmNlbGxhYmxlKiBzb2NrZXRDYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3
KCk7CisgICAgbV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRl
X3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgc29ja2V0Q2FuY2VsbGFibGUpKSwKKyAgICAgICAg
YWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBhZG9wdEdSZWYoc29ja2V0
Q2FuY2VsbGFibGUpLAorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKKyAgICAgICAg
bnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCisg
ICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKKwogICAgIEFTU0VSVCht
X3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7Ci0KLSAgICBtX3Nv
Y2tldENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFj
ayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwotICAgIG1fY2FuY2VsbGFibGUgPSBhZG9w
dEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19z
b2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgbV9jYW5jZWxsYWJsZS5nZXQo
KSkpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKLSAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHNvY2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19z
b3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICBnX3NvdXJjZV9zZXRf
bmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4oc29ja2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9h
dHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5M
b29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJj
ZUZ1bmMgc291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0
KQpAQCAtMTM4LDExNiArMTc1LDIxNCBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVU
aW1lb3V0U291CiAgICAgQVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9
IFNjaGVkdWxlZDsKIAotICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25h
bWUobV9zb3VyY2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4
dC5zb3VyY2UuZ2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAhPSBHX1BSSU9SSVRZX0RF
RkFVTFQpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJp
b3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNl
RnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5n
ZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQu
c291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29u
dGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBn
X3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBkZWxheSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5j
dGlvbiwgR01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291
cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKLSAg
ICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NFUlQo
IW1fY29udGV4dC5zb3VyY2UpOworICAgIG1fY29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRHUmVm
KGdfdGltZW91dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKSwKKyAgICAgICAgYWRvcHRHUmVm
KGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxs
YWJsZQorICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBi
b29sQ2FsbGJhY2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAg
V1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlVGltZW91dFNv
dXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJh
Y2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBm
dW5jdGlvbiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBkZWxheSwgaW50IHByaW9yaXR5LCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01haW5Db250ZXh0KiBjb250
ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91
dF9zb3VyY2VfbmV3KGRlbGF5LmNvdW50KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6
bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJv
eUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNl
bFdpdGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOworICAg
IG1fY29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KGRl
bGF5LmNvdW50KCkpKSwKKyAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAor
ICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQorICAgICAgICBudWxscHRyLCAv
LyB2b2lkQ2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlv
bikKKyAgICB9OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7
CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hh
ciogbmFtZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNl
Y29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95
RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBt
X3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNv
dW50KCkpKTsKLSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAg
bV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisK
KyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOworICAgIG1fY29udGV4dCA9IHsKKyAgICAg
ICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkp
LAorICAgICAgICBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51bGxw
dHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCisgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCisg
ICAgICAgIG51bGxwdHIsIC8vIGJvb2xDYWxsYmFjaworICAgICAgICBudWxscHRyLCAvLyBzb2Nr
ZXRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQorICAgIH07CiAg
ICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBH
TWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6
OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxheSwg
aW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwgR01h
aW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNlID0gYWRv
cHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOwotICAg
IG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxs
YmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKworICAgIEFTU0VSVCgh
bV9jb250ZXh0LnNvdXJjZSk7CisgICAgbV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdSZWYo
Z190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSksCisgICAgICAgIGFk
b3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0
Q2FuY2VsbGFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8gdm9pZENhbGxiYWNrCisgICAgICAgIFdU
Rjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbGxiYWNrCisg
ICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKICAgICBzY2hlZHVsZVRp
bWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJj
ZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6dm9pZENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQorICAgIENvbnRleHQgY29u
dGV4dDsKKworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQoY29u
dGV4dC52b2lkQ2FsbGJhY2spOworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVk
KTsKKyAgICAgICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworCisgICAgICAgIG1fY2FuY2VsbGFi
bGUgPSBjb250ZXh0LmNhbmNlbGxhYmxlOworICAgIH0KKworICAgIGNvbnRleHQudm9pZENhbGxi
YWNrKCk7CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5j
ZWxsYWJsZS5nZXQoKSkpIHsKKyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFNlbGZEZXN0cnVjdCA9IGZhbHNl
OworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAg
bV9zdGF0dXMgPSBSZWFkeTsKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAg
ICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0cm95ID09IERlbGV0ZU9uRGVz
dHJveTsKKyAgICB9CiAKLSAgICBBU1NFUlQobV92b2lkQ2FsbGJhY2spOwotICAgIEFTU0VSVCht
X3N0YXR1cyA9PSBTY2hlZHVsZWQpOwotICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKLQotICAg
IEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxiYWNrKCk7
Ci0gICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOwor
ICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3Qp
CisgICAgICAgIGRlbGV0ZSB0aGlzOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENh
bGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQ29udGV4dCBjb250ZXh0OworCisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICBy
ZXR1cm4gU3RvcDsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisK
KyAgICAgICAgQVNTRVJUKGNvbnRleHQuYm9vbENhbGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1f
c3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKKwor
ICAgICAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5jZWxsYWJsZTsKKyAgICB9CisKKyAg
ICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9vbENhbGxiYWNrKCk7CisKKyAgICBpZiAoZ19jYW5j
ZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpIHsKKyAgICAg
ICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CisgICAgICAgIHJldHVybiBTdG9wOworICAgIH0K
IAotICAgIEFTU0VSVChtX2Jvb2xDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNj
aGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoZWQ7Ci0KLSAgICBHU291cmNlKiBzb3VyY2UgPSBtX3NvdXJjZS5nZXQoKTsKLSAgICBib29s
IHJldHZhbCA9IG1fYm9vbENhbGxiYWNrKCk7Ci0gICAgaWYgKCFyZXR2YWwgJiYgc291cmNlID09
IG1fc291cmNlLmdldCgpKQotICAgICAgICBkZXN0cm95KCk7CisgICAgYm9vbCBzaG91bGRTZWxm
RGVzdHJ1Y3QgPSBmYWxzZTsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7CisgICAgICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAgICAgIG1fY2FuY2VsbGFibGUg
PSBudWxscHRyOworICAgICAgICBzaG91bGRTZWxmRGVzdHJ1Y3QgPSBtX2RlbGV0ZU9uRGVzdHJv
eSA9PSBEZWxldGVPbkRlc3Ryb3k7CisKKyAgICAgICAgaWYgKHJldHZhbCAmJiAhbV9jb250ZXh0
LnNvdXJjZSkgeworICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOwor
ICAgICAgICAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoY29udGV4dC5zb3VyY2UpIHsKKyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7
CisgICAgICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAgICAgICAgICBkZWxldGUgdGhp
czsKKyAgICB9CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJj
ZTo6c29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OwogCi0g
ICAgQVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hl
ZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRj
aGVkOwotCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKG1fY2FuY2VsbGFibGUu
Z2V0KCkpKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0
dmFsID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNv
dXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIHsKKyAgICAg
ICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQu
c291cmNlKQorICAgICAgICAgICAgcmV0dXJuIFN0b3A7CiAKLSAgICByZXR1cm4gcmV0dmFsOwot
fQorICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CiAKLXZvaWQgR01haW5M
b29wU291cmNlOjpkZXN0cm95KCkKLXsKLSAgICBhdXRvIGRlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShtX2Rlc3Ryb3lDYWxsYmFjayk7Ci0gICAgYXV0byBkZWxldGVPbkRlc3Ryb3kgPSBtX2Rl
bGV0ZU9uRGVzdHJveTsKLSAgICByZXNldCgpOwotICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCi0g
ICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOworICAgICAgICBBU1NFUlQoY29udGV4dC5zb2NrZXRD
YWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0
dXMgPT0gRGlzcGF0Y2hlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hlZDsKIAotICAg
IGlmIChkZWxldGVPbkRlc3Ryb3kgPT0gRG9Ob3REZWxldGVPbkRlc3Ryb3kpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7CisgICAg
fQorCisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNvbnRleHQuc29ja2V0Q2Fu
Y2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworICAg
ICAgICByZXR1cm4gU3RvcDsKKyAgICB9CisKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQuc29j
a2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ry
b3lTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIFN0b3A7CisgICAgfQorCisgICAgeworICAgICAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3N0YXR1cyA9IFJlYWR5
OworICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKHJldHZhbCAm
JiAhbV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92ZShj
b250ZXh0KTsKKworICAgICAgICBBU1NFUlQobV9kZWxldGVPbkRlc3Ryb3kgPT0gRG9Ob3REZWxl
dGVPbkRlc3Ryb3kpOworICAgIH0KIAotICAgIGRlbGV0ZSB0aGlzOworICAgIGlmIChjb250ZXh0
LnNvdXJjZSkKKyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CisKKyAgICByZXR1cm4g
cmV0dmFsOwogfQogCiBnYm9vbGVhbiBHTWFpbkxvb3BTb3VyY2U6OnZvaWRTb3VyY2VDYWxsYmFj
ayhHTWFpbkxvb3BTb3VyY2UqIHNvdXJjZSkKQEAgLTI2Niw2ICs0MDEsMTQgQEAgZ2Jvb2xlYW4g
R01haW5Mb29wU291cmNlOjpzb2NrZXRTb3VyY2VDYQogICAgIHJldHVybiBzb3VyY2UtPnNvY2tl
dENhbGxiYWNrKGNvbmRpdGlvbikgPT0gQ29udGludWU7CiB9CiAKK3ZvaWQgR01haW5Mb29wU291
cmNlOjpDb250ZXh0OjpkZXN0cm95U291cmNlKCkKK3sKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChzb2NrZXRDYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2Uu
Z2V0KCkpOworICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCisgICAgICAgIGRlc3Ryb3lDYWxsYmFj
aygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHTElCKQpJbmRl
eDogU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCShyZXZpc2lvbiAxNzM0
MjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgogCiB0eXBlZGVmIHN0cnVjdCBfR1NvY2tldCBHU29ja2V0OwordHlwZWRlZiB1bmlvbiBfR011
dGV4IEdNdXRleDsKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTY1LDEyICs2NiwxMyBAQCBwcml2
YXRlOgogCiAgICAgZW51bSBTdGF0dXMgeyBSZWFkeSwgU2NoZWR1bGVkLCBEaXNwYXRjaGVkIH07
CiAKLSAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBjYW5jZWxXaXRob3V0TG9ja2luZygpOwog
ICAgIHZvaWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
LCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOwogICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0
U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWlu
Q29udGV4dCopOwogICAgIHZvaWQgdm9pZENhbGxiYWNrKCk7CiAgICAgYm9vbCBib29sQ2FsbGJh
Y2soKTsKICAgICBib29sIHNvY2tldENhbGxiYWNrKEdJT0NvbmRpdGlvbik7CisKICAgICB2b2lk
IGRlc3Ryb3koKTsKIAogICAgIHN0YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01h
aW5Mb29wU291cmNlKik7CkBAIC03OSwxMiArODEsMjQgQEAgcHJpdmF0ZToKIAogICAgIERlbGV0
ZU9uRGVzdHJveVR5cGUgbV9kZWxldGVPbkRlc3Ryb3k7CiAgICAgU3RhdHVzIG1fc3RhdHVzOwot
ICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CisgICAgR011dGV4IG1fbXV0ZXg7CiAgICAg
R1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2
b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9v
bENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2Nr
ZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNr
OworCisgICAgc3RydWN0IENvbnRleHQgeworICAgICAgICBDb250ZXh0KCkgPSBkZWZhdWx0Owor
ICAgICAgICBDb250ZXh0KENvbnRleHQmJikgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0JiBv
cGVyYXRvcj0oQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBkZXN0cm95U291
cmNlKCk7CisKKyAgICAgICAgR1JlZlB0cjxHU291cmNlPiBzb3VyY2U7CisgICAgICAgIEdSZWZQ
dHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFi
bGU+IHNvY2tldENhbmNlbGxhYmxlOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IHZv
aWRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPiBib29sQ2FsbGJhY2s7
CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gc29ja2V0Q2FsbGJh
Y2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUNhbGxiYWNrOworICAg
IH0gbV9jb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM0MjYpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxNC0w
OS0wOSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgR01h
aW5Mb29wU291cmNlIGlzIGV4cG9zZWQgdG8gcmFjZSBjb25kaXRpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU4MDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3IgR01h
aW5Mb29wU291cmNlLgorCisgICAgICAgIFRoZSB0ZXN0cyBjaGVjayBjb3JyZWN0IGJlaGF2aW9y
IG9mIEdNYWluTG9vcFNvdXJjZSBpbiB2YXJpb3VzIGNvbmRpdGlvbnMgLS0KKyAgICAgICAgZnJv
bSB0aGUgbW9zdCBzaW1wbGUgcmVzY2hlZHVsaW5nIHRvIHJlc2NoZWR1bGluZyBkdXJpbmcgZGlz
cGF0Y2gsIGNhbmNlbGxpbmcKKyAgICAgICAgb3IgZGVzdHJveWluZyB0aGUgR01haW5Mb29wU291
cmNlIGR1cmluZyBkaXNwYXRjaCwgcHJvcGVyIGRlc3Ryb3kgY2FsbGJhY2sKKyAgICAgICAgZGlz
cGF0Y2hpbmcgZXRjLgorCisgICAgICAgIFNjaGVkdWxpbmcgYm90aCB2b2lkIChvbmUtdGltZSkg
YW5kIGJvb2wgKHJlcGVhdGFibGUpIGNhbGxiYWNrcyBpcyB0ZXN0ZWQuCisgICAgICAgIFN0YXRl
IG9mIHRoZSBHTWFpbkxvb3BTb3VyY2Ugb2JqZWN0IChlaXRoZXIgcmVhZHksIHNoZWR1bGVkIG9y
IGFjdGl2ZSkgaXMKKyAgICAgICAgdGhvcm91Z2hseSB0ZXN0ZWQgdGhyb3VnaG91dCB0aGUgbGlm
ZXRpbWUgb2YgdGhhdCBvYmplY3QuCisKKyAgICAgICAgU3RpbGwgbWlzc2luZyBhcmUgdGVzdHMg
Zm9yIHNvY2tldCBjYWxsYmFja3MsIHdoaWNoIGFyZSBhIGJpdCB0cmlja2llciBiZWNhdXNlCisg
ICAgICAgIHRoZXkgcmVseSBvbiBhIEdTb2NrZXQgb2JqZWN0LiBUaGUgZGVsZXRlLW9uLWRlc3Ry
b3kgR01haW5Mb29wU291cmNlIG9iamVjdHMKKyAgICAgICAgYXJlIGFsc28gbm90IHRlc3RlZCB0
aG9yb3VnaGx5LCBzaW1wbHkgYmVjYXVzZSBpdCBpcyBhdCB0aGUgbW9tZW50IGltcG9zc2libGUK
KyAgICAgICAgdG8gdGVzdCB0aGF0IHRoZSBvYmplY3RzIGFyZSBhY3R1YWxseSBkZXN0cm95ZWQg
d2hlbiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UKKyAgICAgICAgaXMgZmluYWxseSBkZWxldGVk
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6R01haW5M
b29wU291cmNlVGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VU
ZXN0Ojp+R01haW5Mb29wU291cmNlVGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFp
bkxvb3BTb3VyY2VUZXN0OjpydW5Mb29wKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWlu
TG9vcFNvdXJjZVRlc3Q6OmRlbGF5ZWRGaW5pc2gpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
R01haW5Mb29wU291cmNlVGVzdDo6ZmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdN
YWluTG9vcFNvdXJjZVRlc3Q6OnNvdXJjZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxNC0wOS0wOCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBmaXhlZCBsYXlvdXQgYnkgZGVmYXVsdApJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAxNzM0MjYpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsNSArMTM2LDYgQEAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVAog
c2V0X3RhcmdldF9wcm9wZXJ0aWVzKFRlc3RXZWJDb3JlIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQ
VVRfRElSRUNUT1JZICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L1dl
YkNvcmUpCiAKIGxpc3QoQVBQRU5EIFRlc3RXVEZfU09VUkNFUworICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKICAgICAke1RFU1RX
RUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ29iamVjdC9HVW5pcXVlUHRyLmNwcAogKQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNz
IEdNYWluTG9vcFNvdXJjZVRlc3QgeworcHVibGljOgorICAgIEdNYWluTG9vcFNvdXJjZVRlc3Qo
KQorICAgICAgICA6IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQor
ICAgIHsKKyAgICB9CisKKyAgICB+R01haW5Mb29wU291cmNlVGVzdCgpCisgICAgeworICAgICAg
ICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkxv
b3AoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIHZvaWQgZGVsYXllZEZpbmlzaCgpCisgICAgeworICAgICAgICBnX3RpbWVvdXRfYWRk
KDI1MCwKKyAgICAgICAgICAgIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAgICAgICBH
TWFpbkxvb3BTb3VyY2VUZXN0JiB0ZXN0ID0gKnN0YXRpY19jYXN0PEdNYWluTG9vcFNvdXJjZVRl
c3QqPihkYXRhKTsKKyAgICAgICAgICAgICAgICB0ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CisgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1f
bWFpbkxvb3ApOworICAgIH0KKworICAgIEdNYWluTG9vcFNvdXJjZSYgc291cmNlKCkgeyByZXR1
cm4gbV9zb3VyY2U7IH0KKworcHJpdmF0ZToKKyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7Cisg
ICAgR01haW5Mb29wU291cmNlIG1fc291cmNlOworfTsKKworVEVTVChXVEZfR01haW5Mb29wU291
cmNlLCBCYXNpY1Jlc2NoZWR1bGluZykKK3sKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewor
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRG
aXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxz
ZTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJj
ZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJb
VGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUg
Y2FsbGVkLiBUaGF0J3Mgd2h5IHdlIGFzc2VydAorICAgICAgICAvLyB0aGF0IHRoZSB2YXJpYWJs
ZSBpcyBmYWxzZSBhIGZldyBsaW5lcyBsYXRlci4KKyAgICAgICAgY29udGV4dC5maW5pc2hlZEZp
cnN0VGFzayA9IHRydWU7CisgICAgfSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNv
dXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVk
dWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNT
Y2hlZHVsZWQoKSk7CisgICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsK
KyAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgIH0pOworICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgIGNvbnRleHQudGVz
dC5ydW5Mb29wKCk7CisKKyAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
QWN0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsK
KyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RFU1Qo
V1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50UmVzY2hlZHVsaW5nKQoreworICAgIHN0cnVj
dCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAg
ICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOworICAgICAgICBib29sIGZpbmlz
aGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0gY29udGV4dDsKKworICAgIEVYUEVDVF9UUlVF
KCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Qu
c291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICBFWFBF
Q1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0geworICAgICAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5z
b3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQu
ZmluaXNoZWRGaXJzdFRhc2spOworCisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25k
VGFzayA9IHRydWU7CisgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAg
IH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVs
ZWQoKSk7CisKKyAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAg
fSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkp
OworCisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC5m
aW5pc2hlZEZpcnN0VGFzayk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29u
ZFRhc2spOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIFJlc2NoZWR1bGluZ0Zyb21E
aWZmZXJlbnRUaHJlYWQpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAg
R01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNr
OworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzazsKKyAgICB9IGNvbnRleHQ7CisKKyAg
ICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYg
IWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBnX3VzbGVl
cCgxICogR19VU0VDX1BFUl9TRUMpOworICAgICAgICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNr
ID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCku
aXNTY2hlZHVsZWQoKSk7CisKKyAgICBHVGhyZWFkKiBoZWxwZXJUaHJlYWQgPSBnX3RocmVhZF9u
ZXcobnVsbHB0ciwgW10oZ3BvaW50ZXIgZGF0YSkgLT4gZ3BvaW50ZXIgeworICAgICAgICBnX3Vz
bGVlcCgwLjI1ICogR19VU0VDX1BFUl9TRUMpOworCisgICAgICAgIFRlc3RpbmdDb250ZXh0JiBj
b250ZXh0ID0gKnN0YXRpY19jYXN0PFRlc3RpbmdDb250ZXh0Kj4oZGF0YSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0
LmZpbmlzaGVkRmlyc3RUYXNrKTsKKworICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2No
ZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZdIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworCisgICAgICAgICAgICBjb250ZXh0LmZpbmlz
aGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7
CisgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCku
aXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgZ190aHJlYWRfZXhpdChudWxscHRyKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwgJmNvbnRleHQpOworCisgICAgY29udGV4dC50ZXN0
LnJ1bkxvb3AoKTsKKyAgICBnX3RocmVhZF91bnJlZihoZWxwZXJUaHJlYWQpOworCisgICAgRVhQ
RUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0
LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVz
dHJ1Y3Rpb25EdXJpbmdEaXNwYXRjaCkKK3sKKyAgICAvLyBUaGlzIGlzIGp1c3QgYSByYXcgdGVz
dCB0aGF0IGVuc3VyZXMgZGVsZXRpbmcgdGhlIEdNYWluTG9vcFNvdXJjZSBvYmplY3QgZHVyaW5n
CisgICAgLy8gZGlzcGF0Y2ggZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMuIFRoaXMgdGVzdCBzdWNj
ZWVkcyBpZiBpdCBkb2Vzbid0IGNyYXNoLgorCisgICAgR01haW5Mb29wU291cmNlKiBzb3VyY2U7
CisgICAgR01haW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpOwor
CisgICAgc291cmNlID0gbmV3IEdNYWluTG9vcFNvdXJjZTsKKyAgICBzb3VyY2UtPnNjaGVkdWxl
KCJbVGVzdF0gRGVzdHJveVNvdXJjZVRhc2siLCBbJl0geworICAgICAgICBkZWxldGUgc291cmNl
OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgIH0pOworICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKKworICAgIHNvdXJjZSA9IG5ldyBHTWFpbkxvb3BTb3VyY2U7CisgICAg
c291cmNlLT5zY2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lTb3VyY2VUYXNrIiwgWyZdIHsKKyAgICAg
ICAgZGVsZXRlIHNvdXJjZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKwor
ICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3Vy
Y2UsIENhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNoKQoreworICAgIHN0cnVjdCBU
ZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAg
ICAgdW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1Rf
VFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50
ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gUmVwZWF0aW5nVGFzayIsCisgICAgICAgIFsm
XSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAg
ICAgICBjb250ZXh0LmNhbGxDb3VudCsrOworICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FsbENv
dW50ID09IDMpCisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLmNhbmNlbCgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgIGNvbnRleHQudGVz
dC5kZWxheWVkRmluaXNoKCk7CisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgIEVY
UEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgRVhQRUNU
X0VRKDMsIGNvbnRleHQuY2FsbENvdW50KTsKK30KKworVEVTVChXVEZfR01haW5Mb29wU291cmNl
LCBCYXNpY0Rlc3Ryb3lDYWxsYmFja3MpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsK
KyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGNhbGxiYWNr
Q2FsbGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFs
c2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAg
ICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxi
YWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsm
XSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1Nj
aGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAgICAg
IEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQuY2FsbGJhY2tDYWxsZWQpOworICAgICAgICBFWFBFQ1RfVFJV
RShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorCisgICAgeworICAgICAg
ICBUZXN0aW5nQ29udGV4dCBjb250ZXh0OworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50
ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCku
c2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAorICAgICAgICAgICAgWyZdIHsKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUo
KSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAg
ICAgIGNvbnRleHQuY2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAg
IFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0Nh
bGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAg
ICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuY2FsbGJhY2tDYWxsZWQpOworICAgICAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCitURVNUKFdU
Rl9HTWFpbkxvb3BTb3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdE
aXNwYXRjaCkKK3sKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxv
b3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrQ2FsbENvdW50PSAw
OworICAgICAgICBib29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07CisK
KyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIEVYUEVDVF9U
UlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lDYWxsYmFjayIsCisgICAgICAg
ICAgICBbJl0geworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCsrOworICAgICAgICAg
ICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5jYW5jZWwoKTsKKyAgICAgICAgICAgIH0sIEdf
UFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBj
b250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9v
cCgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50KTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29u
dGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAg
ICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxl
ZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLmNhbmNlbCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAg
ICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJV
RShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4
dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsK
KworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkp
OworICAgICAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNrc0FmdGVyUmVzY2hl
ZHVsaW5nRHVyaW5nRGlzcGF0Y2gpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAg
ICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25lZCBmaXJzdENh
bGxiYWNrQ2FsbENvdW50ID0gMDsKKyAgICAgICAgYm9vbCBmaXJzdERlc3Ryb3lDYWxsYmFja0Nh
bGxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzZWNvbmRDYWxsYmFja0NhbGxDb3VudCA9
IDA7CisgICAgICAgIGJvb2wgc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7Cisg
ICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAg
RVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gQmFzZUNhbGxiYWNrIiwKKyAg
ICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxl
ZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpcnN0Q2FsbGJhY2tDYWxsQ291bnQrKzsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBS
ZXNjaGVkdWxpbmdDYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCsrOworICAgICAg
ICAgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAg
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5z
ZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNT
Y2hlZHVsZWQoKSk7CisgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAg
ICAgICBbJl0geworICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIEdNYWluTG9v
cFNvdXJjZSBoYXMgYmVlbiByZXNjaGVkdWxlZCwgZXJnbyB0aGUgU2NoZWR1bGVkIHN0YXR1cy4K
KyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hl
ZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5maXJzdERlc3Ryb3lDYWxsYmFja0Nh
bGxlZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNvbnRleHQudGVzdC5k
ZWxheWVkRmluaXNoKCk7CisgICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDEsIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3VudCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQuZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgICAg
ICBFWFBFQ1RfRVEoMSwgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIEVYUEVD
VF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEJhc2VDYWxsYmFjayIsCisgICAgICAg
ICAgICBbJl0geworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50Kys7CisgICAg
ICAgICAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gUmVzY2hl
ZHVsaW5nQ2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICBbJl0geworICAgICAgICAgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkg
JiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuc2Vjb25kQ2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50ICE9IDM7
CisgICAgICAgICAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgR01haW5Mb29wU291cmNlIGhhcyBiZWVuIHJl
c2NoZWR1bGVkLCBlcmdvIHRoZSBTY2hlZHVsZWQgc3RhdHVzLgorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmZpcnN0RGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNT
Y2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAg
ICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSghY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29u
dGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC5maXJzdERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBjb250
ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0KK30KKworVEVTVChXVEZfR01h
aW5Mb29wU291cmNlLCBEZWxldGVPbkRlc3Ryb3lTb3VyY2VzKQoreworICAgIC8vIFRlc3Rpbmcg
dGhlIGRlbGV0ZS1vbi1kZXN0cm95IHNvdXJjZXMgaXMgdmVyeSBsaW1pdGVkLiBUaGVyZSdzIG5v
IGdvb2Qgd2F5CisgICAgLy8gb2YgdGVzdGluZyB0aGF0IHRoZSBHTWFpbkxvb3BTb3VyY2Ugb2Jq
ZWN0cyBhcmUgZGVsZXRlZCB3aGVuIHRoZWlyIEdTb3VyY2UKKyAgICAvLyBpcyBkZXN0cm95ZWQs
IGFuZCB0aGUgc29ja2V0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgc2NoZWR1bGVkIG9uIHRoZXNl
IHR5cGVzCisgICAgLy8gb2YgR01haW5Mb29wU291cmNlcyAoYXMgd2UgYWdncmVzc2l2ZWx5IGFz
c2VydCB0byBwcmV2ZW50IHRoYXQpLgorCisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAg
ICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25lZCBjYWxsYmFj
a0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFs
c2U7CisgICAgfSBjb250ZXh0OworCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBjb250
ZXh0OworCisgICAgICAgIC8vIFdlIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIEdNYWluTG9vcFNv
dXJjZSBqdXN0IHRvIHBlcmZvcm0gYWRkaXRpb25hbAorICAgICAgICAvLyB0ZXN0cyBvbiBpdHMg
c3RhdHVzLiBXZSBzaG91bGRuJ3QgdXNlIHRoZSByZWZlcmVuY2UgYWZ0ZXIgdGhlIG1haW4gbG9v
cAorICAgICAgICAvLyBleGlzdHMgc2luY2UgYXQgdGhhdCBwb2ludCB0aGUgR01haW5Mb29wU291
cmNlIHdpbGwgYmUgZGVzdHJveWVkIGFuZAorICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIHBvaW50
aW5nIHRvIGFuIGludmFsaWQgcGllY2Ugb2YgbWVtb3J5LgorICAgICAgICBHTWFpbkxvb3BTb3Vy
Y2UmIHNvdXJjZSA9IEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlQW5kRGVsZXRlT25EZXN0cm95KCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKCFzb3VyY2UuaXNBY3RpdmUoKSk7CisgICAgICAgIHNvdXJj
ZS5zY2hlZHVsZSgiW1Rlc3RdIERlbGV0ZU9uRGVzdHJveSIsCisgICAgICAgICAgICBbJl0gewor
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc0FjdGl2ZSgpICYmICFzb3VyY2Uu
aXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3Vu
dCsrOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgWyZd
IHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghc291cmNlLmlzQWN0aXZlKCkpOworICAg
ICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7
CisgICAgICAgICAgICAgICAgY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc1NjaGVkdWxlZCgp
KTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBjb250
ZXh0LnRlc3QucnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5jYWxsYmFj
a0NhbGxDb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
Q2FsbGVkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7
CisKKyAgICAgICAgLy8gQXMgaW4gdGhlIHByZXZpb3VzIHNjb3BlLCB3ZSBuZWVkIGEgcmVmZXJl
bmNlIHRvIHRoZSBHTWFpbkxvb3BTb3VyY2UuCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSYgc291
cmNlID0gR01haW5Mb29wU291cmNlOjpjcmVhdGVBbmREZWxldGVPbkRlc3Ryb3koKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgc291cmNlLnNjaGVk
dWxlKCJbVGVzdF0gRGVsZXRlT25EZXN0cm95IiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoc291cmNlLmlzQWN0aXZlKCkgJiYgIXNvdXJjZS5pc1NjaGVk
dWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQgIT0gMzsKKyAg
ICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0UoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShzb3VyY2UuaXNTY2hlZHVsZWQoKSk7CisKKyAg
ICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0
LnJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291
bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237936</attachid>
            <date>2014-09-10 23:38:23 -0700</date>
            <delta_ts>2014-09-18 02:04:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140910233817.patch</filename>
            <type>text/plain</type>
            <size>40936</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIwMzczOGQ2NGU2MTFhNDFlYmViMmI3
MzE4Njg1NDhmMmJjMjFhNWQuLjAxOTc5MzBkMWM5NDg5NTgwYjZiZTdlOWNkZGUxMDViOTBlOWYy
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTQtMDktMTAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2VkIHRv
IHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRhc2tz
IG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1bGVk
IG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNlIG9j
Y3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2FsbGJh
Y2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lCisg
ICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAoY3Jl
YXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRpYWwg
c29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAgICAg
ICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFuIHRv
IGxvb2sgYXQKKyAgICAgICAgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIHRocmVhZC1zcGVj
aWZpYyBHTWFpbkxvb3BTb3VyY2UKKyAgICAgICAgb2JqZWN0cyB0aGF0IHdvdWxkbid0IHJlcXVp
cmUgdGhlIHVzZSBvZiBHTXV0ZXguCisKKyAgICAgICAgR1NvdXJjZSwgR0NhbmNlbGxhYmxlIGFu
ZCBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0cyBhcmUgbm93IHBhY2tlZAorICAgICAgICBpbnRvIGFu
IGludGVybmFsIENvbnRleHQgc3RydWN0dXJlLiBVc2luZyB0aGUgQysrMTEgbW92ZSBzZW1hbnRp
Y3MKKyAgICAgICAgaXQncyBzaW1wbGUgdG8sIGF0IHRoZSB0aW1lIG9mIGRpc3BhdGNoLCBtb3Zl
IHRoZSBjdXJyZW50IGNvbnRleHQKKyAgICAgICAgb3V0IG9mIHRoZSBHTWFpbkxvb3BTb3VyY2Ug
b2JqZWN0IGluIGNhc2UgdGhlIGRpc3BhdGNoIGNhdXNlcyBhCisgICAgICAgIHJlc2NoZWR1bGlu
ZyBvbiB0aGF0IHNhbWUgb2JqZWN0LgorCisgICAgICAgIEFsc28gYWRkZWQgaW4gdGhlIENvbnRl
eHQgc3RydWN0IGlzIGEgbmV3IEdDYW5jZWxsYWJsZS4gVGhlIHBvaW50ZXIKKyAgICAgICAgb2Yg
dGhhdCBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIEdNYWluTG9vcFNvdXJjZSBiZWZvcmUgdGhl
IENvbnRleHQKKyAgICAgICAgaXMgbW92ZWQgb3V0IGZvciB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gu
IFRoaXMgbWFrZXMgaXQgc2FmZSB0byBjYW5jZWwKKyAgICAgICAgb3IgZXZlbiBkZWxldGUgdGhl
IEdNYWluTG9vcFNvdXJjZSBkdXJpbmcgdGhlIGRpc3BhdGNoIGFuZCBwcmV2ZW50cworICAgICAg
ICB1c2UtYWZ0ZXItZGVsZXRlIG9uIEdNYWluTG9vcFNvdXJjZSBvbmNlIHRoZSBkaXNwYXRjaCBp
cyBkb25lIGluCisgICAgICAgIHRoZSBHTWFpbkxvb3BTb3VyY2U6OipDYWxsYmFjaygpIG1ldGhv
ZHMuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSooKSBtZXRob2RzIGFuZCB0aGUgY2FuY2Vs
V2l0aG91dExvY2tpbmcoKSBtZXRob2QKKyAgICAgICAgY2FsbGVycyBub3cgbG9jayB0aGUgR011
dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3NpbmcgdGhlCisgICAgICAgIGRhdGEg
YXQgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRpc3BhdGNoIG1ldGhvZHMsIGJ1
dCB0aG9zZQorICAgICAgICBkbyB0aGUgZGlzcGF0Y2ggYW5kIHBvc3NpYmxlIGRlc3RydWN0aW9u
IGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAgICAgVGhlIGRpc3BhdGNoIGNh
biBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5Mb29wU291cmNlIG9iamVjdCwK
KyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEgbG9ja2VkIG11dGV4LgorCisg
ICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDoKKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsV2l0aG91
dExvY2tpbmcpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNv
dXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNv
dXJjZUNhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpDb250ZXh0Ojpk
ZXN0cm95U291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpyZXNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg6CisKIDIwMTQtMDktMDkg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJs
ZSB0aGUgInVucmVhY2hhYmxlLWNvZGUiIHdhcm5pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3Qv
R01haW5Mb29wU291cmNlLmNwcAppbmRleCA2ZDhjNTBiODkyOGM1MGYxYzgxNzBlNjE0YjU5OTRk
ZDgxMzZkY2ZlLi5iYWRlYjBkMzZiZjczZjg1ODAzY2JjZTI4OTBjZTUxOTQ1ZDNlZWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCkBAIC0yOCw4ICsyOCw4
IEBACiAjaWYgVVNFKEdMSUIpCiAKICNpbmNsdWRlICJHTWFpbkxvb3BTb3VyY2UuaCIKLQogI2lu
Y2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4K
IAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQyLDE3ICs0MiwyMCBAQCBHTWFpbkxvb3BTb3VyY2U6
OkdNYWluTG9vcFNvdXJjZSgpCiAgICAgOiBtX2RlbGV0ZU9uRGVzdHJveShEb05vdERlbGV0ZU9u
RGVzdHJveSkKICAgICAsIG1fc3RhdHVzKFJlYWR5KQogeworICAgIGdfbXV0ZXhfaW5pdCgmbV9t
dXRleCk7CiB9CiAKIEdNYWluTG9vcFNvdXJjZTo6R01haW5Mb29wU291cmNlKERlbGV0ZU9uRGVz
dHJveVR5cGUgZGVsZXRlT25EZXN0cm95KQogICAgIDogbV9kZWxldGVPbkRlc3Ryb3koZGVsZXRl
T25EZXN0cm95KQogICAgICwgbV9zdGF0dXMoUmVhZHkpCiB7CisgICAgZ19tdXRleF9pbml0KCZt
X211dGV4KTsKIH0KIAogR01haW5Mb29wU291cmNlOjp+R01haW5Mb29wU291cmNlKCkKIHsKICAg
ICBjYW5jZWwoKTsKKyAgICBnX211dGV4X2NsZWFyKCZtX211dGV4KTsKIH0KIAogYm9vbCBHTWFp
bkxvb3BTb3VyY2U6OmlzU2NoZWR1bGVkKCkgY29uc3QKQEAgLTY3LDI2ICs3MCwzMCBAQCBib29s
IEdNYWluTG9vcFNvdXJjZTo6aXNBY3RpdmUoKSBjb25zdAogCiB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZTsKLSAgICBtX3NvdXJjZS5zd2FwKHNvdXJjZSk7Ci0K
LSAgICBpZiAobV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9j
YW5jZWxsYWJsZS5nZXQoKSk7Ci0gICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2UuZ2V0KCkpOwot
ICAgIGRlc3Ryb3koKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNh
bmNlbFdpdGhvdXRMb2NraW5nKCk7CiB9CiAKLXZvaWQgR01haW5Mb29wU291cmNlOjpyZXNldCgp
Cit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsV2l0aG91dExvY2tpbmcoKQogeworICAgIC8v
IEEgdmFsaWQgY29udGV4dCBzaG91bGQgb25seSBiZSBwcmVzZW50IGlmIEdNYWluTG9vcFNvdXJj
ZSBpcyBpbiB0aGUgU2NoZWR1bGVkIHN0YXRlLgorICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJj
ZSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworICAgIEFTU0VSVCghbV9jYW5jZWxsYWJsZSB8
fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKKyAgICBBU1NFUlQobV9kZWxldGVPbkRlc3Ryb3kg
IT0gRGVsZXRlT25EZXN0cm95IHx8IChtX3N0YXR1cyA9PSBSZWFkeSAmJiAhbV9jb250ZXh0LnNv
dXJjZSkpOwogICAgIG1fc3RhdHVzID0gUmVhZHk7Ci0gICAgbV9zb3VyY2UgPSBudWxscHRyOwor
CisgICAgLy8gVGhlIHNvdXJjZSBpcyBwZXJoYXBzIGJlaW5nIGNhbmNlbGxlZCBpbiB0aGUgbWlk
ZGxlIG9mIGEgY2FsbGJhY2sgZGlzcGF0Y2guCisgICAgLy8gQ2FuY2VsbGluZyB0aGlzIEdDYW5j
ZWxsYWJsZSBvYmplY3Qgd2lsbCBjb252ZXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUKKyAgICAv
LyBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IHdoZW4gdGhlIGNhbGxiYWNrIGRpc3BhdGNoIGlz
IGZpbmlzaGVkLgorICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkp
OwogICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwotICAgIG1fdm9pZENhbGxiYWNrID0gbnVs
bHB0cjsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9kZXN0cm95Q2FsbGJh
Y2sgPSBudWxscHRyOworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY29udGV4dC5zb2NrZXRD
YW5jZWxsYWJsZS5nZXQoKSk7CisKKyAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAg
IHJldHVybjsKKworICAgIENvbnRleHQgY29udGV4dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOwor
ICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZUZ1
bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCogY29udGV4dCkKQEAgLTk0LDQzICsx
MDEsNzEgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBj
aGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2VGdW4KICAgICBBU1NFUlQobV9zdGF0dXMgPT0g
UmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwogCi0gICAgbV9zb3VyY2UgPSBhZG9w
dEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Ci0gICAgZ19zb3VyY2Vfc2V0X25hbWUobV9zb3Vy
Y2UuZ2V0KCksIG5hbWUpOworICAgIGdfc291cmNlX3NldF9uYW1lKG1fY29udGV4dC5zb3VyY2Uu
Z2V0KCksIG5hbWUpOwogICAgIGlmIChwcmlvcml0eSAhPSBHX1BSSU9SSVRZX0RFRkFVTFRfSURM
RSkKLSAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0
eSk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5j
dGlvbiwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgp
LCBjb250ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fY29udGV4dC5zb3Vy
Y2UuZ2V0KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0
LnNvdXJjZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291
cmNlX2F0dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBH
TWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBk
ZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsK
LSAgICBtX3ZvaWRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NF
UlQoIW1fY29udGV4dC5zb3VyY2UpOworICAgIG1fY29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRH
UmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpLAorICAgICAgICBhZG9wdEdSZWYoZ19jYW5jZWxsYWJs
ZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCisgICAgICAg
IFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIG51bGxwdHIsIC8vIGJvb2xDYWxsYmFjawor
ICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZGVz
dHJveUZ1bmN0aW9uKQorICAgIH07CiAgICAgc2NoZWR1bGVJZGxlU291cmNlKG5hbWUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBj
b250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlKGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIGludCBwcmlvcml0eSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4
dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92ZShmdW5j
dGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9u
KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdpdGhvdXRM
b2NraW5nKCk7CisKKyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOworICAgIG1fY29udGV4
dCA9IHsKKyAgICAgICAgYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpLAorICAgICAgICBh
ZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tl
dENhbmNlbGxhYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHZvaWRDYWxsYmFjaworICAgICAgICBX
VEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYWxsYmFjawor
ICAgICAgICBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQorICAgIH07CiAgICAgc2NoZWR1bGVJ
ZGxlU291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VD
YWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6
OnNjaGVkdWxlKGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0
aW9uKT4gZnVuY3Rpb24sIEdTb2NrZXQqIHNvY2tldCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29u
dGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NFUlQoIW1fY29udGV4dC5z
b3VyY2UpOworICAgIEdDYW5jZWxsYWJsZSogc29ja2V0Q2FuY2VsbGFibGUgPSBnX2NhbmNlbGxh
YmxlX25ldygpOworICAgIG1fY29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRHUmVmKGdfc29ja2V0
X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIHNvY2tldENhbmNlbGxhYmxlKSksCisg
ICAgICAgIGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgYWRvcHRHUmVm
KHNvY2tldENhbmNlbGxhYmxlKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gdm9pZENhbGxiYWNrCisg
ICAgICAgIG51bGxwdHIsIC8vIGJvb2xDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZnVuY3Rp
b24pLAorICAgICAgICBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQorICAgIH07CisKICAgICBB
U1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVkOwotCi0g
ICAgbV9zb2NrZXRDYWxsYmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95
Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKLSAgICBtX2NhbmNlbGxhYmxl
ID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwotICAgIG1fc291cmNlID0gYWRvcHRH
UmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LCBjb25kaXRpb24sIG1fY2FuY2VsbGFi
bGUuZ2V0KCkpKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJjZS5nZXQoKSwgbmFtZSk7
Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPihzb2NrZXRTb3VyY2VDYWxsYmFjayksIHRoaXMsIG51bGxwdHIpOwot
ICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgZ19zb3Vy
Y2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KHNvY2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7CisgICAgZ19z
b3VyY2VfYXR0YWNoKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lk
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUs
IEdTb3VyY2VGdW5jIHNvdXJjZUZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCog
Y29udGV4dCkKQEAgLTEzOCwxMTYgKzE3MywyMTQgQEAgdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNj
aGVkdWxlVGltZW91dFNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3VyY2UK
ICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUmVhZHkpOwogICAgIG1fc3RhdHVzID0gU2NoZWR1bGVk
OwogCi0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfbmFtZShtX3NvdXJj
ZS5nZXQoKSwgbmFtZSk7CisgICAgZ19zb3VyY2Vfc2V0X25hbWUobV9jb250ZXh0LnNvdXJjZS5n
ZXQoKSwgbmFtZSk7CiAgICAgaWYgKHByaW9yaXR5ICE9IEdfUFJJT1JJVFlfREVGQVVMVCkKLSAg
ICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fc291cmNlLmdldCgpLCBwcmlvcml0eSk7Ci0g
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCBzb3VyY2VGdW5jdGlvbiwg
dGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250
ZXh0KTsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KG1fY29udGV4dC5zb3VyY2UuZ2V0
KCksIHByaW9yaXR5KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJj
ZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOworICAgIGdfc291cmNlX2F0
dGFjaChtX2NvbnRleHQuc291cmNlLmdldCgpLCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBp
bnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFp
bkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9w
dEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fdm9pZENh
bGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdU
Rjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRl
eCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKworICAgIEFTU0VSVCghbV9jb250ZXh0
LnNvdXJjZSk7CisgICAgbV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdSZWYoZ190aW1lb3V0
X3NvdXJjZV9uZXcoZGVsYXkuY291bnQoKSkpLAorICAgICAgICBhZG9wdEdSZWYoZ19jYW5jZWxs
YWJsZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCisgICAg
ICAgIFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIG51bGxwdHIsIC8vIGJvb2xDYWxsYmFj
aworICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUo
ZGVzdHJveUZ1bmN0aW9uKQorICAgIH07CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHZvaWRTb3VyY2VDYWxsYmFjayksIHByaW9y
aXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJE
ZWxheShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9u
ZXcoZGVsYXkuY291bnQoKSkpOwotICAgIG1fYm9vbENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0
aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
OworICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExv
Y2tpbmcoKTsKKworICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CisgICAgbV9jb250ZXh0
ID0geworICAgICAgICBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoZGVsYXkuY291bnQo
KSkpLAorICAgICAgICBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51
bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHZvaWRDYWxs
YmFjaworICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBz
b2NrZXRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQorICAgIH07
CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheShjb25zdCBjaGFyKiBuYW1lLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBzdGQ6OmNocm9ubzo6c2Vjb25kcyBkZWxh
eSwgaW50IHByaW9yaXR5LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGRlc3Ryb3lGdW5jdGlvbiwg
R01haW5Db250ZXh0KiBjb250ZXh0KQogewotICAgIGNhbmNlbCgpOwotICAgIG1fc291cmNlID0g
YWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpOwot
ICAgIG1fdm9pZENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lD
YWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOworICAgIEdNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisgICAgY2FuY2VsV2l0aG91dExvY2tpbmcoKTsKKworICAgIEFTU0VS
VCghbV9jb250ZXh0LnNvdXJjZSk7CisgICAgbV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdS
ZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSksCisgICAgICAg
IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29j
a2V0Q2FuY2VsbGFibGUKKyAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gYm9vbENhbGxiYWNrCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbGxiYWNr
CisgICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKICAgICBzY2hlZHVs
ZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNv
dXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3Jp
dHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190
aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4
KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQu
c291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKKyAgICAgICAgYWRvcHRHUmVmKGdf
Y2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJs
ZQorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGZ1
bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAgV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJj
ZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291cmNlQ2FsbGJhY2sp
LCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjp2b2lkQ2Fs
bGJhY2soKQogewotICAgIGlmICghbV9zb3VyY2UpCisgICAgQ29udGV4dCBjb250ZXh0OworCisg
ICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAo
IW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29udGV4
dCA9IFdURjo6bW92ZShtX2NvbnRleHQpOworCisgICAgICAgIEFTU0VSVChjb250ZXh0LnZvaWRD
YWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworICAgICAg
ICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRl
eHQuY2FuY2VsbGFibGU7CisgICAgfQorCisgICAgY29udGV4dC52b2lkQ2FsbGJhY2soKTsKKwor
ICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdl
dCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEFTU0VSVChtX3ZvaWRDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3Rh
dHVzID09IFNjaGVkdWxlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIGJvb2wg
c2hvdWxkU2VsZkRlc3RydWN0ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3N0YXR1cyA9IFJlYWR5OworICAgICAgICBtX2Nh
bmNlbGxhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgc2hvdWxkU2VsZkRlc3RydWN0ID0gbV9kZWxl
dGVPbkRlc3Ryb3kgPT0gRGVsZXRlT25EZXN0cm95OworICAgIH0KIAotICAgIEdTb3VyY2UqIHNv
dXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxiYWNrKCk7Ci0gICAgaWYgKHNv
dXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGNvbnRleHQu
ZGVzdHJveVNvdXJjZSgpOworICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAgICAgIGRl
bGV0ZSB0aGlzOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsK
LSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBj
b250ZXh0OworCisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsK
IAotICAgIEFTU0VSVChtX2Jvb2xDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNj
aGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoZWQ7CisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIEdT
b3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFsID0gbV9ib29s
Q2FsbGJhY2soKTsKLSAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkp
Ci0gICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuYm9vbENhbGxiYWNr
KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3Rh
dHVzID0gRGlzcGF0Y2hlZDsKKworICAgICAgICBtX2NhbmNlbGxhYmxlID0gY29udGV4dC5jYW5j
ZWxsYWJsZTsKKyAgICB9CisKKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQuYm9vbENhbGxiYWNr
KCk7CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5jZWxs
YWJsZS5nZXQoKSkpIHsKKyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CisgICAgICAg
IHJldHVybiBTdG9wOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkU2VsZkRlc3RydWN0ID0gZmFs
c2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IFJlYWR5OworICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKKyAg
ICAgICAgc2hvdWxkU2VsZkRlc3RydWN0ID0gbV9kZWxldGVPbkRlc3Ryb3kgPT0gRGVsZXRlT25E
ZXN0cm95OworCisgICAgICAgIGlmIChyZXR2YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpIHsKKyAg
ICAgICAgICAgIG1fY29udGV4dCA9IFdURjo6bW92ZShjb250ZXh0KTsKKyAgICAgICAgICAgIG1f
c3RhdHVzID0gU2NoZWR1bGVkOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvbnRleHQu
c291cmNlKSB7CisgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworICAgICAgICBpZiAo
c2hvdWxkU2VsZkRlc3RydWN0KQorICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQogCiAg
ICAgcmV0dXJuIHJldHZhbDsKIH0KIAogYm9vbCBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldENhbGxi
YWNrKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIENvbnRleHQgY29udGV4dDsKKworICAgIHsKKyAgICAgICAg
R011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuc291
cmNlKQorICAgICAgICAgICAgcmV0dXJuIFN0b3A7CiAKLSAgICBBU1NFUlQobV9zb2NrZXRDYWxs
YmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBE
aXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgICAgIGNvbnRleHQg
PSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChtX2NhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBkZXN0cm95KCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuc29ja2V0Q2FsbGJhY2spOwor
ICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3Bh
dGNoZWQpOworICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisKKyAgICAgICAgbV9jYW5j
ZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7CiAgICAgfQogCi0gICAgR1NvdXJjZSogc291
cmNlID0gbV9zb3VyY2UuZ2V0KCk7Ci0gICAgYm9vbCByZXR2YWwgPSBtX3NvY2tldENhbGxiYWNr
KGNvbmRpdGlvbik7Ci0gICAgaWYgKCFyZXR2YWwgJiYgc291cmNlID09IG1fc291cmNlLmdldCgp
KQotICAgICAgICBkZXN0cm95KCk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVk
KGNvbnRleHQuc29ja2V0Q2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRleHQuZGVz
dHJveVNvdXJjZSgpOworICAgICAgICByZXR1cm4gU3RvcDsKKyAgICB9CiAKLSAgICByZXR1cm4g
cmV0dmFsOwotfQorICAgIGJvb2wgcmV0dmFsID0gY29udGV4dC5zb2NrZXRDYWxsYmFjayhjb25k
aXRpb24pOwogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveSgpCi17Ci0gICAgYXV0byBk
ZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUobV9kZXN0cm95Q2FsbGJhY2spOwotICAgIGF1dG8g
ZGVsZXRlT25EZXN0cm95ID0gbV9kZWxldGVPbkRlc3Ryb3k7Ci0gICAgcmVzZXQoKTsKLSAgICBp
ZiAoZGVzdHJveUNhbGxiYWNrKQotICAgICAgICBkZXN0cm95Q2FsbGJhY2soKTsKKyAgICBpZiAo
Z19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoY29udGV4dC5jYW5jZWxsYWJsZS5nZXQoKSkpIHsK
KyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CisgICAgICAgIHJldHVybiBTdG9wOwor
ICAgIH0KIAotICAgIGlmIChkZWxldGVPbkRlc3Ryb3kgPT0gRG9Ob3REZWxldGVPbkRlc3Ryb3kp
Ci0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7CisgICAgICAgIG1fc3RhdHVzID0gUmVhZHk7CisgICAgICAgIG1fY2FuY2VsbGFibGUg
PSBudWxscHRyOworICAgICAgICBpZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNlKQorICAg
ICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworCisgICAgICAgIEFTU0VS
VChtX2RlbGV0ZU9uRGVzdHJveSA9PSBEb05vdERlbGV0ZU9uRGVzdHJveSk7CisgICAgfQorCisg
ICAgaWYgKGNvbnRleHQuc291cmNlKQorICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsK
IAotICAgIGRlbGV0ZSB0aGlzOworICAgIHJldHVybiByZXR2YWw7CiB9CiAKIGdib29sZWFuIEdN
YWluTG9vcFNvdXJjZTo6dm9pZFNvdXJjZUNhbGxiYWNrKEdNYWluTG9vcFNvdXJjZSogc291cmNl
KQpAQCAtMjY2LDYgKzM5OSwxMyBAQCBnYm9vbGVhbiBHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNv
dXJjZUNhbGxiYWNrKEdTb2NrZXQqLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAogICAgIHJldHVy
biBzb3VyY2UtPnNvY2tldENhbGxiYWNrKGNvbmRpdGlvbikgPT0gQ29udGludWU7CiB9CiAKK3Zv
aWQgR01haW5Mb29wU291cmNlOjpDb250ZXh0OjpkZXN0cm95U291cmNlKCkKK3sKKyAgICBnX3Nv
dXJjZV9kZXN0cm95KHNvdXJjZS5nZXQoKSk7CisgICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKKyAg
ICAgICAgZGVzdHJveUNhbGxiYWNrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5k
aWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWlu
TG9vcFNvdXJjZS5oIGIvU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaApp
bmRleCA5M2VlNDgyMmI3MGQ5MjQ1MmI4NDdjNzJmNzc2YzZkNzEyYjc2ZTZjLi5lNTE1ZWE3YWZl
YjZjZjUyNTFiMzcyY2U2MzJjZWY2YzU0ZjlhY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3Qv
R01haW5Mb29wU291cmNlLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HU29ja2V0IEdTb2NrZXQ7Cit0eXBlZGVm
IHVuaW9uIF9HTXV0ZXggR011dGV4OwogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNjUsMTIgKzY2
LDEzIEBAIHByaXZhdGU6CiAKICAgICBlbnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERp
c3BhdGNoZWQgfTsKIAotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNhbmNlbFdpdGhvdXRM
b2NraW5nKCk7CiAgICAgdm9pZCBzY2hlZHVsZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwg
R1NvdXJjZUZ1bmMsIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9pZCBzY2hl
ZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMsIGludCBwcmlv
cml0eSwgR01haW5Db250ZXh0Kik7CiAgICAgdm9pZCB2b2lkQ2FsbGJhY2soKTsKICAgICBib29s
IGJvb2xDYWxsYmFjaygpOwogICAgIGJvb2wgc29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uKTsK
KwogICAgIHZvaWQgZGVzdHJveSgpOwogCiAgICAgc3RhdGljIGdib29sZWFuIHZvaWRTb3VyY2VD
YWxsYmFjayhHTWFpbkxvb3BTb3VyY2UqKTsKQEAgLTc5LDEyICs4MSwyNCBAQCBwcml2YXRlOgog
CiAgICAgRGVsZXRlT25EZXN0cm95VHlwZSBtX2RlbGV0ZU9uRGVzdHJveTsKICAgICBTdGF0dXMg
bV9zdGF0dXM7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKKyAgICBHTXV0ZXggbV9t
dXRleDsKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IG1fdm9pZENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoKT4gbV9ib29sQ2FsbGJhY2s7Ci0gICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRp
b24pPiBtX3NvY2tldENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gbV9kZXN0
cm95Q2FsbGJhY2s7CisKKyAgICBzdHJ1Y3QgQ29udGV4dCB7CisgICAgICAgIENvbnRleHQoKSA9
IGRlZmF1bHQ7CisgICAgICAgIENvbnRleHQoQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisgICAgICAg
IENvbnRleHQmIG9wZXJhdG9yPShDb250ZXh0JiYpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lk
IGRlc3Ryb3lTb3VyY2UoKTsKKworICAgICAgICBHUmVmUHRyPEdTb3VyY2U+IHNvdXJjZTsKKyAg
ICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOworICAgICAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gc29ja2V0Q2FuY2VsbGFibGU7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gdm9pZENhbGxiYWNrOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGJv
b2xDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sIChHSU9Db25kaXRpb24pPiBz
b2NrZXRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95Q2Fs
bGJhY2s7CisgICAgfSBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjNzM0YWQyMmI2
Y2NhZmU3NmMwZDg4N2UxYWE3OTUzZDczZTM0NTkyLi5jZWEyYmYxMjk5MWM0ZjAzMzQ0MTc4YWY5
MzMxMDBhYTAxMjhiNjhlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDktMTAgIFphbiBEb2JlcnNlayAgPHpk
b2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2Vk
IHRvIHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIEdNYWluTG9vcFNvdXJjZS4KKworICAgICAg
ICBUaGUgdGVzdHMgY2hlY2sgY29ycmVjdCBiZWhhdmlvciBvZiBHTWFpbkxvb3BTb3VyY2UgaW4g
dmFyaW91cyBjb25kaXRpb25zIC0tCisgICAgICAgIGZyb20gdGhlIG1vc3Qgc2ltcGxlIHJlc2No
ZWR1bGluZyB0byByZXNjaGVkdWxpbmcgZHVyaW5nIGRpc3BhdGNoLCBjYW5jZWxsaW5nCisgICAg
ICAgIG9yIGRlc3Ryb3lpbmcgdGhlIEdNYWluTG9vcFNvdXJjZSBkdXJpbmcgZGlzcGF0Y2gsIHBy
b3BlciBkZXN0cm95IGNhbGxiYWNrCisgICAgICAgIGRpc3BhdGNoaW5nIGV0Yy4KKworICAgICAg
ICBTY2hlZHVsaW5nIGJvdGggdm9pZCAob25lLXRpbWUpIGFuZCBib29sIChyZXBlYXRhYmxlKSBj
YWxsYmFja3MgaXMgdGVzdGVkLgorICAgICAgICBTdGF0ZSBvZiB0aGUgR01haW5Mb29wU291cmNl
IG9iamVjdCAoZWl0aGVyIHJlYWR5LCBzaGVkdWxlZCBvciBhY3RpdmUpIGlzCisgICAgICAgIHRo
b3JvdWdobHkgdGVzdGVkIHRocm91Z2hvdXQgdGhlIGxpZmV0aW1lIG9mIHRoYXQgb2JqZWN0Lgor
CisgICAgICAgIFN0aWxsIG1pc3NpbmcgYXJlIHRlc3RzIGZvciBzb2NrZXQgY2FsbGJhY2tzLCB3
aGljaCBhcmUgYSBiaXQgdHJpY2tpZXIgYmVjYXVzZQorICAgICAgICB0aGV5IHJlbHkgb24gYSBH
U29ja2V0IG9iamVjdC4gVGhlIGRlbGV0ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZSBvYmpl
Y3RzCisgICAgICAgIGFyZSBhbHNvIG5vdCB0ZXN0ZWQgdGhvcm91Z2hseSwgc2ltcGx5IGJlY2F1
c2UgaXQgaXMgYXQgdGhlIG1vbWVudCBpbXBvc3NpYmxlCisgICAgICAgIHRvIHRlc3QgdGhhdCB0
aGUgb2JqZWN0cyBhcmUgYWN0dWFsbHkgZGVzdHJveWVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcg
c291cmNlCisgICAgICAgIGlzIGZpbmFsbHkgZGVsZXRlZC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OkdNYWluTG9vcFNvdXJjZVRlc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6fkdNYWluTG9vcFNvdXJjZVRl
c3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6cnVuTG9v
cCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpkZWxheWVk
RmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OmZp
bmlzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojpzb3Vy
Y2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTQtMDktMTAgIE1pY2hh
ZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIGFs
bG93IG92ZXJ3cml0aW5nIGRlc3RpbmF0aW9uIG9mIGRvd25sb2FkCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyM2EzNWRmMTY3MWI5Yjg1YTFiMmE4YWRkYTQyZmY3MTMw
ZTUyMWM5Li4yYTQ4MDQ4YTU4MzYyNjcyODlhZTljZTZiNGVkNzhhODY5NDlkZWNjIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEzNiw1ICsxMzYsNiBAQCBzZXRfdGVz
dHNfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCiBzZXRfdGFy
Z2V0X3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJF
Q1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViQ29yZSkK
IAogbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9nb2JqZWN0L0dVbmlxdWVQdHIuY3BwCiApCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDFiNWRmZTdlNTNhOGU2YmZhMTdjM2I2YmVkNjE1YjFhNmFlMjdjZQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3Qv
R01haW5Mb29wU291cmNlLmNwcApAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEdNYWluTG9vcFNvdXJjZVRlc3QgeworcHVibGlj
OgorICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQorICAgICAgICA6IG1fbWFpbkxvb3AoZ19tYWlu
X2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQorICAgIHsKKyAgICB9CisKKyAgICB+R01haW5Mb29w
U291cmNlVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkxvb3AoKQorICAgIHsKKyAgICAgICAgZ19tYWluX2xv
b3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgZGVsYXllZEZpbmlzaCgpCisg
ICAgeworICAgICAgICBnX3RpbWVvdXRfYWRkKDI1MCwKKyAgICAgICAgICAgIFtdKGdwb2ludGVy
IGRhdGEpIHsKKyAgICAgICAgICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0JiB0ZXN0ID0gKnN0
YXRpY19jYXN0PEdNYWluTG9vcFNvdXJjZVRlc3QqPihkYXRhKTsKKyAgICAgICAgICAgICAgICB0
ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Cisg
ICAgICAgICAgICB9LCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaCgpCisgICAgewor
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdNYWlu
TG9vcFNvdXJjZSYgc291cmNlKCkgeyByZXR1cm4gbV9zb3VyY2U7IH0KKworcHJpdmF0ZToKKyAg
ICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR01haW5Mb29wU291cmNlIG1fc291cmNlOwor
fTsKKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBCYXNpY1Jlc2NoZWR1bGluZykKK3sKKyAg
ICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRl
c3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAgYm9v
bCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBF
Q1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4
dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAgICAg
ICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiBUaGF0J3Mgd2h5IHdlIGFzc2VydAor
ICAgICAgICAvLyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBmYWxzZSBhIGZldyBsaW5lcyBsYXRlci4K
KyAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisgICAg
RVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7
CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYm
ICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgIGNvbnRleHQu
ZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgp
OworICAgIH0pOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVk
dWxlZCgpKTsKKworICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisKKyAgICBFWFBFQ1RfVFJV
RSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9GQUxTRShj
b250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlz
aGVkU2Vjb25kVGFzayk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRyYW50
UmVzY2hlZHVsaW5nKQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdN
YWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9
IGZhbHNlOworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0g
Y29udGV4dDsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJz
dFRhc2siLCBbJl0geworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCku
aXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisg
ICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2si
LCBbJl0geworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
QWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworCisgICAgICAg
ICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgICAgICBjb250
ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC5maW5p
c2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC50
ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3Ao
KTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7
CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisgICAgRVhQRUNU
X1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOworfQorCitURVNUKFdURl9HTWFpbkxv
b3BTb3VyY2UsIFJlc2NoZWR1bGluZ0Zyb21EaWZmZXJlbnRUaHJlYWQpCit7CisgICAgc3RydWN0
IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAg
ICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrOworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25k
VGFzazsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNv
dXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxl
KCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50
ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVk
dWxlZCgpKTsKKworICAgICAgICBnX3VzbGVlcCgxICogR19VU0VDX1BFUl9TRUMpOworICAgICAg
ICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICBHVGhyZWFk
KiBoZWxwZXJUaHJlYWQgPSBnX3RocmVhZF9uZXcobnVsbHB0ciwgW10oZ3BvaW50ZXIgZGF0YSkg
LT4gZ3BvaW50ZXIgeworICAgICAgICBnX3VzbGVlcCgwLjI1ICogR19VU0VDX1BFUl9TRUMpOwor
CisgICAgICAgIFRlc3RpbmdDb250ZXh0JiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PFRlc3RpbmdD
b250ZXh0Kj4oZGF0YSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKworICAgICAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZd
IHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOwor
CisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAg
ICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworICAgICAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgZ190
aHJlYWRfZXhpdChudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwgJmNv
bnRleHQpOworCisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBnX3RocmVhZF91bnJl
ZihoZWxwZXJUaHJlYWQpOworCisgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNr
KTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RF
U1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJ1Y3Rpb25EdXJpbmdEaXNwYXRjaCkKK3sKKyAg
ICAvLyBUaGlzIGlzIGp1c3QgYSByYXcgdGVzdCB0aGF0IGVuc3VyZXMgZGVsZXRpbmcgdGhlIEdN
YWluTG9vcFNvdXJjZSBvYmplY3QgZHVyaW5nCisgICAgLy8gZGlzcGF0Y2ggZG9lcyBub3QgY2F1
c2UgcHJvYmxlbXMuIFRoaXMgdGVzdCBzdWNjZWVkcyBpZiBpdCBkb2Vzbid0IGNyYXNoLgorCisg
ICAgR01haW5Mb29wU291cmNlKiBzb3VyY2U7CisgICAgR01haW5Mb29wKiBsb29wID0gZ19tYWlu
X2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpOworCisgICAgc291cmNlID0gbmV3IEdNYWluTG9vcFNv
dXJjZTsKKyAgICBzb3VyY2UtPnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveVNvdXJjZVRhc2siLCBb
Jl0geworICAgICAgICBkZWxldGUgc291cmNlOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxv
b3ApOworICAgIH0pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIHNvdXJjZSA9
IG5ldyBHTWFpbkxvb3BTb3VyY2U7CisgICAgc291cmNlLT5zY2hlZHVsZSgiW1Rlc3RdIERlc3Ry
b3lTb3VyY2VUYXNrIiwgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0geworICAgICAgICBkZWxl
dGUgc291cmNlOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSkpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIGdf
bWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIENh
bmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNoKQoreworICAgIHN0cnVjdCBUZXN0aW5n
Q29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAgdW5z
aWduZWQgY2FsbENvdW50ID0gMDsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1RfVFJVRSgh
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50ZXN0LnNv
dXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gUmVwZWF0aW5nVGFzayIsCisgICAgICAgIHN0ZDo6ZnVu
Y3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVz
dC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVs
ZWQoKSk7CisKKyAgICAgICAgICAgIGNvbnRleHQuY2FsbENvdW50Kys7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC5jYWxsQ291bnQgPT0gMykKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Qu
c291cmNlKCkuY2FuY2VsKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSkp
OworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsK
KworICAgIGNvbnRleHQudGVzdC5kZWxheWVkRmluaXNoKCk7CisgICAgY29udGV4dC50ZXN0LnJ1
bkxvb3AoKTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3Rp
dmUoKSk7CisgICAgRVhQRUNUX0VRKDMsIGNvbnRleHQuY2FsbENvdW50KTsKK30KKworVEVTVChX
VEZfR01haW5Mb29wU291cmNlLCBCYXNpY0Rlc3Ryb3lDYWxsYmFja3MpCit7CisgICAgc3RydWN0
IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAg
ICAgICBib29sIGNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gZmFsc2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGluZ0Nv
bnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJb
VGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmRl
c3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0
LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QucnVu
TG9vcCgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNB
Y3RpdmUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuY2FsbGJhY2tDYWxsZWQpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAg
fQorCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBjb250ZXh0OworICAgICAgICBFWFBF
Q1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBjb250
ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAorICAg
ICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0geworICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxs
YmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsK
KworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAgICAgIEVYUEVDVF9UUlVF
KCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGNvbnRleHQuY2FsbGJhY2tDYWxsZWQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmRl
c3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3Vy
Y2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNwYXRjaCkKK3sKKyAg
ICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRl
c3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrQ2FsbENvdW50PSAwOworICAgICAgICBib29s
IGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07CisKKyAgICB7CisgICAgICAg
IFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5z
Y2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lDYWxsYmFjayIsCisgICAgICAgICAgICBbJl0geworICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
ICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCsrOworICAgICAgICAgICAgICAgIGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5jYW5jZWwoKTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmRl
c3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0
LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVs
YXllZEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAgICAg
IEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAg
IEVYUEVDVF9FUSgxLCBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJj
ZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAgICAgICAgICAgIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
U2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQr
KzsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCA9PSAzKQor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuY2FuY2VsKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KSwgR19QUklPUklUWV9ERUZB
VUxULAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBF
WFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAg
ICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnJ1
bkxvb3AoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlz
QWN0aXZlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5jYWxsYmFja0NhbGxDb3Vu
dCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsK
KyAgICB9Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNrc0Fm
dGVyUmVzY2hlZHVsaW5nRHVyaW5nRGlzcGF0Y2gpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250
ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25l
ZCBmaXJzdENhbGxiYWNrQ2FsbENvdW50ID0gMDsKKyAgICAgICAgYm9vbCBmaXJzdERlc3Ryb3lD
YWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzZWNvbmRDYWxsYmFja0Nh
bGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVkID0g
ZmFsc2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsK
KyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
KyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gQmFzZUNhbGxi
YWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpcnN0Q2FsbGJhY2tDYWxs
Q291bnQrKzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUo
IltUZXN0XSBSZXNjaGVkdWxpbmdDYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgIFsmXSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCsr
OworICAgICAgICAgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAg
ICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQs
CisgICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IEdNYWluTG9vcFNvdXJjZSBoYXMgYmVlbiByZXNjaGVkdWxlZCwgZXJnbyB0aGUgU2NoZWR1bGVk
IHN0YXR1cy4KKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5maXJzdERlc3Ryb3lD
YWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNvbnRl
eHQudGVzdC5kZWxheWVkRmluaXNoKCk7CisgICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7
CisKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3VudCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQp
OworICAgICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVk
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAg
ICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEJhc2VDYWxsYmFjayIs
CisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+KFsmXSB7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmZpcnN0Q2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Qu
c291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBSZXNjaGVkdWxpbmdDYWxsYmFjayIsCisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYm
ICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50Kys7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCAhPSAzOwor
ICAgICAgICAgICAgICAgICAgICB9KSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAg
ICAgICAgICBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJj
ZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgR01haW5Mb29wU291cmNlIGhhcyBiZWVuIHJl
c2NoZWR1bGVkLCBlcmdvIHRoZSBTY2hlZHVsZWQgc3RhdHVzLgorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmZpcnN0RGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNT
Y2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAg
ICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSghY29u
dGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29u
dGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC5maXJzdERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBjb250
ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0KK30KKworVEVTVChXVEZfR01h
aW5Mb29wU291cmNlLCBEZWxldGVPbkRlc3Ryb3lTb3VyY2VzKQoreworICAgIC8vIFRlc3Rpbmcg
dGhlIGRlbGV0ZS1vbi1kZXN0cm95IHNvdXJjZXMgaXMgdmVyeSBsaW1pdGVkLiBUaGVyZSdzIG5v
IGdvb2Qgd2F5CisgICAgLy8gb2YgdGVzdGluZyB0aGF0IHRoZSBHTWFpbkxvb3BTb3VyY2Ugb2Jq
ZWN0cyBhcmUgZGVsZXRlZCB3aGVuIHRoZWlyIEdTb3VyY2UKKyAgICAvLyBpcyBkZXN0cm95ZWQs
IGFuZCB0aGUgc29ja2V0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgc2NoZWR1bGVkIG9uIHRoZXNl
IHR5cGVzCisgICAgLy8gb2YgR01haW5Mb29wU291cmNlcyAoYXMgd2UgYWdncmVzc2l2ZWx5IGFz
c2VydCB0byBwcmV2ZW50IHRoYXQpLgorCisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAg
ICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25lZCBjYWxsYmFj
a0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gZmFs
c2U7CisgICAgfSBjb250ZXh0OworCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBjb250
ZXh0OworCisgICAgICAgIC8vIFdlIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIEdNYWluTG9vcFNv
dXJjZSBqdXN0IHRvIHBlcmZvcm0gYWRkaXRpb25hbAorICAgICAgICAvLyB0ZXN0cyBvbiBpdHMg
c3RhdHVzLiBXZSBzaG91bGRuJ3QgdXNlIHRoZSByZWZlcmVuY2UgYWZ0ZXIgdGhlIG1haW4gbG9v
cAorICAgICAgICAvLyBleGlzdHMgc2luY2UgYXQgdGhhdCBwb2ludCB0aGUgR01haW5Mb29wU291
cmNlIHdpbGwgYmUgZGVzdHJveWVkIGFuZAorICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIHBvaW50
aW5nIHRvIGFuIGludmFsaWQgcGllY2Ugb2YgbWVtb3J5LgorICAgICAgICBHTWFpbkxvb3BTb3Vy
Y2UmIHNvdXJjZSA9IEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlQW5kRGVsZXRlT25EZXN0cm95KCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKCFzb3VyY2UuaXNBY3RpdmUoKSk7CisgICAgICAgIHNvdXJj
ZS5zY2hlZHVsZSgiW1Rlc3RdIERlbGV0ZU9uRGVzdHJveSIsCisgICAgICAgICAgICBbJl0gewor
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc0FjdGl2ZSgpICYmICFzb3VyY2Uu
aXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3Vu
dCsrOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgWyZd
IHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghc291cmNlLmlzQWN0aXZlKCkpOworICAg
ICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7
CisgICAgICAgICAgICAgICAgY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc1NjaGVkdWxlZCgp
KTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBjb250
ZXh0LnRlc3QucnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5jYWxsYmFj
a0NhbGxDb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
Q2FsbGVkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7
CisKKyAgICAgICAgLy8gQXMgaW4gdGhlIHByZXZpb3VzIHNjb3BlLCB3ZSBuZWVkIGEgcmVmZXJl
bmNlIHRvIHRoZSBHTWFpbkxvb3BTb3VyY2UuCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSYgc291
cmNlID0gR01haW5Mb29wU291cmNlOjpjcmVhdGVBbmREZWxldGVPbkRlc3Ryb3koKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgc291cmNlLnNjaGVk
dWxlKCJbVGVzdF0gRGVsZXRlT25EZXN0cm95IiwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248
Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShzb3VyY2UuaXNBY3Rp
dmUoKSAmJiAhc291cmNlLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQu
Y2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jYWxs
YmFja0NhbGxDb3VudCAhPSAzOworICAgICAgICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwK
KyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5p
c0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY29udGV4dC5kZXN0cm95
Q2FsbGJhY2tDYWxsZWQpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNhbGxiYWNr
Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShzb3Vy
Y2UuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2go
KTsKKyAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0VRKDMs
IGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0
LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238298</attachid>
            <date>2014-09-18 02:04:31 -0700</date>
            <delta_ts>2014-09-18 04:36:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140918020427.patch</filename>
            <type>text/plain</type>
            <size>42525</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZmYWUxYzM2MjE2MTNkZDI3NmQ5M2Zl
MjMwNDk0NzkyYzZjYmRlZTAuLjM1YjFmMzI2MzVhNmJhZmVjMjk2NmJiZWNiNTQ3N2JiMDVjMDQw
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTQtMDktMTcgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2VkIHRv
IHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRhc2tz
IG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1bGVk
IG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNlIG9j
Y3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2FsbGJh
Y2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lCisg
ICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAoY3Jl
YXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRpYWwg
c29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAgICAg
ICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFuIHRv
IGxvb2sgYXQKKyAgICAgICAgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIHRocmVhZC1zcGVj
aWZpYyBHTWFpbkxvb3BTb3VyY2UKKyAgICAgICAgb2JqZWN0cyB0aGF0IHdvdWxkbid0IHJlcXVp
cmUgdGhlIHVzZSBvZiBHTXV0ZXguCisKKyAgICAgICAgR1NvdXJjZSwgR0NhbmNlbGxhYmxlIGFu
ZCBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0cyBhcmUgbm93IHBhY2tlZAorICAgICAgICBpbnRvIGFu
IGludGVybmFsIENvbnRleHQgc3RydWN0dXJlLiBVc2luZyB0aGUgQysrMTEgbW92ZSBzZW1hbnRp
Y3MKKyAgICAgICAgaXQncyBzaW1wbGUgdG8sIGF0IHRoZSB0aW1lIG9mIGRpc3BhdGNoLCBtb3Zl
IHRoZSBjdXJyZW50IGNvbnRleHQKKyAgICAgICAgb3V0IG9mIHRoZSBHTWFpbkxvb3BTb3VyY2Ug
b2JqZWN0IGluIGNhc2UgdGhlIGRpc3BhdGNoIGNhdXNlcyBhCisgICAgICAgIHJlc2NoZWR1bGlu
ZyBvbiB0aGF0IHNhbWUgb2JqZWN0LgorCisgICAgICAgIEFsc28gYWRkZWQgaW4gdGhlIENvbnRl
eHQgc3RydWN0IGlzIGEgbmV3IEdDYW5jZWxsYWJsZS4gVGhlIHBvaW50ZXIKKyAgICAgICAgb2Yg
dGhhdCBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIEdNYWluTG9vcFNvdXJjZSBiZWZvcmUgdGhl
IENvbnRleHQKKyAgICAgICAgaXMgbW92ZWQgb3V0IGZvciB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gu
IFRoaXMgbWFrZXMgaXQgc2FmZSB0byBjYW5jZWwKKyAgICAgICAgb3IgZXZlbiBkZWxldGUgdGhl
IEdNYWluTG9vcFNvdXJjZSBkdXJpbmcgdGhlIGRpc3BhdGNoIGFuZCBwcmV2ZW50cworICAgICAg
ICB1c2UtYWZ0ZXItZGVsZXRlIG9uIEdNYWluTG9vcFNvdXJjZSBvbmNlIHRoZSBkaXNwYXRjaCBp
cyBkb25lIGluCisgICAgICAgIHRoZSBHTWFpbkxvb3BTb3VyY2U6OipDYWxsYmFjaygpIG1ldGhv
ZHMuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSooKSBtZXRob2RzIGFuZCB0aGUgY2FuY2Vs
V2l0aG91dExvY2tpbmcoKSBtZXRob2QKKyAgICAgICAgY2FsbGVycyBub3cgbG9jayB0aGUgR011
dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3NpbmcgdGhlCisgICAgICAgIGRhdGEg
YXQgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRpc3BhdGNoIG1ldGhvZHMsIGJ1
dCB0aG9zZQorICAgICAgICBkbyB0aGUgZGlzcGF0Y2ggYW5kIHBvc3NpYmxlIGRlc3RydWN0aW9u
IGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAgICAgVGhlIGRpc3BhdGNoIGNh
biBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5Mb29wU291cmNlIG9iamVjdCwK
KyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEgbG9ja2VkIG11dGV4LgorCisg
ICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDoKKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsV2l0aG91
dExvY2tpbmcpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNv
dXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNv
dXJjZUNhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpDb250ZXh0Ojpk
ZXN0cm95U291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpyZXNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg6CisKIDIwMTQtMDktMTcg
IERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxNzM2OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHAKaW5kZXggNmQ4YzUwYjg5MjhjNTBmMWM4MTcwZTYxNGI1OTk0ZGQ4MTM2ZGNmZS4u
NGUxOGEzMDAwNDc3MDRmNGJhNmVhOGNhMDNlMTk3N2U3M2IyMTMzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2lmIFVT
RShHTElCKQogCiAjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCi0KICNpbmNsdWRlIDxnaW8v
Z2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewogCkBAIC00MiwxNyArNDIsMjAgQEAgR01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BT
b3VyY2UoKQogICAgIDogbV9kZWxldGVPbkRlc3Ryb3koRG9Ob3REZWxldGVPbkRlc3Ryb3kpCiAg
ICAgLCBtX3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQog
CiBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRlc3Ryb3lUeXBlIGRl
bGV0ZU9uRGVzdHJveSkKICAgICA6IG1fZGVsZXRlT25EZXN0cm95KGRlbGV0ZU9uRGVzdHJveSkK
ICAgICAsIG1fc3RhdHVzKFJlYWR5KQogeworICAgIGdfbXV0ZXhfaW5pdCgmbV9tdXRleCk7CiB9
CiAKIEdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCiB7CiAgICAgY2FuY2VsKCk7
CisgICAgZ19tdXRleF9jbGVhcigmbV9tdXRleCk7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNl
Ojppc1NjaGVkdWxlZCgpIGNvbnN0CkBAIC02NywyNiArNzAsMzQgQEAgYm9vbCBHTWFpbkxvb3BT
b3VyY2U6OmlzQWN0aXZlKCkgY29uc3QKIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCgp
CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxH
U291cmNlPiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOwotCi0gICAgaWYgKG1f
Y2FuY2VsbGFibGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUu
Z2V0KCkpOwotICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsKLSAgICBkZXN0cm95
KCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0
TG9ja2luZygpOwogfQogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVzZXQoKQordm9pZCBHTWFp
bkxvb3BTb3VyY2U6OmNhbmNlbFdpdGhvdXRMb2NraW5nKCkKIHsKKyAgICAvLyBBIHZhbGlkIGNv
bnRleHQgc2hvdWxkIG9ubHkgYmUgcHJlc2VudCBpZiBHTWFpbkxvb3BTb3VyY2UgaXMgaW4gdGhl
IFNjaGVkdWxlZCBzdGF0ZS4KKyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UgfHwgbV9zdGF0
dXMgPT0gU2NoZWR1bGVkKTsKKyAgICAvLyBUaGUgZ2VuZXJhbCBjYW5jZWxsYWJsZSBvYmplY3Qg
c2hvdWxkIG9ubHkgYmUgcHJlc2VudCBpZiB3ZSdyZSBjdXJyZW50bHkgZGlzcGF0Y2hpbmcgdGhp
cyBHTWFpbkxvb3BTb3VyY2UuCisgICAgQVNTRVJUKCFtX2NhbmNlbGxhYmxlIHx8IG1fc3RhdHVz
ID09IERpc3BhdGNoaW5nKTsKKyAgICAvLyBEZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BTb3Vy
Y2Ugb2JqZWN0cyBjYW4gb25seSBiZSBjYW5jZWxsZWQgd2hlbiB0aGVyZSdzIGNhbGxiYWNrIGVp
dGhlciBzY2hlZHVsZWQKKyAgICAvLyBvciBpbiB0aGUgbWlkZGxlIG9mIGRpc3BhdGNoLiBBdCB0
aGF0IHBvaW50IGNhbmNlbGxhdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0LgorICAgIEFTU0VSVCht
X2RlbGV0ZU9uRGVzdHJveSAhPSBEZWxldGVPbkRlc3Ryb3kgfHwgKG1fc3RhdHVzID09IFJlYWR5
ICYmICFtX2NvbnRleHQuc291cmNlKSk7CisKICAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1f
c291cmNlID0gbnVsbHB0cjsKKworICAgIC8vIFRoZSBzb3VyY2UgaXMgcGVyaGFwcyBiZWluZyBj
YW5jZWxsZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGNhbGxiYWNrIGRpc3BhdGNoLgorICAgIC8vIENh
bmNlbGxpbmcgdGhpcyBHQ2FuY2VsbGFibGUgb2JqZWN0IHdpbGwgY29udmV5IHRoaXMgaW5mb3Jt
YXRpb24gdG8gdGhlCisgICAgLy8gY3VycmVudCBleGVjdXRpb24gY29udGV4dCB3aGVuIHRoZSBj
YWxsYmFjayBkaXNwYXRjaCBpcyBmaW5pc2hlZC4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbCht
X2NhbmNlbGxhYmxlLmdldCgpKTsKICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBt
X3ZvaWRDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwot
ICAgIG1fZGVzdHJveUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChtX2NvbnRleHQuc29ja2V0Q2FuY2VsbGFibGUuZ2V0KCkpOworCisgICAgaWYgKCFtX2NvbnRl
eHQuc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6
Om1vdmUobV9jb250ZXh0KTsKKyAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKIH0KIAogdm9p
ZCBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBH
U291cmNlRnVuYyBzb3VyY2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCkBAIC05NCw0MyArMTA1LDc0IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZUlkbGVTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuCiAgICAg
QVNTRVJUKG1fc3RhdHVzID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAot
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAgIGdfc291
cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFt
ZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAocHJpb3JpdHkgIT0gR19Q
UklPUklUWV9ERUZBVUxUX0lETEUpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3Nv
dXJjZS5nZXQoKSwgcHJpb3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJj
ZS5nZXQoKSwgc291cmNlRnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0
dGFjaChtX3NvdXJjZS5nZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlv
cml0eShtX2NvbnRleHQuc291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBu
dWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29u
dGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBu
YW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rp
b24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7
CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9j
a2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQg
PSB7CisgICAgICAgIGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKSwKKyAgICAgICAgYWRv
cHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRD
YW5jZWxsYWJsZQorICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRy
LCAvLyBib29sQ2FsbGJhY2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAg
ICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlSWRs
ZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2Fs
bGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9u
LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBH
TWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9ib29sQ2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
KyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291
cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX2lkbGVfc291cmNl
X25ldygpKSwKKyAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAg
ICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQorICAgICAgICBudWxscHRyLCAvLyB2b2lk
Q2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwg
Ly8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAg
ICB9OwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihib29sU291cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPGJvb2wgKEdJT0NvbmRpdGlvbik+IGZ1bmN0aW9uLCBHU29ja2V0KiBzb2NrZXQsIEdJT0Nv
bmRpdGlvbiBjb25kaXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9u
LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgR011dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAg
Ly8gRG9uJ3QgYWxsb3cgc2NoZWR1bGluZyBHSU9Db25kaXRpb24gY2FsbGJhY2tzIG9uIGRlbGV0
ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZXMuCisgICAgQVNTRVJUKG1fZGVsZXRlT25EZXN0
cm95ID09IERvTm90RGVsZXRlT25EZXN0cm95KTsKKworICAgIEFTU0VSVCghbV9jb250ZXh0LnNv
dXJjZSk7CisgICAgR0NhbmNlbGxhYmxlKiBzb2NrZXRDYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFi
bGVfbmV3KCk7CisgICAgbV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdSZWYoZ19zb2NrZXRf
Y3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgc29ja2V0Q2FuY2VsbGFibGUpKSwKKyAg
ICAgICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBhZG9wdEdSZWYo
c29ja2V0Q2FuY2VsbGFibGUpLAorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKKyAg
ICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShmdW5jdGlv
biksCisgICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKKwogICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7Ci0KLSAg
ICBtX3NvY2tldENhbGxiYWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lD
YWxsYmFjayA9IFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pOwotICAgIG1fY2FuY2VsbGFibGUg
PSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdS
ZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSkpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsK
LSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHNvY2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7Ci0g
ICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICBnX3NvdXJj
ZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9z
ZXRfY2FsbGJhY2sobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oc29ja2V0U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQg
R01haW5Mb29wU291cmNlOjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwg
R1NvdXJjZUZ1bmMgc291cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBj
b250ZXh0KQpAQCAtMTM4LDExNiArMTgwLDIxOCBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2No
ZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZQog
ICAgIEFTU0VSVChtX3N0YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7
CiAKLSAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNl
LmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdl
dCgpLCBuYW1lKTsKICAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQotICAg
ICAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKLSAg
ICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0
aGlzLCBudWxscHRyKTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRl
eHQpOworICAgICAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQo
KSwgcHJpb3JpdHkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNl
LmdldCgpLCBzb3VyY2VGdW5jdGlvbiwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0
YWNoKG1fY29udGV4dC5zb3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGlu
dCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWlu
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0
R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV92b2lkQ2Fs
bGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RG
Ojptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4
KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQu
c291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ldyhkZWxheS5jb3VudCgpKSksCisgICAgICAgIGFkb3B0R1JlZihnX2NhbmNlbGxh
YmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKKyAgICAg
ICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNr
CisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShk
ZXN0cm95RnVuY3Rpb24pCisgICAgfTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3Jp
dHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRl
bGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25l
dyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rp
b24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7
CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9j
a2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQg
PSB7CisgICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgp
KSksCisgICAgICAgIGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8gdm9pZENhbGxi
YWNrCisgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIG51bGxwdHIsIC8vIHNv
Y2tldENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsK
ICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oYm9vbFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lk
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5
LCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBH
TWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBh
ZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7Ci0g
ICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNh
bGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxv
Y2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJU
KCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1Jl
ZihnX3RpbWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKKyAgICAgICAg
YWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2Nr
ZXRDYW5jZWxsYWJsZQorICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxs
cHRyLCAvLyBib29sQ2FsbGJhY2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sK
KyAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxl
VGltZW91dFNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291
cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZUFmdGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxi
b29sICgpPiBmdW5jdGlvbiwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0
eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3Rp
bWVvdXRfc291cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKLSAgICBtX2Jvb2xDYWxs
YmFjayA9IFdURjo6bW92ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6
Om1vdmUoZGVzdHJveUZ1bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgIGNhbmNlbFdpdGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NFUlQoIW1fY29udGV4dC5z
b3VyY2UpOworICAgIG1fY29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9z
b3VyY2VfbmV3X3NlY29uZHMoZGVsYXkuY291bnQoKSkpLAorICAgICAgICBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxl
CisgICAgICAgIG51bGxwdHIsIC8vIHZvaWRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZnVu
Y3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYWxsYmFjaworICAgICAgICBXVEY6
Om1vdmUoZGVzdHJveUZ1bmN0aW9uKQorICAgIH07CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNl
KG5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayks
IHByaW9yaXR5LCBjb250ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxs
YmFjaygpCiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKKyAgICBDb250ZXh0IGNvbnRleHQ7CisKKyAg
ICB7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LnNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb250ZXh0
ID0gV1RGOjptb3ZlKG1fY29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQudm9pZENh
bGxiYWNrKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAg
IG1fc3RhdHVzID0gRGlzcGF0Y2hpbmc7CisKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRl
eHQuY2FuY2VsbGFibGU7CisgICAgfQorCisgICAgY29udGV4dC52b2lkQ2FsbGJhY2soKTsKKwor
ICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdl
dCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEFTU0VSVChtX3ZvaWRDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3Rh
dHVzID09IFNjaGVkdWxlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIGJvb2wg
c2hvdWxkU2VsZkRlc3RydWN0ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3N0YXR1cyA9IFJlYWR5OworICAgICAgICBtX2Nh
bmNlbGxhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgc2hvdWxkU2VsZkRlc3RydWN0ID0gbV9kZWxl
dGVPbkRlc3Ryb3kgPT0gRGVsZXRlT25EZXN0cm95OworICAgIH0KIAotICAgIEdTb3VyY2UqIHNv
dXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIG1fdm9pZENhbGxiYWNrKCk7Ci0gICAgaWYgKHNv
dXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGNvbnRleHQu
ZGVzdHJveVNvdXJjZSgpOworICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAgICAgIGRl
bGV0ZSB0aGlzOwogfQogCiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsK
LSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBj
b250ZXh0OworCisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwor
ICAgICAgICBpZiAoIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsK
IAotICAgIEFTU0VSVChtX2Jvb2xDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNj
aGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3Bh
dGNoZWQ7CisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIEdT
b3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFsID0gbV9ib29s
Q2FsbGJhY2soKTsKLSAgICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkp
Ci0gICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuYm9vbENhbGxiYWNr
KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBE
aXNwYXRjaGluZyk7CisgICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hpbmc7CisKKyAgICAgICAg
bV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7CisgICAgfQorCisgICAgYm9vbCBy
ZXR2YWwgPSBjb250ZXh0LmJvb2xDYWxsYmFjaygpOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGNvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRl
eHQuZGVzdHJveVNvdXJjZSgpOworICAgICAgICByZXR1cm4gU3RvcDsKKyAgICB9CisKKyAgICBi
b29sIHNob3VsZFNlbGZEZXN0cnVjdCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7Cisg
ICAgICAgIHNob3VsZFNlbGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0cm95ID09IERlbGV0ZU9u
RGVzdHJveTsKKworICAgICAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVmbGVjdCB3aGV0aGVyIHRo
ZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVyaW5nIGRpc3BhdGNoLgor
ICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYmIG1fc3RhdHVzID09IERpc3BhdGNo
aW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworICAgICAgICBpZiAocmV0dmFsICYmICFt
X2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRl
eHQpOworICAgICAgICBlbHNlIGlmICghcmV0dmFsKQorICAgICAgICAgICAgbV9zdGF0dXMgPSBS
ZWFkeTsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC5zb3VyY2UpIHsKKyAgICAgICAgY29udGV4
dC5kZXN0cm95U291cmNlKCk7CisgICAgICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAg
ICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCiBi
b29sIEdNYWluTG9vcFNvdXJjZTo6c29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29u
dGV4dCBjb250ZXh0OwogCi0gICAgQVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOwotICAgIEFTU0VS
VChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAg
bV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tl
cihtX211dGV4KTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAg
cmV0dXJuIFN0b3A7CiAKLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQobV9jYW5j
ZWxsYWJsZS5nZXQoKSkpIHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBB
U1NFUlQoY29udGV4dC5zb2NrZXRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9
PSBTY2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOworICAgICAgICBtX3N0YXR1
cyA9IERpc3BhdGNoaW5nOworCisgICAgICAgIG1fY2FuY2VsbGFibGUgPSBjb250ZXh0LmNhbmNl
bGxhYmxlOwogICAgIH0KIAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwot
ICAgIGJvb2wgcmV0dmFsID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICgh
cmV0dmFsICYmIHNvdXJjZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOwor
ICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LnNvY2tldENhbmNlbGxh
YmxlLmdldCgpKSkgeworICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKKyAgICAgICAg
cmV0dXJuIFN0b3A7CisgICAgfQogCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KKyAgICBib29sIHJl
dHZhbCA9IGNvbnRleHQuc29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKIAotdm9pZCBHTWFpbkxv
b3BTb3VyY2U6OmRlc3Ryb3koKQotewotICAgIGF1dG8gZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKG1fZGVzdHJveUNhbGxiYWNrKTsKLSAgICBhdXRvIGRlbGV0ZU9uRGVzdHJveSA9IG1fZGVs
ZXRlT25EZXN0cm95OwotICAgIHJlc2V0KCk7Ci0gICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKLSAg
ICAgICAgZGVzdHJveUNhbGxiYWNrKCk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2Vs
bGVkKGNvbnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRleHQuZGVzdHJv
eVNvdXJjZSgpOworICAgICAgICByZXR1cm4gU3RvcDsKKyAgICB9CiAKLSAgICBpZiAoZGVsZXRl
T25EZXN0cm95ID09IERvTm90RGVsZXRlT25EZXN0cm95KQotICAgICAgICByZXR1cm47CisgICAg
eworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2NhbmNl
bGxhYmxlID0gbnVsbHB0cjsKKworICAgICAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVmbGVjdCB3
aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVyaW5nIGRp
c3BhdGNoLgorICAgICAgICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYmIG1fc3RhdHVzID09
IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworCisgICAgICAgIGlmIChy
ZXR2YWwgJiYgIW1fY29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICBtX2NvbnRleHQgPSBXVEY6
Om1vdmUoY29udGV4dCk7CisgICAgICAgIGVsc2UgaWYgKCFyZXR2YWwpCisgICAgICAgICAgICBt
X3N0YXR1cyA9IFJlYWR5OworICAgIH0KKworICAgIGlmIChjb250ZXh0LnNvdXJjZSkKKyAgICAg
ICAgY29udGV4dC5kZXN0cm95U291cmNlKCk7CiAKLSAgICBkZWxldGUgdGhpczsKKyAgICByZXR1
cm4gcmV0dmFsOwogfQogCiBnYm9vbGVhbiBHTWFpbkxvb3BTb3VyY2U6OnZvaWRTb3VyY2VDYWxs
YmFjayhHTWFpbkxvb3BTb3VyY2UqIHNvdXJjZSkKQEAgLTI2Niw2ICs0MTAsMTMgQEAgZ2Jvb2xl
YW4gR01haW5Mb29wU291cmNlOjpzb2NrZXRTb3VyY2VDYWxsYmFjayhHU29ja2V0KiwgR0lPQ29u
ZGl0aW9uIGNvbmRpdGlvbiwKICAgICByZXR1cm4gc291cmNlLT5zb2NrZXRDYWxsYmFjayhjb25k
aXRpb24pID09IENvbnRpbnVlOwogfQogCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Q29udGV4dDo6
ZGVzdHJveVNvdXJjZSgpCit7CisgICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2UuZ2V0KCkpOwor
ICAgIGlmIChkZXN0cm95Q2FsbGJhY2spCisgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaCBiL1NvdXJjZS9XVEYvd3Rm
L2dvYmplY3QvR01haW5Mb29wU291cmNlLmgKaW5kZXggOTNlZTQ4MjJiNzBkOTI0NTJiODQ3Yzcy
Zjc3NmM2ZDcxMmI3NmU2Yy4uZWYwNWFmYzVlZTI0MTIxODhkNmZiYWJjZTI3YzNkN2JhMDUzYjU2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiB0eXBlZGVmIHN0cnVj
dCBfR1NvY2tldCBHU29ja2V0OwordHlwZWRlZiB1bmlvbiBfR011dGV4IEdNdXRleDsKIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTYzLDE0ICs2NCwxNSBAQCBwcml2YXRlOgogICAgIGVudW0gRGVs
ZXRlT25EZXN0cm95VHlwZSB7IERlbGV0ZU9uRGVzdHJveSwgRG9Ob3REZWxldGVPbkRlc3Ryb3kg
fTsKICAgICBHTWFpbkxvb3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSk7CiAKLSAgICBlbnVt
IFN0YXR1cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNoZWQgfTsKKyAgICBlbnVtIFN0YXR1
cyB7IFJlYWR5LCBTY2hlZHVsZWQsIERpc3BhdGNoaW5nIH07CiAKLSAgICB2b2lkIHJlc2V0KCk7
CisgICAgdm9pZCBjYW5jZWxXaXRob3V0TG9ja2luZygpOwogICAgIHZvaWQgc2NoZWR1bGVJZGxl
U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWlu
Q29udGV4dCopOwogICAgIHZvaWQgc2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5h
bWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOwogICAgIHZvaWQg
dm9pZENhbGxiYWNrKCk7CiAgICAgYm9vbCBib29sQ2FsbGJhY2soKTsKICAgICBib29sIHNvY2tl
dENhbGxiYWNrKEdJT0NvbmRpdGlvbik7CisKICAgICB2b2lkIGRlc3Ryb3koKTsKIAogICAgIHN0
YXRpYyBnYm9vbGVhbiB2b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CkBAIC03
OSwxMiArODEsMjQgQEAgcHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVzdHJveVR5cGUgbV9kZWxl
dGVPbkRlc3Ryb3k7CiAgICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdSZWZQdHI8R1NvdXJjZT4g
bV9zb3VyY2U7CisgICAgR011dGV4IG1fbXV0ZXg7CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+
IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFj
azsKLSAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOwotICAgIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKLSAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IG1fZGVzdHJveUNhbGxiYWNrOworCisgICAgc3RydWN0IENvbnRl
eHQgeworICAgICAgICBDb250ZXh0KCkgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0KENvbnRl
eHQmJikgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0JiBvcGVyYXRvcj0oQ29udGV4dCYmKSA9
IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBkZXN0cm95U291cmNlKCk7CisKKyAgICAgICAgR1Jl
ZlB0cjxHU291cmNlPiBzb3VyY2U7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5j
ZWxsYWJsZTsKKyAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IHNvY2tldENhbmNlbGxhYmxl
OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IHZvaWRDYWxsYmFjazsKKyAgICAgICAg
c3RkOjpmdW5jdGlvbjxib29sICgpPiBib29sQ2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoR0lPQ29uZGl0aW9uKT4gc29ja2V0Q2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZGVzdHJveUNhbGxiYWNrOworICAgIH0gbV9jb250ZXh0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDBhZmM1MDNkMjNlMTU2
M2I0OGY5NGZjMWU2MTA1Y2JkZDk4ZGZlNjMuLjg4MDcxY2M2N2QzZWNmM2IyNmY3Zjg0Yjk0ZjU4
YjQyODZjMDA3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0zNzEsNyArMzcxLDcgQEAgc3Ry
aW5nKFJFUExBQ0UgIiAtaSIgIiAtayIgQ09NTUFORF9MSU5FX1RPX0JVSUxEICR7Q09NTUFORF9M
SU5FX1RPX0JVSUxEfSkKIGZpbGUoV1JJVEUKICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFL
RV9GSUxFU19ESVJFQ1RPUll9L2J1aWxkLnNoCiAgICAgIiMhL2Jpbi9zaFxuIgotICAgICIke0NP
TU1BTkRfTElORV9UT19CVUlMRH0gJEAiCisgICAgIiR7Q09NTUFORF9MSU5FX1RPX0JVSUxEfSAt
LSAkQCIKICkKIGZpbGUoQ09QWSAke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJF
Q1RPUll9L2J1aWxkLnNoCiAgIERFU1RJTkFUSU9OICR7Q01BS0VfQklOQVJZX0RJUn0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZDJkZmNlZGM5
OTgwMTNiMTY2ZDcwNGU1YmVkNmU4MTAzNDAyMjhjLi41N2Y3NWJjOGIyOGNlMDAyMmJjYTg1YjRh
YmRjOGM5MjI4YmI1Y2MwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTQtMDktMTcgIFphbiBEb2JlcnNlayAgPHpk
b2JlcnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2Vk
IHRvIHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgZm9yIEdNYWluTG9vcFNvdXJjZS4KKworICAgICAg
ICBUaGUgdGVzdHMgY2hlY2sgY29ycmVjdCBiZWhhdmlvciBvZiBHTWFpbkxvb3BTb3VyY2UgaW4g
dmFyaW91cyBjb25kaXRpb25zIC0tCisgICAgICAgIGZyb20gdGhlIG1vc3Qgc2ltcGxlIHJlc2No
ZWR1bGluZyB0byByZXNjaGVkdWxpbmcgZHVyaW5nIGRpc3BhdGNoLCBjYW5jZWxsaW5nCisgICAg
ICAgIG9yIGRlc3Ryb3lpbmcgdGhlIEdNYWluTG9vcFNvdXJjZSBkdXJpbmcgZGlzcGF0Y2gsIHBy
b3BlciBkZXN0cm95IGNhbGxiYWNrCisgICAgICAgIGRpc3BhdGNoaW5nIGV0Yy4KKworICAgICAg
ICBTY2hlZHVsaW5nIGJvdGggdm9pZCAob25lLXRpbWUpIGFuZCBib29sIChyZXBlYXRhYmxlKSBj
YWxsYmFja3MgaXMgdGVzdGVkLgorICAgICAgICBTdGF0ZSBvZiB0aGUgR01haW5Mb29wU291cmNl
IG9iamVjdCAoZWl0aGVyIHJlYWR5LCBzaGVkdWxlZCBvciBhY3RpdmUpIGlzCisgICAgICAgIHRo
b3JvdWdobHkgdGVzdGVkIHRocm91Z2hvdXQgdGhlIGxpZmV0aW1lIG9mIHRoYXQgb2JqZWN0Lgor
CisgICAgICAgIFN0aWxsIG1pc3NpbmcgYXJlIHRlc3RzIGZvciBzb2NrZXQgY2FsbGJhY2tzLCB3
aGljaCBhcmUgYSBiaXQgdHJpY2tpZXIgYmVjYXVzZQorICAgICAgICB0aGV5IHJlbHkgb24gYSBH
U29ja2V0IG9iamVjdC4gVGhlIGRlbGV0ZS1vbi1kZXN0cm95IEdNYWluTG9vcFNvdXJjZSBvYmpl
Y3RzCisgICAgICAgIGFyZSBhbHNvIG5vdCB0ZXN0ZWQgdGhvcm91Z2hseSwgc2ltcGx5IGJlY2F1
c2UgaXQgaXMgYXQgdGhlIG1vbWVudCBpbXBvc3NpYmxlCisgICAgICAgIHRvIHRlc3QgdGhhdCB0
aGUgb2JqZWN0cyBhcmUgYWN0dWFsbHkgZGVzdHJveWVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcg
c291cmNlCisgICAgICAgIGlzIGZpbmFsbHkgZGVsZXRlZC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OkdNYWluTG9vcFNvdXJjZVRlc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6fkdNYWluTG9vcFNvdXJjZVRl
c3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVzdDo6cnVuTG9v
cCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpkZWxheWVk
RmluaXNoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6OmZp
bmlzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0Ojpzb3Vy
Y2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTQtMDktMTcgIFJ5dWFu
IENob2kgIDxyeXVhbi5jaG9pQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBVcGRh
dGUgbXkgZW1haWwgaW4gY29udHJpYnV0b3JzLmpzb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
R1RLLmNtYWtlCmluZGV4IDIzYTM1ZGYxNjcxYjliODVhMWIyYThhZGRhNDJmZjcxMzBlNTIxYzku
LjJhNDgwNDhhNTgzNjI2NzI4OWFlOWNlNmI0ZWQ3OGE4Njk0OWRlY2MgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTM2LDUgKzEzNiw2IEBAIHNldF90ZXN0c19wcm9w
ZXJ0aWVzKFRlc3RXZWJDb3JlIFBST1BFUlRJRVMgVElNRU9VVCA2MCkKIHNldF90YXJnZXRfcHJv
cGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAk
e1RFU1RXRUJLSVRBUElfUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZfS9XZWJDb3JlKQogCiBsaXN0
KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9X
VEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL2dvYmplY3QvR1VuaXF1ZVB0ci5jcHAKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kMWI1ZGZlN2U1M2E4ZTZiZmExN2MzYjZiZWQ2MTViMWE2YWUyN2NlCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxv
b3BTb3VyY2UuY3BwCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworY2xhc3MgR01haW5Mb29wU291cmNlVGVzdCB7CitwdWJsaWM6CisgICAg
R01haW5Mb29wU291cmNlVGVzdCgpCisgICAgICAgIDogbV9tYWluTG9vcChnX21haW5fbG9vcF9u
ZXcobnVsbHB0ciwgVFJVRSkpCisgICAgeworICAgIH0KKworICAgIH5HTWFpbkxvb3BTb3VyY2VU
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIHZvaWQgcnVuTG9vcCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBkZWxheWVkRmluaXNoKCkKKyAgICB7Cisg
ICAgICAgIGdfdGltZW91dF9hZGQoMjUwLAorICAgICAgICAgICAgW10oZ3BvaW50ZXIgZGF0YSkg
eworICAgICAgICAgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QmIHRlc3QgPSAqc3RhdGljX2Nh
c3Q8R01haW5Mb29wU291cmNlVGVzdCo+KGRhdGEpOworICAgICAgICAgICAgICAgIHRlc3QuZmlu
aXNoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKyAgICAgICAg
ICAgIH0sIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmluaXNoKCkKKyAgICB7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR01haW5Mb29wU291
cmNlJiBzb3VyY2UoKSB7IHJldHVybiBtX3NvdXJjZTsgfQorCitwcml2YXRlOgorICAgIEdNYWlu
TG9vcCogbV9tYWluTG9vcDsKKyAgICBHTWFpbkxvb3BTb3VyY2UgbV9zb3VyY2U7Cit9OworCitU
RVNUKFdURl9HTWFpbkxvb3BTb3VyY2UsIEJhc2ljUmVzY2hlZHVsaW5nKQoreworICAgIHN0cnVj
dCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAg
ICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFzayA9IGZhbHNlOworICAgICAgICBib29sIGZpbmlz
aGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAgIH0gY29udGV4dDsKKworICAgIEVYUEVDVF9UUlVF
KCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Qu
c291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICAvLyBU
aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQuIFRoYXQncyB3aHkgd2UgYXNzZXJ0CisgICAgICAg
IC8vIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGZhbHNlIGEgZmV3IGxpbmVzIGxhdGVyLgorICAgICAg
ICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBFWFBFQ1Rf
VFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICBjb250ZXh0
LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwgWyZdIHsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgY29udGV4dC5maW5pc2hl
ZFNlY29uZFRhc2sgPSB0cnVlOworICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAg
fSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkp
OworCisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQu
ZmluaXNoZWRGaXJzdFRhc2spOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRTZWNv
bmRUYXNrKTsKK30KKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBSZWVudHJhbnRSZXNjaGVk
dWxpbmcpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29w
U291cmNlVGVzdCB0ZXN0OworICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrID0gZmFsc2U7
CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrID0gZmFsc2U7CisgICAgfSBjb250ZXh0
OworCisgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
KworICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEZpcnN0VGFzayIs
IFsmXSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAg
Y29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsmXSB7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUo
KSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAg
RVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisKKyAgICAgICAgICAgIGNv
bnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRleHQudGVz
dC5maW5pc2goKTsKKyAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVz
dC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LmZpbmlzaGVkRmly
c3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisg
ICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICBF
WFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShj
b250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJj
ZSwgUmVzY2hlZHVsaW5nRnJvbURpZmZlcmVudFRocmVhZCkKK3sKKyAgICBzdHJ1Y3QgVGVzdGlu
Z0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIGJv
b2wgZmluaXNoZWRGaXJzdFRhc2s7CisgICAgICAgIGJvb2wgZmluaXNoZWRTZWNvbmRUYXNrOwor
ICAgIH0gY29udGV4dDsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCku
aXNBY3RpdmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0
XSBGaXJzdFRhc2siLCBbJl0geworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkp
OworCisgICAgICAgIGdfdXNsZWVwKDEgKiBHX1VTRUNfUEVSX1NFQyk7CisgICAgICAgIGNvbnRl
eHQuZmluaXNoZWRGaXJzdFRhc2sgPSB0cnVlOworICAgIH0pOworICAgIEVYUEVDVF9UUlVFKGNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgIEdUaHJlYWQqIGhlbHBl
clRocmVhZCA9IGdfdGhyZWFkX25ldyhudWxscHRyLCBbXShncG9pbnRlciBkYXRhKSAtPiBncG9p
bnRlciB7CisgICAgICAgIGdfdXNsZWVwKDAuMjUgKiBHX1VTRUNfUEVSX1NFQyk7CisKKyAgICAg
ICAgVGVzdGluZ0NvbnRleHQmIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8VGVzdGluZ0NvbnRleHQq
PihkYXRhKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0
aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworCisgICAgICAgIGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRhc2siLCBbJl0geworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisKKyAgICAg
ICAgICAgIGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnRleHQudGVzdC5maW5pc2goKTsKKyAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBnX3RocmVhZF9l
eGl0KG51bGxwdHIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9LCAmY29udGV4dCk7
CisKKyAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworICAgIGdfdGhyZWFkX3VucmVmKGhlbHBl
clRocmVhZCk7CisKKyAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0
aXZlKCkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRTZWNvbmRUYXNrKTsKK30KKworVEVTVChXVEZf
R01haW5Mb29wU291cmNlLCBEZXN0cnVjdGlvbkR1cmluZ0Rpc3BhdGNoKQoreworICAgIC8vIFRo
aXMgaXMganVzdCBhIHJhdyB0ZXN0IHRoYXQgZW5zdXJlcyBkZWxldGluZyB0aGUgR01haW5Mb29w
U291cmNlIG9iamVjdCBkdXJpbmcKKyAgICAvLyBkaXNwYXRjaCBkb2VzIG5vdCBjYXVzZSBwcm9i
bGVtcy4gVGhpcyB0ZXN0IHN1Y2NlZWRzIGlmIGl0IGRvZXNuJ3QgY3Jhc2guCisKKyAgICBHTWFp
bkxvb3BTb3VyY2UqIHNvdXJjZTsKKyAgICBHTWFpbkxvb3AqIGxvb3AgPSBnX21haW5fbG9vcF9u
ZXcobnVsbHB0ciwgVFJVRSk7CisKKyAgICBzb3VyY2UgPSBuZXcgR01haW5Mb29wU291cmNlOwor
ICAgIHNvdXJjZS0+c2NoZWR1bGUoIltUZXN0XSBEZXN0cm95U291cmNlVGFzayIsIFsmXSB7Cisg
ICAgICAgIGRlbGV0ZSBzb3VyY2U7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Cisg
ICAgfSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgc291cmNlID0gbmV3IEdN
YWluTG9vcFNvdXJjZTsKKyAgICBzb3VyY2UtPnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveVNvdXJj
ZVRhc2siLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+KFsmXSB7CisgICAgICAgIGRlbGV0ZSBzb3Vy
Y2U7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9KSk7CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgZ19tYWluX2xv
b3BfdW5yZWYobG9vcCk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgQ2FuY2VsUmVw
ZWF0aW5nU291cmNlRHVyaW5nRGlzcGF0Y2gpCit7CisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0
IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25lZCBj
YWxsQ291bnQgPSAwOworICAgIH0gY29udGV4dDsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0
LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCku
c2NoZWR1bGUoIltUZXN0XSBSZXBlYXRpbmdUYXNrIiwKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxi
b29sICgpPihbJl0geworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJj
ZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsK
KworICAgICAgICAgICAgY29udGV4dC5jYWxsQ291bnQrKzsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LmNhbGxDb3VudCA9PSAzKQorICAgICAgICAgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5jYW5jZWwoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KSk7CisgICAg
RVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAg
Y29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgp
OworCisgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5jYWxsQ291bnQpOworfQorCitURVNUKFdURl9HTWFp
bkxvb3BTb3VyY2UsIEJhc2ljRGVzdHJveUNhbGxiYWNrcykKK3sKKyAgICBzdHJ1Y3QgVGVzdGlu
Z0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIGJv
b2wgY2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tD
YWxsZWQgPSBmYWxzZTsKKyAgICB9OworCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBj
b250ZXh0OworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0
aXZlKCkpOworICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBE
ZXN0cm95Q2FsbGJhY2siLAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuY2FsbGJh
Y2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAg
ICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNo
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNv
dXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7
CisKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5jYWxsYmFja0NhbGxlZCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIEVYUEVDVF9UUlVF
KCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIGNvbnRleHQudGVz
dC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lDYWxsYmFjayIsCisgICAgICAgICAg
ICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+KFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2Fs
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
KSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAg
ICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC5jYWxsYmFja0NhbGxlZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNh
bGxiYWNrQ2FsbGVkKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVz
dHJveUNhbGxiYWNrc0FmdGVyQ2FuY2VsbGluZ0R1cmluZ0Rpc3BhdGNoKQoreworICAgIHN0cnVj
dCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAg
ICAgICAgdW5zaWduZWQgY2FsbGJhY2tDYWxsQ291bnQ9IDA7CisgICAgICAgIGJvb2wgZGVzdHJv
eUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGlu
Z0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxl
KCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LnNv
dXJjZSgpLmNhbmNlbCgpOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAg
ICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNh
bGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNo
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNv
dXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNvbnRleHQudGVzdC5kZWxheWVkRmlu
aXNoKCk7CisgICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisKKyAgICAgICAgRVhQRUNU
X1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKDEsIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShj
b250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorCisgICAgeworICAgICAgICBU
ZXN0aW5nQ29udGV4dCBjb250ZXh0OworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2No
ZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlv
bjxib29sICgpPihbJl0geworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVz
dC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVs
ZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCsrOworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50ID09IDMpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5jYW5jZWwoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisg
ICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5kZXN0cm95
Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250
ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgp
OworCisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUo
KSk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50KTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0K
K30KKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBEZXN0cm95Q2FsbGJhY2tzQWZ0ZXJSZXNj
aGVkdWxpbmdEdXJpbmdEaXNwYXRjaCkKK3sKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgewor
ICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0
Q2FsbGJhY2tDYWxsQ291bnQgPSAwOworICAgICAgICBib29sIGZpcnN0RGVzdHJveUNhbGxiYWNr
Q2FsbGVkID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZENhbGxiYWNrQ2FsbENvdW50
ID0gMDsKKyAgICAgICAgYm9vbCBzZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsK
KyAgICB9OworCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBjb250ZXh0OworICAgICAg
ICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAg
ICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBCYXNlQ2FsbGJhY2siLAor
ICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1
bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3VudCsr
OworICAgICAgICAgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3Rd
IFJlc2NoZWR1bGluZ0NhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgWyZdIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0Fj
dGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50Kys7CisgICAg
ICAgICAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnNlY29uZERlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5p
c1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAg
ICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgR01haW5M
b29wU291cmNlIGhhcyBiZWVuIHJlc2NoZWR1bGVkLCBlcmdvIHRoZSBTY2hlZHVsZWQgc3RhdHVz
LgorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1Nj
aGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpcnN0RGVzdHJveUNhbGxiYWNr
Q2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0
LmRlbGF5ZWRGaW5pc2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAg
ICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC5maXJzdERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29u
dGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gQmFzZUNhbGxiYWNrIiwKKyAgICAg
ICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZmlyc3RD
YWxsYmFja0NhbGxDb3VudCsrOworICAgICAgICAgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5zY2hlZHVsZSgiW1Rlc3RdIFJlc2NoZWR1bGluZ0NhbGxiYWNrIiwKKyAgICAgICAgICAgICAg
ICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0geworICAgICAgICAgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuc2Vjb25kQ2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50ICE9IDM7CisgICAgICAg
ICAgICAgICAgICAgIH0pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAg
IFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5z
ZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNT
Y2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
KSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHRoZSBHTWFpbkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVs
ZWQsIGVyZ28gdGhlIFNjaGVkdWxlZCBzdGF0dXMuCisgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAg
IGNvbnRleHQuZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAg
fSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxl
ZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBj
b250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRl
c3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LmZp
cnN0Q2FsbGJhY2tDYWxsQ291bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpcnN0
RGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIGNvbnRleHQuc2Vj
b25kQ2FsbGJhY2tDYWxsQ291bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnNlY29u
ZERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCitURVNUKFdURl9HTWFpbkxvb3BT
b3VyY2UsIERlbGV0ZU9uRGVzdHJveVNvdXJjZXMpCit7CisgICAgLy8gVGVzdGluZyB0aGUgZGVs
ZXRlLW9uLWRlc3Ryb3kgc291cmNlcyBpcyB2ZXJ5IGxpbWl0ZWQuIFRoZXJlJ3Mgbm8gZ29vZCB3
YXkKKyAgICAvLyBvZiB0ZXN0aW5nIHRoYXQgdGhlIEdNYWluTG9vcFNvdXJjZSBvYmplY3RzIGFy
ZSBkZWxldGVkIHdoZW4gdGhlaXIgR1NvdXJjZQorICAgIC8vIGlzIGRlc3Ryb3llZCwgYW5kIHRo
ZSBzb2NrZXQgY2FsbGJhY2tzIHNob3VsZG4ndCBiZSBzY2hlZHVsZWQgb24gdGhlc2UgdHlwZXMK
KyAgICAvLyBvZiBHTWFpbkxvb3BTb3VyY2VzIChhcyB3ZSBhZ2dyZXNzaXZlbHkgYXNzZXJ0IHRv
IHByZXZlbnQgdGhhdCkuCisKKyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBH
TWFpbkxvb3BTb3VyY2VUZXN0IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrQ2FsbENv
dW50ID0gMDsKKyAgICAgICAgYm9vbCBkZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKKyAg
ICB9IGNvbnRleHQ7CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisK
KyAgICAgICAgLy8gV2UgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGUgR01haW5Mb29wU291cmNlIGp1
c3QgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICAgICAgIC8vIHRlc3RzIG9uIGl0cyBzdGF0dXMu
IFdlIHNob3VsZG4ndCB1c2UgdGhlIHJlZmVyZW5jZSBhZnRlciB0aGUgbWFpbiBsb29wCisgICAg
ICAgIC8vIGV4aXN0cyBzaW5jZSBhdCB0aGF0IHBvaW50IHRoZSBHTWFpbkxvb3BTb3VyY2Ugd2ls
bCBiZSBkZXN0cm95ZWQgYW5kCisgICAgICAgIC8vIHRoZSByZWZlcmVuY2UgcG9pbnRpbmcgdG8g
YW4gaW52YWxpZCBwaWVjZSBvZiBtZW1vcnkuCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSYgc291
cmNlID0gR01haW5Mb29wU291cmNlOjpjcmVhdGVBbmREZWxldGVPbkRlc3Ryb3koKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgc291cmNlLnNjaGVk
dWxlKCJbVGVzdF0gRGVsZXRlT25EZXN0cm95IiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoc291cmNlLmlzQWN0aXZlKCkgJiYgIXNvdXJjZS5pc1NjaGVk
dWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50Kys7Cisg
ICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICBbJl0geworICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFzb3VyY2UuaXNBY3RpdmUoKSk7CisgICAgICAgICAg
ICAgICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc291cmNlLmlzU2NoZWR1bGVkKCkpOworCisg
ICAgICAgIGNvbnRleHQudGVzdC5kZWxheWVkRmluaXNoKCk7CisgICAgICAgIGNvbnRleHQudGVz
dC5ydW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LmNhbGxiYWNrQ2FsbENv
dW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKworICAg
ICAgICAvLyBBcyBpbiB0aGUgcHJldmlvdXMgc2NvcGUsIHdlIG5lZWQgYSByZWZlcmVuY2UgdG8g
dGhlIEdNYWluTG9vcFNvdXJjZS4KKyAgICAgICAgR01haW5Mb29wU291cmNlJiBzb3VyY2UgPSBH
TWFpbkxvb3BTb3VyY2U6OmNyZWF0ZUFuZERlbGV0ZU9uRGVzdHJveSgpOworICAgICAgICBFWFBF
Q1RfVFJVRSghc291cmNlLmlzQWN0aXZlKCkpOworICAgICAgICBzb3VyY2Uuc2NoZWR1bGUoIltU
ZXN0XSBEZWxldGVPbkRlc3Ryb3kiLAorICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgp
PihbJl0geworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc0FjdGl2ZSgpICYm
ICFzb3VyY2UuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFj
a0NhbGxDb3VudCsrOworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNhbGxiYWNrQ2Fs
bENvdW50ICE9IDM7CisgICAgICAgICAgICB9KSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAg
ICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghc291cmNlLmlzQWN0aXZl
KCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFj
a0NhbGxlZCk7CisgICAgICAgICAgICAgICAgY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQg
PSB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc1Nj
aGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAg
ICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRVEoMywgY29udGV4
dC5jYWxsYmFja0NhbGxDb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJv
eUNhbGxiYWNrQ2FsbGVkKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238304</attachid>
            <date>2014-09-18 04:36:25 -0700</date>
            <delta_ts>2014-09-18 06:07:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135800-20140918043621.patch</filename>
            <type>text/plain</type>
            <size>41965</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDZmYWUxYzM2MjE2MTNkZDI3NmQ5M2Zl
MjMwNDk0NzkyYzZjYmRlZTAuLjM1YjFmMzI2MzVhNmJhZmVjMjk2NmJiZWNiNTQ3N2JiMDVjMDQw
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMTQtMDktMTcgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSBpcyBleHBvc2VkIHRv
IHJhY2UgY29uZGl0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgR01haW5Mb29wU291cmNlIG9iamVjdHMgY2FuIGJlIGRpc3BhdGNoaW5nIHRhc2tz
IG9uIG9uZSB0aHJlYWQKKyAgICAgICAgd2hpbGUgaGF2aW5nIGEgbmV3IHRhc2sgc2NoZWR1bGVk
IG9uIGEgZGlmZmVyZW50IHRocmVhZC4gVGhpcworICAgICAgICBjYW4gZm9yIGluc3RhbmNlIG9j
Y3VyIGluIFdlYktpdFZpZGVvU2luaywgd2hlcmUgdGhlIHRpbWVvdXQKKyAgICAgICAgY2FsbGJh
Y2sgY2FuIGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lCisg
ICAgICAgIGl0IGlzIGJlaW5nIHJlc2NoZWR1bGVkIG9uIGEgZGlmZmVyZW50IHRocmVhZCAoY3Jl
YXRlZCB0aHJvdWdoCisgICAgICAgIEdTdHJlYW1lcikuCisKKyAgICAgICAgVGhlIGluaXRpYWwg
c29sdXRpb24gaXMgdG8gdXNlIEdNdXRleCB0byBwcmV2ZW50IHBhcmFsbGVsIGRhdGEKKyAgICAg
ICAgYWNjZXNzIGZyb20gZGlmZmVyZW50IHRocmVhZHMuIEluIHRoZSBmdXR1cmUgSSBwbGFuIHRv
IGxvb2sgYXQKKyAgICAgICAgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIHRocmVhZC1zcGVj
aWZpYyBHTWFpbkxvb3BTb3VyY2UKKyAgICAgICAgb2JqZWN0cyB0aGF0IHdvdWxkbid0IHJlcXVp
cmUgdGhlIHVzZSBvZiBHTXV0ZXguCisKKyAgICAgICAgR1NvdXJjZSwgR0NhbmNlbGxhYmxlIGFu
ZCBzdGQ6OmZ1bmN0aW9uPD4gb2JqZWN0cyBhcmUgbm93IHBhY2tlZAorICAgICAgICBpbnRvIGFu
IGludGVybmFsIENvbnRleHQgc3RydWN0dXJlLiBVc2luZyB0aGUgQysrMTEgbW92ZSBzZW1hbnRp
Y3MKKyAgICAgICAgaXQncyBzaW1wbGUgdG8sIGF0IHRoZSB0aW1lIG9mIGRpc3BhdGNoLCBtb3Zl
IHRoZSBjdXJyZW50IGNvbnRleHQKKyAgICAgICAgb3V0IG9mIHRoZSBHTWFpbkxvb3BTb3VyY2Ug
b2JqZWN0IGluIGNhc2UgdGhlIGRpc3BhdGNoIGNhdXNlcyBhCisgICAgICAgIHJlc2NoZWR1bGlu
ZyBvbiB0aGF0IHNhbWUgb2JqZWN0LgorCisgICAgICAgIEFsc28gYWRkZWQgaW4gdGhlIENvbnRl
eHQgc3RydWN0IGlzIGEgbmV3IEdDYW5jZWxsYWJsZS4gVGhlIHBvaW50ZXIKKyAgICAgICAgb2Yg
dGhhdCBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIEdNYWluTG9vcFNvdXJjZSBiZWZvcmUgdGhl
IENvbnRleHQKKyAgICAgICAgaXMgbW92ZWQgb3V0IGZvciB0aGUgY2FsbGJhY2sgZGlzcGF0Y2gu
IFRoaXMgbWFrZXMgaXQgc2FmZSB0byBjYW5jZWwKKyAgICAgICAgb3IgZXZlbiBkZWxldGUgdGhl
IEdNYWluTG9vcFNvdXJjZSBkdXJpbmcgdGhlIGRpc3BhdGNoIGFuZCBwcmV2ZW50cworICAgICAg
ICB1c2UtYWZ0ZXItZGVsZXRlIG9uIEdNYWluTG9vcFNvdXJjZSBvbmNlIHRoZSBkaXNwYXRjaCBp
cyBkb25lIGluCisgICAgICAgIHRoZSBHTWFpbkxvb3BTb3VyY2U6OipDYWxsYmFjaygpIG1ldGhv
ZHMuCisKKyAgICAgICAgQWxsIHRoZSBzY2hlZHVsZSooKSBtZXRob2RzIGFuZCB0aGUgY2FuY2Vs
V2l0aG91dExvY2tpbmcoKSBtZXRob2QKKyAgICAgICAgY2FsbGVycyBub3cgbG9jayB0aGUgR011
dGV4IHRvIGVuc3VyZSBubyBvbmUgZWxzZSBpcyBhY2Nlc3NpbmcgdGhlCisgICAgICAgIGRhdGEg
YXQgdGhhdCBtb21lbnQuIFNpbWlsYXIgZ29lcyBmb3IgdGhlIGRpc3BhdGNoIG1ldGhvZHMsIGJ1
dCB0aG9zZQorICAgICAgICBkbyB0aGUgZGlzcGF0Y2ggYW5kIHBvc3NpYmxlIGRlc3RydWN0aW9u
IGR1dGllcyB3aXRoIHRoZSBtdXRleCB1bmxvY2tlZC4KKyAgICAgICAgVGhlIGRpc3BhdGNoIGNh
biBjYXVzZSByZXNjaGVkdWxpbmcgb24gdGhlIHNhbWUgR01haW5Mb29wU291cmNlIG9iamVjdCwK
KyAgICAgICAgd2hpY2ggbXVzdCBub3QgYmUgZG9uZSB3aXRoIGEgbG9ja2VkIG11dGV4LgorCisg
ICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDoKKyAgICAgICAgKFdURjo6
R01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6On5HTWFpbkxvb3BTb3VyY2UpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3Vy
Y2U6OmNhbmNlbCk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6Y2FuY2VsV2l0aG91
dExvY2tpbmcpOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlSWRsZVNv
dXJjZSk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGUpOgorICAgICAg
ICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlVGltZW91dFNvdXJjZSk6CisgICAgICAg
IChXVEY6OkdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KToKKyAgICAgICAgKFdU
Rjo6R01haW5Mb29wU291cmNlOjp2b2lkQ2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxv
b3BTb3VyY2U6OmJvb2xDYWxsYmFjayk6CisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6
c29ja2V0Q2FsbGJhY2spOgorICAgICAgICAoV1RGOjpHTWFpbkxvb3BTb3VyY2U6OnNvY2tldFNv
dXJjZUNhbGxiYWNrKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpDb250ZXh0Ojpk
ZXN0cm95U291cmNlKToKKyAgICAgICAgKFdURjo6R01haW5Mb29wU291cmNlOjpyZXNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkdNYWluTG9vcFNvdXJjZTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg6CisKIDIwMTQtMDktMTcg
IERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxNzM2OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNv
dXJjZS5jcHAKaW5kZXggNmQ4YzUwYjg5MjhjNTBmMWM4MTcwZTYxNGI1OTk0ZGQ4MTM2ZGNmZS4u
ZTFkMjRlMGU4NDJiMzk3NjVjZTZhY2I1YzBjNmQ4YjczYTVkMTNiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2lmIFVT
RShHTElCKQogCiAjaW5jbHVkZSAiR01haW5Mb29wU291cmNlLmgiCi0KICNpbmNsdWRlIDxnaW8v
Z2lvLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAKIG5hbWVzcGFj
ZSBXVEYgewogCkBAIC00MiwxNyArNDIsMjAgQEAgR01haW5Mb29wU291cmNlOjpHTWFpbkxvb3BT
b3VyY2UoKQogICAgIDogbV9kZWxldGVPbkRlc3Ryb3koRG9Ob3REZWxldGVPbkRlc3Ryb3kpCiAg
ICAgLCBtX3N0YXR1cyhSZWFkeSkKIHsKKyAgICBnX211dGV4X2luaXQoJm1fbXV0ZXgpOwogfQog
CiBHTWFpbkxvb3BTb3VyY2U6OkdNYWluTG9vcFNvdXJjZShEZWxldGVPbkRlc3Ryb3lUeXBlIGRl
bGV0ZU9uRGVzdHJveSkKICAgICA6IG1fZGVsZXRlT25EZXN0cm95KGRlbGV0ZU9uRGVzdHJveSkK
ICAgICAsIG1fc3RhdHVzKFJlYWR5KQogeworICAgIGdfbXV0ZXhfaW5pdCgmbV9tdXRleCk7CiB9
CiAKIEdNYWluTG9vcFNvdXJjZTo6fkdNYWluTG9vcFNvdXJjZSgpCiB7CiAgICAgY2FuY2VsKCk7
CisgICAgZ19tdXRleF9jbGVhcigmbV9tdXRleCk7CiB9CiAKIGJvb2wgR01haW5Mb29wU291cmNl
Ojppc1NjaGVkdWxlZCgpIGNvbnN0CkBAIC02NywyNiArNzAsMzQgQEAgYm9vbCBHTWFpbkxvb3BT
b3VyY2U6OmlzQWN0aXZlKCkgY29uc3QKIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OmNhbmNlbCgp
CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1JlZlB0cjxH
U291cmNlPiBzb3VyY2U7Ci0gICAgbV9zb3VyY2Uuc3dhcChzb3VyY2UpOwotCi0gICAgaWYgKG1f
Y2FuY2VsbGFibGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUu
Z2V0KCkpOwotICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNlLmdldCgpKTsKLSAgICBkZXN0cm95
KCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0
TG9ja2luZygpOwogfQogCi12b2lkIEdNYWluTG9vcFNvdXJjZTo6cmVzZXQoKQordm9pZCBHTWFp
bkxvb3BTb3VyY2U6OmNhbmNlbFdpdGhvdXRMb2NraW5nKCkKIHsKKyAgICAvLyBBIHZhbGlkIGNv
bnRleHQgc2hvdWxkIG9ubHkgYmUgcHJlc2VudCBpZiBHTWFpbkxvb3BTb3VyY2UgaXMgaW4gdGhl
IFNjaGVkdWxlZCBvciBEaXNwYXRjaGluZyBzdGF0ZS4KKyAgICBBU1NFUlQoIW1fY29udGV4dC5z
b3VyY2UgfHwgbV9zdGF0dXMgPT0gU2NoZWR1bGVkIHx8IG1fc3RhdHVzID09IERpc3BhdGNoaW5n
KTsKKyAgICAvLyBUaGUgZ2VuZXJhbCBjYW5jZWxsYWJsZSBvYmplY3Qgc2hvdWxkIG9ubHkgYmUg
cHJlc2VudCBpZiB3ZSdyZSBjdXJyZW50bHkgZGlzcGF0Y2hpbmcgdGhpcyBHTWFpbkxvb3BTb3Vy
Y2UuCisgICAgQVNTRVJUKCFtX2NhbmNlbGxhYmxlIHx8IG1fc3RhdHVzID09IERpc3BhdGNoaW5n
KTsKKyAgICAvLyBEZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BTb3VyY2Ugb2JqZWN0cyBjYW4g
b25seSBiZSBjYW5jZWxsZWQgd2hlbiB0aGVyZSdzIGNhbGxiYWNrIGVpdGhlciBzY2hlZHVsZWQK
KyAgICAvLyBvciBpbiB0aGUgbWlkZGxlIG9mIGRpc3BhdGNoLiBBdCB0aGF0IHBvaW50IGNhbmNl
bGxhdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0LgorICAgIEFTU0VSVChtX2RlbGV0ZU9uRGVzdHJv
eSAhPSBEZWxldGVPbkRlc3Ryb3kgfHwgKG1fc3RhdHVzID09IFJlYWR5ICYmICFtX2NvbnRleHQu
c291cmNlKSk7CisKICAgICBtX3N0YXR1cyA9IFJlYWR5OwotICAgIG1fc291cmNlID0gbnVsbHB0
cjsKKworICAgIC8vIFRoZSBzb3VyY2UgaXMgcGVyaGFwcyBiZWluZyBjYW5jZWxsZWQgaW4gdGhl
IG1pZGRsZSBvZiBhIGNhbGxiYWNrIGRpc3BhdGNoLgorICAgIC8vIENhbmNlbGxpbmcgdGhpcyBH
Q2FuY2VsbGFibGUgb2JqZWN0IHdpbGwgY29udmV5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlCisg
ICAgLy8gY3VycmVudCBleGVjdXRpb24gY29udGV4dCB3aGVuIHRoZSBjYWxsYmFjayBkaXNwYXRj
aCBpcyBmaW5pc2hlZC4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdl
dCgpKTsKICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKLSAgICBtX3ZvaWRDYWxsYmFjayA9
IG51bGxwdHI7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fZGVzdHJveUNh
bGxiYWNrID0gbnVsbHB0cjsKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NvbnRleHQuc29j
a2V0Q2FuY2VsbGFibGUuZ2V0KCkpOworCisgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDb250ZXh0IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0
KTsKKyAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3Vy
Y2U6OnNjaGVkdWxlSWRsZVNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBHU291cmNlRnVuYyBzb3Vy
Y2VGdW5jdGlvbiwgaW50IHByaW9yaXR5LCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCkBAIC05NCw0
MyArMTA1LDc0IEBAIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUlkbGVTb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291cmNlRnVuCiAgICAgQVNTRVJUKG1fc3RhdHVz
ID09IFJlYWR5KTsKICAgICBtX3N0YXR1cyA9IFNjaGVkdWxlZDsKIAotICAgIG1fc291cmNlID0g
YWRvcHRHUmVmKGdfaWRsZV9zb3VyY2VfbmV3KCkpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1f
c291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291
cmNlLmdldCgpLCBuYW1lKTsKICAgICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxU
X0lETEUpCi0gICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX3NvdXJjZS5nZXQoKSwgcHJp
b3JpdHkpOwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgc291cmNl
RnVuY3Rpb24sIHRoaXMsIG51bGxwdHIpOwotICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5n
ZXQoKSwgY29udGV4dCk7CisgICAgICAgIGdfc291cmNlX3NldF9wcmlvcml0eShtX2NvbnRleHQu
c291cmNlLmdldCgpLCBwcmlvcml0eSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fY29u
dGV4dC5zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsKKyAgICBn
X3NvdXJjZV9hdHRhY2gobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZv
aWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHksIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgY2FuY2Vs
KCk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVz
dHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAg
QVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFk
b3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKSwKKyAgICAgICAgYWRvcHRHUmVmKGdfY2FuY2Vs
bGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQorICAg
ICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBib29sQ2FsbGJh
Y2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAgV1RGOjptb3Zl
KGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlSWRsZVNvdXJjZShuYW1lLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBwcmlvcml0
eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZShjb25zdCBj
aGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+IGZ1bmN0aW9uLCBpbnQgcHJpb3JpdHks
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUo
ZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5j
dGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRo
b3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2Nv
bnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKSwKKyAgICAg
ICAgYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBz
b2NrZXRDYW5jZWxsYWJsZQorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKKyAgICAg
ICAgV1RGOjptb3ZlKGZ1bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJh
Y2sKKyAgICAgICAgV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVk
dWxlSWRsZVNvdXJjZShuYW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihib29sU291
cmNlQ2FsbGJhY2spLCBwcmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291
cmNlOjpzY2hlZHVsZShjb25zdCBjaGFyKiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPGJvb2wgKEdJT0Nv
bmRpdGlvbik+IGZ1bmN0aW9uLCBHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBjb25kaXRp
b24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQq
IGNvbnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgLy8gRG9uJ3QgYWxsb3cg
c2NoZWR1bGluZyBHSU9Db25kaXRpb24gY2FsbGJhY2tzIG9uIGRlbGV0ZS1vbi1kZXN0cm95IEdN
YWluTG9vcFNvdXJjZXMuCisgICAgQVNTRVJUKG1fZGVsZXRlT25EZXN0cm95ID09IERvTm90RGVs
ZXRlT25EZXN0cm95KTsKKworICAgIEFTU0VSVCghbV9jb250ZXh0LnNvdXJjZSk7CisgICAgR0Nh
bmNlbGxhYmxlKiBzb2NrZXRDYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAg
bV9jb250ZXh0ID0geworICAgICAgICBhZG9wdEdSZWYoZ19zb2NrZXRfY3JlYXRlX3NvdXJjZShz
b2NrZXQsIGNvbmRpdGlvbiwgc29ja2V0Q2FuY2VsbGFibGUpKSwKKyAgICAgICAgYWRvcHRHUmVm
KGdfY2FuY2VsbGFibGVfbmV3KCkpLAorICAgICAgICBhZG9wdEdSZWYoc29ja2V0Q2FuY2VsbGFi
bGUpLAorICAgICAgICBudWxscHRyLCAvLyB2b2lkQ2FsbGJhY2sKKyAgICAgICAgbnVsbHB0ciwg
Ly8gYm9vbENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIFdU
Rjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKKwogICAgIEFTU0VSVChtX3N0YXR1cyA9
PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7Ci0KLSAgICBtX3NvY2tldENhbGxi
YWNrID0gV1RGOjptb3ZlKGZ1bmN0aW9uKTsKLSAgICBtX2Rlc3Ryb3lDYWxsYmFjayA9IFdURjo6
bW92ZShkZXN0cm95RnVuY3Rpb24pOwotICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19j
YW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY3Jl
YXRlX3NvdXJjZShzb2NrZXQsIGNvbmRpdGlvbiwgbV9jYW5jZWxsYWJsZS5nZXQoKSkpOwotICAg
IGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsKLSAgICBnX3NvdXJjZV9z
ZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KHNvY2tldFNvdXJjZUNhbGxiYWNrKSwgdGhpcywgbnVsbHB0cik7Ci0gICAgZ19zb3VyY2VfYXR0
YWNoKG1fc291cmNlLmdldCgpLCBjb250ZXh0KTsKKyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2Nv
bnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9j
b250ZXh0LnNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oc29ja2V0
U291cmNlQ2FsbGJhY2spLCB0aGlzLCBudWxscHRyKTsKKyAgICBnX3NvdXJjZV9hdHRhY2gobV9j
b250ZXh0LnNvdXJjZS5nZXQoKSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNl
OjpzY2hlZHVsZVRpbWVvdXRTb3VyY2UoY29uc3QgY2hhciogbmFtZSwgR1NvdXJjZUZ1bmMgc291
cmNlRnVuY3Rpb24sIGludCBwcmlvcml0eSwgR01haW5Db250ZXh0KiBjb250ZXh0KQpAQCAtMTM4
LDExNiArMTgwLDIxOCBAQCB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVUaW1lb3V0U291
cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5jIHNvdXJjZQogICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBSZWFkeSk7CiAgICAgbV9zdGF0dXMgPSBTY2hlZHVsZWQ7CiAKLSAgICBBU1NFUlQo
bV9zb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9uYW1lKG1fc291cmNlLmdldCgpLCBuYW1lKTsK
KyAgICBnX3NvdXJjZV9zZXRfbmFtZShtX2NvbnRleHQuc291cmNlLmdldCgpLCBuYW1lKTsKICAg
ICBpZiAocHJpb3JpdHkgIT0gR19QUklPUklUWV9ERUZBVUxUKQotICAgICAgICBnX3NvdXJjZV9z
ZXRfcHJpb3JpdHkobV9zb3VyY2UuZ2V0KCksIHByaW9yaXR5KTsKLSAgICBnX3NvdXJjZV9zZXRf
Y2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHNvdXJjZUZ1bmN0aW9uLCB0aGlzLCBudWxscHRyKTsK
LSAgICBnX3NvdXJjZV9hdHRhY2gobV9zb3VyY2UuZ2V0KCksIGNvbnRleHQpOworICAgICAgICBn
X3NvdXJjZV9zZXRfcHJpb3JpdHkobV9jb250ZXh0LnNvdXJjZS5nZXQoKSwgcHJpb3JpdHkpOwor
ICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX2NvbnRleHQuc291cmNlLmdldCgpLCBzb3VyY2VG
dW5jdGlvbiwgdGhpcywgbnVsbHB0cik7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fY29udGV4dC5z
b3VyY2UuZ2V0KCksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1
bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVu
Y3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4
dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRf
c291cmNlX25ldyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV92b2lkQ2FsbGJhY2sgPSBXVEY6Om1v
dmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lG
dW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxX
aXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBt
X2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxh
eS5jb3VudCgpKSksCisgICAgICAgIGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FuY2VsbGFibGUKKyAgICAgICAgV1RGOjptb3ZlKGZ1
bmN0aW9uKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gYm9vbENhbGxiYWNrCisgICAgICAgIG51bGxw
dHIsIC8vIHNvY2tldENhbGxiYWNrCisgICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24p
CisgICAgfTsKICAgICBzY2hlZHVsZVRpbWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4odm9pZFNvdXJjZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwog
fQogCiB2b2lkIEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIq
IG5hbWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBkZXN0
cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBjYW5jZWwoKTsKLSAg
ICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgp
KSk7Ci0gICAgbV9ib29sQ2FsbGJhY2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVz
dHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9j
a2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAg
QVNTRVJUKCFtX2NvbnRleHQuc291cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFk
b3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhkZWxheS5jb3VudCgpKSksCisgICAgICAgIGFk
b3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSwKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0
Q2FuY2VsbGFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8gdm9pZENhbGxiYWNrCisgICAgICAgIFdU
Rjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbGxiYWNrCisg
ICAgICAgIFdURjo6bW92ZShkZXN0cm95RnVuY3Rpb24pCisgICAgfTsKICAgICBzY2hlZHVsZVRp
bWVvdXRTb3VyY2UobmFtZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oYm9vbFNvdXJj
ZUNhbGxiYWNrKSwgcHJpb3JpdHksIGNvbnRleHQpOwogfQogCiB2b2lkIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGVBZnRlckRlbGF5KGNvbnN0IGNoYXIqIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzIGRlbGF5LCBpbnQgcHJpb3JpdHks
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZGVzdHJveUZ1bmN0aW9uLCBHTWFpbkNvbnRleHQqIGNv
bnRleHQpCiB7Ci0gICAgY2FuY2VsKCk7Ci0gICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1l
b3V0X3NvdXJjZV9uZXdfc2Vjb25kcyhkZWxheS5jb3VudCgpKSk7Ci0gICAgbV92b2lkQ2FsbGJh
Y2sgPSBXVEY6Om1vdmUoZnVuY3Rpb24pOwotICAgIG1fZGVzdHJveUNhbGxiYWNrID0gV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
KyAgICBjYW5jZWxXaXRob3V0TG9ja2luZygpOworCisgICAgQVNTRVJUKCFtX2NvbnRleHQuc291
cmNlKTsKKyAgICBtX2NvbnRleHQgPSB7CisgICAgICAgIGFkb3B0R1JlZihnX3RpbWVvdXRfc291
cmNlX25ld19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKSwKKyAgICAgICAgYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpLAorICAgICAgICBudWxscHRyLCAvLyBzb2NrZXRDYW5jZWxsYWJsZQor
ICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAgICBudWxscHRyLCAvLyBib29sQ2Fs
bGJhY2sKKyAgICAgICAgbnVsbHB0ciwgLy8gc29ja2V0Q2FsbGJhY2sKKyAgICAgICAgV1RGOjpt
b3ZlKGRlc3Ryb3lGdW5jdGlvbikKKyAgICB9OwogICAgIHNjaGVkdWxlVGltZW91dFNvdXJjZShu
YW1lLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih2b2lkU291cmNlQ2FsbGJhY2spLCBw
cmlvcml0eSwgY29udGV4dCk7CiB9CiAKIHZvaWQgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFm
dGVyRGVsYXkoY29uc3QgY2hhciogbmFtZSwgc3RkOjpmdW5jdGlvbjxib29sICgpPiBmdW5jdGlv
biwgc3RkOjpjaHJvbm86OnNlY29uZHMgZGVsYXksIGludCBwcmlvcml0eSwgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPiBkZXN0cm95RnVuY3Rpb24sIEdNYWluQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBjYW5jZWwoKTsKLSAgICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25l
d19zZWNvbmRzKGRlbGF5LmNvdW50KCkpKTsKLSAgICBtX2Jvb2xDYWxsYmFjayA9IFdURjo6bW92
ZShmdW5jdGlvbik7Ci0gICAgbV9kZXN0cm95Q2FsbGJhY2sgPSBXVEY6Om1vdmUoZGVzdHJveUZ1
bmN0aW9uKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGNhbmNlbFdp
dGhvdXRMb2NraW5nKCk7CisKKyAgICBBU1NFUlQoIW1fY29udGV4dC5zb3VyY2UpOworICAgIG1f
Y29udGV4dCA9IHsKKyAgICAgICAgYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29u
ZHMoZGVsYXkuY291bnQoKSkpLAorICAgICAgICBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSksCisgICAgICAgIG51bGxwdHIsIC8vIHNvY2tldENhbmNlbGxhYmxlCisgICAgICAgIG51bGxw
dHIsIC8vIHZvaWRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZnVuY3Rpb24pLAorICAgICAg
ICBudWxscHRyLCAvLyBzb2NrZXRDYWxsYmFjaworICAgICAgICBXVEY6Om1vdmUoZGVzdHJveUZ1
bmN0aW9uKQorICAgIH07CiAgICAgc2NoZWR1bGVUaW1lb3V0U291cmNlKG5hbWUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGJvb2xTb3VyY2VDYWxsYmFjayksIHByaW9yaXR5LCBjb250
ZXh0KTsKIH0KIAogdm9pZCBHTWFpbkxvb3BTb3VyY2U6OnZvaWRDYWxsYmFjaygpCiB7Ci0gICAg
aWYgKCFtX3NvdXJjZSkKKyAgICBDb250ZXh0IGNvbnRleHQ7CisKKyAgICB7CisgICAgICAgIEdN
dXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LnNvdXJj
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb250ZXh0ID0gV1RGOjptb3ZlKG1f
Y29udGV4dCk7CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQudm9pZENhbGxiYWNrKTsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCk7CisgICAgICAgIG1fc3RhdHVzID0gRGlz
cGF0Y2hpbmc7CisKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IGNvbnRleHQuY2FuY2VsbGFibGU7
CisgICAgfQorCisgICAgY29udGV4dC52b2lkQ2FsbGJhY2soKTsKKworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LmNhbmNlbGxhYmxlLmdldCgpKSkgeworICAgICAg
ICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IEFTU0VSVChtX3ZvaWRDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxl
ZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNwYXRjaGVkOworICAgIGJvb2wgc2hvdWxkU2VsZkRlc3Ry
dWN0ID0gZmFsc2U7CisgICAgeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgICAgICBtX3N0YXR1cyA9IFJlYWR5OworICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVs
bHB0cjsKKyAgICAgICAgc2hvdWxkU2VsZkRlc3RydWN0ID0gbV9kZWxldGVPbkRlc3Ryb3kgPT0g
RGVsZXRlT25EZXN0cm95OworICAgIH0KIAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNl
LmdldCgpOwotICAgIG1fdm9pZENhbGxiYWNrKCk7Ci0gICAgaWYgKHNvdXJjZSA9PSBtX3NvdXJj
ZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgp
OworICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAgICAgIGRlbGV0ZSB0aGlzOwogfQog
CiBib29sIEdNYWluTG9vcFNvdXJjZTo6Ym9vbENhbGxiYWNrKCkKIHsKLSAgICBpZiAoIW1fc291
cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0OworCisgICAg
eworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1f
Y29udGV4dC5zb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gU3RvcDsKIAotICAgIEFTU0VSVCht
X2Jvb2xDYWxsYmFjayk7Ci0gICAgQVNTRVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0
YXR1cyA9PSBEaXNwYXRjaGVkKTsKLSAgICBtX3N0YXR1cyA9IERpc3BhdGNoZWQ7CisgICAgICAg
IGNvbnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKIAotICAgIEdTb3VyY2UqIHNvdXJjZSA9
IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFsID0gbV9ib29sQ2FsbGJhY2soKTsKLSAg
ICBpZiAoIXJldHZhbCAmJiBzb3VyY2UgPT0gbV9zb3VyY2UuZ2V0KCkpCi0gICAgICAgIGRlc3Ry
b3koKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQuYm9vbENhbGxiYWNrKTsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdHVzID09IFNjaGVkdWxlZCB8fCBtX3N0YXR1cyA9PSBEaXNwYXRjaGluZyk7Cisg
ICAgICAgIG1fc3RhdHVzID0gRGlzcGF0Y2hpbmc7CisKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9
IGNvbnRleHQuY2FuY2VsbGFibGU7CisgICAgfQorCisgICAgYm9vbCByZXR2YWwgPSBjb250ZXh0
LmJvb2xDYWxsYmFjaygpOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNv
bnRleHQuY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJj
ZSgpOworICAgICAgICByZXR1cm4gU3RvcDsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFNlbGZE
ZXN0cnVjdCA9IGZhbHNlOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211
dGV4KTsKKyAgICAgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgICAgIHNob3VsZFNl
bGZEZXN0cnVjdCA9IG1fZGVsZXRlT25EZXN0cm95ID09IERlbGV0ZU9uRGVzdHJveTsKKworICAg
ICAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFpbkxvb3BTb3Vy
Y2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVyaW5nIGRpc3BhdGNoLgorICAgICAgICBBU1NFUlQo
KCFtX2NvbnRleHQuc291cmNlICYmIG1fc3RhdHVzID09IERpc3BhdGNoaW5nKSB8fCBtX3N0YXR1
cyA9PSBTY2hlZHVsZWQpOworICAgICAgICBpZiAocmV0dmFsICYmICFtX2NvbnRleHQuc291cmNl
KQorICAgICAgICAgICAgbV9jb250ZXh0ID0gV1RGOjptb3ZlKGNvbnRleHQpOworICAgICAgICBl
bHNlIGlmICghcmV0dmFsKQorICAgICAgICAgICAgbV9zdGF0dXMgPSBSZWFkeTsKKyAgICB9CisK
KyAgICBpZiAoY29udGV4dC5zb3VyY2UpIHsKKyAgICAgICAgY29udGV4dC5kZXN0cm95U291cmNl
KCk7CisgICAgICAgIGlmIChzaG91bGRTZWxmRGVzdHJ1Y3QpCisgICAgICAgICAgICBkZWxldGUg
dGhpczsKKyAgICB9CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCiBib29sIEdNYWluTG9vcFNv
dXJjZTo6c29ja2V0Q2FsbGJhY2soR0lPQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBpZiAo
IW1fc291cmNlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dCBjb250ZXh0Owog
Ci0gICAgQVNTRVJUKG1fc29ja2V0Q2FsbGJhY2spOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBT
Y2hlZHVsZWQgfHwgbV9zdGF0dXMgPT0gRGlzcGF0Y2hlZCk7Ci0gICAgbV9zdGF0dXMgPSBEaXNw
YXRjaGVkOworICAgIHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAg
ICAgICAgaWYgKCFtX2NvbnRleHQuc291cmNlKQorICAgICAgICAgICAgcmV0dXJuIFN0b3A7CiAK
LSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQobV9jYW5jZWxsYWJsZS5nZXQoKSkp
IHsKLSAgICAgICAgZGVzdHJveSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNv
bnRleHQgPSBXVEY6Om1vdmUobV9jb250ZXh0KTsKKworICAgICAgICBBU1NFUlQoY29udGV4dC5z
b2NrZXRDYWxsYmFjayk7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBTY2hlZHVsZWQgfHwg
bV9zdGF0dXMgPT0gRGlzcGF0Y2hpbmcpOworICAgICAgICBtX3N0YXR1cyA9IERpc3BhdGNoaW5n
OworCisgICAgICAgIG1fY2FuY2VsbGFibGUgPSBjb250ZXh0LmNhbmNlbGxhYmxlOwogICAgIH0K
IAotICAgIEdTb3VyY2UqIHNvdXJjZSA9IG1fc291cmNlLmdldCgpOwotICAgIGJvb2wgcmV0dmFs
ID0gbV9zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pOwotICAgIGlmICghcmV0dmFsICYmIHNvdXJj
ZSA9PSBtX3NvdXJjZS5nZXQoKSkKLSAgICAgICAgZGVzdHJveSgpOworICAgIGlmIChnX2NhbmNl
bGxhYmxlX2lzX2NhbmNlbGxlZChjb250ZXh0LnNvY2tldENhbmNlbGxhYmxlLmdldCgpKSkgewor
ICAgICAgICBjb250ZXh0LmRlc3Ryb3lTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIFN0b3A7Cisg
ICAgfQogCi0gICAgcmV0dXJuIHJldHZhbDsKLX0KKyAgICBib29sIHJldHZhbCA9IGNvbnRleHQu
c29ja2V0Q2FsbGJhY2soY29uZGl0aW9uKTsKIAotdm9pZCBHTWFpbkxvb3BTb3VyY2U6OmRlc3Ry
b3koKQotewotICAgIGF1dG8gZGVzdHJveUNhbGxiYWNrID0gV1RGOjptb3ZlKG1fZGVzdHJveUNh
bGxiYWNrKTsKLSAgICBhdXRvIGRlbGV0ZU9uRGVzdHJveSA9IG1fZGVsZXRlT25EZXN0cm95Owot
ICAgIHJlc2V0KCk7Ci0gICAgaWYgKGRlc3Ryb3lDYWxsYmFjaykKLSAgICAgICAgZGVzdHJveUNh
bGxiYWNrKCk7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNvbnRleHQuY2Fu
Y2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGNvbnRleHQuZGVzdHJveVNvdXJjZSgpOworICAg
ICAgICByZXR1cm4gU3RvcDsKKyAgICB9CiAKLSAgICBpZiAoZGVsZXRlT25EZXN0cm95ID09IERv
Tm90RGVsZXRlT25EZXN0cm95KQotICAgICAgICByZXR1cm47CisgICAgeworICAgICAgICBHTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0
cjsKKworICAgICAgICAvLyBtX3N0YXR1cyBzaG91bGQgcmVmbGVjdCB3aGV0aGVyIHRoZSBHTWFp
bkxvb3BTb3VyY2UgaGFzIGJlZW4gcmVzY2hlZHVsZWQgZHVyaW5nIGRpc3BhdGNoLgorICAgICAg
ICBBU1NFUlQoKCFtX2NvbnRleHQuc291cmNlICYmIG1fc3RhdHVzID09IERpc3BhdGNoaW5nKSB8
fCBtX3N0YXR1cyA9PSBTY2hlZHVsZWQpOworCisgICAgICAgIGlmIChyZXR2YWwgJiYgIW1fY29u
dGV4dC5zb3VyY2UpCisgICAgICAgICAgICBtX2NvbnRleHQgPSBXVEY6Om1vdmUoY29udGV4dCk7
CisgICAgICAgIGVsc2UgaWYgKCFyZXR2YWwpCisgICAgICAgICAgICBtX3N0YXR1cyA9IFJlYWR5
OworICAgIH0KKworICAgIGlmIChjb250ZXh0LnNvdXJjZSkKKyAgICAgICAgY29udGV4dC5kZXN0
cm95U291cmNlKCk7CiAKLSAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gcmV0dmFsOwogfQog
CiBnYm9vbGVhbiBHTWFpbkxvb3BTb3VyY2U6OnZvaWRTb3VyY2VDYWxsYmFjayhHTWFpbkxvb3BT
b3VyY2UqIHNvdXJjZSkKQEAgLTI2Niw2ICs0MTAsMTMgQEAgZ2Jvb2xlYW4gR01haW5Mb29wU291
cmNlOjpzb2NrZXRTb3VyY2VDYWxsYmFjayhHU29ja2V0KiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlv
biwKICAgICByZXR1cm4gc291cmNlLT5zb2NrZXRDYWxsYmFjayhjb25kaXRpb24pID09IENvbnRp
bnVlOwogfQogCit2b2lkIEdNYWluTG9vcFNvdXJjZTo6Q29udGV4dDo6ZGVzdHJveVNvdXJjZSgp
Cit7CisgICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2UuZ2V0KCkpOworICAgIGlmIChkZXN0cm95
Q2FsbGJhY2spCisgICAgICAgIGRlc3Ryb3lDYWxsYmFjaygpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Z29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaCBiL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR01haW5M
b29wU291cmNlLmgKaW5kZXggOTNlZTQ4MjJiNzBkOTI0NTJiODQ3YzcyZjc3NmM2ZDcxMmI3NmU2
Yy4uZWYwNWFmYzVlZTI0MTIxODhkNmZiYWJjZTI3YzNkN2JhMDUzYjU2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBfR1NvY2tldCBHU29j
a2V0OwordHlwZWRlZiB1bmlvbiBfR011dGV4IEdNdXRleDsKIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTYzLDE0ICs2NCwxNSBAQCBwcml2YXRlOgogICAgIGVudW0gRGVsZXRlT25EZXN0cm95VHlw
ZSB7IERlbGV0ZU9uRGVzdHJveSwgRG9Ob3REZWxldGVPbkRlc3Ryb3kgfTsKICAgICBHTWFpbkxv
b3BTb3VyY2UoRGVsZXRlT25EZXN0cm95VHlwZSk7CiAKLSAgICBlbnVtIFN0YXR1cyB7IFJlYWR5
LCBTY2hlZHVsZWQsIERpc3BhdGNoZWQgfTsKKyAgICBlbnVtIFN0YXR1cyB7IFJlYWR5LCBTY2hl
ZHVsZWQsIERpc3BhdGNoaW5nIH07CiAKLSAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBjYW5j
ZWxXaXRob3V0TG9ja2luZygpOwogICAgIHZvaWQgc2NoZWR1bGVJZGxlU291cmNlKGNvbnN0IGNo
YXIqIG5hbWUsIEdTb3VyY2VGdW5jLCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOwogICAg
IHZvaWQgc2NoZWR1bGVUaW1lb3V0U291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIEdTb3VyY2VGdW5j
LCBpbnQgcHJpb3JpdHksIEdNYWluQ29udGV4dCopOwogICAgIHZvaWQgdm9pZENhbGxiYWNrKCk7
CiAgICAgYm9vbCBib29sQ2FsbGJhY2soKTsKICAgICBib29sIHNvY2tldENhbGxiYWNrKEdJT0Nv
bmRpdGlvbik7CisKICAgICB2b2lkIGRlc3Ryb3koKTsKIAogICAgIHN0YXRpYyBnYm9vbGVhbiB2
b2lkU291cmNlQ2FsbGJhY2soR01haW5Mb29wU291cmNlKik7CkBAIC03OSwxMiArODEsMjQgQEAg
cHJpdmF0ZToKIAogICAgIERlbGV0ZU9uRGVzdHJveVR5cGUgbV9kZWxldGVPbkRlc3Ryb3k7CiAg
ICAgU3RhdHVzIG1fc3RhdHVzOwotICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7CisgICAg
R011dGV4IG1fbXV0ZXg7CiAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7
Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3ZvaWRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1
bmN0aW9uPGJvb2wgKCk+IG1fYm9vbENhbGxiYWNrOwotICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAo
R0lPQ29uZGl0aW9uKT4gbV9zb2NrZXRDYWxsYmFjazsKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KCk+IG1fZGVzdHJveUNhbGxiYWNrOworCisgICAgc3RydWN0IENvbnRleHQgeworICAgICAgICBD
b250ZXh0KCkgPSBkZWZhdWx0OworICAgICAgICBDb250ZXh0KENvbnRleHQmJikgPSBkZWZhdWx0
OworICAgICAgICBDb250ZXh0JiBvcGVyYXRvcj0oQ29udGV4dCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICAgICAgdm9pZCBkZXN0cm95U291cmNlKCk7CisKKyAgICAgICAgR1JlZlB0cjxHU291cmNlPiBz
b3VyY2U7CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKKyAgICAg
ICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IHNvY2tldENhbmNlbGxhYmxlOworICAgICAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IHZvaWRDYWxsYmFjazsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjxi
b29sICgpPiBib29sQ2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoR0lPQ29u
ZGl0aW9uKT4gc29ja2V0Q2FsbGJhY2s7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4g
ZGVzdHJveUNhbGxiYWNrOworICAgIH0gbV9jb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
M2QyZGZjZWRjOTk4MDEzYjE2NmQ3MDRlNWJlZDZlODEwMzQwMjI4Yy4uNTdmNzViYzhiMjhjZTAw
MjJiY2E4NWI0YWJkYzhjOTIyOGJiNWNjMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTA5LTE3ICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBHTWFpbkxvb3BTb3VyY2Ug
aXMgZXhwb3NlZCB0byByYWNlIGNvbmRpdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciBHTWFpbkxvb3BTb3VyY2Uu
CisKKyAgICAgICAgVGhlIHRlc3RzIGNoZWNrIGNvcnJlY3QgYmVoYXZpb3Igb2YgR01haW5Mb29w
U291cmNlIGluIHZhcmlvdXMgY29uZGl0aW9ucyAtLQorICAgICAgICBmcm9tIHRoZSBtb3N0IHNp
bXBsZSByZXNjaGVkdWxpbmcgdG8gcmVzY2hlZHVsaW5nIGR1cmluZyBkaXNwYXRjaCwgY2FuY2Vs
bGluZworICAgICAgICBvciBkZXN0cm95aW5nIHRoZSBHTWFpbkxvb3BTb3VyY2UgZHVyaW5nIGRp
c3BhdGNoLCBwcm9wZXIgZGVzdHJveSBjYWxsYmFjaworICAgICAgICBkaXNwYXRjaGluZyBldGMu
CisKKyAgICAgICAgU2NoZWR1bGluZyBib3RoIHZvaWQgKG9uZS10aW1lKSBhbmQgYm9vbCAocmVw
ZWF0YWJsZSkgY2FsbGJhY2tzIGlzIHRlc3RlZC4KKyAgICAgICAgU3RhdGUgb2YgdGhlIEdNYWlu
TG9vcFNvdXJjZSBvYmplY3QgKGVpdGhlciByZWFkeSwgc2hlZHVsZWQgb3IgYWN0aXZlKSBpcwor
ICAgICAgICB0aG9yb3VnaGx5IHRlc3RlZCB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGF0
IG9iamVjdC4KKworICAgICAgICBTdGlsbCBtaXNzaW5nIGFyZSB0ZXN0cyBmb3Igc29ja2V0IGNh
bGxiYWNrcywgd2hpY2ggYXJlIGEgYml0IHRyaWNraWVyIGJlY2F1c2UKKyAgICAgICAgdGhleSBy
ZWx5IG9uIGEgR1NvY2tldCBvYmplY3QuIFRoZSBkZWxldGUtb24tZGVzdHJveSBHTWFpbkxvb3BT
b3VyY2Ugb2JqZWN0cworICAgICAgICBhcmUgYWxzbyBub3QgdGVzdGVkIHRob3JvdWdobHksIHNp
bXBseSBiZWNhdXNlIGl0IGlzIGF0IHRoZSBtb21lbnQgaW1wb3NzaWJsZQorICAgICAgICB0byB0
ZXN0IHRoYXQgdGhlIG9iamVjdHMgYXJlIGFjdHVhbGx5IGRlc3Ryb3llZCB3aGVuIHRoZSBjb3Jy
ZXNwb25kaW5nIHNvdXJjZQorICAgICAgICBpcyBmaW5hbGx5IGRlbGV0ZWQuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcDogQWRkZWQuCisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3VyY2VUZXN0OjpHTWFpbkxvb3BTb3VyY2VUZXN0
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRlc3Q6On5HTWFpbkxv
b3BTb3VyY2VUZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkdNYWluTG9vcFNvdXJjZVRl
c3Q6OnJ1bkxvb3ApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNlVGVz
dDo6ZGVsYXllZEZpbmlzaCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHTWFpbkxvb3BTb3Vy
Y2VUZXN0OjpmaW5pc2gpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6R01haW5Mb29wU291cmNl
VGVzdDo6c291cmNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE0LTA5
LTE3ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgVXBkYXRlIG15IGVtYWlsIGluIGNvbnRyaWJ1dG9ycy5qc29uCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyM2EzNWRmMTY3MWI5Yjg1YTFiMmE4YWRkYTQyZmY3
MTMwZTUyMWM5Li4yYTQ4MDQ4YTU4MzYyNjcyODlhZTljZTZiNGVkNzhhODY5NDlkZWNjIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEzNiw1ICsxMzYsNiBAQCBzZXRf
dGVzdHNfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCiBzZXRf
dGFyZ2V0X3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9E
SVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vV2ViQ29y
ZSkKIAogbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCisgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL2dvYmplY3QvR01haW5Mb29wU291cmNlLmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9nb2JqZWN0L0dVbmlxdWVQdHIuY3BwCiApCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJjZS5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nb2JqZWN0L0dNYWluTG9vcFNvdXJj
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDFiNWRmZTdlNTNhOGU2YmZhMTdjM2I2YmVkNjE1YjFhNmFlMjdj
ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dvYmpl
Y3QvR01haW5Mb29wU291cmNlLmNwcApAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEdNYWluTG9vcFNvdXJjZVRlc3QgeworcHVi
bGljOgorICAgIEdNYWluTG9vcFNvdXJjZVRlc3QoKQorICAgICAgICA6IG1fbWFpbkxvb3AoZ19t
YWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpKQorICAgIHsKKyAgICB9CisKKyAgICB+R01haW5M
b29wU291cmNlVGVzdCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF91bnJlZihtX21haW5M
b29wKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkxvb3AoKQorICAgIHsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgZGVsYXllZEZpbmlzaCgp
CisgICAgeworICAgICAgICBnX3RpbWVvdXRfYWRkKDI1MCwKKyAgICAgICAgICAgIFtdKGdwb2lu
dGVyIGRhdGEpIHsKKyAgICAgICAgICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0JiB0ZXN0ID0g
KnN0YXRpY19jYXN0PEdNYWluTG9vcFNvdXJjZVRlc3QqPihkYXRhKTsKKyAgICAgICAgICAgICAg
ICB0ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7
CisgICAgICAgICAgICB9LCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaCgpCisgICAg
eworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdN
YWluTG9vcFNvdXJjZSYgc291cmNlKCkgeyByZXR1cm4gbV9zb3VyY2U7IH0KKworcHJpdmF0ZToK
KyAgICBHTWFpbkxvb3AqIG1fbWFpbkxvb3A7CisgICAgR01haW5Mb29wU291cmNlIG1fc291cmNl
OworfTsKKworVEVTVChXVEZfR01haW5Mb29wU291cmNlLCBCYXNpY1Jlc2NoZWR1bGluZykKK3sK
KyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0
IHRlc3Q7CisgICAgICAgIGJvb2wgZmluaXNoZWRGaXJzdFRhc2sgPSBmYWxzZTsKKyAgICAgICAg
Ym9vbCBmaW5pc2hlZFNlY29uZFRhc2sgPSBmYWxzZTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBF
WFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29u
dGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAg
ICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiBUaGF0J3Mgd2h5IHdlIGFzc2Vy
dAorICAgICAgICAvLyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBmYWxzZSBhIGZldyBsaW5lcyBsYXRl
ci4KKyAgICAgICAgY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7Cisg
ICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisg
ICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gU2Vjb25kVGFzayIsIFsm
XSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
ICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgIGNvbnRl
eHQuZmluaXNoZWRTZWNvbmRUYXNrID0gdHJ1ZTsKKyAgICAgICAgY29udGV4dC50ZXN0LmZpbmlz
aCgpOworICAgIH0pOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1Nj
aGVkdWxlZCgpKTsKKworICAgIGNvbnRleHQudGVzdC5ydW5Mb29wKCk7CisKKyAgICBFWFBFQ1Rf
VFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgIEVYUEVDVF9GQUxT
RShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZp
bmlzaGVkU2Vjb25kVGFzayk7Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgUmVlbnRy
YW50UmVzY2hlZHVsaW5nKQoreworICAgIHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAg
IEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAgYm9vbCBmaW5pc2hlZEZpcnN0VGFz
ayA9IGZhbHNlOworICAgICAgICBib29sIGZpbmlzaGVkU2Vjb25kVGFzayA9IGZhbHNlOworICAg
IH0gY29udGV4dDsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNB
Y3RpdmUoKSk7CisKKyAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBG
aXJzdFRhc2siLCBbJl0geworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNl
KCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOwor
CisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIFNlY29uZFRh
c2siLCBbJl0geworICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgp
LmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2spOworCisgICAg
ICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAgICAgICAgICBj
b250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShj
b250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC5m
aW5pc2hlZEZpcnN0VGFzayA9IHRydWU7CisgICAgfSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4
dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgY29udGV4dC50ZXN0LnJ1bkxv
b3AoKTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUo
KSk7CisgICAgRVhQRUNUX1RSVUUoY29udGV4dC5maW5pc2hlZEZpcnN0VGFzayk7CisgICAgRVhQ
RUNUX1RSVUUoY29udGV4dC5maW5pc2hlZFNlY29uZFRhc2spOworfQorCitURVNUKFdURl9HTWFp
bkxvb3BTb3VyY2UsIFJlc2NoZWR1bGluZ0Zyb21EaWZmZXJlbnRUaHJlYWQpCit7CisgICAgc3Ry
dWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0Owor
ICAgICAgICBib29sIGZpbmlzaGVkRmlyc3RUYXNrOworICAgICAgICBib29sIGZpbmlzaGVkU2Vj
b25kVGFzazsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0
LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVk
dWxlKCJbVGVzdF0gRmlyc3RUYXNrIiwgWyZdIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4
dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1Nj
aGVkdWxlZCgpKTsKKworICAgICAgICBnX3VzbGVlcCgxICogR19VU0VDX1BFUl9TRUMpOworICAg
ICAgICBjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrID0gdHJ1ZTsKKyAgICB9KTsKKyAgICBFWFBF
Q1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICBHVGhy
ZWFkKiBoZWxwZXJUaHJlYWQgPSBnX3RocmVhZF9uZXcobnVsbHB0ciwgW10oZ3BvaW50ZXIgZGF0
YSkgLT4gZ3BvaW50ZXIgeworICAgICAgICBnX3VzbGVlcCgwLjI1ICogR19VU0VDX1BFUl9TRUMp
OworCisgICAgICAgIFRlc3RpbmdDb250ZXh0JiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PFRlc3Rp
bmdDb250ZXh0Kj4oZGF0YSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmZpbmlzaGVkRmlyc3RUYXNrKTsKKworICAg
ICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBTZWNvbmRUYXNrIiwg
WyZdIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmluaXNoZWRGaXJzdFRhc2sp
OworCisgICAgICAgICAgICBjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayA9IHRydWU7CisgICAg
ICAgICAgICBjb250ZXh0LnRlc3QuZmluaXNoKCk7CisgICAgICAgIH0pOworICAgICAgICBFWFBF
Q1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAg
Z190aHJlYWRfZXhpdChudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwg
JmNvbnRleHQpOworCisgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICBnX3RocmVhZF91
bnJlZihoZWxwZXJUaHJlYWQpOworCisgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkRmlyc3RU
YXNrKTsKKyAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmZpbmlzaGVkU2Vjb25kVGFzayk7Cit9CisK
K1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJ1Y3Rpb25EdXJpbmdEaXNwYXRjaCkKK3sK
KyAgICAvLyBUaGlzIGlzIGp1c3QgYSByYXcgdGVzdCB0aGF0IGVuc3VyZXMgZGVsZXRpbmcgdGhl
IEdNYWluTG9vcFNvdXJjZSBvYmplY3QgZHVyaW5nCisgICAgLy8gZGlzcGF0Y2ggZG9lcyBub3Qg
Y2F1c2UgcHJvYmxlbXMuIFRoaXMgdGVzdCBzdWNjZWVkcyBpZiBpdCBkb2Vzbid0IGNyYXNoLgor
CisgICAgR01haW5Mb29wU291cmNlKiBzb3VyY2U7CisgICAgR01haW5Mb29wKiBsb29wID0gZ19t
YWluX2xvb3BfbmV3KG51bGxwdHIsIFRSVUUpOworCisgICAgc291cmNlID0gbmV3IEdNYWluTG9v
cFNvdXJjZTsKKyAgICBzb3VyY2UtPnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveVNvdXJjZVRhc2si
LCBbJl0geworICAgICAgICBkZWxldGUgc291cmNlOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOworICAgIH0pOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIHNvdXJj
ZSA9IG5ldyBHTWFpbkxvb3BTb3VyY2U7CisgICAgc291cmNlLT5zY2hlZHVsZSgiW1Rlc3RdIERl
c3Ryb3lTb3VyY2VUYXNrIiwgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0geworICAgICAgICBk
ZWxldGUgc291cmNlOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSkpOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworfQorCitURVNUKFdURl9HTWFpbkxvb3BTb3VyY2Us
IENhbmNlbFJlcGVhdGluZ1NvdXJjZUR1cmluZ0Rpc3BhdGNoKQoreworICAgIHN0cnVjdCBUZXN0
aW5nQ29udGV4dCB7CisgICAgICAgIEdNYWluTG9vcFNvdXJjZVRlc3QgdGVzdDsKKyAgICAgICAg
dW5zaWduZWQgY2FsbENvdW50ID0gMDsKKyAgICB9IGNvbnRleHQ7CisKKyAgICBFWFBFQ1RfVFJV
RSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworCisgICAgY29udGV4dC50ZXN0
LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gUmVwZWF0aW5nVGFzayIsCisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQu
dGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hl
ZHVsZWQoKSk7CisKKyAgICAgICAgICAgIGNvbnRleHQuY2FsbENvdW50Kys7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC5jYWxsQ291bnQgPT0gMykKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRl
c3Quc291cmNlKCkuY2FuY2VsKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSkpOworICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgp
KTsKKworICAgIGNvbnRleHQudGVzdC5kZWxheWVkRmluaXNoKCk7CisgICAgY29udGV4dC50ZXN0
LnJ1bkxvb3AoKTsKKworICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNB
Y3RpdmUoKSk7CisgICAgRVhQRUNUX0VRKDMsIGNvbnRleHQuY2FsbENvdW50KTsKK30KKworVEVT
VChXVEZfR01haW5Mb29wU291cmNlLCBCYXNpY0Rlc3Ryb3lDYWxsYmFja3MpCit7CisgICAgc3Ry
dWN0IFRlc3RpbmdDb250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0Owor
ICAgICAgICBib29sIGNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZGVzdHJv
eUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGlu
Z0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3Vy
Y2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxl
KCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LmNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVG
QVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50
ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3Qu
cnVuTG9vcCgpOworCisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCku
aXNBY3RpdmUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuY2FsbGJhY2tDYWxsZWQp
OworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBjb250ZXh0OworICAgICAgICBF
WFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBj
b250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBEZXN0cm95Q2FsbGJhY2siLAor
ICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sICgpPihbJl0geworICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpICYmICFjb250ZXh0
LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5j
YWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgY29udGV4dC50ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgp
KTsKKworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAgICAgIEVYUEVDVF9U
UlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGNvbnRleHQuY2FsbGJhY2tDYWxsZWQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0
LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCitURVNUKFdURl9HTWFpbkxvb3BT
b3VyY2UsIERlc3Ryb3lDYWxsYmFja3NBZnRlckNhbmNlbGxpbmdEdXJpbmdEaXNwYXRjaCkKK3sK
KyAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRleHQgeworICAgICAgICBHTWFpbkxvb3BTb3VyY2VUZXN0
IHRlc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhbGxiYWNrQ2FsbENvdW50PSAwOworICAgICAgICBi
b29sIGRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgIH07CisKKyAgICB7CisgICAg
ICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0
LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2Uo
KS5zY2hlZHVsZSgiW1Rlc3RdIERlc3Ryb3lDYWxsYmFjayIsCisgICAgICAgICAgICBbJl0gewor
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCsrOworICAgICAgICAgICAgICAgIGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5jYW5jZWwoKTsKKyAgICAgICAgICAgIH0sIEdfUFJJT1JJVFlfREVG
QVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGV4dC50
ZXN0LmZpbmlzaCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRl
eHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3Qu
ZGVsYXllZEZpbmlzaCgpOworICAgICAgICBjb250ZXh0LnRlc3QucnVuTG9vcCgpOworCisgICAg
ICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgxLCBjb250ZXh0LmNhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNv
dXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gRGVzdHJveUNhbGxiYWNrIiwKKyAgICAgICAgICAgIHN0
ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShj
b250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgp
LmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291
bnQrKzsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jYWxsYmFja0NhbGxDb3VudCA9PSAz
KQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuY2FuY2VsKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KSwgR19QUklPUklUWV9E
RUZBVUxULAorICAgICAgICAgICAgWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSgh
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisKKyAg
ICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0
LnJ1bkxvb3AoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSghY29udGV4dC50ZXN0LnNvdXJjZSgp
LmlzQWN0aXZlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMywgY29udGV4dC5jYWxsYmFja0NhbGxD
b3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxiYWNrQ2FsbGVk
KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0dNYWluTG9vcFNvdXJjZSwgRGVzdHJveUNhbGxiYWNr
c0FmdGVyUmVzY2hlZHVsaW5nRHVyaW5nRGlzcGF0Y2gpCit7CisgICAgc3RydWN0IFRlc3RpbmdD
b250ZXh0IHsKKyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNp
Z25lZCBmaXJzdENhbGxiYWNrQ2FsbENvdW50ID0gMDsKKyAgICAgICAgYm9vbCBmaXJzdERlc3Ry
b3lDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBzZWNvbmRDYWxsYmFj
a0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVk
ID0gZmFsc2U7CisgICAgfTsKKworICAgIHsKKyAgICAgICAgVGVzdGluZ0NvbnRleHQgY29udGV4
dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
KTsKKyAgICAgICAgY29udGV4dC50ZXN0LnNvdXJjZSgpLnNjaGVkdWxlKCJbVGVzdF0gQmFzZUNh
bGxiYWNrIiwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUo
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNvbnRleHQudGVzdC5zb3VyY2Uo
KS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmZpcnN0Q2FsbGJhY2tD
YWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRlc3Quc291cmNlKCkuc2NoZWR1
bGUoIltUZXN0XSBSZXNjaGVkdWxpbmdDYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgIFsm
XSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNBY3RpdmUoKSAmJiAhY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3Vu
dCsrOworICAgICAgICAgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAg
ICAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSgh
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Qu
c291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICB9LCBHX1BSSU9SSVRZX0RFRkFV
TFQsCisgICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
dGhlIEdNYWluTG9vcFNvdXJjZSBoYXMgYmVlbiByZXNjaGVkdWxlZCwgZXJnbyB0aGUgU2NoZWR1
bGVkIHN0YXR1cy4KKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291
cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5maXJzdERlc3Ry
b3lDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzU2NoZWR1bGVkKCkpOworCisgICAgICAgIGNv
bnRleHQudGVzdC5kZWxheWVkRmluaXNoKCk7CisgICAgICAgIGNvbnRleHQudGVzdC5ydW5Mb29w
KCk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoIWNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2
ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGNvbnRleHQuZmlyc3RDYWxsYmFja0NhbGxDb3Vu
dCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZmlyc3REZXN0cm95Q2FsbGJhY2tDYWxs
ZWQpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3Vu
dCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2Fs
bGVkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRleHQ7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNBY3RpdmUoKSk7Cisg
ICAgICAgIGNvbnRleHQudGVzdC5zb3VyY2UoKS5zY2hlZHVsZSgiW1Rlc3RdIEJhc2VDYWxsYmFj
ayIsCisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wgKCk+KFsmXSB7CisgICAgICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkgJiYgIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LmZpcnN0Q2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnRl
c3Quc291cmNlKCkuc2NoZWR1bGUoIltUZXN0XSBSZXNjaGVkdWxpbmdDYWxsYmFjayIsCisgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgp
ICYmICFjb250ZXh0LnRlc3Quc291cmNlKCkuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50Kys7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5zZWNvbmRDYWxsYmFja0NhbGxDb3VudCAhPSAz
OworICAgICAgICAgICAgICAgICAgICB9KSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAg
ICAgICAgICAgICBbJl0geworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWNv
bnRleHQudGVzdC5zb3VyY2UoKS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuc2Vjb25kRGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoY29udGV4dC50ZXN0LnNv
dXJjZSgpLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgIFsmXSB7CisgICAg
ICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgR01haW5Mb29wU291cmNlIGhhcyBiZWVu
IHJlc2NoZWR1bGVkLCBlcmdvIHRoZSBTY2hlZHVsZWQgc3RhdHVzLgorICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKGNvbnRleHQudGVzdC5zb3VyY2UoKS5pc1NjaGVkdWxlZCgpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LmZpcnN0RGVzdHJveUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShjb250ZXh0LnRlc3Quc291cmNlKCku
aXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5pc2goKTsK
KyAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKworICAgICAgICBFWFBFQ1RfVFJVRSgh
Y29udGV4dC50ZXN0LnNvdXJjZSgpLmlzQWN0aXZlKCkpOworICAgICAgICBFWFBFQ1RfRVEoMSwg
Y29udGV4dC5maXJzdENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29u
dGV4dC5maXJzdERlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgICAgIEVYUEVDVF9FUSgzLCBj
b250ZXh0LnNlY29uZENhbGxiYWNrQ2FsbENvdW50KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY29u
dGV4dC5zZWNvbmREZXN0cm95Q2FsbGJhY2tDYWxsZWQpOworICAgIH0KK30KKworVEVTVChXVEZf
R01haW5Mb29wU291cmNlLCBEZWxldGVPbkRlc3Ryb3lTb3VyY2VzKQoreworICAgIC8vIFRlc3Rp
bmcgdGhlIGRlbGV0ZS1vbi1kZXN0cm95IHNvdXJjZXMgaXMgdmVyeSBsaW1pdGVkLiBUaGVyZSdz
IG5vIGdvb2Qgd2F5CisgICAgLy8gb2YgdGVzdGluZyB0aGF0IHRoZSBHTWFpbkxvb3BTb3VyY2Ug
b2JqZWN0cyBhcmUgZGVsZXRlZCB3aGVuIHRoZWlyIEdTb3VyY2UKKyAgICAvLyBpcyBkZXN0cm95
ZWQsIGFuZCB0aGUgc29ja2V0IGNhbGxiYWNrcyBzaG91bGRuJ3QgYmUgc2NoZWR1bGVkIG9uIHRo
ZXNlIHR5cGVzCisgICAgLy8gb2YgR01haW5Mb29wU291cmNlcyAoYXMgd2UgYWdncmVzc2l2ZWx5
IGFzc2VydCB0byBwcmV2ZW50IHRoYXQpLgorCisgICAgc3RydWN0IFRlc3RpbmdDb250ZXh0IHsK
KyAgICAgICAgR01haW5Mb29wU291cmNlVGVzdCB0ZXN0OworICAgICAgICB1bnNpZ25lZCBjYWxs
YmFja0NhbGxDb3VudCA9IDA7CisgICAgICAgIGJvb2wgZGVzdHJveUNhbGxiYWNrQ2FsbGVkID0g
ZmFsc2U7CisgICAgfSBjb250ZXh0OworCisgICAgeworICAgICAgICBUZXN0aW5nQ29udGV4dCBj
b250ZXh0OworCisgICAgICAgIC8vIFdlIHRha2UgYSByZWZlcmVuY2UgdG8gdGhlIEdNYWluTG9v
cFNvdXJjZSBqdXN0IHRvIHBlcmZvcm0gYWRkaXRpb25hbAorICAgICAgICAvLyB0ZXN0cyBvbiBp
dHMgc3RhdHVzLiBXZSBzaG91bGRuJ3QgdXNlIHRoZSByZWZlcmVuY2UgYWZ0ZXIgdGhlIG1haW4g
bG9vcAorICAgICAgICAvLyBleGlzdHMgc2luY2UgYXQgdGhhdCBwb2ludCB0aGUgR01haW5Mb29w
U291cmNlIHdpbGwgYmUgZGVzdHJveWVkIGFuZAorICAgICAgICAvLyB0aGUgcmVmZXJlbmNlIHBv
aW50aW5nIHRvIGFuIGludmFsaWQgcGllY2Ugb2YgbWVtb3J5LgorICAgICAgICBHTWFpbkxvb3BT
b3VyY2UmIHNvdXJjZSA9IEdNYWluTG9vcFNvdXJjZTo6Y3JlYXRlQW5kRGVsZXRlT25EZXN0cm95
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFzb3VyY2UuaXNBY3RpdmUoKSk7CisgICAgICAgIHNv
dXJjZS5zY2hlZHVsZSgiW1Rlc3RdIERlbGV0ZU9uRGVzdHJveSIsCisgICAgICAgICAgICBbJl0g
eworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc0FjdGl2ZSgpICYmICFzb3Vy
Y2UuaXNTY2hlZHVsZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jYWxsYmFja0NhbGxD
b3VudCsrOworICAgICAgICAgICAgfSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAg
WyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghc291cmNlLmlzQWN0aXZlKCkpOwor
ICAgICAgICAgICAgICAgIEVYUEVDVF9GQUxTRShjb250ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxl
ZCk7CisgICAgICAgICAgICAgICAgY29udGV4dC5kZXN0cm95Q2FsbGJhY2tDYWxsZWQgPSB0cnVl
OworICAgICAgICAgICAgfSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHNvdXJjZS5pc1NjaGVkdWxl
ZCgpKTsKKworICAgICAgICBjb250ZXh0LnRlc3QuZGVsYXllZEZpbmlzaCgpOworICAgICAgICBj
b250ZXh0LnRlc3QucnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRVEoMSwgY29udGV4dC5jYWxs
YmFja0NhbGxDb3VudCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNvbnRleHQuZGVzdHJveUNhbGxi
YWNrQ2FsbGVkKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFRlc3RpbmdDb250ZXh0IGNvbnRl
eHQ7CisKKyAgICAgICAgLy8gQXMgaW4gdGhlIHByZXZpb3VzIHNjb3BlLCB3ZSBuZWVkIGEgcmVm
ZXJlbmNlIHRvIHRoZSBHTWFpbkxvb3BTb3VyY2UuCisgICAgICAgIEdNYWluTG9vcFNvdXJjZSYg
c291cmNlID0gR01haW5Mb29wU291cmNlOjpjcmVhdGVBbmREZWxldGVPbkRlc3Ryb3koKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoIXNvdXJjZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgc291cmNlLnNj
aGVkdWxlKCJbVGVzdF0gRGVsZXRlT25EZXN0cm95IiwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoKT4oWyZdIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShzb3VyY2UuaXNB
Y3RpdmUoKSAmJiAhc291cmNlLmlzU2NoZWR1bGVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQuY2FsbGJhY2tDYWxsQ291bnQrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5j
YWxsYmFja0NhbGxDb3VudCAhPSAzOworICAgICAgICAgICAgfSksIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgICAgIFsmXSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXNvdXJj
ZS5pc0FjdGl2ZSgpKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRkFMU0UoY29udGV4dC5kZXN0
cm95Q2FsbGJhY2tDYWxsZWQpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZGVzdHJveUNhbGxi
YWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBFWFBFQ1RfVFJVRShz
b3VyY2UuaXNTY2hlZHVsZWQoKSk7CisKKyAgICAgICAgY29udGV4dC50ZXN0LmRlbGF5ZWRGaW5p
c2goKTsKKyAgICAgICAgY29udGV4dC50ZXN0LnJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0VR
KDMsIGNvbnRleHQuY2FsbGJhY2tDYWxsQ291bnQpOworICAgICAgICBFWFBFQ1RfVFJVRShjb250
ZXh0LmRlc3Ryb3lDYWxsYmFja0NhbGxlZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>