<?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>99784</bug_id>
          
          <creation_ts>2012-10-18 18:04:52 -0700</creation_ts>
          <short_desc>[chromium] Implement full-featured image cache</short_desc>
          <delta_ts>2012-11-27 13:23:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>97347</dependson>
    
    <dependson>97481</dependson>
    
    <dependson>98098</dependson>
    
    <dependson>99785</dependson>
    
    <dependson>103354</dependson>
          <blocked>99790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>745822</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 18:04:52 -0700</bug_when>
    <thetext>This is a high level task to improve image cache in Chromium based on https://bugs.webkit.org/show_bug.cgi?id=94240.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775137</commentid>
    <comment_count>1</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-25 22:01:54 -0800</bug_when>
    <thetext>*** Bug 99785 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775160</commentid>
    <comment_count>2</comment_count>
      <attachid>175926</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-25 22:44:41 -0800</bug_when>
    <thetext>Created attachment 175926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775161</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-25 22:46:54 -0800</bug_when>
    <thetext>Attachment 175926 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/chromium/SkSizeHash.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 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>775164</commentid>
    <comment_count>4</comment_count>
      <attachid>175927</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-25 22:51:17 -0800</bug_when>
    <thetext>Created attachment 175927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775166</commentid>
    <comment_count>5</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-25 22:52:16 -0800</bug_when>
    <thetext>There will be one style problem in SkSizeHash.h because SkTypes.h needs to included before SkSize.h, otherwise visual studio will fail compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775167</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-25 22:55:21 -0800</bug_when>
    <thetext>Attachment 175927 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/chromium/SkSizeHash.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 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>775191</commentid>
    <comment_count>7</comment_count>
      <attachid>175927</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-11-25 23:50:19 -0800</bug_when>
    <thetext>Comment on attachment 175927
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h:85
&gt; +    static bool m_enabled;

static members in WebKit have an s_ prefix, not m_

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:82
&gt; +    CacheEntry* cacheEntry = iter-&gt;value;
&gt; +    if (!cacheEntry-&gt;cachedImage-&gt;isComplete())
&gt; +        return 0;
&gt; +    cacheEntry-&gt;cachedImage-&gt;bitmap().lockPixels();
&gt; +    ++cacheEntry-&gt;useCount;
&gt; +    return cacheEntry-&gt;cachedImage.get();

do you need to hold the mutex for all of these operations?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:127
&gt; +    OwnPtr&lt;CacheEntry&gt; newCacheEntry = CacheEntry::createAndUse(image);

does this have to happen with the lock held? it doesn&apos;t appear to mutate any shared data

in general, you always want to hold mutexes for as short as possible. for instance, try to avoid unnecessary allocations

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:131
&gt; +    CacheMap::iterator iter = m_cacheMap.find(key);
&gt; +    ASSERT_UNUSED(iter, iter == m_cacheMap.end());

this does a map lookup always just to do an ASSERT, which is a bummer since we&apos;ll do a totally unnecessary map lookup in production builds. can you put the lookup itself in the ASSERT()? you can use bool HashMap::contains(const KeyType&amp;)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:54
&gt; +    // These methods are thread-safe and protected by a mutex.

what are the expected lock/unlock semantics here? it&apos;s a bit confusing to mention the mutex here when talking about lock/unlock - naively i would expect these operations to have to do with thread synchronization as well, but from reading the code it appears that&apos;s not what they are for

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:82
&gt; +        int useCount;

what&apos;s the intended use of this? for prune() ?

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:93
&gt; +    Mutex m_mutex;

document what members this mutex protects. for instance are the entries in the m_cacheMap / m_cacheEntries protected, or just the containers themselves?

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:64
&gt; +    // Prevents concurrent decode or scale operations on the same image data.

hmmmm - when dealing with a large scale i would expect the image to span multiple tiles. this lock means that the raster operations for all tiles referencing the same image to block on the first decode. is that the desired behavior? is that something that should be decided in this code?

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:101
&gt; +        skia::ImageOperations::RESIZE_LANCZOS3,

do we always want LANCZOS? the &apos;normal&apos; resizing code has logic to do linear filtering when possible, which is pretty important for performance

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:136
&gt; +    OwnPtr&lt;ScaledImageFragment&gt; fullSizeImage = ScaledImageFragment::create(m_fullSize, bitmap, isComplete);

can the rest of this function share code with tryToScale() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775197</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-11-25 23:52:07 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; There will be one style problem in SkSizeHash.h because SkTypes.h needs to included before SkSize.h, otherwise visual studio will fail compile.

Can you fix this in skia, for instance by moving the #include SkTypes.h up higher in SkSize.h ? (it looks like it&apos;s currently picked up transitively by the #include &quot;SkScalar.h&quot; line halfway down the file)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775815</commentid>
    <comment_count>9</comment_count>
      <attachid>176052</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 13:21:16 -0800</bug_when>
    <thetext>Created attachment 176052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775817</commentid>
    <comment_count>10</comment_count>
      <attachid>175927</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 13:21:28 -0800</bug_when>
    <thetext>Comment on attachment 175927
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h:85
&gt;&gt; +    static bool m_enabled;
&gt; 
&gt; static members in WebKit have an s_ prefix, not m_

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:82
&gt;&gt; +    return cacheEntry-&gt;cachedImage.get();
&gt; 
&gt; do you need to hold the mutex for all of these operations?

Updated code to only include cache lookup and use count increment.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:127
&gt;&gt; +    OwnPtr&lt;CacheEntry&gt; newCacheEntry = CacheEntry::createAndUse(image);
&gt; 
&gt; does this have to happen with the lock held? it doesn&apos;t appear to mutate any shared data
&gt; 
&gt; in general, you always want to hold mutexes for as short as possible. for instance, try to avoid unnecessary allocations

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:131
&gt;&gt; +    ASSERT_UNUSED(iter, iter == m_cacheMap.end());
&gt; 
&gt; this does a map lookup always just to do an ASSERT, which is a bummer since we&apos;ll do a totally unnecessary map lookup in production builds. can you put the lookup itself in the ASSERT()? you can use bool HashMap::contains(const KeyType&amp;)

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:54
&gt;&gt; +    // These methods are thread-safe and protected by a mutex.
&gt; 
&gt; what are the expected lock/unlock semantics here? it&apos;s a bit confusing to mention the mutex here when talking about lock/unlock - naively i would expect these operations to have to do with thread synchronization as well, but from reading the code it appears that&apos;s not what they are for

Mutex is just for protecting concurrent access to shared data. Removed the comments here and mention it next to m_mutex.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:82
&gt;&gt; +        int useCount;
&gt; 
&gt; what&apos;s the intended use of this? for prune() ?

Yes for prune(). To protect an entry from being evicted while being used.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.h:93
&gt;&gt; +    Mutex m_mutex;
&gt; 
&gt; document what members this mutex protects. for instance are the entries in the m_cacheMap / m_cacheEntries protected, or just the containers themselves?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:64
&gt;&gt; +    // Prevents concurrent decode or scale operations on the same image data.
&gt; 
&gt; hmmmm - when dealing with a large scale i would expect the image to span multiple tiles. this lock means that the raster operations for all tiles referencing the same image to block on the first decode. is that the desired behavior? is that something that should be decided in this code?

It should be decided by the task scheduler for rasterization. The task scheduler will lock SkPixelRef once and then kick off the raster tasks.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:101
&gt;&gt; +        skia::ImageOperations::RESIZE_LANCZOS3,
&gt; 
&gt; do we always want LANCZOS? the &apos;normal&apos; resizing code has logic to do linear filtering when possible, which is pretty important for performance

Current non deferred-decoded case uses LANCZOS3 so this code stays consistent to pass layout tests. I took it out as a separate method so we can adjust this parameter later.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:136
&gt;&gt; +    OwnPtr&lt;ScaledImageFragment&gt; fullSizeImage = ScaledImageFragment::create(m_fullSize, bitmap, isComplete);
&gt; 
&gt; can the rest of this function share code with tryToScale() ?

Done and merged code with tryToScale().

&gt;&gt; Source/WebCore/platform/graphics/chromium/SkSizeHash.h:29
&gt;&gt; +#include &quot;SkTypes.h&quot;
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

Used SkScalar.h instead. Fix is landed in Skia will roll later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775958</commentid>
    <comment_count>11</comment_count>
      <attachid>176085</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 15:18:35 -0800</bug_when>
    <thetext>Created attachment 176085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775960</commentid>
    <comment_count>12</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 15:20:04 -0800</bug_when>
    <thetext>The latest upload uses const ScaledImageFragment for return values of all cache operations. This is to indicate that the returned object cannot be mutated by user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776012</commentid>
    <comment_count>13</comment_count>
      <attachid>176085</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-11-26 16:10:32 -0800</bug_when>
    <thetext>Comment on attachment 176085
Patch

Looks pretty good as far as I can tell. Stephen / Nat - either of you want to take a look at this before landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776066</commentid>
    <comment_count>14</comment_count>
      <attachid>176085</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-11-26 16:44:47 -0800</bug_when>
    <thetext>Comment on attachment 176085
Patch

Looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776162</commentid>
    <comment_count>15</comment_count>
      <attachid>176085</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 18:07:18 -0800</bug_when>
    <thetext>Comment on attachment 176085
Patch

Clearing flags on attachment: 176085

Committed r135798: &lt;http://trac.webkit.org/changeset/135798&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776163</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 18:07:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776252</commentid>
    <comment_count>17</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 20:28:39 -0800</bug_when>
    <thetext>Seems to have broken the mac chrome build:

http://build.webkit.org/builders/Chromium%20Mac%20Release/builds/50287/steps/compile-webkit/logs/stdio

Can you investigate please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776255</commentid>
    <comment_count>18</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-26 20:29:57 -0800</bug_when>
    <thetext>Build funk for reference.

In file included from /Volumes/data/b/WebKit-BuildSlave/chromium-mac-release/build/Source/WebCore/WebCore.gyp/../platform/graphics/chromium/ImageDecodingStore.cpp:27:
In file included from ../platform/graphics/chromium/ImageDecodingStore.h:29:
In file included from ../platform/graphics/chromium/ScaledImageFragment.h:33:
In file included from ../../WTF/wtf/PassOwnPtr.h:31:
../../WTF/wtf/OwnPtrCommon.h:60:13: error: delete called on &apos;WebCore::ImageDecoderFactory&apos; that is abstract but has non-virtual destructor [-Werror,-Wdelete-non-virtual-dtor]
            delete ptr;
            ^
../../WTF/wtf/OwnPtr.h:141:9: note: in instantiation of function template specialization &apos;WTF::deleteOwnedPtr&lt;WebCore::ImageDecoderFactory&gt;&apos; requested here
        deleteOwnedPtr(ptr);
        ^
../platform/graphics/chromium/ImageFrameGenerator.h:64:108: note: in instantiation of member function &apos;WTF::OwnPtr&lt;WebCore::ImageDecoderFactory&gt;::operator=&apos; requested here
    void setImageDecoderFactoryForTesting(PassOwnPtr&lt;ImageDecoderFactory&gt; factory) { m_imageDecoderFactory = factory; }
                                                                                                           ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776276</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 20:58:39 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 103354</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776307</commentid>
    <comment_count>20</comment_count>
      <attachid>176165</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 21:30:10 -0800</bug_when>
    <thetext>Created attachment 176165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776308</commentid>
    <comment_count>21</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-26 21:31:19 -0800</bug_when>
    <thetext>Added a virtual destructor in the last upload. This should appease mac buildbot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777048</commentid>
    <comment_count>22</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 11:46:44 -0800</bug_when>
    <thetext>jamesr: Mind take a quick look? This is a re-land with build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777083</commentid>
    <comment_count>23</comment_count>
      <attachid>176165</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-27 12:03:50 -0800</bug_when>
    <thetext>Comment on attachment 176165
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:86
&gt; +    // FIXME: This code has the potential problem that multiple
&gt; +    // LazyDecodingPixelRefs are created even though they share the same
&gt; +    // scaled size and ImageFrameGenerator.

Isn&apos;t this what the cache is supposed to handle?  Its key includes the scaled size, no?

(Pardon me if I&apos;m being stupid.. I&apos;m still a little jet-lagged.)

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:136
&gt; +    m_cacheMap.add(key, newCacheEntry.get());
&gt; +    m_cacheEntries.append(newCacheEntry.release());

An explanation of why you need both of these would be helpful.  I.e., why m_cacheMap can&apos;t simply own the cache entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777111</commentid>
    <comment_count>24</comment_count>
      <attachid>176325</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 12:27:30 -0800</bug_when>
    <thetext>Created attachment 176325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777112</commentid>
    <comment_count>25</comment_count>
      <attachid>176165</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 12:27:46 -0800</bug_when>
    <thetext>Comment on attachment 176165
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:86
&gt;&gt; +    // scaled size and ImageFrameGenerator.
&gt; 
&gt; Isn&apos;t this what the cache is supposed to handle?  Its key includes the scaled size, no?
&gt; 
&gt; (Pardon me if I&apos;m being stupid.. I&apos;m still a little jet-lagged.)

Yes the cache will handle this by saving only one copy of scaled image, since the image is indexed by ImageFrameGenerator* which is shared by these SkPixelRefs. The potential problem is that Skia cannot be smart in this case by uploading one version of bitmap to GPU texture, because they have different generationID, even though the backing content is the same.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:136
&gt;&gt; +    m_cacheEntries.append(newCacheEntry.release());
&gt; 
&gt; An explanation of why you need both of these would be helpful.  I.e., why m_cacheMap can&apos;t simply own the cache entries.

Done. Please see the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777117</commentid>
    <comment_count>26</comment_count>
      <attachid>176165</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-27 12:34:46 -0800</bug_when>
    <thetext>Comment on attachment 176165
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp:86
&gt;&gt;&gt; +    // scaled size and ImageFrameGenerator.
&gt;&gt; 
&gt;&gt; Isn&apos;t this what the cache is supposed to handle?  Its key includes the scaled size, no?
&gt;&gt; 
&gt;&gt; (Pardon me if I&apos;m being stupid.. I&apos;m still a little jet-lagged.)
&gt; 
&gt; Yes the cache will handle this by saving only one copy of scaled image, since the image is indexed by ImageFrameGenerator* which is shared by these SkPixelRefs. The potential problem is that Skia cannot be smart in this case by uploading one version of bitmap to GPU texture, because they have different generationID, even though the backing content is the same.

Oh, hmm.  That is unfortunate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777120</commentid>
    <comment_count>27</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 12:37:43 -0800</bug_when>
    <thetext>&gt; &gt; Yes the cache will handle this by saving only one copy of scaled image, since the image is indexed by ImageFrameGenerator* which is shared by these SkPixelRefs. The potential problem is that Skia cannot be smart in this case by uploading one version of bitmap to GPU texture, because they have different generationID, even though the backing content is the same.
&gt; 
&gt; Oh, hmm.  That is unfortunate.

We can fix this easily but let&apos;s do it separately.

The fix is DeferredImageDecoder can &quot;cache&quot; SkPixelRef for a particular scale, the tradeoff is we can&apos;t easily do a scale-and-clip but we don&apos;t have that today anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777121</commentid>
    <comment_count>28</comment_count>
      <attachid>176325</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-27 12:38:07 -0800</bug_when>
    <thetext>Comment on attachment 176325
Patch

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

OK.  r=me

&gt; Source/WebCore/platform/graphics/chromium/ImageDecodingStore.cpp:138
&gt; +    // entries quickly, it also owns the cached images.

Grammar nit:  comma splice.  (Both sides of the comma are complete sentences.  Fix is to use a semicolon, or split into two sentences.)  Much too small to r-, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777125</commentid>
    <comment_count>29</comment_count>
      <attachid>176326</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-11-27 12:40:14 -0800</bug_when>
    <thetext>Created attachment 176326
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777165</commentid>
    <comment_count>30</comment_count>
      <attachid>176326</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-27 13:23:13 -0800</bug_when>
    <thetext>Comment on attachment 176326
Patch for landing

Clearing flags on attachment: 176326

Committed r135911: &lt;http://trac.webkit.org/changeset/135911&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777166</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-27 13:23:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175926</attachid>
            <date>2012-11-25 22:44:41 -0800</date>
            <delta_ts>2012-11-25 22:51:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121125224220.patch</filename>
            <type>text/plain</type>
            <size>49438</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ1MjAxNjE2ZWE5YTdh
OWQxNTg5ZTBjMmZlZjNmZDkyMTEyOGQxNi4uNTFkMTNmNWZiODYzMzM4NjZhODE4NGM1OWVjYzQ4
Y2VjN2MwM2UyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTIwICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gQ2hyb21pdW0gYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA1OGYxZDkyNDZhZmJiNWI1NTgyNjJmYmU1MTk2NWM4YjJmZGJkMTdhLi41NWE5Yjc1
OWI4YTIwMzBkMzQ0YTExMjkyZDI5Y2JiMmY0NTNjMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTExLTI1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZnVsbC1mZWF0dXJlZCBp
bWFnZSBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTk3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCB0byB0ZXN0IGNhY2hlIGxvZ2ljIGFuZCBn
ZW5lcmF0aW9uCisgICAgICAgIG9mIG5ldyBjYWNoZSBlbnRyaWVzLgorCisgICAgICAgIEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlSGl0CisgICAgICAgIFRlc3QgdGhhdCBhIGNvbXBsZXRl
IGNhY2hlZCBlbnRyeSBpcyByZXVzZWQuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuY2FjaGVNaXNzV2l0aFNjYWxlCisgICAgICAgIENhY2hlIG1pc3MgZm9yIGEgc2NhbGVkIGlt
YWdlIGJ1dCBjYWNoZSBoaXQgb24gYSBmdWxsIHNpemUgaW1hZ2UuCisgICAgICAgIFNjYWxlZCBp
bWFnZSBpcyBjcmVhdGVkIGZyb20gY2FjaGVkIGZ1bGwgc2l6ZSBpbWFnZS4KKworICAgICAgICBJ
bWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUKKyAgICAg
ICAgQ2FjaGUgbWlzcyBmb3IgYm90aCBzY2FsZWQgaW1hZ2UgYW5kIGZ1bGwgc2l6ZSBpbWFnZS4K
KworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoSW5jb21wbGV0
ZURlY29kZQorICAgICAgICBUZXN0IHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgaW5jb21wbGV0ZSBj
YWNoZSBvYmplY3RzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dl
YktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVXaXRob3V0VjgpOgorICAgICAg
ICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5n
c0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAqIHRlc3Rz
L0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2RlclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdDo6ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQpOgorICAgICAg
ICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyVGVzdDo6ZnJhbWVTdGF0dXMpOgorICAgICAgICAqIHRlc3RzL0ltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZ1bGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYWxlZFNpemUpOgorICAg
ICAgICAoTW9ja0ltYWdlRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0lt
YWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeTo6TW9ja0ltYWdlRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoSW1hZ2VG
cmFtZUdlbmVyYXRvclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6
ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0OjpmcmFtZUJ1ZmZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZnJhbWVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvclRlc3Q6OmNyZWF0ZUNvbXBsZXRlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OnNldEZyYW1lU3RhdHVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoTW9ja0ltYWdlRGVjb2RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorCiAyMDEyLTExLTIwICBSb2JlcnQg
S3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVz
ZSBlbWJlZGRlci1zdXBwb3J0ZWQgZ2VzdHVyZSBjdXJ2ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAxNGRlNjk0ZTgzM2NhZTA3OTA5MDE5Mjc4NGQ4MDQ5MGIzNDE4
YWE5Li5hODAxOGE1MGY1ODgzMGFjY2NjZjk2ZTUxMTZmNjk1NDgxMjljZDVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCkBAIC00MCw2ICs0MCw4IEBAIGNvbnN0IGNoYXIg
bGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOwogCiB9IC8vIG5hbWVzcGFjZQogCitib29sIERl
ZmVycmVkSW1hZ2VEZWNvZGVyOjptX2VuYWJsZWQgPSBmYWxzZTsKKwogRGVmZXJyZWRJbWFnZURl
Y29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlcikK
ICAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogICAgICwgbV9hY3R1YWxEZWNvZGVyKGFk
b3B0UHRyKGFjdHVhbERlY29kZXIpKQpAQCAtNDksOCArNTEsNiBAQCBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQog
CiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKCkKIHsKLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdT
dG9yZSBpZiBpbWFnZQotICAgIC8vIGlzIGRlZmVyLWRlY29kZWQuCiB9CiAKIERlZmVycmVkSW1h
Z2VEZWNvZGVyKiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKQEAgLTgw
LDYgKzgwLDEwIEBAIFNrQml0bWFwIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVSZXNpemVk
TGF6eURlY29kaW5nQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiCiAKICAgICBTa0JpdG1hcCByZXNp
emVkQml0bWFwOwogICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwg
cm93Qnl0ZXMpOworCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBoYXMgdGhlIHBvdGVudGlhbCBw
cm9ibGVtIHRoYXQgbXVsdGlwbGUKKyAgICAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgYXJlIGNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhleSBzaGFyZSB0aGUgc2FtZQorICAgIC8vIHNjYWxlZCBzaXpl
IGFuZCBJbWFnZUZyYW1lR2VuZXJhdG9yLgogICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYo
bmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKHBpeGVsUmVmLT5mcmFtZUdlbmVyYXRvcigpLCBzY2Fs
ZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYoKTsKIAogICAgIC8vIFNlZSBjb21tZW50cyBp
biBjcmVhdGVMYXp5RGVjb2RpbmdCaXRtYXAoKS4KQEAgLTg3LDYgKzkxLDExIEBAIFNrQml0bWFw
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFwKGNv
bnN0IFNrQml0bWFwJiBiCiAgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXA7CiB9CiAKK3ZvaWQgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZW5h
YmxlZCA9IGVuYWJsZWQ7Cit9CisKIFN0cmluZyBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2Fj
dHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkgOiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOwpA
QCAtOTgsNyArMTA3LDcgQEAgSW1hZ2VGcmFtZSogRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8gYmVjYXVzZSBhIG11bHRpZnJhbWUg
aXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5CiAgICAgLy8g
Qml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFkYXRhIGZ1bmN0aW9ucyB0aGF0IGRvIHN5
bmNocm9ub3VzIGltYWdlCiAgICAgLy8gZGVjb2RpbmcuCi0gICAgaWYgKEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgIGlmIChtX2VuYWJsZWQKICAgICAgICAg
JiYgbV9hY3R1YWxEZWNvZGVyCiAgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlv
bkNvdW50KCkgPT0gY0FuaW1hdGlvbk5vbmUKICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5p
c1NpemVBdmFpbGFibGUoKSkgewpAQCAtMjAwLDcgKzIwOSw3IEBAIFNrQml0bWFwIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpjcmVhdGVMYXp5RGVjb2RpbmdCaXRtYXAoKQogICAgIFNrQml0bWFwIGJp
dG1hcDsKICAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
ZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOwogCi0gICAgbV9mcmFtZUdlbmVy
YXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShtX2RhdGEucmVsZWFzZSgpLCBtX2Fs
bERhdGFSZWNlaXZlZCk7CisgICAgbV9mcmFtZUdlbmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0
b3I6OmNyZWF0ZShmdWxsU2l6ZSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQp
OwogICAgIG1fYWN0dWFsRGVjb2Rlci5jbGVhcigpOwogCiAgICAgYml0bWFwLnNldFBpeGVsUmVm
KG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihtX2ZyYW1lR2VuZXJhdG9yLCBmdWxsU2l6ZSwgZnVs
bFJlY3QpKS0+dW5yZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCmluZGV4IGI3
OTUwNDlmMGM4M2FkODg2MDIyNDM0ODM2Y2Q3NzIyZWYwY2Y1NGYuLjdjOTdkZTMxMGYzMjY4Njdm
YmJhZTA3MTM4YjczN2EzYWM3MmIwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIu
aApAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU2tCaXRtYXAgY3JlYXRl
UmVzaXplZExhenlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CiAKKyAgICBzdGF0aWMg
dm9pZCBzZXRFbmFibGVkKGJvb2wpOworCiAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3Q7CiAKICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKQEAgLTc5LDYgKzgxLDggQEAgcHJpdmF0ZToKIAogICAgIEltYWdlRnJhbWUgbV9sYXp5RGVj
b2RlZEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2ZyYW1lR2VuZXJh
dG9yOworCisgICAgc3RhdGljIGJvb2wgbV9lbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNDQ5ZTQ1MjU0ZTg5
NWMwMzMyNmI0ZDU3YTA1YmJkMTExOWJiMzliNS4uZjlmZjc5MmRlMzlmZDEwNjcwYzAzOWIxMmZm
MDJjYWU4YTVlODVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBAIC0yNiwy
MSArMjYsMjIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZURlY29kaW5n
U3RvcmUuaCIKIAorI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJT
Y2FsZWRJbWFnZUZyYWdtZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSB7CiAKLUltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IDA7CitJ
bWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAwOwogCi1zdGF0aWMgdm9pZCBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkK
K3N0YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGlu
Z1N0b3JlKQogewotICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFkOwotICAgIHNfaW5z
dGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7CisgICAgZGVsZXRlIHNfaW5z
dGFuY2U7CisgICAgc19pbnN0YW5jZSA9IGltYWdlRGVjb2RpbmdTdG9yZTsKIH0KKwogfSAvLyBu
YW1lc3BhY2UKIAogSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQpAQCAt
NTEsNDYgKzUyLDkxIEBAIEltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgp
CiB7CiB9CiAKLUltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7CiB9CiAKLXZvaWQg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCkKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSgpLmxlYWtQdHIoKSk7CisgICAgc2V0SW5zdGFuY2UoSW1hZ2VEZWNvZGluZ1N0b3JlOjpj
cmVhdGUoKS5sZWFrUHRyKCkpOwogfQogCiB2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2V0SW5zdGFuY2VPbk1h
aW5UaHJlYWQoMCk7CisgICAgc2V0SW5zdGFuY2UoMCk7CiB9CiAKLWJvb2wgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3QKK1NjYWxlZEltYWdlRnJhZ21lbnQq
IEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQogewotICAgIHJl
dHVybiB0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNNYWluVGhyZWFkKCk7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIHNjYWxlZFNpemUp
KTsKKyAgICBpZiAoaXRlciA9PSBtX2NhY2hlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICBpZiAoIWNh
Y2hlRW50cnktPmNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7CisgICAg
KytjYWNoZUVudHJ5LT51c2VDb3VudDsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1h
Z2UuZ2V0KCk7CiB9CiAKLVNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6
bG9va3VwRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3QKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0luY29t
cGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1l
Q2FjaGUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVh
bChpbWFnZUlkLCBzY2FsZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVb
aV0uZ2V0KCk7Ci0gICAgfQorICAgIC8vIFRPRE86IEltcGxlbWVudC4KICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdl
SWQpCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdlSWQpKSB7Ci0gICAg
ICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9CisgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygpOworICAgIGlm
ICghY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBEZWxldGUgdGhlIGlt
YWdlIGlmIGl0IGlzIGluY29tcGxldGUuIEl0IHdhcyBuZXZlciBzdG9yZWQgaW4gY2FjaGUuCisg
ICAgICAgIGRlbGV0ZSBjYWNoZWRJbWFnZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+
c2NhbGVkU2l6ZSgpKSk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1hcC5lbmQoKSk7CisK
KyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7CisgICAgLS1jYWNoZUVu
dHJ5LT51c2VDb3VudDsKKyAgICBBU1NFUlQoY2FjaGVFbnRyeS0+dXNlQ291bnQgPj0gMCk7Cit9
CisKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9j
a0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxT
Y2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkKK3sKKyAgICAvLyBQcnVuZSBvbGQgY2FjaGUgZW50
cmllcyB0byBnaXZlIHNwYWNlIGZvciB0aGUgbmV3IG9uZS4KKworICAgIC8vIExvY2sgdGhlIHVu
ZGVybHlpbmcgU2tCaXRtYXAgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHB1cmdlZC4KKyAgICBp
bWFnZS0+Yml0bWFwKCkubG9ja1BpeGVscygpOworCisgICAgaWYgKCFpbWFnZS0+aXNDb21wbGV0
ZSgpKSB7CisgICAgICAgIC8vIEluY29tcGxldGUgaW1hZ2UgaXMgbm90IHN0b3JlZCBpbiB0aGUg
Y2FjaGUgYW5kIGRlbGV0ZWQgYWZ0ZXIgdXNlLgorICAgICAgICAvLyBTZWUgdW5sb2NrQ2FjaGUo
KS4KKyAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGFsbG93IGluY29tcGxldGUgaW1hZ2VzIHRv
IGJlIHN0b3JlZCB0b2dldGhlciB3aXRoCisgICAgICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIElt
YWdlRGVjb2Rlci4KKyAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtQdHIoKTsKKyAgICB9CisKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNh
Y2hlZEltYWdlID0gaW1hZ2UuZ2V0KCk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hl
RW50cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoaW1hZ2UpOworCisgICAgQ2FjaGVJZGVu
dGlmaWVyIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxl
ZFNpemUoKSk7CisgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQo
a2V5KTsKKyAgICBBU1NFUlRfVU5VU0VEKGl0ZXIsIGl0ZXIgPT0gbV9jYWNoZU1hcC5lbmQoKSk7
CisKKyAgICBtX2NhY2hlTWFwLmFkZChrZXksIG5ld0NhY2hlRW50cnkuZ2V0KCkpOworICAgIG1f
Y2FjaGVFbnRyaWVzLmFwcGVuZChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7CisgICAgcmV0dXJu
IGNhY2hlZEltYWdlOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cHJ1bmUoKQorewor
ICAgIC8vIFRPRE86IEltcGxlbWVudC4KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZURlY29kaW5nU3RvcmUuaAppbmRleCBhNmZhNTYxOTRmZTE1NTMxM2UxYjFiYjI4ZjEx
MTIyNmIyMDI3ZjdlLi4xZmRiYjM5NTZjZWZhZTg0Mzc0MzdhOTMzYjVhYTMwNzM5OTEyOTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMjYsNDAgKzI2LDcxIEBACiAjaWZuZGVm
IEltYWdlRGVjb2RpbmdTdG9yZV9oCiAjZGVmaW5lIEltYWdlRGVjb2RpbmdTdG9yZV9oCiAKKyNp
bmNsdWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2tUeXBlcy5oIgogI2lu
Y2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1ZGUgIlNrU2l6ZUhhc2guaCIKIAogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlRGVjb2RlcjsKIGNsYXNzIEltYWdlRnJhbWVHZW5l
cmF0b3I7Ci1jbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
Ci0vLyBUaGlzIGNsYXNzIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZCBvbiBtYWluIHRocmVhZC4g
VGhlcmUgd2lsbCBiZSBhbgotLy8gaW5zdGFuY2Ugb24gaW1wbCB0aHJlYWQgaW4gdGhlIGZ1dHVy
ZSBidXQgdGhhdCBwYXJ0IG9mIGltcGxlbWVudGF0aW9uCi0vLyBpcyBpbmNvbXBsZXRlLiBTZWUg
YnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQyNDAKLS8vIGZv
ciBkZXRhaWxzLgogY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc093blB0cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBJbWFnZURlY29kaW5nU3RvcmUpOyB9CiAgICAgfkltYWdlRGVjb2RpbmdTdG9yZSgp
OwogCi0gICAgc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1haW5UaHJlYWQo
KTsKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGlj
IEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2UoKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplT25jZSgpOwogICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CiAKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSB0aHJlYWQtc2FmZSBhbmQgcHJvdGVjdGVkIGJ5IGEgbXV0ZXguCisgICAgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogbG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVy
YXRvciosIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIFNjYWxlZEltYWdlRnJhZ21l
bnQqIGxvY2tJbmNvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIHZvaWQgdW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VG
cmFtZUdlbmVyYXRvciosIFNjYWxlZEltYWdlRnJhZ21lbnQqKTsKKyAgICBTY2FsZWRJbWFnZUZy
YWdtZW50KiBpbnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFBh
c3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4pOworCiBwcml2YXRlOgorICAgIHN0cnVjdCBD
YWNoZUVudHJ5IHsKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnkoKSk7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKFBhc3NPd25QdHI8U2NhbGVkSW1h
Z2VGcmFnbWVudD4gaW1hZ2UpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KGltYWdl
LCAxKSk7IH0KKworICAgICAgICBDYWNoZUVudHJ5KCkKKyAgICAgICAgICAgIDogdXNlQ291bnQo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQ2FjaGVFbnRyeShQYXNzT3duUHRy
PFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCisgICAgICAgICAgICA6IGNh
Y2hlZEltYWdlKGltYWdlKQorICAgICAgICAgICAgLCB1c2VDb3VudChjb3VudCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgfkNhY2hlRW50cnkoKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIXVzZUNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIE93blB0cjxTY2Fs
ZWRJbWFnZUZyYWdtZW50PiBjYWNoZWRJbWFnZTsKKyAgICAgICAgaW50IHVzZUNvdW50OworICAg
IH07CisKICAgICBJbWFnZURlY29kaW5nU3RvcmUoKTsKLSAgICBib29sIGNhbGxlZE9uVmFsaWRU
aHJlYWQoKSBjb25zdDsKLSAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb29rdXBGcmFtZUNhY2hl
KGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKLSAgICB2b2lk
IGRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpOworICAgIHZvaWQgcHJ1bmUoKTsKKworICAg
IFZlY3RvcjxPd25QdHI8Q2FjaGVFbnRyeT4gPiBtX2NhY2hlRW50cmllczsKIAotICAgIFZlY3Rv
cjxPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gPiBtX2ZyYW1lQ2FjaGU7CisgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFNrSVNpemU+IENhY2hlSWRl
bnRpZmllcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q2FjaGVJZGVudGlmaWVyLCBDYWNoZUVudHJ5
Kj4gQ2FjaGVNYXA7CisgICAgQ2FjaGVNYXAgbV9jYWNoZU1hcDsKKyAgICBNdXRleCBtX211dGV4
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJh
dG9yLmNwcAppbmRleCBmZTRlNGJmYmVkY2NmNGQ0NjI5MDllZGIyZmMxNTI1MjE1ODdlYzkyLi41
YWIwOTk5YTVjNDk1ZWQ0MTc1OTAzODNhOTY3OTU4YWU5ODdjZDRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmNwcApAQCAtMjgsMjAgKzI4LDI1IEBACiAjaW5jbHVkZSAiSW1hZ2VG
cmFtZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiAjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3Bl
cmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltYWdlRnJhbWVHZW5lcmF0b3I6
OkltYWdlRnJhbWVHZW5lcmF0b3IoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQotICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCitJbWFnZUZy
YW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXpl
LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCisg
ICAgOiBtX2Z1bGxTaXplKGZ1bGxTaXplKQorICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2Up
CiB7CiAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCiBJbWFnZUZyYW1l
R2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7CisgICAgLy8gVE9ETzogQ2FsbCBJ
bWFnZURlY29kaW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGluZGV4ZWQKKyAg
ICAvLyBieSB0aGlzIG9iamVjdC4KIH0KIAogdm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRE
YXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
QEAgLTQ5LDE3ICs1NCw2NCBAQCB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlYwogICAgIC8vIEZJWE1F
OiBEb2luZyBhIGZ1bGwgY29weSBpcyBleHBlbnNpdmUsIGluc3RlYWQgY29weSBvbmx5IG5ldyBk
YXRhLgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFDb3B5ID0gZGF0YS0+Y29weSgpOwog
Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1f
ZGF0YU11dGV4KTsKICAgICBtX2RhdGEgPSBkYXRhQ29weTsKICAgICBtX2FsbERhdGFSZWNlaXZl
ZCA9IGFsbERhdGFSZWNlaXZlZDsKIH0KIAotU2tCaXRtYXAgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYg
c2NhbGVkU3Vic2V0KQorU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAgICAvLyBQcmV2
ZW50cyBjb25jdXJyZW50IGRlY29kZSBvciBzY2FsZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIGlt
YWdlIGRhdGEuCisgICAgLy8gTXVsdGlwbGUgTGF6eURlY29kaW5nUGl4ZWxSZWZzIGNhbiBjYWxs
IHRoaXMgbWV0aG9kIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2Rl
Y29kZU11dGV4KTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7CisK
KyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvTG9ja0NhY2hlKHNjYWxlZFNpemUpOworICAgIGlmIChj
YWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworCisgICAgY2FjaGVkSW1h
Z2UgPSB0cnlUb1NjYWxlKHNjYWxlZFNpemUpOworICAgIGlmIChjYWNoZWRJbWFnZSkKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZEltYWdlOworCisgICAgY2FjaGVkSW1hZ2UgPSB0cnlUb0RlY29kZUFu
ZFNjYWxlKHNjYWxlZFNpemUpOworICAgIGlmIChjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGNhY2hlZEltYWdlOworICAgIHJldHVybiAwOworfQorCitTY2FsZWRJbWFnZUZyYWdtZW50KiBJ
bWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZShjb25zdCBTa0lTaXplJiBzY2FsZWRT
aXplKQoreworICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tD
b21wbGV0ZUNhY2hlKHRoaXMsIHNjYWxlZFNpemUpOworfQorCitTY2FsZWRJbWFnZUZyYWdtZW50
KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpCit7CisgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBzY2FsZWQgc2l6ZSBpcyB0aGUgc2FtZSBh
cyB0aGUgZnVsbCBzaXplIHRoZW4gZXhpdAorICAgIC8vIGVhcmx5LiBUaGlzIHNhdmVzIGEgY2Fj
aGUgbG9va3VwLgorICAgIGlmIChzY2FsZWRTaXplID09IG1fZnVsbFNpemUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkRnVsbFNpemVJbWFnZSA9
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUodGhpcywg
bV9mdWxsU2l6ZSk7CisgICAgaWYgKCFjYWNoZWRGdWxsU2l6ZUltYWdlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9u
czo6UmVzaXplKAorICAgICAgICBjYWNoZWRGdWxsU2l6ZUltYWdlLT5iaXRtYXAoKSwKKyAgICAg
ICAgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsCisgICAgICAgIHNjYWxl
ZFNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IHNjYWxlZEltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNj
YWxlZFNpemUsIHNjYWxlZEJpdG1hcCwgY2FjaGVkRnVsbFNpemVJbWFnZS0+aXNDb21wbGV0ZSgp
KTsKKworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUodGhp
cywgY2FjaGVkRnVsbFNpemVJbWFnZSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIHNjYWxlZEltYWdlLnJlbGVhc2Uo
KSk7Cit9CisKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRv
RGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKIHsKICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhOwogICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkID0gZmFsc2U7CiAg
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBNdXRleExv
Y2tlciBsb2NrKG1fZGF0YU11dGV4KTsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRv
IGEgc2hhbGxvdyBjb3B5IGluc3RlYWQuIE5vdyB3ZSdyZSByZXN0cmljdGVkIGJ5IHRoZSBBUEkg
b2YgU2hhcmVkQnVmZmVyLgogICAgICAgICBkYXRhID0gbV9kYXRhLT5jb3B5KCk7CkBAIC02Nywy
MiArMTE5LDMyIEBAIFNrQml0bWFwIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxl
KGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrCiAgICAgfQogCiAgICAgT3duUHRy
PEltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0
YS5nZXQoKSwgSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBpZiAoIWRlY29kZXIgJiYgbV9pbWFn
ZURlY29kZXJGYWN0b3J5KQorICAgICAgICBkZWNvZGVyID0gbV9pbWFnZURlY29kZXJGYWN0b3J5
LT5jcmVhdGUoKTsKICAgICBpZiAoIWRlY29kZXIpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgp
OworICAgICAgICByZXR1cm4gMDsKIAogICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwg
YWxsRGF0YVJlY2VpdmVkKTsKICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleCgwKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gU2tCaXRt
YXAoKTsKKyAgICBpZiAoIWZyYW1lIHx8IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKIAorICAgIGJvb2wgaXNDb21wbGV0ZSA9IGZy
YW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOwogICAgIFNrQml0bWFw
IGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOwotICAgIFNrSVNpemUgYml0bWFwU2l6ZSA9
IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7Ci0gICAgaWYg
KGJpdG1hcFNpemUgIT0gc2NhbGVkU2l6ZSkKLSAgICAgICAgYml0bWFwID0gc2tpYTo6SW1hZ2VP
cGVyYXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9M
QU5DWk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICBB
U1NFUlQoYml0bWFwLndpZHRoKCkgPT0gbV9mdWxsU2l6ZS53aWR0aCgpICYmIGJpdG1hcC5oZWln
aHQoKSA9PSBtX2Z1bGxTaXplLmhlaWdodCgpKTsKKworICAgIE93blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBmdWxsU2l6ZUltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVs
bFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSk7CisgICAgaWYgKG1fZnVsbFNpemUgPT0gc2NhbGVk
U2l6ZSkKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5z
ZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgpKTsKKworICAgIFNr
Qml0bWFwIHNjYWxlZEJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJpdG1h
cCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUud2lk
dGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IHNjYWxlZEltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNjYWxlZFNpemUs
IHNjYWxlZEJpdG1hcCwgaXNDb21wbGV0ZSk7CisKKyAgICAvLyBTYXZlIGZ1bGwgc2l6ZSBpbWFn
ZSBpbiBjYWNoZSBmb3IgbGF0ZXIgdXNlLgorICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFu
Y2UoKS0+dW5sb2NrQ2FjaGUoCisgICAgICAgIHRoaXMsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgp
KSk7CiAKLSAgICBTa0JpdG1hcCBiaXRtYXBTdWJzZXQ7Ci0gICAgYml0bWFwLmV4dHJhY3RTdWJz
ZXQoJmJpdG1hcFN1YnNldCwgc2NhbGVkU3Vic2V0KTsKLSAgICByZXR1cm4gYml0bWFwU3Vic2V0
OworICAgIHJldHVybiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExv
Y2tDYWNoZSh0aGlzLCBzY2FsZWRJbWFnZS5yZWxlYXNlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKaW5kZXggNmRmNWIyM2NlZDE0
YWU1MDk1NWFmNjNlODc4ZTNiYTdkYTY1NDg5Mi4uNmNiNDU4Yjc1OGJlNDIyZDMzOGI0OTA3ZWMz
ZmFiY2Y1MjM0OThlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMzgsMjYg
KzM4LDQ4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEZWNvZGVyOwor
Y2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAorY2xhc3Mg
SW1hZ2VEZWNvZGVyRmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPElt
YWdlRGVjb2Rlcj4gY3JlYXRlKCkgPSAwOworfTsKKwogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRv
ciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9yPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRl
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUoY29uc3QgU2tJ
U2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VGcmFt
ZUdlbmVyYXRvcihkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGZ1bGxTaXplLCBkYXRhLCBhbGxEYXRhUmVjZWl2
ZWQpKTsKICAgICB9CiAKLSAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3Io
Y29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOwogICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CiAKLSAgICBTa0Jp
dG1hcCBkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lS
ZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGRlY29kZUFuZFNj
YWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwogCiAgICAgdm9pZCBzZXREYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCisgICAgdm9pZCBz
ZXRJbWFnZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2RlckZh
Y3Rvcnk+IGZhY3RvcnkpIHsgbV9pbWFnZURlY29kZXJGYWN0b3J5ID0gZmFjdG9yeTsgfQorCiBw
cml2YXRlOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGlsZSBtX2RlY29kZU11
dGV4IGlzIGxvY2tlZC4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb0xvY2tDYWNoZShj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlU
b1NjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIFNjYWxlZEltYWdlRnJhZ21l
bnQqIHRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAg
ICBTa0lTaXplIG1fZnVsbFNpemU7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwog
ICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0gICAgTXV0ZXggbV9tdXRleDsKKworICAgIE93
blB0cjxJbWFnZURlY29kZXJGYWN0b3J5PiBtX2ltYWdlRGVjb2RlckZhY3Rvcnk7CisKKyAgICAv
LyBQcmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBkYXRhLgor
ICAgIE11dGV4IG1fZGVjb2RlTXV0ZXg7CisKKyAgICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGFj
Y2VzcyB0byBtX2RhdGEuCisgICAgTXV0ZXggbV9kYXRhTXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKaW5kZXggMGE1
ZDVhMzhhZjRlNjk3Y2U5NzA3YWZiNmRkYzAxYWVlNDcwOTBmYi4uNTU1MjY2MzYyYTY1MjhjZDRj
NTMzODIyZjFmNjU4NmJiZmQ4NDM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVm
LmNwcApAQCAtMzgsNiArMzgsNyBAQCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5n
UGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZQogICAgICwgbV9m
cmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKICAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRT
aXplKQogICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQorICAgICwgbV9sb2NrZWRD
YWNoZWRJbWFnZSgwKQogewogfQogCkBAIC01OCwxOCArNTksMjkgQEAgYm9vbCBMYXp5RGVjb2Rp
bmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKIHZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVm
OjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCiB7CiAgICAgbV9tdXRleC5sb2NrKCk7Ci0g
ICAgQVNTRVJUKG1fbG9ja2VkQml0bWFwLmlzTnVsbCgpKTsKLSAgICBtX2xvY2tlZEJpdG1hcCA9
IG1fZnJhbWVHZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRT
dWJzZXQpOwotICAgIGlmIChtX2xvY2tlZEJpdG1hcC5pc051bGwoKSkKKyAgICBBU1NFUlQoIW1f
bG9ja2VkQ2FjaGVkSW1hZ2UpOworCisgICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRv
ci5nZXQoKSwgbV9zY2FsZWRTaXplKTsKKworICAgIC8vIFVzZSBJbWFnZUZyYW1lR2VuZXJhdG9y
IHRvIGdlbmVyYXRlIHRoZSBpbWFnZS4gSXQgd2lsbCBsb2NrIHRoZSBjYWNoZQorICAgIC8vIGVu
dHJ5IGZvciB1cy4KKyAgICBpZiAoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpCisgICAgICAgIG1fbG9j
a2VkQ2FjaGVkSW1hZ2UgPSBtX2ZyYW1lR2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShtX3NjYWxl
ZFNpemUpOworCisgICAgaWYgKCFtX2xvY2tlZENhY2hlZEltYWdlKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBtX2xvY2tlZEJpdG1hcC5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIG1fbG9ja2Vk
Qml0bWFwLmdldEFkZHIoMCwgMCk7CisKKyAgICBBU1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2Ut
PmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQobV9sb2NrZWRDYWNoZWRJbWFnZS0+c2Nh
bGVkU2l6ZSgpID09IG1fc2NhbGVkU2l6ZSk7CisgICAgcmV0dXJuIG1fbG9ja2VkQ2FjaGVkSW1h
Z2UtPmJpdG1hcCgpLmdldEFkZHIobV9zY2FsZWRTdWJzZXQueCgpLCBtX3NjYWxlZFN1YnNldC55
KCkpOwogfQogCiB2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCiB7
Ci0gICAgbV9sb2NrZWRCaXRtYXAudW5sb2NrUGl4ZWxzKCk7Ci0gICAgbV9sb2NrZWRCaXRtYXAu
cmVzZXQoKTsKKyAgICBpZiAobV9sb2NrZWRDYWNoZWRJbWFnZSkgeworICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0
KCksIG1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworICAgICAgICBtX2xvY2tlZENhY2hlZEltYWdlID0g
MDsKKyAgICB9CiAgICAgbV9tdXRleC51bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmgKaW5kZXggODAzMTRjZjIxZjdhMGFiY2JlMTQzMDg4ZmIwZGM2YWVlMmQwYjQy
Ny4uMWE4MWJiM2UwZWM2ZDVmMDYxNzcyNmY2ZjI3MjdhYWJjODg4ZDE1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CitjbGFzcyBTY2FsZWRJbWFnZUZyYWdt
ZW50OwogCiBjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsK
IHB1YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBTa0lTaXplIG1fc2NhbGVk
U2l6ZTsKICAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OwogCi0gICAgU2tCaXRtYXAgbV9sb2Nr
ZWRCaXRtYXA7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogbV9sb2NrZWRDYWNoZWRJbWFnZTsK
ICAgICBNdXRleCBtX211dGV4OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNw
cAppbmRleCA5NzRlNmZmODQ3ZWM1YjVkZDQ2OTU4ZjIwYmQ0ODEyOTM5YmQzNTczLi43MWJiNjIw
YWViNDc2OTQ1NGFmNTUyZmM2NTk1Y2E4OTdiOWQ1NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFn
ZUZyYWdtZW50LmNwcApAQCAtMzMsMjIgKzMzLDExIEBAIFNjYWxlZEltYWdlRnJhZ21lbnQ6On5T
Y2FsZWRJbWFnZUZyYWdtZW50KCkKIHsKIH0KIAotU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVk
SW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQotICAgIDogbV9pbWFn
ZUlkKGltYWdlSWQpCi0gICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKK1NjYWxlZEltYWdl
RnJhZ21lbnQ6OlNjYWxlZEltYWdlRnJhZ21lbnQoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9z
Y2FsZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX2JpdG1hcChiaXRtYXApCiAgICAgLCBtX2lz
Q29tcGxldGUoaXNDb21wbGV0ZSkKIHsKIH0KIAotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50Ojpp
c0VxdWFsKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAotewot
ICAgIHJldHVybiBpbWFnZUlkID09IG1faW1hZ2VJZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVk
U2l6ZTsKLX0KLQotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKGludCBpbWFnZUlk
KSBjb25zdAotewotICAgIHJldHVybiBpbWFnZUlkID09IG1faW1hZ2VJZDsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCmluZGV4IDViN2Zm
Yzk2MDE0ZTA1NzNlODM1MDc4MDJiNjZmMzRkOWJjZDNmNmQuLmJmOWE0Zjg3ZDgxMjMxMTQ0Zjdi
YjFjOWZhMGY1OGI1YWM2MDQ4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgKQEAg
LTM0LDI5ICszNCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFNjYWxlZEltYWdl
RnJhZ21lbnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVk
Ci0vLyBieSB0d28gdGhpbmdzOgotLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0
aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KLS8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgor
Ly8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuCiBj
bGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGUoY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50
KGltYWdlSWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNjYWxlZEltYWdlRnJhZ21lbnQoc2NhbGVkU2l6ZSwgYml0bWFwLCBp
c0NvbXBsZXRlKSk7CiAgICAgfQogCi0gICAgU2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAg
ICBTY2FsZWRJbWFnZUZyYWdtZW50KGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJv
b2wgaXNDb21wbGV0ZSk7CiAgICAgflNjYWxlZEltYWdlRnJhZ21lbnQoKTsKIAorICAgIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFNpemU7IH0KICAg
ICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAg
ICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KLQotICAgIGJvb2wgaXNF
cXVhbChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0VxdWFsKGludCBpbWFnZUlkKSBjb25zdDsKICAgICBib29sIGlzQ29tcGxldGUoKSBj
b25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KIAogcHJpdmF0ZToKLSAgICBpbnQgbV9pbWFn
ZUlkOwogICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOwogICAgIFNrQml0bWFwIG1fYml0bWFwOwog
ICAgIGJvb2wgbV9pc0NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwZmMzM2VjNmZj
NTQ1NmM3ZWE4NDI0MDI2YmJhY2RjZWI4YjQyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1NpemVIYXNoLmgKQEAgLTAsMCAr
MSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2tTaXplSGFzaF9oCisjZGVmaW5lIFNrU2l6ZUhh
c2hfaAorCisjaW5jbHVkZSAiU2tUeXBlcy5oIgorI2luY2x1ZGUgIlNrU2l6ZS5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEludEhhc2g8U2tTaXplPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2tT
aXplJiBrZXkpIHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS53aWR0aCgpLCBrZXkuaGVpZ2h0KCkp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2tTaXplJiBhLCBjb25zdCBTa1NpemUm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPFNrU2l6ZT4geworICAgIHR5cGVkZWYgSW50SGFzaDxTa1NpemU+IEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFNrU2l6ZT4gOiBHZW5lcmljSGFzaFRyYWl0
czxTa1NpemU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisgICAg
c3RhdGljIFNrU2l6ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gU2tTaXplOjpNYWtlKDAsIDApOyB9
CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNrU2l6ZSYgc2xvdCkKKyAg
ICB7CisgICAgICAgIHNsb3QgPSBTa1NpemU6Ok1ha2UoLTEsIC0xKTsKKyAgICB9CisgICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgU2tTaXplJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVlLmhlaWdodCgpID09IC0xOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8U2tJU2l6ZT4geworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNrSVNpemUmIGtleSkgeyByZXR1cm4gcGFpckludEhh
c2goa2V5LndpZHRoKCksIGtleS5oZWlnaHQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBTa0lTaXplJiBhLCBjb25zdCBTa0lTaXplJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTa0lTaXplPiB7CisgICAgdHlw
ZWRlZiBJbnRIYXNoPFNrSVNpemU+IEhhc2g7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPFNrSVNpemU+IDogR2VuZXJpY0hhc2hUcmFpdHM8U2tJU2l6ZT4geworICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aWMgU2tJU2l6ZSBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSgwLCAwKTsgfQorICAgIHN0YXRpYyB2b2lkIGNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShTa0lTaXplJiBzbG90KQorICAgIHsKKyAgICAgICAgc2xvdCA9
IFNrSVNpemU6Ok1ha2UoLTEsIC0xKTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVk
VmFsdWUoY29uc3QgU2tJU2l6ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUu
d2lkdGgoKSA9PSAtMSAmJiB2YWx1ZS5oZWlnaHQoKSA9PSAtMTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFNrU2l6ZUhhc2hfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKaW5kZXggZGQ1ZDZjZjFiNmJlOGIwY2IwOTdlZjBlMjU0ZmQwMTAzZWYzZDA3
ZC4uZGY1MGFmZmM1OTExMjE5MmU3NTA1ZjVlMmI4MDU4N2JjOWQ1ZGQ3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCkBAIC04MCw2ICs4MCw3IEBACiAgICAgICAgICAgICAndGVzdHMv
SURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJMZXZlbERCQ29kaW5n
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcsCisgICAg
ICAgICAgICAndGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
TW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCmluZGV4IDI0M2QwOGU2Mjk0ODA1
Njk3OTM2MmRmY2Y4NThjNmZmODVlOGE3NjguLjQ0NmE5YjZkYTc3NmRhYWQ2Yzc0MGQ4YTQ3ZGFh
MjUzZTQ4NjRjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktp
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcApAQCAtMTM0
LDYgKzEzNCw3IEBAIHZvaWQgaW5pdGlhbGl6ZVdpdGhvdXRWOChXZWJLaXRQbGF0Zm9ybVN1cHBv
cnQqIHdlYktpdFBsYXRmb3JtU3VwcG9ydCkKICAgICBBU1NFUlQoIXNfd2ViS2l0UGxhdGZvcm1T
dXBwb3J0KTsKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IHdlYktpdFBsYXRmb3JtU3Vw
cG9ydDsKICAgICBQbGF0Zm9ybTo6aW5pdGlhbGl6ZShzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCk7
CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpOwogCiAg
ICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRo
cmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHAKaW5kZXggNjQ2ZGM1M2Y4YzBlMTlhYmRkYmI5MDkzMzUzNWMxMDFiOTA4MzhmMi4uMTk5NDAz
MzRkZmZjMzYwMWQ3NmM1NWU2ZWQyZDI4ODFhZTI5YmE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBsLmgiCiAKKyNpbmNsdWRl
ICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkZvbnRSZW5kZXJpbmdNb2RlLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5o
PgpAQCAtNTAwLDEwICs1MDAsNyBAQCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWQy
ZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0
RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgaWYgKCFt
X2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgZW5hYmxlZCkKLSAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7Ci0gICAgaWYgKG1fZGVmZXJy
ZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAhZW5hYmxlZCkKLSAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpzaHV0ZG93bigpOworICAgIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRFbmFibGVk
KGVuYWJsZWQpOwogICAgIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCA9IGVuYWJsZWQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJy
ZWRJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCA0YmNjMjk4ODIyZTUyZTMwZDFjNGVhZjYzMDY4
MGE5YWU2NTlmZmQyLi43ZmQ0MDE3YTZlNDBiZmZjYWY3N2RmNmNjZjExZjA1MjY0YThmNjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZElt
YWdlRGVjb2RlclRlc3QuY3BwCkBAIC03Myw3ICs3Myw4IEBAIGNsYXNzIERlZmVycmVkSW1hZ2VE
ZWNvZGVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBNb2NrSW1hZ2VEZWNv
ZGVyCiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAgICB7Ci0gICAgICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgICAgICBJbWFn
ZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpzZXRFbmFibGVkKHRydWUpOwogICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZSh3aGl0ZVBORywgc2l6ZW9mKHdoaXRlUE5HKSk7CiAgICAgICAgIG1fYWN0dWFsRGVj
b2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKHRoaXMpOwogICAgICAgICBtX2FjdHVhbERlY29k
ZXItPnNldFNpemUoMSwgMSk7CkBAIC05MCwxMCArOTEsMTkgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpCiAgICAgewotICAgICAgICBtX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50ID0gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCgpOwogICAgICAgICBtX2FjdHVhbERlY29kZXIgPSAwOwogICAgIH0KIAorICAgIHZpcnR1
YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpCisgICAgeworICAgICAgICArK21fZnJhbWVC
dWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lOjpGcmFt
ZVN0YXR1cyBmcmFtZVN0YXR1cygpCisgICAgeworICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZTo6
RnJhbWVDb21wbGV0ZTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICAvLyBEb24ndCBvd24gdGhp
cyBidXQgc2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgogICAgIE1vY2tJbWFnZURl
Y29kZXIqIG1fYWN0dWFsRGVjb2RlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjMxMGI5
NGE2YTA3YzE0OTRmNjAzMTBmMTU1NjM4YzExNDAzMjMyYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCkBA
IC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
SW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgi
CisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgeworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDsKKworLy8gSGVs
cGVyIG1ldGhvZHMgdG8gZ2VuZXJhdGUgc3RhbmRhcmQgc2l6ZXMuCitTa0lTaXplIGZ1bGxTaXpl
KCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCk7IH0KK1NrSVNpemUgc2NhbGVkU2l6
ZSgpIHsgcmV0dXJuIFNrSVNpemU6Ok1ha2UoNTAsIDUwKTsgfQorCitjbGFzcyBJbWFnZUZyYW1l
R2VuZXJhdG9yVGVzdDsKKworY2xhc3MgTW9ja0ltYWdlRGVjb2RlckZhY3RvcnkgOiBwdWJsaWMg
SW1hZ2VEZWNvZGVyRmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9j
a0ltYWdlRGVjb2RlckZhY3Rvcnk+IGNyZWF0ZShJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9ja0ltYWdlRGVjb2RlckZh
Y3RvcnkodGVzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxJbWFnZURlY29k
ZXI+IGNyZWF0ZSgpOworCitwcml2YXRlOgorICAgIE1vY2tJbWFnZURlY29kZXJGYWN0b3J5KElt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0KiB0ZXN0KQorICAgICAgICA6IG1fdGVzdCh0ZXN0KQorICAg
IHsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCogbV90ZXN0OworfTsKKwor
Y2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0LCBw
dWJsaWMgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9u
Y2UoKTsKKyAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICAgICAg
bV9nZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZnVsbFNpemUoKSwgbV9k
YXRhLCB0cnVlKTsKKyAgICAgICAgbV9nZW5lcmF0b3ItPnNldEltYWdlRGVjb2RlckZhY3RvcnlG
b3JUZXN0aW5nKE1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUodGhpcykpOworICAgICAg
ICBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50ID0gMDsKKyAgICAgICAgbV9mcmFtZVN0YXR1cyA9
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJE
b3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkKKyAgICB7Cisg
ICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2ZyYW1lU3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlQ29tcGxldGVJbWFnZShjb25zdCBTa0lTaXplJiBz
aXplKQorICAgIHsKKyAgICAgICAgU2tCaXRtYXAgYml0bWFwOworICAgICAgICBiaXRtYXAuc2V0
Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKKyAgICAgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgICAgIHJldHVybiBT
Y2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2l6ZSwgYml0bWFwLCB0cnVlKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIHN0YXR1cykg
IHsgbV9mcmFtZVN0YXR1cyA9IHN0YXR1czsgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9kYXRhOworICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAg
ICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICBJbWFnZUZyYW1lOjpGcmFtZVN0
YXR1cyBtX2ZyYW1lU3RhdHVzOworfTsKKworUGFzc093blB0cjxJbWFnZURlY29kZXI+IE1vY2tJ
bWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUoKQoreworICAgIE1vY2tJbWFnZURlY29kZXIqIGRl
Y29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2RlcihtX3Rlc3QpOworICAgIGRlY29kZXItPnNldFNp
emUoZnVsbFNpemUoKS53aWR0aCgpLCBmdWxsU2l6ZSgpLmhlaWdodCgpKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIoZGVjb2Rlcik7Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwg
Y2FjaGVIaXQpCit7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbEltYWdlID0gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCisgICAgICAgIG1f
Z2VuZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdlKGZ1bGxTaXplKCkpKTsKKyAgICBF
WFBFQ1RfRVEoZnVsbFNpemUoKSwgZnVsbEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IGZ1bGxJbWFnZSk7CisKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dl
bmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0VRKGZ1bGxJ
bWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUoKSwgdGVtcEltYWdlLT5z
Y2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2Nr
Q2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDAsIG1f
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3QsIGNhY2hlTWlzc1dpdGhTY2FsZSkKK3sKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBm
dWxsSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tD
YWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNyZWF0ZUNvbXBsZXRlSW1hZ2UoZnVs
bFNpemUoKSkpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNp
emUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKworICAgIC8vIENhY2hlIG1pc3MgYmVjYXVz
ZSBvZiBzY2FsZWQgc2l6ZSBub3QgZm91bmQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogc2Nh
bGVkSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfTkUoZnVsbEltYWdlLCBzY2FsZWRJbWFnZSk7CisgICAgRVhQRUNUX0VRKHNjYWxl
ZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2NhbGVkSW1h
Z2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJ
bWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVY
UEVDVF9FUShzY2FsZWRJbWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkU2l6
ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cit9CisKK1RFU1RfRihJ
bWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aERlY29kZUFuZFNjYWxlKQorewor
ICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworCisgICAgLy8g
Q2FjaGUgbWlzcy4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBzY2FsZWRJbWFnZSA9IG1fZ2Vu
ZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxLCBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkU2l6ZSgpLCBz
Y2FsZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBzY2FsZWRJbWFnZSk7CisKKyAg
ICAvLyBDYWNoZSBoaXQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbEltYWdlID0gbV9n
ZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9ORShzY2Fs
ZWRJbWFnZSwgZnVsbEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUoKSwgZnVsbEltYWdl
LT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5s
b2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIGZ1bGxJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBo
aXQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRl
Y29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNjYWxlZEltYWdlLCB0
ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHRlbXBJbWFnZS0+c2NhbGVk
U2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50KTsKK30KKworLy8gVGVzdCB0aGF0IGluY29tcGxldGUgZnJhbWVz
IGFyZSBub3QgY2FjaGVkLgorVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1p
c3NXaXRoSW5jb21wbGV0ZURlY29kZSkKK3sKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1l
OjpGcmFtZVBhcnRpYWwpOworCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0g
bV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VR
KDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisK
KyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHRlbXBJbWFnZSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2Nh
bGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMywgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKaW5kZXggYzlj
MGQwMWQ2ZDgzODIwOTJiMDc0Yjk0ZTRkZDlmZDdhZTFjODY4My4uOGI0ZjQwMzgyMzljMjk1ZGU0
OGM5ZGVlZDdmMzllZjhhZDU4ZjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAgLTMyLDYgKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVCdWZmZXJSZXF1ZXN0ZWQoKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZUZyYW1lOjpGcmFtZVN0
YXR1cyBmcmFtZVN0YXR1cygpID0gMDsKIH07CiAKIGNsYXNzIE1vY2tJbWFnZURlY29kZXIgOiBw
dWJsaWMgSW1hZ2VEZWNvZGVyIHsKQEAgLTU1LDkgKzU3LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpCiAgICAgewogICAgICAg
ICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgICAgIG1fY2xpZW50LT5mcmFtZUJ1
ZmZlclJlcXVlc3RlZCgpOwogCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7
CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0U3RhdHVz
KG1fY2xpZW50LT5mcmFtZVN0YXR1cygpKTsKICAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175927</attachid>
            <date>2012-11-25 22:51:17 -0800</date>
            <delta_ts>2012-11-26 15:18:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121125224856.patch</filename>
            <type>text/plain</type>
            <size>49453</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQ1MjAxNjE2ZWE5YTdh
OWQxNTg5ZTBjMmZlZjNmZDkyMTEyOGQxNi4uNTFkMTNmNWZiODYzMzM4NjZhODE4NGM1OWVjYzQ4
Y2VjN2MwM2UyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTIwICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gQ2hyb21pdW0gYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA1OGYxZDkyNDZhZmJiNWI1NTgyNjJmYmU1MTk2NWM4YjJmZGJkMTdhLi41NWE5Yjc1
OWI4YTIwMzBkMzQ0YTExMjkyZDI5Y2JiMmY0NTNjMDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTExLTI1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZnVsbC1mZWF0dXJlZCBp
bWFnZSBjYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTk3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCB0byB0ZXN0IGNhY2hlIGxvZ2ljIGFuZCBn
ZW5lcmF0aW9uCisgICAgICAgIG9mIG5ldyBjYWNoZSBlbnRyaWVzLgorCisgICAgICAgIEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlSGl0CisgICAgICAgIFRlc3QgdGhhdCBhIGNvbXBsZXRl
IGNhY2hlZCBlbnRyeSBpcyByZXVzZWQuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuY2FjaGVNaXNzV2l0aFNjYWxlCisgICAgICAgIENhY2hlIG1pc3MgZm9yIGEgc2NhbGVkIGlt
YWdlIGJ1dCBjYWNoZSBoaXQgb24gYSBmdWxsIHNpemUgaW1hZ2UuCisgICAgICAgIFNjYWxlZCBp
bWFnZSBpcyBjcmVhdGVkIGZyb20gY2FjaGVkIGZ1bGwgc2l6ZSBpbWFnZS4KKworICAgICAgICBJ
bWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUKKyAgICAg
ICAgQ2FjaGUgbWlzcyBmb3IgYm90aCBzY2FsZWQgaW1hZ2UgYW5kIGZ1bGwgc2l6ZSBpbWFnZS4K
KworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoSW5jb21wbGV0
ZURlY29kZQorICAgICAgICBUZXN0IHRoZSBsb2dpYyBmb3IgaGFuZGxpbmcgaW5jb21wbGV0ZSBj
YWNoZSBvYmplY3RzLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dl
YktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OmluaXRpYWxpemVXaXRob3V0VjgpOgorICAgICAg
ICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5n
c0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQpOgorICAgICAgICAqIHRlc3Rz
L0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2RlclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1h
Z2VEZWNvZGVyVGVzdDo6ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQpOgorICAgICAg
ICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVk
SW1hZ2VEZWNvZGVyVGVzdDo6ZnJhbWVTdGF0dXMpOgorICAgICAgICAqIHRlc3RzL0ltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZ1bGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNjYWxlZFNpemUpOgorICAg
ICAgICAoTW9ja0ltYWdlRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0lt
YWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeTo6TW9ja0ltYWdlRGVjb2RlckZhY3RvcnkpOgorICAgICAgICAoSW1hZ2VG
cmFtZUdlbmVyYXRvclRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
OjpUZWFyRG93bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6
ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0OjpmcmFtZUJ1ZmZlclJlcXVlc3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZnJhbWVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZUdlbmVyYXRvclRlc3Q6OmNyZWF0ZUNvbXBsZXRlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OnNldEZyYW1lU3RhdHVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoTW9ja0ltYWdlRGVjb2RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorCiAyMDEyLTExLTIwICBSb2JlcnQg
S3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVz
ZSBlbWJlZGRlci1zdXBwb3J0ZWQgZ2VzdHVyZSBjdXJ2ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAxNGRlNjk0ZTgzM2NhZTA3OTA5MDE5Mjc4NGQ4MDQ5MGIzNDE4
YWE5Li5hODAxOGE1MGY1ODgzMGFjY2NjZjk2ZTUxMTZmNjk1NDgxMjljZDVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCkBAIC00MCw2ICs0MCw4IEBAIGNvbnN0IGNoYXIg
bGFiZWxMYXp5RGVjb2RlZFtdID0gImxhenkiOwogCiB9IC8vIG5hbWVzcGFjZQogCitib29sIERl
ZmVycmVkSW1hZ2VEZWNvZGVyOjptX2VuYWJsZWQgPSBmYWxzZTsKKwogRGVmZXJyZWRJbWFnZURl
Y29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2RlciogYWN0dWFsRGVjb2RlcikK
ICAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogICAgICwgbV9hY3R1YWxEZWNvZGVyKGFk
b3B0UHRyKGFjdHVhbERlY29kZXIpKQpAQCAtNDksOCArNTEsNiBAQCBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQog
CiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKCkKIHsKLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIEltYWdlRGVjb2RpbmdT
dG9yZSBpZiBpbWFnZQotICAgIC8vIGlzIGRlZmVyLWRlY29kZWQuCiB9CiAKIERlZmVycmVkSW1h
Z2VEZWNvZGVyKiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZl
ciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvck9wdGlvbikKQEAgLTgw
LDYgKzgwLDEwIEBAIFNrQml0bWFwIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVSZXNpemVk
TGF6eURlY29kaW5nQml0bWFwKGNvbnN0IFNrQml0bWFwJiBiCiAKICAgICBTa0JpdG1hcCByZXNp
emVkQml0bWFwOwogICAgIHJlc2l6ZWRCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgc2NhbGVkU3Vic2V0LndpZHRoKCksIHNjYWxlZFN1YnNldC5oZWlnaHQoKSwg
cm93Qnl0ZXMpOworCisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBoYXMgdGhlIHBvdGVudGlhbCBw
cm9ibGVtIHRoYXQgbXVsdGlwbGUKKyAgICAvLyBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgYXJlIGNy
ZWF0ZWQgZXZlbiB0aG91Z2ggdGhleSBzaGFyZSB0aGUgc2FtZQorICAgIC8vIHNjYWxlZCBzaXpl
IGFuZCBJbWFnZUZyYW1lR2VuZXJhdG9yLgogICAgIHJlc2l6ZWRCaXRtYXAuc2V0UGl4ZWxSZWYo
bmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKHBpeGVsUmVmLT5mcmFtZUdlbmVyYXRvcigpLCBzY2Fs
ZWRTaXplLCBzY2FsZWRTdWJzZXQpKS0+dW5yZWYoKTsKIAogICAgIC8vIFNlZSBjb21tZW50cyBp
biBjcmVhdGVMYXp5RGVjb2RpbmdCaXRtYXAoKS4KQEAgLTg3LDYgKzkxLDExIEBAIFNrQml0bWFw
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFwKGNv
bnN0IFNrQml0bWFwJiBiCiAgICAgcmV0dXJuIHJlc2l6ZWRCaXRtYXA7CiB9CiAKK3ZvaWQgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fZW5h
YmxlZCA9IGVuYWJsZWQ7Cit9CisKIFN0cmluZyBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2Fj
dHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkgOiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOwpA
QCAtOTgsNyArMTA3LDcgQEAgSW1hZ2VGcmFtZSogRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8gYmVjYXVzZSBhIG11bHRpZnJhbWUg
aXMgdXN1YWxseSBhbmltYXRlZCBHSUYuIEFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5CiAgICAgLy8g
Qml0bWFwSW1hZ2Ugd2hpY2ggdXNlcyBzb21lIG1ldGFkYXRhIGZ1bmN0aW9ucyB0aGF0IGRvIHN5
bmNocm9ub3VzIGltYWdlCiAgICAgLy8gZGVjb2RpbmcuCi0gICAgaWYgKEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorICAgIGlmIChtX2VuYWJsZWQKICAgICAgICAg
JiYgbV9hY3R1YWxEZWNvZGVyCiAgICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlv
bkNvdW50KCkgPT0gY0FuaW1hdGlvbk5vbmUKICAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5p
c1NpemVBdmFpbGFibGUoKSkgewpAQCAtMjAwLDcgKzIwOSw3IEBAIFNrQml0bWFwIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpjcmVhdGVMYXp5RGVjb2RpbmdCaXRtYXAoKQogICAgIFNrQml0bWFwIGJp
dG1hcDsKICAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
ZnVsbFNpemUud2lkdGgoKSwgZnVsbFNpemUuaGVpZ2h0KCkpOwogCi0gICAgbV9mcmFtZUdlbmVy
YXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShtX2RhdGEucmVsZWFzZSgpLCBtX2Fs
bERhdGFSZWNlaXZlZCk7CisgICAgbV9mcmFtZUdlbmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0
b3I6OmNyZWF0ZShmdWxsU2l6ZSwgbV9kYXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQp
OwogICAgIG1fYWN0dWFsRGVjb2Rlci5jbGVhcigpOwogCiAgICAgYml0bWFwLnNldFBpeGVsUmVm
KG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihtX2ZyYW1lR2VuZXJhdG9yLCBmdWxsU2l6ZSwgZnVs
bFJlY3QpKS0+dW5yZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCmluZGV4IGI3
OTUwNDlmMGM4M2FkODg2MDIyNDM0ODM2Y2Q3NzIyZWYwY2Y1NGYuLjdjOTdkZTMxMGYzMjY4Njdm
YmJhZTA3MTM4YjczN2EzYWM3MmIwYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIu
aApAQCAtNDcsNiArNDcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU2tCaXRtYXAgY3JlYXRl
UmVzaXplZExhenlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CiAKKyAgICBzdGF0aWMg
dm9pZCBzZXRFbmFibGVkKGJvb2wpOworCiAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3Q7CiAKICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKQEAgLTc5LDYgKzgxLDggQEAgcHJpdmF0ZToKIAogICAgIEltYWdlRnJhbWUgbV9sYXp5RGVj
b2RlZEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2ZyYW1lR2VuZXJh
dG9yOworCisgICAgc3RhdGljIGJvb2wgbV9lbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKaW5kZXggNDQ5ZTQ1MjU0ZTg5
NWMwMzMyNmI0ZDU3YTA1YmJkMTExOWJiMzliNS4uN2QwN2I0N2FiNDRmMzhlMDVjMjQ0YWFkZGMw
NWViM2YzOWM3MzJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCkBAIC0yNiwy
MSArMjYsMjIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZURlY29kaW5n
U3RvcmUuaCIKIAorI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJT
Y2FsZWRJbWFnZUZyYWdtZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSB7CiAKLUltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IDA7CitJ
bWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAwOwogCi1zdGF0aWMgdm9pZCBzZXRJbnN0
YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkK
K3N0YXRpYyB2b2lkIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZSogaW1hZ2VEZWNvZGlu
Z1N0b3JlKQogewotICAgIGRlbGV0ZSBzX2luc3RhbmNlT25NYWluVGhyZWFkOwotICAgIHNfaW5z
dGFuY2VPbk1haW5UaHJlYWQgPSBpbWFnZURlY29kaW5nU3RvcmU7CisgICAgZGVsZXRlIHNfaW5z
dGFuY2U7CisgICAgc19pbnN0YW5jZSA9IGltYWdlRGVjb2RpbmdTdG9yZTsKIH0KKwogfSAvLyBu
YW1lc3BhY2UKIAogSW1hZ2VEZWNvZGluZ1N0b3JlOjpJbWFnZURlY29kaW5nU3RvcmUoKQpAQCAt
NTEsNDYgKzUyLDkyIEBAIEltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgp
CiB7CiB9CiAKLUltYWdlRGVjb2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZU9uTWFpblRocmVhZCgpCitJbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7CisgICAgcmV0dXJuIHNfaW5zdGFuY2U7CiB9CiAKLXZvaWQg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCkKK3ZvaWQgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZChJbWFnZURlY29kaW5nU3RvcmU6OmNy
ZWF0ZSgpLmxlYWtQdHIoKSk7CisgICAgc2V0SW5zdGFuY2UoSW1hZ2VEZWNvZGluZ1N0b3JlOjpj
cmVhdGUoKS5sZWFrUHRyKCkpOwogfQogCiB2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2V0SW5zdGFuY2VPbk1h
aW5UaHJlYWQoMCk7CisgICAgc2V0SW5zdGFuY2UoMCk7CiB9CiAKLWJvb2wgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpjYWxsZWRPblZhbGlkVGhyZWFkKCkgY29uc3QKK1NjYWxlZEltYWdlRnJhZ21lbnQq
IEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQogewotICAgIHJl
dHVybiB0aGlzID09IGluc3RhbmNlT25NYWluVGhyZWFkKCkgJiYgaXNNYWluVGhyZWFkKCk7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIHNjYWxlZFNpemUp
KTsKKyAgICBpZiAoaXRlciA9PSBtX2NhY2hlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICBpZiAoIWNh
Y2hlRW50cnktPmNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNhY2hlRW50cnktPmNhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7CisgICAg
KytjYWNoZUVudHJ5LT51c2VDb3VudDsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1h
Z2UuZ2V0KCk7CiB9CiAKLVNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6
bG9va3VwRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3QKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0luY29t
cGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1l
Q2FjaGUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVh
bChpbWFnZUlkLCBzY2FsZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVb
aV0uZ2V0KCk7Ci0gICAgfQorICAgIC8vIFRPRE86IEltcGxlbWVudC4KICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdl
SWQpCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFt
ZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdlSWQpKSB7Ci0gICAg
ICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9CisgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygpOworICAgIGlm
ICghY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBEZWxldGUgdGhlIGlt
YWdlIGlmIGl0IGlzIGluY29tcGxldGUuIEl0IHdhcyBuZXZlciBzdG9yZWQgaW4gY2FjaGUuCisg
ICAgICAgIGRlbGV0ZSBjYWNoZWRJbWFnZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+
c2NhbGVkU2l6ZSgpKSk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1hcC5lbmQoKSk7CisK
KyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7CisgICAgLS1jYWNoZUVu
dHJ5LT51c2VDb3VudDsKKyAgICBBU1NFUlQoY2FjaGVFbnRyeS0+dXNlQ291bnQgPj0gMCk7Cit9
CisKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9j
a0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxT
Y2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkKK3sKKyAgICAvLyBQcnVuZSBvbGQgY2FjaGUgZW50
cmllcyB0byBnaXZlIHNwYWNlIGZvciB0aGUgbmV3IG9uZS4KKyAgICBwcnVuZSgpOworCisgICAg
Ly8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcg
cHVyZ2VkLgorICAgIGltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7CisKKyAgICBpZiAoIWlt
YWdlLT5pc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gSW5jb21wbGV0ZSBpbWFnZSBpcyBub3Qg
c3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgZGVsZXRlZCBhZnRlciB1c2UuCisgICAgICAgIC8vIFNl
ZSB1bmxvY2tDYWNoZSgpLgorICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgYWxsb3cgaW5jb21w
bGV0ZSBpbWFnZXMgdG8gYmUgc3RvcmVkIHRvZ2V0aGVyIHdpdGgKKyAgICAgICAgLy8gdGhlIGNv
cnJlc3BvbmRpbmcgSW1hZ2VEZWNvZGVyLgorICAgICAgICByZXR1cm4gaW1hZ2UubGVha1B0cigp
OworICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgU2NhbGVkSW1h
Z2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBpbWFnZS5nZXQoKTsKKyAgICBPd25QdHI8Q2FjaGVF
bnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6OmNyZWF0ZUFuZFVzZShpbWFnZSk7CisK
KyAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNo
ZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
Y2FjaGVNYXAuZmluZChrZXkpOworICAgIEFTU0VSVF9VTlVTRUQoaXRlciwgaXRlciA9PSBtX2Nh
Y2hlTWFwLmVuZCgpKTsKKworICAgIG1fY2FjaGVNYXAuYWRkKGtleSwgbmV3Q2FjaGVFbnRyeS5n
ZXQoKSk7CisgICAgbV9jYWNoZUVudHJpZXMuYXBwZW5kKG5ld0NhY2hlRW50cnkucmVsZWFzZSgp
KTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2U7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjpwcnVuZSgpCit7CisgICAgLy8gVE9ETzogSW1wbGVtZW50LgogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCmluZGV4IGE2ZmE1NjE5NGZlMTU1
MzEzZTFiMWJiMjhmMTExMjI2YjIwMjdmN2UuLjFmZGJiMzk1NmNlZmFlODQzNzQzN2E5MzNiNWFh
MzA3Mzk5MTI5NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0yNiw0MCArMjYs
NzEgQEAKICNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKICNkZWZpbmUgSW1hZ2VEZWNvZGlu
Z1N0b3JlX2gKIAorI2luY2x1ZGUgIlNjYWxlZEltYWdlRnJhZ21lbnQuaCIKICNpbmNsdWRlICJT
a1R5cGVzLmgiCiAjaW5jbHVkZSAiU2tTaXplLmgiCisjaW5jbHVkZSAiU2tTaXplSGFzaC5oIgog
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xhc3Mg
SW1hZ2VGcmFtZUdlbmVyYXRvcjsKLWNsYXNzIFNjYWxlZEltYWdlRnJhZ21lbnQ7CiBjbGFzcyBT
aGFyZWRCdWZmZXI7CiAKLS8vIFRoaXMgY2xhc3MgY2FuIG9ubHkgYmUgaW5zdGFudGlhdGVkIG9u
IG1haW4gdGhyZWFkLiBUaGVyZSB3aWxsIGJlIGFuCi0vLyBpbnN0YW5jZSBvbiBpbXBsIHRocmVh
ZCBpbiB0aGUgZnV0dXJlIGJ1dCB0aGF0IHBhcnQgb2YgaW1wbGVtZW50YXRpb24KLS8vIGlzIGlu
Y29tcGxldGUuIFNlZSBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NDI0MAotLy8gZm9yIGRldGFpbHMuCiBjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUgewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVjb2RpbmdTdG9yZSk7IH0KICAgICB+SW1hZ2VE
ZWNvZGluZ1N0b3JlKCk7CiAKLSAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5j
ZU9uTWFpblRocmVhZCgpOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5UaHJlYWQo
KTsKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5jZSgpOworICAgIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CiAgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKIAor
ICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHRocmVhZC1zYWZlIGFuZCBwcm90ZWN0ZWQgYnkgYSBt
dXRleC4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2NrQ29tcGxldGVDYWNoZShjb25zdCBJ
bWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogbG9ja0luY29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgdm9pZCB1bmxvY2tDYWNo
ZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2NhbGVkSW1hZ2VGcmFnbWVudCopOworICAg
IFNjYWxlZEltYWdlRnJhZ21lbnQqIGluc2VydEFuZExvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1l
R2VuZXJhdG9yKiwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7CisKIHByaXZhdGU6
CisgICAgc3RydWN0IENhY2hlRW50cnkgeworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNo
ZUVudHJ5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRyeSgpKTsgfQor
ICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGVBbmRVc2UoUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENh
Y2hlRW50cnkoaW1hZ2UsIDEpKTsgfQorCisgICAgICAgIENhY2hlRW50cnkoKQorICAgICAgICAg
ICAgOiB1c2VDb3VudCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBDYWNoZUVu
dHJ5KFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIGludCBjb3VudCkKKyAg
ICAgICAgICAgIDogY2FjaGVkSW1hZ2UoaW1hZ2UpCisgICAgICAgICAgICAsIHVzZUNvdW50KGNv
dW50KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+Q2FjaGVFbnRyeSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghdXNlQ291bnQpOworICAgICAgICB9CisKKyAgICAg
ICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNhY2hlZEltYWdlOworICAgICAgICBpbnQg
dXNlQ291bnQ7CisgICAgfTsKKwogICAgIEltYWdlRGVjb2RpbmdTdG9yZSgpOwotICAgIGJvb2wg
Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OwotICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGxv
b2t1cEZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNv
bnN0OwotICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCk7CisgICAgdm9pZCBw
cnVuZSgpOworCisgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IG1fY2FjaGVFbnRyaWVz
OwogCi0gICAgVmVjdG9yPE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiA+IG1fZnJhbWVDYWNo
ZTsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJ
U2l6ZT4gQ2FjaGVJZGVudGlmaWVyOworICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZp
ZXIsIENhY2hlRW50cnkqPiBDYWNoZU1hcDsKKyAgICBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAg
IE11dGV4IG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4IGZlNGU0YmZiZWRjY2Y0ZDQ2MjkwOWVkYjJmYzE1
MjUyMTU4N2VjOTIuLjVhYjA5OTlhNWM0OTVlZDQxNzU5MDM4M2E5Njc5NThhZTk4N2NkNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0yOCwyMCArMjgsMjUgQEAKICNp
bmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJTY2FsZWRJbWFn
ZUZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNpbmNsdWRlICJza2lh
L2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi0gICAgOiBtX2FsbERhdGFSZWNlaXZlZChm
YWxzZSkKK0ltYWdlRnJhbWVHZW5lcmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJ
U2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkKKyAgICA6IG1fZnVsbFNpemUoZnVsbFNpemUpCisgICAgLCBtX2FsbERhdGFS
ZWNlaXZlZChmYWxzZSkKIHsKICAgICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9
CiAKIEltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKIHsKKyAgICAv
LyBUT0RPOiBDYWxsIEltYWdlRGVjb2RpbmdTdG9yZSB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJp
ZXMgaW5kZXhlZAorICAgIC8vIGJ5IHRoaXMgb2JqZWN0LgogfQogCiB2b2lkIEltYWdlRnJhbWVH
ZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQpAQCAtNDksMTcgKzU0LDY0IEBAIHZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVj
CiAgICAgLy8gRklYTUU6IERvaW5nIGEgZnVsbCBjb3B5IGlzIGV4cGVuc2l2ZSwgaW5zdGVhZCBj
b3B5IG9ubHkgbmV3IGRhdGEuCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUNvcHkgPSBk
YXRhLT5jb3B5KCk7CiAKLSAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwogICAgIG1fZGF0YSA9IGRhdGFDb3B5OwogICAgIG1f
YWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOwogfQogCi1Ta0JpdG1hcCBJbWFnZUZy
YW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBj
b25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCitTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZy
YW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQor
eworICAgIC8vIFByZXZlbnRzIGNvbmN1cnJlbnQgZGVjb2RlIG9yIHNjYWxlIG9wZXJhdGlvbnMg
b24gdGhlIHNhbWUgaW1hZ2UgZGF0YS4KKyAgICAvLyBNdWx0aXBsZSBMYXp5RGVjb2RpbmdQaXhl
bFJlZnMgY2FuIGNhbGwgdGhpcyBtZXRob2QgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBNdXRleExv
Y2tlciBsb2NrKG1fZGVjb2RlTXV0ZXgpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hl
ZEltYWdlID0gMDsKKworICAgIGNhY2hlZEltYWdlID0gdHJ5VG9Mb2NrQ2FjaGUoc2NhbGVkU2l6
ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CisK
KyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvU2NhbGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hl
ZEltYWdlKQorICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CisKKyAgICBjYWNoZWRJbWFnZSA9
IHRyeVRvRGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQor
ICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CisgICAgcmV0dXJuIDA7Cit9CisKK1NjYWxlZElt
YWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NhY2hlKGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpCit7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUodGhpcywgc2NhbGVkU2l6ZSk7Cit9CisKK1NjYWxl
ZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUoY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIHNjYWxlZCBzaXpl
IGlzIHRoZSBzYW1lIGFzIHRoZSBmdWxsIHNpemUgdGhlbiBleGl0CisgICAgLy8gZWFybHkuIFRo
aXMgc2F2ZXMgYSBjYWNoZSBsb29rdXAuCisgICAgaWYgKHNjYWxlZFNpemUgPT0gbV9mdWxsU2l6
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRG
dWxsU2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxl
dGVDYWNoZSh0aGlzLCBtX2Z1bGxTaXplKTsKKyAgICBpZiAoIWNhY2hlZEZ1bGxTaXplSW1hZ2Up
CisgICAgICAgIHJldHVybiAwOworCisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gc2tpYTo6
SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoCisgICAgICAgIGNhY2hlZEZ1bGxTaXplSW1hZ2UtPmJp
dG1hcCgpLAorICAgICAgICBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywK
KyAgICAgICAgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICBP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gc2NhbGVkSW1hZ2UgPSBTY2FsZWRJbWFnZUZyYWdt
ZW50OjpjcmVhdGUoc2NhbGVkU2l6ZSwgc2NhbGVkQml0bWFwLCBjYWNoZWRGdWxsU2l6ZUltYWdl
LT5pc0NvbXBsZXRlKCkpOworCisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51
bmxvY2tDYWNoZSh0aGlzLCBjYWNoZWRGdWxsU2l6ZUltYWdlKTsKKyAgICByZXR1cm4gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUodGhpcywgc2NhbGVk
SW1hZ2UucmVsZWFzZSgpKTsKK30KKworU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQog
ewogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQgPSBmYWxzZTsKICAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwogCiAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgZG8gYSBzaGFsbG93IGNvcHkgaW5zdGVhZC4gTm93IHdlJ3JlIHJlc3RyaWN0
ZWQgYnkgdGhlIEFQSSBvZiBTaGFyZWRCdWZmZXIuCiAgICAgICAgIGRhdGEgPSBtX2RhdGEtPmNv
cHkoKTsKQEAgLTY3LDIyICsxMTksMzIgQEAgU2tCaXRtYXAgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2sKICAgICB9
CiAKICAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKEltYWdlRGVjb2Rl
cjo6Y3JlYXRlKCpkYXRhLmdldCgpLCBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJ
bWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworICAgIGlmICghZGVj
b2RlciAmJiBtX2ltYWdlRGVjb2RlckZhY3RvcnkpCisgICAgICAgIGRlY29kZXIgPSBtX2ltYWdl
RGVjb2RlckZhY3RvcnktPmNyZWF0ZSgpOwogICAgIGlmICghZGVjb2RlcikKLSAgICAgICAgcmV0
dXJuIFNrQml0bWFwKCk7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgZGVjb2Rlci0+c2V0RGF0
YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIEltYWdlRnJhbWUqIGZyYW1lID0g
ZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBTa0JpdG1hcCgpOworICAgIGlmICghZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAwOwogCisgICAgYm9vbCBp
c0NvbXBsZXRlID0gZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7
CiAgICAgU2tCaXRtYXAgYml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7Ci0gICAgU2tJU2l6
ZSBiaXRtYXBTaXplID0gU2tJU2l6ZTo6TWFrZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdo
dCgpKTsKLSAgICBpZiAoYml0bWFwU2l6ZSAhPSBzY2FsZWRTaXplKQotICAgICAgICBiaXRtYXAg
PSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0
aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVp
Z2h0KCkpOworICAgIEFTU0VSVChiaXRtYXAud2lkdGgoKSA9PSBtX2Z1bGxTaXplLndpZHRoKCkg
JiYgYml0bWFwLmhlaWdodCgpID09IG1fZnVsbFNpemUuaGVpZ2h0KCkpOworCisgICAgT3duUHRy
PFNjYWxlZEltYWdlRnJhZ21lbnQ+IGZ1bGxTaXplSW1hZ2UgPSBTY2FsZWRJbWFnZUZyYWdtZW50
OjpjcmVhdGUobV9mdWxsU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKTsKKyAgICBpZiAobV9mdWxs
U2l6ZSA9PSBzY2FsZWRTaXplKQorICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUodGhpcywgZnVsbFNpemVJbWFnZS5yZWxlYXNl
KCkpOworCisgICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25z
OjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMywg
c2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICBPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gc2NhbGVkSW1hZ2UgPSBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVh
dGUoc2NhbGVkU2l6ZSwgc2NhbGVkQml0bWFwLCBpc0NvbXBsZXRlKTsKKworICAgIC8vIFNhdmUg
ZnVsbCBzaXplIGltYWdlIGluIGNhY2hlIGZvciBsYXRlciB1c2UuCisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSgKKyAgICAgICAgdGhpcywgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUodGhpcywgZnVsbFNpemVJ
bWFnZS5yZWxlYXNlKCkpKTsKIAotICAgIFNrQml0bWFwIGJpdG1hcFN1YnNldDsKLSAgICBiaXRt
YXAuZXh0cmFjdFN1YnNldCgmYml0bWFwU3Vic2V0LCBzY2FsZWRTdWJzZXQpOwotICAgIHJldHVy
biBiaXRtYXBTdWJzZXQ7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+aW5zZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIHNjYWxlZEltYWdlLnJlbGVhc2UoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaAppbmRl
eCA2ZGY1YjIzY2VkMTRhZTUwOTU1YWY2M2U4NzhlM2JhN2RhNjU0ODkyLi42Y2I0NThiNzU4YmU0
MjJkMzM4YjQ5MDdlYzNmYWJjZjUyMzQ5OGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oCkBAIC0zOCwyNiArMzgsNDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJ
bWFnZURlY29kZXI7CitjbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogCitjbGFzcyBJbWFnZURlY29kZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKSA9IDA7Cit9OworCiBjbGFzcyBJbWFn
ZUZyYW1lR2VuZXJhdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRnJhbWVH
ZW5lcmF0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2Vu
ZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNy
ZWF0ZShjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRhdGEsIGFsbERhdGFSZWNlaXZlZCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZnVsbFNpemUsIGRhdGEs
IGFsbERhdGFSZWNlaXZlZCkpOwogICAgIH0KIAotICAgIEltYWdlRnJhbWVHZW5lcmF0b3IoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgSW1hZ2VG
cmFtZUdlbmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgfkltYWdlRnJhbWVHZW5lcmF0b3Io
KTsKIAotICAgIFNrQml0bWFwIGRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CiAKICAgICB2b2lk
IHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CiAKKyAgICB2b2lkIHNldEltYWdlRGVjb2RlckZhY3RvcnlGb3JUZXN0aW5nKFBhc3NPd25QdHI8
SW1hZ2VEZWNvZGVyRmFjdG9yeT4gZmFjdG9yeSkgeyBtX2ltYWdlRGVjb2RlckZhY3RvcnkgPSBm
YWN0b3J5OyB9CisKIHByaXZhdGU6CisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHdo
aWxlIG1fZGVjb2RlTXV0ZXggaXMgbG9ja2VkLgorICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIHRy
eVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIFNjYWxlZEltYWdl
RnJhZ21lbnQqIHRyeVRvU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9EZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplKTsKKworICAgIFNrSVNpemUgbV9mdWxsU2l6ZTsKICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2RhdGE7CiAgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKLSAgICBNdXRleCBtX211
dGV4OworCisgICAgT3duUHRyPEltYWdlRGVjb2RlckZhY3Rvcnk+IG1faW1hZ2VEZWNvZGVyRmFj
dG9yeTsKKworICAgIC8vIFByZXZlbnRzIG11bHRpcGxlIGRlY29kZSBvcGVyYXRpb25zIG9uIHRo
ZSBzYW1lIGRhdGEuCisgICAgTXV0ZXggbV9kZWNvZGVNdXRleDsKKworICAgIC8vIFByZXZlbnRz
IGNvbmN1cnJlbnQgYWNjZXNzIHRvIG1fZGF0YS4KKyAgICBNdXRleCBtX2RhdGFNdXRleDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVm
LmNwcAppbmRleCAwYTVkNWEzOGFmNGU2OTdjZTk3MDdhZmI2ZGRjMDFhZWU0NzA5MGZiLi41NTUy
NjYzNjJhNjUyOGNkNGM1MzM4MjJmMWY2NTg2YmJmZDg0MzUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURl
Y29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0zOCw2ICszOCw3IEBAIExhenlEZWNvZGluZ1BpeGVsUmVm
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZihQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGZy
YW1lCiAgICAgLCBtX2ZyYW1lR2VuZXJhdG9yKGZyYW1lR2VuZXJhdG9yKQogICAgICwgbV9zY2Fs
ZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX3NjYWxlZFN1YnNldChzY2FsZWRTdWJzZXQpCisg
ICAgLCBtX2xvY2tlZENhY2hlZEltYWdlKDApCiB7CiB9CiAKQEAgLTU4LDE4ICs1OSwyOSBAQCBi
b29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQoKSBjb25zdAogdm9pZCogTGF6eURl
Y29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKikKIHsKICAgICBtX211
dGV4LmxvY2soKTsKLSAgICBBU1NFUlQobV9sb2NrZWRCaXRtYXAuaXNOdWxsKCkpOwotICAgIG1f
bG9ja2VkQml0bWFwID0gbV9mcmFtZUdlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUobV9zY2FsZWRT
aXplLCBtX3NjYWxlZFN1YnNldCk7Ci0gICAgaWYgKG1fbG9ja2VkQml0bWFwLmlzTnVsbCgpKQor
ICAgIEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZSk7CisKKyAgICBtX2xvY2tlZENhY2hlZElt
YWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVDYWNoZSht
X2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUpOworCisgICAgLy8gVXNlIEltYWdl
RnJhbWVHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgdGhlIGltYWdlLiBJdCB3aWxsIGxvY2sgdGhlIGNh
Y2hlCisgICAgLy8gZW50cnkgZm9yIHVzLgorICAgIGlmICghbV9sb2NrZWRDYWNoZWRJbWFnZSkK
KyAgICAgICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IG1fZnJhbWVHZW5lcmF0b3ItPmRlY29kZUFu
ZFNjYWxlKG1fc2NhbGVkU2l6ZSk7CisKKyAgICBpZiAoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIG1fbG9ja2VkQml0bWFwLmxvY2tQaXhlbHMoKTsKLSAgICBy
ZXR1cm4gbV9sb2NrZWRCaXRtYXAuZ2V0QWRkcigwLCAwKTsKKworICAgIEFTU0VSVCghbV9sb2Nr
ZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAgIEFTU0VSVChtX2xvY2tlZENh
Y2hlZEltYWdlLT5zY2FsZWRTaXplKCkgPT0gbV9zY2FsZWRTaXplKTsKKyAgICByZXR1cm4gbV9s
b2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuZ2V0QWRkcihtX3NjYWxlZFN1YnNldC54KCksIG1f
c2NhbGVkU3Vic2V0LnkoKSk7CiB9CiAKIHZvaWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5s
b2NrUGl4ZWxzKCkKIHsKLSAgICBtX2xvY2tlZEJpdG1hcC51bmxvY2tQaXhlbHMoKTsKLSAgICBt
X2xvY2tlZEJpdG1hcC5yZXNldCgpOworICAgIGlmIChtX2xvY2tlZENhY2hlZEltYWdlKSB7Cisg
ICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9mcmFt
ZUdlbmVyYXRvci5nZXQoKSwgbV9sb2NrZWRDYWNoZWRJbWFnZSk7CisgICAgICAgIG1fbG9ja2Vk
Q2FjaGVkSW1hZ2UgPSAwOworICAgIH0KICAgICBtX211dGV4LnVubG9jaygpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVj
b2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaAppbmRleCA4MDMxNGNmMjFmN2EwYWJjYmUxNDMwODhm
YjBkYzZhZWUyZDBiNDI3Li4xYTgxYmIzZTBlYzZkNWYwNjE3NzI2ZjZmMjcyN2FhYmM4ODhkMTU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKQEAgLTM4LDYgKzM4LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKK2NsYXNzIFNj
YWxlZEltYWdlRnJhZ21lbnQ7CiAKIGNsYXNzIExhenlEZWNvZGluZ1BpeGVsUmVmIDogcHVibGlj
IFNrUGl4ZWxSZWYgewogcHVibGljOgpAQCAtNjEsNyArNjIsNyBAQCBwcml2YXRlOgogICAgIFNr
SVNpemUgbV9zY2FsZWRTaXplOwogICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7CiAKLSAgICBT
a0JpdG1hcCBtX2xvY2tlZEJpdG1hcDsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBtX2xvY2tl
ZENhY2hlZEltYWdlOwogICAgIE11dGV4IG1fbXV0ZXg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZElt
YWdlRnJhZ21lbnQuY3BwCmluZGV4IDk3NGU2ZmY4NDdlYzViNWRkNDY5NThmMjBiZDQ4MTI5Mzli
ZDM1NzMuLjcxYmI2MjBhZWI0NzY5NDU0YWY1NTJmYzY1OTVjYTg5N2I5ZDU0NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdl
RnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCkBAIC0zMywyMiArMzMsMTEgQEAgU2NhbGVkSW1h
Z2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQoKQogewogfQogCi1TY2FsZWRJbWFnZUZy
YWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUp
Ci0gICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKLSAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXpl
KQorU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBTa0lTaXpl
JiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxl
dGUpCisgICAgOiBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKICAgICAsIG1fYml0bWFwKGJpdG1h
cCkKICAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBsZXRlKQogewogfQogCi1ib29sIFNjYWxlZElt
YWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdlSWQgPT0gbV9pbWFnZUlkICYmIHNjYWxlZFNp
emUgPT0gbV9zY2FsZWRTaXplOwotfQotCi1ib29sIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmlzRXF1
YWwoaW50IGltYWdlSWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdlSWQgPT0gbV9pbWFnZUlk
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50
LmgKaW5kZXggNWI3ZmZjOTYwMTRlMDU3M2U4MzUwNzgwMmI2NmYzNGQ5YmNkM2Y2ZC4uZjA3MDdi
M2NlMzRjNjQ0ZjViYjc1MTRmZDY0YjFkZjJkMDcxMmM3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdl
RnJhZ21lbnQuaApAQCAtMzQsMjkgKzM0LDIzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ly8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0
IGlzIGlkZW50aWZpZWQKLS8vIGJ5IHR3byB0aGluZ3M6Ci0vLyAxLiBJbWFnZSBJRC4gVGhlIG9y
aWdpbmFsIGltYWdlIHRoYXQgdGhpcyBmcmFnbWVudCBjb21lcyBmcm9tLgotLy8gMi4gU2NhbGVk
IGltYWdlIHNpemUuCisvLyBTY2FsZWRJbWFnZUZyYWdtZW50IGlzIGEgc2NhbGVkIHZlcnNpb24g
b2YgYW4gaW1hZ2UuCiBjbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGUoaW50IGltYWdlSWQs
IGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wg
aXNDb21wbGV0ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBj
cmVhdGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
Ym9vbCBpc0NvbXBsZXRlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2Fs
ZWRJbWFnZUZyYWdtZW50KGltYWdlSWQsIHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjYWxlZEltYWdlRnJhZ21lbnQoc2NhbGVk
U2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CiAgICAgfQogCi0gICAgU2NhbGVkSW1hZ2VGcmFn
bWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwgYm9vbCBp
c0NvbXBsZXRlKTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KGNvbnN0IFNrSVNpemUmLCBjb25z
dCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CiAgICAgflNjYWxlZEltYWdlRnJhZ21lbnQo
KTsKIAorICAgIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Nj
YWxlZFNpemU7IH0KICAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRtYXA7IH0KICAgICBTa0JpdG1hcCYgYml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0K
LQotICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSkgY29uc3Q7Ci0gICAgYm9vbCBpc0VxdWFsKGludCBpbWFnZUlkKSBjb25zdDsKICAgICBib29s
IGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0KIAogcHJpdmF0ZToK
LSAgICBpbnQgbV9pbWFnZUlkOwogICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOwogICAgIFNrQml0
bWFwIG1fYml0bWFwOwogICAgIGJvb2wgbV9pc0NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAwZmMzM2VjNmZjNTQ1NmM3ZWE4NDI0MDI2YmJhY2RjZWI4YjQyZjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1NpemVI
YXNoLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2tTaXplSGFzaF9oCisj
ZGVmaW5lIFNrU2l6ZUhhc2hfaAorCisjaW5jbHVkZSAiU2tUeXBlcy5oIgorI2luY2x1ZGUgIlNr
U2l6ZS5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8U2tTaXplPiB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgU2tTaXplJiBrZXkpIHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS53aWR0aCgp
LCBrZXkuaGVpZ2h0KCkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2tTaXplJiBh
LCBjb25zdCBTa1NpemUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFNrU2l6ZT4geworICAgIHR5cGVkZWYgSW50SGFzaDxTa1Np
emU+IEhhc2g7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFNrU2l6ZT4gOiBH
ZW5lcmljSGFzaFRyYWl0czxTa1NpemU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gZmFsc2U7CisgICAgc3RhdGljIFNrU2l6ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gU2tTaXpl
OjpNYWtlKDAsIDApOyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNr
U2l6ZSYgc2xvdCkKKyAgICB7CisgICAgICAgIHNsb3QgPSBTa1NpemU6Ok1ha2UoLTEsIC0xKTsK
KyAgICB9CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgU2tTaXplJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVlLmhl
aWdodCgpID09IC0xOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8U2tJ
U2l6ZT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNrSVNpemUmIGtleSkgeyBy
ZXR1cm4gcGFpckludEhhc2goa2V5LndpZHRoKCksIGtleS5oZWlnaHQoKSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBTa0lTaXplJiBhLCBjb25zdCBTa0lTaXplJiBiKSB7IHJldHVy
biBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTa0lT
aXplPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPFNrSVNpemU+IEhhc2g7Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFNrSVNpemU+IDogR2VuZXJpY0hhc2hUcmFpdHM8U2tJU2l6
ZT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aWMg
U2tJU2l6ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSgwLCAwKTsgfQorICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShTa0lTaXplJiBzbG90KQorICAgIHsK
KyAgICAgICAgc2xvdCA9IFNrSVNpemU6Ok1ha2UoLTEsIC0xKTsKKyAgICB9CisgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgU2tJU2l6ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUud2lkdGgoKSA9PSAtMSAmJiB2YWx1ZS5oZWlnaHQoKSA9PSAtMTsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFNrU2l6ZUhhc2hfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZGQ1ZDZjZjFiNmJlOGIwY2IwOTdlZjBl
MjU0ZmQwMTAzZWYzZDA3ZC4uZGY1MGFmZmM1OTExMjE5MmU3NTA1ZjVlMmI4MDU4N2JjOWQ1ZGQ3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04MCw2ICs4MCw3IEBACiAgICAg
ICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9J
REJMZXZlbERCQ29kaW5nVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RU
ZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICd0ZXN0cy9L
ZXlib2FyZFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYktpdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCmluZGV4
IDI0M2QwOGU2Mjk0ODA1Njk3OTM2MmRmY2Y4NThjNmZmODVlOGE3NjguLjQ0NmE5YjZkYTc3NmRh
YWQ2Yzc0MGQ4YTQ3ZGFhMjUzZTQ4NjRjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYktpdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
S2l0LmNwcApAQCAtMTM0LDYgKzEzNCw3IEBAIHZvaWQgaW5pdGlhbGl6ZVdpdGhvdXRWOChXZWJL
aXRQbGF0Zm9ybVN1cHBvcnQqIHdlYktpdFBsYXRmb3JtU3VwcG9ydCkKICAgICBBU1NFUlQoIXNf
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KTsKICAgICBzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCA9IHdl
YktpdFBsYXRmb3JtU3VwcG9ydDsKICAgICBQbGF0Zm9ybTo6aW5pdGlhbGl6ZShzX3dlYktpdFBs
YXRmb3JtU3VwcG9ydCk7CisgICAgV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFs
aXplT25jZSgpOwogCiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjpp
bml0aWFsaXplTWFpblRocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5jcHAKaW5kZXggNjQ2ZGM1M2Y4YzBlMTlhYmRkYmI5MDkzMzUzNWMxMDFi
OTA4MzhmMi4uMTk5NDAzMzRkZmZjMzYwMWQ3NmM1NWU2ZWQyZDI4ODFhZTI5YmE4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC0zMSw4
ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViU2V0dGluZ3NJbXBs
LmgiCiAKKyNpbmNsdWRlICJEZWZlcnJlZEltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkZvbnRS
ZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8
cHVibGljL1dlYlVSTC5oPgpAQCAtNTAwLDEwICs1MDAsNyBAQCB2b2lkIFdlYlNldHRpbmdzSW1w
bDo6c2V0RGVmZXJyZWQyZENhbnZhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFdlYlNl
dHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgaWYgKCFtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgJiYgZW5hYmxlZCkK
LSAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7Ci0g
ICAgaWYgKG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiAhZW5hYmxlZCkKLSAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIERlZmVycmVkSW1hZ2VEZWNv
ZGVyOjpzZXRFbmFibGVkKGVuYWJsZWQpOwogICAgIG1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCA9IGVuYWJsZWQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcAppbmRleCA0YmNjMjk4ODIyZTUy
ZTMwZDFjNGVhZjYzMDY4MGE5YWU2NTlmZmQyLi43ZmQ0MDE3YTZlNDBiZmZjYWY3N2RmNmNjZjEx
ZjA1MjY0YThmNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC03Myw3ICs3Myw4IEBAIGNsYXNz
IERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QsIHB1Ymxp
YyBNb2NrSW1hZ2VEZWNvZGVyCiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAg
ICB7Ci0gICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgp
OworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAg
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRFbmFibGVkKHRydWUpOwogICAgICAgICBtX2RhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh3aGl0ZVBORywgc2l6ZW9mKHdoaXRlUE5HKSk7CiAgICAg
ICAgIG1fYWN0dWFsRGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKHRoaXMpOwogICAgICAg
ICBtX2FjdHVhbERlY29kZXItPnNldFNpemUoMSwgMSk7CkBAIC05MCwxMCArOTEsMTkgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpCiAgICAgewot
ICAgICAgICBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50ID0gbV9hY3R1YWxEZWNvZGVyLT5mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudCgpOwogICAgICAgICBtX2FjdHVhbERlY29kZXIgPSAwOwogICAg
IH0KIAorICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpCisgICAgeworICAg
ICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgfQorCisgICAgdmlydHVhbCBJ
bWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBmcmFtZVN0YXR1cygpCisgICAgeworICAgICAgICByZXR1
cm4gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICAv
LyBEb24ndCBvd24gdGhpcyBidXQgc2F2ZXMgdGhlIHBvaW50ZXIgdG8gcXVlcnkgc3RhdGVzLgog
ICAgIE1vY2tJbWFnZURlY29kZXIqIG1fYWN0dWFsRGVjb2RlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjMxMGI5NGE2YTA3YzE0OTRmNjAzMTBmMTU1NjM4YzExNDAzMjMyYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVy
YXRvclRlc3QuY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiTW9ja0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdDsKKworLy8gSGVscGVyIG1ldGhvZHMgdG8gZ2VuZXJhdGUgc3RhbmRhcmQgc2l6ZXMuCitT
a0lTaXplIGZ1bGxTaXplKCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSgxMDAsIDEwMCk7IH0KK1Nr
SVNpemUgc2NhbGVkU2l6ZSgpIHsgcmV0dXJuIFNrSVNpemU6Ok1ha2UoNTAsIDUwKTsgfQorCitj
bGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDsKKworY2xhc3MgTW9ja0ltYWdlRGVjb2RlckZh
Y3RvcnkgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyRmFjdG9yeSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk+IGNyZWF0ZShJbWFnZUZyYW1lR2Vu
ZXJhdG9yVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTW9j
a0ltYWdlRGVjb2RlckZhY3RvcnkodGVzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093
blB0cjxJbWFnZURlY29kZXI+IGNyZWF0ZSgpOworCitwcml2YXRlOgorICAgIE1vY2tJbWFnZURl
Y29kZXJGYWN0b3J5KEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KiB0ZXN0KQorICAgICAgICA6IG1f
dGVzdCh0ZXN0KQorICAgIHsKKyAgICB9CisKKyAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCog
bV90ZXN0OworfTsKKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QgOiBwdWJsaWMgOjp0
ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoKTsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUo
ZnVsbFNpemUoKSwgbV9kYXRhLCB0cnVlKTsKKyAgICAgICAgbV9nZW5lcmF0b3ItPnNldEltYWdl
RGVjb2RlckZhY3RvcnlGb3JUZXN0aW5nKE1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUo
dGhpcykpOworICAgICAgICBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50ID0gMDsKKyAgICAgICAg
bV9mcmFtZVN0YXR1cyA9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
c2h1dGRvd24oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJv
eWVkKCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVz
dGVkKCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ZyYW1lU3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlQ29tcGxldGVJbWFnZShj
b25zdCBTa0lTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgU2tCaXRtYXAgYml0bWFwOworICAg
ICAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7Cisg
ICAgICAgIHJldHVybiBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2l6ZSwgYml0bWFwLCB0
cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1l
U3RhdHVzIHN0YXR1cykgIHsgbV9mcmFtZVN0YXR1cyA9IHN0YXR1czsgfQorCisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBt
X2dlbmVyYXRvcjsKKyAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICBJbWFn
ZUZyYW1lOjpGcmFtZVN0YXR1cyBtX2ZyYW1lU3RhdHVzOworfTsKKworUGFzc093blB0cjxJbWFn
ZURlY29kZXI+IE1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUoKQoreworICAgIE1vY2tJ
bWFnZURlY29kZXIqIGRlY29kZXIgPSBuZXcgTW9ja0ltYWdlRGVjb2RlcihtX3Rlc3QpOworICAg
IGRlY29kZXItPnNldFNpemUoZnVsbFNpemUoKS53aWR0aCgpLCBmdWxsU2l6ZSgpLmhlaWdodCgp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIoZGVjb2Rlcik7Cit9CisKK1RFU1RfRihJbWFnZUZyYW1l
R2VuZXJhdG9yVGVzdCwgY2FjaGVIaXQpCit7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVs
bEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2Fj
aGUoCisgICAgICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdlKGZ1bGxT
aXplKCkpKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUoKSwgZnVsbEltYWdlLT5zY2FsZWRTaXpl
KCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIGZ1bGxJbWFnZSk7CisKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0
ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAg
RVhQRUNUX0VRKGZ1bGxJbWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUo
KSwgdGVtcEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAg
RVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworfQorCitURVNUX0YoSW1h
Z2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhTY2FsZSkKK3sKKyAgICBTY2FsZWRJ
bWFnZUZyYWdtZW50KiBmdWxsSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
Pmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNyZWF0ZUNv
bXBsZXRlSW1hZ2UoZnVsbFNpemUoKSkpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCBmdWxs
SW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKworICAgIC8vIENh
Y2hlIG1pc3MgYmVjYXVzZSBvZiBzY2FsZWQgc2l6ZSBub3QgZm91bmQuCisgICAgU2NhbGVkSW1h
Z2VGcmFnbWVudCogc2NhbGVkSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2Nh
bGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfTkUoZnVsbEltYWdlLCBzY2FsZWRJbWFnZSk7CisgICAg
RVhQRUNUX0VRKHNjYWxlZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5n
ZXQoKSwgc2NhbGVkSW1hZ2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIFNjYWxlZEltYWdl
RnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKCkpOworICAgIEVYUEVDVF9FUShzY2FsZWRJbWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBF
Q1RfRVEoc2NhbGVkU2l6ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwg
dGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7
Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aERlY29k
ZUFuZFNjYWxlKQoreworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGUpOworCisgICAgLy8gQ2FjaGUgbWlzcy4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBzY2Fs
ZWRJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAg
IEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEo
c2NhbGVkU2l6ZSgpLCBzY2FsZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBzY2Fs
ZWRJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBoaXQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCog
ZnVsbEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAg
IEVYUEVDVF9ORShzY2FsZWRJbWFnZSwgZnVsbEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNp
emUoKSwgZnVsbEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIGZ1bGxJbWFnZSk7CisK
KyAgICAvLyBDYWNoZSBoaXQuCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0g
bV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VR
KHNjYWxlZEltYWdlLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHRl
bXBJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVD
VF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKK30KKworLy8gVGVzdCB0aGF0IGlu
Y29tcGxldGUgZnJhbWVzIGFyZSBub3QgY2FjaGVkLgorVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkKK3sKKyAgICBzZXRGcmFtZVN0
YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOworCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHRlbXBJbWFnZSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2Nh
bGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisKKyAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRv
ci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMywgbV9mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNv
ZGVyLmgKaW5kZXggYzljMGQwMWQ2ZDgzODIwOTJiMDc0Yjk0ZTRkZDlmZDdhZTFjODY4My4uOGI0
ZjQwMzgyMzljMjk1ZGU0OGM5ZGVlZDdmMzllZjhhZDU4ZjA3NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAgLTMyLDYgKzMyLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKSA9IDA7CisgICAgdmlydHVhbCBJbWFn
ZUZyYW1lOjpGcmFtZVN0YXR1cyBmcmFtZVN0YXR1cygpID0gMDsKIH07CiAKIGNsYXNzIE1vY2tJ
bWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKQEAgLTU1LDkgKzU3LDExIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qp
CiAgICAgewogICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgICAgIG1f
Y2xpZW50LT5mcmFtZUJ1ZmZlclJlcXVlc3RlZCgpOwogCiAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUoMSk7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTaXplKHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF0uc2V0U3RhdHVzKG1fY2xpZW50LT5mcmFtZVN0YXR1cygpKTsKICAgICAgICAgcmV0dXJu
ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176052</attachid>
            <date>2012-11-26 13:21:16 -0800</date>
            <delta_ts>2012-11-26 15:18:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121126131854.patch</filename>
            <type>text/plain</type>
            <size>49404</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM1NTk5ZWIyNTcwMTU2
M2IxZWFiMmQ5MWYwNWQ3Yjg5ZDljZmQyZi4uYzJlODUxOTFlMWU1YTZkNzcxMDMyYWYzNTQ3MzQ4
ZDA0MDNjMWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTI1ICBOaWtpdGEgVmFzaWx5ZXYgIDxtZUBlbHYxcy5ydT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1c2UgbmF0aXZlIEVsZW1lbnQucHJvdG90eXBlLm5vcm1hbGl6ZSBp
bnN0ZWFkIG9mIGN1c3RvbSBkZWZpbmVkIEVsZW1lbnQucHJvdG90eXBlLnBydW5lRW1wdHlUZXh0
Tm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjRhYmFmYjI1YmU3NTUyNjBkMGM2
OWU5OTVjN2RkMzExMjE0YjkzYS4uOWQ5MWU4OTY1OWEyYjAyMjJkYTk3Nzk5ZmQzZTk3YTcwZTVl
MTU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMi0x
MS0yNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gSW1wbGVtZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QgdG8gdGVzdCBjYWNoZSBsb2dpYyBhbmQgZ2VuZXJhdGlvbgorICAgICAgICBvZiBuZXcgY2Fj
aGUgZW50cmllcy4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZUhpdAor
ICAgICAgICBUZXN0IHRoYXQgYSBjb21wbGV0ZSBjYWNoZWQgZW50cnkgaXMgcmV1c2VkLgorCisg
ICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlTWlzc1dpdGhTY2FsZQorICAgICAg
ICBDYWNoZSBtaXNzIGZvciBhIHNjYWxlZCBpbWFnZSBidXQgY2FjaGUgaGl0IG9uIGEgZnVsbCBz
aXplIGltYWdlLgorICAgICAgICBTY2FsZWQgaW1hZ2UgaXMgY3JlYXRlZCBmcm9tIGNhY2hlZCBm
dWxsIHNpemUgaW1hZ2UuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVN
aXNzV2l0aERlY29kZUFuZFNjYWxlCisgICAgICAgIENhY2hlIG1pc3MgZm9yIGJvdGggc2NhbGVk
IGltYWdlIGFuZCBmdWxsIHNpemUgaW1hZ2UuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3QuY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUKKyAgICAgICAgVGVzdCB0aGUgbG9n
aWMgZm9yIGhhbmRsaW5nIGluY29tcGxldGUgY2FjaGUgb2JqZWN0cy4KKworICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgorICAgICAgICAoV2ViS2l0Ojpp
bml0aWFsaXplV2l0aG91dFY4KToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpTZXRVcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmRlY29kZXJCZWluZ0Rl
c3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmZy
YW1lQnVmZmVyUmVxdWVzdGVkKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmZyYW1lU3RhdHVz
KToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmdWxsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzY2FsZWRTaXplKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXJGYWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6Ok1vY2tJbWFnZURlY29k
ZXJGYWN0b3J5KToKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpTZXRVcCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmRlY29kZXJCZWluZ0Rlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZnJhbWVCdWZmZXJSZXF1ZXN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lU3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpjcmVhdGVD
b21wbGV0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
OjpzZXRGcmFtZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAq
IHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KToKKwogMjAxMi0xMS0yNCAgU2lsdmlhIFBmZWlmZmVyICA8c2lsdmlhcGZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRyYWNlcyBvZiBNZWRpYUNvbnRyb2xS
b290RWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCmluZGV4IDE0ZGU2
OTRlODMzY2FlMDc5MDkwMTkyNzg0ZDgwNDkwYjM0MThhYTkuLmZmOGJmMzA4YjRjZTZjMGQyMmEy
Njk4OGNkMDQyMWUzOTkwNjk4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5j
cHAKQEAgLTQwLDYgKzQwLDggQEAgY29uc3QgY2hhciBsYWJlbExhenlEZWNvZGVkW10gPSAibGF6
eSI7CiAKIH0gLy8gbmFtZXNwYWNlCiAKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNfZW5h
YmxlZCA9IGZhbHNlOworCiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29k
ZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQogICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQo
ZmFsc2UpCiAgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCkBA
IC00OSw4ICs1MSw2IEBAIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2Rl
cihJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCiAKIERlZmVycmVkSW1hZ2VEZWNvZGVyOjp+
RGVmZXJyZWRJbWFnZURlY29kZXIoKQogewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJl
c3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdlCi0gICAgLy8gaXMg
ZGVmZXItZGVjb2RlZC4KIH0KIAogRGVmZXJyZWRJbWFnZURlY29kZXIqIERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQpAQCAtODAsNiArODAsMTAgQEAgU2tCaXRtYXAgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3Qg
U2tCaXRtYXAmIGIKIAogICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CiAgICAgcmVzaXplZEJp
dG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJzZXQu
d2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBjb2RlIGhhcyB0aGUgcG90ZW50aWFsIHByb2JsZW0gdGhhdCBtdWx0aXBsZQorICAg
IC8vIExhenlEZWNvZGluZ1BpeGVsUmVmcyBhcmUgY3JlYXRlZCBldmVuIHRob3VnaCB0aGV5IHNo
YXJlIHRoZSBzYW1lCisgICAgLy8gc2NhbGVkIHNpemUgYW5kIEltYWdlRnJhbWVHZW5lcmF0b3Iu
CiAgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYo
cGl4ZWxSZWYtPmZyYW1lR2VuZXJhdG9yKCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51
bnJlZigpOwogCiAgICAgLy8gU2VlIGNvbW1lbnRzIGluIGNyZWF0ZUxhenlEZWNvZGluZ0JpdG1h
cCgpLgpAQCAtODcsNiArOTEsMTEgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNy
ZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGIKICAgICByZXR1
cm4gcmVzaXplZEJpdG1hcDsKIH0KIAordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgc19lbmFibGVkID0gZW5hYmxlZDsKK30KKwogU3Ry
aW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRl
bnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247CkBAIC05OCw3ICsxMDcsNyBAQCBJbWFnZUZy
YW1lKiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKICAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVkIEdJRi4g
QW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKICAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1c2VzIHNv
bWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG8gc3luY2hyb25vdXMgaW1hZ2UKICAgICAvLyBk
ZWNvZGluZy4KLSAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVh
ZCgpCisgICAgaWYgKHNfZW5hYmxlZAogICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIKICAgICAg
ICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA9PSBjQW5pbWF0aW9uTm9u
ZQogICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CkBAIC0y
MDAsNyArMjA5LDcgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUxhenlE
ZWNvZGluZ0JpdG1hcCgpCiAgICAgU2tCaXRtYXAgYml0bWFwOwogICAgIGJpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBmdWxsU2l6
ZS5oZWlnaHQoKSk7CiAKLSAgICBtX2ZyYW1lR2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6Y3JlYXRlKG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBtX2Zy
YW1lR2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplLCBtX2Rh
dGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CiAgICAgbV9hY3R1YWxEZWNvZGVyLmNs
ZWFyKCk7CiAKICAgICBiaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVm
KG1fZnJhbWVHZW5lcmF0b3IsIGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKaW5kZXggYjc5NTA0OWYwYzgzYWQ4ODYwMjI0MzQ4MzZj
ZDc3MjJlZjBjZjU0Zi4uNWRmOTIzNTRiZGRkMDljOGRiM2MxMTZmNmE1N2JiOTk2NzRiMTAzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVm
ZXJyZWRJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTa0JpdG1hcCBjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFw
KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KTsKIAorICAgIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisK
ICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAogICAgIEltYWdlRnJhbWUq
IGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwpAQCAtNzksNiArODEsOCBAQCBwcml2
YXRlOgogCiAgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7CiAgICAgUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+IG1fZnJhbWVHZW5lcmF0b3I7CisKKyAgICBzdGF0aWMgYm9vbCBz
X2VuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcAppbmRleCA0NDllNDUyNTRlODk1YzAzMzI2YjRkNTdhMDViYmQxMTE5YmIz
OWI1Li5lOTNjYjFkM2QxNTc5Yjc0Njg2ZTBmMTEzN2JmMGFiMTZlYzM5ZDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTI2LDIxICsyNiwyMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogCisjaW5jbHVkZSAiSW1h
Z2VGcmFtZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlNjYWxlZEltYWdlRnJhZ21lbnQuaCIKLQot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotSW1hZ2VEZWNvZGluZ1N0b3Jl
KiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKK0ltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0
YW5jZSA9IDA7CiAKLXN0YXRpYyB2b2lkIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVj
b2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQorc3RhdGljIHZvaWQgc2V0SW5zdGFuY2Uo
SW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCiB7Ci0gICAgZGVsZXRlIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7Ci0gICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdl
RGVjb2RpbmdTdG9yZTsKKyAgICBkZWxldGUgc19pbnN0YW5jZTsKKyAgICBzX2luc3RhbmNlID0g
aW1hZ2VEZWNvZGluZ1N0b3JlOwogfQorCiB9IC8vIG5hbWVzcGFjZQogCiBJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCkBAIC01MSw0NiArNTIsOTQgQEAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKIHsKIH0KIAotSW1hZ2VEZWNvZGluZ1N0
b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKK0ltYWdlRGVj
b2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAg
ICByZXR1cm4gc19pbnN0YW5jZTsKIH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbk1haW5UaHJlYWQoKQordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVP
bmNlKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHNldEluc3RhbmNlT25N
YWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKKyAgICBz
ZXRJbnN0YW5jZShJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7CiB9CiAK
IHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCiB7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKKyAgICBzZXRJbnN0
YW5jZSgwKTsKIH0KIAotYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJl
YWQoKSBjb25zdAorU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2Nr
Q29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1h
aW5UaHJlYWQoKSAmJiBpc01haW5UaHJlYWQoKTsKKyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5
ID0gMDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAg
IENhY2hlTWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWly
KGdlbmVyYXRvciwgc2NhbGVkU2l6ZSkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlTWFw
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhY2hlRW50cnkgPSBpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+aXNDb21wbGV0
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHVzZSBj
b3VudCBzdWNoIHRoYXQgaXQgZG9lc24ndCBnZXQgZXZpY3RlZC4KKyAgICAgICAgKytjYWNoZUVu
dHJ5LT51c2VDb3VudDsKKyAgICB9CisgICAgY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmJpdG1h
cCgpLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UuZ2V0
KCk7CiB9CiAKLVNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3Vw
RnJhbWVDYWNoZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QK
K1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0luY29tcGxldGVD
YWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpbWFn
ZUlkLCBzY2FsZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVbaV0uZ2V0
KCk7Ci0gICAgfQorICAgIC8vIFRPRE86IEltcGxlbWVudC4KICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpCit2
b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVy
YXRvciogZ2VuZXJhdG9yLCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkKIHsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdlSWQpKSB7Ci0gICAgICAgICAg
ICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygpOworICAgIGlmICghY2Fj
aGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBEZWxldGUgdGhlIGltYWdlIGlm
IGl0IGlzIGluY29tcGxldGUuIEl0IHdhcyBuZXZlciBzdG9yZWQgaW4gY2FjaGUuCisgICAgICAg
IGRlbGV0ZSBjYWNoZWRJbWFnZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIE11dGV4
TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgQ2FjaGVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
Y2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVk
U2l6ZSgpKSk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1hcC5lbmQoKSk7CisKKyAgICBD
YWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7CisgICAgLS1jYWNoZUVudHJ5LT51
c2VDb3VudDsKKyAgICBBU1NFUlQoY2FjaGVFbnRyeS0+dXNlQ291bnQgPj0gMCk7Cit9CisKK1Nj
YWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hl
KGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJ
bWFnZUZyYWdtZW50PiBpbWFnZSkKK3sKKyAgICAvLyBQcnVuZSBvbGQgY2FjaGUgZW50cmllcyB0
byBnaXZlIHNwYWNlIGZvciB0aGUgbmV3IG9uZS4KKyAgICBwcnVuZSgpOworCisgICAgLy8gTG9j
ayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHVyZ2Vk
LgorICAgIGltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7CisKKyAgICBpZiAoIWltYWdlLT5p
c0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gSW5jb21wbGV0ZSBpbWFnZSBpcyBub3Qgc3RvcmVk
IGluIHRoZSBjYWNoZSBhbmQgZGVsZXRlZCBhZnRlciB1c2UuCisgICAgICAgIC8vIFNlZSB1bmxv
Y2tDYWNoZSgpLgorICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgYWxsb3cgaW5jb21wbGV0ZSBp
bWFnZXMgdG8gYmUgc3RvcmVkIHRvZ2V0aGVyIHdpdGgKKyAgICAgICAgLy8gdGhlIGNvcnJlc3Bv
bmRpbmcgSW1hZ2VEZWNvZGVyLgorICAgICAgICByZXR1cm4gaW1hZ2UubGVha1B0cigpOworICAg
IH0KKworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gaW1hZ2UuZ2V0KCk7
CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50cnkgPSBDYWNoZUVudHJ5OjpjcmVh
dGVBbmRVc2UoaW1hZ2UpOworCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IHN0ZDo6bWFrZV9w
YWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX211dGV4KTsKKyAgICBBU1NFUlQoIW1fY2FjaGVNYXAuY29udGFpbnMoa2V5KSk7
CisgICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNoZUVudHJ5LmdldCgpKTsKKyAgICBtX2Nh
Y2hlRW50cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5yZWxlYXNlKCkpOworICAgIHJldHVybiBj
YWNoZWRJbWFnZTsKK30KKwordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKCkKK3sKKyAg
ICAvLyBUT0RPOiBJbXBsZW1lbnQuCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggYTZmYTU2MTk0ZmUxNTUzMTNlMWIxYmIyOGYxMTEy
MjZiMjAyN2Y3ZS4uN2Y2MTdhZjQwZGRlY2RhNGE4MTUxZGViZTQ0Yjc4MzZjYmE1ODI3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VE
ZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTI2LDQwICsyNiw3MyBAQAogI2lmbmRlZiBJ
bWFnZURlY29kaW5nU3RvcmVfaAogI2RlZmluZSBJbWFnZURlY29kaW5nU3RvcmVfaAogCisjaW5j
bHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgogI2luY2x1ZGUgIlNrVHlwZXMuaCIKICNpbmNs
dWRlICJTa1NpemUuaCIKKyNpbmNsdWRlICJTa1NpemVIYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURlY29kZXI7CiBjbGFzcyBJbWFnZUZyYW1lR2VuZXJh
dG9yOwotY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAot
Ly8gVGhpcyBjbGFzcyBjYW4gb25seSBiZSBpbnN0YW50aWF0ZWQgb24gbWFpbiB0aHJlYWQuIFRo
ZXJlIHdpbGwgYmUgYW4KLS8vIGluc3RhbmNlIG9uIGltcGwgdGhyZWFkIGluIHRoZSBmdXR1cmUg
YnV0IHRoYXQgcGFydCBvZiBpbXBsZW1lbnRhdGlvbgotLy8gaXMgaW5jb21wbGV0ZS4gU2VlIGJ1
ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MjQwCi0vLyBmb3Ig
ZGV0YWlscy4KIGNsYXNzIEltYWdlRGVjb2RpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0
cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQogICAgIH5JbWFnZURlY29kaW5nU3RvcmUoKTsK
IAotICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlT25NYWluVGhyZWFkKCk7
Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOworICAgIHN0YXRpYyBJ
bWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlKCk7CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZU9uY2UoKTsKICAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOwogCisgICAgU2NhbGVkSW1hZ2VG
cmFnbWVudCogbG9ja0NvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGxvY2tJ
bmNvbXBsZXRlQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpOworICAgIHZvaWQgdW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVy
YXRvciosIFNjYWxlZEltYWdlRnJhZ21lbnQqKTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBp
bnNlcnRBbmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4pOworCiBwcml2YXRlOgorICAgIHN0cnVjdCBDYWNoZUVudHJ5
IHsKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnkoKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVu
dD4gaW1hZ2UpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KGltYWdlLCAxKSk7IH0K
KworICAgICAgICBDYWNoZUVudHJ5KCkKKyAgICAgICAgICAgIDogdXNlQ291bnQoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgQ2FjaGVFbnRyeShQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IGltYWdlLCBpbnQgY291bnQpCisgICAgICAgICAgICA6IGNhY2hlZEltYWdl
KGltYWdlKQorICAgICAgICAgICAgLCB1c2VDb3VudChjb3VudCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgfkNhY2hlRW50cnkoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQoIXVzZUNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBjYWNoZWRJbWFnZTsKKyAgICAgICAgaW50IHVzZUNvdW50OworICAgIH07CisKICAg
ICBJbWFnZURlY29kaW5nU3RvcmUoKTsKLSAgICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBj
b25zdDsKLSAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb29rdXBGcmFtZUNhY2hlKGludCBpbWFn
ZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKLSAgICB2b2lkIGRlbGV0ZUZy
YW1lQ2FjaGUoaW50IGltYWdlSWQpOworICAgIHZvaWQgcHJ1bmUoKTsKKworICAgIFZlY3RvcjxP
d25QdHI8Q2FjaGVFbnRyeT4gPiBtX2NhY2hlRW50cmllczsKKworICAgIHR5cGVkZWYgc3RkOjpw
YWlyPGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBTa0lTaXplPiBDYWNoZUlkZW50aWZpZXI7
CisgICAgdHlwZWRlZiBIYXNoTWFwPENhY2hlSWRlbnRpZmllciwgQ2FjaGVFbnRyeSo+IENhY2hl
TWFwOworICAgIENhY2hlTWFwIG1fY2FjaGVNYXA7CiAKLSAgICBWZWN0b3I8T3duUHRyPFNjYWxl
ZEltYWdlRnJhZ21lbnQ+ID4gbV9mcmFtZUNhY2hlOworICAgIC8vIFByb3RlY3QgY29uY3VycmVu
dCBhY2Nlc3MgdG8gYWxsIGluc3RhbmNlcyBvZiBDYWNoZUVudHJ5IHN0b3JlZCBpbiBtX2NhY2hl
RW50cmllcyBhbmQKKyAgICAvLyBtX2NhY2hlTWFwIGFzIHdlbGwgYXMgdGhlIGNvbnRhaW5lcnMu
CisgICAgTXV0ZXggbV9tdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKaW5kZXggZmU0ZTRiZmJlZGNjZjRkNDYyOTA5ZWRi
MmZjMTUyNTIxNTg3ZWM5Mi4uMWQ2OGYyYzE3NDczZmRiNDI5NTJmOWJmNzE2MDMyYzk4YzA3NDFm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTI4LDIwICsyOCwzNCBA
QAogI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNjYWxl
ZEltYWdlRnJhZ21lbnQuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUg
InNraWEvZXh0L2ltYWdlX29wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
bWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLSAgICA6IG1fYWxsRGF0YVJlY2Vp
dmVkKGZhbHNlKQorbmFtZXNwYWNlIHsKKworc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemVN
ZXRob2QgcmVzaXplTWV0aG9kKCkKK3sKKyAgICByZXR1cm4gc2tpYTo6SW1hZ2VPcGVyYXRpb25z
OjpSRVNJWkVfTEFOQ1pPUzM7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRnJhbWVHZW5l
cmF0b3I6OkltYWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKKyAgICA6IG1f
ZnVsbFNpemUoZnVsbFNpemUpCisgICAgLCBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKIHsKICAg
ICBzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKIEltYWdlRnJhbWVHZW5lcmF0
b3I6On5JbWFnZUZyYW1lR2VuZXJhdG9yKCkKIHsKKyAgICAvLyBUT0RPOiBDYWxsIEltYWdlRGVj
b2RpbmdTdG9yZSB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXhlZAorICAgIC8vIGJ5
IHRoaXMgb2JqZWN0LgogfQogCiB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpAQCAtNDks
MTcgKzYzLDY0IEBAIHZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjCiAgICAgLy8gRklYTUU6IERvaW5n
IGEgZnVsbCBjb3B5IGlzIGV4cGVuc2l2ZSwgaW5zdGVhZCBjb3B5IG9ubHkgbmV3IGRhdGEuCiAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YUNvcHkgPSBkYXRhLT5jb3B5KCk7CiAKLSAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRhTXV0
ZXgpOwogICAgIG1fZGF0YSA9IGRhdGFDb3B5OwogICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxs
RGF0YVJlY2VpdmVkOwogfQogCi1Ta0JpdG1hcCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVB
bmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpCitTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVB
bmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIC8vIFByZXZlbnRzIGNv
bmN1cnJlbnQgZGVjb2RlIG9yIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgaW1hZ2UgZGF0
YS4KKyAgICAvLyBNdWx0aXBsZSBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgY2FuIGNhbGwgdGhpcyBt
ZXRob2QgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGVjb2RlTXV0
ZXgpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKKworICAgIGNh
Y2hlZEltYWdlID0gdHJ5VG9Mb2NrQ2FjaGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZElt
YWdlKQorICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CisKKyAgICBjYWNoZWRJbWFnZSA9IHRy
eVRvU2NhbGUoMCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2U7CisKKyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvRGVjb2RlQW5kU2Nh
bGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4gY2Fj
aGVkSW1hZ2U7CisgICAgcmV0dXJuIDA7Cit9CisKK1NjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdl
RnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
Cit7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBs
ZXRlQ2FjaGUodGhpcywgc2NhbGVkU2l6ZSk7Cit9CisKK1NjYWxlZEltYWdlRnJhZ21lbnQqIElt
YWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUoU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbFNp
emVJbWFnZSwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAgICAvLyBJZiB0aGUgcmVx
dWVzdGVkIHNjYWxlZCBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBmdWxsIHNpemUgdGhlbiBleGl0
CisgICAgLy8gZWFybHkuIFRoaXMgc2F2ZXMgYSBjYWNoZSBsb29rdXAuCisgICAgaWYgKHNjYWxl
ZFNpemUgPT0gbV9mdWxsU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWZ1bGxT
aXplSW1hZ2UpCisgICAgICAgIGZ1bGxTaXplSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKHRoaXMsIG1fZnVsbFNpemUpOworCisgICAgaWYg
KCFmdWxsU2l6ZUltYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFNrQml0bWFwIHNjYWxl
ZEJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKAorICAgICAgICBmdWxsU2l6
ZUltYWdlLT5iaXRtYXAoKSwgcmVzaXplTWV0aG9kKCksIHNjYWxlZFNpemUud2lkdGgoKSwgc2Nh
bGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IHNjYWxl
ZEltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKHNjYWxlZFNpemUsIHNjYWxlZEJp
dG1hcCwgZnVsbFNpemVJbWFnZS0+aXNDb21wbGV0ZSgpKTsKKworICAgIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUodGhpcywgZnVsbFNpemVJbWFnZSk7CisgICAg
cmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hl
KHRoaXMsIHNjYWxlZEltYWdlLnJlbGVhc2UoKSk7Cit9CisKK1NjYWxlZEltYWdlRnJhZ21lbnQq
IEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKIHsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOwogICAgIGJvb2wg
YWxsRGF0YVJlY2VpdmVkID0gZmFsc2U7CiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOworICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fZGF0YU11dGV4KTsKIAogICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGEgc2hhbGxvdyBjb3B5IGluc3RlYWQuIE5vdyB3
ZSdyZSByZXN0cmljdGVkIGJ5IHRoZSBBUEkgb2YgU2hhcmVkQnVmZmVyLgogICAgICAgICBkYXRh
ID0gbV9kYXRhLT5jb3B5KCk7CkBAIC02NywyMiArMTI4LDI2IEBAIFNrQml0bWFwIEltYWdlRnJh
bWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNv
bnN0IFNrCiAgICAgfQogCiAgICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0
cihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YS5nZXQoKSwgSW1hZ2VTb3VyY2U6OkFscGhhUHJl
bXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsK
KyAgICBpZiAoIWRlY29kZXIgJiYgbV9pbWFnZURlY29kZXJGYWN0b3J5KQorICAgICAgICBkZWNv
ZGVyID0gbV9pbWFnZURlY29kZXJGYWN0b3J5LT5jcmVhdGUoKTsKICAgICBpZiAoIWRlY29kZXIp
Ci0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOworICAgICAgICByZXR1cm4gMDsKIAogICAgIGRl
Y29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBJbWFnZUZy
YW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKKyAgICBpZiAoIWZyYW1lIHx8IGZyYW1l
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGJvb2wgaXNDb21wbGV0ZSA9IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlOworICAgIFNrQml0bWFwIGZ1bGxTaXplQml0bWFwID0gZnJhbWUtPmdldFNr
Qml0bWFwKCk7CisgICAgQVNTRVJUKGZ1bGxTaXplQml0bWFwLndpZHRoKCkgPT0gbV9mdWxsU2l6
ZS53aWR0aCgpICYmIGZ1bGxTaXplQml0bWFwLmhlaWdodCgpID09IG1fZnVsbFNpemUuaGVpZ2h0
KCkpOwogCi0gICAgU2tCaXRtYXAgYml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7Ci0gICAg
U2tJU2l6ZSBiaXRtYXBTaXplID0gU2tJU2l6ZTo6TWFrZShiaXRtYXAud2lkdGgoKSwgYml0bWFw
LmhlaWdodCgpKTsKLSAgICBpZiAoYml0bWFwU2l6ZSAhPSBzY2FsZWRTaXplKQotICAgICAgICBi
aXRtYXAgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdl
T3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNp
emUuaGVpZ2h0KCkpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UgPSBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAg
ICAgdGhpcywgU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRlKG1fZnVsbFNpemUsIGZ1bGxTaXpl
Qml0bWFwLCBpc0NvbXBsZXRlKSk7CiAKLSAgICBTa0JpdG1hcCBiaXRtYXBTdWJzZXQ7Ci0gICAg
Yml0bWFwLmV4dHJhY3RTdWJzZXQoJmJpdG1hcFN1YnNldCwgc2NhbGVkU3Vic2V0KTsKLSAgICBy
ZXR1cm4gYml0bWFwU3Vic2V0OworICAgIGlmIChtX2Z1bGxTaXplID09IHNjYWxlZFNpemUpCisg
ICAgICAgIHJldHVybiBmdWxsU2l6ZUltYWdlOworICAgIHJldHVybiB0cnlUb1NjYWxlKGZ1bGxT
aXplSW1hZ2UsIHNjYWxlZFNpemUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKaW5kZXggNmRmNWIyM2NlZDE0YWU1MDk1NWFmNjNlODc4
ZTNiYTdkYTY1NDg5Mi4uM2UxNDhkMzVjZWU2Y2Y5MjE2YWY4ZWRhY2UwNmYwYWMwZGQwNjA3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaApAQCAtMzgsMjYgKzM4LDQ4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2NhbGVkSW1h
Z2VGcmFnbWVudDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAorY2xhc3MgSW1hZ2VEZWNvZGVyRmFj
dG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gY3Jl
YXRlKCkgPSAwOworfTsKKwogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9yPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZy
YW1lR2VuZXJhdG9yKGZ1bGxTaXplLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKICAgICB9CiAK
LSAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJU2l6ZSYg
ZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwogICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CiAKLSAgICBTa0JpdG1hcCBkZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJz
ZXQpOworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUpOwogCiAgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCisgICAgdm9pZCBzZXRJbWFnZURlY29kZXJG
YWN0b3J5Rm9yVGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2RlckZhY3Rvcnk+IGZhY3Rvcnkp
IHsgbV9pbWFnZURlY29kZXJGYWN0b3J5ID0gZmFjdG9yeTsgfQorCiBwcml2YXRlOgorICAgIC8v
IFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGlsZSBtX2RlY29kZU11dGV4IGlzIGxvY2tlZC4K
KyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb0xvY2tDYWNoZShjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplKTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb1NjYWxlKFNjYWxlZElt
YWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwor
ICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBTa0lTaXplIG1fZnVsbFNpemU7CiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0gICAgTXV0
ZXggbV9tdXRleDsKKworICAgIE93blB0cjxJbWFnZURlY29kZXJGYWN0b3J5PiBtX2ltYWdlRGVj
b2RlckZhY3Rvcnk7CisKKyAgICAvLyBQcmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUgb3BlcmF0aW9u
cyBvbiB0aGUgc2FtZSBkYXRhLgorICAgIE11dGV4IG1fZGVjb2RlTXV0ZXg7CisKKyAgICAvLyBQ
cmV2ZW50cyBjb25jdXJyZW50IGFjY2VzcyB0byBtX2RhdGEuCisgICAgTXV0ZXggbV9kYXRhTXV0
ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQ
aXhlbFJlZi5jcHAKaW5kZXggMGE1ZDVhMzhhZjRlNjk3Y2U5NzA3YWZiNmRkYzAxYWVlNDcwOTBm
Yi4uNTU1MjY2MzYyYTY1MjhjZDRjNTMzODIyZjFmNjU4NmJiZmQ4NDM1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4
ZWxSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMzgsNiArMzgsNyBAQCBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJh
dG9yPiBmcmFtZQogICAgICwgbV9mcmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKICAgICAs
IG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQogICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vi
c2V0KQorICAgICwgbV9sb2NrZWRDYWNoZWRJbWFnZSgwKQogewogfQogCkBAIC01OCwxOCArNTks
MjkgQEAgYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKIHZvaWQq
IExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCiB7CiAg
ICAgbV9tdXRleC5sb2NrKCk7Ci0gICAgQVNTRVJUKG1fbG9ja2VkQml0bWFwLmlzTnVsbCgpKTsK
LSAgICBtX2xvY2tlZEJpdG1hcCA9IG1fZnJhbWVHZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKG1f
c2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOwotICAgIGlmIChtX2xvY2tlZEJpdG1hcC5pc051
bGwoKSkKKyAgICBBU1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworCisgICAgbV9sb2NrZWRD
YWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRl
Q2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplKTsKKworICAgIC8vIFVz
ZSBJbWFnZUZyYW1lR2VuZXJhdG9yIHRvIGdlbmVyYXRlIHRoZSBpbWFnZS4gSXQgd2lsbCBsb2Nr
IHRoZSBjYWNoZQorICAgIC8vIGVudHJ5IGZvciB1cy4KKyAgICBpZiAoIW1fbG9ja2VkQ2FjaGVk
SW1hZ2UpCisgICAgICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSBtX2ZyYW1lR2VuZXJhdG9yLT5k
ZWNvZGVBbmRTY2FsZShtX3NjYWxlZFNpemUpOworCisgICAgaWYgKCFtX2xvY2tlZENhY2hlZElt
YWdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2xvY2tlZEJpdG1hcC5sb2NrUGl4ZWxzKCk7
Ci0gICAgcmV0dXJuIG1fbG9ja2VkQml0bWFwLmdldEFkZHIoMCwgMCk7CisKKyAgICBBU1NFUlQo
IW1fbG9ja2VkQ2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQobV9s
b2NrZWRDYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpID09IG1fc2NhbGVkU2l6ZSk7CisgICAgcmV0
dXJuIG1fbG9ja2VkQ2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmdldEFkZHIobV9zY2FsZWRTdWJzZXQu
eCgpLCBtX3NjYWxlZFN1YnNldC55KCkpOwogfQogCiB2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVm
OjpvblVubG9ja1BpeGVscygpCiB7Ci0gICAgbV9sb2NrZWRCaXRtYXAudW5sb2NrUGl4ZWxzKCk7
Ci0gICAgbV9sb2NrZWRCaXRtYXAucmVzZXQoKTsKKyAgICBpZiAobV9sb2NrZWRDYWNoZWRJbWFn
ZSkgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworICAgICAgICBt
X2xvY2tlZENhY2hlZEltYWdlID0gMDsKKyAgICB9CiAgICAgbV9tdXRleC51bmxvY2soKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKaW5kZXggODAzMTRjZjIxZjdhMGFiY2Jl
MTQzMDg4ZmIwZGM2YWVlMmQwYjQyNy4uMWE4MWJiM2UwZWM2ZDVmMDYxNzcyNmY2ZjI3MjdhYWJj
ODg4ZDE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0zOCw2ICszOCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7Citj
bGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogCiBjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6
IHB1YmxpYyBTa1BpeGVsUmVmIHsKIHB1YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHJpdmF0ZToK
ICAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKICAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0Owog
Ci0gICAgU2tCaXRtYXAgbV9sb2NrZWRCaXRtYXA7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCog
bV9sb2NrZWRDYWNoZWRJbWFnZTsKICAgICBNdXRleCBtX211dGV4OwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VG
cmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
Y2FsZWRJbWFnZUZyYWdtZW50LmNwcAppbmRleCA5NzRlNmZmODQ3ZWM1YjVkZDQ2OTU4ZjIwYmQ0
ODEyOTM5YmQzNTczLi43MWJiNjIwYWViNDc2OTQ1NGFmNTUyZmM2NTk1Y2E4OTdiOWQ1NDUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2Fs
ZWRJbWFnZUZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcApAQCAtMzMsMjIgKzMzLDExIEBAIFNj
YWxlZEltYWdlRnJhZ21lbnQ6On5TY2FsZWRJbWFnZUZyYWdtZW50KCkKIHsKIH0KIAotU2NhbGVk
SW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJ
U2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0Nv
bXBsZXRlKQotICAgIDogbV9pbWFnZUlkKGltYWdlSWQpCi0gICAgLCBtX3NjYWxlZFNpemUoc2Nh
bGVkU2l6ZSkKK1NjYWxlZEltYWdlRnJhZ21lbnQ6OlNjYWxlZEltYWdlRnJhZ21lbnQoY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBp
c0NvbXBsZXRlKQorICAgIDogbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX2JpdG1h
cChiaXRtYXApCiAgICAgLCBtX2lzQ29tcGxldGUoaXNDb21wbGV0ZSkKIHsKIH0KIAotYm9vbCBT
Y2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZUlkID09IG1faW1hZ2VJZCAmJiBz
Y2FsZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKLX0KLQotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50
Ojppc0VxdWFsKGludCBpbWFnZUlkKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZUlkID09IG1f
aW1hZ2VJZDsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VG
cmFnbWVudC5oCmluZGV4IDViN2ZmYzk2MDE0ZTA1NzNlODM1MDc4MDJiNjZmMzRkOWJjZDNmNmQu
LmYwNzA3YjNjZTM0YzY0NGY1YmI3NTE0ZmQ2NGIxZGYyZDA3MTJjNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2Fs
ZWRJbWFnZUZyYWdtZW50LmgKQEAgLTM0LDI5ICszNCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLS8vIFNjYWxlZEltYWdlRnJhZ21lbnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGlt
YWdlLiBJdCBpcyBpZGVudGlmaWVkCi0vLyBieSB0d28gdGhpbmdzOgotLy8gMS4gSW1hZ2UgSUQu
IFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KLS8vIDIu
IFNjYWxlZCBpbWFnZSBzaXplLgorLy8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNjYWxlZCB2
ZXJzaW9uIG9mIGFuIGltYWdlLgogY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGludCBp
bWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBib29sIGlzQ29tcGxldGUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFn
bWVudD4gY3JlYXRlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBi
aXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgU2NhbGVkSW1hZ2VGcmFnbWVudChpbWFnZUlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlzQ29t
cGxldGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50
KHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOwogICAgIH0KIAotICAgIFNjYWxlZElt
YWdlRnJhZ21lbnQoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYs
IGJvb2wgaXNDb21wbGV0ZSk7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBTa0lTaXpl
JiwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOwogICAgIH5TY2FsZWRJbWFnZUZy
YWdtZW50KCk7CiAKKyAgICBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zY2FsZWRTaXplOyB9CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsg
cmV0dXJuIG1fYml0bWFwOyB9CiAgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0
bWFwOyB9Ci0KLSAgICBib29sIGlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpIGNvbnN0OwotICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CiAKIHBy
aXZhdGU6Ci0gICAgaW50IG1faW1hZ2VJZDsKICAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKICAg
ICBTa0JpdG1hcCBtX2JpdG1hcDsKICAgICBib29sIG1faXNDb21wbGV0ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZjI5N2NmZGY3NTIyNWYyYTNlOGIzNzgwN2Q0ODVlZDAwMGRkMjk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tTaXplSGFzaC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNrU2l6ZUhh
c2hfaAorI2RlZmluZSBTa1NpemVIYXNoX2gKKworI2luY2x1ZGUgIlNrU2NhbGFyLmgiCisjaW5j
bHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSW50SGFzaDxTa1NpemU+IHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBTa1NpemUmIGtleSkgeyByZXR1cm4gcGFpckludEhhc2goa2V5
LndpZHRoKCksIGtleS5oZWlnaHQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBT
a1NpemUmIGEsIGNvbnN0IFNrU2l6ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U2tTaXplPiB7CisgICAgdHlwZWRlZiBJbnRI
YXNoPFNrU2l6ZT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U2tT
aXplPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFNrU2l6ZT4geworICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aWMgU2tTaXplIGVtcHR5VmFsdWUoKSB7IHJldHVy
biBTa1NpemU6Ok1ha2UoMCwgMCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVk
VmFsdWUoU2tTaXplJiBzbG90KQorICAgIHsKKyAgICAgICAgc2xvdCA9IFNrU2l6ZTo6TWFrZSgt
MSwgLTEpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTa1Np
emUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLndpZHRoKCkgPT0gLTEgJiYg
dmFsdWUuaGVpZ2h0KCkgPT0gLTE7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSW50
SGFzaDxTa0lTaXplPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2tJU2l6ZSYg
a2V5KSB7IHJldHVybiBwYWlySW50SGFzaChrZXkud2lkdGgoKSwga2V5LmhlaWdodCgpKTsgfQor
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNrSVNpemUmIGEsIGNvbnN0IFNrSVNpemUmIGIp
IHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPFNrSVNpemU+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8U2tJU2l6ZT4gSGFzaDsKK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U2tJU2l6ZT4gOiBHZW5lcmljSGFzaFRyYWl0
czxTa0lTaXplPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAg
IHN0YXRpYyBTa0lTaXplIGVtcHR5VmFsdWUoKSB7IHJldHVybiBTa0lTaXplOjpNYWtlKDAsIDAp
OyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNrSVNpemUmIHNsb3Qp
CisgICAgeworICAgICAgICBzbG90ID0gU2tJU2l6ZTo6TWFrZSgtMSwgLTEpOworICAgIH0KKyAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTa0lTaXplJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVlLmhlaWdodCgpID09
IC0xOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2tTaXpl
SGFzaF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBkZDVkNmNmMWI2YmU4YjBj
YjA5N2VmMGUyNTRmZDAxMDNlZjNkMDdkLi5kZjUwYWZmYzU5MTEyMTkyZTc1MDVmNWUyYjgwNTg3
YmM5ZDVkZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBp
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTgwLDYgKzgwLDcg
QEAKICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURC
UmVxdWVzdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAg
J3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViS2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5j
cHAKaW5kZXggMjQzZDA4ZTYyOTQ4MDU2OTc5MzYyZGZjZjg1OGM2ZmY4NWU4YTc2OC4uNDQ2YTli
NmRhNzc2ZGFhZDZjNzQwZDhhNDdkYWEyNTNlNDg2NGM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJLaXQuY3BwCkBAIC0xMzQsNiArMTM0LDcgQEAgdm9pZCBpbml0aWFsaXplV2l0aG91
dFY4KFdlYktpdFBsYXRmb3JtU3VwcG9ydCogd2ViS2l0UGxhdGZvcm1TdXBwb3J0KQogICAgIEFT
U0VSVCghc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOwogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBw
b3J0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0OwogICAgIFBsYXRmb3JtOjppbml0aWFsaXplKHNf
d2ViS2l0UGxhdGZvcm1TdXBwb3J0KTsKKyAgICBXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
OmluaXRpYWxpemVPbmNlKCk7CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAg
ICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCAyMGZjYzFiOTYwZTM5YmVlMDczOTEzOGMz
YmZjZmJiM2MxMmVlNDFlLi42ODFmMzYyZDg5MmM0YmI2YWYwNjgyMzVkM2NlYjY4ZDBiZDU4ZDk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAK
QEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJTZXR0
aW5nc0ltcGwuaCIKIAorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CkBAIC01MDAsMTAgKzUwMCw3IEBAIHZvaWQgV2ViU2V0
dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZv
aWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBpZiAoIW1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiBl
bmFibGVkKQotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJl
YWQoKTsKLSAgICBpZiAobV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmICFlbmFibGVk
KQotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgbV9kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCmluZGV4IDRiY2My
OTg4MjJlNTJlMzBkMWM0ZWFmNjMwNjgwYTlhZTY1OWZmZDIuLjdmZDQwMTdhNmU0MGJmZmNhZjc3
ZGY2Y2NmMTFmMDUyNjRhOGY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTczLDcgKzczLDgg
QEAgY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVz
dCwgcHVibGljIE1vY2tJbWFnZURlY29kZXIKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgU2V0
VXAoKQogICAgIHsKLSAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWlu
VGhyZWFkKCk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsK
KyAgICAgICAgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAg
IG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdoaXRlUE5HLCBzaXplb2Yod2hpdGVQTkcp
KTsKICAgICAgICAgbV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIodGhpcyk7
CiAgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSgxLCAxKTsKQEAgLTkwLDEwICs5MSwx
OSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkK
ICAgICB7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQgPSBtX2FjdHVhbERlY29k
ZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCk7CiAgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9
IDA7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkKKyAg
ICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIH0KKwogcHJvdGVjdGVk
OgogICAgIC8vIERvbid0IG93biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRlciB0byBxdWVyeSBz
dGF0ZXMuCiAgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMzEwYjk0YTZhMDdjMTQ5NGY2MDMxMGYxNTU2MzhjMTE0MDMyMzJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZy
YW1lR2VuZXJhdG9yVGVzdC5jcHAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRl
ICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0OworCisvLyBIZWxwZXIgbWV0aG9kcyB0byBnZW5lcmF0ZSBzdGFuZGFyZCBz
aXplcy4KK1NrSVNpemUgZnVsbFNpemUoKSB7IHJldHVybiBTa0lTaXplOjpNYWtlKDEwMCwgMTAw
KTsgfQorU2tJU2l6ZSBzY2FsZWRTaXplKCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSg1MCwgNTAp
OyB9CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OworCitjbGFzcyBNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeSA6IHB1YmxpYyBJbWFnZURlY29kZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeT4gY3JlYXRlKEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeSh0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCk7CisKK3ByaXZhdGU6CisgICAgTW9j
a0ltYWdlRGVjb2RlckZhY3RvcnkoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QqIHRlc3QpCisgICAg
ICAgIDogbV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKworICAgIEltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCA6IHB1
YmxpYyA6OnRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpOworICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSgpOworICAgICAgICBtX2dlbmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6
OmNyZWF0ZShmdWxsU2l6ZSgpLCBtX2RhdGEsIHRydWUpOworICAgICAgICBtX2dlbmVyYXRvci0+
c2V0SW1hZ2VEZWNvZGVyRmFjdG9yeUZvclRlc3RpbmcoTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6
OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQgPSAwOwor
ICAgICAgICBtX2ZyYW1lU3RhdHVzID0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjpzaHV0ZG93bigpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVyQmVp
bmdEZXN0cm95ZWQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZm
ZXJSZXF1ZXN0ZWQoKQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
OworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0
dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTdGF0dXM7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0
ZUltYWdlKGNvbnN0IFNrSVNpemUmIHNpemUpCisgICAgeworICAgICAgICBTa0JpdG1hcCBiaXRt
YXA7CisgICAgICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBiaXRtYXAuYWxsb2NQaXhl
bHMoKTsKKyAgICAgICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBi
aXRtYXAsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFt
ZTo6RnJhbWVTdGF0dXMgc3RhdHVzKSAgeyBtX2ZyYW1lU3RhdHVzID0gc3RhdHVzOyB9CisKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgUmVmUHRyPEltYWdlRnJhbWVHZW5l
cmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50Owor
ICAgIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIG1fZnJhbWVTdGF0dXM7Cit9OworCitQYXNzT3du
UHRyPEltYWdlRGVjb2Rlcj4gTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSgpCit7Cisg
ICAgTW9ja0ltYWdlRGVjb2RlciogZGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKG1fdGVz
dCk7CisgICAgZGVjb2Rlci0+c2V0U2l6ZShmdWxsU2l6ZSgpLndpZHRoKCksIGZ1bGxTaXplKCku
aGVpZ2h0KCkpOworICAgIHJldHVybiBhZG9wdFB0cihkZWNvZGVyKTsKK30KKworVEVTVF9GKElt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZUhpdCkKK3sKKyAgICBTY2FsZWRJbWFnZUZyYWdt
ZW50KiBmdWxsSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFu
ZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNyZWF0ZUNvbXBsZXRlSW1h
Z2UoZnVsbFNpemUoKSkpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNj
YWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tD
YWNoZShtX2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKworICAgIFNjYWxlZEltYWdlRnJh
Z21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoZnVsbEltYWdlLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShm
dWxsU2l6ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdl
KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cit9CisKK1RF
U1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aFNjYWxlKQoreworICAg
IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwg
Y3JlYXRlQ29tcGxldGVJbWFnZShmdWxsU2l6ZSgpKSk7CisgICAgRVhQRUNUX0VRKGZ1bGxTaXpl
KCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBmdWxsSW1hZ2UpOworCisg
ICAgLy8gQ2FjaGUgbWlzcyBiZWNhdXNlIG9mIHNjYWxlZCBzaXplIG5vdCBmb3VuZC4KKyAgICBT
Y2FsZWRJbWFnZUZyYWdtZW50KiBzY2FsZWRJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRT
Y2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9ORShmdWxsSW1hZ2UsIHNjYWxlZEltYWdl
KTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkU2l6ZSgpLCBzY2FsZWRJbWFnZS0+c2NhbGVkU2l6ZSgp
KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2Vu
ZXJhdG9yLmdldCgpLCBzY2FsZWRJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBoaXQuCisgICAgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxl
KHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNjYWxlZEltYWdlLCB0ZW1wSW1hZ2UpOwor
ICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHRlbXBJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAg
ICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9y
LmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NX
aXRoRGVjb2RlQW5kU2NhbGUpCit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJh
bWVDb21wbGV0ZSk7CisKKyAgICAvLyBDYWNoZSBtaXNzLgorICAgIFNjYWxlZEltYWdlRnJhZ21l
bnQqIHNjYWxlZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUo
KSk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVY
UEVDVF9FUShzY2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0
KCksIHNjYWxlZEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBTY2FsZWRJbWFnZUZy
YWdtZW50KiBmdWxsSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUo
KSk7CisgICAgRVhQRUNUX05FKHNjYWxlZEltYWdlLCBmdWxsSW1hZ2UpOworICAgIEVYUEVDVF9F
UShmdWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgZnVsbElt
YWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1w
SW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoc2NhbGVkSW1hZ2UsIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKHNjYWxlZFNp
emUoKSwgdGVtcEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7Cisg
ICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworfQorCisvLyBUZXN0
IHRoYXQgaW5jb21wbGV0ZSBmcmFtZXMgYXJlIG5vdCBjYWNoZWQuCitURVNUX0YoSW1hZ2VGcmFt
ZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlKQoreworICAgIHNl
dEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisKKyAgICBTY2FsZWRJbWFn
ZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVk
U2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cisg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRv
ci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNv
ZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tD
YWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAgIHRlbXBJbWFnZSA9IG1f
Z2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgz
LCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworfQor
Cit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJ
bWFnZURlY29kZXIuaAppbmRleCBjOWMwZDAxZDZkODM4MjA5MmIwNzRiOTRlNGRkOWZkN2FlMWM4
NjgzLi44YjRmNDAzODIzOWMyOTVkZTQ4YzlkZWVkN2YzOWVmOGFkNThmMDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMzIsNiAr
MzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkgPSAwOwogfTsKIAogY2xh
c3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewpAQCAtNTUsOSArNTcs
MTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCkKICAgICB7CiAgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAg
ICAgICAgbV9jbGllbnQtPmZyYW1lQnVmZmVyUmVxdWVzdGVkKCk7CiAKICAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNl
dFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZVswXS5zZXRTdGF0dXMobV9jbGllbnQtPmZyYW1lU3RhdHVzKCkpOwogICAgICAg
ICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176085</attachid>
            <date>2012-11-26 15:18:35 -0800</date>
            <delta_ts>2012-11-26 21:30:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121126151613.patch</filename>
            <type>text/plain</type>
            <size>49584</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjM1NTk5ZWIyNTcwMTU2
M2IxZWFiMmQ5MWYwNWQ3Yjg5ZDljZmQyZi4uYzJlODUxOTFlMWU1YTZkNzcxMDMyYWYzNTQ3MzQ4
ZDA0MDNjMWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTI1ICBOaWtpdGEgVmFzaWx5ZXYgIDxtZUBlbHYxcy5ydT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiB1c2UgbmF0aXZlIEVsZW1lbnQucHJvdG90eXBlLm5vcm1hbGl6ZSBp
bnN0ZWFkIG9mIGN1c3RvbSBkZWZpbmVkIEVsZW1lbnQucHJvdG90eXBlLnBydW5lRW1wdHlUZXh0
Tm9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjRhYmFmYjI1YmU3NTUyNjBkMGM2
OWU5OTVjN2RkMzExMjE0YjkzYS4uOWQ5MWU4OTY1OWEyYjAyMjJkYTk3Nzk5ZmQzZTk3YTcwZTVl
MTU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMi0x
MS0yNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gSW1wbGVtZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QgdG8gdGVzdCBjYWNoZSBsb2dpYyBhbmQgZ2VuZXJhdGlvbgorICAgICAgICBvZiBuZXcgY2Fj
aGUgZW50cmllcy4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZUhpdAor
ICAgICAgICBUZXN0IHRoYXQgYSBjb21wbGV0ZSBjYWNoZWQgZW50cnkgaXMgcmV1c2VkLgorCisg
ICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlTWlzc1dpdGhTY2FsZQorICAgICAg
ICBDYWNoZSBtaXNzIGZvciBhIHNjYWxlZCBpbWFnZSBidXQgY2FjaGUgaGl0IG9uIGEgZnVsbCBz
aXplIGltYWdlLgorICAgICAgICBTY2FsZWQgaW1hZ2UgaXMgY3JlYXRlZCBmcm9tIGNhY2hlZCBm
dWxsIHNpemUgaW1hZ2UuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVN
aXNzV2l0aERlY29kZUFuZFNjYWxlCisgICAgICAgIENhY2hlIG1pc3MgZm9yIGJvdGggc2NhbGVk
IGltYWdlIGFuZCBmdWxsIHNpemUgaW1hZ2UuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRv
clRlc3QuY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUKKyAgICAgICAgVGVzdCB0aGUgbG9n
aWMgZm9yIGhhbmRsaW5nIGluY29tcGxldGUgY2FjaGUgb2JqZWN0cy4KKworICAgICAgICAqIFdl
YktpdC5neXBpOgorICAgICAgICAqIHNyYy9XZWJLaXQuY3BwOgorICAgICAgICAoV2ViS2l0Ojpp
bml0aWFsaXplV2l0aG91dFY4KToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkKToKKyAgICAgICAgKiB0ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpTZXRVcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmRlY29kZXJCZWluZ0Rl
c3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmZy
YW1lQnVmZmVyUmVxdWVzdGVkKToKKyAgICAgICAgKERlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OmZyYW1lU3RhdHVz
KToKKyAgICAgICAgKiB0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmdWxsU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzY2FsZWRTaXplKToKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXJGYWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6Ok1vY2tJbWFnZURlY29k
ZXJGYWN0b3J5KToKKyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpTZXRVcCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6VGVhckRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmRlY29kZXJCZWluZ0Rlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZnJhbWVCdWZmZXJSZXF1ZXN0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lU3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpjcmVhdGVD
b21wbGV0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
OjpzZXRGcmFtZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAq
IHRlc3RzL01vY2tJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKE1vY2tJbWFnZURlY29kZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KToKKwogMjAxMi0xMS0yNCAgU2lsdmlhIFBmZWlmZmVyICA8c2lsdmlhcGZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHRyYWNlcyBvZiBNZWRpYUNvbnRyb2xS
b290RWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCmluZGV4IDE0ZGU2
OTRlODMzY2FlMDc5MDkwMTkyNzg0ZDgwNDkwYjM0MThhYTkuLmZmOGJmMzA4YjRjZTZjMGQyMmEy
Njk4OGNkMDQyMWUzOTkwNjk4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5j
cHAKQEAgLTQwLDYgKzQwLDggQEAgY29uc3QgY2hhciBsYWJlbExhenlEZWNvZGVkW10gPSAibGF6
eSI7CiAKIH0gLy8gbmFtZXNwYWNlCiAKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNfZW5h
YmxlZCA9IGZhbHNlOworCiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29k
ZXIoSW1hZ2VEZWNvZGVyKiBhY3R1YWxEZWNvZGVyKQogICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQo
ZmFsc2UpCiAgICAgLCBtX2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCkBA
IC00OSw4ICs1MSw2IEBAIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2Rl
cihJbWFnZURlY29kZXIqIGFjdHVhbERlY29kZXIpCiAKIERlZmVycmVkSW1hZ2VEZWNvZGVyOjp+
RGVmZXJyZWRJbWFnZURlY29kZXIoKQogewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJl
c3BvbmRpbmcgZW50cnkgaW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdlCi0gICAgLy8gaXMg
ZGVmZXItZGVjb2RlZC4KIH0KIAogRGVmZXJyZWRJbWFnZURlY29kZXIqIERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yT3B0aW9uKQpAQCAtODAsNiArODAsMTAgQEAgU2tCaXRtYXAgRGVm
ZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3Qg
U2tCaXRtYXAmIGIKIAogICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CiAgICAgcmVzaXplZEJp
dG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJzZXQu
d2lkdGgoKSwgc2NhbGVkU3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisKKyAgICAvLyBGSVhN
RTogVGhpcyBjb2RlIGhhcyB0aGUgcG90ZW50aWFsIHByb2JsZW0gdGhhdCBtdWx0aXBsZQorICAg
IC8vIExhenlEZWNvZGluZ1BpeGVsUmVmcyBhcmUgY3JlYXRlZCBldmVuIHRob3VnaCB0aGV5IHNo
YXJlIHRoZSBzYW1lCisgICAgLy8gc2NhbGVkIHNpemUgYW5kIEltYWdlRnJhbWVHZW5lcmF0b3Iu
CiAgICAgcmVzaXplZEJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYo
cGl4ZWxSZWYtPmZyYW1lR2VuZXJhdG9yKCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51
bnJlZigpOwogCiAgICAgLy8gU2VlIGNvbW1lbnRzIGluIGNyZWF0ZUxhenlEZWNvZGluZ0JpdG1h
cCgpLgpAQCAtODcsNiArOTEsMTEgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNy
ZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGIKICAgICByZXR1
cm4gcmVzaXplZEJpdG1hcDsKIH0KIAordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgc19lbmFibGVkID0gZW5hYmxlZDsKK30KKwogU3Ry
aW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRl
bnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247CkBAIC05OCw3ICsxMDcsNyBAQCBJbWFnZUZy
YW1lKiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKICAgICAvLyBiZWNhdXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVkIEdJRi4g
QW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkKICAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1c2VzIHNv
bWUgbWV0YWRhdGEgZnVuY3Rpb25zIHRoYXQgZG8gc3luY2hyb25vdXMgaW1hZ2UKICAgICAvLyBk
ZWNvZGluZy4KLSAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVh
ZCgpCisgICAgaWYgKHNfZW5hYmxlZAogICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIKICAgICAg
ICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA9PSBjQW5pbWF0aW9uTm9u
ZQogICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CkBAIC0y
MDAsNyArMjA5LDcgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUxhenlE
ZWNvZGluZ0JpdG1hcCgpCiAgICAgU2tCaXRtYXAgYml0bWFwOwogICAgIGJpdG1hcC5zZXRDb25m
aWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBmdWxsU2l6
ZS5oZWlnaHQoKSk7CiAKLSAgICBtX2ZyYW1lR2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6Y3JlYXRlKG1fZGF0YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBtX2Zy
YW1lR2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplLCBtX2Rh
dGEucmVsZWFzZSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CiAgICAgbV9hY3R1YWxEZWNvZGVyLmNs
ZWFyKCk7CiAKICAgICBiaXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVm
KG1fZnJhbWVHZW5lcmF0b3IsIGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJ
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKaW5kZXggYjc5NTA0OWYwYzgzYWQ4ODYwMjI0MzQ4MzZj
ZDc3MjJlZjBjZjU0Zi4uNWRmOTIzNTRiZGRkMDljOGRiM2MxMTZmNmE1N2JiOTk2NzRiMTAzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVm
ZXJyZWRJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBTa0JpdG1hcCBjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFw
KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KTsKIAorICAgIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisK
ICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAogICAgIEltYWdlRnJhbWUq
IGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwpAQCAtNzksNiArODEsOCBAQCBwcml2
YXRlOgogCiAgICAgSW1hZ2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7CiAgICAgUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+IG1fZnJhbWVHZW5lcmF0b3I7CisKKyAgICBzdGF0aWMgYm9vbCBz
X2VuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNv
ZGluZ1N0b3JlLmNwcAppbmRleCA0NDllNDUyNTRlODk1YzAzMzI2YjRkNTdhMDViYmQxMTE5YmIz
OWI1Li41MWQ2YjY1MGJlM2EwZTdmMmUxZDg3MGRmMTM3MDQ1MTBhNjljMzJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKQEAgLTI2LDIxICsyNiwyMiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogCisjaW5jbHVkZSAiSW1h
Z2VGcmFtZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIlNjYWxlZEltYWdlRnJhZ21lbnQuaCIKLQot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIHsKIAotSW1hZ2VEZWNvZGluZ1N0b3Jl
KiBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gMDsKK0ltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0
YW5jZSA9IDA7CiAKLXN0YXRpYyB2b2lkIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVj
b2RpbmdTdG9yZSogaW1hZ2VEZWNvZGluZ1N0b3JlKQorc3RhdGljIHZvaWQgc2V0SW5zdGFuY2Uo
SW1hZ2VEZWNvZGluZ1N0b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCiB7Ci0gICAgZGVsZXRlIHNf
aW5zdGFuY2VPbk1haW5UaHJlYWQ7Ci0gICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdl
RGVjb2RpbmdTdG9yZTsKKyAgICBkZWxldGUgc19pbnN0YW5jZTsKKyAgICBzX2luc3RhbmNlID0g
aW1hZ2VEZWNvZGluZ1N0b3JlOwogfQorCiB9IC8vIG5hbWVzcGFjZQogCiBJbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCkBAIC01MSw0NiArNTIsOTQgQEAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjp+SW1hZ2VEZWNvZGluZ1N0b3JlKCkKIHsKIH0KIAotSW1hZ2VEZWNvZGluZ1N0
b3JlKiBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKK0ltYWdlRGVj
b2RpbmdTdG9yZSogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAg
ICByZXR1cm4gc19pbnN0YW5jZTsKIH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbk1haW5UaHJlYWQoKQordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVP
bmNlKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHNldEluc3RhbmNlT25N
YWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKKyAgICBz
ZXRJbnN0YW5jZShJbWFnZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7CiB9CiAK
IHZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpCiB7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKKyAgICBzZXRJbnN0
YW5jZSgwKTsKIH0KIAotYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJl
YWQoKSBjb25zdAorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojpsb2NrQ29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3Is
IGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFu
Y2VPbk1haW5UaHJlYWQoKSAmJiBpc01haW5UaHJlYWQoKTsKKyAgICBDYWNoZUVudHJ5KiBjYWNo
ZUVudHJ5ID0gMDsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7Cisg
ICAgICAgIENhY2hlTWFwOjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFr
ZV9wYWlyKGdlbmVyYXRvciwgc2NhbGVkU2l6ZSkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2Nh
Y2hlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhY2hlRW50cnkg
PSBpdGVyLT52YWx1ZTsKKyAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+aXND
b21wbGV0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSW5jcmVtZW50
IHVzZSBjb3VudCBzdWNoIHRoYXQgaXQgZG9lc24ndCBnZXQgZXZpY3RlZC4KKyAgICAgICAgKytj
YWNoZUVudHJ5LT51c2VDb3VudDsKKyAgICB9CisgICAgY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2Ut
PmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1h
Z2UuZ2V0KCk7CiB9CiAKLVNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6
bG9va3VwRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkg
Y29uc3QKK2NvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9j
a0luY29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+
aXNFcXVhbChpbWFnZUlkLCBzY2FsZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1l
Q2FjaGVbaV0uZ2V0KCk7Ci0gICAgfQorICAgIC8vIFRPRE86IEltcGxlbWVudC4KICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50
IGltYWdlSWQpCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1h
Z2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBj
YWNoZWRJbWFnZSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdl
SWQpKSB7Ci0gICAgICAgICAgICBtX2ZyYW1lQ2FjaGUucmVtb3ZlKGkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVs
cygpOworICAgIGlmICghY2FjaGVkSW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBE
ZWxldGUgdGhlIGltYWdlIGlmIGl0IGlzIGluY29tcGxldGUuIEl0IHdhcyBuZXZlciBzdG9yZWQg
aW4gY2FjaGUuCisgICAgICAgIGRlbGV0ZSBjYWNoZWRJbWFnZTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KKworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgQ2FjaGVNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBj
YWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKSk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1h
cC5lbmQoKSk7CisKKyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gaXRlci0+dmFsdWU7Cisg
ICAgLS1jYWNoZUVudHJ5LT51c2VDb3VudDsKKyAgICBBU1NFUlQoY2FjaGVFbnRyeS0+dXNlQ291
bnQgPj0gMCk7Cit9CisKK2NvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVy
YXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkKK3sKKyAgICAvLyBQ
cnVuZSBvbGQgY2FjaGUgZW50cmllcyB0byBnaXZlIHNwYWNlIGZvciB0aGUgbmV3IG9uZS4KKyAg
ICBwcnVuZSgpOworCisgICAgLy8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2
ZW50IGl0IGZyb20gYmVpbmcgcHVyZ2VkLgorICAgIGltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxz
KCk7CisKKyAgICBpZiAoIWltYWdlLT5pc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gSW5jb21w
bGV0ZSBpbWFnZSBpcyBub3Qgc3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgZGVsZXRlZCBhZnRlciB1
c2UuCisgICAgICAgIC8vIFNlZSB1bmxvY2tDYWNoZSgpLgorICAgICAgICAvLyBUT0RPOiBXZSBz
aG91bGQgYWxsb3cgaW5jb21wbGV0ZSBpbWFnZXMgdG8gYmUgc3RvcmVkIHRvZ2V0aGVyIHdpdGgK
KyAgICAgICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgSW1hZ2VEZWNvZGVyLgorICAgICAgICByZXR1
cm4gaW1hZ2UubGVha1B0cigpOworICAgIH0KKworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNh
Y2hlZEltYWdlID0gaW1hZ2UuZ2V0KCk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hl
RW50cnkgPSBDYWNoZUVudHJ5OjpjcmVhdGVBbmRVc2UoaW1hZ2UpOworCisgICAgQ2FjaGVJZGVu
dGlmaWVyIGtleSA9IHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxl
ZFNpemUoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBBU1NFUlQoIW1f
Y2FjaGVNYXAuY29udGFpbnMoa2V5KSk7CisgICAgbV9jYWNoZU1hcC5hZGQoa2V5LCBuZXdDYWNo
ZUVudHJ5LmdldCgpKTsKKyAgICBtX2NhY2hlRW50cmllcy5hcHBlbmQobmV3Q2FjaGVFbnRyeS5y
ZWxlYXNlKCkpOworICAgIHJldHVybiBjYWNoZWRJbWFnZTsKK30KKwordm9pZCBJbWFnZURlY29k
aW5nU3RvcmU6OnBydW5lKCkKK3sKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQuCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKaW5kZXggYTZmYTU2
MTk0ZmUxNTUzMTNlMWIxYmIyOGYxMTEyMjZiMjAyN2Y3ZS4uMGFlYTJlOTY5OWU3ODcwNzExNGFl
NmY2NjRjNmNjOTExNjc3M2E0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgKQEAgLTI2
LDQwICsyNiw3MyBAQAogI2lmbmRlZiBJbWFnZURlY29kaW5nU3RvcmVfaAogI2RlZmluZSBJbWFn
ZURlY29kaW5nU3RvcmVfaAogCisjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgogI2lu
Y2x1ZGUgIlNrVHlwZXMuaCIKICNpbmNsdWRlICJTa1NpemUuaCIKKyNpbmNsdWRlICJTa1NpemVI
YXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZURlY29kZXI7
CiBjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOwotY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotLy8gVGhpcyBjbGFzcyBjYW4gb25seSBiZSBpbnN0YW50
aWF0ZWQgb24gbWFpbiB0aHJlYWQuIFRoZXJlIHdpbGwgYmUgYW4KLS8vIGluc3RhbmNlIG9uIGlt
cGwgdGhyZWFkIGluIHRoZSBmdXR1cmUgYnV0IHRoYXQgcGFydCBvZiBpbXBsZW1lbnRhdGlvbgot
Ly8gaXMgaW5jb21wbGV0ZS4gU2VlIGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk0MjQwCi0vLyBmb3IgZGV0YWlscy4KIGNsYXNzIEltYWdlRGVjb2RpbmdTdG9y
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQogICAg
IH5JbWFnZURlY29kaW5nU3RvcmUoKTsKIAotICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUq
IGluc3RhbmNlT25NYWluVGhyZWFkKCk7Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uTWFp
blRocmVhZCgpOworICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIGluc3RhbmNlKCk7Cisg
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKICAgICBzdGF0aWMgdm9pZCBzaHV0ZG93
bigpOwogCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogbG9ja0NvbXBsZXRlQ2FjaGUo
Y29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGxvY2tJbmNvbXBsZXRlQ2FjaGUoY29uc3Qg
SW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIHZv
aWQgdW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBpbnNlcnRBbmRM
b2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciosIFBhc3NPd25QdHI8U2NhbGVkSW1h
Z2VGcmFnbWVudD4pOworCiBwcml2YXRlOgorICAgIHN0cnVjdCBDYWNoZUVudHJ5IHsKKyAgICAg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IENhY2hlRW50cnkoKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVF
bnRyeT4gY3JlYXRlQW5kVXNlKFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2Up
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KGltYWdlLCAxKSk7IH0KKworICAgICAg
ICBDYWNoZUVudHJ5KCkKKyAgICAgICAgICAgIDogdXNlQ291bnQoMCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgQ2FjaGVFbnRyeShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21l
bnQ+IGltYWdlLCBpbnQgY291bnQpCisgICAgICAgICAgICA6IGNhY2hlZEltYWdlKGltYWdlKQor
ICAgICAgICAgICAgLCB1c2VDb3VudChjb3VudCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgfkNhY2hlRW50cnkoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIXVzZUNv
dW50KTsKKyAgICAgICAgfQorCisgICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBj
YWNoZWRJbWFnZTsKKyAgICAgICAgaW50IHVzZUNvdW50OworICAgIH07CisKICAgICBJbWFnZURl
Y29kaW5nU3RvcmUoKTsKLSAgICBib29sIGNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdDsKLSAg
ICBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb29rdXBGcmFtZUNhY2hlKGludCBpbWFnZUlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdDsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lQ2FjaGUo
aW50IGltYWdlSWQpOworICAgIHZvaWQgcHJ1bmUoKTsKKworICAgIFZlY3RvcjxPd25QdHI8Q2Fj
aGVFbnRyeT4gPiBtX2NhY2hlRW50cmllczsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0
IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBTa0lTaXplPiBDYWNoZUlkZW50aWZpZXI7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPENhY2hlSWRlbnRpZmllciwgQ2FjaGVFbnRyeSo+IENhY2hlTWFwOworICAg
IENhY2hlTWFwIG1fY2FjaGVNYXA7CiAKLSAgICBWZWN0b3I8T3duUHRyPFNjYWxlZEltYWdlRnJh
Z21lbnQ+ID4gbV9mcmFtZUNhY2hlOworICAgIC8vIFByb3RlY3QgY29uY3VycmVudCBhY2Nlc3Mg
dG8gYWxsIGluc3RhbmNlcyBvZiBDYWNoZUVudHJ5IHN0b3JlZCBpbiBtX2NhY2hlRW50cmllcyBh
bmQKKyAgICAvLyBtX2NhY2hlTWFwIGFzIHdlbGwgYXMgdGhlIGNvbnRhaW5lcnMuCisgICAgTXV0
ZXggbV9tdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5jcHAKaW5kZXggZmU0ZTRiZmJlZGNjZjRkNDYyOTA5ZWRiMmZjMTUyNTIx
NTg3ZWM5Mi4uMjIwYTU3ZDQ1ZGExMjM3ZWZmYjU4OGFhNGUyNzNjNWE3YTMyMzY1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFt
ZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKQEAgLTI4LDIwICsyOCwzNCBAQAogI2luY2x1
ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlNjYWxlZEltYWdlRnJh
Z21lbnQuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2luY2x1ZGUgInNraWEvZXh0
L2ltYWdlX29wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFnZUZyYW1l
R2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLSAgICA6IG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNl
KQorbmFtZXNwYWNlIHsKKworc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemVNZXRob2QgcmVz
aXplTWV0aG9kKCkKK3sKKyAgICByZXR1cm4gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVf
TEFOQ1pPUzM7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK0ltYWdlRnJhbWVHZW5lcmF0b3I6Oklt
YWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKKyAgICA6IG1fZnVsbFNpemUo
ZnVsbFNpemUpCisgICAgLCBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKIHsKICAgICBzZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKIEltYWdlRnJhbWVHZW5lcmF0b3I6On5JbWFn
ZUZyYW1lR2VuZXJhdG9yKCkKIHsKKyAgICAvLyBUT0RPOiBDYWxsIEltYWdlRGVjb2RpbmdTdG9y
ZSB0byByZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgaW5kZXhlZAorICAgIC8vIGJ5IHRoaXMgb2Jq
ZWN0LgogfQogCiB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQpAQCAtNDksMTcgKzYzLDY0
IEBAIHZvaWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjCiAgICAgLy8gRklYTUU6IERvaW5nIGEgZnVsbCBj
b3B5IGlzIGV4cGVuc2l2ZSwgaW5zdGVhZCBjb3B5IG9ubHkgbmV3IGRhdGEuCiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YUNvcHkgPSBkYXRhLT5jb3B5KCk7CiAKLSAgICBNdXRleExvY2tl
ciBsb2NrKG1fbXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRhTXV0ZXgpOwogICAg
IG1fZGF0YSA9IGRhdGFDb3B5OwogICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2Vp
dmVkOwogfQogCi1Ta0JpdG1hcCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZShj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpCitj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIC8vIFByZXZlbnRzIGNvbmN1
cnJlbnQgZGVjb2RlIG9yIHNjYWxlIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgaW1hZ2UgZGF0YS4K
KyAgICAvLyBNdWx0aXBsZSBMYXp5RGVjb2RpbmdQaXhlbFJlZnMgY2FuIGNhbGwgdGhpcyBtZXRo
b2QgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBNdXRleExvY2tlciBsb2NrKG1fZGVjb2RlTXV0ZXgp
OworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gMDsKKworICAg
IGNhY2hlZEltYWdlID0gdHJ5VG9Mb2NrQ2FjaGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hl
ZEltYWdlKQorICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7CisKKyAgICBjYWNoZWRJbWFnZSA9
IHRyeVRvU2NhbGUoMCwgc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAg
ICByZXR1cm4gY2FjaGVkSW1hZ2U7CisKKyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvRGVjb2RlQW5k
U2NhbGUoc2NhbGVkU2l6ZSk7CisgICAgaWYgKGNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4g
Y2FjaGVkSW1hZ2U7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IFNjYWxlZEltYWdlRnJhZ21l
bnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpCit7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+
bG9ja0NvbXBsZXRlQ2FjaGUodGhpcywgc2NhbGVkU2l6ZSk7Cit9CisKK2NvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUoY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogZnVsbFNpemVJbWFnZSwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkK
K3sKKyAgICAvLyBJZiB0aGUgcmVxdWVzdGVkIHNjYWxlZCBzaXplIGlzIHRoZSBzYW1lIGFzIHRo
ZSBmdWxsIHNpemUgdGhlbiBleGl0CisgICAgLy8gZWFybHkuIFRoaXMgc2F2ZXMgYSBjYWNoZSBs
b29rdXAuCisgICAgaWYgKHNjYWxlZFNpemUgPT0gbV9mdWxsU2l6ZSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoIWZ1bGxTaXplSW1hZ2UpCisgICAgICAgIGZ1bGxTaXplSW1hZ2UgPSBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKHRoaXMsIG1f
ZnVsbFNpemUpOworCisgICAgaWYgKCFmdWxsU2l6ZUltYWdlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFNrQml0bWFwIHNjYWxlZEJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVz
aXplKAorICAgICAgICBmdWxsU2l6ZUltYWdlLT5iaXRtYXAoKSwgcmVzaXplTWV0aG9kKCksIHNj
YWxlZFNpemUud2lkdGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgT3duUHRyPFNjYWxl
ZEltYWdlRnJhZ21lbnQ+IHNjYWxlZEltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRl
KHNjYWxlZFNpemUsIHNjYWxlZEJpdG1hcCwgZnVsbFNpemVJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
KworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUodGhpcywg
ZnVsbFNpemVJbWFnZSk7CisgICAgcmV0dXJuIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+aW5zZXJ0QW5kTG9ja0NhY2hlKHRoaXMsIHNjYWxlZEltYWdlLnJlbGVhc2UoKSk7Cit9CisK
K2NvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVj
b2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKIHsKICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhOwogICAgIGJvb2wgYWxsRGF0YVJlY2VpdmVkID0gZmFsc2U7CiAgICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBNdXRleExvY2tl
ciBsb2NrKG1fZGF0YU11dGV4KTsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGEg
c2hhbGxvdyBjb3B5IGluc3RlYWQuIE5vdyB3ZSdyZSByZXN0cmljdGVkIGJ5IHRoZSBBUEkgb2Yg
U2hhcmVkQnVmZmVyLgogICAgICAgICBkYXRhID0gbV9kYXRhLT5jb3B5KCk7CkBAIC02NywyMiAr
MTI4LDI2IEBAIFNrQml0bWFwIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrCiAgICAgfQogCiAgICAgT3duUHRyPElt
YWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihJbWFnZURlY29kZXI6OmNyZWF0ZSgqZGF0YS5n
ZXQoKSwgSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKyAgICBpZiAoIWRlY29kZXIgJiYgbV9pbWFnZURl
Y29kZXJGYWN0b3J5KQorICAgICAgICBkZWNvZGVyID0gbV9pbWFnZURlY29kZXJGYWN0b3J5LT5j
cmVhdGUoKTsKICAgICBpZiAoIWRlY29kZXIpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwor
ICAgICAgICByZXR1cm4gMDsKIAogICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgYWxs
RGF0YVJlY2VpdmVkKTsKICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleCgwKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gU2tCaXRtYXAo
KTsKKyAgICBpZiAoIWZyYW1lIHx8IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgaXNDb21wbGV0ZSA9IGZyYW1l
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIFNrQml0bWFwIGZ1
bGxTaXplQml0bWFwID0gZnJhbWUtPmdldFNrQml0bWFwKCk7CisgICAgQVNTRVJUKGZ1bGxTaXpl
Qml0bWFwLndpZHRoKCkgPT0gbV9mdWxsU2l6ZS53aWR0aCgpICYmIGZ1bGxTaXplQml0bWFwLmhl
aWdodCgpID09IG1fZnVsbFNpemUuaGVpZ2h0KCkpOwogCi0gICAgU2tCaXRtYXAgYml0bWFwID0g
ZnJhbWUtPmdldFNrQml0bWFwKCk7Ci0gICAgU2tJU2l6ZSBiaXRtYXBTaXplID0gU2tJU2l6ZTo6
TWFrZShiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgpKTsKLSAgICBpZiAoYml0bWFwU2l6
ZSAhPSBzY2FsZWRTaXplKQotICAgICAgICBiaXRtYXAgPSBza2lhOjpJbWFnZU9wZXJhdGlvbnM6
OlJlc2l6ZShiaXRtYXAsIHNraWE6OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzLCBz
Y2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgdGhpcywgU2NhbGVkSW1hZ2VGcmFn
bWVudDo6Y3JlYXRlKG1fZnVsbFNpemUsIGZ1bGxTaXplQml0bWFwLCBpc0NvbXBsZXRlKSk7CiAK
LSAgICBTa0JpdG1hcCBiaXRtYXBTdWJzZXQ7Ci0gICAgYml0bWFwLmV4dHJhY3RTdWJzZXQoJmJp
dG1hcFN1YnNldCwgc2NhbGVkU3Vic2V0KTsKLSAgICByZXR1cm4gYml0bWFwU3Vic2V0OworICAg
IGlmIChtX2Z1bGxTaXplID09IHNjYWxlZFNpemUpCisgICAgICAgIHJldHVybiBmdWxsU2l6ZUlt
YWdlOworICAgIHJldHVybiB0cnlUb1NjYWxlKGZ1bGxTaXplSW1hZ2UsIHNjYWxlZFNpemUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgK
aW5kZXggNmRmNWIyM2NlZDE0YWU1MDk1NWFmNjNlODc4ZTNiYTdkYTY1NDg5Mi4uMTMzZTBhMjQ1
YWM2OGRlODMzMzlhYjZmMTY2NzM0M2FlZTIzYzZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5l
cmF0b3IuaApAQCAtMzgsMjYgKzM4LDQ4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgSW1hZ2VEZWNvZGVyOworY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsKIGNsYXNzIFNoYXJl
ZEJ1ZmZlcjsKIAorY2xhc3MgSW1hZ2VEZWNvZGVyRmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCkgPSAwOworfTsKKwogY2xhc3Mg
SW1hZ2VGcmFtZUdlbmVyYXRvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUZy
YW1lR2VuZXJhdG9yPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFt
ZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiBjcmVhdGUoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGZ1bGxTaXplLCBk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKICAgICB9CiAKLSAgICBJbWFnZUZyYW1lR2VuZXJhdG9y
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIElt
YWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIH5JbWFnZUZyYW1lR2VuZXJh
dG9yKCk7CiAKLSAgICBTa0JpdG1hcCBkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2Fs
ZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJzZXQpOworICAgIGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIGRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwog
CiAgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogCisgICAgdm9pZCBzZXRJbWFnZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyhQ
YXNzT3duUHRyPEltYWdlRGVjb2RlckZhY3Rvcnk+IGZhY3RvcnkpIHsgbV9pbWFnZURlY29kZXJG
YWN0b3J5ID0gZmFjdG9yeTsgfQorCiBwcml2YXRlOgorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IGNhbGxlZCB3aGlsZSBtX2RlY29kZU11dGV4IGlzIGxvY2tlZC4KKyAgICBjb25zdCBTY2FsZWRJ
bWFnZUZyYWdtZW50KiB0cnlUb0xvY2tDYWNoZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsK
KyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb1NjYWxlKGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBTa0lTaXplIG1fZnVsbFNpemU7CiAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0g
ICAgTXV0ZXggbV9tdXRleDsKKworICAgIE93blB0cjxJbWFnZURlY29kZXJGYWN0b3J5PiBtX2lt
YWdlRGVjb2RlckZhY3Rvcnk7CisKKyAgICAvLyBQcmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUgb3Bl
cmF0aW9ucyBvbiB0aGUgc2FtZSBkYXRhLgorICAgIE11dGV4IG1fZGVjb2RlTXV0ZXg7CisKKyAg
ICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGFjY2VzcyB0byBtX2RhdGEuCisgICAgTXV0ZXggbV9k
YXRhTXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJl
Zi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVj
b2RpbmdQaXhlbFJlZi5jcHAKaW5kZXggMGE1ZDVhMzhhZjRlNjk3Y2U5NzA3YWZiNmRkYzAxYWVl
NDcwOTBmYi4uNTU1MjY2MzYyYTY1MjhjZDRjNTMzODIyZjFmNjU4NmJiZmQ4NDM1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29k
aW5nUGl4ZWxSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcApAQCAtMzgsNiArMzgsNyBAQCBMYXp5RGVj
b2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1l
R2VuZXJhdG9yPiBmcmFtZQogICAgICwgbV9mcmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikK
ICAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQogICAgICwgbV9zY2FsZWRTdWJzZXQoc2Nh
bGVkU3Vic2V0KQorICAgICwgbV9sb2NrZWRDYWNoZWRJbWFnZSgwKQogewogfQogCkBAIC01OCwx
OCArNTksMjkgQEAgYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QK
IHZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiop
CiB7CiAgICAgbV9tdXRleC5sb2NrKCk7Ci0gICAgQVNTRVJUKG1fbG9ja2VkQml0bWFwLmlzTnVs
bCgpKTsKLSAgICBtX2xvY2tlZEJpdG1hcCA9IG1fZnJhbWVHZW5lcmF0b3ItPmRlY29kZUFuZFNj
YWxlKG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJzZXQpOwotICAgIGlmIChtX2xvY2tlZEJpdG1h
cC5pc051bGwoKSkKKyAgICBBU1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworCisgICAgbV9s
b2NrZWRDYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0Nv
bXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplKTsKKworICAg
IC8vIFVzZSBJbWFnZUZyYW1lR2VuZXJhdG9yIHRvIGdlbmVyYXRlIHRoZSBpbWFnZS4gSXQgd2ls
bCBsb2NrIHRoZSBjYWNoZQorICAgIC8vIGVudHJ5IGZvciB1cy4KKyAgICBpZiAoIW1fbG9ja2Vk
Q2FjaGVkSW1hZ2UpCisgICAgICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSBtX2ZyYW1lR2VuZXJh
dG9yLT5kZWNvZGVBbmRTY2FsZShtX3NjYWxlZFNpemUpOworCisgICAgaWYgKCFtX2xvY2tlZENh
Y2hlZEltYWdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2xvY2tlZEJpdG1hcC5sb2NrUGl4
ZWxzKCk7Ci0gICAgcmV0dXJuIG1fbG9ja2VkQml0bWFwLmdldEFkZHIoMCwgMCk7CisKKyAgICBB
U1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmlzTnVsbCgpKTsKKyAgICBBU1NF
UlQobV9sb2NrZWRDYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpID09IG1fc2NhbGVkU2l6ZSk7Cisg
ICAgcmV0dXJuIG1fbG9ja2VkQ2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmdldEFkZHIobV9zY2FsZWRT
dWJzZXQueCgpLCBtX3NjYWxlZFN1YnNldC55KCkpOwogfQogCiB2b2lkIExhenlEZWNvZGluZ1Bp
eGVsUmVmOjpvblVubG9ja1BpeGVscygpCiB7Ci0gICAgbV9sb2NrZWRCaXRtYXAudW5sb2NrUGl4
ZWxzKCk7Ci0gICAgbV9sb2NrZWRCaXRtYXAucmVzZXQoKTsKKyAgICBpZiAobV9sb2NrZWRDYWNo
ZWRJbWFnZSkgeworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9j
a0NhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworICAg
ICAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gMDsKKyAgICB9CiAgICAgbV9tdXRleC51bmxvY2so
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKaW5kZXggODAzMTRjZjIxZjdh
MGFiY2JlMTQzMDg4ZmIwZGM2YWVlMmQwYjQyNy4uOWIyYTQ2ZDRlNWQ5YjQ1ZjRlMDcyZTczMjgw
YzE0YjAyYWIyYTBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0zOCw2
ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlRnJhbWVHZW5lcmF0
b3I7CitjbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogCiBjbGFzcyBMYXp5RGVjb2RpbmdQaXhl
bFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKIHB1YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHJp
dmF0ZToKICAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKICAgICBTa0lSZWN0IG1fc2NhbGVkU3Vi
c2V0OwogCi0gICAgU2tCaXRtYXAgbV9sb2NrZWRCaXRtYXA7CisgICAgY29uc3QgU2NhbGVkSW1h
Z2VGcmFnbWVudCogbV9sb2NrZWRDYWNoZWRJbWFnZTsKICAgICBNdXRleCBtX211dGV4OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcAppbmRleCA5NzRlNmZmODQ3ZWM1YjVk
ZDQ2OTU4ZjIwYmQ0ODEyOTM5YmQzNTczLi43MWJiNjIwYWViNDc2OTQ1NGFmNTUyZmM2NTk1Y2E4
OTdiOWQ1NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcApAQCAtMzMsMjIg
KzMzLDExIEBAIFNjYWxlZEltYWdlRnJhZ21lbnQ6On5TY2FsZWRJbWFnZUZyYWdtZW50KCkKIHsK
IH0KIAotU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29u
c3QgYm9vbCBpc0NvbXBsZXRlKQotICAgIDogbV9pbWFnZUlkKGltYWdlSWQpCi0gICAgLCBtX3Nj
YWxlZFNpemUoc2NhbGVkU2l6ZSkKK1NjYWxlZEltYWdlRnJhZ21lbnQ6OlNjYWxlZEltYWdlRnJh
Z21lbnQoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwg
Y29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDogbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCiAg
ICAgLCBtX2JpdG1hcChiaXRtYXApCiAgICAgLCBtX2lzQ29tcGxldGUoaXNDb21wbGV0ZSkKIHsK
IH0KIAotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKGludCBpbWFnZUlkLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZUlkID09IG1f
aW1hZ2VJZCAmJiBzY2FsZWRTaXplID09IG1fc2NhbGVkU2l6ZTsKLX0KLQotYm9vbCBTY2FsZWRJ
bWFnZUZyYWdtZW50Ojppc0VxdWFsKGludCBpbWFnZUlkKSBjb25zdAotewotICAgIHJldHVybiBp
bWFnZUlkID09IG1faW1hZ2VJZDsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1h
Z2VGcmFnbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2NhbGVkSW1hZ2VGcmFnbWVudC5oCmluZGV4IDViN2ZmYzk2MDE0ZTA1NzNlODM1MDc4MDJiNjZm
MzRkOWJjZDNmNmQuLmYwNzA3YjNjZTM0YzY0NGY1YmI3NTE0ZmQ2NGIxZGYyZDA3MTJjNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxl
ZEltYWdlRnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgKQEAgLTM0LDI5ICszNCwyMyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIFNjYWxlZEltYWdlRnJhZ21lbnQgaXMgYSBzY2FsZWQgdmVy
c2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlmaWVkCi0vLyBieSB0d28gdGhpbmdzOgotLy8g
MS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFnZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMg
ZnJvbS4KLS8vIDIuIFNjYWxlZCBpbWFnZSBzaXplLgorLy8gU2NhbGVkSW1hZ2VGcmFnbWVudCBp
cyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGFuIGltYWdlLgogY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVu
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4g
Y3JlYXRlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0Jp
dG1hcCYgYml0bWFwLCBib29sIGlzQ29tcGxldGUpCisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2NhbGVkSW1hZ2VGcmFnbWVudChpbWFnZUlkLCBzY2FsZWRTaXplLCBi
aXRtYXAsIGlzQ29tcGxldGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJ
bWFnZUZyYWdtZW50KHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOwogICAgIH0KIAot
ICAgIFNjYWxlZEltYWdlRnJhZ21lbnQoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmLCBjb25z
dCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudChj
b25zdCBTa0lTaXplJiwgY29uc3QgU2tCaXRtYXAmLCBib29sIGlzQ29tcGxldGUpOwogICAgIH5T
Y2FsZWRJbWFnZUZyYWdtZW50KCk7CiAKKyAgICBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZWRTaXplOyB9CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9CiAgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsg
cmV0dXJuIG1fYml0bWFwOyB9Ci0KLSAgICBib29sIGlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0OwotICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJ
ZCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBs
ZXRlOyB9CiAKIHByaXZhdGU6Ci0gICAgaW50IG1faW1hZ2VJZDsKICAgICBTa0lTaXplIG1fc2Nh
bGVkU2l6ZTsKICAgICBTa0JpdG1hcCBtX2JpdG1hcDsKICAgICBib29sIG1faXNDb21wbGV0ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nr
U2l6ZUhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Nr
U2l6ZUhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjI5N2NmZGY3NTIyNWYyYTNlOGIzNzgwN2Q0ODVlZDAw
MGRkMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vU2tTaXplSGFzaC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNrU2l6ZUhhc2hfaAorI2RlZmluZSBTa1NpemVIYXNoX2gKKworI2luY2x1ZGUgIlNrU2Nh
bGFyLmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSW50SGFzaDxTa1NpemU+IHsK
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBTa1NpemUmIGtleSkgeyByZXR1cm4gcGFp
ckludEhhc2goa2V5LndpZHRoKCksIGtleS5oZWlnaHQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBTa1NpemUmIGEsIGNvbnN0IFNrU2l6ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U2tTaXplPiB7CisgICAg
dHlwZWRlZiBJbnRIYXNoPFNrU2l6ZT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8U2tTaXplPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFNrU2l6ZT4geworICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAgICBzdGF0aWMgU2tTaXplIGVtcHR5VmFs
dWUoKSB7IHJldHVybiBTa1NpemU6Ok1ha2UoMCwgMCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25z
dHJ1Y3REZWxldGVkVmFsdWUoU2tTaXplJiBzbG90KQorICAgIHsKKyAgICAgICAgc2xvdCA9IFNr
U2l6ZTo6TWFrZSgtMSwgLTEpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBTa1NpemUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLndpZHRo
KCkgPT0gLTEgJiYgdmFsdWUuaGVpZ2h0KCkgPT0gLTE7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSW50SGFzaDxTa0lTaXplPiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgU2tJU2l6ZSYga2V5KSB7IHJldHVybiBwYWlySW50SGFzaChrZXkud2lkdGgoKSwga2V5Lmhl
aWdodCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNrSVNpemUmIGEsIGNvbnN0
IFNrSVNpemUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPFNrSVNpemU+IHsKKyAgICB0eXBlZGVmIEludEhhc2g8U2tJU2l6ZT4g
SGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U2tJU2l6ZT4gOiBHZW5l
cmljSGFzaFRyYWl0czxTa0lTaXplPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IGZhbHNlOworICAgIHN0YXRpYyBTa0lTaXplIGVtcHR5VmFsdWUoKSB7IHJldHVybiBTa0lTaXpl
OjpNYWtlKDAsIDApOyB9CisgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNr
SVNpemUmIHNsb3QpCisgICAgeworICAgICAgICBzbG90ID0gU2tJU2l6ZTo6TWFrZSgtMSwgLTEp
OworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTa0lTaXplJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVl
LmhlaWdodCgpID09IC0xOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gU2tTaXplSGFzaF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBkZDVk
NmNmMWI2YmU4YjBjYjA5N2VmMGUyNTRmZDAxMDNlZjNkMDdkLi5kZjUwYWZmYzU5MTEyMTkyZTc1
MDVmNWUyYjgwNTg3YmM5ZDVkZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAg
LTgwLDYgKzgwLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0lEQkxldmVsREJDb2RpbmdUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9JbWFnZUZy
YW1lR2VuZXJhdG9yVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYktpdC5jcHAKaW5kZXggMjQzZDA4ZTYyOTQ4MDU2OTc5MzYyZGZjZjg1OGM2ZmY4NWU4
YTc2OC4uNDQ2YTliNmRhNzc2ZGFhZDZjNzQwZDhhNDdkYWEyNTNlNDg2NGM0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBAIC0xMzQsNiArMTM0LDcgQEAgdm9pZCBpbml0
aWFsaXplV2l0aG91dFY4KFdlYktpdFBsYXRmb3JtU3VwcG9ydCogd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KQogICAgIEFTU0VSVCghc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOwogICAgIHNfd2ViS2l0
UGxhdGZvcm1TdXBwb3J0ID0gd2ViS2l0UGxhdGZvcm1TdXBwb3J0OwogICAgIFBsYXRmb3JtOjpp
bml0aWFsaXplKHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0KTsKKyAgICBXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCAyMGZjYzFiOTYwZTM5
YmVlMDczOTEzOGMzYmZjZmJiM2MxMmVlNDFlLi42ODFmMzYyZDg5MmM0YmI2YWYwNjgyMzVkM2Nl
YjY4ZDBiZDU4ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAorI2luY2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVy
LmgiCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
aW5nU3RvcmUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJT
dHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CkBAIC01MDAsMTAgKzUwMCw3IEBA
IHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVu
YWJsZWQpCiAKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBpZiAoIW1fZGVmZXJyZWRJbWFnZURlY29kaW5n
RW5hYmxlZCAmJiBlbmFibGVkKQotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxp
emVPbk1haW5UaHJlYWQoKTsKLSAgICBpZiAobV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVk
ICYmICFlbmFibGVkKQotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7Cisg
ICAgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQoZW5hYmxlZCk7CiAgICAgbV9kZWZl
cnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3Bw
CmluZGV4IDRiY2MyOTg4MjJlNTJlMzBkMWM0ZWFmNjMwNjgwYTlhZTY1OWZmZDIuLjdmZDQwMTdh
NmU0MGJmZmNhZjc3ZGY2Y2NmMTFmMDUyNjRhOGY2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAg
LTczLDcgKzczLDggQEAgY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0IDogcHVibGljIDo6
dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFnZURlY29kZXIKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgU2V0VXAoKQogICAgIHsKLSAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0
aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlh
bGl6ZU9uY2UoKTsKKyAgICAgICAgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldEVuYWJsZWQodHJ1
ZSk7CiAgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHdoaXRlUE5HLCBzaXpl
b2Yod2hpdGVQTkcpKTsKICAgICAgICAgbV9hY3R1YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURl
Y29kZXIodGhpcyk7CiAgICAgICAgIG1fYWN0dWFsRGVjb2Rlci0+c2V0U2l6ZSgxLCAxKTsKQEAg
LTkwLDEwICs5MSwxOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5n
RGVzdHJveWVkKCkKICAgICB7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQgPSBt
X2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVxdWVzdENvdW50KCk7CiAgICAgICAgIG1fYWN0
dWFsRGVjb2RlciA9IDA7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVx
dWVzdGVkKCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIH0K
KwogcHJvdGVjdGVkOgogICAgIC8vIERvbid0IG93biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRl
ciB0byBxdWVyeSBzdGF0ZXMuCiAgICAgTW9ja0ltYWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2Vu
ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTBhMmY4NjQyNWFkMzI2NmM0NDg4NTg0NmE5
ZjRkNGJlODg4YjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgi
CisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OworCisvLyBIZWxwZXIgbWV0aG9kcyB0byBnZW5lcmF0
ZSBzdGFuZGFyZCBzaXplcy4KK1NrSVNpemUgZnVsbFNpemUoKSB7IHJldHVybiBTa0lTaXplOjpN
YWtlKDEwMCwgMTAwKTsgfQorU2tJU2l6ZSBzY2FsZWRTaXplKCkgeyByZXR1cm4gU2tJU2l6ZTo6
TWFrZSg1MCwgNTApOyB9CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OworCitjbGFz
cyBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeSA6IHB1YmxpYyBJbWFnZURlY29kZXJGYWN0b3J5IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeT4g
Y3JlYXRlKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeSh0ZXN0KSk7CisgICAgfQor
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gY3JlYXRlKCk7CisKK3ByaXZh
dGU6CisgICAgTW9ja0ltYWdlRGVjb2RlckZhY3RvcnkoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Qq
IHRlc3QpCisgICAgICAgIDogbV90ZXN0KHRlc3QpCisgICAgeworICAgIH0KKworICAgIEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0KiBtX3Rlc3Q7Cit9OworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJh
dG9yVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QsIHB1YmxpYyBNb2NrSW1hZ2VEZWNvZGVy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25jZSgpOworICAgICAgICBtX2RhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworICAgICAgICBtX2dlbmVyYXRvciA9IEltYWdlRnJh
bWVHZW5lcmF0b3I6OmNyZWF0ZShmdWxsU2l6ZSgpLCBtX2RhdGEsIHRydWUpOworICAgICAgICBt
X2dlbmVyYXRvci0+c2V0SW1hZ2VEZWNvZGVyRmFjdG9yeUZvclRlc3RpbmcoTW9ja0ltYWdlRGVj
b2RlckZhY3Rvcnk6OmNyZWF0ZSh0aGlzKSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0
Q291bnQgPSAwOworICAgICAgICBtX2ZyYW1lU3RhdHVzID0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAg
SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBkZWNvZGVyQmVpbmdEZXN0cm95ZWQoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50OworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0
dXMgZnJhbWVTdGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTdGF0dXM7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBj
cmVhdGVDb21wbGV0ZUltYWdlKGNvbnN0IFNrSVNpemUmIHNpemUpCisgICAgeworICAgICAgICBT
a0JpdG1hcCBiaXRtYXA7CisgICAgICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdC
Xzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBiaXRt
YXAuYWxsb2NQaXhlbHMoKTsKKyAgICAgICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNy
ZWF0ZShzaXplLCBiaXRtYXAsIHRydWUpOworICAgIH0KKworICAgIHZvaWQgc2V0RnJhbWVTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgc3RhdHVzKSAgeyBtX2ZyYW1lU3RhdHVzID0gc3Rh
dHVzOyB9CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIGludCBtX2ZyYW1lQnVmZmVyUmVx
dWVzdENvdW50OworICAgIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIG1fZnJhbWVTdGF0dXM7Cit9
OworCitQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNy
ZWF0ZSgpCit7CisgICAgTW9ja0ltYWdlRGVjb2RlciogZGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VE
ZWNvZGVyKG1fdGVzdCk7CisgICAgZGVjb2Rlci0+c2V0U2l6ZShmdWxsU2l6ZSgpLndpZHRoKCks
IGZ1bGxTaXplKCkuaGVpZ2h0KCkpOworICAgIHJldHVybiBhZG9wdFB0cihkZWNvZGVyKTsKK30K
KworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZUhpdCkKK3sKKyAgICBjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKKyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCks
IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoZnVsbFNpemUoKSkpOworICAgIEVYUEVDVF9FUShmdWxsU2l6
ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKwor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5k
ZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoZnVsbEltYWdlLCB0ZW1w
SW1hZ2UpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUo
KSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dl
bmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCk7Cit9CisKK1RFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2Fj
aGVNaXNzV2l0aFNjYWxlKQoreworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxJ
bWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hl
KAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwgY3JlYXRlQ29tcGxldGVJbWFnZShmdWxsU2l6
ZSgpKSk7CisgICAgRVhQRUNUX0VRKGZ1bGxTaXplKCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgp
KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2Vu
ZXJhdG9yLmdldCgpLCBmdWxsSW1hZ2UpOworCisgICAgLy8gQ2FjaGUgbWlzcyBiZWNhdXNlIG9m
IHNjYWxlZCBzaXplIG5vdCBmb3VuZC4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBz
Y2FsZWRJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwor
ICAgIEVYUEVDVF9ORShmdWxsSW1hZ2UsIHNjYWxlZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoc2Nh
bGVkU2l6ZSgpLCBzY2FsZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBzY2FsZWRJ
bWFnZSk7CisKKyAgICAvLyBDYWNoZSBoaXQuCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7
CisgICAgRVhQRUNUX0VRKHNjYWxlZEltYWdlLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShz
Y2FsZWRTaXplKCksIHRlbXBJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1h
Z2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKK30KKwor
VEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2Nh
bGUpCit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisK
KyAgICAvLyBDYWNoZSBtaXNzLgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHNjYWxl
ZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUShz
Y2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNjYWxl
ZEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiBmdWxsSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7
CisgICAgRVhQRUNUX05FKHNjYWxlZEltYWdlLCBmdWxsSW1hZ2UpOworICAgIEVYUEVDVF9FUShm
dWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdl
KTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0
ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoc2NhbGVkSW1hZ2UsIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKHNjYWxl
ZFNpemUoKSwgdGVtcEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7
CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworfQorCisvLyBU
ZXN0IHRoYXQgaW5jb21wbGV0ZSBmcmFtZXMgYXJlIG5vdCBjYWNoZWQuCitURVNUX0YoSW1hZ2VG
cmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlKQoreworICAg
IHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CisKKyAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2Nh
bGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJh
dG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKworICAgIHRlbXBJ
bWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVY
UEVDVF9FUSgzLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1h
Z2UpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL01vY2tJbWFnZURlY29kZXIuaAppbmRleCBjOWMwZDAxZDZkODM4MjA5MmIwNzRiOTRlNGRk
OWZkN2FlMWM4NjgzLi44YjRmNDAzODIzOWMyOTVkZTQ4YzlkZWVkN2YzOWVmOGFkNThmMDc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApA
QCAtMzIsNiArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNb2NrSW1hZ2VEZWNv
ZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJv
eWVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkgPSAwOwog
fTsKIAogY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewpAQCAt
NTUsOSArNTcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCkKICAgICB7CiAgICAgICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudDsKKyAgICAgICAgbV9jbGllbnQtPmZyYW1lQnVmZmVyUmVxdWVzdGVkKCk7CiAKICAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNh
Y2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTdGF0dXMobV9jbGllbnQtPmZyYW1lU3RhdHVzKCkp
OwogICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176165</attachid>
            <date>2012-11-26 21:30:10 -0800</date>
            <delta_ts>2012-11-27 12:40:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121126212747.patch</filename>
            <type>text/plain</type>
            <size>49554</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM2NjhiN2VmNGE0MjM3
MDk3Yjg3NDEwNWM3MGM3ZjI3YWIyZmM1Mi4uNDI0OTMzNmI3YWM4ZDVjY2Y1NzM0NWJhNzQwOWNm
NjZiZmRhOTQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAg
ICAgICBOb2RlOiBNb3ZlIEFyZVNWR0F0dHJpYnV0ZXNWYWxpZEZsYWcgdG8gRWxlbWVudEF0dHJp
YnV0ZURhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGJhYTcxOTRiNmViNDRkYjkx
OGNkZTU2ZjdiNzI5MDI2YWQ5ZWQyODcuLmM5YTkwYTFkMGY0Y2ViMTg2MmRkNWU2NmQwYzE3ZDZl
MTAzMDJlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIw
MTItMTEtMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBmdWxsLWZlYXR1cmVkIGltYWdlIGNhY2hlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0IHRvIHRlc3QgY2FjaGUgbG9naWMgYW5kIGdlbmVyYXRpb24KKyAgICAgICAgb2YgbmV3
IGNhY2hlIGVudHJpZXMuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVI
aXQKKyAgICAgICAgVGVzdCB0aGF0IGEgY29tcGxldGUgY2FjaGVkIGVudHJ5IGlzIHJldXNlZC4K
KworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoU2NhbGUKKyAg
ICAgICAgQ2FjaGUgbWlzcyBmb3IgYSBzY2FsZWQgaW1hZ2UgYnV0IGNhY2hlIGhpdCBvbiBhIGZ1
bGwgc2l6ZSBpbWFnZS4KKyAgICAgICAgU2NhbGVkIGltYWdlIGlzIGNyZWF0ZWQgZnJvbSBjYWNo
ZWQgZnVsbCBzaXplIGltYWdlLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNh
Y2hlTWlzc1dpdGhEZWNvZGVBbmRTY2FsZQorICAgICAgICBDYWNoZSBtaXNzIGZvciBib3RoIHNj
YWxlZCBpbWFnZSBhbmQgZnVsbCBzaXplIGltYWdlLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0LmNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlCisgICAgICAgIFRlc3QgdGhl
IGxvZ2ljIGZvciBoYW5kbGluZyBpbmNvbXBsZXRlIGNhY2hlIG9iamVjdHMuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViS2l0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6aW5pdGlhbGl6ZVdpdGhvdXRWOCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCk6CisgICAgICAgICogdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXAp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpkZWNvZGVyQmVp
bmdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
OjpmcmFtZUJ1ZmZlclJlcXVlc3RlZCk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2RlclRl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpmcmFtZVN0
YXR1cyk6CisgICAgICAgICogdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZnVsbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2NhbGVkU2l6ZSk6CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVyRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6U2V0VXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpkZWNvZGVyQmVpbmdEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lQnVmZmVyUmVx
dWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpmcmFt
ZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6Y3Jl
YXRlQ29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdDo6c2V0RnJhbWVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAg
ICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6CisKIDIwMTItMTEtMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3OTguCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZl
cnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTRkZTY5NGU4MzNjYWUwNzkw
OTAxOTI3ODRkODA0OTBiMzQxOGFhOS4uZmY4YmYzMDhiNGNlNmMwZDIyYTI2OTg4Y2QwNDIxZTM5
OTA2OTgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDAsNiAr
NDAsOCBAQCBjb25zdCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKIAogfSAvLyBu
YW1lc3BhY2UKIAorYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c19lbmFibGVkID0gZmFsc2U7
CisKIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIpCiAgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKICAgICAs
IG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKQEAgLTQ5LDggKzUxLDYg
QEAgRGVmZXJyZWRJbWFnZURlY29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2Rl
ciogYWN0dWFsRGVjb2RlcikKIAogRGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdl
RGVjb2RlcigpCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRy
eSBpbiBJbWFnZURlY29kaW5nU3RvcmUgaWYgaW1hZ2UKLSAgICAvLyBpcyBkZWZlci1kZWNvZGVk
LgogfQogCiBEZWZlcnJlZEltYWdlRGVjb2RlciogRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0
ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBo
YU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5k
Q29sb3JPcHRpb24pCkBAIC04MCw2ICs4MCwxMCBAQCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYgog
CiAgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKICAgICByZXNpemVkQml0bWFwLnNldENvbmZp
ZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2Fs
ZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
aGFzIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSB0aGF0IG11bHRpcGxlCisgICAgLy8gTGF6eURlY29k
aW5nUGl4ZWxSZWZzIGFyZSBjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZXkgc2hhcmUgdGhlIHNhbWUK
KyAgICAvLyBzY2FsZWQgc2l6ZSBhbmQgSW1hZ2VGcmFtZUdlbmVyYXRvci4KICAgICByZXNpemVk
Qml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+ZnJh
bWVHZW5lcmF0b3IoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVucmVmKCk7CiAKICAg
ICAvLyBTZWUgY29tbWVudHMgaW4gY3JlYXRlTGF6eURlY29kaW5nQml0bWFwKCkuCkBAIC04Nyw2
ICs5MSwxMSBAQCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExh
enlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYgogICAgIHJldHVybiByZXNpemVkQml0
bWFwOwogfQogCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBzX2VuYWJsZWQgPSBlbmFibGVkOworfQorCiBTdHJpbmcgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogbV9m
aWxlbmFtZUV4dGVuc2lvbjsKQEAgLTk4LDcgKzEwNyw3IEBAIEltYWdlRnJhbWUqIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIC8vIGJl
Y2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMg
aGFuZGxlZCBieQogICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBm
dW5jdGlvbnMgdGhhdCBkbyBzeW5jaHJvbm91cyBpbWFnZQogICAgIC8vIGRlY29kaW5nLgotICAg
IGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICBpZiAo
c19lbmFibGVkCiAgICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgogICAgICAgICAmJiBtX2FjdHVh
bERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpID09IGNBbmltYXRpb25Ob25lCiAgICAgICAgICYm
IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkpIHsKQEAgLTIwMCw3ICsyMDksNyBA
QCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlTGF6eURlY29kaW5nQml0bWFw
KCkKICAgICBTa0JpdG1hcCBiaXRtYXA7CiAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsK
IAotICAgIG1fZnJhbWVHZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUobV9k
YXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworICAgIG1fZnJhbWVHZW5lcmF0b3Ig
PSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZnVsbFNpemUsIG1fZGF0YS5yZWxlYXNlKCks
IG1fYWxsRGF0YVJlY2VpdmVkKTsKICAgICBtX2FjdHVhbERlY29kZXIuY2xlYXIoKTsKIAogICAg
IGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9mcmFtZUdlbmVy
YXRvciwgZnVsbFNpemUsIGZ1bGxSZWN0KSktPnVucmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFn
ZURlY29kZXIuaAppbmRleCBiNzk1MDQ5ZjBjODNhZDg4NjAyMjQzNDgzNmNkNzcyMmVmMGNmNTRm
Li41ZGY5MjM1NGJkZGQwOWM4ZGIzYzExNmY2YTU3YmI5OTY3NGIxMDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVj
b2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyLmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIFNrQml0bWFwIGNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRt
YXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJz
ZXQpOwogCisgICAgc3RhdGljIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKwogICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCiAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCk7CkBAIC03OSw2ICs4MSw4IEBAIHByaXZhdGU6CiAKICAgICBJ
bWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKICAgICBSZWZQdHI8SW1hZ2VGcmFtZUdlbmVy
YXRvcj4gbV9mcmFtZUdlbmVyYXRvcjsKKworICAgIHN0YXRpYyBib29sIHNfZW5hYmxlZDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3Bw
CmluZGV4IDQ0OWU0NTI1NGU4OTVjMDMzMjZiNGQ1N2EwNWJiZDExMTliYjM5YjUuLjUxZDZiNjUw
YmUzYTBlN2YyZTFkODcwZGYxMzcwNDUxMGE2OWMzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcApAQCAtMjYsMjEgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgotCi0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1JbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VP
bk1haW5UaHJlYWQgPSAwOworSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlID0gMDsKIAot
c3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bWFnZURlY29kaW5nU3RvcmUpCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZShJbWFnZURlY29kaW5n
U3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKIHsKLSAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFp
blRocmVhZDsKLSAgICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3Jl
OworICAgIGRlbGV0ZSBzX2luc3RhbmNlOworICAgIHNfaW5zdGFuY2UgPSBpbWFnZURlY29kaW5n
U3RvcmU7CiB9CisKIH0gLy8gbmFtZXNwYWNlCiAKIEltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlKCkKQEAgLTUxLDQ2ICs1Miw5NCBAQCBJbWFnZURlY29kaW5nU3RvcmU6On5J
bWFnZURlY29kaW5nU3RvcmUoKQogewogfQogCi1JbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorSW1hZ2VEZWNvZGluZ1N0b3JlKiBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHJldHVybiBzX2luc3RhbmNlT25NYWluVGhyZWFkOworICAgIHJldHVybiBzX2lu
c3RhbmNlOwogfQogCi12b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKQogewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1h
Z2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworICAgIHNldEluc3RhbmNlKElt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKIH0KIAogdm9pZCBJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworICAgIHNldEluc3RhbmNlKDApOwogfQog
Ci1ib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0Citj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tDb21wbGV0
ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSkKIHsKLSAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVh
ZCgpICYmIGlzTWFpblRocmVhZCgpOworICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSAwOwor
ICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgQ2FjaGVN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJh
dG9yLCBzY2FsZWRTaXplKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fY2FjaGVNYXAuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVl
OworICAgICAgICBpZiAoIWNhY2hlRW50cnktPmNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdXNlIGNvdW50IHN1
Y2ggdGhhdCBpdCBkb2Vzbid0IGdldCBldmljdGVkLgorICAgICAgICArK2NhY2hlRW50cnktPnVz
ZUNvdW50OworICAgIH0KKyAgICBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+Yml0bWFwKCkubG9j
a1BpeGVscygpOworICAgIHJldHVybiBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS5nZXQoKTsKIH0K
IAotU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNh
Y2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAorY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrSW5jb21wbGV0ZUNh
Y2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdl
SWQsIHNjYWxlZFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVDYWNoZVtpXS5nZXQo
KTsKLSAgICB9CisgICAgLy8gVE9ETzogSW1wbGVtZW50LgogICAgIHJldHVybiAwOwogfQogCi12
b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCkKK3Zv
aWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJh
dG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKQog
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0tPmlzRXF1YWwoaW1hZ2VJZCkpIHsKLSAgICAg
ICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICBjYWNoZWRJbWFnZS0+Yml0bWFwKCkudW5sb2NrUGl4ZWxzKCk7CisgICAgaWYg
KCFjYWNoZWRJbWFnZS0+aXNDb21wbGV0ZSgpKSB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgaW1h
Z2UgaWYgaXQgaXMgaW5jb21wbGV0ZS4gSXQgd2FzIG5ldmVyIHN0b3JlZCBpbiBjYWNoZS4KKyAg
ICAgICAgZGVsZXRlIGNhY2hlZEltYWdlOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9
IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5z
Y2FsZWRTaXplKCkpKTsKKyAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKKwor
ICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICAtLWNhY2hlRW50
cnktPnVzZUNvdW50OworICAgIEFTU0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKK30K
KworY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRB
bmRMb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3du
UHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQoreworICAgIC8vIFBydW5lIG9sZCBjYWNo
ZSBlbnRyaWVzIHRvIGdpdmUgc3BhY2UgZm9yIHRoZSBuZXcgb25lLgorICAgIHBydW5lKCk7CisK
KyAgICAvLyBMb2NrIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIHRvIHByZXZlbnQgaXQgZnJvbSBi
ZWluZyBwdXJnZWQuCisgICAgaW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKworICAgIGlm
ICghaW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBJbmNvbXBsZXRlIGltYWdlIGlz
IG5vdCBzdG9yZWQgaW4gdGhlIGNhY2hlIGFuZCBkZWxldGVkIGFmdGVyIHVzZS4KKyAgICAgICAg
Ly8gU2VlIHVubG9ja0NhY2hlKCkuCisgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBhbGxvdyBp
bmNvbXBsZXRlIGltYWdlcyB0byBiZSBzdG9yZWQgdG9nZXRoZXIgd2l0aAorICAgICAgICAvLyB0
aGUgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIuCisgICAgICAgIHJldHVybiBpbWFnZS5sZWFr
UHRyKCk7CisgICAgfQorCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBp
bWFnZS5nZXQoKTsKKyAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hl
RW50cnk6OmNyZWF0ZUFuZFVzZShpbWFnZSk7CisKKyAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0g
c3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIEFTU0VSVCghbV9jYWNoZU1hcC5jb250
YWlucyhrZXkpKTsKKyAgICBtX2NhY2hlTWFwLmFkZChrZXksIG5ld0NhY2hlRW50cnkuZ2V0KCkp
OworICAgIG1fY2FjaGVFbnRyaWVzLmFwcGVuZChuZXdDYWNoZUVudHJ5LnJlbGVhc2UoKSk7Cisg
ICAgcmV0dXJuIGNhY2hlZEltYWdlOworfQorCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cHJ1
bmUoKQoreworICAgIC8vIFRPRE86IEltcGxlbWVudC4KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAppbmRleCBhNmZhNTYxOTRmZTE1NTMxM2Ux
YjFiYjI4ZjExMTIyNmIyMDI3ZjdlLi4wYWVhMmU5Njk5ZTc4NzA3MTE0YWU2ZjY2NGM2Y2M5MTE2
NzczYTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaApAQCAtMjYsNDAgKzI2LDczIEBA
CiAjaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCiAjZGVmaW5lIEltYWdlRGVjb2RpbmdTdG9y
ZV9oCiAKKyNpbmNsdWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2tUeXBl
cy5oIgogI2luY2x1ZGUgIlNrU2l6ZS5oIgorI2luY2x1ZGUgIlNrU2l6ZUhhc2guaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlRGVjb2RlcjsKIGNsYXNzIEltYWdl
RnJhbWVHZW5lcmF0b3I7Ci1jbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogY2xhc3MgU2hhcmVk
QnVmZmVyOwogCi0vLyBUaGlzIGNsYXNzIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZCBvbiBtYWlu
IHRocmVhZC4gVGhlcmUgd2lsbCBiZSBhbgotLy8gaW5zdGFuY2Ugb24gaW1wbCB0aHJlYWQgaW4g
dGhlIGZ1dHVyZSBidXQgdGhhdCBwYXJ0IG9mIGltcGxlbWVudGF0aW9uCi0vLyBpcyBpbmNvbXBs
ZXRlLiBTZWUgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQy
NDAKLS8vIGZvciBkZXRhaWxzLgogY2xhc3MgSW1hZ2VEZWNvZGluZ1N0b3JlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxJbWFnZURlY29kaW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBJbWFnZURlY29kaW5nU3RvcmUpOyB9CiAgICAgfkltYWdlRGVjb2Rp
bmdTdG9yZSgpOwogCi0gICAgc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2VPbk1h
aW5UaHJlYWQoKTsKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplT25NYWluVGhyZWFkKCk7Cisg
ICAgc3RhdGljIEltYWdlRGVjb2RpbmdTdG9yZSogaW5zdGFuY2UoKTsKKyAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplT25jZSgpOwogICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CiAKKyAgICBj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2NrQ29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZy
YW1lR2VuZXJhdG9yKiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgY29uc3QgU2Nh
bGVkSW1hZ2VGcmFnbWVudCogbG9ja0luY29tcGxldGVDYWNoZShjb25zdCBJbWFnZUZyYW1lR2Vu
ZXJhdG9yKiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisgICAgdm9pZCB1bmxvY2tDYWNo
ZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCop
OworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGluc2VydEFuZExvY2tDYWNoZShjb25z
dCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7
CisKIHByaXZhdGU6CisgICAgc3RydWN0IENhY2hlRW50cnkgeworICAgICAgICBzdGF0aWMgUGFz
c093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVF
bnRyeSgpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZUVudHJ5PiBjcmVhdGVB
bmRVc2UoUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IENhY2hlRW50cnkoaW1hZ2UsIDEpKTsgfQorCisgICAgICAgIENhY2hlRW50cnko
KQorICAgICAgICAgICAgOiB1c2VDb3VudCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBDYWNoZUVudHJ5KFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIGlu
dCBjb3VudCkKKyAgICAgICAgICAgIDogY2FjaGVkSW1hZ2UoaW1hZ2UpCisgICAgICAgICAgICAs
IHVzZUNvdW50KGNvdW50KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB+Q2FjaGVF
bnRyeSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghdXNlQ291bnQpOworICAgICAg
ICB9CisKKyAgICAgICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGNhY2hlZEltYWdlOwor
ICAgICAgICBpbnQgdXNlQ291bnQ7CisgICAgfTsKKwogICAgIEltYWdlRGVjb2RpbmdTdG9yZSgp
OwotICAgIGJvb2wgY2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0OwotICAgIFNjYWxlZEltYWdl
RnJhZ21lbnQqIGxvb2t1cEZyYW1lQ2FjaGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpIGNvbnN0OwotICAgIHZvaWQgZGVsZXRlRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCk7
CisgICAgdm9pZCBwcnVuZSgpOworCisgICAgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IG1f
Y2FjaGVFbnRyaWVzOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgSW1hZ2VGcmFtZUdl
bmVyYXRvciosIFNrSVNpemU+IENhY2hlSWRlbnRpZmllcjsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Q2FjaGVJZGVudGlmaWVyLCBDYWNoZUVudHJ5Kj4gQ2FjaGVNYXA7CisgICAgQ2FjaGVNYXAgbV9j
YWNoZU1hcDsKIAotICAgIFZlY3RvcjxPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gPiBtX2Zy
YW1lQ2FjaGU7CisgICAgLy8gUHJvdGVjdCBjb25jdXJyZW50IGFjY2VzcyB0byBhbGwgaW5zdGFu
Y2VzIG9mIENhY2hlRW50cnkgc3RvcmVkIGluIG1fY2FjaGVFbnRyaWVzIGFuZAorICAgIC8vIG1f
Y2FjaGVNYXAgYXMgd2VsbCBhcyB0aGUgY29udGFpbmVycy4KKyAgICBNdXRleCBtX211dGV4Owog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9y
LmNwcAppbmRleCBmZTRlNGJmYmVkY2NmNGQ0NjI5MDllZGIyZmMxNTI1MjE1ODdlYzkyLi4yMjBh
NTdkNDVkYTEyMzdlZmZiNTg4YWE0ZTI3M2M1YTdhMzIzNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZy
YW1lR2VuZXJhdG9yLmNwcApAQCAtMjgsMjAgKzI4LDM0IEBACiAjaW5jbHVkZSAiSW1hZ2VGcmFt
ZUdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1h
Z2VEZWNvZGluZ1N0b3JlLmgiCisjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiAjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0
aW9ucy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUltYWdlRnJhbWVHZW5lcmF0b3I6Oklt
YWdlRnJhbWVHZW5lcmF0b3IoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKQotICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCituYW1lc3BhY2Ug
eworCitza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZU1ldGhvZCByZXNpemVNZXRob2QoKQor
eworICAgIHJldHVybiBza2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMzsKK30K
KworfSAvLyBuYW1lc3BhY2UKKworSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVy
YXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgIDogbV9mdWxsU2l6ZShmdWxsU2l6ZSkKKyAg
ICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQogewogICAgIHNldERhdGEoZGF0YSwgYWxsRGF0
YVJlY2VpdmVkKTsKIH0KIAogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6fkltYWdlRnJhbWVHZW5lcmF0
b3IoKQogeworICAgIC8vIFRPRE86IENhbGwgSW1hZ2VEZWNvZGluZ1N0b3JlIHRvIHJlbW92ZSBh
bGwgY2FjaGUgZW50cmllcyBpbmRleGVkCisgICAgLy8gYnkgdGhpcyBvYmplY3QuCiB9CiAKIHZv
aWQgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6c2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCkBAIC00OSwxNyArNjMsNjQgQEAgdm9pZCBJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBi
b29sIGFsbERhdGFSZWMKICAgICAvLyBGSVhNRTogRG9pbmcgYSBmdWxsIGNvcHkgaXMgZXhwZW5z
aXZlLCBpbnN0ZWFkIGNvcHkgb25seSBuZXcgZGF0YS4KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhQ29weSA9IGRhdGEtPmNvcHkoKTsKIAotICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRl
eCk7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7CiAgICAgbV9kYXRhID0gZGF0
YUNvcHk7CiAgICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiB9CiAKLVNr
Qml0bWFwIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCkKK2NvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpCit7CisgICAgLy8gUHJldmVudHMgY29uY3VycmVudCBkZWNvZGUg
b3Igc2NhbGUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBpbWFnZSBkYXRhLgorICAgIC8vIE11bHRp
cGxlIExhenlEZWNvZGluZ1BpeGVsUmVmcyBjYW4gY2FsbCB0aGlzIG1ldGhvZCBhdCB0aGUgc2Ft
ZSB0aW1lLgorICAgIE11dGV4TG9ja2VyIGxvY2sobV9kZWNvZGVNdXRleCk7CisgICAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSAwOworCisgICAgY2FjaGVkSW1hZ2Ug
PSB0cnlUb0xvY2tDYWNoZShzY2FsZWRTaXplKTsKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisgICAg
ICAgIHJldHVybiBjYWNoZWRJbWFnZTsKKworICAgIGNhY2hlZEltYWdlID0gdHJ5VG9TY2FsZSgw
LCBzY2FsZWRTaXplKTsKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBjYWNo
ZWRJbWFnZTsKKworICAgIGNhY2hlZEltYWdlID0gdHJ5VG9EZWNvZGVBbmRTY2FsZShzY2FsZWRT
aXplKTsKKyAgICBpZiAoY2FjaGVkSW1hZ2UpCisgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsK
KyAgICByZXR1cm4gMDsKK30KKworY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFt
ZUdlbmVyYXRvcjo6dHJ5VG9Mb2NrQ2FjaGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sK
KyAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29tcGxldGVD
YWNoZSh0aGlzLCBzY2FsZWRTaXplKTsKK30KKworY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBmdWxsU2l6ZUltYWdlLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIC8vIElm
IHRoZSByZXF1ZXN0ZWQgc2NhbGVkIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIGZ1bGwgc2l6ZSB0
aGVuIGV4aXQKKyAgICAvLyBlYXJseS4gVGhpcyBzYXZlcyBhIGNhY2hlIGxvb2t1cC4KKyAgICBp
ZiAoc2NhbGVkU2l6ZSA9PSBtX2Z1bGxTaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
ICghZnVsbFNpemVJbWFnZSkKKyAgICAgICAgZnVsbFNpemVJbWFnZSA9IEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUodGhpcywgbV9mdWxsU2l6ZSk7CisK
KyAgICBpZiAoIWZ1bGxTaXplSW1hZ2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2tCaXRt
YXAgc2NhbGVkQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoCisgICAgICAg
IGZ1bGxTaXplSW1hZ2UtPmJpdG1hcCgpLCByZXNpemVNZXRob2QoKSwgc2NhbGVkU2l6ZS53aWR0
aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICBPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVu
dD4gc2NhbGVkSW1hZ2UgPSBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUoc2NhbGVkU2l6ZSwg
c2NhbGVkQml0bWFwLCBmdWxsU2l6ZUltYWdlLT5pc0NvbXBsZXRlKCkpOworCisgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSh0aGlzLCBmdWxsU2l6ZUltYWdl
KTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRM
b2NrQ2FjaGUodGhpcywgc2NhbGVkSW1hZ2UucmVsZWFzZSgpKTsKK30KKworY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZShj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQogewogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGE7CiAgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKICAgICB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9kYXRh
TXV0ZXgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gYSBzaGFsbG93IGNvcHkg
aW5zdGVhZC4gTm93IHdlJ3JlIHJlc3RyaWN0ZWQgYnkgdGhlIEFQSSBvZiBTaGFyZWRCdWZmZXIu
CiAgICAgICAgIGRhdGEgPSBtX2RhdGEtPmNvcHkoKTsKQEAgLTY3LDIyICsxMjgsMjYgQEAgU2tC
aXRtYXAgSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSwgY29uc3QgU2sKICAgICB9CiAKICAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBk
ZWNvZGVyKGFkb3B0UHRyKEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLmdldCgpLCBJbWFnZVNv
dXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVBcHBsaWVkKSkpOworICAgIGlmICghZGVjb2RlciAmJiBtX2ltYWdlRGVjb2RlckZhY3Rvcnkp
CisgICAgICAgIGRlY29kZXIgPSBtX2ltYWdlRGVjb2RlckZhY3RvcnktPmNyZWF0ZSgpOwogICAg
IGlmICghZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisgICAgICAgIHJldHVy
biAwOwogCiAgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQp
OwogICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDAp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOworICAgIGlmICgh
ZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgYm9vbCBpc0NvbXBsZXRlID0gZnJhbWUtPnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CisgICAgU2tCaXRtYXAgZnVsbFNpemVCaXRtYXAg
PSBmcmFtZS0+Z2V0U2tCaXRtYXAoKTsKKyAgICBBU1NFUlQoZnVsbFNpemVCaXRtYXAud2lkdGgo
KSA9PSBtX2Z1bGxTaXplLndpZHRoKCkgJiYgZnVsbFNpemVCaXRtYXAuaGVpZ2h0KCkgPT0gbV9m
dWxsU2l6ZS5oZWlnaHQoKSk7CiAKLSAgICBTa0JpdG1hcCBiaXRtYXAgPSBmcmFtZS0+Z2V0U2tC
aXRtYXAoKTsKLSAgICBTa0lTaXplIGJpdG1hcFNpemUgPSBTa0lTaXplOjpNYWtlKGJpdG1hcC53
aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwotICAgIGlmIChiaXRtYXBTaXplICE9IHNjYWxlZFNp
emUpCi0gICAgICAgIGJpdG1hcCA9IHNraWE6OkltYWdlT3BlcmF0aW9uczo6UmVzaXplKGJpdG1h
cCwgc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSRVNJWkVfTEFOQ1pPUzMsIHNjYWxlZFNpemUud2lk
dGgoKSwgc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogZnVsbFNpemVJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0
QW5kTG9ja0NhY2hlKAorICAgICAgICB0aGlzLCBTY2FsZWRJbWFnZUZyYWdtZW50OjpjcmVhdGUo
bV9mdWxsU2l6ZSwgZnVsbFNpemVCaXRtYXAsIGlzQ29tcGxldGUpKTsKIAotICAgIFNrQml0bWFw
IGJpdG1hcFN1YnNldDsKLSAgICBiaXRtYXAuZXh0cmFjdFN1YnNldCgmYml0bWFwU3Vic2V0LCBz
Y2FsZWRTdWJzZXQpOwotICAgIHJldHVybiBiaXRtYXBTdWJzZXQ7CisgICAgaWYgKG1fZnVsbFNp
emUgPT0gc2NhbGVkU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZ1bGxTaXplSW1hZ2U7CisgICAgcmV0
dXJuIHRyeVRvU2NhbGUoZnVsbFNpemVJbWFnZSwgc2NhbGVkU2l6ZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaAppbmRleCA2ZGY1YjIz
Y2VkMTRhZTUwOTU1YWY2M2U4NzhlM2JhN2RhNjU0ODkyLi4wODMxYzQ0OTgyMTE0ZjRhNjZjNjk2
N2U5ZjJiNjhjYTAzM2NmNTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCkBAIC0z
OCwyNiArMzgsNDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURlY29k
ZXI7CitjbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCitj
bGFzcyBJbWFnZURlY29kZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbWFnZURl
Y29kZXJGYWN0b3J5KCkgeyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4g
Y3JlYXRlKCkgPSAwOworfTsKKwogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxJbWFnZUZyYW1lR2VuZXJhdG9yPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUoY29uc3QgU2tJU2l6ZSYgZnVsbFNp
emUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VGcmFtZUdlbmVyYXRvcihk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFn
ZUZyYW1lR2VuZXJhdG9yKGZ1bGxTaXplLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKICAgICB9
CiAKLSAgICBJbWFnZUZyYW1lR2VuZXJhdG9yKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIEltYWdlRnJhbWVHZW5lcmF0b3IoY29uc3QgU2tJU2l6
ZSYgZnVsbFNpemUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwogICAgIH5JbWFnZUZyYW1lR2VuZXJhdG9yKCk7CiAKLSAgICBTa0JpdG1hcCBkZWNvZGVB
bmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGRlY29kZUFuZFNjYWxlKGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOwogCiAgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCisgICAgdm9pZCBzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyhQYXNzT3duUHRyPEltYWdlRGVjb2RlckZhY3Rvcnk+
IGZhY3RvcnkpIHsgbV9pbWFnZURlY29kZXJGYWN0b3J5ID0gZmFjdG9yeTsgfQorCiBwcml2YXRl
OgorICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGlsZSBtX2RlY29kZU11dGV4IGlz
IGxvY2tlZC4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0cnlUb0xvY2tDYWNoZShj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiB0cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IHRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7CisKKyAgICBT
a0lTaXplIG1fZnVsbFNpemU7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogICAg
IGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7Ci0gICAgTXV0ZXggbV9tdXRleDsKKworICAgIE93blB0
cjxJbWFnZURlY29kZXJGYWN0b3J5PiBtX2ltYWdlRGVjb2RlckZhY3Rvcnk7CisKKyAgICAvLyBQ
cmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUgb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBkYXRhLgorICAg
IE11dGV4IG1fZGVjb2RlTXV0ZXg7CisKKyAgICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGFjY2Vz
cyB0byBtX2RhdGEuCisgICAgTXV0ZXggbV9kYXRhTXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKaW5kZXggMGE1ZDVh
MzhhZjRlNjk3Y2U5NzA3YWZiNmRkYzAxYWVlNDcwOTBmYi4uNTU1MjY2MzYyYTY1MjhjZDRjNTMz
ODIyZjFmNjU4NmJiZmQ4NDM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmNw
cApAQCAtMzgsNiArMzgsNyBAQCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4
ZWxSZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZQogICAgICwgbV9mcmFt
ZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKICAgICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXpl
KQogICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQorICAgICwgbV9sb2NrZWRDYWNo
ZWRJbWFnZSgwKQogewogfQogCkBAIC01OCwxOCArNTksMjkgQEAgYm9vbCBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6aXNDbGlwcGVkKCkgY29uc3QKIHZvaWQqIExhenlEZWNvZGluZ1BpeGVsUmVmOjpv
bkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiopCiB7CiAgICAgbV9tdXRleC5sb2NrKCk7Ci0gICAg
QVNTRVJUKG1fbG9ja2VkQml0bWFwLmlzTnVsbCgpKTsKLSAgICBtX2xvY2tlZEJpdG1hcCA9IG1f
ZnJhbWVHZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKG1fc2NhbGVkU2l6ZSwgbV9zY2FsZWRTdWJz
ZXQpOwotICAgIGlmIChtX2xvY2tlZEJpdG1hcC5pc051bGwoKSkKKyAgICBBU1NFUlQoIW1fbG9j
a2VkQ2FjaGVkSW1hZ2UpOworCisgICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+bG9ja0NvbXBsZXRlQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5n
ZXQoKSwgbV9zY2FsZWRTaXplKTsKKworICAgIC8vIFVzZSBJbWFnZUZyYW1lR2VuZXJhdG9yIHRv
IGdlbmVyYXRlIHRoZSBpbWFnZS4gSXQgd2lsbCBsb2NrIHRoZSBjYWNoZQorICAgIC8vIGVudHJ5
IGZvciB1cy4KKyAgICBpZiAoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpCisgICAgICAgIG1fbG9ja2Vk
Q2FjaGVkSW1hZ2UgPSBtX2ZyYW1lR2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShtX3NjYWxlZFNp
emUpOworCisgICAgaWYgKCFtX2xvY2tlZENhY2hlZEltYWdlKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBtX2xvY2tlZEJpdG1hcC5sb2NrUGl4ZWxzKCk7Ci0gICAgcmV0dXJuIG1fbG9ja2VkQml0
bWFwLmdldEFkZHIoMCwgMCk7CisKKyAgICBBU1NFUlQoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UtPmJp
dG1hcCgpLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQobV9sb2NrZWRDYWNoZWRJbWFnZS0+c2NhbGVk
U2l6ZSgpID09IG1fc2NhbGVkU2l6ZSk7CisgICAgcmV0dXJuIG1fbG9ja2VkQ2FjaGVkSW1hZ2Ut
PmJpdG1hcCgpLmdldEFkZHIobV9zY2FsZWRTdWJzZXQueCgpLCBtX3NjYWxlZFN1YnNldC55KCkp
OwogfQogCiB2b2lkIExhenlEZWNvZGluZ1BpeGVsUmVmOjpvblVubG9ja1BpeGVscygpCiB7Ci0g
ICAgbV9sb2NrZWRCaXRtYXAudW5sb2NrUGl4ZWxzKCk7Ci0gICAgbV9sb2NrZWRCaXRtYXAucmVz
ZXQoKTsKKyAgICBpZiAobV9sb2NrZWRDYWNoZWRJbWFnZSkgeworICAgICAgICBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCks
IG1fbG9ja2VkQ2FjaGVkSW1hZ2UpOworICAgICAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gMDsK
KyAgICB9CiAgICAgbV9tdXRleC51bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1Bp
eGVsUmVmLmgKaW5kZXggODAzMTRjZjIxZjdhMGFiY2JlMTQzMDg4ZmIwZGM2YWVlMmQwYjQyNy4u
OWIyYTQ2ZDRlNWQ5YjQ1ZjRlMDcyZTczMjgwYzE0YjAyYWIyYTBiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxS
ZWYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5
RGVjb2RpbmdQaXhlbFJlZi5oCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3I7CitjbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50
OwogCiBjbGFzcyBMYXp5RGVjb2RpbmdQaXhlbFJlZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKIHB1
YmxpYzoKQEAgLTYxLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBTa0lTaXplIG1fc2NhbGVkU2l6
ZTsKICAgICBTa0lSZWN0IG1fc2NhbGVkU3Vic2V0OwogCi0gICAgU2tCaXRtYXAgbV9sb2NrZWRC
aXRtYXA7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogbV9sb2NrZWRDYWNoZWRJbWFn
ZTsKICAgICBNdXRleCBtX211dGV4OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50
LmNwcAppbmRleCA5NzRlNmZmODQ3ZWM1YjVkZDQ2OTU4ZjIwYmQ0ODEyOTM5YmQzNTczLi43MWJi
NjIwYWViNDc2OTQ1NGFmNTUyZmM2NTk1Y2E4OTdiOWQ1NDUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJ
bWFnZUZyYWdtZW50LmNwcApAQCAtMzMsMjIgKzMzLDExIEBAIFNjYWxlZEltYWdlRnJhZ21lbnQ6
On5TY2FsZWRJbWFnZUZyYWdtZW50KCkKIHsKIH0KIAotU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2Nh
bGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQotICAgIDogbV9p
bWFnZUlkKGltYWdlSWQpCi0gICAgLCBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkKK1NjYWxlZElt
YWdlRnJhZ21lbnQ6OlNjYWxlZEltYWdlRnJhZ21lbnQoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYm9vbCBpc0NvbXBsZXRlKQorICAgIDog
bV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX2JpdG1hcChiaXRtYXApCiAgICAgLCBt
X2lzQ29tcGxldGUoaXNDb21wbGV0ZSkKIHsKIH0KIAotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50
Ojppc0VxdWFsKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAot
ewotICAgIHJldHVybiBpbWFnZUlkID09IG1faW1hZ2VJZCAmJiBzY2FsZWRTaXplID09IG1fc2Nh
bGVkU2l6ZTsKLX0KLQotYm9vbCBTY2FsZWRJbWFnZUZyYWdtZW50Ojppc0VxdWFsKGludCBpbWFn
ZUlkKSBjb25zdAotewotICAgIHJldHVybiBpbWFnZUlkID09IG1faW1hZ2VJZDsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCmluZGV4IDVi
N2ZmYzk2MDE0ZTA1NzNlODM1MDc4MDJiNjZmMzRkOWJjZDNmNmQuLmYwNzA3YjNjZTM0YzY0NGY1
YmI3NTE0ZmQ2NGIxZGYyZDA3MTJjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgK
QEAgLTM0LDI5ICszNCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFNjYWxlZElt
YWdlRnJhZ21lbnQgaXMgYSBzY2FsZWQgdmVyc2lvbiBvZiBhIGltYWdlLiBJdCBpcyBpZGVudGlm
aWVkCi0vLyBieSB0d28gdGhpbmdzOgotLy8gMS4gSW1hZ2UgSUQuIFRoZSBvcmlnaW5hbCBpbWFn
ZSB0aGF0IHRoaXMgZnJhZ21lbnQgY29tZXMgZnJvbS4KLS8vIDIuIFNjYWxlZCBpbWFnZSBzaXpl
LgorLy8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNjYWxlZCB2ZXJzaW9uIG9mIGFuIGltYWdl
LgogY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGludCBpbWFnZUlkLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBib29sIGlzQ29tcGxldGUp
CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY3JlYXRlKGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21w
bGV0ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2NhbGVkSW1hZ2VGcmFn
bWVudChpbWFnZUlkLCBzY2FsZWRTaXplLCBiaXRtYXAsIGlzQ29tcGxldGUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50KHNjYWxlZFNpemUsIGJpdG1h
cCwgaXNDb21wbGV0ZSkpOwogICAgIH0KIAotICAgIFNjYWxlZEltYWdlRnJhZ21lbnQoaW50IGlt
YWdlSWQsIGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7
CisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBTa0lTaXplJiwgY29uc3QgU2tCaXRtYXAm
LCBib29sIGlzQ29tcGxldGUpOwogICAgIH5TY2FsZWRJbWFnZUZyYWdtZW50KCk7CiAKKyAgICBj
b25zdCBTa0lTaXplJiBzY2FsZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZWRTaXplOyB9
CiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwOyB9
CiAgICAgU2tCaXRtYXAmIGJpdG1hcCgpIHsgcmV0dXJuIG1fYml0bWFwOyB9Ci0KLSAgICBib29s
IGlzRXF1YWwoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Owot
ICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJZCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXBsZXRl
KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CiAKIHByaXZhdGU6Ci0gICAgaW50IG1f
aW1hZ2VJZDsKICAgICBTa0lTaXplIG1fc2NhbGVkU2l6ZTsKICAgICBTa0JpdG1hcCBtX2JpdG1h
cDsKICAgICBib29sIG1faXNDb21wbGV0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjI5N2Nm
ZGY3NTIyNWYyYTNlOGIzNzgwN2Q0ODVlZDAwMGRkMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNrU2l6ZUhhc2hfaAorI2RlZmluZSBTa1Np
emVIYXNoX2gKKworI2luY2x1ZGUgIlNrU2NhbGFyLmgiCisjaW5jbHVkZSAiU2tTaXplLmgiCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSW50SGFzaDxTa1NpemU+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBTa1NpemUmIGtleSkgeyByZXR1cm4gcGFpckludEhhc2goa2V5LndpZHRoKCksIGtleS5oZWln
aHQoKSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTa1NpemUmIGEsIGNvbnN0IFNr
U2l6ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8U2tTaXplPiB7CisgICAgdHlwZWRlZiBJbnRIYXNoPFNrU2l6ZT4gSGFzaDsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U2tTaXplPiA6IEdlbmVyaWNIYXNo
VHJhaXRzPFNrU2l6ZT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsK
KyAgICBzdGF0aWMgU2tTaXplIGVtcHR5VmFsdWUoKSB7IHJldHVybiBTa1NpemU6Ok1ha2UoMCwg
MCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoU2tTaXplJiBzbG90
KQorICAgIHsKKyAgICAgICAgc2xvdCA9IFNrU2l6ZTo6TWFrZSgtMSwgLTEpOworICAgIH0KKyAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTa1NpemUmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLndpZHRoKCkgPT0gLTEgJiYgdmFsdWUuaGVpZ2h0KCkgPT0g
LTE7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSW50SGFzaDxTa0lTaXplPiB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2tJU2l6ZSYga2V5KSB7IHJldHVybiBwYWly
SW50SGFzaChrZXkud2lkdGgoKSwga2V5LmhlaWdodCgpKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFNrSVNpemUmIGEsIGNvbnN0IFNrSVNpemUmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFNrSVNpemU+IHsKKyAg
ICB0eXBlZGVmIEludEhhc2g8U2tJU2l6ZT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8U2tJU2l6ZT4gOiBHZW5lcmljSGFzaFRyYWl0czxTa0lTaXplPiB7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgIHN0YXRpYyBTa0lTaXplIGVt
cHR5VmFsdWUoKSB7IHJldHVybiBTa0lTaXplOjpNYWtlKDAsIDApOyB9CisgICAgc3RhdGljIHZv
aWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNrSVNpemUmIHNsb3QpCisgICAgeworICAgICAgICBz
bG90ID0gU2tJU2l6ZTo6TWFrZSgtMSwgLTEpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZShjb25zdCBTa0lTaXplJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVlLmhlaWdodCgpID09IC0xOworICAgIH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2tTaXplSGFzaF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQppbmRleCBkZDVkNmNmMWI2YmU4YjBjYjA5N2VmMGUyNTRmZDAxMDNl
ZjNkMDdkLi5kZjUwYWZmYzU5MTEyMTkyZTc1MDVmNWUyYjgwNTg3YmM5ZDVkZDcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTgwLDYgKzgwLDcgQEAKICAgICAgICAgICAgICd0
ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkxldmVsREJD
b2RpbmdUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0
ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVz
dC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViS2l0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKaW5kZXggNmJjYTFkODEw
NGU1NmIwNjRkZjUyNzU2MGU4ZmQxMzRiOWRiYmJhOS4uYTUxN2QxNTVlNmZhMWYyZjIxOWU5MTFk
N2ZhOTlhZTE0NzI5MWFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViS2l0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCkBA
IC0xMzMsNiArMTMzLDcgQEAgdm9pZCBpbml0aWFsaXplV2l0aG91dFY4KFdlYktpdFBsYXRmb3Jt
U3VwcG9ydCogd2ViS2l0UGxhdGZvcm1TdXBwb3J0KQogICAgIEFTU0VSVCghc193ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQpOwogICAgIHNfd2ViS2l0UGxhdGZvcm1TdXBwb3J0ID0gd2ViS2l0UGxhdGZv
cm1TdXBwb3J0OwogICAgIFBsYXRmb3JtOjppbml0aWFsaXplKHNfd2ViS2l0UGxhdGZvcm1TdXBw
b3J0KTsKKyAgICBXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7
CiAKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmNwcAppbmRleCAxNjQ4ODBhYTdhNTZkZTAyMzg3Y2JiOTg1NjBlNDIzMzJhZTBmZDIxLi42
YTMzNzg2YWNmM2I1MjU4ZTE0YmUwY2MxNWRhYTFiMTIwZmFmNzBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTMxLDggKzMxLDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJTZXR0aW5nc0ltcGwuaCIKIAorI2lu
Y2x1ZGUgIkRlZmVycmVkSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiRm9udFJlbmRlcmluZ01v
ZGUuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VVJMLmg+CkBAIC01MDUsMTAgKzUwNSw3IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXREZWZl
cnJlZDJkQ2FudmFzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQgV2ViU2V0dGluZ3NJbXBs
OjpzZXREZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBp
ZiAoIW1fZGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZCAmJiBlbmFibGVkKQotICAgICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKLSAgICBpZiAobV9k
ZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkICYmICFlbmFibGVkKQotICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNldEVu
YWJsZWQoZW5hYmxlZCk7CiAgICAgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5h
YmxlZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZl
cnJlZEltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9E
ZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCmluZGV4IDRiY2MyOTg4MjJlNTJlMzBkMWM0ZWFm
NjMwNjgwYTlhZTY1OWZmZDIuLjdmZDQwMTdhNmU0MGJmZmNhZjc3ZGY2Y2NmMTFmMDUyNjRhOGY2
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFn
ZURlY29kZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVy
cmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTczLDcgKzczLDggQEAgY2xhc3MgRGVmZXJyZWRJ
bWFnZURlY29kZXJUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFn
ZURlY29kZXIKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQogICAgIHsKLSAgICAg
ICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFsaXplT25NYWluVGhyZWFkKCk7CisgICAgICAg
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKKyAgICAgICAgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHdoaXRlUE5HLCBzaXplb2Yod2hpdGVQTkcpKTsKICAgICAgICAgbV9hY3R1
YWxEZWNvZGVyID0gbmV3IE1vY2tJbWFnZURlY29kZXIodGhpcyk7CiAgICAgICAgIG1fYWN0dWFs
RGVjb2Rlci0+c2V0U2l6ZSgxLCAxKTsKQEAgLTkwLDEwICs5MSwxOSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkKICAgICB7Ci0gICAgICAgIG1f
ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQgPSBtX2FjdHVhbERlY29kZXItPmZyYW1lQnVmZmVyUmVx
dWVzdENvdW50KCk7CiAgICAgICAgIG1fYWN0dWFsRGVjb2RlciA9IDA7CiAgICAgfQogCisgICAg
dmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkKKyAgICB7CisgICAgICAgICsrbV9m
cmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6
OkZyYW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIC8vIERvbid0IG93
biB0aGlzIGJ1dCBzYXZlcyB0aGUgcG9pbnRlciB0byBxdWVyeSBzdGF0ZXMuCiAgICAgTW9ja0lt
YWdlRGVjb2RlciogbV9hY3R1YWxEZWNvZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YTBhMmY4NjQyNWFkMzI2NmM0NDg4NTg0NmE5ZjRkNGJlODg4YjNmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5j
cHAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCisKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3Rv
cmUuaCIKKyNpbmNsdWRlICJNb2NrSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OworCisv
LyBIZWxwZXIgbWV0aG9kcyB0byBnZW5lcmF0ZSBzdGFuZGFyZCBzaXplcy4KK1NrSVNpemUgZnVs
bFNpemUoKSB7IHJldHVybiBTa0lTaXplOjpNYWtlKDEwMCwgMTAwKTsgfQorU2tJU2l6ZSBzY2Fs
ZWRTaXplKCkgeyByZXR1cm4gU2tJU2l6ZTo6TWFrZSg1MCwgNTApOyB9CisKK2NsYXNzIEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0OworCitjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeSA6IHB1
YmxpYyBJbWFnZURlY29kZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeT4gY3JlYXRlKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrSW1hZ2VEZWNv
ZGVyRmFjdG9yeSh0ZXN0KSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPEltYWdl
RGVjb2Rlcj4gY3JlYXRlKCk7CisKK3ByaXZhdGU6CisgICAgTW9ja0ltYWdlRGVjb2RlckZhY3Rv
cnkoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QqIHRlc3QpCisgICAgICAgIDogbV90ZXN0KHRlc3Qp
CisgICAgeworICAgIH0KKworICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KiBtX3Rlc3Q7Cit9
OworCitjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRl
c3QsIHB1YmxpYyBNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0aWFs
aXplT25jZSgpOworICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworICAg
ICAgICBtX2dlbmVyYXRvciA9IEltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZShmdWxsU2l6ZSgp
LCBtX2RhdGEsIHRydWUpOworICAgICAgICBtX2dlbmVyYXRvci0+c2V0SW1hZ2VEZWNvZGVyRmFj
dG9yeUZvclRlc3RpbmcoTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSh0aGlzKSk7Cisg
ICAgICAgIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQgPSAwOworICAgICAgICBtX2ZyYW1lU3Rh
dHVzID0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
VGVhckRvd24oKQorICAgIHsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93bigp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVyQmVpbmdEZXN0cm95ZWQoKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKQorICAg
IHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworICAgIH0KKworICAgIHZp
cnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZnJhbWVTdGF0dXM7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGVDb21wbGV0ZUltYWdlKGNvbnN0IFNrSVNp
emUmIHNpemUpCisgICAgeworICAgICAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgICAgIGJpdG1h
cC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgICAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICAgICAgcmV0
dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzaXplLCBiaXRtYXAsIHRydWUpOworICAg
IH0KKworICAgIHZvaWQgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgc3Rh
dHVzKSAgeyBtX2ZyYW1lU3RhdHVzID0gc3RhdHVzOyB9CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2RhdGE7CisgICAgUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IG1fZ2VuZXJhdG9y
OworICAgIGludCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50OworICAgIEltYWdlRnJhbWU6OkZy
YW1lU3RhdHVzIG1fZnJhbWVTdGF0dXM7Cit9OworCitQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4g
TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSgpCit7CisgICAgTW9ja0ltYWdlRGVjb2Rl
ciogZGVjb2RlciA9IG5ldyBNb2NrSW1hZ2VEZWNvZGVyKG1fdGVzdCk7CisgICAgZGVjb2Rlci0+
c2V0U2l6ZShmdWxsU2l6ZSgpLndpZHRoKCksIGZ1bGxTaXplKCkuaGVpZ2h0KCkpOworICAgIHJl
dHVybiBhZG9wdFB0cihkZWNvZGVyKTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LCBjYWNoZUhpdCkKK3sKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsSW1h
Z2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgK
KyAgICAgICAgbV9nZW5lcmF0b3IuZ2V0KCksIGNyZWF0ZUNvbXBsZXRlSW1hZ2UoZnVsbFNpemUo
KSkpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNpemUoKSk7
CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVy
YXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoZnVsbEltYWdlLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShmdWxsU2l6
ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cit9CisKK1RFU1RfRihJ
bWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aFNjYWxlKQoreworICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQoKSwg
Y3JlYXRlQ29tcGxldGVJbWFnZShmdWxsU2l6ZSgpKSk7CisgICAgRVhQRUNUX0VRKGZ1bGxTaXpl
KCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBmdWxsSW1hZ2UpOworCisg
ICAgLy8gQ2FjaGUgbWlzcyBiZWNhdXNlIG9mIHNjYWxlZCBzaXplIG5vdCBmb3VuZC4KKyAgICBj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBzY2FsZWRJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNv
ZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9ORShmdWxsSW1hZ2UsIHNjYWxl
ZEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkU2l6ZSgpLCBzY2FsZWRJbWFnZS0+c2NhbGVk
U2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCBzY2FsZWRJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBoaXQuCisg
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRl
Y29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNjYWxlZEltYWdlLCB0
ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHRlbXBJbWFnZS0+c2NhbGVk
U2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50KTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0
LCBjYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUpCit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisKKyAgICAvLyBDYWNoZSBtaXNzLgorICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIHNjYWxlZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFu
ZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1
ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUShzY2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2Fs
ZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2Fj
aGUobV9nZW5lcmF0b3IuZ2V0KCksIHNjYWxlZEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4K
KyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsSW1hZ2UgPSBtX2dlbmVyYXRvci0+
ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CisgICAgRVhQRUNUX05FKHNjYWxlZEltYWdlLCBm
dWxsSW1hZ2UpOworICAgIEVYUEVDVF9FUShmdWxsU2l6ZSgpLCBmdWxsSW1hZ2UtPnNjYWxlZFNp
emUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgZnVsbEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2Rl
QW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkSW1hZ2UsIHRlbXBJ
bWFnZSk7CisgICAgRVhQRUNUX0VRKHNjYWxlZFNpemUoKSwgdGVtcEltYWdlLT5zY2FsZWRTaXpl
KCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQpOworfQorCisvLyBUZXN0IHRoYXQgaW5jb21wbGV0ZSBmcmFtZXMgYXJl
IG5vdCBjYWNoZWQuCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dp
dGhJbmNvbXBsZXRlRGVjb2RlKQoreworICAgIHNldEZyYW1lU3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lUGFydGlhbCk7CisKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2Ug
PSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsK
KworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQo
KSwgdGVtcEltYWdlKTsKKworICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRT
Y2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgzLCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAppbmRleCBj
OWMwZDAxZDZkODM4MjA5MmIwNzRiOTRlNGRkOWZkN2FlMWM4NjgzLi44YjRmNDAzODIzOWMyOTVk
ZTQ4YzlkZWVkN2YzOWVmOGFkNThmMDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaApAQCAtMzIsNiArMzIsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBm
cmFtZUJ1ZmZlclJlcXVlc3RlZCgpID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlRnJhbWU6OkZyYW1l
U3RhdHVzIGZyYW1lU3RhdHVzKCkgPSAwOwogfTsKIAogY2xhc3MgTW9ja0ltYWdlRGVjb2RlciA6
IHB1YmxpYyBJbWFnZURlY29kZXIgewpAQCAtNTUsOSArNTcsMTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkKICAgICB7CiAgICAg
ICAgICsrbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudDsKKyAgICAgICAgbV9jbGllbnQtPmZyYW1l
QnVmZmVyUmVxdWVzdGVkKCk7CiAKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgx
KTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFNpemUoc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTdGF0
dXMobV9jbGllbnQtPmZyYW1lU3RhdHVzKCkpOwogICAgICAgICByZXR1cm4gJm1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176325</attachid>
            <date>2012-11-27 12:27:30 -0800</date>
            <delta_ts>2012-11-27 12:40:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99784-20121127122506.patch</filename>
            <type>text/plain</type>
            <size>49763</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM2NjhiN2VmNGE0MjM3
MDk3Yjg3NDEwNWM3MGM3ZjI3YWIyZmM1Mi4uNDI0OTMzNmI3YWM4ZDVjY2Y1NzM0NWJhNzQwOWNm
NjZiZmRhOTQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGEgdGhyZWFkLXNhZmUgaW1hZ2UgY2FjaGUg
dG8gYmUgdXNlZCB3aXRoIGRlZmVycmVkIGltYWdlCisgICAgICAgIGRlY29kaW5nLiBJbWFnZSBj
YWNoZSBjYW4gbm93IGJlIGFjY2Vzc2VkIG9uIGFueSB0aHJlYWQuCisKKyAgICAgICAgVGhlIHBh
dGNoIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBsb2dpYzoKKyAgICAgICAgMS4gTXV0ZXggdG8g
cHJvdGVjdCBhbGwgY2FjaGUgb3BlcmF0aW9ucy4KKyAgICAgICAgMi4gQ2FjaGUgaW5kZXhpbmcg
dXNpbmcga2V5IChJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZSBzY2FsZWRTaXplKQorICAg
ICAgICAzLiBDYWNoZSBsb29rdXAuCisgICAgICAgIDQuIENhY2hlIGluc2VydGlvbi4KKyAgICAg
ICAgNS4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyeSBieSBzY2FsaW5nIGZ1bGwgc2l6ZSBpbWFn
ZS4KKyAgICAgICAgNi4gR2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzIGJ5IGRlY29kaW5nIGFu
ZCBzY2FsaW5nLgorCisgICAgICAgIENsYXNzZXMgaW52b2x2ZWQ6CisKKyAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlCisKKyAgICAgICAgUmVzcG9uc2libGUgZm9yIG93bmluZyBjYWNoZSBlbnRy
aWVzIGFuZCBpbmRleGluZy4gUHJ1bmluZyBhbmQgbWVtb3J5CisgICAgICAgIG1hbmFnZW1lbnQg
d2lsbCBiZSBhZGRlZCBsYXRlci4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yCisKKyAg
ICAgICAgUmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgbmV3IGNhY2hlIGVudGllcyBhbmQgaW5z
ZXJ0IHRoZW0gaW50bworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmUuCisKKyAgICAgICAgTGF6
eURlY29kaW5nUGl4ZWxSZWYKKworICAgICAgICBSZXNwb25zaWJsZSBmb3IgY2FjaGUgbG9va3Vw
IGFuZCBsYXp5IGdlbmVyYXRpb24gb2YgY2FjaGUgZW50cmllcworICAgICAgICB1c2luZyBJbWFn
ZUZyYW1lR2VuZXJhdG9yLiBUaGVyZSBpcyBhIG11dGV4IHRvIHByb3RlY3QgY29uY3VycmVudAor
ICAgICAgICBsb2NrIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgaXRlbXMgYXJlIG5vdCBp
bXBsZW1lbnRlZCBpbiB0aGlzIHBhdGNoOgorICAgICAgICAxLiBDYWNoZSBwcnVuaW5nLgorICAg
ICAgICAyLiBTZXR0aW5nIGNhY2hlIG1lbW9yeSBsaW1pdC4KKyAgICAgICAgMy4gQ2FjaGUgZGVs
ZXRpb24uCisgICAgICAgIDQuIENhY2hpbmcgaW5jb21wbGV0ZSBpbWFnZXMgYW5kIEltYWdlRGVj
b2Rlci4KKworICAgICAgICBVbml0IHRlc3RzIGFkZGVkIGluIEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LmNwcC4KKyAgICAgICAgTGF5b3V0IHRlc3RzIGFyZSB1bmRlciBwbGF0Zm9ybS9jaHJvbWl1
bS92aXJ0dWFsL2Zhc3QvaW1hZ2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJy
ZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURl
Y29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKERlZmVycmVk
SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZURlY29kaW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmluaXRp
YWxpemVPbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZSk6CisgICAgICAgIExvb2t1cCBjb21wbGV0ZSBjYWNoZSBlbnRyeSB1c2luZyBoYXNoIGtl
eSwgaW5jcmVtZW50IHVzZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdT
dG9yZTo6bG9ja0luY29tcGxldGVDYWNoZSk6IFRPRE8uCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kaW5nU3RvcmU6OnVubG9ja0NhY2hlKToKKyAgICAgICAgTG9va3VwIGNhY2hlIGVudHJ5
IHVzaW5nIGhhc2gga2V5LCBkZWNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExvY2tDYWNo
ZSk6CisgICAgICAgIEluc2VydCBuZXcgY2FjaGUgZW50cnkgYW5kIGluY3JlbWVudCB1c2UgY291
bnQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OnBydW5lKTogVE9ETy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGluZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6Y3JlYXRl
QW5kVXNlKToKKyAgICAgICAgKENhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpDYWNoZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6Q2FjaGVFbnRyeTo6fkNhY2hlRW50cnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlKToKKyAgICAg
ICAgTWV0aG9kIGZvciBjcmVhdGluZyBuZXcgY2FjaGUgZW50cmllcy4gVGhpcyBpcyBwcm90ZWN0
ZWQgYnkgYSBtdXRleAorICAgICAgICB0byBwcmV2ZW50IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4g
V2hpY2ggbWVhbnMgb25seSBvbmUgdGhyZWFkIGNhbgorICAgICAgICBnZW5lcmF0ZSBuZXcgY2Fj
aGUgZW50cmllcyBmb3IgYSBzZXQgb2YgZW5jb2RlZCBkYXRhLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNoZSk6
CisgICAgICAgIFRyaWVzIHRvIGxvb2t1cCBhIGNhY2hlIGVudHJ5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9TY2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGxv
b2t1cCBhIGZ1bGwgc2l6ZSBjYWNoZSBlbnRyeSBhbmQgZ2VuZXJhdGUgYSBzY2FsZWQgdmVyc2lv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5k
U2NhbGUpOgorICAgICAgICBUcmllcyB0byBkZWNvZGUgYW5kIHNjYWxlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSW1hZ2VGcmFtZUdl
bmVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXRJbWFn
ZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF6
eURlY29kaW5nUGl4ZWxSZWY6OkxhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKFdlYkNv
cmU6OkxhenlEZWNvZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChMYXp5RGVjb2RpbmdQaXhlbFJlZik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21l
bnQ6OmNyZWF0ZSk6CisgICAgICAgIChTY2FsZWRJbWFnZUZyYWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OnNjYWxlZFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorCiAyMDEyLTExLTI2ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAg
ICAgICBOb2RlOiBNb3ZlIEFyZVNWR0F0dHJpYnV0ZXNWYWxpZEZsYWcgdG8gRWxlbWVudEF0dHJp
YnV0ZURhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGJhYTcxOTRiNmViNDRkYjkx
OGNkZTU2ZjdiNzI5MDI2YWQ5ZWQyODcuLmM5YTkwYTFkMGY0Y2ViMTg2MmRkNWU2NmQwYzE3ZDZl
MTAzMDJlYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIw
MTItMTEtMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIEltcGxlbWVudCBmdWxsLWZlYXR1cmVkIGltYWdlIGNhY2hlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTc4NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0IHRvIHRlc3QgY2FjaGUgbG9naWMgYW5kIGdlbmVyYXRpb24KKyAgICAgICAgb2YgbmV3
IGNhY2hlIGVudHJpZXMuCisKKyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVI
aXQKKyAgICAgICAgVGVzdCB0aGF0IGEgY29tcGxldGUgY2FjaGVkIGVudHJ5IGlzIHJldXNlZC4K
KworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNoZU1pc3NXaXRoU2NhbGUKKyAg
ICAgICAgQ2FjaGUgbWlzcyBmb3IgYSBzY2FsZWQgaW1hZ2UgYnV0IGNhY2hlIGhpdCBvbiBhIGZ1
bGwgc2l6ZSBpbWFnZS4KKyAgICAgICAgU2NhbGVkIGltYWdlIGlzIGNyZWF0ZWQgZnJvbSBjYWNo
ZWQgZnVsbCBzaXplIGltYWdlLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNh
Y2hlTWlzc1dpdGhEZWNvZGVBbmRTY2FsZQorICAgICAgICBDYWNoZSBtaXNzIGZvciBib3RoIHNj
YWxlZCBpbWFnZSBhbmQgZnVsbCBzaXplIGltYWdlLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0LmNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlCisgICAgICAgIFRlc3QgdGhl
IGxvZ2ljIGZvciBoYW5kbGluZyBpbmNvbXBsZXRlIGNhY2hlIG9iamVjdHMuCisKKyAgICAgICAg
KiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViS2l0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6aW5pdGlhbGl6ZVdpdGhvdXRWOCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0RGVmZXJyZWRJbWFnZURl
Y29kaW5nRW5hYmxlZCk6CisgICAgICAgICogdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6U2V0VXAp
OgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpkZWNvZGVyQmVp
bmdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
OjpmcmFtZUJ1ZmZlclJlcXVlc3RlZCk6CisgICAgICAgIChEZWZlcnJlZEltYWdlRGVjb2RlclRl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXJUZXN0OjpmcmFtZVN0
YXR1cyk6CisgICAgICAgICogdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZnVsbFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2NhbGVkU2l6ZSk6CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVyRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJGYWN0b3J5OjpNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6U2V0VXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OlRlYXJEb3duKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpkZWNvZGVyQmVpbmdEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lQnVmZmVyUmVx
dWVzdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpmcmFt
ZVN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6Y3Jl
YXRlQ29tcGxldGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdDo6c2V0RnJhbWVTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToKKyAgICAg
ICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChNb2NrSW1hZ2VEZWNvZGVy
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6CisKIDIwMTItMTEtMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzU3OTguCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZl
cnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTRkZTY5NGU4MzNjYWUwNzkw
OTAxOTI3ODRkODA0OTBiMzQxOGFhOS4uZmY4YmYzMDhiNGNlNmMwZDIyYTI2OTg4Y2QwNDIxZTM5
OTA2OTgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDAsNiAr
NDAsOCBAQCBjb25zdCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKIAogfSAvLyBu
YW1lc3BhY2UKIAorYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c19lbmFibGVkID0gZmFsc2U7
CisKIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIpCiAgICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKICAgICAs
IG1fYWN0dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKQEAgLTQ5LDggKzUxLDYg
QEAgRGVmZXJyZWRJbWFnZURlY29kZXI6OkRlZmVycmVkSW1hZ2VEZWNvZGVyKEltYWdlRGVjb2Rl
ciogYWN0dWFsRGVjb2RlcikKIAogRGVmZXJyZWRJbWFnZURlY29kZXI6On5EZWZlcnJlZEltYWdl
RGVjb2RlcigpCiB7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBlbnRy
eSBpbiBJbWFnZURlY29kaW5nU3RvcmUgaWYgaW1hZ2UKLSAgICAvLyBpcyBkZWZlci1kZWNvZGVk
LgogfQogCiBEZWZlcnJlZEltYWdlRGVjb2RlciogRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0
ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBo
YU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5k
Q29sb3JPcHRpb24pCkBAIC04MCw2ICs4MCwxMCBAQCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6Y3JlYXRlUmVzaXplZExhenlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYgog
CiAgICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKICAgICByZXNpemVkQml0bWFwLnNldENvbmZp
ZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNjYWxlZFN1YnNldC53aWR0aCgpLCBzY2Fs
ZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
aGFzIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSB0aGF0IG11bHRpcGxlCisgICAgLy8gTGF6eURlY29k
aW5nUGl4ZWxSZWZzIGFyZSBjcmVhdGVkIGV2ZW4gdGhvdWdoIHRoZXkgc2hhcmUgdGhlIHNhbWUK
KyAgICAvLyBzY2FsZWQgc2l6ZSBhbmQgSW1hZ2VGcmFtZUdlbmVyYXRvci4KICAgICByZXNpemVk
Qml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2RpbmdQaXhlbFJlZihwaXhlbFJlZi0+ZnJh
bWVHZW5lcmF0b3IoKSwgc2NhbGVkU2l6ZSwgc2NhbGVkU3Vic2V0KSktPnVucmVmKCk7CiAKICAg
ICAvLyBTZWUgY29tbWVudHMgaW4gY3JlYXRlTGF6eURlY29kaW5nQml0bWFwKCkuCkBAIC04Nyw2
ICs5MSwxMSBAQCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlUmVzaXplZExh
enlEZWNvZGluZ0JpdG1hcChjb25zdCBTa0JpdG1hcCYgYgogICAgIHJldHVybiByZXNpemVkQml0
bWFwOwogfQogCit2b2lkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBzX2VuYWJsZWQgPSBlbmFibGVkOworfQorCiBTdHJpbmcgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9h
Y3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpIDogbV9m
aWxlbmFtZUV4dGVuc2lvbjsKQEAgLTk4LDcgKzEwNyw3IEBAIEltYWdlRnJhbWUqIERlZmVycmVk
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIC8vIGJl
Y2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFsbHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMg
aGFuZGxlZCBieQogICAgIC8vIEJpdG1hcEltYWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBm
dW5jdGlvbnMgdGhhdCBkbyBzeW5jaHJvbm91cyBpbWFnZQogICAgIC8vIGRlY29kaW5nLgotICAg
IGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKKyAgICBpZiAo
c19lbmFibGVkCiAgICAgICAgICYmIG1fYWN0dWFsRGVjb2RlcgogICAgICAgICAmJiBtX2FjdHVh
bERlY29kZXItPnJlcGV0aXRpb25Db3VudCgpID09IGNBbmltYXRpb25Ob25lCiAgICAgICAgICYm
IG1fYWN0dWFsRGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkpIHsKQEAgLTIwMCw3ICsyMDksNyBA
QCBTa0JpdG1hcCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3JlYXRlTGF6eURlY29kaW5nQml0bWFw
KCkKICAgICBTa0JpdG1hcCBiaXRtYXA7CiAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6
a0FSR0JfODg4OF9Db25maWcsIGZ1bGxTaXplLndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsK
IAotICAgIG1fZnJhbWVHZW5lcmF0b3IgPSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUobV9k
YXRhLnJlbGVhc2UoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOworICAgIG1fZnJhbWVHZW5lcmF0b3Ig
PSBJbWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZnVsbFNpemUsIG1fZGF0YS5yZWxlYXNlKCks
IG1fYWxsRGF0YVJlY2VpdmVkKTsKICAgICBtX2FjdHVhbERlY29kZXIuY2xlYXIoKTsKIAogICAg
IGJpdG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9mcmFtZUdlbmVy
YXRvciwgZnVsbFNpemUsIGZ1bGxSZWN0KSktPnVucmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFn
ZURlY29kZXIuaAppbmRleCBiNzk1MDQ5ZjBjODNhZDg4NjAyMjQzNDgzNmNkNzcyMmVmMGNmNTRm
Li41ZGY5MjM1NGJkZGQwOWM4ZGIzYzExNmY2YTU3YmI5OTY3NGIxMDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVj
b2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rl
ZmVycmVkSW1hZ2VEZWNvZGVyLmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIFNrQml0bWFwIGNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRt
YXAmLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRTdWJz
ZXQpOwogCisgICAgc3RhdGljIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKwogICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwogCiAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCk7CkBAIC03OSw2ICs4MSw4IEBAIHByaXZhdGU6CiAKICAgICBJ
bWFnZUZyYW1lIG1fbGF6eURlY29kZWRGcmFtZTsKICAgICBSZWZQdHI8SW1hZ2VGcmFtZUdlbmVy
YXRvcj4gbV9mcmFtZUdlbmVyYXRvcjsKKworICAgIHN0YXRpYyBib29sIHNfZW5hYmxlZDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3Bw
CmluZGV4IDQ0OWU0NTI1NGU4OTVjMDMzMjZiNGQ1N2EwNWJiZDExMTliYjM5YjUuLjJiNWE4YTdi
ZDZmYmEwNzgzMjg2ZWM3NjA0YzM3ZmJjYWU0MWExYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGlu
Z1N0b3JlLmNwcApAQCAtMjYsMjEgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCiAKKyNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgotCi0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1JbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2VP
bk1haW5UaHJlYWQgPSAwOworSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlID0gMDsKIAot
c3RhdGljIHZvaWQgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1hZ2VEZWNvZGluZ1N0b3JlKiBp
bWFnZURlY29kaW5nU3RvcmUpCitzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZShJbWFnZURlY29kaW5n
U3RvcmUqIGltYWdlRGVjb2RpbmdTdG9yZSkKIHsKLSAgICBkZWxldGUgc19pbnN0YW5jZU9uTWFp
blRocmVhZDsKLSAgICBzX2luc3RhbmNlT25NYWluVGhyZWFkID0gaW1hZ2VEZWNvZGluZ1N0b3Jl
OworICAgIGRlbGV0ZSBzX2luc3RhbmNlOworICAgIHNfaW5zdGFuY2UgPSBpbWFnZURlY29kaW5n
U3RvcmU7CiB9CisKIH0gLy8gbmFtZXNwYWNlCiAKIEltYWdlRGVjb2RpbmdTdG9yZTo6SW1hZ2VE
ZWNvZGluZ1N0b3JlKCkKQEAgLTUxLDQ2ICs1Miw5OCBAQCBJbWFnZURlY29kaW5nU3RvcmU6On5J
bWFnZURlY29kaW5nU3RvcmUoKQogewogfQogCi1JbWFnZURlY29kaW5nU3RvcmUqIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2VPbk1haW5UaHJlYWQoKQorSW1hZ2VEZWNvZGluZ1N0b3JlKiBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIHJldHVybiBzX2luc3RhbmNlT25NYWluVGhyZWFkOworICAgIHJldHVybiBzX2lu
c3RhbmNlOwogfQogCi12b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uTWFpblRo
cmVhZCgpCit2b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKQogewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2V0SW5zdGFuY2VPbk1haW5UaHJlYWQoSW1h
Z2VEZWNvZGluZ1N0b3JlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworICAgIHNldEluc3RhbmNlKElt
YWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKIH0KIAogdm9pZCBJbWFnZURl
Y29kaW5nU3RvcmU6OnNodXRkb3duKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKDApOworICAgIHNldEluc3RhbmNlKDApOwogfQog
Ci1ib29sIEltYWdlRGVjb2RpbmdTdG9yZTo6Y2FsbGVkT25WYWxpZFRocmVhZCgpIGNvbnN0Citj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tDb21wbGV0
ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6
ZSYgc2NhbGVkU2l6ZSkKIHsKLSAgICByZXR1cm4gdGhpcyA9PSBpbnN0YW5jZU9uTWFpblRocmVh
ZCgpICYmIGlzTWFpblRocmVhZCgpOworICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSAwOwor
ICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAgICAgQ2FjaGVN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhY2hlTWFwLmZpbmQoc3RkOjptYWtlX3BhaXIoZ2VuZXJh
dG9yLCBzY2FsZWRTaXplKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fY2FjaGVNYXAuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVl
OworICAgICAgICBpZiAoIWNhY2hlRW50cnktPmNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdXNlIGNvdW50IHN1
Y2ggdGhhdCBpdCBkb2Vzbid0IGdldCBldmljdGVkLgorICAgICAgICArK2NhY2hlRW50cnktPnVz
ZUNvdW50OworICAgIH0KKyAgICBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+Yml0bWFwKCkubG9j
a1BpeGVscygpOworICAgIHJldHVybiBjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS5nZXQoKTsKIH0K
IAotU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb29rdXBGcmFtZUNh
Y2hlKGludCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKSBjb25zdAorY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrSW5jb21wbGV0ZUNh
Y2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVDYWNoZS5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mcmFtZUNhY2hlW2ldLT5pc0VxdWFsKGltYWdl
SWQsIHNjYWxlZFNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVDYWNoZVtpXS5nZXQo
KTsKLSAgICB9CisgICAgLy8gVE9ETzogSW1wbGVtZW50LgogICAgIHJldHVybiAwOwogfQogCi12
b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6ZGVsZXRlRnJhbWVDYWNoZShpbnQgaW1hZ2VJZCkKK3Zv
aWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjp1bmxvY2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJh
dG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlKQor
eworICAgIGNhY2hlZEltYWdlLT5iaXRtYXAoKS51bmxvY2tQaXhlbHMoKTsKKyAgICBpZiAoIWNh
Y2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gRGVsZXRlIHRoZSBpbWFnZSBp
ZiBpdCBpcyBpbmNvbXBsZXRlLiBJdCB3YXMgbmV2ZXIgc3RvcmVkIGluIGNhY2hlLgorICAgICAg
ICBkZWxldGUgY2FjaGVkSW1hZ2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNdXRl
eExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIENhY2hlTWFwOjppdGVyYXRvciBpdGVyID0gbV9j
YWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxl
ZFNpemUoKSkpOworICAgIEFTU0VSVChpdGVyICE9IG1fY2FjaGVNYXAuZW5kKCkpOworCisgICAg
Q2FjaGVFbnRyeSogY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlOworICAgIC0tY2FjaGVFbnRyeS0+
dXNlQ291bnQ7CisgICAgQVNTRVJUKGNhY2hlRW50cnktPnVzZUNvdW50ID49IDApOworfQorCitj
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExv
Y2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ZyYW1lQ2FjaGUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtp
XS0+aXNFcXVhbChpbWFnZUlkKSkgewotICAgICAgICAgICAgbV9mcmFtZUNhY2hlLnJlbW92ZShp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIC8vIFBydW5lIG9sZCBjYWNo
ZSBlbnRyaWVzIHRvIGdpdmUgc3BhY2UgZm9yIHRoZSBuZXcgb25lLgorICAgIHBydW5lKCk7CisK
KyAgICAvLyBMb2NrIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIHRvIHByZXZlbnQgaXQgZnJvbSBi
ZWluZyBwdXJnZWQuCisgICAgaW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKworICAgIGlm
ICghaW1hZ2UtPmlzQ29tcGxldGUoKSkgeworICAgICAgICAvLyBJbmNvbXBsZXRlIGltYWdlIGlz
IG5vdCBzdG9yZWQgaW4gdGhlIGNhY2hlIGFuZCBkZWxldGVkIGFmdGVyIHVzZS4KKyAgICAgICAg
Ly8gU2VlIHVubG9ja0NhY2hlKCkuCisgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBhbGxvdyBp
bmNvbXBsZXRlIGltYWdlcyB0byBiZSBzdG9yZWQgdG9nZXRoZXIgd2l0aAorICAgICAgICAvLyB0
aGUgY29ycmVzcG9uZGluZyBJbWFnZURlY29kZXIuCisgICAgICAgIHJldHVybiBpbWFnZS5sZWFr
UHRyKCk7CiAgICAgfQorCisgICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSBp
bWFnZS5nZXQoKTsKKyAgICBPd25QdHI8Q2FjaGVFbnRyeT4gbmV3Q2FjaGVFbnRyeSA9IENhY2hl
RW50cnk6OmNyZWF0ZUFuZFVzZShpbWFnZSk7CisKKyAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0g
c3RkOjptYWtlX3BhaXIoZ2VuZXJhdG9yLCBjYWNoZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAg
ICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIEFTU0VSVCghbV9jYWNoZU1hcC5jb250
YWlucyhrZXkpKTsKKworICAgIC8vIG1fY2FjaGVNYXAgaXMgdXNlZCBmb3IgaW5kZXhpbmcgYW5k
IHF1aWNrIGxvb2t1cCBvZiBhIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBtX2NhY2hlRW50cmllcyBp
cyB1c2VkIHRvIHN1cHBvcnQgTFJVIG9wZXJhdGlvbnMgdG8gcmVvcmRlciBjYWNoZQorICAgIC8v
IGVudHJpZXMgcXVpY2tseSwgaXQgYWxzbyBvd25zIHRoZSBjYWNoZWQgaW1hZ2VzLgorICAgIG1f
Y2FjaGVNYXAuYWRkKGtleSwgbmV3Q2FjaGVFbnRyeS5nZXQoKSk7CisgICAgbV9jYWNoZUVudHJp
ZXMuYXBwZW5kKG5ld0NhY2hlRW50cnkucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gY2FjaGVkSW1h
Z2U7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpwcnVuZSgpCit7CisgICAgLy8gVE9E
TzogSW1wbGVtZW50LgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5oCmluZGV4IGE2ZmE1NjE5NGZlMTU1MzEzZTFiMWJiMjhmMTExMjI2YjIwMjdm
N2UuLjBhZWEyZTk2OTllNzg3MDcxMTRhZTZmNjY0YzZjYzkxMTY3NzNhNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRGVjb2RpbmdTdG9yZS5oCkBAIC0yNiw0MCArMjYsNzMgQEAKICNpZm5kZWYgSW1hZ2VEZWNv
ZGluZ1N0b3JlX2gKICNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKIAorI2luY2x1ZGUgIlNj
YWxlZEltYWdlRnJhZ21lbnQuaCIKICNpbmNsdWRlICJTa1R5cGVzLmgiCiAjaW5jbHVkZSAiU2tT
aXplLmgiCisjaW5jbHVkZSAiU2tTaXplSGFzaC5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1By
aW1pdGl2ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKLWNs
YXNzIFNjYWxlZEltYWdlRnJhZ21lbnQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLS8vIFRoaXMg
Y2xhc3MgY2FuIG9ubHkgYmUgaW5zdGFudGlhdGVkIG9uIG1haW4gdGhyZWFkLiBUaGVyZSB3aWxs
IGJlIGFuCi0vLyBpbnN0YW5jZSBvbiBpbXBsIHRocmVhZCBpbiB0aGUgZnV0dXJlIGJ1dCB0aGF0
IHBhcnQgb2YgaW1wbGVtZW50YXRpb24KLS8vIGlzIGluY29tcGxldGUuIFNlZSBidWc6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAotLy8gZm9yIGRldGFpbHMu
CiBjbGFzcyBJbWFnZURlY29kaW5nU3RvcmUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3du
UHRyPEltYWdlRGVjb2RpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IElt
YWdlRGVjb2RpbmdTdG9yZSk7IH0KICAgICB+SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CiAKLSAgICBz
dGF0aWMgSW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5jZU9uTWFpblRocmVhZCgpOwotICAgIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgSW1hZ2VEZWNv
ZGluZ1N0b3JlKiBpbnN0YW5jZSgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7
CiAgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKIAorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIGxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBs
b2NrSW5jb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKTsKKyAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVH
ZW5lcmF0b3IqLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7CisgICAgY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogaW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0
b3IqLCBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKKwogcHJpdmF0ZToKKyAgICBz
dHJ1Y3QgQ2FjaGVFbnRyeSB7CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+
IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9CisgICAgICAg
IHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNzT3duUHRyPFNj
YWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRy
eShpbWFnZSwgMSkpOyB9CisKKyAgICAgICAgQ2FjaGVFbnRyeSgpCisgICAgICAgICAgICA6IHVz
ZUNvdW50KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlRW50cnkoUGFz
c093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50IGNvdW50KQorICAgICAgICAg
ICAgOiBjYWNoZWRJbWFnZShpbWFnZSkKKyAgICAgICAgICAgICwgdXNlQ291bnQoY291bnQpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5DYWNoZUVudHJ5KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCF1c2VDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBPd25Q
dHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gY2FjaGVkSW1hZ2U7CisgICAgICAgIGludCB1c2VDb3Vu
dDsKKyAgICB9OworCiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7Ci0gICAgYm9vbCBjYWxsZWRP
blZhbGlkVGhyZWFkKCkgY29uc3Q7Ci0gICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogbG9va3VwRnJh
bWVDYWNoZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBkZWxldGVGcmFtZUNhY2hlKGludCBpbWFnZUlkKTsKKyAgICB2b2lkIHBydW5lKCk7
CisKKyAgICBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4gbV9jYWNoZUVudHJpZXM7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZT4g
Q2FjaGVJZGVudGlmaWVyOworICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZpZXIsIENh
Y2hlRW50cnkqPiBDYWNoZU1hcDsKKyAgICBDYWNoZU1hcCBtX2NhY2hlTWFwOwogCi0gICAgVmVj
dG9yPE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiA+IG1fZnJhbWVDYWNoZTsKKyAgICAvLyBQ
cm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGFsbCBpbnN0YW5jZXMgb2YgQ2FjaGVFbnRyeSBz
dG9yZWQgaW4gbV9jYWNoZUVudHJpZXMgYW5kCisgICAgLy8gbV9jYWNoZU1hcCBhcyB3ZWxsIGFz
IHRoZSBjb250YWluZXJzLgorICAgIE11dGV4IG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4IGZlNGU0YmZi
ZWRjY2Y0ZDQ2MjkwOWVkYjJmYzE1MjUyMTU4N2VjOTIuLjIyMGE1N2Q0NWRhMTIzN2VmZmI1ODhh
YTRlMjczYzVhN2EzMjM2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBA
IC0yOCwyMCArMjgsMzQgQEAKICNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCiAKICNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIK
KyNpbmNsdWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAKICNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi0gICAg
OiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKK25hbWVzcGFjZSB7CisKK3NraWE6OkltYWdlT3Bl
cmF0aW9uczo6UmVzaXplTWV0aG9kIHJlc2l6ZU1ldGhvZCgpCit7CisgICAgcmV0dXJuIHNraWE6
OkltYWdlT3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzOworfQorCit9IC8vIG5hbWVzcGFjZQor
CitJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUm
IGZ1bGxTaXplLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpCisgICAgOiBtX2Z1bGxTaXplKGZ1bGxTaXplKQorICAgICwgbV9hbGxEYXRhUmVjZWl2
ZWQoZmFsc2UpCiB7CiAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCiBJ
bWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7CisgICAgLy8gVE9E
TzogQ2FsbCBJbWFnZURlY29kaW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGlu
ZGV4ZWQKKyAgICAvLyBieSB0aGlzIG9iamVjdC4KIH0KIAogdm9pZCBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKQEAgLTQ5LDE3ICs2Myw2NCBAQCB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNl
dERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlYwogICAg
IC8vIEZJWE1FOiBEb2luZyBhIGZ1bGwgY29weSBpcyBleHBlbnNpdmUsIGluc3RlYWQgY29weSBv
bmx5IG5ldyBkYXRhLgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFDb3B5ID0gZGF0YS0+
Y29weSgpOwogCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBNdXRleExvY2tl
ciBsb2NrKG1fZGF0YU11dGV4KTsKICAgICBtX2RhdGEgPSBkYXRhQ29weTsKICAgICBtX2FsbERh
dGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKIH0KIAotU2tCaXRtYXAgSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3Qg
U2tJUmVjdCYgc2NhbGVkU3Vic2V0KQorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkK
K3sKKyAgICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGRlY29kZSBvciBzY2FsZSBvcGVyYXRpb25z
IG9uIHRoZSBzYW1lIGltYWdlIGRhdGEuCisgICAgLy8gTXVsdGlwbGUgTGF6eURlY29kaW5nUGl4
ZWxSZWZzIGNhbiBjYWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX2RlY29kZU11dGV4KTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50
KiBjYWNoZWRJbWFnZSA9IDA7CisKKyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvTG9ja0NhY2hlKHNj
YWxlZFNpemUpOworICAgIGlmIChjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZElt
YWdlOworCisgICAgY2FjaGVkSW1hZ2UgPSB0cnlUb1NjYWxlKDAsIHNjYWxlZFNpemUpOworICAg
IGlmIChjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworCisgICAgY2Fj
aGVkSW1hZ2UgPSB0cnlUb0RlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUpOworICAgIGlmIChjYWNo
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgIHJldHVybiAwOworfQor
Citjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xv
Y2tDYWNoZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIHJldHVybiBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKHRoaXMsIHNjYWxlZFNp
emUpOworfQorCitjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9y
Ojp0cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCit7CisgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBzY2Fs
ZWQgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZnVsbCBzaXplIHRoZW4gZXhpdAorICAgIC8vIGVh
cmx5LiBUaGlzIHNhdmVzIGEgY2FjaGUgbG9va3VwLgorICAgIGlmIChzY2FsZWRTaXplID09IG1f
ZnVsbFNpemUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFmdWxsU2l6ZUltYWdlKQor
ICAgICAgICBmdWxsU2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5s
b2NrQ29tcGxldGVDYWNoZSh0aGlzLCBtX2Z1bGxTaXplKTsKKworICAgIGlmICghZnVsbFNpemVJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBz
a2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJlc2l6ZSgKKyAgICAgICAgZnVsbFNpemVJbWFnZS0+Yml0
bWFwKCksIHJlc2l6ZU1ldGhvZCgpLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVp
Z2h0KCkpOworICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBzY2FsZWRJbWFnZSA9IFNj
YWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShzY2FsZWRTaXplLCBzY2FsZWRCaXRtYXAsIGZ1bGxT
aXplSW1hZ2UtPmlzQ29tcGxldGUoKSk7CisKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPnVubG9ja0NhY2hlKHRoaXMsIGZ1bGxTaXplSW1hZ2UpOworICAgIHJldHVybiBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSh0aGlzLCBzY2Fs
ZWRJbWFnZS5yZWxlYXNlKCkpOworfQorCitjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFn
ZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0RlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpCiB7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBib29sIGFsbERh
dGFSZWNlaXZlZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211
dGV4KTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7CiAKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkbyBhIHNoYWxsb3cgY29weSBpbnN0ZWFkLiBOb3cgd2UncmUg
cmVzdHJpY3RlZCBieSB0aGUgQVBJIG9mIFNoYXJlZEJ1ZmZlci4KICAgICAgICAgZGF0YSA9IG1f
ZGF0YS0+Y29weSgpOwpAQCAtNjcsMjIgKzEyOCwyNiBAQCBTa0JpdG1hcCBJbWFnZUZyYW1lR2Vu
ZXJhdG9yOjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBT
awogICAgIH0KIAogICAgIE93blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIoSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEuZ2V0KCksIEltYWdlU291cmNlOjpBbHBoYVByZW11bHRp
cGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAg
aWYgKCFkZWNvZGVyICYmIG1faW1hZ2VEZWNvZGVyRmFjdG9yeSkKKyAgICAgICAgZGVjb2RlciA9
IG1faW1hZ2VEZWNvZGVyRmFjdG9yeS0+Y3JlYXRlKCk7CiAgICAgaWYgKCFkZWNvZGVyKQotICAg
ICAgICByZXR1cm4gU2tCaXRtYXAoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBkZWNvZGVy
LT5zZXREYXRhKGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgSW1hZ2VGcmFtZSog
ZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisgICAgaWYgKCFmcmFtZSB8fCBmcmFtZS0+c3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBib29sIGlzQ29tcGxldGUgPSBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZTsKKyAgICBTa0JpdG1hcCBmdWxsU2l6ZUJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1h
cCgpOworICAgIEFTU0VSVChmdWxsU2l6ZUJpdG1hcC53aWR0aCgpID09IG1fZnVsbFNpemUud2lk
dGgoKSAmJiBmdWxsU2l6ZUJpdG1hcC5oZWlnaHQoKSA9PSBtX2Z1bGxTaXplLmhlaWdodCgpKTsK
IAotICAgIFNrQml0bWFwIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOwotICAgIFNrSVNp
emUgYml0bWFwU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWln
aHQoKSk7Ci0gICAgaWYgKGJpdG1hcFNpemUgIT0gc2NhbGVkU2l6ZSkKLSAgICAgICAgYml0bWFw
ID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJh
dGlvbnM6OlJFU0laRV9MQU5DWk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhl
aWdodCgpKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsU2l6ZUltYWdlID0g
SW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCisgICAg
ICAgIHRoaXMsIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShtX2Z1bGxTaXplLCBmdWxsU2l6
ZUJpdG1hcCwgaXNDb21wbGV0ZSkpOwogCi0gICAgU2tCaXRtYXAgYml0bWFwU3Vic2V0OwotICAg
IGJpdG1hcC5leHRyYWN0U3Vic2V0KCZiaXRtYXBTdWJzZXQsIHNjYWxlZFN1YnNldCk7Ci0gICAg
cmV0dXJuIGJpdG1hcFN1YnNldDsKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQor
ICAgICAgICByZXR1cm4gZnVsbFNpemVJbWFnZTsKKyAgICByZXR1cm4gdHJ5VG9TY2FsZShmdWxs
U2l6ZUltYWdlLCBzY2FsZWRTaXplKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VG
cmFtZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oCmluZGV4IDZkZjViMjNjZWQxNGFlNTA5NTVhZjYzZTg3
OGUzYmE3ZGE2NTQ4OTIuLjA4MzFjNDQ5ODIxMTRmNGE2NmM2OTY3ZTlmMmI2OGNhMDMzY2Y1OTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlRnJhbWVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAgLTM4LDI2ICszOCw0OSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNjYWxlZElt
YWdlRnJhZ21lbnQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKK2NsYXNzIEltYWdlRGVjb2RlckZh
Y3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlckZhY3RvcnkoKSB7IH0K
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKSA9IDA7Cit9Owor
CiBjbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEltYWdlRnJhbWVHZW5lcmF0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZUZyYW1lR2VuZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRnJhbWVH
ZW5lcmF0b3I+IGNyZWF0ZShjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZnVs
bFNpemUsIGRhdGEsIGFsbERhdGFSZWNlaXZlZCkpOwogICAgIH0KIAotICAgIEltYWdlRnJhbWVH
ZW5lcmF0b3IoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgSW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgfkltYWdlRnJh
bWVHZW5lcmF0b3IoKTsKIAotICAgIFNrQml0bWFwIGRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNp
emUmIHNjYWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSk7CiAKICAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CiAKKyAgICB2b2lkIHNldEltYWdlRGVjb2RlckZhY3RvcnlGb3JU
ZXN0aW5nKFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyRmFjdG9yeT4gZmFjdG9yeSkgeyBtX2ltYWdl
RGVjb2RlckZhY3RvcnkgPSBmYWN0b3J5OyB9CisKIHByaXZhdGU6CisgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgY2FsbGVkIHdoaWxlIG1fZGVjb2RlTXV0ZXggaXMgbG9ja2VkLgorICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpOworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvU2NhbGUoY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogZnVsbFNpemVJbWFnZSwgY29uc3QgU2tJU2l6ZSYgc2NhbGVk
U2l6ZSk7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9EZWNvZGVBbmRTY2Fs
ZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKworICAgIFNrSVNpemUgbV9mdWxsU2l6ZTsK
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAgICAgYm9vbCBtX2FsbERhdGFSZWNl
aXZlZDsKLSAgICBNdXRleCBtX211dGV4OworCisgICAgT3duUHRyPEltYWdlRGVjb2RlckZhY3Rv
cnk+IG1faW1hZ2VEZWNvZGVyRmFjdG9yeTsKKworICAgIC8vIFByZXZlbnRzIG11bHRpcGxlIGRl
Y29kZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIGRhdGEuCisgICAgTXV0ZXggbV9kZWNvZGVNdXRl
eDsKKworICAgIC8vIFByZXZlbnRzIGNvbmN1cnJlbnQgYWNjZXNzIHRvIG1fZGF0YS4KKyAgICBN
dXRleCBtX2RhdGFNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGlu
Z1BpeGVsUmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmNwcAppbmRleCAwYTVkNWEzOGFmNGU2OTdjZTk3MDdhZmI2
ZGRjMDFhZWU0NzA5MGZiLi41NTUyNjYzNjJhNjUyOGNkNGM1MzM4MjJmMWY2NTg2YmJmZDg0MzUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXp5RGVjb2RpbmdQaXhlbFJlZi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0zOCw2ICszOCw3IEBA
IExhenlEZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihQYXNzUmVmUHRyPElt
YWdlRnJhbWVHZW5lcmF0b3I+IGZyYW1lCiAgICAgLCBtX2ZyYW1lR2VuZXJhdG9yKGZyYW1lR2Vu
ZXJhdG9yKQogICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX3NjYWxlZFN1
YnNldChzY2FsZWRTdWJzZXQpCisgICAgLCBtX2xvY2tlZENhY2hlZEltYWdlKDApCiB7CiB9CiAK
QEAgLTU4LDE4ICs1OSwyOSBAQCBib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQo
KSBjb25zdAogdm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9y
VGFibGUqKikKIHsKICAgICBtX211dGV4LmxvY2soKTsKLSAgICBBU1NFUlQobV9sb2NrZWRCaXRt
YXAuaXNOdWxsKCkpOwotICAgIG1fbG9ja2VkQml0bWFwID0gbV9mcmFtZUdlbmVyYXRvci0+ZGVj
b2RlQW5kU2NhbGUobV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Ci0gICAgaWYgKG1fbG9j
a2VkQml0bWFwLmlzTnVsbCgpKQorICAgIEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZSk7CisK
KyAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgp
LT5sb2NrQ29tcGxldGVDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUp
OworCisgICAgLy8gVXNlIEltYWdlRnJhbWVHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgdGhlIGltYWdl
LiBJdCB3aWxsIGxvY2sgdGhlIGNhY2hlCisgICAgLy8gZW50cnkgZm9yIHVzLgorICAgIGlmICgh
bV9sb2NrZWRDYWNoZWRJbWFnZSkKKyAgICAgICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IG1fZnJh
bWVHZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKG1fc2NhbGVkU2l6ZSk7CisKKyAgICBpZiAoIW1f
bG9ja2VkQ2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fbG9ja2VkQml0bWFw
LmxvY2tQaXhlbHMoKTsKLSAgICByZXR1cm4gbV9sb2NrZWRCaXRtYXAuZ2V0QWRkcigwLCAwKTsK
KworICAgIEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOwor
ICAgIEFTU0VSVChtX2xvY2tlZENhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkgPT0gbV9zY2FsZWRT
aXplKTsKKyAgICByZXR1cm4gbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuZ2V0QWRkciht
X3NjYWxlZFN1YnNldC54KCksIG1fc2NhbGVkU3Vic2V0LnkoKSk7CiB9CiAKIHZvaWQgTGF6eURl
Y29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKIHsKLSAgICBtX2xvY2tlZEJpdG1hcC51
bmxvY2tQaXhlbHMoKTsKLSAgICBtX2xvY2tlZEJpdG1hcC5yZXNldCgpOworICAgIGlmIChtX2xv
Y2tlZENhY2hlZEltYWdlKSB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+dW5sb2NrQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9sb2NrZWRDYWNoZWRJbWFn
ZSk7CisgICAgICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSAwOworICAgIH0KICAgICBtX211dGV4
LnVubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaAppbmRleCA4MDMx
NGNmMjFmN2EwYWJjYmUxNDMwODhmYjBkYzZhZWUyZDBiNDI3Li45YjJhNDZkNGU1ZDliNDVmNGUw
NzJlNzMyODBjMTRiMDJhYjJhMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgK
QEAgLTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VGcmFt
ZUdlbmVyYXRvcjsKK2NsYXNzIFNjYWxlZEltYWdlRnJhZ21lbnQ7CiAKIGNsYXNzIExhenlEZWNv
ZGluZ1BpeGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgewogcHVibGljOgpAQCAtNjEsNyArNjIs
NyBAQCBwcml2YXRlOgogICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOwogICAgIFNrSVJlY3QgbV9z
Y2FsZWRTdWJzZXQ7CiAKLSAgICBTa0JpdG1hcCBtX2xvY2tlZEJpdG1hcDsKKyAgICBjb25zdCBT
Y2FsZWRJbWFnZUZyYWdtZW50KiBtX2xvY2tlZENhY2hlZEltYWdlOwogICAgIE11dGV4IG1fbXV0
ZXg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCmluZGV4IDk3NGU2ZmY4
NDdlYzViNWRkNDY5NThmMjBiZDQ4MTI5MzliZDM1NzMuLjcxYmI2MjBhZWI0NzY5NDU0YWY1NTJm
YzY1OTVjYTg5N2I5ZDU0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCkBA
IC0zMywyMiArMzMsMTEgQEAgU2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21l
bnQoKQogewogfQogCi1TY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGlu
dCBpbWFnZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0
bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUpCi0gICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKLSAg
ICAsIG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQorU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVk
SW1hZ2VGcmFnbWVudChjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYg
Yml0bWFwLCBjb25zdCBib29sIGlzQ29tcGxldGUpCisgICAgOiBtX3NjYWxlZFNpemUoc2NhbGVk
U2l6ZSkKICAgICAsIG1fYml0bWFwKGJpdG1hcCkKICAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBs
ZXRlKQogewogfQogCi1ib29sIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdl
SWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdl
SWQgPT0gbV9pbWFnZUlkICYmIHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOwotfQotCi1ib29s
IFNjYWxlZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdlSWQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGltYWdlSWQgPT0gbV9pbWFnZUlkOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
Y2FsZWRJbWFnZUZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgKaW5kZXggNWI3ZmZjOTYwMTRlMDU3M2U4MzUw
NzgwMmI2NmYzNGQ5YmNkM2Y2ZC4uZjA3MDdiM2NlMzRjNjQ0ZjViYjc1MTRmZDY0YjFkZjJkMDcx
MmM3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApAQCAtMzQsMjkgKzM0LDIzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNj
YWxlZCB2ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKLS8vIGJ5IHR3byB0aGlu
Z3M6Ci0vLyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBmcmFnbWVu
dCBjb21lcyBmcm9tLgotLy8gMi4gU2NhbGVkIGltYWdlIHNpemUuCisvLyBTY2FsZWRJbWFnZUZy
YWdtZW50IGlzIGEgc2NhbGVkIHZlcnNpb24gb2YgYW4gaW1hZ2UuCiBjbGFzcyBTY2FsZWRJbWFn
ZUZyYWdtZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBjcmVhdGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNv
bnN0IFNrQml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICBzdGF0aWMgUGFzc093
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6
ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50KGltYWdlSWQsIHNjYWxl
ZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFNjYWxlZEltYWdlRnJhZ21lbnQoc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CiAg
ICAgfQogCi0gICAgU2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6
ZSYsIGNvbnN0IFNrQml0bWFwJiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICBTY2FsZWRJbWFnZUZy
YWdtZW50KGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7
CiAgICAgflNjYWxlZEltYWdlRnJhZ21lbnQoKTsKIAorICAgIGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFNpemU7IH0KICAgICBjb25zdCBTa0JpdG1h
cCYgYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAgICBTa0JpdG1hcCYgYml0
bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KLQotICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJ
ZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Ci0gICAgYm9vbCBpc0VxdWFsKGlu
dCBpbWFnZUlkKSBjb25zdDsKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29tcGxldGU7IH0KIAogcHJpdmF0ZToKLSAgICBpbnQgbV9pbWFnZUlkOwogICAgIFNrSVNp
emUgbV9zY2FsZWRTaXplOwogICAgIFNrQml0bWFwIG1fYml0bWFwOwogICAgIGJvb2wgbV9pc0Nv
bXBsZXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tTaXplSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2tTaXplSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmMjk3Y2ZkZjc1MjI1ZjJhM2U4YjM3ODA3
ZDQ4NWVkMDAwZGQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Ta1NpemVIYXNoLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU2tTaXplSGFzaF9oCisjZGVmaW5lIFNrU2l6ZUhhc2hfaAorCisjaW5jbHVk
ZSAiU2tTY2FsYXIuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRIYXNoPFNr
U2l6ZT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNrU2l6ZSYga2V5KSB7IHJl
dHVybiBwYWlySW50SGFzaChrZXkud2lkdGgoKSwga2V5LmhlaWdodCgpKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFNrU2l6ZSYgYSwgY29uc3QgU2tTaXplJiBiKSB7IHJldHVybiBh
ID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTa1NpemU+
IHsKKyAgICB0eXBlZGVmIEludEhhc2g8U2tTaXplPiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxTa1NpemU+IDogR2VuZXJpY0hhc2hUcmFpdHM8U2tTaXplPiB7Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgIHN0YXRpYyBTa1NpemUg
ZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIFNrU2l6ZTo6TWFrZSgwLCAwKTsgfQorICAgIHN0YXRpYyB2
b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShTa1NpemUmIHNsb3QpCisgICAgeworICAgICAgICBz
bG90ID0gU2tTaXplOjpNYWtlKC0xLCAtMSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVs
ZXRlZFZhbHVlKGNvbnN0IFNrU2l6ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUud2lkdGgoKSA9PSAtMSAmJiB2YWx1ZS5oZWlnaHQoKSA9PSAtMTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBJbnRIYXNoPFNrSVNpemU+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBTa0lTaXplJiBrZXkpIHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS53aWR0aCgp
LCBrZXkuaGVpZ2h0KCkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2tJU2l6ZSYg
YSwgY29uc3QgU2tJU2l6ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U2tJU2l6ZT4geworICAgIHR5cGVkZWYgSW50SGFzaDxT
a0lTaXplPiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxTa0lTaXpl
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFNrSVNpemU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBl
bXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gZmFsc2U7CisgICAgc3RhdGljIFNrSVNpemUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJu
IFNrSVNpemU6Ok1ha2UoMCwgMCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVk
VmFsdWUoU2tJU2l6ZSYgc2xvdCkKKyAgICB7CisgICAgICAgIHNsb3QgPSBTa0lTaXplOjpNYWtl
KC0xLCAtMSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFNr
SVNpemUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLndpZHRoKCkgPT0gLTEg
JiYgdmFsdWUuaGVpZ2h0KCkgPT0gLTE7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBTa1NpemVIYXNoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmlu
ZGV4IGRkNWQ2Y2YxYjZiZThiMGNiMDk3ZWYwZTI1NGZkMDEwM2VmM2QwN2QuLmRmNTBhZmZjNTkx
MTIxOTJlNzUwNWY1ZTJiODA1ODdiYzlkNWRkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQpAQCAtODAsNiArODAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VM
YXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29k
ZXIuaCcsCiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViS2l0LmNwcAppbmRleCA2YmNhMWQ4MTA0ZTU2YjA2NGRmNTI3NTYwZThm
ZDEzNGI5ZGJiYmE5Li5hNTE3ZDE1NWU2ZmExZjJmMjE5ZTkxMWQ3ZmE5OWFlMTQ3MjkxYWZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTEzMyw2ICsxMzMsNyBAQCB2
b2lkIGluaXRpYWxpemVXaXRob3V0VjgoV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRQbGF0
Zm9ybVN1cHBvcnQpCiAgICAgQVNTRVJUKCFzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCk7CiAgICAg
c193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQ7CiAgICAgUGxh
dGZvcm06OmluaXRpYWxpemUoc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOworICAgIFdlYkNvcmU6
OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKIAogICAgIFdURjo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDE2NDg4
MGFhN2E1NmRlMDIzODdjYmI5ODU2MGU0MjMzMmFlMGZkMjEuLjZhMzM3ODZhY2YzYjUyNThlMTRi
ZTBjYzE1ZGFhMWIxMjBmYWY3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2V0dGluZ3NJbXBsLmNwcApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFn
ZURlY29kZXIuaCIKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgIklt
YWdlRGVjb2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cHVi
bGljL1dlYlN0cmluZy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KQEAgLTUwNSwxMCAr
NTA1LDcgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VE
ZWNvZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGlmICghbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkICYmIGVuYWJsZWQpCi0gICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5pdGlhbGl6ZU9uTWFpblRocmVhZCgpOwotICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgJiYgIWVuYWJsZWQpCi0gICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRv
d24oKTsKKyAgICBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZChlbmFibGVkKTsKICAg
ICBtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVy
VGVzdC5jcHAKaW5kZXggNGJjYzI5ODgyMmU1MmUzMGQxYzRlYWY2MzA2ODBhOWFlNjU5ZmZkMi4u
N2ZkNDAxN2E2ZTQwYmZmY2FmNzdkZjZjY2YxMWYwNTI2NGE4ZjYzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
LmNwcApAQCAtNzMsNyArNzMsOCBAQCBjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBw
dWJsaWMgOjp0ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTW9ja0ltYWdlRGVjb2RlcgogcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewotICAgICAgICBJbWFnZURlY29kaW5nU3Rv
cmU6OmluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
Ojppbml0aWFsaXplT25jZSgpOworICAgICAgICBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5h
YmxlZCh0cnVlKTsKICAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUod2hpdGVQ
TkcsIHNpemVvZih3aGl0ZVBORykpOwogICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9j
a0ltYWdlRGVjb2Rlcih0aGlzKTsKICAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXRTaXplKDEs
IDEpOwpAQCAtOTAsMTAgKzkxLDE5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWNv
ZGVyQmVpbmdEZXN0cm95ZWQoKQogICAgIHsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCA9IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKTsKICAgICAg
ICAgbV9hY3R1YWxEZWNvZGVyID0gMDsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVC
dWZmZXJSZXF1ZXN0ZWQoKQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50OworICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVT
dGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgLy8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRo
ZSBwb2ludGVyIHRvIHF1ZXJ5IHN0YXRlcy4KICAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVh
bERlY29kZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1h
Z2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMGEyZjg2NDI1YWQzMjY2YzQ0
ODg1ODQ2YTlmNGQ0YmU4ODhiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcApAQCAtMCwwICsxLDE5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5l
cmF0b3IuaCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk1v
Y2tJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q7CisKKy8vIEhlbHBlciBtZXRob2RzIHRv
IGdlbmVyYXRlIHN0YW5kYXJkIHNpemVzLgorU2tJU2l6ZSBmdWxsU2l6ZSgpIHsgcmV0dXJuIFNr
SVNpemU6Ok1ha2UoMTAwLCAxMDApOyB9CitTa0lTaXplIHNjYWxlZFNpemUoKSB7IHJldHVybiBT
a0lTaXplOjpNYWtlKDUwLCA1MCk7IH0KKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q7
CisKK2NsYXNzIE1vY2tJbWFnZURlY29kZXJGYWN0b3J5IDogcHVibGljIEltYWdlRGVjb2RlckZh
Y3RvcnkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tJbWFnZURlY29kZXJG
YWN0b3J5PiBjcmVhdGUoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tJbWFnZURlY29kZXJGYWN0b3J5KHRlc3QpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKTsK
KworcHJpdmF0ZToKKyAgICBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeShJbWFnZUZyYW1lR2VuZXJh
dG9yVGVzdCogdGVzdCkKKyAgICAgICAgOiBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAgfQorCisg
ICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIEltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFn
ZURlY29kZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAg
eworICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAg
IG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fZ2VuZXJhdG9yID0g
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplKCksIG1fZGF0YSwgdHJ1ZSk7Cisg
ICAgICAgIG1fZ2VuZXJhdG9yLT5zZXRJbWFnZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyhNb2Nr
SW1hZ2VEZWNvZGVyRmFjdG9yeTo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCA9IDA7CisgICAgICAgIG1fZnJhbWVTdGF0dXMgPSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgewor
ICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpCisgICAgeworICAgICAgICArK21fZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lOjpG
cmFtZVN0YXR1cyBmcmFtZVN0YXR1cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZVN0
YXR1czsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJh
Z21lbnQ+IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgICAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFn
bWVudDo6Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRG
cmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBzdGF0dXMpICB7IG1fZnJhbWVTdGF0
dXMgPSBzdGF0dXM7IH0KKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBS
ZWZQdHI8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgaW50IG1fZnJhbWVC
dWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgbV9mcmFtZVN0
YXR1czsKK307CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBNb2NrSW1hZ2VEZWNvZGVyRmFj
dG9yeTo6Y3JlYXRlKCkKK3sKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gbmV3IE1v
Y2tJbWFnZURlY29kZXIobV90ZXN0KTsKKyAgICBkZWNvZGVyLT5zZXRTaXplKGZ1bGxTaXplKCku
d2lkdGgoKSwgZnVsbFNpemUoKS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGRlY29k
ZXIpOworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlSGl0KQorewor
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxJbWFnZSA9IEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRv
ci5nZXQoKSwgY3JlYXRlQ29tcGxldGVJbWFnZShmdWxsU2l6ZSgpKSk7CisgICAgRVhQRUNUX0VR
KGZ1bGxTaXplKCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBmdWxsSW1h
Z2UpOworCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5l
cmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9FUShmdWxsSW1h
Z2UsIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKGZ1bGxTaXplKCksIHRlbXBJbWFnZS0+c2Nh
bGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0Nh
Y2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2Zy
YW1lQnVmZmVyUmVxdWVzdENvdW50KTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LCBjYWNoZU1pc3NXaXRoU2NhbGUpCit7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogZnVsbEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRM
b2NrQ2FjaGUoCisgICAgICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdl
KGZ1bGxTaXplKCkpKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUoKSwgZnVsbEltYWdlLT5zY2Fs
ZWRTaXplKCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2Fj
aGUobV9nZW5lcmF0b3IuZ2V0KCksIGZ1bGxJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBtaXNzIGJl
Y2F1c2Ugb2Ygc2NhbGVkIHNpemUgbm90IGZvdW5kLgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIHNjYWxlZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNp
emUoKSk7CisgICAgRVhQRUNUX05FKGZ1bGxJbWFnZSwgc2NhbGVkSW1hZ2UpOworICAgIEVYUEVD
VF9FUShzY2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHNjYWxlZEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVk
U2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkSW1hZ2UsIHRlbXBJbWFnZSk7CisgICAgRVhQ
RUNUX0VRKHNjYWxlZFNpemUoKSwgdGVtcEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQp
OworfQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhEZWNv
ZGVBbmRTY2FsZSkKK3sKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBs
ZXRlKTsKKworICAgIC8vIENhY2hlIG1pc3MuCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogc2NhbGVkSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQ
RUNUX0VRKHNjYWxlZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQo
KSwgc2NhbGVkSW1hZ2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIGNvbnN0IFNjYWxlZElt
YWdlRnJhZ21lbnQqIGZ1bGxJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxs
U2l6ZSgpKTsKKyAgICBFWFBFQ1RfTkUoc2NhbGVkSW1hZ2UsIGZ1bGxJbWFnZSk7CisgICAgRVhQ
RUNUX0VRKGZ1bGxTaXplKCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBm
dWxsSW1hZ2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXpl
KCkpOworICAgIEVYUEVDVF9FUShzY2FsZWRJbWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1Rf
RVEoc2NhbGVkU2l6ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVt
cEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cit9
CisKKy8vIFRlc3QgdGhhdCBpbmNvbXBsZXRlIGZyYW1lcyBhcmUgbm90IGNhY2hlZC4KK1RFU1Rf
RihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUp
Cit7CisgICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAg
IGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNv
ZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9j
a0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworCisgICAgdGVtcEltYWdlID0g
bV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9FUSgy
LCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworCisg
ICAgdGVtcEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7
CisgICAgRVhQRUNUX0VRKDMsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHRlbXBJbWFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCmluZGV4IGM5YzBkMDFkNmQ4MzgyMDkyYjA3
NGI5NGU0ZGQ5ZmQ3YWUxYzg2ODMuLjhiNGY0MDM4MjM5YzI5NWRlNDhjOWRlZWQ3ZjM5ZWY4YWQ1
OGYwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdl
RGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVj
b2Rlci5oCkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1vY2tJ
bWFnZURlY29kZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVyQmVp
bmdEZXN0cm95ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVk
KCkgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMo
KSA9IDA7CiB9OwogCiBjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2Rl
ciB7CkBAIC01NSw5ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KQogICAgIHsKICAgICAgICAgKyttX2ZyYW1lQnVmZmVy
UmVxdWVzdENvdW50OworICAgICAgICBtX2NsaWVudC0+ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKTsK
IAogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsK
KyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhtX2NsaWVudC0+ZnJhbWVT
dGF0dXMoKSk7CiAgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176326</attachid>
            <date>2012-11-27 12:40:14 -0800</date>
            <delta_ts>2012-11-27 13:23:13 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-99784-20121127123751.patch</filename>
            <type>text/plain</type>
            <size>49757</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTM2NjhiN2VmNGE0MjM3
MDk3Yjg3NDEwNWM3MGM3ZjI3YWIyZmM1Mi4uMWFmOWM5NjZiZDRiNzMzN2Y4ZjI0ZmM4ZThkMjhk
N2U2ZjI3YzhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0xMS0yNSAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1wbGVt
ZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU3RlcGhl
biBXaGl0ZS4KKworICAgICAgICBJbXBsZW1lbnQgYSB0aHJlYWQtc2FmZSBpbWFnZSBjYWNoZSB0
byBiZSB1c2VkIHdpdGggZGVmZXJyZWQgaW1hZ2UKKyAgICAgICAgZGVjb2RpbmcuIEltYWdlIGNh
Y2hlIGNhbiBub3cgYmUgYWNjZXNzZWQgb24gYW55IHRocmVhZC4KKworICAgICAgICBUaGUgcGF0
Y2ggaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGxvZ2ljOgorICAgICAgICAxLiBNdXRleCB0byBw
cm90ZWN0IGFsbCBjYWNoZSBvcGVyYXRpb25zLgorICAgICAgICAyLiBDYWNoZSBpbmRleGluZyB1
c2luZyBrZXkgKEltYWdlRnJhbWVHZW5lcmF0b3IqLCBTa0lTaXplIHNjYWxlZFNpemUpCisgICAg
ICAgIDMuIENhY2hlIGxvb2t1cC4KKyAgICAgICAgNC4gQ2FjaGUgaW5zZXJ0aW9uLgorICAgICAg
ICA1LiBHZW5lcmF0aW9uIG9mIGNhY2hlIGVudHJ5IGJ5IHNjYWxpbmcgZnVsbCBzaXplIGltYWdl
LgorICAgICAgICA2LiBHZW5lcmF0aW9uIG9mIGNhY2hlIGVudHJpZXMgYnkgZGVjb2RpbmcgYW5k
IHNjYWxpbmcuCisKKyAgICAgICAgQ2xhc3NlcyBpbnZvbHZlZDoKKworICAgICAgICBJbWFnZURl
Y29kaW5nU3RvcmUKKworICAgICAgICBSZXNwb25zaWJsZSBmb3Igb3duaW5nIGNhY2hlIGVudHJp
ZXMgYW5kIGluZGV4aW5nLiBQcnVuaW5nIGFuZCBtZW1vcnkKKyAgICAgICAgbWFuYWdlbWVudCB3
aWxsIGJlIGFkZGVkIGxhdGVyLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3IKKworICAg
ICAgICBSZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBuZXcgY2FjaGUgZW50aWVzIGFuZCBpbnNl
cnQgdGhlbSBpbnRvCisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICBMYXp5
RGVjb2RpbmdQaXhlbFJlZgorCisgICAgICAgIFJlc3BvbnNpYmxlIGZvciBjYWNoZSBsb29rdXAg
YW5kIGxhenkgZ2VuZXJhdGlvbiBvZiBjYWNoZSBlbnRyaWVzCisgICAgICAgIHVzaW5nIEltYWdl
RnJhbWVHZW5lcmF0b3IuIFRoZXJlIGlzIGEgbXV0ZXggdG8gcHJvdGVjdCBjb25jdXJyZW50Cisg
ICAgICAgIGxvY2sgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGVzZSBpdGVtcyBhcmUgbm90IGlt
cGxlbWVudGVkIGluIHRoaXMgcGF0Y2g6CisgICAgICAgIDEuIENhY2hlIHBydW5pbmcuCisgICAg
ICAgIDIuIFNldHRpbmcgY2FjaGUgbWVtb3J5IGxpbWl0LgorICAgICAgICAzLiBDYWNoZSBkZWxl
dGlvbi4KKyAgICAgICAgNC4gQ2FjaGluZyBpbmNvbXBsZXRlIGltYWdlcyBhbmQgSW1hZ2VEZWNv
ZGVyLgorCisgICAgICAgIFVuaXQgdGVzdHMgYWRkZWQgaW4gSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuY3BwLgorICAgICAgICBMYXlvdXQgdGVzdHMgYXJlIHVuZGVyIHBsYXRmb3JtL2Nocm9taXVt
L3ZpcnR1YWwvZmFzdC9pbWFnZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJl
ZEltYWdlRGVjb2Rlcjo6fkRlZmVycmVkSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpzZXRFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmZXJyZWRJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVj
b2Rlcjo6Y3JlYXRlTGF6eURlY29kaW5nQml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oOgorICAgICAgICAoRGVmZXJyZWRJ
bWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RGVjb2RpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlh
bGl6ZU9uY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpzaHV0ZG93
bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tDb21wbGV0ZUNh
Y2hlKToKKyAgICAgICAgTG9va3VwIGNvbXBsZXRlIGNhY2hlIGVudHJ5IHVzaW5nIGhhc2gga2V5
LCBpbmNyZW1lbnQgdXNlIGNvdW50LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0
b3JlOjpsb2NrSW5jb21wbGV0ZUNhY2hlKTogVE9ETy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUpOgorICAgICAgICBMb29rdXAgY2FjaGUgZW50cnkg
dXNpbmcgaGFzaCBrZXksIGRlY3JlbWVudCB1c2UgY291bnQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6aW5zZXJ0QW5kTG9ja0NhY2hl
KToKKyAgICAgICAgSW5zZXJ0IG5ldyBjYWNoZSBlbnRyeSBhbmQgaW5jcmVtZW50IHVzZSBjb3Vu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RpbmdTdG9yZTo6cHJ1bmUpOiBUT0RPLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kaW5nU3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5OjpjcmVhdGVB
bmRVc2UpOgorICAgICAgICAoQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kaW5nU3RvcmU6OkNhY2hlRW50cnk6OkNhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZUVudHJ5Ojp+Q2FjaGVFbnRyeSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUpOgorICAgICAg
ICBNZXRob2QgZm9yIGNyZWF0aW5nIG5ldyBjYWNoZSBlbnRyaWVzLiBUaGlzIGlzIHByb3RlY3Rl
ZCBieSBhIG11dGV4CisgICAgICAgIHRvIHByZXZlbnQgY29uY3VycmVudCBvcGVyYXRpb25zLiBX
aGljaCBtZWFucyBvbmx5IG9uZSB0aHJlYWQgY2FuCisgICAgICAgIGdlbmVyYXRlIG5ldyBjYWNo
ZSBlbnRyaWVzIGZvciBhIHNldCBvZiBlbmNvZGVkIGRhdGEuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvTG9ja0NhY2hlKToK
KyAgICAgICAgVHJpZXMgdG8gbG9va3VwIGEgY2FjaGUgZW50cnkuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb1NjYWxlKToKKyAgICAgICAgVHJpZXMgdG8gbG9v
a3VwIGEgZnVsbCBzaXplIGNhY2hlIGVudHJ5IGFuZCBnZW5lcmF0ZSBhIHNjYWxlZCB2ZXJzaW9u
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRT
Y2FsZSk6CisgICAgICAgIFRyaWVzIHRvIGRlY29kZSBhbmQgc2NhbGUuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChJbWFnZURlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChJbWFnZUZyYW1lR2Vu
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnNldEltYWdl
RGVjb2RlckZhY3RvcnlGb3JUZXN0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXp5
RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxSZWYpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXp5RGVjb2RpbmdQaXhlbFJlZjo6b25VbmxvY2tQaXhlbHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKExhenlEZWNvZGluZ1BpeGVsUmVmKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjYWxlZEltYWdlRnJhZ21lbnQ6OlNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKFNjYWxlZEltYWdlRnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NhbGVkSW1hZ2VGcmFnbWVudDo6c2NhbGVkU2l6ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2tTaXplSGFzaC5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6
CisKIDIwMTItMTEtMjYgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIE5vZGU6IE1vdmUgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZyB0byBFbGVtZW50QXR0cmli
dXRlRGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYmFhNzE5NGI2ZWI0NGRiOTE4
Y2RlNTZmN2I3MjkwMjZhZDllZDI4Ny4uMTNiOWZmY2U2ODY5MzA5YTA2NDY2MTUxYTZjNTNiZjg4
ZDFjYTQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAx
Mi0xMS0yNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gSW1wbGVtZW50IGZ1bGwtZmVhdHVyZWQgaW1hZ2UgY2FjaGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5Nzg0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgU3RlcGhlbiBXaGl0ZS4KKworICAgICAgICBBZGRlZCBJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdCB0byB0ZXN0IGNhY2hlIGxvZ2ljIGFuZCBnZW5lcmF0aW9uCisgICAgICAgIG9mIG5ldyBj
YWNoZSBlbnRyaWVzLgorCisgICAgICAgIEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNhY2hlSGl0
CisgICAgICAgIFRlc3QgdGhhdCBhIGNvbXBsZXRlIGNhY2hlZCBlbnRyeSBpcyByZXVzZWQuCisK
KyAgICAgICAgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY2FjaGVNaXNzV2l0aFNjYWxlCisgICAg
ICAgIENhY2hlIG1pc3MgZm9yIGEgc2NhbGVkIGltYWdlIGJ1dCBjYWNoZSBoaXQgb24gYSBmdWxs
IHNpemUgaW1hZ2UuCisgICAgICAgIFNjYWxlZCBpbWFnZSBpcyBjcmVhdGVkIGZyb20gY2FjaGVk
IGZ1bGwgc2l6ZSBpbWFnZS4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jYWNo
ZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUKKyAgICAgICAgQ2FjaGUgbWlzcyBmb3IgYm90aCBzY2Fs
ZWQgaW1hZ2UgYW5kIGZ1bGwgc2l6ZSBpbWFnZS4KKworICAgICAgICBJbWFnZUZyYW1lR2VuZXJh
dG9yVGVzdC5jYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZQorICAgICAgICBUZXN0IHRoZSBs
b2dpYyBmb3IgaGFuZGxpbmcgaW5jb21wbGV0ZSBjYWNoZSBvYmplY3RzLgorCisgICAgICAgICog
V2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dlYktpdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OmluaXRpYWxpemVXaXRob3V0VjgpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNv
ZGluZ0VuYWJsZWQpOgorICAgICAgICAqIHRlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEZWZlcnJlZEltYWdlRGVjb2RlclRlc3Q6OlNldFVwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6ZGVjb2RlckJlaW5n
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6
ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQpOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdDo6ZnJhbWVTdGF0
dXMpOgorICAgICAgICAqIHRlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZ1bGxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjYWxlZFNpemUpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2RlckZhY3Rv
cnkpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6TW9ja0ltYWdlRGVj
b2RlckZhY3RvcnkpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OlNldFVwKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpUZWFyRG93bik6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZGVjb2RlckJlaW5nRGVzdHJveWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpmcmFtZUJ1ZmZlclJlcXVl
c3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6ZnJhbWVT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmNyZWF0
ZUNvbXBsZXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3Q6OnNldEZyYW1lU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1RfRik6CisgICAgICAg
ICogdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2RlckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0
SW5kZXgpOgorCiAyMDEyLTExLTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM1Nzk4LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJy
ZWRJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCmluZGV4IDE0ZGU2OTRlODMzY2FlMDc5MDkw
MTkyNzg0ZDgwNDkwYjM0MThhYTkuLmZmOGJmMzA4YjRjZTZjMGQyMmEyNjk4OGNkMDQyMWUzOTkw
Njk4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKQEAgLTQwLDYgKzQw
LDggQEAgY29uc3QgY2hhciBsYWJlbExhenlEZWNvZGVkW10gPSAibGF6eSI7CiAKIH0gLy8gbmFt
ZXNwYWNlCiAKK2Jvb2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OnNfZW5hYmxlZCA9IGZhbHNlOwor
CiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6RGVmZXJyZWRJbWFnZURlY29kZXIoSW1hZ2VEZWNvZGVy
KiBhY3R1YWxEZWNvZGVyKQogICAgIDogbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCiAgICAgLCBt
X2FjdHVhbERlY29kZXIoYWRvcHRQdHIoYWN0dWFsRGVjb2RlcikpCkBAIC00OSw4ICs1MSw2IEBA
IERlZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29kZXIq
IGFjdHVhbERlY29kZXIpCiAKIERlZmVycmVkSW1hZ2VEZWNvZGVyOjp+RGVmZXJyZWRJbWFnZURl
Y29kZXIoKQogewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkg
aW4gSW1hZ2VEZWNvZGluZ1N0b3JlIGlmIGltYWdlCi0gICAgLy8gaXMgZGVmZXItZGVjb2RlZC4K
IH0KIAogRGVmZXJyZWRJbWFnZURlY29kZXIqIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFP
cHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENv
bG9yT3B0aW9uKQpAQCAtODAsNiArODAsMTAgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29k
ZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGIKIAog
ICAgIFNrQml0bWFwIHJlc2l6ZWRCaXRtYXA7CiAgICAgcmVzaXplZEJpdG1hcC5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBzY2FsZWRTdWJzZXQud2lkdGgoKSwgc2NhbGVk
U3Vic2V0LmhlaWdodCgpLCByb3dCeXRlcyk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGhh
cyB0aGUgcG90ZW50aWFsIHByb2JsZW0gdGhhdCBtdWx0aXBsZQorICAgIC8vIExhenlEZWNvZGlu
Z1BpeGVsUmVmcyBhcmUgY3JlYXRlZCBldmVuIHRob3VnaCB0aGV5IHNoYXJlIHRoZSBzYW1lCisg
ICAgLy8gc2NhbGVkIHNpemUgYW5kIEltYWdlRnJhbWVHZW5lcmF0b3IuCiAgICAgcmVzaXplZEJp
dG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYocGl4ZWxSZWYtPmZyYW1l
R2VuZXJhdG9yKCksIHNjYWxlZFNpemUsIHNjYWxlZFN1YnNldCkpLT51bnJlZigpOwogCiAgICAg
Ly8gU2VlIGNvbW1lbnRzIGluIGNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCgpLgpAQCAtODcsNiAr
OTEsMTEgQEAgU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5
RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGIKICAgICByZXR1cm4gcmVzaXplZEJpdG1h
cDsKIH0KIAordm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgc19lbmFibGVkID0gZW5hYmxlZDsKK30KKwogU3RyaW5nIERlZmVycmVkSW1h
Z2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYWN0
dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKSA6IG1fZmls
ZW5hbWVFeHRlbnNpb247CkBAIC05OCw3ICsxMDcsNyBAQCBJbWFnZUZyYW1lKiBEZWZlcnJlZElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAvLyBiZWNh
dXNlIGEgbXVsdGlmcmFtZSBpcyB1c3VhbGx5IGFuaW1hdGVkIEdJRi4gQW5pbWF0aW9uIGlzIGhh
bmRsZWQgYnkKICAgICAvLyBCaXRtYXBJbWFnZSB3aGljaCB1c2VzIHNvbWUgbWV0YWRhdGEgZnVu
Y3Rpb25zIHRoYXQgZG8gc3luY2hyb25vdXMgaW1hZ2UKICAgICAvLyBkZWNvZGluZy4KLSAgICBp
ZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZU9uTWFpblRocmVhZCgpCisgICAgaWYgKHNf
ZW5hYmxlZAogICAgICAgICAmJiBtX2FjdHVhbERlY29kZXIKICAgICAgICAgJiYgbV9hY3R1YWxE
ZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSA9PSBjQW5pbWF0aW9uTm9uZQogICAgICAgICAmJiBt
X2FjdHVhbERlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKSB7CkBAIC0yMDAsNyArMjA5LDcgQEAg
U2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUxhenlEZWNvZGluZ0JpdG1hcCgp
CiAgICAgU2tCaXRtYXAgYml0bWFwOwogICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnLCBmdWxsU2l6ZS53aWR0aCgpLCBmdWxsU2l6ZS5oZWlnaHQoKSk7CiAK
LSAgICBtX2ZyYW1lR2VuZXJhdG9yID0gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKG1fZGF0
YS5yZWxlYXNlKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBtX2ZyYW1lR2VuZXJhdG9yID0g
SW1hZ2VGcmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplLCBtX2RhdGEucmVsZWFzZSgpLCBt
X2FsbERhdGFSZWNlaXZlZCk7CiAgICAgbV9hY3R1YWxEZWNvZGVyLmNsZWFyKCk7CiAKICAgICBi
aXRtYXAuc2V0UGl4ZWxSZWYobmV3IExhenlEZWNvZGluZ1BpeGVsUmVmKG1fZnJhbWVHZW5lcmF0
b3IsIGZ1bGxTaXplLCBmdWxsUmVjdCkpLT51bnJlZigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VE
ZWNvZGVyLmgKaW5kZXggYjc5NTA0OWYwYzgzYWQ4ODYwMjI0MzQ4MzZjZDc3MjJlZjBjZjU0Zi4u
NWRmOTIzNTRiZGRkMDljOGRiM2MxMTZmNmE1N2JiOTk2NzRiMTAzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZl
cnJlZEltYWdlRGVjb2Rlci5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTa0JpdG1hcCBjcmVhdGVSZXNpemVkTGF6eURlY29kaW5nQml0bWFwKGNvbnN0IFNrQml0bWFw
JiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0
KTsKIAorICAgIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisKICAgICBTdHJpbmcgZmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIAogICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpOwpAQCAtNzksNiArODEsOCBAQCBwcml2YXRlOgogCiAgICAgSW1h
Z2VGcmFtZSBtX2xhenlEZWNvZGVkRnJhbWU7CiAgICAgUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0
b3I+IG1fZnJhbWVHZW5lcmF0b3I7CisKKyAgICBzdGF0aWMgYm9vbCBzX2VuYWJsZWQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmNwcApp
bmRleCA0NDllNDUyNTRlODk1YzAzMzI2YjRkNTdhMDViYmQxMTE5YmIzOWI1Li40ODlmZGRjNDI4
MDFlNDIxNzRmM2I0OTc3NDRkNTkxOWRhZDNmZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdT
dG9yZS5jcHAKQEAgLTI2LDIxICsyNiwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIlNjYWxlZEltYWdlRnJhZ21lbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIHsKIAotSW1hZ2VEZWNvZGluZ1N0b3JlKiBzX2luc3RhbmNlT25N
YWluVGhyZWFkID0gMDsKK0ltYWdlRGVjb2RpbmdTdG9yZSogc19pbnN0YW5jZSA9IDA7CiAKLXN0
YXRpYyB2b2lkIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdlRGVjb2RpbmdTdG9yZSogaW1h
Z2VEZWNvZGluZ1N0b3JlKQorc3RhdGljIHZvaWQgc2V0SW5zdGFuY2UoSW1hZ2VEZWNvZGluZ1N0
b3JlKiBpbWFnZURlY29kaW5nU3RvcmUpCiB7Ci0gICAgZGVsZXRlIHNfaW5zdGFuY2VPbk1haW5U
aHJlYWQ7Ci0gICAgc19pbnN0YW5jZU9uTWFpblRocmVhZCA9IGltYWdlRGVjb2RpbmdTdG9yZTsK
KyAgICBkZWxldGUgc19pbnN0YW5jZTsKKyAgICBzX2luc3RhbmNlID0gaW1hZ2VEZWNvZGluZ1N0
b3JlOwogfQorCiB9IC8vIG5hbWVzcGFjZQogCiBJbWFnZURlY29kaW5nU3RvcmU6OkltYWdlRGVj
b2RpbmdTdG9yZSgpCkBAIC01MSw0NiArNTIsOTggQEAgSW1hZ2VEZWNvZGluZ1N0b3JlOjp+SW1h
Z2VEZWNvZGluZ1N0b3JlKCkKIHsKIH0KIAotSW1hZ2VEZWNvZGluZ1N0b3JlKiBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlT25NYWluVGhyZWFkKCkKK0ltYWdlRGVjb2RpbmdTdG9yZSogSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICByZXR1cm4gc19pbnN0YW5jZU9uTWFpblRocmVhZDsKKyAgICByZXR1cm4gc19pbnN0
YW5jZTsKIH0KIAotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbk1haW5UaHJl
YWQoKQordm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCkKIHsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHNldEluc3RhbmNlT25NYWluVGhyZWFkKEltYWdl
RGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKKyAgICBzZXRJbnN0YW5jZShJbWFn
ZURlY29kaW5nU3RvcmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7CiB9CiAKIHZvaWQgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjpzaHV0ZG93bigpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBzZXRJbnN0YW5jZU9uTWFpblRocmVhZCgwKTsKKyAgICBzZXRJbnN0YW5jZSgwKTsKIH0KIAot
Ym9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmNhbGxlZE9uVmFsaWRUaHJlYWQoKSBjb25zdAorY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjpsb2NrQ29tcGxldGVD
YWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUpCiB7Ci0gICAgcmV0dXJuIHRoaXMgPT0gaW5zdGFuY2VPbk1haW5UaHJlYWQo
KSAmJiBpc01haW5UaHJlYWQoKTsKKyAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gMDsKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgICAgIENhY2hlTWFw
OjppdGVyYXRvciBpdGVyID0gbV9jYWNoZU1hcC5maW5kKHN0ZDo6bWFrZV9wYWlyKGdlbmVyYXRv
ciwgc2NhbGVkU2l6ZSkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NhY2hlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsK
KyAgICAgICAgaWYgKCFjYWNoZUVudHJ5LT5jYWNoZWRJbWFnZS0+aXNDb21wbGV0ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gSW5jcmVtZW50IHVzZSBjb3VudCBzdWNo
IHRoYXQgaXQgZG9lc24ndCBnZXQgZXZpY3RlZC4KKyAgICAgICAgKytjYWNoZUVudHJ5LT51c2VD
b3VudDsKKyAgICB9CisgICAgY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UtPmJpdG1hcCgpLmxvY2tQ
aXhlbHMoKTsKKyAgICByZXR1cm4gY2FjaGVFbnRyeS0+Y2FjaGVkSW1hZ2UuZ2V0KCk7CiB9CiAK
LVNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9va3VwRnJhbWVDYWNo
ZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3QKK2NvbnN0IFNj
YWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6bG9ja0luY29tcGxldGVDYWNo
ZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQ2FjaGUuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVDYWNoZVtpXS0+aXNFcXVhbChpbWFnZUlk
LCBzY2FsZWRTaXplKSkKLSAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQ2FjaGVbaV0uZ2V0KCk7
Ci0gICAgfQorICAgIC8vIFRPRE86IEltcGxlbWVudC4KICAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBJbWFnZURlY29kaW5nU3RvcmU6OmRlbGV0ZUZyYW1lQ2FjaGUoaW50IGltYWdlSWQpCit2b2lk
IEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciogZ2VuZXJhdG9yLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSkKK3sK
KyAgICBjYWNoZWRJbWFnZS0+Yml0bWFwKCkudW5sb2NrUGl4ZWxzKCk7CisgICAgaWYgKCFjYWNo
ZWRJbWFnZS0+aXNDb21wbGV0ZSgpKSB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgaW1hZ2UgaWYg
aXQgaXMgaW5jb21wbGV0ZS4gSXQgd2FzIG5ldmVyIHN0b3JlZCBpbiBjYWNoZS4KKyAgICAgICAg
ZGVsZXRlIGNhY2hlZEltYWdlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2Fj
aGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRT
aXplKCkpKTsKKyAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsKKworICAgIENh
Y2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICAtLWNhY2hlRW50cnktPnVz
ZUNvdW50OworICAgIEFTU0VSVChjYWNoZUVudHJ5LT51c2VDb3VudCA+PSAwKTsKK30KKworY29u
c3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnNlcnRBbmRMb2Nr
Q2FjaGUoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBQYXNzT3duUHRyPFNj
YWxlZEltYWdlRnJhZ21lbnQ+IGltYWdlKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mcmFtZUNhY2hlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lQ2FjaGVbaV0t
PmlzRXF1YWwoaW1hZ2VJZCkpIHsKLSAgICAgICAgICAgIG1fZnJhbWVDYWNoZS5yZW1vdmUoaSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAvLyBQcnVuZSBvbGQgY2FjaGUg
ZW50cmllcyB0byBnaXZlIHNwYWNlIGZvciB0aGUgbmV3IG9uZS4KKyAgICBwcnVuZSgpOworCisg
ICAgLy8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2ZW50IGl0IGZyb20gYmVp
bmcgcHVyZ2VkLgorICAgIGltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxzKCk7CisKKyAgICBpZiAo
IWltYWdlLT5pc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gSW5jb21wbGV0ZSBpbWFnZSBpcyBu
b3Qgc3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgZGVsZXRlZCBhZnRlciB1c2UuCisgICAgICAgIC8v
IFNlZSB1bmxvY2tDYWNoZSgpLgorICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgYWxsb3cgaW5j
b21wbGV0ZSBpbWFnZXMgdG8gYmUgc3RvcmVkIHRvZ2V0aGVyIHdpdGgKKyAgICAgICAgLy8gdGhl
IGNvcnJlc3BvbmRpbmcgSW1hZ2VEZWNvZGVyLgorICAgICAgICByZXR1cm4gaW1hZ2UubGVha1B0
cigpOwogICAgIH0KKworICAgIFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEltYWdlID0gaW1h
Z2UuZ2V0KCk7CisgICAgT3duUHRyPENhY2hlRW50cnk+IG5ld0NhY2hlRW50cnkgPSBDYWNoZUVu
dHJ5OjpjcmVhdGVBbmRVc2UoaW1hZ2UpOworCisgICAgQ2FjaGVJZGVudGlmaWVyIGtleSA9IHN0
ZDo6bWFrZV9wYWlyKGdlbmVyYXRvciwgY2FjaGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBBU1NFUlQoIW1fY2FjaGVNYXAuY29udGFp
bnMoa2V5KSk7CisKKyAgICAvLyBtX2NhY2hlTWFwIGlzIHVzZWQgZm9yIGluZGV4aW5nIGFuZCBx
dWljayBsb29rdXAgb2YgYSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gbV9jYWNoZUVudHJpZXMgaXMg
dXNlZCB0byBzdXBwb3J0IExSVSBvcGVyYXRpb25zIHRvIHJlb3JkZXIgY2FjaGUKKyAgICAvLyBl
bnRyaWVzIHF1aWNrbHkuIEl0IGFsc28gb3ducyBjYWNoZWQgaW1hZ2VzLgorICAgIG1fY2FjaGVN
YXAuYWRkKGtleSwgbmV3Q2FjaGVFbnRyeS5nZXQoKSk7CisgICAgbV9jYWNoZUVudHJpZXMuYXBw
ZW5kKG5ld0NhY2hlRW50cnkucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2U7Cit9
CisKK3ZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpwcnVuZSgpCit7CisgICAgLy8gVE9ETzogSW1w
bGVtZW50LgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdT
dG9yZS5oCmluZGV4IGE2ZmE1NjE5NGZlMTU1MzEzZTFiMWJiMjhmMTExMjI2YjIwMjdmN2UuLjBh
ZWEyZTk2OTllNzg3MDcxMTRhZTZmNjY0YzZjYzkxMTY3NzNhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVj
b2RpbmdTdG9yZS5oCkBAIC0yNiw0MCArMjYsNzMgQEAKICNpZm5kZWYgSW1hZ2VEZWNvZGluZ1N0
b3JlX2gKICNkZWZpbmUgSW1hZ2VEZWNvZGluZ1N0b3JlX2gKIAorI2luY2x1ZGUgIlNjYWxlZElt
YWdlRnJhZ21lbnQuaCIKICNpbmNsdWRlICJTa1R5cGVzLmgiCiAjaW5jbHVkZSAiU2tTaXplLmgi
CisjaW5jbHVkZSAiU2tTaXplSGFzaC5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSW1hZ2VEZWNvZGVyOwogY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKLWNsYXNzIFNj
YWxlZEltYWdlRnJhZ21lbnQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLS8vIFRoaXMgY2xhc3Mg
Y2FuIG9ubHkgYmUgaW5zdGFudGlhdGVkIG9uIG1haW4gdGhyZWFkLiBUaGVyZSB3aWxsIGJlIGFu
Ci0vLyBpbnN0YW5jZSBvbiBpbXBsIHRocmVhZCBpbiB0aGUgZnV0dXJlIGJ1dCB0aGF0IHBhcnQg
b2YgaW1wbGVtZW50YXRpb24KLS8vIGlzIGluY29tcGxldGUuIFNlZSBidWc6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDI0MAotLy8gZm9yIGRldGFpbHMuCiBjbGFz
cyBJbWFnZURlY29kaW5nU3RvcmUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPElt
YWdlRGVjb2RpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IEltYWdlRGVj
b2RpbmdTdG9yZSk7IH0KICAgICB+SW1hZ2VEZWNvZGluZ1N0b3JlKCk7CiAKLSAgICBzdGF0aWMg
SW1hZ2VEZWNvZGluZ1N0b3JlKiBpbnN0YW5jZU9uTWFpblRocmVhZCgpOwotICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgSW1hZ2VEZWNvZGluZ1N0
b3JlKiBpbnN0YW5jZSgpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVPbmNlKCk7CiAgICAg
c3RhdGljIHZvaWQgc2h1dGRvd24oKTsKIAorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IGxvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBsb2NrSW5j
b21wbGV0ZUNhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTa0lTaXplJiBz
Y2FsZWRTaXplKTsKKyAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0
b3IqLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCogaW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBQ
YXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+KTsKKwogcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
Q2FjaGVFbnRyeSB7CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZUVudHJ5KCkpOyB9CisgICAgICAgIHN0YXRp
YyBQYXNzT3duUHRyPENhY2hlRW50cnk+IGNyZWF0ZUFuZFVzZShQYXNzT3duUHRyPFNjYWxlZElt
YWdlRnJhZ21lbnQ+IGltYWdlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVFbnRyeShpbWFn
ZSwgMSkpOyB9CisKKyAgICAgICAgQ2FjaGVFbnRyeSgpCisgICAgICAgICAgICA6IHVzZUNvdW50
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENhY2hlRW50cnkoUGFzc093blB0
cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBpbWFnZSwgaW50IGNvdW50KQorICAgICAgICAgICAgOiBj
YWNoZWRJbWFnZShpbWFnZSkKKyAgICAgICAgICAgICwgdXNlQ291bnQoY291bnQpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIH5DYWNoZUVudHJ5KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKCF1c2VDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBPd25QdHI8U2Nh
bGVkSW1hZ2VGcmFnbWVudD4gY2FjaGVkSW1hZ2U7CisgICAgICAgIGludCB1c2VDb3VudDsKKyAg
ICB9OworCiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlKCk7Ci0gICAgYm9vbCBjYWxsZWRPblZhbGlk
VGhyZWFkKCkgY29uc3Q7Ci0gICAgU2NhbGVkSW1hZ2VGcmFnbWVudCogbG9va3VwRnJhbWVDYWNo
ZShpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Ci0gICAgdm9p
ZCBkZWxldGVGcmFtZUNhY2hlKGludCBpbWFnZUlkKTsKKyAgICB2b2lkIHBydW5lKCk7CisKKyAg
ICBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4gbV9jYWNoZUVudHJpZXM7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgU2tJU2l6ZT4gQ2FjaGVJ
ZGVudGlmaWVyOworICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZpZXIsIENhY2hlRW50
cnkqPiBDYWNoZU1hcDsKKyAgICBDYWNoZU1hcCBtX2NhY2hlTWFwOwogCi0gICAgVmVjdG9yPE93
blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiA+IG1fZnJhbWVDYWNoZTsKKyAgICAvLyBQcm90ZWN0
IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGFsbCBpbnN0YW5jZXMgb2YgQ2FjaGVFbnRyeSBzdG9yZWQg
aW4gbV9jYWNoZUVudHJpZXMgYW5kCisgICAgLy8gbV9jYWNoZU1hcCBhcyB3ZWxsIGFzIHRoZSBj
b250YWluZXJzLgorICAgIE11dGV4IG1fbXV0ZXg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4IGZlNGU0YmZiZWRjY2Y0
ZDQ2MjkwOWVkYjJmYzE1MjUyMTU4N2VjOTIuLjIyMGE1N2Q0NWRhMTIzN2VmZmI1ODhhYTRlMjcz
YzVhN2EzMjM2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0yOCwy
MCArMjgsMzQgQEAKICNpbmNsdWRlICJJbWFnZUZyYW1lR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRl
ICJJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kaW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
ICNpbmNsdWRlICJza2lhL2V4dC9pbWFnZV9vcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi0gICAgOiBtX2Fs
bERhdGFSZWNlaXZlZChmYWxzZSkKK25hbWVzcGFjZSB7CisKK3NraWE6OkltYWdlT3BlcmF0aW9u
czo6UmVzaXplTWV0aG9kIHJlc2l6ZU1ldGhvZCgpCit7CisgICAgcmV0dXJuIHNraWE6OkltYWdl
T3BlcmF0aW9uczo6UkVTSVpFX0xBTkNaT1MzOworfQorCit9IC8vIG5hbWVzcGFjZQorCitJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpJbWFnZUZyYW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxT
aXplLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
CisgICAgOiBtX2Z1bGxTaXplKGZ1bGxTaXplKQorICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFs
c2UpCiB7CiAgICAgc2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogfQogCiBJbWFnZUZy
YW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCiB7CisgICAgLy8gVE9ETzogQ2Fs
bCBJbWFnZURlY29kaW5nU3RvcmUgdG8gcmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzIGluZGV4ZWQK
KyAgICAvLyBieSB0aGlzIG9iamVjdC4KIH0KIAogdm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpz
ZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCkKQEAgLTQ5LDE3ICs2Myw2NCBAQCB2b2lkIEltYWdlRnJhbWVHZW5lcmF0b3I6OnNldERhdGEo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlYwogICAgIC8vIEZJ
WE1FOiBEb2luZyBhIGZ1bGwgY29weSBpcyBleHBlbnNpdmUsIGluc3RlYWQgY29weSBvbmx5IG5l
dyBkYXRhLgogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFDb3B5ID0gZGF0YS0+Y29weSgp
OwogCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICBNdXRleExvY2tlciBsb2Nr
KG1fZGF0YU11dGV4KTsKICAgICBtX2RhdGEgPSBkYXRhQ29weTsKICAgICBtX2FsbERhdGFSZWNl
aXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKIH0KIAotU2tCaXRtYXAgSW1hZ2VGcmFtZUdlbmVyYXRv
cjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVj
dCYgc2NhbGVkU3Vic2V0KQorY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdl
bmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkKK3sKKyAg
ICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGRlY29kZSBvciBzY2FsZSBvcGVyYXRpb25zIG9uIHRo
ZSBzYW1lIGltYWdlIGRhdGEuCisgICAgLy8gTXVsdGlwbGUgTGF6eURlY29kaW5nUGl4ZWxSZWZz
IGNhbiBjYWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX2RlY29kZU11dGV4KTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNo
ZWRJbWFnZSA9IDA7CisKKyAgICBjYWNoZWRJbWFnZSA9IHRyeVRvTG9ja0NhY2hlKHNjYWxlZFNp
emUpOworICAgIGlmIChjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOwor
CisgICAgY2FjaGVkSW1hZ2UgPSB0cnlUb1NjYWxlKDAsIHNjYWxlZFNpemUpOworICAgIGlmIChj
YWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworCisgICAgY2FjaGVkSW1h
Z2UgPSB0cnlUb0RlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUpOworICAgIGlmIChjYWNoZWRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdlOworICAgIHJldHVybiAwOworfQorCitjb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDYWNo
ZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplKQoreworICAgIHJldHVybiBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPmxvY2tDb21wbGV0ZUNhY2hlKHRoaXMsIHNjYWxlZFNpemUpOwor
fQorCitjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlU
b1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNvbnN0IFNr
SVNpemUmIHNjYWxlZFNpemUpCit7CisgICAgLy8gSWYgdGhlIHJlcXVlc3RlZCBzY2FsZWQgc2l6
ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZnVsbCBzaXplIHRoZW4gZXhpdAorICAgIC8vIGVhcmx5LiBU
aGlzIHNhdmVzIGEgY2FjaGUgbG9va3VwLgorICAgIGlmIChzY2FsZWRTaXplID09IG1fZnVsbFNp
emUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFmdWxsU2l6ZUltYWdlKQorICAgICAg
ICBmdWxsU2l6ZUltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ29t
cGxldGVDYWNoZSh0aGlzLCBtX2Z1bGxTaXplKTsKKworICAgIGlmICghZnVsbFNpemVJbWFnZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTa0JpdG1hcCBzY2FsZWRCaXRtYXAgPSBza2lhOjpJ
bWFnZU9wZXJhdGlvbnM6OlJlc2l6ZSgKKyAgICAgICAgZnVsbFNpemVJbWFnZS0+Yml0bWFwKCks
IHJlc2l6ZU1ldGhvZCgpLCBzY2FsZWRTaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkp
OworICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBzY2FsZWRJbWFnZSA9IFNjYWxlZElt
YWdlRnJhZ21lbnQ6OmNyZWF0ZShzY2FsZWRTaXplLCBzY2FsZWRCaXRtYXAsIGZ1bGxTaXplSW1h
Z2UtPmlzQ29tcGxldGUoKSk7CisKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PnVubG9ja0NhY2hlKHRoaXMsIGZ1bGxTaXplSW1hZ2UpOworICAgIHJldHVybiBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSh0aGlzLCBzY2FsZWRJbWFn
ZS5yZWxlYXNlKCkpOworfQorCitjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1l
R2VuZXJhdG9yOjp0cnlUb0RlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
CiB7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBib29sIGFsbERhdGFSZWNl
aXZlZCA9IGZhbHNlOwogICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RhdGFNdXRleCk7CiAKICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBkbyBhIHNoYWxsb3cgY29weSBpbnN0ZWFkLiBOb3cgd2UncmUgcmVzdHJp
Y3RlZCBieSB0aGUgQVBJIG9mIFNoYXJlZEJ1ZmZlci4KICAgICAgICAgZGF0YSA9IG1fZGF0YS0+
Y29weSgpOwpAQCAtNjcsMjIgKzEyOCwyNiBAQCBTa0JpdG1hcCBJbWFnZUZyYW1lR2VuZXJhdG9y
OjpkZWNvZGVBbmRTY2FsZShjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTawogICAg
IH0KIAogICAgIE93blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIoSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoKmRhdGEuZ2V0KCksIEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQs
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisgICAgaWYgKCFk
ZWNvZGVyICYmIG1faW1hZ2VEZWNvZGVyRmFjdG9yeSkKKyAgICAgICAgZGVjb2RlciA9IG1faW1h
Z2VEZWNvZGVyRmFjdG9yeS0+Y3JlYXRlKCk7CiAgICAgaWYgKCFkZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gU2tCaXRtYXAoKTsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBkZWNvZGVyLT5zZXRE
YXRhKGRhdGEuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgSW1hZ2VGcmFtZSogZnJhbWUg
PSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIFNrQml0bWFwKCk7CisgICAgaWYgKCFmcmFtZSB8fCBmcmFtZS0+c3RhdHVzKCkg
PT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBib29s
IGlzQ29tcGxldGUgPSBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0
ZTsKKyAgICBTa0JpdG1hcCBmdWxsU2l6ZUJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOwor
ICAgIEFTU0VSVChmdWxsU2l6ZUJpdG1hcC53aWR0aCgpID09IG1fZnVsbFNpemUud2lkdGgoKSAm
JiBmdWxsU2l6ZUJpdG1hcC5oZWlnaHQoKSA9PSBtX2Z1bGxTaXplLmhlaWdodCgpKTsKIAotICAg
IFNrQml0bWFwIGJpdG1hcCA9IGZyYW1lLT5nZXRTa0JpdG1hcCgpOwotICAgIFNrSVNpemUgYml0
bWFwU2l6ZSA9IFNrSVNpemU6Ok1ha2UoYml0bWFwLndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7
Ci0gICAgaWYgKGJpdG1hcFNpemUgIT0gc2NhbGVkU2l6ZSkKLSAgICAgICAgYml0bWFwID0gc2tp
YTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUoYml0bWFwLCBza2lhOjpJbWFnZU9wZXJhdGlvbnM6
OlJFU0laRV9MQU5DWk9TMywgc2NhbGVkU2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgp
KTsKKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsU2l6ZUltYWdlID0gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCisgICAgICAgIHRo
aXMsIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShtX2Z1bGxTaXplLCBmdWxsU2l6ZUJpdG1h
cCwgaXNDb21wbGV0ZSkpOwogCi0gICAgU2tCaXRtYXAgYml0bWFwU3Vic2V0OwotICAgIGJpdG1h
cC5leHRyYWN0U3Vic2V0KCZiaXRtYXBTdWJzZXQsIHNjYWxlZFN1YnNldCk7Ci0gICAgcmV0dXJu
IGJpdG1hcFN1YnNldDsKKyAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQorICAgICAg
ICByZXR1cm4gZnVsbFNpemVJbWFnZTsKKyAgICByZXR1cm4gdHJ5VG9TY2FsZShmdWxsU2l6ZUlt
YWdlLCBzY2FsZWRTaXplKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VGcmFtZUdlbmVyYXRvci5oCmluZGV4IDZkZjViMjNjZWQxNGFlNTA5NTVhZjYzZTg3OGUzYmE3
ZGE2NTQ4OTIuLjA4MzFjNDQ5ODIxMTRmNGE2NmM2OTY3ZTlmMmI2OGNhMDMzY2Y1OTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJh
bWVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUZyYW1lR2VuZXJhdG9yLmgKQEAgLTM4LDI2ICszOCw0OSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGVjb2RlcjsKK2NsYXNzIFNjYWxlZEltYWdlRnJh
Z21lbnQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKK2NsYXNzIEltYWdlRGVjb2RlckZhY3Rvcnkg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlckZhY3RvcnkoKSB7IH0KKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKSA9IDA7Cit9OworCiBjbGFz
cyBJbWFnZUZyYW1lR2VuZXJhdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEltYWdl
RnJhbWVHZW5lcmF0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUZy
YW1lR2VuZXJhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0
b3I+IGNyZWF0ZShjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9yKGRhdGEsIGFsbERhdGFSZWNlaXZlZCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRnJhbWVHZW5lcmF0b3IoZnVsbFNpemUs
IGRhdGEsIGFsbERhdGFSZWNlaXZlZCkpOwogICAgIH0KIAotICAgIEltYWdlRnJhbWVHZW5lcmF0
b3IoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
SW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgfkltYWdlRnJhbWVHZW5l
cmF0b3IoKTsKIAotICAgIFNrQml0bWFwIGRlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNj
YWxlZFNpemUsIGNvbnN0IFNrSVJlY3QmIHNjYWxlZFN1YnNldCk7CisgICAgY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7
CiAKICAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CiAKKyAgICB2b2lkIHNldEltYWdlRGVjb2RlckZhY3RvcnlGb3JUZXN0aW5n
KFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyRmFjdG9yeT4gZmFjdG9yeSkgeyBtX2ltYWdlRGVjb2Rl
ckZhY3RvcnkgPSBmYWN0b3J5OyB9CisKIHByaXZhdGU6CisgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgY2FsbGVkIHdoaWxlIG1fZGVjb2RlTXV0ZXggaXMgbG9ja2VkLgorICAgIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIHRyeVRvTG9ja0NhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUp
OworICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRyeVRvU2NhbGUoY29uc3QgU2NhbGVk
SW1hZ2VGcmFnbWVudCogZnVsbFNpemVJbWFnZSwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7
CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9EZWNvZGVBbmRTY2FsZShjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKTsKKworICAgIFNrSVNpemUgbV9mdWxsU2l6ZTsKICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsK
LSAgICBNdXRleCBtX211dGV4OworCisgICAgT3duUHRyPEltYWdlRGVjb2RlckZhY3Rvcnk+IG1f
aW1hZ2VEZWNvZGVyRmFjdG9yeTsKKworICAgIC8vIFByZXZlbnRzIG11bHRpcGxlIGRlY29kZSBv
cGVyYXRpb25zIG9uIHRoZSBzYW1lIGRhdGEuCisgICAgTXV0ZXggbV9kZWNvZGVNdXRleDsKKwor
ICAgIC8vIFByZXZlbnRzIGNvbmN1cnJlbnQgYWNjZXNzIHRvIG1fZGF0YS4KKyAgICBNdXRleCBt
X2RhdGFNdXRleDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVs
UmVmLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlE
ZWNvZGluZ1BpeGVsUmVmLmNwcAppbmRleCAwYTVkNWEzOGFmNGU2OTdjZTk3MDdhZmI2ZGRjMDFh
ZWU0NzA5MGZiLi41NTUyNjYzNjJhNjUyOGNkNGM1MzM4MjJmMWY2NTg2YmJmZDg0MzUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVj
b2RpbmdQaXhlbFJlZi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCkBAIC0zOCw2ICszOCw3IEBAIExhenlE
ZWNvZGluZ1BpeGVsUmVmOjpMYXp5RGVjb2RpbmdQaXhlbFJlZihQYXNzUmVmUHRyPEltYWdlRnJh
bWVHZW5lcmF0b3I+IGZyYW1lCiAgICAgLCBtX2ZyYW1lR2VuZXJhdG9yKGZyYW1lR2VuZXJhdG9y
KQogICAgICwgbV9zY2FsZWRTaXplKHNjYWxlZFNpemUpCiAgICAgLCBtX3NjYWxlZFN1YnNldChz
Y2FsZWRTdWJzZXQpCisgICAgLCBtX2xvY2tlZENhY2hlZEltYWdlKDApCiB7CiB9CiAKQEAgLTU4
LDE4ICs1OSwyOSBAQCBib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjppc0NsaXBwZWQoKSBjb25z
dAogdm9pZCogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUq
KikKIHsKICAgICBtX211dGV4LmxvY2soKTsKLSAgICBBU1NFUlQobV9sb2NrZWRCaXRtYXAuaXNO
dWxsKCkpOwotICAgIG1fbG9ja2VkQml0bWFwID0gbV9mcmFtZUdlbmVyYXRvci0+ZGVjb2RlQW5k
U2NhbGUobV9zY2FsZWRTaXplLCBtX3NjYWxlZFN1YnNldCk7Ci0gICAgaWYgKG1fbG9ja2VkQml0
bWFwLmlzTnVsbCgpKQorICAgIEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZSk7CisKKyAgICBt
X2xvY2tlZENhY2hlZEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2Nr
Q29tcGxldGVDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUpOworCisg
ICAgLy8gVXNlIEltYWdlRnJhbWVHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgdGhlIGltYWdlLiBJdCB3
aWxsIGxvY2sgdGhlIGNhY2hlCisgICAgLy8gZW50cnkgZm9yIHVzLgorICAgIGlmICghbV9sb2Nr
ZWRDYWNoZWRJbWFnZSkKKyAgICAgICAgbV9sb2NrZWRDYWNoZWRJbWFnZSA9IG1fZnJhbWVHZW5l
cmF0b3ItPmRlY29kZUFuZFNjYWxlKG1fc2NhbGVkU2l6ZSk7CisKKyAgICBpZiAoIW1fbG9ja2Vk
Q2FjaGVkSW1hZ2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fbG9ja2VkQml0bWFwLmxvY2tQ
aXhlbHMoKTsKLSAgICByZXR1cm4gbV9sb2NrZWRCaXRtYXAuZ2V0QWRkcigwLCAwKTsKKworICAg
IEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuaXNOdWxsKCkpOworICAgIEFT
U0VSVChtX2xvY2tlZENhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkgPT0gbV9zY2FsZWRTaXplKTsK
KyAgICByZXR1cm4gbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuZ2V0QWRkcihtX3NjYWxl
ZFN1YnNldC54KCksIG1fc2NhbGVkU3Vic2V0LnkoKSk7CiB9CiAKIHZvaWQgTGF6eURlY29kaW5n
UGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKIHsKLSAgICBtX2xvY2tlZEJpdG1hcC51bmxvY2tQ
aXhlbHMoKTsKLSAgICBtX2xvY2tlZEJpdG1hcC5yZXNldCgpOworICAgIGlmIChtX2xvY2tlZENh
Y2hlZEltYWdlKSB7CisgICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5s
b2NrQ2FjaGUobV9mcmFtZUdlbmVyYXRvci5nZXQoKSwgbV9sb2NrZWRDYWNoZWRJbWFnZSk7Cisg
ICAgICAgIG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSAwOworICAgIH0KICAgICBtX211dGV4LnVubG9j
aygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuaAppbmRleCA4MDMxNGNmMjFm
N2EwYWJjYmUxNDMwODhmYjBkYzZhZWUyZDBiNDI3Li45YjJhNDZkNGU1ZDliNDVmNGUwNzJlNzMy
ODBjMTRiMDJhYjJhMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgKQEAgLTM4
LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VGcmFtZUdlbmVy
YXRvcjsKK2NsYXNzIFNjYWxlZEltYWdlRnJhZ21lbnQ7CiAKIGNsYXNzIExhenlEZWNvZGluZ1Bp
eGVsUmVmIDogcHVibGljIFNrUGl4ZWxSZWYgewogcHVibGljOgpAQCAtNjEsNyArNjIsNyBAQCBw
cml2YXRlOgogICAgIFNrSVNpemUgbV9zY2FsZWRTaXplOwogICAgIFNrSVJlY3QgbV9zY2FsZWRT
dWJzZXQ7CiAKLSAgICBTa0JpdG1hcCBtX2xvY2tlZEJpdG1hcDsKKyAgICBjb25zdCBTY2FsZWRJ
bWFnZUZyYWdtZW50KiBtX2xvY2tlZENhY2hlZEltYWdlOwogICAgIE11dGV4IG1fbXV0ZXg7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9TY2FsZWRJbWFnZUZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCmluZGV4IDk3NGU2ZmY4NDdlYzVi
NWRkNDY5NThmMjBiZDQ4MTI5MzliZDM1NzMuLjcxYmI2MjBhZWI0NzY5NDU0YWY1NTJmYzY1OTVj
YTg5N2I5ZDU0NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuY3BwCkBAIC0zMywy
MiArMzMsMTEgQEAgU2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21lbnQoKQog
ewogfQogCi1TY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGludCBpbWFn
ZUlkLCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBj
b25zdCBib29sIGlzQ29tcGxldGUpCi0gICAgOiBtX2ltYWdlSWQoaW1hZ2VJZCkKLSAgICAsIG1f
c2NhbGVkU2l6ZShzY2FsZWRTaXplKQorU2NhbGVkSW1hZ2VGcmFnbWVudDo6U2NhbGVkSW1hZ2VG
cmFnbWVudChjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0JpdG1hcCYgYml0bWFw
LCBjb25zdCBib29sIGlzQ29tcGxldGUpCisgICAgOiBtX3NjYWxlZFNpemUoc2NhbGVkU2l6ZSkK
ICAgICAsIG1fYml0bWFwKGJpdG1hcCkKICAgICAsIG1faXNDb21wbGV0ZShpc0NvbXBsZXRlKQog
ewogfQogCi1ib29sIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdlSWQsIGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGltYWdlSWQgPT0g
bV9pbWFnZUlkICYmIHNjYWxlZFNpemUgPT0gbV9zY2FsZWRTaXplOwotfQotCi1ib29sIFNjYWxl
ZEltYWdlRnJhZ21lbnQ6OmlzRXF1YWwoaW50IGltYWdlSWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGltYWdlSWQgPT0gbV9pbWFnZUlkOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJ
bWFnZUZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgKaW5kZXggNWI3ZmZjOTYwMTRlMDU3M2U4MzUwNzgwMmI2
NmYzNGQ5YmNkM2Y2ZC4uZjA3MDdiM2NlMzRjNjQ0ZjViYjc1MTRmZDY0YjFkZjJkMDcxMmM3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2Nh
bGVkSW1hZ2VGcmFnbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaApAQCAtMzQsMjkgKzM0LDIzIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gU2NhbGVkSW1hZ2VGcmFnbWVudCBpcyBhIHNjYWxlZCB2
ZXJzaW9uIG9mIGEgaW1hZ2UuIEl0IGlzIGlkZW50aWZpZWQKLS8vIGJ5IHR3byB0aGluZ3M6Ci0v
LyAxLiBJbWFnZSBJRC4gVGhlIG9yaWdpbmFsIGltYWdlIHRoYXQgdGhpcyBmcmFnbWVudCBjb21l
cyBmcm9tLgotLy8gMi4gU2NhbGVkIGltYWdlIHNpemUuCisvLyBTY2FsZWRJbWFnZUZyYWdtZW50
IGlzIGEgc2NhbGVkIHZlcnNpb24gb2YgYW4gaW1hZ2UuCiBjbGFzcyBTY2FsZWRJbWFnZUZyYWdt
ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50
PiBjcmVhdGUoaW50IGltYWdlSWQsIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAsIGJvb2wgaXNDb21wbGV0ZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxT
Y2FsZWRJbWFnZUZyYWdtZW50PiBjcmVhdGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9vbCBpc0NvbXBsZXRlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJbWFnZUZyYWdtZW50KGltYWdlSWQsIHNjYWxlZFNpemUs
IGJpdG1hcCwgaXNDb21wbGV0ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjYWxl
ZEltYWdlRnJhZ21lbnQoc2NhbGVkU2l6ZSwgYml0bWFwLCBpc0NvbXBsZXRlKSk7CiAgICAgfQog
Ci0gICAgU2NhbGVkSW1hZ2VGcmFnbWVudChpbnQgaW1hZ2VJZCwgY29uc3QgU2tJU2l6ZSYsIGNv
bnN0IFNrQml0bWFwJiwgYm9vbCBpc0NvbXBsZXRlKTsKKyAgICBTY2FsZWRJbWFnZUZyYWdtZW50
KGNvbnN0IFNrSVNpemUmLCBjb25zdCBTa0JpdG1hcCYsIGJvb2wgaXNDb21wbGV0ZSk7CiAgICAg
flNjYWxlZEltYWdlRnJhZ21lbnQoKTsKIAorICAgIGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NjYWxlZFNpemU7IH0KICAgICBjb25zdCBTa0JpdG1hcCYgYml0
bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXA7IH0KICAgICBTa0JpdG1hcCYgYml0bWFwKCkg
eyByZXR1cm4gbV9iaXRtYXA7IH0KLQotICAgIGJvb2wgaXNFcXVhbChpbnQgaW1hZ2VJZCwgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSkgY29uc3Q7Ci0gICAgYm9vbCBpc0VxdWFsKGludCBpbWFn
ZUlkKSBjb25zdDsKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29t
cGxldGU7IH0KIAogcHJpdmF0ZToKLSAgICBpbnQgbV9pbWFnZUlkOwogICAgIFNrSVNpemUgbV9z
Y2FsZWRTaXplOwogICAgIFNrQml0bWFwIG1fYml0bWFwOwogICAgIGJvb2wgbV9pc0NvbXBsZXRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tTaXplSGFzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2tTaXplSGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmMjk3Y2ZkZjc1MjI1ZjJhM2U4YjM3ODA3ZDQ4NWVk
MDAwZGQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Ta1NpemVIYXNoLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2tTaXplSGFzaF9oCisjZGVmaW5lIFNrU2l6ZUhhc2hfaAorCisjaW5jbHVkZSAiU2tT
Y2FsYXIuaCIKKyNpbmNsdWRlICJTa1NpemUuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBJbnRIYXNoPFNrU2l6ZT4g
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNrU2l6ZSYga2V5KSB7IHJldHVybiBw
YWlySW50SGFzaChrZXkud2lkdGgoKSwga2V5LmhlaWdodCgpKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFNrU2l6ZSYgYSwgY29uc3QgU2tTaXplJiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTa1NpemU+IHsKKyAg
ICB0eXBlZGVmIEludEhhc2g8U2tTaXplPiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SGFzaFRyYWl0czxTa1NpemU+IDogR2VuZXJpY0hhc2hUcmFpdHM8U2tTaXplPiB7CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IGZhbHNlOworICAgIHN0YXRpYyBTa1NpemUgZW1wdHlW
YWx1ZSgpIHsgcmV0dXJuIFNrU2l6ZTo6TWFrZSgwLCAwKTsgfQorICAgIHN0YXRpYyB2b2lkIGNv
bnN0cnVjdERlbGV0ZWRWYWx1ZShTa1NpemUmIHNsb3QpCisgICAgeworICAgICAgICBzbG90ID0g
U2tTaXplOjpNYWtlKC0xLCAtMSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZh
bHVlKGNvbnN0IFNrU2l6ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUud2lk
dGgoKSA9PSAtMSAmJiB2YWx1ZS5oZWlnaHQoKSA9PSAtMTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBJbnRIYXNoPFNrSVNpemU+IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBTa0lTaXplJiBrZXkpIHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS53aWR0aCgpLCBrZXku
aGVpZ2h0KCkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2tJU2l6ZSYgYSwgY29u
c3QgU2tJU2l6ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8U2tJU2l6ZT4geworICAgIHR5cGVkZWYgSW50SGFzaDxTa0lTaXpl
PiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxTa0lTaXplPiA6IEdl
bmVyaWNIYXNoVHJhaXRzPFNrSVNpemU+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZh
bHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gZmFsc2U7CisgICAgc3RhdGljIFNrSVNpemUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIFNrSVNp
emU6Ok1ha2UoMCwgMCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUo
U2tJU2l6ZSYgc2xvdCkKKyAgICB7CisgICAgICAgIHNsb3QgPSBTa0lTaXplOjpNYWtlKC0xLCAt
MSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFNrSVNpemUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLndpZHRoKCkgPT0gLTEgJiYgdmFs
dWUuaGVpZ2h0KCkgPT0gLTE7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBTa1NpemVIYXNoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGRk
NWQ2Y2YxYjZiZThiMGNiMDk3ZWYwZTI1NGZkMDEwM2VmM2QwN2QuLmRmNTBhZmZjNTkxMTIxOTJl
NzUwNWY1ZTJiODA1ODdiYzlkNWRkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtODAsNiArODAsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0ltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSW1hZ2VMYXllckNo
cm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCcs
CiAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViS2l0LmNwcAppbmRleCA2YmNhMWQ4MTA0ZTU2YjA2NGRmNTI3NTYwZThmZDEzNGI5
ZGJiYmE5Li5hNTE3ZDE1NWU2ZmExZjJmMjE5ZTkxMWQ3ZmE5OWFlMTQ3MjkxYWZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJLaXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYktpdC5jcHAKQEAgLTEzMyw2ICsxMzMsNyBAQCB2b2lkIGlu
aXRpYWxpemVXaXRob3V0VjgoV2ViS2l0UGxhdGZvcm1TdXBwb3J0KiB3ZWJLaXRQbGF0Zm9ybVN1
cHBvcnQpCiAgICAgQVNTRVJUKCFzX3dlYktpdFBsYXRmb3JtU3VwcG9ydCk7CiAgICAgc193ZWJL
aXRQbGF0Zm9ybVN1cHBvcnQgPSB3ZWJLaXRQbGF0Zm9ybVN1cHBvcnQ7CiAgICAgUGxhdGZvcm06
OmluaXRpYWxpemUoc193ZWJLaXRQbGF0Zm9ybVN1cHBvcnQpOworICAgIFdlYkNvcmU6OkltYWdl
RGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6ZU9uY2UoKTsKIAogICAgIFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDE2NDg4MGFhN2E1
NmRlMDIzODdjYmI5ODU2MGU0MjMzMmFlMGZkMjEuLjZhMzM3ODZhY2YzYjUyNThlMTRiZTBjYzE1
ZGFhMWIxMjBmYWY3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYlNldHRpbmdzSW1wbC5oIgogCisjaW5jbHVkZSAiRGVmZXJyZWRJbWFnZURlY29k
ZXIuaCIKICNpbmNsdWRlICJGb250UmVuZGVyaW5nTW9kZS5oIgotI2luY2x1ZGUgIkltYWdlRGVj
b2RpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8cHVibGljL1dl
YlN0cmluZy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KQEAgLTUwNSwxMCArNTA1LDcg
QEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkMmRDYW52YXNFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldERlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGlmICghbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkICYmIGVuYWJsZWQpCi0gICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlh
bGl6ZU9uTWFpblRocmVhZCgpOwotICAgIGlmIChtX2RlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJs
ZWQgJiYgIWVuYWJsZWQpCi0gICAgICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6c2h1dGRvd24oKTsK
KyAgICBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZChlbmFibGVkKTsKICAgICBtX2Rl
ZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RlZmVycmVkSW1hZ2VEZWNvZGVyVGVzdC5j
cHAKaW5kZXggNGJjYzI5ODgyMmU1MmUzMGQxYzRlYWY2MzA2ODBhOWFlNjU5ZmZkMi4uN2ZkNDAx
N2E2ZTQwYmZmY2FmNzdkZjZjY2YxMWYwNTI2NGE4ZjYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9EZWZlcnJlZEltYWdlRGVjb2RlclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRGVmZXJyZWRJbWFnZURlY29kZXJUZXN0LmNwcApA
QCAtNzMsNyArNzMsOCBAQCBjbGFzcyBEZWZlcnJlZEltYWdlRGVjb2RlclRlc3QgOiBwdWJsaWMg
Ojp0ZXN0aW5nOjpUZXN0LCBwdWJsaWMgTW9ja0ltYWdlRGVjb2RlcgogcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBTZXRVcCgpCiAgICAgewotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
aXRpYWxpemVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbml0
aWFsaXplT25jZSgpOworICAgICAgICBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RW5hYmxlZCh0
cnVlKTsKICAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUod2hpdGVQTkcsIHNp
emVvZih3aGl0ZVBORykpOwogICAgICAgICBtX2FjdHVhbERlY29kZXIgPSBuZXcgTW9ja0ltYWdl
RGVjb2Rlcih0aGlzKTsKICAgICAgICAgbV9hY3R1YWxEZWNvZGVyLT5zZXRTaXplKDEsIDEpOwpA
QCAtOTAsMTAgKzkxLDE5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVyQmVp
bmdEZXN0cm95ZWQoKQogICAgIHsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCA9
IG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKTsKICAgICAgICAgbV9h
Y3R1YWxEZWNvZGVyID0gMDsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJS
ZXF1ZXN0ZWQoKQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50Owor
ICAgIH0KKworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CisgICAg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgLy8gRG9uJ3Qgb3duIHRoaXMgYnV0IHNhdmVzIHRoZSBwb2lu
dGVyIHRvIHF1ZXJ5IHN0YXRlcy4KICAgICBNb2NrSW1hZ2VEZWNvZGVyKiBtX2FjdHVhbERlY29k
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFt
ZUdlbmVyYXRvclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMGEyZjg2NDI1YWQzMjY2YzQ0ODg1ODQ2
YTlmNGQ0YmU4ODhiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0ltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LmNwcApAQCAtMCwwICsxLDE5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3Iu
aCIKKworI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk1vY2tJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q7CisKKy8vIEhlbHBlciBtZXRob2RzIHRvIGdlbmVy
YXRlIHN0YW5kYXJkIHNpemVzLgorU2tJU2l6ZSBmdWxsU2l6ZSgpIHsgcmV0dXJuIFNrSVNpemU6
Ok1ha2UoMTAwLCAxMDApOyB9CitTa0lTaXplIHNjYWxlZFNpemUoKSB7IHJldHVybiBTa0lTaXpl
OjpNYWtlKDUwLCA1MCk7IH0KKworY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q7CisKK2Ns
YXNzIE1vY2tJbWFnZURlY29kZXJGYWN0b3J5IDogcHVibGljIEltYWdlRGVjb2RlckZhY3Rvcnkg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tJbWFnZURlY29kZXJGYWN0b3J5
PiBjcmVhdGUoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tJbWFnZURlY29kZXJGYWN0b3J5KHRlc3QpKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBjcmVhdGUoKTsKKworcHJp
dmF0ZToKKyAgICBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeShJbWFnZUZyYW1lR2VuZXJhdG9yVGVz
dCogdGVzdCkKKyAgICAgICAgOiBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgSW1h
Z2VGcmFtZUdlbmVyYXRvclRlc3QqIG1fdGVzdDsKK307CisKK2NsYXNzIEltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCwgcHVibGljIE1vY2tJbWFnZURlY29k
ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAg
ICAgICBJbWFnZURlY29kaW5nU3RvcmU6OmluaXRpYWxpemVPbmNlKCk7CisgICAgICAgIG1fZGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gSW1hZ2VG
cmFtZUdlbmVyYXRvcjo6Y3JlYXRlKGZ1bGxTaXplKCksIG1fZGF0YSwgdHJ1ZSk7CisgICAgICAg
IG1fZ2VuZXJhdG9yLT5zZXRJbWFnZURlY29kZXJGYWN0b3J5Rm9yVGVzdGluZyhNb2NrSW1hZ2VE
ZWNvZGVyRmFjdG9yeTo6Y3JlYXRlKHRoaXMpKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCA9IDA7CisgICAgICAgIG1fZnJhbWVTdGF0dXMgPSBJbWFnZUZyYW1lOjpGcmFtZUVt
cHR5OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAg
ICBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpCisgICAgeworICAgICAgICArK21fZnJhbWVCdWZm
ZXJSZXF1ZXN0Q291bnQ7CisgICAgfQorCisgICAgdmlydHVhbCBJbWFnZUZyYW1lOjpGcmFtZVN0
YXR1cyBmcmFtZVN0YXR1cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9mcmFtZVN0YXR1czsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+
IGNyZWF0ZUNvbXBsZXRlSW1hZ2UoY29uc3QgU2tJU2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IFNrQml0bWFwIGJpdG1hcDsKKyAgICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGJp
dG1hcC5hbGxvY1BpeGVscygpOworICAgICAgICByZXR1cm4gU2NhbGVkSW1hZ2VGcmFnbWVudDo6
Y3JlYXRlKHNpemUsIGJpdG1hcCwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRGcmFtZVN0
YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBzdGF0dXMpICB7IG1fZnJhbWVTdGF0dXMgPSBz
dGF0dXM7IH0KKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBSZWZQdHI8
SW1hZ2VGcmFtZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgaW50IG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQ7CisgICAgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgbV9mcmFtZVN0YXR1czsK
K307CisKK1Bhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBNb2NrSW1hZ2VEZWNvZGVyRmFjdG9yeTo6
Y3JlYXRlKCkKK3sKKyAgICBNb2NrSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gbmV3IE1vY2tJbWFn
ZURlY29kZXIobV90ZXN0KTsKKyAgICBkZWNvZGVyLT5zZXRTaXplKGZ1bGxTaXplKCkud2lkdGgo
KSwgZnVsbFNpemUoKS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGRlY29kZXIpOwor
fQorCitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlSGl0KQoreworICAgIGNv
bnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+aW5zZXJ0QW5kTG9ja0NhY2hlKAorICAgICAgICBtX2dlbmVyYXRvci5nZXQo
KSwgY3JlYXRlQ29tcGxldGVJbWFnZShmdWxsU2l6ZSgpKSk7CisgICAgRVhQRUNUX0VRKGZ1bGxT
aXplKCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6
Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBmdWxsSW1hZ2UpOwor
CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlID0gbV9nZW5lcmF0b3It
PmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9FUShmdWxsSW1hZ2UsIHRl
bXBJbWFnZSk7CisgICAgRVhQRUNUX0VRKGZ1bGxTaXplKCksIHRlbXBJbWFnZS0+c2NhbGVkU2l6
ZSgpKTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1f
Z2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KTsKK30KKworVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBj
YWNoZU1pc3NXaXRoU2NhbGUpCit7CisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogZnVs
bEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2Fj
aGUoCisgICAgICAgIG1fZ2VuZXJhdG9yLmdldCgpLCBjcmVhdGVDb21wbGV0ZUltYWdlKGZ1bGxT
aXplKCkpKTsKKyAgICBFWFBFQ1RfRVEoZnVsbFNpemUoKSwgZnVsbEltYWdlLT5zY2FsZWRTaXpl
KCkpOworICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIGZ1bGxJbWFnZSk7CisKKyAgICAvLyBDYWNoZSBtaXNzIGJlY2F1c2Ug
b2Ygc2NhbGVkIHNpemUgbm90IGZvdW5kLgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IHNjYWxlZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7
CisgICAgRVhQRUNUX05FKGZ1bGxJbWFnZSwgc2NhbGVkSW1hZ2UpOworICAgIEVYUEVDVF9FUShz
Y2FsZWRTaXplKCksIHNjYWxlZEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNjYWxl
ZEltYWdlKTsKKworICAgIC8vIENhY2hlIGhpdC4KKyAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoc2NhbGVkSW1hZ2UsIHRlbXBJbWFnZSk7CisgICAgRVhQRUNUX0VR
KHNjYWxlZFNpemUoKSwgdGVtcEltYWdlLT5zY2FsZWRTaXplKCkpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworfQor
CitURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhEZWNvZGVBbmRT
Y2FsZSkKK3sKKyAgICBzZXRGcmFtZVN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsK
KworICAgIC8vIENhY2hlIG1pc3MuCisgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogc2Nh
bGVkSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VR
KHNjYWxlZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNv
ZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgc2Nh
bGVkSW1hZ2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIGZ1bGxJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgp
KTsKKyAgICBFWFBFQ1RfTkUoc2NhbGVkSW1hZ2UsIGZ1bGxJbWFnZSk7CisgICAgRVhQRUNUX0VR
KGZ1bGxTaXplKCksIGZ1bGxJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKKyAgICBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCBmdWxsSW1h
Z2UpOworCisgICAgLy8gQ2FjaGUgaGl0LgorICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwor
ICAgIEVYUEVDVF9FUShzY2FsZWRJbWFnZSwgdGVtcEltYWdlKTsKKyAgICBFWFBFQ1RfRVEoc2Nh
bGVkU2l6ZSgpLCB0ZW1wSW1hZ2UtPnNjYWxlZFNpemUoKSk7CisgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdl
KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7Cit9CisKKy8v
IFRlc3QgdGhhdCBpbmNvbXBsZXRlIGZyYW1lcyBhcmUgbm90IGNhY2hlZC4KK1RFU1RfRihJbWFn
ZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUpCit7Cisg
ICAgc2V0RnJhbWVTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKKworICAgIGNvbnN0
IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRT
Y2FsZShzY2FsZWRTaXplKCkpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworCisgICAgdGVtcEltYWdlID0gbV9nZW5l
cmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOworICAgIEVYUEVDVF9FUSgyLCBtX2Zy
YW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOworCisgICAgdGVt
cEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CisgICAg
RVhQRUNUX0VRKDMsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5oCmluZGV4IGM5YzBkMDFkNmQ4MzgyMDkyYjA3NGI5NGU0
ZGQ5ZmQ3YWUxYzg2ODMuLjhiNGY0MDM4MjM5YzI5NWRlNDhjOWRlZWQ3ZjM5ZWY4YWQ1OGYwNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9ja0ltYWdlRGVjb2Rlci5o
CkBAIC0zMiw2ICszMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE1vY2tJbWFnZURl
Y29kZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVyQmVpbmdEZXN0
cm95ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyUmVxdWVzdGVkKCkgPSAw
OworICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMoKSA9IDA7
CiB9OwogCiBjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CkBA
IC01NSw5ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90KQogICAgIHsKICAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50OworICAgICAgICBtX2NsaWVudC0+ZnJhbWVCdWZmZXJSZXF1ZXN0ZWQoKTsKIAogICAg
ICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwogICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF0uc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhtX2NsaWVudC0+ZnJhbWVTdGF0dXMo
KSk7CiAgICAgICAgIHJldHVybiAmbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>