<?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>22214</bug_id>
          
          <creation_ts>2008-11-12 14:57:33 -0800</creation_ts>
          <short_desc>Keep dead resources in memory cache in purgeable memory.</short_desc>
          <delta_ts>2008-11-24 19:29:27 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>ggaren</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98524</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-12 14:57:33 -0800</bug_when>
    <thetext>OS X 10.5 has kernel facility for purgable memory that allows marking memory area as less important. Under memory pressure system can steal pages that have been marked purgable for better uses. We should use this mechanism for dead resources in WebCore memory cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98542</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-12 16:06:08 -0800</bug_when>
    <thetext>What buffers, specifically, can we mark as purgable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98543</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-12 16:19:40 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; What buffers, specifically, can we mark as purgable?

Dead encoded data, though it is bit more complicated than just marking any existing buffer.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98577</commentid>
    <comment_count>3</comment_count>
      <attachid>25114</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-12 20:39:13 -0800</bug_when>
    <thetext>Created attachment 25114
first attempt 

This patch uses purgable memory for dead encoded image data greter than 16kb in size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98578</commentid>
    <comment_count>4</comment_count>
      <attachid>25114</attachid>
    <who name="">mitz</who>
    <bug_when>2008-11-12 20:50:24 -0800</bug_when>
    <thetext>Comment on attachment 25114
first attempt 

&gt; +    static PassRefPtr&lt;SharedBuffer&gt; createWithVolatileBufferTakingOwnership(VolatileBuffer* buffer) { return adoptRef(new SharedBuffer(buffer)); }

I think the usual term for &quot;taking ownership&quot; in WebCore is &quot;adopting&quot;. Maybe this can be called createByAdoptingVolatileBuffer().

&gt; +        // call makeNonVolatile() and check the return value before accessing data

I think you renamed it to tryMakeNonVolatile()

&gt; +#if !PLATFORM(DARWIN) || defined(BUILDING_ON_TIGER)
&gt; +    inline VolatileBuffer* VolatileBuffer::create(const char*, unsigned) { return 0; }
&gt; +    inline VolatileBuffer::~VolatileBuffer() { }
&gt; +    inline const char* VolatileBuffer::data() const { return 0; }
&gt; +    inline void VolatileBuffer::setVolatileCategory(Category) { }
&gt; +    inline bool VolatileBuffer::testPurged() { return false; }
&gt; +    inline bool VolatileBuffer::makeVolatile() { return false; }
&gt; +    inline bool VolatileBuffer::makeNonVolatile() { return false; }
&gt; +#endif

Same above.

&gt; + static const unsigned minVolatileBufferSize = 4096; // one page

Is there a Mach constant or function that returns the page size?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98580</commentid>
    <comment_count>5</comment_count>
      <attachid>25115</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-12 21:51:41 -0800</bug_when>
    <thetext>Created attachment 25115
some renaming and cleanups

Some renaming as suggested by bdash and mitz

createWithVolatileBufferTakingOwnership -&gt; adoptVolatileBuffer
VolatileBuffer::Category -&gt; VolatileBuffer::PurgePriority
takeVolatileBuffer -&gt; releaseVolatileBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98629</commentid>
    <comment_count>6</comment_count>
      <attachid>25129</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-13 11:57:44 -0800</bug_when>
    <thetext>Created attachment 25129
some more cleanups

-rename testPurged -&gt; wasPurged
- use size_t
- make VolatileBuffer state private</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99583</commentid>
    <comment_count>7</comment_count>
      <attachid>25331</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-20 20:06:50 -0800</bug_when>
    <thetext>Created attachment 25331
updated patch

- fix a bug where resource would fail to load first time after it had been purged
- some cleanups in Cache.cpp
- better statistics dumps
- make JS and CSS resources purgable too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99696</commentid>
    <comment_count>8</comment_count>
      <attachid>25331</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-21 13:44:32 -0800</bug_when>
    <thetext>Comment on attachment 25331
updated patch

+    if (m_volatileBuffer) {
+        ASSERT(!m_volatileBuffer-&gt;isVolatile());
+        return m_volatileBuffer-&gt;data();
+    }

The ASSERT here is redundant with an ASSERT inside the VolatileBuffer class. You should probably remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99727</commentid>
    <comment_count>9</comment_count>
      <attachid>25331</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-21 16:48:20 -0800</bug_when>
    <thetext>Comment on attachment 25331
updated patch

It&apos;s possible that I&apos;m missing something, but I think it&apos;s a problem that both CachedResource and SharedBuffer keep a pointer to volatile data. This distributes responsibility for some tricky ownership between the SharedBuffer and its client. I&apos;d prefer for SharedBuffer to have complete ownership of, and responsibility for, a volatile backing store. Then, the client can just make calls like &quot;tryMakeVolatile&quot; without worrying about lower-level details.

I think &quot;wasPurged&quot; is probably a better name than &quot;wasVolatileDataPurged&quot;. I&apos;d like to keep the idea of &quot;volatile data&quot; an implementation detail if possible.

The word &quot;purgable&quot; might be better than the word &quot;volatile&quot;, since &quot;purgable&quot; describes the advantage -- why you use this feature -- while &quot;volatile&quot; just sounds scary :).

+bool CachedResource::tryMakeNonVolatile() 
+{ 
+    if (m_data || !m_volatileData)
+        return true;

This test confused me, since m_data and m_volatileData are supposed to be mutually exclusive. Like we discussed on IRC, how about: if (!m_volatileData) { return true; } ASSERT(!m_data);

Or, if SharedBuffer had complete control over the volatile data:

if (!m_data)
    return true;

if (m_data-&gt;isPurgable())
    return true;

return m_data-&gt;makePurgable();

+    if (m_volatileData-&gt;tryMakeNonVolatile())
+        m_data = SharedBuffer::adoptVolatileBuffer(m_volatileData.release());
+    else 
+        m_volatileData.clear();
+    
+    return m_data; 

I think this would be simpler (and more MSVC-friendly) like this:

if (m_volatileData-&gt;tryMakeNonVolatile()) {
    m_data = SharedBuffer::adoptVolatileBuffer(m_volatileData.release());
    return true;
}

m_volatileData.clear();
return false;

+bool CachedResource::tryMakeVolatile() 

Looks like the bool result here is unused. Let&apos;s return void instead, to avoid bitrot.

+    const size_t volatileThreshold = 4 * 4096;

Since this is cross-platform code, it might be worth commenting that 4096 is the page size on Mac OS X.

+SharedBuffer::~SharedBuffer()
+{
+}

Can this be removed?

+        if(doc &amp;&amp; !isPreload)

Missing space after &quot;if&quot;.

+bool CachedResource::tryMakeVolatile() 
+{

Would be helpful to ASSERT(!hasClients()) at the top of this function.

I&apos;m going to say &quot;r+&quot; because I don&apos;t see any serious bugs, but I&apos;d really like you to consider removing the volatile data pointer from CachedResource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99739</commentid>
    <comment_count>10</comment_count>
      <attachid>25369</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-21 18:10:15 -0800</bug_when>
    <thetext>Created attachment 25369
patch that applies cleanly and builds with current tot

for testing, does not contain changes suggested by geoff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99752</commentid>
    <comment_count>11</comment_count>
      <attachid>25371</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-21 19:13:31 -0800</bug_when>
    <thetext>Created attachment 25371
this time with the build file changes too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99762</commentid>
    <comment_count>12</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2008-11-21 22:14:54 -0800</bug_when>
    <thetext>membuster and the PLT look good, although it&apos;s debatable how useful of a test those are in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99872</commentid>
    <comment_count>13</comment_count>
      <attachid>25410</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-23 21:24:56 -0800</bug_when>
    <thetext>Created attachment 25410
updated with Geoff&apos;s comments plus some other fixes

- Implemented naming changes as discussed with Geoff in IRC. VolatileBuffer is renamed to PurgableBuffer and word purgable generally replaces word volatile in the API.
- Kept the buffer ownership scheme (as discussed with Geoff), clarified the API with some comments and by removing purgableBuffer() accessor from SharedBuffer.
- Changed CachedImage to delete m_image (if it is safe) rather than just deleting its decoded data when turning buffer volatile. The Image object would still hold a reference of the old non-purgable data buffer.
- Changed CachedScript to turn the buffer purgable asynchronously instead of synchronously in allClientsRemoved(). This is safer.
- Added more asserts to guarantee consistent state.

&gt; +bool CachedResource::tryMakeVolatile() 
&gt; Looks like the bool result here is unused. Let&apos;s return void instead, to avoid
&gt; bitrot.

I kept the return values as a way of documenting which exits will actually results in volatile buffer. I think it is helpful even though current call sited don&apos;t check the return value.

&gt;+    const size_t volatileThreshold = 4 * 4096;
&gt;
&gt;Since this is cross-platform code, it might be worth commenting that 4096 is
&gt;the page size on Mac OS X.

Added a comment. It is really more like the &quot;page size of the CPUs most likely to run WebKit&quot;, not just Mac.

&gt;+SharedBuffer::~SharedBuffer()
&gt;+{
&gt;+}
&gt;Can this be removed?

It was needed so I can forward declare PugrableBuffer in SharedBuffer header. SharedBuffer is included by half of the WebCore.

&gt;+bool CachedResource::tryMakeVolatile() 
&gt;+{
&gt;Would be helpful to ASSERT(!hasClients()) at the top of this function.

Done.

Requesting re-review since there were some non-trivial changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100109</commentid>
    <comment_count>14</comment_count>
      <attachid>25410</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-24 17:14:22 -0800</bug_when>
    <thetext>Comment on attachment 25410
updated with Geoff&apos;s comments plus some other fixes

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100126</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-24 19:18:37 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.base.exp
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/loader/Cache.cpp
Sending        WebCore/loader/Cache.h
Sending        WebCore/loader/CachedCSSStyleSheet.cpp
Sending        WebCore/loader/CachedCSSStyleSheet.h
Sending        WebCore/loader/CachedImage.cpp
Sending        WebCore/loader/CachedResource.cpp
Sending        WebCore/loader/CachedResource.h
Sending        WebCore/loader/CachedScript.cpp
Adding         WebCore/platform/PurgeableBuffer.h
Sending        WebCore/platform/SharedBuffer.cpp
Sending        WebCore/platform/SharedBuffer.h
Sending        WebCore/platform/cf/SharedBufferCF.cpp
Adding         WebCore/platform/mac/PurgeableBufferMac.cpp
Transmitting file data .................
Committed revision 38741.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100127</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-24 19:29:27 -0800</bug_when>
    <thetext>Spelling was changed to &quot;purgeable&quot; since http://kxr.bitcanvas.net/kxr/source/osfmk/vm/vm_purgeable_internal.h?v=xnu-1228 says:

026  * It is believed that the correct spelling is 
027  * { &apos;p&apos;, &apos;u&apos;, &apos;r&apos;, &apos;g&apos;, &apos;e&apos;, &apos;a&apos;, &apos;b&apos;, &apos;l&apos;, &apos;e&apos; }.
028  * However, there is one published API that likes to spell it without the
029  * first &apos;e&apos;, vm_purgable_control().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25114</attachid>
            <date>2008-11-12 20:39:13 -0800</date>
            <delta_ts>2008-11-12 21:51:58 -0800</delta_ts>
            <desc>first attempt </desc>
            <filename>purgable-cache-4.patch</filename>
            <type>text/plain</type>
            <size>32360</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODM1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMDgtMTEtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtl
ZXAgZGVhZCByZXNvdXJjcyBpbiBtZW1vcnkgY2FjaGUgaW4gcHVyZ2FibGUgbWVtb3J5LgorICAg
ICAgICAKKyAgICAgICAgT1MgWCAxMC41IGhhcyBrZXJuZWwgZmFjaWxpdHkgZm9yIHB1cmdhYmxl
IG1lbW9yeSB0aGF0IGFsbG93cyBtYXJraW5nIG1lbW9yeQorICAgICAgICBhcmVhIGFzIGxlc3Mg
aW1wb3J0YW50LiBVbmRlciBtZW1vcnkgcHJlc3N1cmUgc3lzdGVtIGNhbiBzdGVhbCBwYWdlcyB0
aGF0IGhhdmUKKyAgICAgICAgYmVlbiBtYXJrZWQgcHVyZ2FibGUgZm9yIGJldHRlciB1c2VzICho
b3BlZnVsbHkpLgorICAgICAgICAKKyAgICAgICAgT25seSByZXNvdXJjZXMgPiAxNiBrYiB3aWxs
IGJlIG1vdmVkIHRvIHB1cmdhYmxlIG1lbW9yeS4gSW1hZ2UgZGF0YSBvbmx5IGZvciBub3cuCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpnZXRTdGF0
aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkdW1wU3RhdHMpOgorICAgICAgICAq
IGxvYWRlci9DYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OlR5cGVTdGF0aXN0aWM6
OlR5cGVTdGF0aXN0aWMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmRlYWREZWNvZGVkRGF0
YURlbGV0aW9uSW50ZXJ2YWwpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmly
ZWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2U6OmlzVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OnRlc3RQdXJnZWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6On5TaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6dGFrZVZvbGF0aWxl
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aFZvbGF0aWxlQnVmZmVyVGFraW5nT3duZXJz
aGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6dm9sYXRpbGVCdWZmZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL1ZvbGF0aWxlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Vm9sYXRpbGVCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGls
ZUJ1ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWb2xhdGlsZUJ1ZmZlcjo6dm9sYXRpbGVDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpW
b2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0
aWxlQnVmZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpzZXRW
b2xhdGlsZUNhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp0ZXN0
UHVyZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtlVm9sYXRpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Om1ha2VOb25Wb2xhdGlsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9Wb2xhdGlsZUJ1ZmZlck1hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Vm9sYXRpbGVCdWZmZXI6OlZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0
aWxlQnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVC
dWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6bWFrZVZv
bGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp0cnlNYWtlTm9uVm9s
YXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnRlc3RQdXJnZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFZvbGF0aWxlQ2F0ZWdvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OmRhdGEpOgorCiAyMDA4LTExLTEyICBB
bHAgVG9rZXIgIDxhbHBAbnVhbnRpLmNvbT4KIAogICAgICAgICBhdXRvdG9vbHMgYnVpbGQgc3lz
dGVtIGZpeC11cCBvbmx5LiBBZGQgRmxvYXRRdWFkLmggdG8gdGhlIHNvdXJjZQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cAkocmV2aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1Myw2ICsyNTMsNyBAQCBfX1pON1dlYkNvcmUxMkljb25EYXRhYmFzZTlz
ZXRDbGllbnRFUE5TCiBfX1pON1dlYkNvcmUxMlNjaGVkdWxlUGFpckMxRVA5TlNSdW5Mb29wUEsx
MF9fQ0ZTdHJpbmcKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTB3cmFwTlNEYXRhRVA2TlNE
YXRhCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRhRXYKK19fWk43V2Vi
Q29yZTEyU2hhcmVkQnVmZmVyRDFFdgogX19aTjdXZWJDb3JlMTJUZXh0RW5jb2RpbmdDMUVSS05T
XzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvcjExcmFuZ2VMZW5ndGhFUEtOU181
UmFuZ2VFYgogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IyNnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoRVBOU183RWxlbWVudEVpaWIKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODIwOSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MjMxLDYgKzQyMzEsOCBA
QAogCQlFNDQ2MTQzQzBDRDY4OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JG
QjZFMDAwQUYyRUNFIC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEw
Q0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5k
ZXJWaWRlby5jcHAgKi87IH07CiAJCUU0NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJW
aWRlby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRC
NDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0NEQ3NjEz
MEVDQjc4QzQwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0RDc2MTIwRUNCNzhDNDAwNzYwRjE0IC8qIFZv
bGF0aWxlQnVmZmVyLmggKi87IH07CisJCUU0NEQ3NjE1MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xh
dGlsZUJ1ZmZlck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDRENzYxNDBFQ0I3OEU5MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXJNYWMuY3Bw
ICovOyB9OwogCQlFNDdCNEJFODBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0I0
QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0N0I0QkU5MEU3MTI0MTYw
MDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQgLyogQ2Fj
aGVkUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OwogCQlFNDk2MjZDMjBEODBEOTQ4MDBFMzQwNUMg
LyogUHJlbG9hZFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRENEFCRTAwRDc1NDJGMDAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVyLmNw
cCAqLzsgfTsKQEAgLTg4NDksNiArODg1MSw4IEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZBREE3
NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNN
ZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENENjgy
NjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTQ0RDc2MTIwRUNCNzhDNDAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZvbGF0aWxlQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEQ3NjE0MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xh
dGlsZUJ1ZmZlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
b2xhdGlsZUJ1ZmZlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NzIw
NTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QjRCRTcwRTcx
MjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjEsNiArOTYyNSw3IEBACiAJCQkJODRCMkIyNEYwNTZC
RjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLywKIAkJCQk2NTgyQTE1NTA5
OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1hYy5jcHAgKi8sCiAJCQkJNTFERjZEN0YwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tICovLAorCQkJCUU0NEQ3NjE0MEVDQjc4RTkw
MDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgKi8sCiAJCQkJODRCMkIxRjcwNTZCRUYz
QTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLywKIAkJCQk4NEIyQjFGODA1NkJF
RjNBMDBEMkI3NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tICovLAogCQkJCTkzNEQ5QkE2MEI4
QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAqLywKQEAgLTEzMzcxLDYg
KzEzMzc2LDcgQEAKIAkJCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICov
LAogCQkJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovLAogCQkJCTE0MTlE
MkM0MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hhcmVkLmggKi8sCisJCQkJRTQ0RDc2MTIwRUNC
NzhDNDAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyLmggKi8sCiAJCQkJOTM4MEY0NzEwOUExMUFC
NDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgKi8sCiAJCQkJOTM4MEY0NzIwOUExMUFCNDAwMUZEQjM0
IC8qIFdpZGdldC5oICovLAogCQkJKTsKQEAgLTE2MjA2LDYgKzE2MjEyLDcgQEAKIAkJCQkwRkM3
MDUyMTBFQjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDRENzYxMzBFQ0I3OEM0MDA3
NjBGMTQgLyogVm9sYXRpbGVCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTgxMTQsNiArMTgx
MjEsNyBAQAogCQkJCUUxQzM2Q0JEMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTFDOURCMDBFQjM2OTk1MDBFNDA5REIgLyogU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUE2NDNGRDBFQzA5
N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFNDRENzYxNTBFQ0I3OEU5MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAzODIwOSkKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCwxMSBAQCBDYWNo
ZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZShECiAgICAgICAgICAgICAgICAgRnJh
bWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2MtPmZyYW1lKCksIHJlc291cmNlLT51
cmwoKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorICAgICAgICBpZiAoIXJl
c291cmNlLT50cnlNYWtlTm9uVm9sYXRpbGUoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFyZXNv
dXJjZS0+aGFzQ2xpZW50cygpKTsKKyAgICAgICAgICAgIGV2aWN0KHJlc291cmNlKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKEZy
YW1lTG9hZGVyOjpyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSAmJiAhRnJhbWVMb2FkZXI6OmNhbkxv
YWQodXJsLCBTdHJpbmcoKSwgZG9jTG9hZGVyLT5kb2MoKSkpIHsKICAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOwpAQCAtMzExLDYgKzMxNiwyNSBAQCB2b2lkIENh
Y2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQogCiAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAv
LyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4u
CiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7CisgICAgCisgICAgaWYgKCFt
X2luUHJ1bmVEZWFkUmVzb3VyY2VzKSB7CisgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFueSBw
dXJnZWQgcmVzb3VyY2VzIHdlIGNhbiBldmljdC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBjdXJyZW50ID0gbV9h
bGxSZXNvdXJjZXNbaV0ubV90YWlsOworICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAg
ICAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQtPm1fcHJldkluQWxs
UmVzb3VyY2VzTGlzdDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+dGVzdFB1cmdlZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC0+aGFzQ2xpZW50cygpKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LT5pc1ByZWxvYWRlZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXZpY3QoY3VycmVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSBwcmV2OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgYm9vbCBjYW5TaHJpbmtMUlVMaXN0cyA9
IHRydWU7CiAgICAgbV9pblBydW5lRGVhZFJlc291cmNlcyA9IHRydWU7CiAgICAgZm9yIChpbnQg
aSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewpAQCAtNjM5LDYgKzY2Myw4IEBAIENhY2hlOjpT
dGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBzdGF0cy5p
bWFnZXMuc2l6ZSArPSBvLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmxp
dmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAg
ICAgc3RhdHMuaW1hZ2VzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAg
ICAgICAgICAgaWYgKG8tPmlzVm9sYXRpbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgKihvLT50
ZXN0UHVyZ2VkKCkgPyAmc3RhdHMuaW1hZ2VzLnB1cmdlZFNpemUgOiAmc3RhdHMuaW1hZ2VzLnB1
cmdhYmxlU2l6ZSkgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgpAQCAtNjQ2LDYgKzY3
Miw4IEBAIENhY2hlOjpTdGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICAgICAg
ICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5zaXplICs9IG8tPnNpemUoKTsKICAgICAgICAg
ICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkg
PyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmRl
Y29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKG8tPmlz
Vm9sYXRpbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgKihvLT50ZXN0UHVyZ2VkKCkgPyAmc3Rh
dHMuY3NzU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSA6ICZzdGF0cy5jc3NTdHlsZVNoZWV0cy5wdXJn
YWJsZVNpemUpICs9IG8tPmVuY29kZWRTaXplKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKQEAgLTY1Myw2ICs2ODEs
OCBAQCBDYWNoZTo6U3RhdGlzdGljcyBDYWNoZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgICAgICAg
ICAgICAgc3RhdHMuc2NyaXB0cy5zaXplICs9IG8tPnNpemUoKTsKICAgICAgICAgICAgICAgICBz
dGF0cy5zY3JpcHRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7
CiAgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVk
U2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChvLT5pc1ZvbGF0aWxlKCkpCisgICAgICAgICAg
ICAgICAgICAgICooby0+dGVzdFB1cmdlZCgpID8gJnN0YXRzLnNjcmlwdHMucHVyZ2VkU2l6ZSA6
ICZzdGF0cy5zY3JpcHRzLnB1cmdhYmxlU2l6ZSkgKz0gby0+ZW5jb2RlZFNpemUoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CkBAIC02NjAsNiArNjkwLDggQEAgQ2FjaGU6OlN0
YXRpc3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIHN0YXRzLnhz
bFN0eWxlU2hlZXRzLnNpemUgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRzLnhz
bFN0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7
CiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuZGVjb2RlZFNpemUgKz0gby0+
ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAoby0+aXNWb2xhdGlsZSgpKQorICAg
ICAgICAgICAgICAgICAgICAqKG8tPnRlc3RQdXJnZWQoKSA/ICZzdGF0cy54c2xTdHlsZVNoZWV0
cy5wdXJnZWRTaXplIDogJnN0YXRzLnhzbFN0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSkgKz0gby0+
ZW5jb2RlZFNpemUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgpAQCAtNjY3LDYgKzY5OSw4IEBA
IENhY2hlOjpTdGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAg
ICBzdGF0cy5mb250cy5zaXplICs9IG8tPnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0cy5m
b250cy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAg
ICAgICAgICAgIHN0YXRzLmZvbnRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG8tPmlzVm9sYXRpbGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
KihvLT50ZXN0UHVyZ2VkKCkgPyAmc3RhdHMuZm9udHMucHVyZ2VkU2l6ZSA6ICZzdGF0cy5mb250
cy5wdXJnYWJsZVNpemUpICs9IG8tPmVuY29kZWRTaXplKCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAjaWYgRU5BQkxFKFhCTCkKICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhC
TDoKQEAgLTY3NCw2ICs3MDgsOCBAQCBDYWNoZTo6U3RhdGlzdGljcyBDYWNoZTo6Z2V0U3RhdGlz
dGljcygpCiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5zaXplICs9IG8tPnNpemUoKTsK
ICAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMo
KSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5kZWNvZGVk
U2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChvLT5pc1ZvbGF0
aWxlKCkpCisgICAgICAgICAgICAgICAgICAgICooby0+dGVzdFB1cmdlZCgpID8gJnN0YXRzLnhi
bERvY3MucHVyZ2VkU2l6ZSA6ICZzdGF0cy54YmxEb2NzLnB1cmdhYmxlU2l6ZSkgKz0gby0+ZW5j
b2RlZFNpemUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICAgICAg
ZGVmYXVsdDoKQEAgLTcwMiwxNiArNzM4LDE2IEBAIHZvaWQgQ2FjaGU6OnNldERpc2FibGVkKGJv
b2wgZGlzYWJsZWQpCiB2b2lkIENhY2hlOjpkdW1wU3RhdHMoKQogewogICAgIFN0YXRpc3RpY3Mg
cyA9IGdldFN0YXRpc3RpY3MoKTsKLSAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFz
ICUtMTFzXG4iLCAiIiwgIkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUi
KTsKLSAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG4iLCAiLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0iKTsKLSAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJJ
bWFnZXMiLCBzLmltYWdlcy5jb3VudCwgcy5pbWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUs
IHMuaW1hZ2VzLmRlY29kZWRTaXplKTsKLSAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFk
ICUxMWRcbiIsICJDU1MiLCBzLmNzc1N0eWxlU2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRz
LnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2Rl
ZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMg
JS0xMXNcbiIsICIiLCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIs
ICJQdXJnYWJsZVNpemUiLCAiUHVyZ2VkU2l6ZSIpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMg
JS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUx
MWQgJTExZCAlMTFkICUxMWRcbiIsICJJbWFnZXMiLCBzLmltYWdlcy5jb3VudCwgcy5pbWFnZXMu
c2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMuaW1hZ2VzLmRlY29kZWRTaXplLCBzLmltYWdlcy5w
dXJnYWJsZVNpemUsIHMuaW1hZ2VzLnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTEx
ZCAlMTFkICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJDU1MiLCBzLmNzc1N0eWxlU2hlZXRzLmNv
dW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2ZVNpemUsIHMu
Y3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUsIHMuY3NzU3R5bGVTaGVldHMucHVyZ2FibGVTaXpl
LCBzLmNzc1N0eWxlU2hlZXRzLnB1cmdlZFNpemUpOwogI2lmIEVOQUJMRShYU0xUKQotICAgIHBy
aW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVTaGVl
dHMuY291bnQsIHMueHNsU3R5bGVTaGVldHMuc2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZlU2l6
ZSwgcy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFk
ICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVTaGVldHMuY291
bnQsIHMueHNsU3R5bGVTaGVldHMuc2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy54
c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUs
IHMueHNsU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSk7CiAjZW5kaWYKLSAgICBwcmludGYoIiUtMTFz
ICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJKYXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNvdW50LCBz
LnNjcmlwdHMuc2l6ZSwgcy5zY3JpcHRzLmxpdmVTaXplLCBzLnNjcmlwdHMuZGVjb2RlZFNpemUp
OwotICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkZvbnRzIiwgcy5m
b250cy5jb3VudCwgcy5mb250cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29k
ZWRTaXplKTsKLSAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG5cbiIs
ICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLSIpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTEx
ZCAlMTFkICUxMWRcbiIsICJKYXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNvdW50LCBzLnNjcmlwdHMu
c2l6ZSwgcy5zY3JpcHRzLmxpdmVTaXplLCBzLnNjcmlwdHMuZGVjb2RlZFNpemUsIHMuc2NyaXB0
cy5wdXJnYWJsZVNpemUsIHMuc2NyaXB0cy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFz
ICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50
LCBzLmZvbnRzLnNpemUsIHMuZm9udHMubGl2ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUsIHMu
Zm9udHMucHVyZ2FibGVTaXplLCBzLmZvbnRzLnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0x
MXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcblxuIiwgIi0tLS0tLS0tLS0t
IiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7CiB9CiAKIHZvaWQgQ2FjaGU6OmR1
bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdApJbmRleDogV2ViQ29yZS9sb2FkZXIv
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCShyZXZpc2lvbiAz
ODIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcg
Kzc0LDkgQEAgcHVibGljOgogICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaW50IGxpdmVTaXpl
OwogICAgICAgICBpbnQgZGVjb2RlZFNpemU7Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMoKSA6IGNv
dW50KDApLCBzaXplKDApLCBsaXZlU2l6ZSgwKSwgZGVjb2RlZFNpemUoMCkgeyB9CisgICAgICAg
IGludCBwdXJnYWJsZVNpemU7CisgICAgICAgIGludCBwdXJnZWRTaXplOworICAgICAgICBUeXBl
U3RhdGlzdGljKCkgOiBjb3VudCgwKSwgc2l6ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXpl
KDApLCBwdXJnYWJsZVNpemUoMCksIHB1cmdlZFNpemUoMCkgeyB9CiAgICAgfTsKICAgICAKICAg
ICBzdHJ1Y3QgU3RhdGlzdGljcyB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lv
biAzODIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsNyBAQCB2b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9u
VGltCiB7CiAgICAgQVNTRVJUKCFoYXNDbGllbnRzKCkpOwogICAgIGRlc3Ryb3lEZWNvZGVkRGF0
YSgpOworICAgIHRyeU1ha2VWb2xhdGlsZSgpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpsb2Fk
KERvY0xvYWRlciogZG9jTG9hZGVyKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAko
cmV2aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNsdWRlICJWb2xhdGls
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMxNSw0ICszMTYsNTUgQEAgYm9vbCBDYWNoZWRSZXNv
dXJjZTo6bXVzdFJldmFsaWRhdGUoQ2FjaAogICAgIHJldHVybiBpc0V4cGlyZWQoKSB8fCBjYWNo
ZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRhaW5zKCJuby1jYWNoZSIpOwogfQogCitib29sIENhY2hl
ZFJlc291cmNlOjp0cnlNYWtlTm9uVm9sYXRpbGUoKSAKK3sgCisgICAgaWYgKG1fZGF0YSB8fCAh
bV92b2xhdGlsZURhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3ZvbGF0aWxl
RGF0YS0+dHJ5TWFrZU5vblZvbGF0aWxlKCkpCisgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlV2l0aFZvbGF0aWxlQnVmZmVyVGFraW5nT3duZXJzaGlwKG1fdm9sYXRpbGVEYXRh
LnJlbGVhc2UoKSk7CisgICAgZWxzZSAKKyAgICAgICAgbV92b2xhdGlsZURhdGEuY2xlYXIoKTsK
KyAgICAKKyAgICByZXR1cm4gbV9kYXRhOyAKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6dHJ5
TWFrZVZvbGF0aWxlKCkgCit7CisgICAgaWYgKG1fdm9sYXRpbGVEYXRhKSB7CisgICAgICAgIEFT
U0VSVCghbV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghbV9k
YXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3QgdW5zaWduZWQgdm9s
YXRpbGVUaHJlc2hvbGQgPSA0ICogNDA5NjsKKyAgICBpZiAobV9lbmNvZGVkU2l6ZSA8IHZvbGF0
aWxlVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gQ2FuJ3Qg
bWFrZSBidWZmZXIgdm9sYXRpbGUgaWYgaXQgaGFzIHJlZnMgb3RoZW4gdGhhbiB0aGlzLgorICAg
IGlmIChtX2RhdGEtPnZvbGF0aWxlQnVmZmVyKCkgJiYgIW1fZGF0YS0+aGFzT25lUmVmKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3ZvbGF0aWxlRGF0YS5zZXQobV9kYXRh
LT50YWtlVm9sYXRpbGVCdWZmZXIoKSk7CisgICAgaWYgKCFtX3ZvbGF0aWxlRGF0YSkgeworICAg
ICAgICBtX3ZvbGF0aWxlRGF0YS5zZXQoVm9sYXRpbGVCdWZmZXI6OmNyZWF0ZShtX2RhdGEtPmRh
dGEoKSwgbV9kYXRhLT5zaXplKCkpKTsKKyAgICAgICAgaWYgKCFtX3ZvbGF0aWxlRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV92b2xhdGlsZURhdGEt
Pm1ha2VWb2xhdGlsZSgpOworICAgIG1fZGF0YS5jbGVhcigpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIENhY2hlZFJlc291cmNlOjppc1ZvbGF0aWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV92b2xhdGlsZURhdGEgJiYgbV92b2xhdGlsZURhdGEtPnN0YXRlKCkgIT0gVm9sYXRpbGVC
dWZmZXI6Ok5vblZvbGF0aWxlOworfQorCitib29sIENhY2hlZFJlc291cmNlOjp0ZXN0UHVyZ2Vk
KCkKK3sKKyAgICByZXR1cm4gbV92b2xhdGlsZURhdGEgJiYgbV92b2xhdGlsZURhdGEtPnRlc3RQ
dXJnZWQoKTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAz
ODIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8dGltZS5o
PgogCkBAIC0zOSw2ICs0MCw3IEBAIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlOwogY2xhc3MgRG9jTG9hZGVyOwogY2xhc3MgUmVxdWVz
dDsKK2NsYXNzIFZvbGF0aWxlQnVmZmVyOwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBp
biB0aGUgY2FjaGUuIENsYXNzZXMgd2hvIHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBk
ZXJpdmUKIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQsIHRvIGdldCB0aGUgZnVuY3Rpb24g
Y2FsbHMgaW4gY2FzZSB0aGUgcmVxdWVzdGVkIGRhdGEgaGFzIGFycml2ZWQuCkBAIC0xNjQsMTEg
KzE2NiwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NhY2hlVmFsaWRhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQogICAgIENhY2hlZFJlc291cmNlKiByZXNv
dXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7
IH0KICAgICAKKyAgICBib29sIGlzVm9sYXRpbGUoKSBjb25zdDsKKyAgICBib29sIHRlc3RQdXJn
ZWQoKTsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVk
KTsKICAgICB2b2lkIHNldERlY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZEFjY2Vz
c0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApOwogCisgICAgYm9vbCB0cnlNYWtlVm9sYXRp
bGUoKTsKKyAgICBib29sIHRyeU1ha2VOb25Wb2xhdGlsZSgpOworICAgIAogICAgIEhhc2hDb3Vu
dGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGllbnRzOwogCiAgICAgU3RyaW5nIG1f
dXJsOwpAQCAtMTc3LDYgKzE4NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlc291cmNlUmVzcG9u
c2UgbV9yZXNwb25zZTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgT3du
UHRyPFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxlRGF0YTsKIAogICAgIFR5cGUgbV90eXBlOwog
ICAgIFN0YXR1cyBtX3N0YXR1czsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDM4MjA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKQEAgLTQxLDYg
KzQzLDE2IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmUKIHsKICAg
ICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CiB9CisgICAgCitTaGFyZWRCdWZmZXI6OlNo
YXJlZEJ1ZmZlcihWb2xhdGlsZUJ1ZmZlciogdm9sYXRpbGVCdWZmZXIpCit7CisgICAgQVNTRVJU
KHZvbGF0aWxlQnVmZmVyLT5zdGF0ZSgpID09IFZvbGF0aWxlQnVmZmVyOjpOb25Wb2xhdGlsZSk7
CisgICAgbV92b2xhdGlsZUJ1ZmZlci5zZXQodm9sYXRpbGVCdWZmZXIpOworfQorICAgIAorU2hh
cmVkQnVmZmVyOjp+U2hhcmVkQnVmZmVyKCkKK3sKK30KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiB7CkBA
IC01NCw2ICs2Niw5IEBAIHVuc2lnbmVkIFNoYXJlZEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiAgICAg
aWYgKGhhc1BsYXRmb3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRhU2l6ZSgp
OwogICAgIAorICAgIGlmIChtX3ZvbGF0aWxlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV92b2xh
dGlsZUJ1ZmZlci0+c2l6ZSgpOworICAgIAogICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CiB9
CiAKQEAgLTYyLDExICs3NywxOCBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBj
b25zdAogICAgIGlmIChoYXNQbGF0Zm9ybURhdGEoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
RGF0YSgpOwogICAgIAorICAgIGlmIChtX3ZvbGF0aWxlQnVmZmVyKSB7CisgICAgICAgIEFTU0VS
VChtX3ZvbGF0aWxlQnVmZmVyLT5zdGF0ZSgpID09IFZvbGF0aWxlQnVmZmVyOjpOb25Wb2xhdGls
ZSk7CisgICAgICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLT5kYXRhKCk7CisgICAgfQorICAg
IAogICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CiB9CiAKIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKKyAgICBBU1NFUlQoIW1fdm9sYXRp
bGVCdWZmZXIpOworCiAgICAgbWF5YmVUcmFuc2ZlclBsYXRmb3JtRGF0YSgpOwogICAgIAogICAg
IG1fYnVmZmVyLmFwcGVuZChkYXRhLCBsZW4pOwpAQCAtNzcsMTMgKzk5LDE4IEBAIHZvaWQgU2hh
cmVkQnVmZmVyOjpjbGVhcigpCiAgICAgY2xlYXJQbGF0Zm9ybURhdGEoKTsKICAgICAKICAgICBt
X2J1ZmZlci5jbGVhcigpOworICAgIG1fdm9sYXRpbGVCdWZmZXIuY2xlYXIoKTsKIH0KIAogUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y29weSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKTsKIH0KLQorICAgIAor
Vm9sYXRpbGVCdWZmZXIqIFNoYXJlZEJ1ZmZlcjo6dGFrZVZvbGF0aWxlQnVmZmVyKCkKK3sKKyAg
ICByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci5yZWxlYXNlKCk7Cit9CiAKICNpZiAhUExBVEZPUk0o
Q0YpCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMzgyMDkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0
NCw4IEBAIGNsYXNzIE5TRGF0YTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitjbGFzcyBWb2xhdGlsZUJ1ZmZlcjsKIAogY2xhc3MgU2hhcmVkQnVmZmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CkBAIC01Miw5ICs1NCwxMyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdW5z
aWduZWQgY2hhciogYywgaW50IGkpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIo
YywgaSkpOyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVdp
dGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICAKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVdpdGhWb2xhdGlsZUJ1ZmZlclRha2lu
Z093bmVyc2hpcChWb2xhdGlsZUJ1ZmZlciogYnVmZmVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
U2hhcmVkQnVmZmVyKGJ1ZmZlcikpOyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGFkb3B0VmVjdG9yKFZlY3RvcjxjaGFyPiYgdmVjdG9yKTsKICAgICAKKyAgICB+U2hh
cmVkQnVmZmVyKCk7CisgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TRGF0YSAqY3JlYXRl
TlNEYXRhKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB3cmFwTlNEYXRh
KE5TRGF0YSAqZGF0YSk7CkBAIC02Niw2ICs3Miw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFy
KiBkYXRhKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiAmYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KKyAgICBWb2xhdGlsZUJ1
ZmZlciogdm9sYXRpbGVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLmdl
dCgpOyB9CisgICAgVm9sYXRpbGVCdWZmZXIqIHRha2VWb2xhdGlsZUJ1ZmZlcigpOwogCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KIApAQCAtODAsMTIg
Kzg4LDE0IEBAIHByaXZhdGU6CiAgICAgU2hhcmVkQnVmZmVyKCk7CiAgICAgU2hhcmVkQnVmZmVy
KGNvbnN0IGNoYXIqLCBpbnQpOwogICAgIFNoYXJlZEJ1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFy
KiwgaW50KTsKKyAgICBTaGFyZWRCdWZmZXIoVm9sYXRpbGVCdWZmZXIqKTsKICAgICAKICAgICB2
b2lkIGNsZWFyUGxhdGZvcm1EYXRhKCk7CiAgICAgdm9pZCBtYXliZVRyYW5zZmVyUGxhdGZvcm1E
YXRhKCk7CiAgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGEoKSBjb25zdDsKICAgICAKICAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI7CisgICAgT3duUHRyPFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxl
QnVmZmVyOwogI2lmIFBMQVRGT1JNKENGKQogICAgIFNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYpOwog
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fY2ZEYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9Wb2xhdGlsZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRp
bGVCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZm
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZvbGF0aWxlQnVmZmVyX2gKKyNkZWZp
bmUgVm9sYXRpbGVCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xh
c3MgVm9sYXRpbGVCdWZmZXIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgVm9sYXRpbGVCdWZmZXIqIGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBz
aXplKTsKKyAgICAgICAgc3RhdGljIFZvbGF0aWxlQnVmZmVyKiBjcmVhdGUoY29uc3QgVmVjdG9y
PGNoYXI+JiB2KSB7IHJldHVybiBjcmVhdGUodi5kYXRhKCksIHYuc2l6ZSgpKTsgfQorICAgICAg
ICAKKyAgICAgICAgflZvbGF0aWxlQnVmZmVyKCk7CisKKyAgICAgICAgLy8gY2FsbCBtYWtlTm9u
Vm9sYXRpbGUoKSBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWZvcmUgYWNjZXNzaW5nIGRh
dGEKKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIAorICAgICAgICBlbnVtIFN0
YXRlIHsgTm9uVm9sYXRpbGUsIFZvbGF0aWxlLCBQdXJnZWQgfTsKKyAgICAgICAgU3RhdGUgc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgICAgIAorICAgICAgICBlbnVtIENh
dGVnb3J5IHsgUHVyZ2VMYXN0LCBQdXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZhdWx0
ID0gUHVyZ2VNaWRkbGUgfTsKKyAgICAgICAgQ2F0ZWdvcnkgdm9sYXRpbGVDYXRlZ29yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnk7IH0KKyAgICAgICAgdm9pZCBzZXRWb2xhdGlsZUNhdGVn
b3J5KENhdGVnb3J5IGNhdGVnb3J5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdGVzdFB1cmdl
ZCgpOworCisgICAgICAgIHZvaWQgbWFrZVZvbGF0aWxlKCk7CisgICAgICAgIGJvb2wgdHJ5TWFr
ZU5vblZvbGF0aWxlKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFZvbGF0aWxl
QnVmZmVyKGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpOworICAgIAorICAgICAgICBjaGFyKiBt
X2RhdGE7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgQ2F0ZWdvcnkgbV9jYXRl
Z29yeTsKKyAgICAgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICB9OworCisjaWYgIVBMQVRGT1JNKERB
UldJTikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICBpbmxpbmUgVm9sYXRpbGVC
dWZmZXIqIFZvbGF0aWxlQnVmZmVyOjpjcmVhdGUoY29uc3QgY2hhciosIHVuc2lnbmVkKSB7IHJl
dHVybiAwOyB9CisgICAgaW5saW5lIFZvbGF0aWxlQnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIoKSB7
IH0KKyAgICBpbmxpbmUgY29uc3QgY2hhciogVm9sYXRpbGVCdWZmZXI6OmRhdGEoKSBjb25zdCB7
IHJldHVybiAwOyB9CisgICAgaW5saW5lIHZvaWQgVm9sYXRpbGVCdWZmZXI6OnNldFZvbGF0aWxl
Q2F0ZWdvcnkoQ2F0ZWdvcnkpIHsgfQorICAgIGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVyOjp0
ZXN0UHVyZ2VkKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbmxpbmUgYm9vbCBWb2xhdGlsZUJ1
ZmZlcjo6bWFrZVZvbGF0aWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbmxpbmUgYm9vbCBW
b2xhdGlsZUJ1ZmZlcjo6bWFrZU5vblZvbGF0aWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZgorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVm
ZmVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVy
Q0YuY3BwCShyZXZpc2lvbiAzODIwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVm
ZmVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1
ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKENGRGF0YVJlZiBjZkRhdGEpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Wb2xhdGls
ZUJ1ZmZlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRp
bGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9s
YXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCisjaWZuZGVmIEJVSUxESU5HX09O
X1RJR0VSCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluVm9sYXRpbGVCdWZmZXJTaXplID0gNDA5NjsgLy8gb25lIHBhZ2UKKyAgICAKK1ZvbGF0aWxl
QnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcihjaGFyKiBkYXRhLCB1bnNpZ25lZCBzaXplKQorICAgIDog
bV9kYXRhKGRhdGEpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fY2F0ZWdvcnkoUHVyZ2VE
ZWZhdWx0KQorICAgICwgbV9zdGF0ZShOb25Wb2xhdGlsZSkKK3sKK30KKyAgICAKK1ZvbGF0aWxl
QnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIoKQoreworICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNr
X3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KG1fZGF0YSksIG1fc2l6ZSk7
Cit9CisKK1ZvbGF0aWxlQnVmZmVyKiBWb2xhdGlsZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYgKHNpemUgPCBtaW5Wb2xhdGlsZUJ1ZmZl
clNpemUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHZtX2FkZHJlc3NfdCBidWZmZXIg
PSAwOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fYWxsb2NhdGUobWFjaF90YXNrX3NlbGYo
KSwgJmJ1ZmZlciwgc2l6ZSwgVk1fRkxBR1NfUFVSR0FCTEUgfCBWTV9GTEFHU19BTllXSEVSRSk7
CisKKyAgICBBU1NFUlQocmV0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgaWYgKHJldCAhPSBLRVJO
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0ID0gdm1fY29weShtYWNoX3Rh
c2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oZGF0YSksIHNpemUsIGJ1
ZmZlcik7CisKKyAgICBBU1NFUlQocmV0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgaWYgKHJldCAh
PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgdm1fZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBidWZmZXIsIHNpemUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4g
bmV3IFZvbGF0aWxlQnVmZmVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHNpemUp
OworfQorCit2b2lkIFZvbGF0aWxlQnVmZmVyOjptYWtlVm9sYXRpbGUoKQoreyAgIAorICAgIGlm
IChtX3N0YXRlICE9IE5vblZvbGF0aWxlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGludCB2b2xhdGlsZUdyb3VwOworICAgIGlmIChtX2NhdGVnb3J5ID09IFB1cmdlRmlyc3QpCisg
ICAgICAgIHZvbGF0aWxlR3JvdXAgPSBWTV9WT0xBVElMRV9HUk9VUF8wOworICAgIGVsc2UgaWYg
KG1fY2F0ZWdvcnkgPT0gUHVyZ2VNaWRkbGUpCisgICAgICAgIHZvbGF0aWxlR3JvdXAgPSBWTV9W
T0xBVElMRV9HUk9VUF8zOworICAgIGVsc2UKKyAgICAgICAgdm9sYXRpbGVHcm91cCA9IFZNX1ZP
TEFUSUxFX0dST1VQXzc7CisgICAgCisgICAgaW50IHN0YXRlID0gVk1fUFVSR0FCTEVfVk9MQVRJ
TEUgfCB2b2xhdGlsZUdyb3VwOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVf
Y29udHJvbChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
bV9kYXRhKSwgVk1fUFVSR0FCTEVfU0VUX1NUQVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAh
PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgLy8gSXMgdGhpcyBjb3JyZWN0PworICAgICAgICBt
X3N0YXRlID0gUHVyZ2VkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZSA9
IFZvbGF0aWxlOworICAgIHJldHVybjsKK30KKworYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFr
ZU5vblZvbGF0aWxlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fc3RhdGUgPT0gUHVyZ2VkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaW50IHN0YXRlID0gVk1fUFVSR0FCTEVfTk9OVk9MQVRJTEU7
CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19z
ZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJM
RV9TRVRfU1RBVEUsICZzdGF0ZSk7CisKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgewor
ICAgICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3N0YXRlID0gc3RhdGUgJiBWTV9Q
VVJHQUJMRV9FTVBUWSA/IFB1cmdlZCA6IE5vblZvbGF0aWxlOworICAgIHJldHVybiBtX3N0YXRl
ID09IE5vblZvbGF0aWxlOworfQorICAgIAorYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6dGVzdFB1cmdl
ZCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gTm9uVm9sYXRpbGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9zdGF0ZSA9PSBQdXJnZWQpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaW50IHN0YXRlOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29u
dHJvbChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9k
YXRhKSwgVk1fUFVSR0FCTEVfR0VUX1NUQVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAhPSBL
RVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgLy8gSXMgdGhpcyBjb3JyZWN0PworICAgICAgICBtX3N0
YXRlID0gUHVyZ2VkOworICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAorICAgIH0KKworICAg
IGlmIChzdGF0ZSAmIFZNX1BVUkdBQkxFX0VNUFRZKQorICAgICAgICBtX3N0YXRlID0gUHVyZ2Vk
OworICAgICAgICAKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBQdXJnZWQ7Cit9CisKK3ZvaWQgVm9s
YXRpbGVCdWZmZXI6OnNldFZvbGF0aWxlQ2F0ZWdvcnkoQ2F0ZWdvcnkgY2F0ZWdvcnkpCit7Cisg
ICAgaWYgKGNhdGVnb3J5ID09IG1fY2F0ZWdvcnkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nh
dGVnb3J5ID0gY2F0ZWdvcnk7CisgICAgaWYgKG1fc3RhdGUgIT0gVm9sYXRpbGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3N0YXRlID0gTm9uVm9sYXRpbGU7CisgICAgbWFrZVZvbGF0aWxlKCk7
Cit9CisgICAgCitjb25zdCBjaGFyKiBWb2xhdGlsZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9uVm9sYXRpbGUpOworICAgIHJldHVybiBtX2RhdGE7Cit9
CisgICAgCit9CisKKyNlbmRpZiAvLyBCVUlMRElOR19PTl9USUdFUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25115</attachid>
            <date>2008-11-12 21:51:41 -0800</date>
            <delta_ts>2008-11-13 11:57:44 -0800</delta_ts>
            <desc>some renaming and cleanups</desc>
            <filename>purgable-cache-5.patch</filename>
            <type>text/plain</type>
            <size>31983</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDgtMTEtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtl
ZXAgZGVhZCByZXNvdXJjcyBpbiBtZW1vcnkgY2FjaGUgaW4gcHVyZ2FibGUgbWVtb3J5LgorICAg
ICAgICAKKyAgICAgICAgT1MgWCAxMC41IGhhcyBrZXJuZWwgZmFjaWxpdHkgZm9yIHB1cmdhYmxl
IG1lbW9yeSB0aGF0IGFsbG93cyBtYXJraW5nIG1lbW9yeQorICAgICAgICBhcmVhIGFzIGxlc3Mg
aW1wb3J0YW50LiBVbmRlciBtZW1vcnkgcHJlc3N1cmUgc3lzdGVtIGNhbiBzdGVhbCBwYWdlcyB0
aGF0IGhhdmUKKyAgICAgICAgYmVlbiBtYXJrZWQgcHVyZ2FibGUgZm9yIGJldHRlciB1c2VzICho
b3BlZnVsbHkpLgorICAgICAgICAKKyAgICAgICAgT25seSByZXNvdXJjZXMgPiAxNiBrYiB3aWxs
IGJlIG1vdmVkIHRvIHB1cmdhYmxlIG1lbW9yeS4gSW1hZ2UgZGF0YSBvbmx5IGZvciBub3cuCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpnZXRTdGF0
aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkdW1wU3RhdHMpOgorICAgICAgICAq
IGxvYWRlci9DYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OlR5cGVTdGF0aXN0aWM6
OlR5cGVTdGF0aXN0aWMpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQp
OgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2U6OmlzVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OnRlc3RQdXJnZWQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjphZG9wdFZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6cmVsZWFzZVZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9Wb2xhdGlsZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0
aWxlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Oik6CisgICAgICAgIChXZWJD
b3JlOjpWb2xhdGlsZUJ1ZmZlcjo6c3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVC
dWZmZXI6OnB1cmdlUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6
On5Wb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6ZGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6c2V0UHVyZ2VQcmlvcml0eSk6
CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dGVzdFB1cmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtlTm9uVm9sYXRpbGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVm9s
YXRpbGVCdWZmZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVm
ZmVyOjpWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6
flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xhdGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp0ZXN0UHVyZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpzZXRQdXJnZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlZvbGF0aWxlQnVmZmVyOjpkYXRhKToKKwogMjAwOC0xMS0xMiAgQWxwIFRva2VyICA8YWxw
QG51YW50aS5jb20+CiAKICAgICAgICAgYXV0b3Rvb2xzOiBMaXN0IHdlYiB3b3JrZXItcmVsYXRl
ZCBoZWFkZXJzIG5lZWRlZCBmb3IgYSBzdWNjZXNzZnVsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
YmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lv
biAzODIwOSkKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAt
MjUzLDYgKzI1Myw3IEBAIF9fWk43V2ViQ29yZTEySWNvbkRhdGFiYXNlOXNldENsaWVudEVQTlMK
IF9fWk43V2ViQ29yZTEyU2NoZWR1bGVQYWlyQzFFUDlOU1J1bkxvb3BQSzEwX19DRlN0cmluZwog
X19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBOU0RhdGFFUDZOU0RhdGEKIF9fWk43V2Vi
Q29yZTEyU2hhcmVkQnVmZmVyMTJjcmVhdGVOU0RhdGFFdgorX19aTjdXZWJDb3JlMTJTaGFyZWRC
dWZmZXJEMUV2CiBfX1pON1dlYkNvcmUxMlRleHRFbmNvZGluZ0MxRVJLTlNfNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMTFyYW5nZUxlbmd0aEVQS05TXzVSYW5nZUViCiBfX1pO
N1dlYkNvcmUxMlRleHRJdGVyYXRvcjI2cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGhFUE5TXzdF
bGVtZW50RWlpYgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDM4MjA5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQyMzEsNiArNDIzMSw4IEBACiAJCUU0NDYxNDND
MENENjg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MjM3MjBDQkZCNkUwMDBBRjJFQ0Ug
LyogSlNIVE1MU291cmNlRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTQ1MTBDRDY4QTM1MDBGQURB
NzUgLyogUmVuZGVyVmlkZW8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRCNDFFMzMwQ0JGQjYwOTAwQUYyRUNFIC8qIFJlbmRlclZpZGVvLmNwcCAq
LzsgfTsKIAkJRTQ0NjE0NTIwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZpZGVvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzNDBDQkZCNjA5
MDBBRjJFQ0UgLyogUmVuZGVyVmlkZW8uaCAqLzsgfTsKKwkJRTQ0RDc2MTMwRUNCNzhDNDAwNzYw
RjE0IC8qIFZvbGF0aWxlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDRENzYxMjBFQ0I3OEM0MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXIu
aCAqLzsgfTsKKwkJRTQ0RDc2MTUwRUNCNzhFOTAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyTWFj
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEQ3
NjE0MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgKi87IH07CiAJCUU0
N0I0QkU4MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QjRCRTYwRTcxMjQxNjAw
MDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ3QjRCRTkwRTcxMjQxNjAwMDM4ODU0IC8qIENh
Y2hlZFJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhh
bmRsZS5jcHAgKi87IH07CiAJCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBQcmVsb2FkU2Nh
bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogUHJlbG9hZFNjYW5uZXIuY3BwICovOyB9OwpAQCAt
ODg0OSw2ICs4ODUxLDggQEAKIAkJRTQ0NjE0MTEwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFF
cnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lZGlhRXJyb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTIwQ0Q2ODI2OTAwRkFEQTc1IC8q
IEpTVGltZVJhbmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1RpbWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQxMzBD
RDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NDRENzYxMjBFQ0I3OEM0MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVm9sYXRpbGVCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTQ0RDc2MTQwRUNCNzhFOTAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyTWFj
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZvbGF0aWxlQnVmZmVy
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3MjA1M0EwRTVBMDUzQTAw
MDZCQjREIC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0N0I0QkU2MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNzBFNzEyNDE2MDAwMzg4NTQg
LyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTYyMSw2ICs5NjI1LDcgQEAKIAkJCQk4NEIyQjI0RjA1NkJGMTVGMDBEMkI3NzEg
LyogU1NMS2V5R2VuZXJhdG9yTWFjLm1tICovLAogCQkJCTY1ODJBMTU1MDk5OTlENkQwMEJFRUI2
RCAvKiBTeXN0ZW1UaW1lTWFjLmNwcCAqLywKIAkJCQk1MURGNkQ3RjBCOTJBMThFMDBDMkRDODUg
LyogVGhyZWFkQ2hlY2subW0gKi8sCisJCQkJRTQ0RDc2MTQwRUNCNzhFOTAwNzYwRjE0IC8qIFZv
bGF0aWxlQnVmZmVyTWFjLmNwcCAqLywKIAkJCQk4NEIyQjFGNzA1NkJFRjNBMDBEMkI3NzEgLyog
V2ViQ29yZUtleUdlbmVyYXRvci5oICovLAogCQkJCTg0QjJCMUY4MDU2QkVGM0EwMEQyQjc3MSAv
KiBXZWJDb3JlS2V5R2VuZXJhdG9yLm0gKi8sCiAJCQkJOTM0RDlCQTYwQjhDMTE3NTAwN0I0MkE5
IC8qIFdlYkNvcmVOU1N0cmluZ0V4dHJhcy5oICovLApAQCAtMTMzNzEsNiArMTMzNzYsNyBAQAog
CQkJCTkzMzA5RUExMDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgKi8sCiAJCQkJOTMwNUIy
NEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8sCiAJCQkJMTQxOUQyQzQwQ0VBNkY2MTAw
RkY1MDdBIC8qIFRyZWVTaGFyZWQuaCAqLywKKwkJCQlFNDRENzYxMjBFQ0I3OEM0MDA3NjBGMTQg
LyogVm9sYXRpbGVCdWZmZXIuaCAqLywKIAkJCQk5MzgwRjQ3MTA5QTExQUI0MDAxRkRCMzQgLyog
V2lkZ2V0LmNwcCAqLywKIAkJCQk5MzgwRjQ3MjA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0Lmgg
Ki8sCiAJCQkpOwpAQCAtMTYyMDYsNiArMTYyMTIsNyBAQAogCQkJCTBGQzcwNTIxMEVCMTgxNTYw
MEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTFDOUQ5
QjBFQjM2ODEyMDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFBNjQzRjIwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0NEQ3NjEzMEVDQjc4QzQwMDc2MEYxNCAvKiBWb2xh
dGlsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODExNCw2ICsxODEyMSw3IEBACiAJCQkJ
RTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUUxMUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTY0M0ZEMEVDMDk3QTAwMDc3OTY2OCAv
KiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0NEQ3NjE1
MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDExIEBAIENhY2hlZFJlc291cmNlKiBD
YWNoZTo6cmVxdWVzdFJlc291cmNlKEQKICAgICAgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVw
b3J0TG9jYWxMb2FkRmFpbGVkKGRvYy0+ZnJhbWUoKSwgcmVzb3VyY2UtPnVybCgpKTsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlmICghcmVzb3VyY2UtPnRyeU1h
a2VOb25Wb2xhdGlsZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXJlc291cmNlLT5oYXNDbGll
bnRzKCkpOworICAgICAgICAgICAgZXZpY3QocmVzb3VyY2UpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoRnJhbWVMb2FkZXI6OnJl
c3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFGcmFtZUxvYWRlcjo6Y2FuTG9hZCh1cmwsIFN0cmlu
ZygpLCBkb2NMb2FkZXItPmRvYygpKSkgewogICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGRv
Y0xvYWRlci0+ZG9jKCk7CkBAIC0zMTEsNiArMzE2LDI1IEBAIHZvaWQgQ2FjaGU6OnBydW5lRGVh
ZFJlc291cmNlcygpCiAKICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2VudGFnZSk7IC8vIEN1dCBieSBhIHBl
cmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fpbi4KICAgICBpbnQgc2l6
ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKKyAgICAKKyAgICBpZiAoIW1faW5QcnVuZURlYWRS
ZXNvdXJjZXMpIHsKKyAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYW55IHB1cmdlZCByZXNvdXJj
ZXMgd2UgY2FuIGV2aWN0LgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2FsbFJlc291cmNlc1tp
XS5tX3RhaWw7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICAgICAgICAg
IENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT50ZXN0UHVyZ2VkKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LT5oYXNDbGllbnRzKCkpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWN1cnJlbnQtPmlzUHJlbG9hZGVkKCkpOworICAgICAgICAgICAgICAg
ICAgICBldmljdChjdXJyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y3VycmVudCA9IHByZXY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRh
cmdldFNpemUgJiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICBib29sIGNhblNocmlua0xSVUxpc3RzID0gdHJ1ZTsKICAgICBt
X2luUHJ1bmVEZWFkUmVzb3VyY2VzID0gdHJ1ZTsKICAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7
IGkgPj0gMDsgaS0tKSB7CkBAIC02MzksNiArNjYzLDggQEAgQ2FjaGU6OlN0YXRpc3RpY3MgQ2Fj
aGU6OmdldFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5zaXplICs9
IG8tPnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMubGl2ZVNpemUgKz0gby0+
aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy5pbWFn
ZXMuZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
by0+aXNWb2xhdGlsZSgpKQorICAgICAgICAgICAgICAgICAgICAqKG8tPnRlc3RQdXJnZWQoKSA/
ICZzdGF0cy5pbWFnZXMucHVyZ2VkU2l6ZSA6ICZzdGF0cy5pbWFnZXMucHVyZ2FibGVTaXplKSAr
PSBvLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CkBAIC02NDYsNiArNjcyLDggQEAgQ2FjaGU6
OlN0YXRpc3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIHN0YXRz
LmNzc1N0eWxlU2hlZXRzLnNpemUgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRz
LmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6
IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUgKz0g
by0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAoby0+aXNWb2xhdGlsZSgpKQor
ICAgICAgICAgICAgICAgICAgICAqKG8tPnRlc3RQdXJnZWQoKSA/ICZzdGF0cy5jc3NTdHlsZVNo
ZWV0cy5wdXJnZWRTaXplIDogJnN0YXRzLmNzc1N0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSkgKz0g
by0+ZW5jb2RlZFNpemUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgpAQCAtNjUzLDYgKzY4MSw4IEBAIENhY2hlOjpT
dGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBzdGF0cy5z
Y3JpcHRzLnNpemUgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMu
bGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAg
ICAgICBzdGF0cy5zY3JpcHRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAg
ICAgICAgICAgICAgaWYgKG8tPmlzVm9sYXRpbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgKihv
LT50ZXN0UHVyZ2VkKCkgPyAmc3RhdHMuc2NyaXB0cy5wdXJnZWRTaXplIDogJnN0YXRzLnNjcmlw
dHMucHVyZ2FibGVTaXplKSArPSBvLT5lbmNvZGVkU2l6ZSgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogI2lmIEVOQUJMRShYU0xUKQogICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
WFNMU3R5bGVTaGVldDoKQEAgLTY2MCw2ICs2OTAsOCBAQCBDYWNoZTo6U3RhdGlzdGljcyBDYWNo
ZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMu
c2l6ZSArPSBvLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMu
bGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAg
ICAgICBzdGF0cy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgp
OworICAgICAgICAgICAgICAgIGlmIChvLT5pc1ZvbGF0aWxlKCkpCisgICAgICAgICAgICAgICAg
ICAgICooby0+dGVzdFB1cmdlZCgpID8gJnN0YXRzLnhzbFN0eWxlU2hlZXRzLnB1cmdlZFNpemUg
OiAmc3RhdHMueHNsU3R5bGVTaGVldHMucHVyZ2FibGVTaXplKSArPSBvLT5lbmNvZGVkU2l6ZSgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpGb250UmVzb3VyY2U6CkBAIC02NjcsNiArNjk5LDggQEAgQ2FjaGU6OlN0YXRp
c3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRz
LnNpemUgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLmxpdmVTaXpl
ICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3Rh
dHMuZm9udHMuZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoby0+aXNWb2xhdGlsZSgpKQorICAgICAgICAgICAgICAgICAgICAqKG8tPnRlc3RQdXJn
ZWQoKSA/ICZzdGF0cy5mb250cy5wdXJnZWRTaXplIDogJnN0YXRzLmZvbnRzLnB1cmdhYmxlU2l6
ZSkgKz0gby0+ZW5jb2RlZFNpemUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFC
TEUoWEJMKQogICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WEJMOgpAQCAtNjc0LDYg
KzcwOCw4IEBAIENhY2hlOjpTdGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0aXN0aWNzKCkKICAgICAg
ICAgICAgICAgICBzdGF0cy54YmxEb2NzLnNpemUgKz0gby0+c2l6ZSgpOwogICAgICAgICAgICAg
ICAgIHN0YXRzLnhibERvY3MubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgp
IDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmRlY29kZWRTaXplICs9IG8tPmRl
Y29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKG8tPmlzVm9sYXRpbGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgKihvLT50ZXN0UHVyZ2VkKCkgPyAmc3RhdHMueGJsRG9jcy5wdXJnZWRT
aXplIDogJnN0YXRzLnhibERvY3MucHVyZ2FibGVTaXplKSArPSBvLT5lbmNvZGVkU2l6ZSgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
NzAyLDE2ICs3MzgsMTYgQEAgdm9pZCBDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkK
IHZvaWQgQ2FjaGU6OmR1bXBTdGF0cygpCiB7CiAgICAgU3RhdGlzdGljcyBzID0gZ2V0U3RhdGlz
dGljcygpOwotICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICIi
LCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIpOwotICAgIHByaW50
ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICItLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOwot
ICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkltYWdlcyIsIHMuaW1h
Z2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVj
b2RlZFNpemUpOwotICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkNT
UyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMuY3NzU3R5bGVTaGVldHMuc2l6ZSwgcy5jc3NT
dHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSk7CisgICAg
cHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIiIs
ICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIiwgIlB1cmdhYmxlU2l6
ZSIsICJQdXJnZWRTaXplIik7CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAl
LTExcyAlLTExcyAlLTExc1xuIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0t
LS0tLS0tLS0tIik7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQg
JTExZFxuIiwgIkltYWdlcyIsIHMuaW1hZ2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdl
cy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVjb2RlZFNpemUsIHMuaW1hZ2VzLnB1cmdhYmxlU2l6ZSwg
cy5pbWFnZXMucHVyZ2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAl
MTFkICUxMWQgJTExZFxuIiwgIkNTUyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMuY3NzU3R5
bGVTaGVldHMuc2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0
cy5kZWNvZGVkU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUsIHMuY3NzU3R5bGVT
aGVldHMucHVyZ2VkU2l6ZSk7CiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgcHJpbnRmKCIlLTExcyAl
MTFkICUxMWQgJTExZCAlMTFkXG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54
c2xTdHlsZVNoZWV0cy5zaXplLCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxl
U2hlZXRzLmRlY29kZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUx
MWQgJTExZCAlMTFkXG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHls
ZVNoZWV0cy5zaXplLCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRz
LmRlY29kZWRTaXplLCBzLnhzbFN0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSwgcy54c2xTdHlsZVNo
ZWV0cy5wdXJnZWRTaXplKTsKICNlbmRpZgotICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUx
MWQgJTExZFxuIiwgIkphdmFTY3JpcHQiLCBzLnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXpl
LCBzLnNjcmlwdHMubGl2ZVNpemUsIHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSk7Ci0gICAgcHJpbnRm
KCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50LCBz
LmZvbnRzLnNpemUsIHMuZm9udHMubGl2ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUpOwotICAg
IHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcblxuIiwgIi0tLS0tLS0tLS0t
IiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tIik7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxu
IiwgIkphdmFTY3JpcHQiLCBzLnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXplLCBzLnNjcmlw
dHMubGl2ZVNpemUsIHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSwgcy5zY3JpcHRzLnB1cmdhYmxlU2l6
ZSwgcy5zY3JpcHRzLnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUx
MWQgJTExZCAlMTFkICUxMWRcbiIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMuZm9udHMuc2l6
ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSwgcy5mb250cy5wdXJnYWJs
ZVNpemUsIHMuZm9udHMucHVyZ2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTEx
cyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0iKTsKIH0KIAogdm9pZCBDYWNoZTo6ZHVtcExSVUxpc3RzKGJv
b2wgaW5jbHVkZUxpdmUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgJKHJldmlzaW9uIDM4MjA5KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOSBAQCBwdWJs
aWM6CiAgICAgICAgIGludCBzaXplOwogICAgICAgICBpbnQgbGl2ZVNpemU7CiAgICAgICAgIGlu
dCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgVHlwZVN0YXRpc3RpYygpIDogY291bnQoMCksIHNpemUo
MCksIGxpdmVTaXplKDApLCBkZWNvZGVkU2l6ZSgwKSB7IH0KKyAgICAgICAgaW50IHB1cmdhYmxl
U2l6ZTsKKyAgICAgICAgaW50IHB1cmdlZFNpemU7CisgICAgICAgIFR5cGVTdGF0aXN0aWMoKSA6
IGNvdW50KDApLCBzaXplKDApLCBsaXZlU2l6ZSgwKSwgZGVjb2RlZFNpemUoMCksIHB1cmdhYmxl
U2l6ZSgwKSwgcHVyZ2VkU2l6ZSgwKSB7IH0KICAgICB9OwogICAgIAogICAgIHN0cnVjdCBTdGF0
aXN0aWNzIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysg
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3
Myw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWREYXRhRGVsZXRpb25UaW0KIHsKICAgICBB
U1NFUlQoIWhhc0NsaWVudHMoKSk7CiAgICAgZGVzdHJveURlY29kZWREYXRhKCk7CisgICAgdHJ5
TWFrZVZvbGF0aWxlKCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmxvYWQoRG9jTG9hZGVyKiBk
b2NMb2FkZXIpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAzODIw
OSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorI2luY2x1ZGUgIlZvbGF0aWxlQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtMzE1LDQgKzMxNiw1NSBAQCBib29sIENhY2hlZFJlc291cmNlOjptdXN0UmV2
YWxpZGF0ZShDYWNoCiAgICAgcmV0dXJuIGlzRXhwaXJlZCgpIHx8IGNhY2hlQ29udHJvbERpcmVj
dGl2ZXMuY29udGFpbnMoIm5vLWNhY2hlIik7CiB9CiAKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OnRy
eU1ha2VOb25Wb2xhdGlsZSgpIAoreyAKKyAgICBpZiAobV9kYXRhIHx8ICFtX3ZvbGF0aWxlRGF0
YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fdm9sYXRpbGVEYXRhLT50cnlNYWtl
Tm9uVm9sYXRpbGUoKSkKKyAgICAgICAgbV9kYXRhID0gU2hhcmVkQnVmZmVyOjphZG9wdFZvbGF0
aWxlQnVmZmVyKG1fdm9sYXRpbGVEYXRhLnJlbGVhc2UoKSk7CisgICAgZWxzZSAKKyAgICAgICAg
bV92b2xhdGlsZURhdGEuY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gbV9kYXRhOyAKK30KKwor
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6dHJ5TWFrZVZvbGF0aWxlKCkgCit7CisgICAgaWYgKG1fdm9s
YXRpbGVEYXRhKSB7CisgICAgICAgIEFTU0VSVCghbV9kYXRhKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgY29uc3QgdW5zaWduZWQgdm9sYXRpbGVUaHJlc2hvbGQgPSA0ICogNDA5NjsKKyAgICBp
ZiAobV9lbmNvZGVkU2l6ZSA8IHZvbGF0aWxlVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgLy8gQ2FuJ3QgbWFrZSBidWZmZXIgdm9sYXRpbGUgaWYgaXQgaGFzIHJl
ZnMgb3RoZW4gdGhhbiB0aGlzLgorICAgIGlmIChtX2RhdGEtPnZvbGF0aWxlQnVmZmVyKCkgJiYg
IW1fZGF0YS0+aGFzT25lUmVmKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBp
ZiAobV9kYXRhLT52b2xhdGlsZUJ1ZmZlcigpKQorICAgICAgICBtX3ZvbGF0aWxlRGF0YS5zZXQo
bV9kYXRhLT5yZWxlYXNlVm9sYXRpbGVCdWZmZXIoKSk7CisgICAgZWxzZQorICAgICAgICBtX3Zv
bGF0aWxlRGF0YS5zZXQoVm9sYXRpbGVCdWZmZXI6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9k
YXRhLT5zaXplKCkpKTsKKyAgICBpZiAoIW1fdm9sYXRpbGVEYXRhKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgbV92b2xhdGlsZURhdGEtPm1ha2VWb2xhdGlsZSgpOworICAgIG1f
ZGF0YS5jbGVhcigpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENhY2hlZFJlc291cmNl
Ojppc1ZvbGF0aWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92b2xhdGlsZURhdGEgJiYgbV92
b2xhdGlsZURhdGEtPnN0YXRlKCkgIT0gVm9sYXRpbGVCdWZmZXI6Ok5vblZvbGF0aWxlOworfQor
Citib29sIENhY2hlZFJlc291cmNlOjp0ZXN0UHVyZ2VkKCkKK3sKKyAgICByZXR1cm4gbV92b2xh
dGlsZURhdGEgJiYgbV92b2xhdGlsZURhdGEtPnRlc3RQdXJnZWQoKTsKK30KKwogfQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAzODIwOSkKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCkBAIC0zOSw2ICs0MCw3IEBAIGNs
YXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNl
OwogY2xhc3MgRG9jTG9hZGVyOwogY2xhc3MgUmVxdWVzdDsKK2NsYXNzIFZvbGF0aWxlQnVmZmVy
OwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENsYXNzZXMgd2hv
IHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKIC8vIGZyb20gQ2FjaGVkUmVz
b3VyY2VDbGllbnQsIHRvIGdldCB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gY2FzZSB0aGUgcmVxdWVz
dGVkIGRhdGEgaGFzIGFycml2ZWQuCkBAIC0xNjQsMTEgKzE2NiwxNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhY2hlVmFsaWRhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxp
ZGF0ZTsgfQogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICAKKyAgICBib29sIGlzVm9s
YXRpbGUoKSBjb25zdDsKKyAgICBib29sIHRlc3RQdXJnZWQoKTsKKyAgICAKIHByb3RlY3RlZDoK
ICAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERlY29kZWRT
aXplKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1l
U3RhbXApOwogCisgICAgYm9vbCB0cnlNYWtlVm9sYXRpbGUoKTsKKyAgICBib29sIHRyeU1ha2VO
b25Wb2xhdGlsZSgpOworICAgIAogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xp
ZW50Kj4gbV9jbGllbnRzOwogCiAgICAgU3RyaW5nIG1fdXJsOwpAQCAtMTc3LDYgKzE4NSw3IEBA
IHByb3RlY3RlZDoKIAogICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgT3duUHRyPFZvbGF0aWxlQnVmZmVyPiBtX3Zv
bGF0aWxlRGF0YTsKIAogICAgIFR5cGUgbV90eXBlOwogICAgIFN0YXR1cyBtX3N0YXR1czsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNp
bmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJl
ZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKQEAgLTQxLDYgKzQzLDEwIEBAIFNoYXJlZEJ1ZmZlcjo6
U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmUKIHsKICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwg
c2l6ZSk7CiB9CisgICAgCitTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIoKQoreworfQogCiBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihWZWN0b3I8
Y2hhcj4mIHZlY3RvcikKIHsKQEAgLTQ5LDExICs1NSwyMiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gU2hhcmVkQnVmZmVyOjphCiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9CiAK
K1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0Vm9sYXRpbGVCdWZm
ZXIoVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVyKSAKK3sgCisgICAgQVNTRVJUKHZvbGF0
aWxlQnVmZmVyLT5zdGF0ZSgpID09IFZvbGF0aWxlQnVmZmVyOjpOb25Wb2xhdGlsZSk7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gY3JlYXRlKCk7CisgICAgYnVmZmVyLT5tX3Zv
bGF0aWxlQnVmZmVyLnNldCh2b2xhdGlsZUJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxl
YXNlKCk7Cit9CisKIHVuc2lnbmVkIFNoYXJlZEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGhhc1BsYXRmb3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRhU2l6ZSgp
OwogICAgIAorICAgIGlmIChtX3ZvbGF0aWxlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV92b2xh
dGlsZUJ1ZmZlci0+c2l6ZSgpOworICAgIAogICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CiB9
CiAKQEAgLTYyLDExICs3OSwxOCBAQCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OmRhdGEoKSBj
b25zdAogICAgIGlmIChoYXNQbGF0Zm9ybURhdGEoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
RGF0YSgpOwogICAgIAorICAgIGlmIChtX3ZvbGF0aWxlQnVmZmVyKSB7CisgICAgICAgIEFTU0VS
VChtX3ZvbGF0aWxlQnVmZmVyLT5zdGF0ZSgpID09IFZvbGF0aWxlQnVmZmVyOjpOb25Wb2xhdGls
ZSk7CisgICAgICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLT5kYXRhKCk7CisgICAgfQorICAg
IAogICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CiB9CiAKIHZvaWQgU2hhcmVkQnVmZmVyOjph
cHBlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKKyAgICBBU1NFUlQoIW1fdm9sYXRp
bGVCdWZmZXIpOworCiAgICAgbWF5YmVUcmFuc2ZlclBsYXRmb3JtRGF0YSgpOwogICAgIAogICAg
IG1fYnVmZmVyLmFwcGVuZChkYXRhLCBsZW4pOwpAQCAtNzcsNiArMTAxLDcgQEAgdm9pZCBTaGFy
ZWRCdWZmZXI6OmNsZWFyKCkKICAgICBjbGVhclBsYXRmb3JtRGF0YSgpOwogICAgIAogICAgIG1f
YnVmZmVyLmNsZWFyKCk7CisgICAgbV92b2xhdGlsZUJ1ZmZlci5jbGVhcigpOwogfQogCiBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjb3B5KCkgY29uc3QKQEAgLTg0LDcg
KzEwOSw2IEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmMKICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSgpLCBzaXplKCkpOwogfQogCi0KICNpZiAh
UExBVEZPUk0oQ0YpCiAKIGlubGluZSB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y2xlYXJQbGF0Zm9ybURh
dGEoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAzODIwOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDggQEAgY2xhc3MgTlNEYXRhOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K2NsYXNzIFZvbGF0aWxlQnVmZmVyOwogCiBjbGFzcyBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxTaGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoKQEAgLTU0LDYgKzU2LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlV2l0aENvbnRlbnRz
T2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBhZG9wdFZlY3RvcihWZWN0b3I8Y2hhcj4mIHZlY3Rvcik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBhZG9wdFZvbGF0aWxlQnVmZmVyKFZvbGF0aWxl
QnVmZmVyKiBidWZmZXIpOworICAgIAorICAgIH5TaGFyZWRCdWZmZXIoKTsKICAgICAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgTlNEYXRhICpjcmVhdGVOU0RhdGEoKTsKQEAgLTc2LDYgKzgxLDkg
QEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNvcHkoKSBjb25zdDsK
ICAgICAKKyAgICBWb2xhdGlsZUJ1ZmZlciogdm9sYXRpbGVCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX3ZvbGF0aWxlQnVmZmVyLmdldCgpOyB9CisgICAgVm9sYXRpbGVCdWZmZXIqIHJlbGVhc2VW
b2xhdGlsZUJ1ZmZlcigpIHsgcmV0dXJuIG1fdm9sYXRpbGVCdWZmZXIucmVsZWFzZSgpOyB9Cisg
ICAgCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOwogICAgIFNoYXJlZEJ1ZmZlcihjb25z
dCBjaGFyKiwgaW50KTsKQEAgLTg2LDYgKzk0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1Bs
YXRmb3JtRGF0YSgpIGNvbnN0OwogICAgIAogICAgIFZlY3RvcjxjaGFyPiBtX2J1ZmZlcjsKKyAg
ICBPd25QdHI8Vm9sYXRpbGVCdWZmZXI+IG1fdm9sYXRpbGVCdWZmZXI7CiAjaWYgUExBVEZPUk0o
Q0YpCiAgICAgU2hhcmVkQnVmZmVyKENGRGF0YVJlZik7CiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gbV9jZkRhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1ZvbGF0aWxlQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGlsZUJ1ZmZlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGlsZUJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVm9sYXRpbGVCdWZmZXJfaAorI2RlZmluZSBWb2xhdGlsZUJ1ZmZlcl9oCisK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBWb2xhdGlsZUJ1ZmZlciA6IE5v
bmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBWb2xhdGlsZUJ1ZmZlciog
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpOworICAgICAgICBzdGF0aWMg
Vm9sYXRpbGVCdWZmZXIqIGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHYpIHsgcmV0dXJuIGNy
ZWF0ZSh2LmRhdGEoKSwgdi5zaXplKCkpOyB9CisgICAgICAgIAorICAgICAgICB+Vm9sYXRpbGVC
dWZmZXIoKTsKKworICAgICAgICAvLyBDYWxsIHRyeU1ha2VOb25Wb2xhdGlsZSgpIGFuZCBjaGVj
ayB0aGUgcmV0dXJuIHZhbHVlIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgICAgIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBTdGF0ZSB7IE5vblZvbGF0
aWxlLCBWb2xhdGlsZSwgUHVyZ2VkIH07CisgICAgICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBQdXJnZVByaW9yaXR5IHsg
UHVyZ2VMYXN0LCBQdXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZhdWx0ID0gUHVyZ2VN
aWRkbGUgfTsKKyAgICAgICAgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wdXJnZVByaW9yaXR5OyB9CisgICAgICAgIHZvaWQgc2V0UHVyZ2VQcmlvcml0eShQ
dXJnZVByaW9yaXR5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdGVzdFB1cmdlZCgpOworCisg
ICAgICAgIHZvaWQgbWFrZVZvbGF0aWxlKCk7CisgICAgICAgIGJvb2wgdHJ5TWFrZU5vblZvbGF0
aWxlKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFZvbGF0aWxlQnVmZmVyKGNo
YXIqIGRhdGEsIHVuc2lnbmVkIHNpemUpOworICAgIAorICAgICAgICBjaGFyKiBtX2RhdGE7Cisg
ICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgUHVyZ2VQcmlvcml0eSBtX3B1cmdlUHJp
b3JpdHk7CisgICAgICAgIFN0YXRlIG1fc3RhdGU7CisgICAgfTsKKworI2lmICFQTEFURk9STShE
QVJXSU4pIHx8IGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpCisgICAgaW5saW5lIFZvbGF0aWxl
QnVmZmVyKiBWb2xhdGlsZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCkgeyBy
ZXR1cm4gMDsgfQorICAgIGlubGluZSBWb2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkg
eyB9CisgICAgaW5saW5lIGNvbnN0IGNoYXIqIFZvbGF0aWxlQnVmZmVyOjpkYXRhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIGlubGluZSB2b2lkIFZvbGF0aWxlQnVmZmVyOjpzZXRQdXJnZVBy
aW9yaXR5KFB1cmdlUHJpb3JpdHkpIHsgfQorICAgIGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVy
Ojp0ZXN0UHVyZ2VkKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbmxpbmUgYm9vbCBWb2xhdGls
ZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBpbmxp
bmUgdm9pZCBWb2xhdGlsZUJ1ZmZlcjo6bWFrZU5vblZvbGF0aWxlKCkgeyB9CisjZW5kaWYKKyAg
ICAKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNG
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNw
cAkocmV2aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNG
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCisjaW5jbHVkZSAiVm9sYXRpbGVCdWZmZXIu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihD
RkRhdGFSZWYgY2ZEYXRhKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZm
ZXJNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1ZvbGF0aWxlQnVm
ZmVyTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1ZvbGF0aWxl
QnVmZmVyTWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiVm9sYXRpbGVCdWZmZXIuaCIKKworI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgorCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pblZv
bGF0aWxlQnVmZmVyU2l6ZSA9IDQwOTY7IC8vIG9uZSBwYWdlCisgICAgCitWb2xhdGlsZUJ1ZmZl
cjo6Vm9sYXRpbGVCdWZmZXIoY2hhciogZGF0YSwgdW5zaWduZWQgc2l6ZSkKKyAgICA6IG1fZGF0
YShkYXRhKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3B1cmdlUHJpb3JpdHkoUHVyZ2VE
ZWZhdWx0KQorICAgICwgbV9zdGF0ZShOb25Wb2xhdGlsZSkKK3sKK30KKyAgICAKK1ZvbGF0aWxl
QnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIoKQoreworICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNr
X3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KG1fZGF0YSksIG1fc2l6ZSk7
Cit9CisKK1ZvbGF0aWxlQnVmZmVyKiBWb2xhdGlsZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIHNpemUpCit7CisgICAgaWYgKHNpemUgPCBtaW5Wb2xhdGlsZUJ1ZmZl
clNpemUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHZtX2FkZHJlc3NfdCBidWZmZXIg
PSAwOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fYWxsb2NhdGUobWFjaF90YXNrX3NlbGYo
KSwgJmJ1ZmZlciwgc2l6ZSwgVk1fRkxBR1NfUFVSR0FCTEUgfCBWTV9GTEFHU19BTllXSEVSRSk7
CisKKyAgICBBU1NFUlQocmV0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgaWYgKHJldCAhPSBLRVJO
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0ID0gdm1fY29weShtYWNoX3Rh
c2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oZGF0YSksIHNpemUsIGJ1
ZmZlcik7CisKKyAgICBBU1NFUlQocmV0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgaWYgKHJldCAh
PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgdm1fZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCBidWZmZXIsIHNpemUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4g
bmV3IFZvbGF0aWxlQnVmZmVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlciksIHNpemUp
OworfQorCit2b2lkIFZvbGF0aWxlQnVmZmVyOjptYWtlVm9sYXRpbGUoKQoreyAgIAorICAgIGlm
IChtX3N0YXRlICE9IE5vblZvbGF0aWxlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGludCB2b2xhdGlsZUdyb3VwOworICAgIGlmIChtX3B1cmdlUHJpb3JpdHkgPT0gUHVyZ2VGaXJz
dCkKKyAgICAgICAgdm9sYXRpbGVHcm91cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzA7CisgICAgZWxz
ZSBpZiAobV9wdXJnZVByaW9yaXR5ID09IFB1cmdlTWlkZGxlKQorICAgICAgICB2b2xhdGlsZUdy
b3VwID0gVk1fVk9MQVRJTEVfR1JPVVBfMzsKKyAgICBlbHNlCisgICAgICAgIHZvbGF0aWxlR3Jv
dXAgPSBWTV9WT0xBVElMRV9HUk9VUF83OworICAgIAorICAgIGludCBzdGF0ZSA9IFZNX1BVUkdB
QkxFX1ZPTEFUSUxFIHwgdm9sYXRpbGVHcm91cDsKKyAgICBrZXJuX3JldHVybl90IHJldCA9IHZt
X3B1cmdhYmxlX2NvbnRyb2wobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9h
ZGRyZXNzX3Q+KG1fZGF0YSksIFZNX1BVUkdBQkxFX1NFVF9TVEFURSwgJnN0YXRlKTsKKworICAg
IGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8vIElzIHRoaXMgY29ycmVjdD8K
KyAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fc3RhdGUgPSBWb2xhdGlsZTsKKyAgICByZXR1cm47Cit9CisKK2Jvb2wgVm9sYXRpbGVCdWZm
ZXI6OnRyeU1ha2VOb25Wb2xhdGlsZSgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gTm9uVm9sYXRp
bGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3N0YXRlID09IFB1cmdlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGludCBzdGF0ZSA9IFZNX1BVUkdBQkxFX05P
TlZPTEFUSUxFOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29udHJvbCht
YWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwg
Vk1fUFVSR0FCTEVfU0VUX1NUQVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAhPSBLRVJOX1NV
Q0NFU1MpIHsKKyAgICAgICAgLy8gSXMgdGhpcyBjb3JyZWN0PworICAgICAgICBtX3N0YXRlID0g
UHVyZ2VkOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zdGF0ZSA9IHN0
YXRlICYgVk1fUFVSR0FCTEVfRU1QVFkgPyBQdXJnZWQgOiBOb25Wb2xhdGlsZTsKKyAgICByZXR1
cm4gbV9zdGF0ZSA9PSBOb25Wb2xhdGlsZTsKK30KKyAgICAKK2Jvb2wgVm9sYXRpbGVCdWZmZXI6
OnRlc3RQdXJnZWQoKQoreworICAgIGlmIChtX3N0YXRlID09IE5vblZvbGF0aWxlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fc3RhdGUgPT0gUHVyZ2VkKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGludCBzdGF0ZTsKKyAgICBrZXJuX3JldHVybl90IHJldCA9IHZtX3B1
cmdhYmxlX2NvbnRyb2wobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRy
ZXNzX3Q+KG1fZGF0YSksIFZNX1BVUkdBQkxFX0dFVF9TVEFURSwgJnN0YXRlKTsKKworICAgIGlm
IChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8vIElzIHRoaXMgY29ycmVjdD8KKyAg
ICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGUgJiBWTV9QVVJHQUJMRV9FTVBUWSkKKyAgICAgICAgbV9zdGF0
ZSA9IFB1cmdlZDsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fc3RhdGUgPT0gUHVyZ2VkOworfQor
Cit2b2lkIFZvbGF0aWxlQnVmZmVyOjpzZXRQdXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkgcHJp
b3JpdHkpCit7CisgICAgaWYgKHByaW9yaXR5ID09IG1fcHVyZ2VQcmlvcml0eSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcHVyZ2VQcmlvcml0eSA9IHByaW9yaXR5OworICAgIGlmIChtX3N0YXRl
ICE9IFZvbGF0aWxlKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZSA9IE5vblZvbGF0aWxl
OworICAgIG1ha2VWb2xhdGlsZSgpOworfQorICAgIAorY29uc3QgY2hhciogVm9sYXRpbGVCdWZm
ZXI6OmRhdGEoKSBjb25zdAoreworICAgIEFTU0VSVChtX3N0YXRlID09IE5vblZvbGF0aWxlKTsK
KyAgICByZXR1cm4gbV9kYXRhOworfQorICAgIAorfQorCisjZW5kaWYgLy8gQlVJTERJTkdfT05f
VElHRVIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25129</attachid>
            <date>2008-11-13 11:57:44 -0800</date>
            <delta_ts>2008-11-20 20:06:50 -0800</delta_ts>
            <desc>some more cleanups</desc>
            <filename>purgable-cache-6.patch</filename>
            <type>text/plain</type>
            <size>32806</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODM2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMDgtMTEtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNAorICAgICAgICBLZWVw
IGRlYWQgcmVzb3VyY3MgaW4gbWVtb3J5IGNhY2hlIGluIHB1cmdhYmxlIG1lbW9yeS4KKyAgICAg
ICAgCisgICAgICAgIE9TIFggMTAuNSBoYXMga2VybmVsIGZhY2lsaXR5IGZvciBwdXJnYWJsZSBt
ZW1vcnkgdGhhdCBhbGxvd3MgbWFya2luZyBtZW1vcnkKKyAgICAgICAgYXJlYXMgYXMgbGVzcyBp
bXBvcnRhbnQuIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBzeXN0ZW0gY2FuIHN0ZWFsIHBhZ2VzIHRo
YXQgaGF2ZQorICAgICAgICBiZWVuIG1hcmtlZCBwdXJnYWJsZSBmb3IgYmV0dGVyIHVzZXMgKGhv
cGVmdWxseSkuCisgICAgICAgIAorICAgICAgICBPbmx5IHJlc291cmNlcyBsYXJnZXIgdGhhbiAx
NiBrYiB3aWxsIGJlIG1vdmVkIHRvIHB1cmdhYmxlIG1lbW9yeS4gSW1hZ2UgZGF0YSBvbmx5IGZv
ciBub3cuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
OjpyZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6
OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmR1bXBTdGF0cyk6Cisg
ICAgICAgICogbG9hZGVyL0NhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6VHlwZVN0
YXRpc3RpYzo6VHlwZVN0YXRpc3RpYyk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6ZGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9u
VGltZXJGaXJlZCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp0cnlNYWtlTm9uVm9sYXRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnRyeU1ha2VWb2xhdGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aXNWb2xhdGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZTo6d2FzVm9sYXRpbGVEYXRhUHVyZ2VkKToKKyAgICAgICAgKiBsb2FkZXIv
Q2FjaGVkUmVzb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp+U2hhcmVkQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YWRvcHRWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp2b2xhdGls
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlbGVhc2VWb2xhdGls
ZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZvbGF0aWxlQnVmZmVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVm
ZmVyOjopOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnB1cmdlUHJpb3JpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OmlzVm9sYXRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6On5Wb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGls
ZUJ1ZmZlcjo6c2V0UHVyZ2VQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1
ZmZlcjo6dGVzdFB1cmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5
TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtl
Tm9uVm9sYXRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZmZXJNYWMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRp
bGVCdWZmZXI6Om1ha2VWb2xhdGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZl
cjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVy
Ojp3YXNQdXJnZWQpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdl
UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OmRhdGEpOgorCiAy
MDA4LTExLTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM4MjA5
KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiAr
MjUzLDcgQEAgX19aTjdXZWJDb3JlMTJJY29uRGF0YWJhc2U5c2V0Q2xpZW50RVBOUwogX19aTjdX
ZWJDb3JlMTJTY2hlZHVsZVBhaXJDMUVQOU5TUnVuTG9vcFBLMTBfX0NGU3RyaW5nCiBfX1pON1dl
YkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3JhcE5TRGF0YUVQNk5TRGF0YQogX19aTjdXZWJDb3JlMTJT
aGFyZWRCdWZmZXIxMmNyZWF0ZU5TRGF0YUV2CitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlckQx
RXYKIF9fWk43V2ViQ29yZTEyVGV4dEVuY29kaW5nQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJD
b3JlMTJUZXh0SXRlcmF0b3IxMXJhbmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29y
ZTEyVGV4dEl0ZXJhdG9yMjZyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRF
aWliCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDIzMSw2ICs0MjMxLDggQEAKIAkJRTQ0NjE0M0MwQ0Q2ODlD
QzAwRkFEQTc1IC8qIEpTSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQyMzcyMENCRkI2RTAwMEFGMkVDRSAvKiBKU0hU
TUxTb3VyY2VFbGVtZW50LmggKi87IH07CiAJCUU0NDYxNDUxMENENjhBMzUwMEZBREE3NSAvKiBS
ZW5kZXJWaWRlby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEI0MUUzMzBDQkZCNjA5MDBBRjJFQ0UgLyogUmVuZGVyVmlkZW8uY3BwICovOyB9Owog
CQlFNDQ2MTQ1MjBDRDY4QTM1MDBGQURBNzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVD
RSAvKiBSZW5kZXJWaWRlby5oICovOyB9OworCQlFNDRENzYxMzBFQ0I3OEM0MDA3NjBGMTQgLyog
Vm9sYXRpbGVCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NEQ3NjEyMEVDQjc4QzQwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlci5oICovOyB9
OworCQlFNDRENzYxNTBFQ0I3OEU5MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXJNYWMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0RDc2MTQwRUNC
NzhFOTAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyTWFjLmNwcCAqLzsgfTsKIAkJRTQ3QjRCRTgw
RTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQg
LyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFNDdCNEJFOTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNw
cCAqLzsgfTsKIAkJRTQ5NjI2QzIwRDgwRDk0ODAwRTM0MDVDIC8qIFByZWxvYWRTY2FubmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUw
MEQ3NTQyRjAwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5lci5jcHAgKi87IH07CkBAIC04ODQ5LDYg
Kzg4NTEsOCBAQAogCQlFNDQ2MTQxMTBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFFcnJvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTQxMjBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1l
UmFuZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGltZVJh
bmdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEzMENENjgyNjkw
MEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUaW1lUmFuZ2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEQ3NjEy
MEVDQjc4QzQwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWb2xhdGlsZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNDRENzYxNDBFQ0I3OEU5MDA3NjBGMTQgLyogVm9sYXRpbGVCdWZmZXJNYWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVm9sYXRpbGVCdWZmZXJNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDcyMDUzQTBFNUEwNTNBMDAwNkJCNEQg
LyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ3QjRCRTYwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNo
ZWRSZXNvdXJjZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NjIxLDYgKzk2MjUsNyBAQAogCQkJCTg0QjJCMjRGMDU2QkYxNUYwMEQyQjc3MSAvKiBTU0xL
ZXlHZW5lcmF0b3JNYWMubW0gKi8sCiAJCQkJNjU4MkExNTUwOTk5OUQ2RDAwQkVFQjZEIC8qIFN5
c3RlbVRpbWVNYWMuY3BwICovLAogCQkJCTUxREY2RDdGMEI5MkExOEUwMEMyREM4NSAvKiBUaHJl
YWRDaGVjay5tbSAqLywKKwkJCQlFNDRENzYxNDBFQ0I3OEU5MDA3NjBGMTQgLyogVm9sYXRpbGVC
dWZmZXJNYWMuY3BwICovLAogCQkJCTg0QjJCMUY3MDU2QkVGM0EwMEQyQjc3MSAvKiBXZWJDb3Jl
S2V5R2VuZXJhdG9yLmggKi8sCiAJCQkJODRCMkIxRjgwNTZCRUYzQTAwRDJCNzcxIC8qIFdlYkNv
cmVLZXlHZW5lcmF0b3IubSAqLywKIAkJCQk5MzREOUJBNjBCOEMxMTc1MDA3QjQyQTkgLyogV2Vi
Q29yZU5TU3RyaW5nRXh0cmFzLmggKi8sCkBAIC0xMzM3MSw2ICsxMzM3Niw3IEBACiAJCQkJOTMz
MDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCAqLywKIAkJCQk5MzA1QjI0QzA5OEYx
QjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLywKIAkJCQkxNDE5RDJDNDBDRUE2RjYxMDBGRjUwN0Eg
LyogVHJlZVNoYXJlZC5oICovLAorCQkJCUU0NEQ3NjEyMEVDQjc4QzQwMDc2MEYxNCAvKiBWb2xh
dGlsZUJ1ZmZlci5oICovLAogCQkJCTkzODBGNDcxMDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQu
Y3BwICovLAogCQkJCTkzODBGNDcyMDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQuaCAqLywKIAkJ
CSk7CkBAIC0xNjIwNiw2ICsxNjIxMiw3IEBACiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4
IC8qIEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMUM5RDlCMEVCMzY4
MTIwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMUE2NDNGMjBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQ0RDc2MTMwRUNCNzhDNDAwNzYwRjE0IC8qIFZvbGF0aWxlQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MTE0LDYgKzE4MTIxLDcgQEAKIAkJCQlFMUMzNkNC
RDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTExQzlEQjAwRUIzNjk5NTAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBNjQzRkQwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ0RDc2MTUwRUNCNzhF
OTAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmNwcAkocmV2aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsMTEgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpy
ZXF1ZXN0UmVzb3VyY2UoRAogICAgICAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2Nh
bExvYWRGYWlsZWQoZG9jLT5mcmFtZSgpLCByZXNvdXJjZS0+dXJsKCkpOwogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXNvdXJjZS0+dHJ5TWFrZU5vblZv
bGF0aWxlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSk7
CisgICAgICAgICAgICBldmljdChyZXNvdXJjZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChGcmFtZUxvYWRlcjo6cmVzdHJpY3RB
Y2Nlc3NUb0xvY2FsKCkgJiYgIUZyYW1lTG9hZGVyOjpjYW5Mb2FkKHVybCwgU3RyaW5nKCksIGRv
Y0xvYWRlci0+ZG9jKCkpKSB7CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jID0gZG9jTG9hZGVy
LT5kb2MoKTsKQEAgLTMxMSw2ICszMTYsMjUgQEAgdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3Vy
Y2VzKCkKIAogICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Y2FwYWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlKTsgLy8gQ3V0IGJ5IGEgcGVyY2VudGFn
ZSB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgogICAgIGludCBzaXplID0gbV9h
bGxSZXNvdXJjZXMuc2l6ZSgpOworICAgIAorICAgIGlmICghbV9pblBydW5lRGVhZFJlc291cmNl
cykgeworICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbnkgcHVyZ2VkIHJlc291cmNlcyB3ZSBj
YW4gZXZpY3QuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ldLm1fdGFp
bDsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3ByZXZJbkFsbFJlc291cmNlc0xpc3Q7CisgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPndhc1ZvbGF0aWxlRGF0YVB1cmdlZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC0+aGFzQ2xpZW50cygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LT5pc1ByZWxvYWRlZCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZXZpY3QoY3VycmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBwcmV2OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCiAgICAgYm9vbCBjYW5TaHJpbmtMUlVMaXN0cyA9IHRydWU7CiAg
ICAgbV9pblBydW5lRGVhZFJlc291cmNlcyA9IHRydWU7CiAgICAgZm9yIChpbnQgaSA9IHNpemUg
LSAxOyBpID49IDA7IGktLSkgewpAQCAtNjMzLDQ3ICs2NTcsNjIgQEAgQ2FjaGU6OlN0YXRpc3Rp
Y3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRv
ciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7CiAgICAgICAgIENh
Y2hlZFJlc291cmNlICpvID0gaS0+c2Vjb25kOworICAgICAgICBib29sIHB1cmdlZCA9IG8tPndh
c1ZvbGF0aWxlRGF0YVB1cmdlZCgpOworICAgICAgICBib29sIGlzVm9sYXRpbGUgPSBvLT5pc1Zv
bGF0aWxlKCkgJiYgIXB1cmdlZDsgCisgICAgICAgIGludCBwYWdlU2l6ZSA9IChvLT5lbmNvZGVk
U2l6ZSgpICsgNDA5NSkgJiB+NDA5NTsKICAgICAgICAgc3dpdGNoIChvLT50eXBlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CiAgICAgICAgICAg
ICAgICAgc3RhdHMuaW1hZ2VzLmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2Vz
LnNpemUgKz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5zaXplICs9
IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5s
aXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAg
ICAgIHN0YXRzLmltYWdlcy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAg
ICAgICAgICAgIHN0YXRzLmltYWdlcy5wdXJnYWJsZVNpemUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VT
aXplIDogMDsKKyAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMucHVyZ2VkU2l6ZSArPSBwdXJn
ZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgICAgICAgICAgICAgc3Rh
dHMuY3NzU3R5bGVTaGVldHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHls
ZVNoZWV0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHls
ZVNoZWV0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAg
IHN0YXRzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNp
emUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNp
emUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNo
ZWV0cy5wdXJnYWJsZVNpemUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAg
ICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VT
aXplIDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U2NyaXB0OgogICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuY291bnQr
KzsKLSAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLnNpemUgKz0gby0+c2l6ZSgpOworICAg
ICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+c2l6ZSgp
OyAKICAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVu
dHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5kZWNv
ZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlw
dHMucHVyZ2FibGVTaXplICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAg
ICAgICAgc3RhdHMuc2NyaXB0cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKICAgICAgICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgICAgICAgICAgc3RhdHMu
eHNsU3R5bGVTaGVldHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNo
ZWV0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNo
ZWV0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAgIHN0
YXRzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUo
KSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuZGVjb2RlZFNpemUg
Kz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0
cy5wdXJnYWJsZVNpemUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAgICAg
ICAgICBzdGF0cy54c2xTdHlsZVNoZWV0cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXpl
IDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgogICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRz
LmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuc2l6ZSArPSBvLT5zaXplKCk7
CisgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+c2l6
ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5saXZlU2l6ZSArPSBvLT5oYXNDbGll
bnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLmRlY29k
ZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMu
cHVyZ2FibGVTaXplICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAgICAg
ICAgc3RhdHMuZm9udHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFhCTCkKICAgICAgICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlhCTDoKICAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmNvdW50Kys7
Ci0gICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAg
ICAgICAgICAgICBzdGF0cy54YmxEb2NzLnNpemUgKz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKTsg
CiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRz
KCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3MuZGVjb2Rl
ZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2Nz
LnB1cmdhYmxlU2l6ZSArPSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAgICAgICAgICAg
ICAgIHN0YXRzLnhibERvY3MucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC03
MDIsMTYgKzc0MSwxNiBAQCB2b2lkIENhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQog
dm9pZCBDYWNoZTo6ZHVtcFN0YXRzKCkKIHsKICAgICBTdGF0aXN0aWNzIHMgPSBnZXRTdGF0aXN0
aWNzKCk7Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIiIs
ICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIik7Ci0gICAgcHJpbnRm
KCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7Ci0g
ICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiSW1hZ2VzIiwgcy5pbWFn
ZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNv
ZGVkU2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiQ1NT
Iiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0
eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRTaXplKTsKKyAgICBw
cmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG4iLCAiIiwg
IkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiLCAiUHVyZ2FibGVTaXpl
IiwgIlB1cmdlZFNpemUiKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUt
MTFzICUtMTFzICUtMTFzXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAl
MTFkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2Vz
LmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSwgcy5pbWFnZXMucHVyZ2FibGVTaXplLCBz
LmltYWdlcy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUx
MWQgJTExZCAlMTFkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHls
ZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRz
LmRlY29kZWRTaXplLCBzLmNzc1N0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSwgcy5jc3NTdHlsZVNo
ZWV0cy5wdXJnZWRTaXplKTsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICBwcmludGYoIiUtMTFzICUx
MWQgJTExZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50LCBzLnhz
bFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNsU3R5bGVT
aGVldHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTEx
ZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50LCBzLnhzbFN0eWxl
U2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNsU3R5bGVTaGVldHMu
ZGVjb2RlZFNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2FibGVTaXplLCBzLnhzbFN0eWxlU2hl
ZXRzLnB1cmdlZFNpemUpOwogI2VuZGlmCi0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTEx
ZCAlMTFkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUs
IHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplKTsKLSAgICBwcmludGYo
IiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMu
Zm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSk7Ci0gICAg
cHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuXG4iLCAiLS0tLS0tLS0tLS0i
LCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkXG4i
LCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUsIHMuc2NyaXB0
cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplLCBzLnNjcmlwdHMucHVyZ2FibGVTaXpl
LCBzLnNjcmlwdHMucHVyZ2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTEx
ZCAlMTFkICUxMWQgJTExZFxuIiwgIkZvbnRzIiwgcy5mb250cy5jb3VudCwgcy5mb250cy5zaXpl
LCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29kZWRTaXplLCBzLmZvbnRzLnB1cmdhYmxl
U2l6ZSwgcy5mb250cy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFz
ICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG5cbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLSIpOwogfQogCiB2b2lkIENhY2hlOjpkdW1wTFJVTGlzdHMoYm9v
bCBpbmNsdWRlTGl2ZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAkocmV2aXNpb24gMzgyMDkpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw5IEBAIHB1Ymxp
YzoKICAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGludCBsaXZlU2l6ZTsKICAgICAgICAgaW50
IGRlY29kZWRTaXplOwotICAgICAgICBUeXBlU3RhdGlzdGljKCkgOiBjb3VudCgwKSwgc2l6ZSgw
KSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApIHsgfQorICAgICAgICBpbnQgcHVyZ2FibGVT
aXplOworICAgICAgICBpbnQgcHVyZ2VkU2l6ZTsKKyAgICAgICAgVHlwZVN0YXRpc3RpYygpIDog
Y291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBkZWNvZGVkU2l6ZSgwKSwgcHVyZ2FibGVT
aXplKDApLCBwdXJnZWRTaXplKDApIHsgfQogICAgIH07CiAgICAgCiAgICAgc3RydWN0IFN0YXRp
c3RpY3MgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMzgyMDkpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzcz
LDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbQogewogICAgIEFT
U0VSVCghaGFzQ2xpZW50cygpKTsKICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKKyAgICB0cnlN
YWtlVm9sYXRpbGUoKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6bG9hZChEb2NMb2FkZXIqIGRv
Y0xvYWRlcikKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDM4MjA5
KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlcXVlc3QuaCIK
ICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiVm9sYXRpbGVCdWZmZXIuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC0zMTUsNCArMzE2LDU1IEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZh
bGlkYXRlKENhY2gKICAgICByZXR1cm4gaXNFeHBpcmVkKCkgfHwgY2FjaGVDb250cm9sRGlyZWN0
aXZlcy5jb250YWlucygibm8tY2FjaGUiKTsKIH0KIAorYm9vbCBDYWNoZWRSZXNvdXJjZTo6dHJ5
TWFrZU5vblZvbGF0aWxlKCkgCit7IAorICAgIGlmIChtX2RhdGEgfHwgIW1fdm9sYXRpbGVEYXRh
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV92b2xhdGlsZURhdGEtPnRyeU1ha2VO
b25Wb2xhdGlsZSgpKQorICAgICAgICBtX2RhdGEgPSBTaGFyZWRCdWZmZXI6OmFkb3B0Vm9sYXRp
bGVCdWZmZXIobV92b2xhdGlsZURhdGEucmVsZWFzZSgpKTsKKyAgICBlbHNlIAorICAgICAgICBt
X3ZvbGF0aWxlRGF0YS5jbGVhcigpOworICAgIAorICAgIHJldHVybiBtX2RhdGE7IAorfQorCiti
b29sIENhY2hlZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUoKSAKK3sKKyAgICBpZiAobV92b2xh
dGlsZURhdGEpIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBjb25zdCB1bnNpZ25lZCB2b2xhdGlsZVRocmVzaG9sZCA9IDQgKiA0MDk2OworICAgIGlm
IChtX2VuY29kZWRTaXplIDwgdm9sYXRpbGVUaHJlc2hvbGQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICAvLyBDYW4ndCBtYWtlIGJ1ZmZlciB2b2xhdGlsZSBpZiBpdCBoYXMgcmVm
cyBvdGhlbiB0aGFuIHRoaXMuCisgICAgaWYgKG1fZGF0YS0+dm9sYXRpbGVCdWZmZXIoKSAmJiAh
bV9kYXRhLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlm
IChtX2RhdGEtPnZvbGF0aWxlQnVmZmVyKCkpCisgICAgICAgIG1fdm9sYXRpbGVEYXRhLnNldCht
X2RhdGEtPnJlbGVhc2VWb2xhdGlsZUJ1ZmZlcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fdm9s
YXRpbGVEYXRhLnNldChWb2xhdGlsZUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2Rh
dGEtPnNpemUoKSkpOworICAgIGlmICghbV92b2xhdGlsZURhdGEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBtX3ZvbGF0aWxlRGF0YS0+bWFrZVZvbGF0aWxlKCk7CisgICAgbV9k
YXRhLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6
OmlzVm9sYXRpbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZvbGF0aWxlRGF0YSAmJiBtX3Zv
bGF0aWxlRGF0YS0+aXNWb2xhdGlsZSgpOworfQorCitib29sIENhY2hlZFJlc291cmNlOjp3YXNW
b2xhdGlsZURhdGFQdXJnZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZvbGF0aWxlRGF0YSAm
JiBtX3ZvbGF0aWxlRGF0YS0+d2FzUHVyZ2VkKCk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuaAkocmV2aXNpb24gMzgyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNv
dXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMzksNiArNDAsNyBAQCBjbGFzcyBDYWNoZWRS
ZXNvdXJjZUNsaWVudDsKIGNsYXNzIENhY2hlZFJlc291cmNlSGFuZGxlQmFzZTsKIGNsYXNzIERv
Y0xvYWRlcjsKIGNsYXNzIFJlcXVlc3Q7CitjbGFzcyBWb2xhdGlsZUJ1ZmZlcjsKIAogLy8gQSBy
ZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhlIGNhY2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVz
ZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZlCiAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50
LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhh
cyBhcnJpdmVkLgpAQCAtMTY0LDExICsxNjYsMTcgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYWNo
ZVZhbGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9CiAgICAgCisgICAgYm9vbCBpc1ZvbGF0aWxlKCkgY29u
c3Q7CisgICAgYm9vbCB3YXNWb2xhdGlsZURhdGFQdXJnZWQoKSBjb25zdDsKKyAgICAKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERl
Y29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJs
ZSB0aW1lU3RhbXApOwogCisgICAgYm9vbCB0cnlNYWtlVm9sYXRpbGUoKTsKKyAgICBib29sIHRy
eU1ha2VOb25Wb2xhdGlsZSgpOworICAgIAogICAgIEhhc2hDb3VudGVkU2V0PENhY2hlZFJlc291
cmNlQ2xpZW50Kj4gbV9jbGllbnRzOwogCiAgICAgU3RyaW5nIG1fdXJsOwpAQCAtMTc3LDYgKzE4
NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAgT3duUHRyPFZvbGF0aWxlQnVmZmVy
PiBtX3ZvbGF0aWxlRGF0YTsKIAogICAgIFR5cGUgbV90eXBlOwogICAgIFN0YXR1cyBtX3N0YXR1
czsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDM4MjA5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKQEAgLTQxLDYgKzQzLDEwIEBAIFNoYXJlZEJ1
ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmUKIHsKICAgICBtX2J1ZmZlci5hcHBlbmQo
ZGF0YSwgc2l6ZSk7CiB9CisgICAgCitTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIoKQorewor
fQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihW
ZWN0b3I8Y2hhcj4mIHZlY3RvcikKIHsKQEAgLTQ5LDExICs1NSwyMiBAQCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphCiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7
CiB9CiAKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0Vm9sYXRp
bGVCdWZmZXIoVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVyKSAKK3sgCisgICAgQVNTRVJU
KCF2b2xhdGlsZUJ1ZmZlci0+aXNWb2xhdGlsZSgpKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBjcmVhdGUoKTsKKyAgICBidWZmZXItPm1fdm9sYXRpbGVCdWZmZXIuc2V0KHZv
bGF0aWxlQnVmZmVyKTsKKyAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKK30KKwogdW5zaWdu
ZWQgU2hhcmVkQnVmZmVyOjpzaXplKCkgY29uc3QKIHsKICAgICBpZiAoaGFzUGxhdGZvcm1EYXRh
KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGFTaXplKCk7CiAgICAgCisgICAgaWYgKG1f
dm9sYXRpbGVCdWZmZXIpCisgICAgICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLT5zaXplKCk7
CisgICAgCiAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKIH0KIApAQCAtNjIsMTEgKzc5LDE4
IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAgICAgaWYgKGhhc1Bs
YXRmb3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRhKCk7CiAgICAgCisgICAg
aWYgKG1fdm9sYXRpbGVCdWZmZXIpIHsKKyAgICAgICAgQVNTRVJUKCFtX3ZvbGF0aWxlQnVmZmVy
LT5pc1ZvbGF0aWxlKCkpOworICAgICAgICByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci0+ZGF0YSgp
OworICAgIH0KKyAgICAKICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOwogfQogCiB2b2lkIFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAgQVNT
RVJUKCFtX3ZvbGF0aWxlQnVmZmVyKTsKKwogICAgIG1heWJlVHJhbnNmZXJQbGF0Zm9ybURhdGEo
KTsKICAgICAKICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVuKTsKQEAgLTc3LDYgKzEwMSw3
IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpjbGVhcigpCiAgICAgY2xlYXJQbGF0Zm9ybURhdGEoKTsK
ICAgICAKICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgIG1fdm9sYXRpbGVCdWZmZXIuY2xlYXIo
KTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y29weSgpIGNv
bnN0CkBAIC04NCw3ICsxMDksNiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVm
ZmVyOjpjCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKTsK
IH0KIAotCiAjaWYgIVBMQVRGT1JNKENGKQogCiBpbmxpbmUgdm9pZCBTaGFyZWRCdWZmZXI6OmNs
ZWFyUGxhdGZvcm1EYXRhKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24g
MzgyMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw4IEBAIGNsYXNzIE5TRGF0YTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitjbGFzcyBWb2xhdGlsZUJ1ZmZlcjsKIAogY2xhc3MgU2hhcmVkQnVmZmVy
IDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CkBAIC01NCw2ICs1
Niw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWZWN0b3IoVmVjdG9yPGNoYXI+JiB2ZWN0
b3IpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWb2xhdGlsZUJ1
ZmZlcihWb2xhdGlsZUJ1ZmZlciogYnVmZmVyKTsKKyAgICAKKyAgICB+U2hhcmVkQnVmZmVyKCk7
CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TRGF0YSAqY3JlYXRlTlNEYXRhKCk7CkBA
IC03Niw2ICs4MSw5IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBj
b3B5KCkgY29uc3Q7CiAgICAgCisgICAgVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci5nZXQoKTsgfQorICAgIFZvbGF0aWxlQnVm
ZmVyKiByZWxlYXNlVm9sYXRpbGVCdWZmZXIoKSB7IHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLnJl
bGVhc2UoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBTaGFy
ZWRCdWZmZXIoY29uc3QgY2hhciosIGludCk7CkBAIC04Niw2ICs5NCw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBoYXNQbGF0Zm9ybURhdGEoKSBjb25zdDsKICAgICAKICAgICBWZWN0b3I8Y2hhcj4g
bV9idWZmZXI7CisgICAgT3duUHRyPFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxlQnVmZmVyOwog
I2lmIFBMQVRGT1JNKENGKQogICAgIFNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYpOwogICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IG1fY2ZEYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGls
ZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZvbGF0aWxlQnVmZmVyX2gKKyNkZWZpbmUgVm9sYXRp
bGVCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgVm9sYXRp
bGVCdWZmZXIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgVm9s
YXRpbGVCdWZmZXIqIGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAg
ICAgIHN0YXRpYyBWb2xhdGlsZUJ1ZmZlciogY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdikg
eyByZXR1cm4gY3JlYXRlKHYuZGF0YSgpLCB2LnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgICAg
IH5Wb2xhdGlsZUJ1ZmZlcigpOworCisgICAgICAgIC8vIENhbGwgdHJ5TWFrZU5vblZvbGF0aWxl
KCkgYW5kIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YS4K
KyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAgICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBQdXJnZVBy
aW9yaXR5IHsgUHVyZ2VMYXN0LCBQdXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZhdWx0
ID0gUHVyZ2VNaWRkbGUgfTsKKyAgICAgICAgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9wdXJnZVByaW9yaXR5OyB9CisgICAgICAgIHZvaWQgc2V0UHVyZ2VQ
cmlvcml0eShQdXJnZVByaW9yaXR5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNWb2xhdGls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9uVm9sYXRpbGU7IH0KKyAgICAgICAgYm9v
bCB3YXNQdXJnZWQoKSBjb25zdDsKKworICAgICAgICB2b2lkIG1ha2VWb2xhdGlsZSgpOworICAg
ICAgICBib29sIHRyeU1ha2VOb25Wb2xhdGlsZSgpOworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBWb2xhdGlsZUJ1ZmZlcihjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgCisg
ICAgICAgIGNoYXIqIG1fZGF0YTsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgUHVy
Z2VQcmlvcml0eSBtX3B1cmdlUHJpb3JpdHk7CisKKyAgICAgICAgZW51bSBTdGF0ZSB7IE5vblZv
bGF0aWxlLCBWb2xhdGlsZSwgUHVyZ2VkIH07CisgICAgICAgIG11dGFibGUgU3RhdGUgbV9zdGF0
ZTsKKyAgICB9OworCisjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikKKyAgICBpbmxpbmUgVm9sYXRpbGVCdWZmZXIqIFZvbGF0aWxlQnVmZmVyOjpjcmVh
dGUoY29uc3QgY2hhciosIHNpemVfdCkgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSBWb2xhdGls
ZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkgeyB9CisgICAgaW5saW5lIGNvbnN0IGNoYXIqIFZv
bGF0aWxlQnVmZmVyOjpkYXRhKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSB2b2lk
IFZvbGF0aWxlQnVmZmVyOjpzZXRQdXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkpIHsgfQorICAg
IGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQoKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVyOjp0cnlNYWtlTm9uVm9sYXRpbGUoKSB7
IHJldHVybiBmYWxzZTsgfQorICAgIGlubGluZSB2b2lkIFZvbGF0aWxlQnVmZmVyOjptYWtlTm9u
Vm9sYXRpbGUoKSB7IH0KKyNlbmRpZgorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCShyZXZpc2lvbiAzODIwOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAK
KyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNo
YXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKENGRGF0YVJlZiBjZkRhdGEpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Wb2xhdGlsZUJ1ZmZlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgor
CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitz
dGF0aWMgY29uc3Qgc2l6ZV90IG1pblZvbGF0aWxlQnVmZmVyU2l6ZSA9IDQwOTY7IC8vIG9uZSBw
YWdlCisgICAgCitWb2xhdGlsZUJ1ZmZlcjo6Vm9sYXRpbGVCdWZmZXIoY2hhciogZGF0YSwgc2l6
ZV90IHNpemUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwg
bV9wdXJnZVByaW9yaXR5KFB1cmdlRGVmYXVsdCkKKyAgICAsIG1fc3RhdGUoTm9uVm9sYXRpbGUp
Cit7Cit9CisgICAgCitWb2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkKK3sKKyAgICB2
bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190PihtX2RhdGEpLCBtX3NpemUpOworfQorCitWb2xhdGlsZUJ1ZmZlciogVm9sYXRpbGVCdWZm
ZXI6OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6
ZSA8IG1pblZvbGF0aWxlQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
dm1fYWRkcmVzc190IGJ1ZmZlciA9IDA7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9hbGxv
Y2F0ZShtYWNoX3Rhc2tfc2VsZigpLCAmYnVmZmVyLCBzaXplLCBWTV9GTEFHU19QVVJHQUJMRSB8
IFZNX0ZMQUdTX0FOWVdIRVJFKTsKKworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUNDRVNTKTsK
KyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXQgPSB2bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190PihkYXRhKSwgc2l6ZSwgYnVmZmVyKTsKKworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUND
RVNTKTsKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICB2bV9kZWFsbG9j
YXRlKG1hY2hfdGFza19zZWxmKCksIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiBuZXcgVm9sYXRpbGVCdWZmZXIocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYnVmZmVyKSwgc2l6ZSk7Cit9CisKK3ZvaWQgVm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xh
dGlsZSgpCit7ICAgCisgICAgaWYgKG1fc3RhdGUgIT0gTm9uVm9sYXRpbGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgaW50IHZvbGF0aWxlR3JvdXA7CisgICAgaWYgKG1fcHVyZ2VQ
cmlvcml0eSA9PSBQdXJnZUZpcnN0KQorICAgICAgICB2b2xhdGlsZUdyb3VwID0gVk1fVk9MQVRJ
TEVfR1JPVVBfMDsKKyAgICBlbHNlIGlmIChtX3B1cmdlUHJpb3JpdHkgPT0gUHVyZ2VNaWRkbGUp
CisgICAgICAgIHZvbGF0aWxlR3JvdXAgPSBWTV9WT0xBVElMRV9HUk9VUF8zOworICAgIGVsc2UK
KyAgICAgICAgdm9sYXRpbGVHcm91cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzc7CisgICAgCisgICAg
aW50IHN0YXRlID0gVk1fUFVSR0FCTEVfVk9MQVRJTEUgfCB2b2xhdGlsZUdyb3VwOworICAgIGtl
cm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29udHJvbChtYWNoX3Rhc2tfc2VsZigpLCBy
ZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwgVk1fUFVSR0FCTEVfU0VUX1NU
QVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAg
Ly8gSXMgdGhpcyBjb3JyZWN0PworICAgICAgICBtX3N0YXRlID0gUHVyZ2VkOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZSA9IFZvbGF0aWxlOworICAgIHJldHVybjsKK30K
KworYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKCkKK3sKKyAgICBpZiAo
bV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1f
c3RhdGUgPT0gUHVyZ2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW50IHN0
YXRlID0gVk1fUFVSR0FCTEVfTk9OVk9MQVRJTEU7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2
bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1f
YWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJMRV9TRVRfU1RBVEUsICZzdGF0ZSk7CisKKyAg
ICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/
CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBtX3N0YXRlID0gc3RhdGUgJiBWTV9QVVJHQUJMRV9FTVBUWSA/IFB1cmdlZCA6IE5v
blZvbGF0aWxlOworICAgIHJldHVybiBtX3N0YXRlID09IE5vblZvbGF0aWxlOworfQorICAgIAor
Ym9vbCBWb2xhdGlsZUJ1ZmZlcjo6d2FzUHVyZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0
ZSA9PSBOb25Wb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXRl
ID09IFB1cmdlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgc3RhdGU7CisgICAg
a2Vybl9yZXR1cm5fdCByZXQgPSB2bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19zZWxmKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJMRV9HRVRf
U1RBVEUsICZzdGF0ZSk7CisKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAg
ICAvLyBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAg
IHJldHVybiB0cnVlOyAgICAgICAgCisgICAgfQorCisgICAgaWYgKHN0YXRlICYgVk1fUFVSR0FC
TEVfRU1QVFkpCisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIAorICAgIHJldHVy
biBtX3N0YXRlID09IFB1cmdlZDsKK30KKwordm9pZCBWb2xhdGlsZUJ1ZmZlcjo6c2V0UHVyZ2VQ
cmlvcml0eShQdXJnZVByaW9yaXR5IHByaW9yaXR5KQoreworICAgIGlmIChwcmlvcml0eSA9PSBt
X3B1cmdlUHJpb3JpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3B1cmdlUHJpb3JpdHkgPSBw
cmlvcml0eTsKKyAgICBpZiAobV9zdGF0ZSAhPSBWb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc3RhdGUgPSBOb25Wb2xhdGlsZTsKKyAgICBtYWtlVm9sYXRpbGUoKTsKK30KKyAgICAK
K2NvbnN0IGNoYXIqIFZvbGF0aWxlQnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSk7CisgICAgcmV0dXJuIG1fZGF0YTsKK30KKyAgICAKK30K
KworI2VuZGlmIC8vIEJVSUxESU5HX09OX1RJR0VSCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25331</attachid>
            <date>2008-11-20 20:06:50 -0800</date>
            <delta_ts>2008-11-23 21:24:56 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>purgable-cache-7.patch</filename>
            <type>text/plain</type>
            <size>37654</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDgtMTEtMjAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNAorICAgICAgICBLZWVw
IGRlYWQgcmVzb3VyY3MgaW4gbWVtb3J5IGNhY2hlIGluIHB1cmdhYmxlIG1lbW9yeS4KKyAgICAg
ICAgCisgICAgICAgIE9TIFggMTAuNSBoYXMga2VybmVsIGZhY2lsaXR5IGZvciBwdXJnYWJsZSBt
ZW1vcnkgdGhhdCBhbGxvd3MgbWFya2luZyBtZW1vcnkKKyAgICAgICAgYXJlYXMgYXMgbGVzcyBp
bXBvcnRhbnQuIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBzeXN0ZW0gY2FuIHN0ZWFsIHBhZ2VzIHRo
YXQgaGF2ZQorICAgICAgICBiZWVuIG1hcmtlZCBwdXJnYWJsZSBmb3IgYmV0dGVyIHVzZXMgKGhv
cGVmdWxseSkuCisgICAgICAgIAorICAgICAgICBPbmx5IHJlc291cmNlcyBsYXJnZXIgdGhhbiAx
NktCIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHB1cmdhYmxlIG1lbW9yeS4KKworICAgICAgICAqIFdl
YkNvcmUuYmFzZS5leHA6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpyZXF1ZXN0VXNl
ckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlc291cmNlRm9yVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGU6OmR1bXBTdGF0cyk6CisgICAgICAgICogbG9hZGVyL0NhY2hlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6VHlwZVN0YXRpc3RpYzo6VHlwZVN0YXRpc3RpYyk6CisgICAgICAgICogbG9h
ZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NT
U3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
Q1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmlzVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6Ondh
c1ZvbGF0aWxlRGF0YVB1cmdlZCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFNjcmlwdDo6c2NyaXB0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6flNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmFkb3B0Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6dm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyOjpyZWxlYXNlVm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1ZvbGF0aWxlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRp
bGVCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlZvbGF0aWxlQnVmZmVyOjpwdXJnZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlZv
bGF0aWxlQnVmZmVyOjppc1ZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVm
ZmVyOjp+Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Ondhc1B1cmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtlTm9uVm9sYXRpbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
Vm9sYXRpbGVCdWZmZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxl
QnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZl
cjo6flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xhdGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Vm9sYXRpbGVCdWZmZXI6OmRhdGEpOgorCiAyMDA4LTExLTIwICBTaW1vbiBGcmFzZXIg
IDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJu
c3RlaW4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM4NjM3KQorKysgV2ViQ29yZS9XZWJDb3Jl
LmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgX19aTjdXZWJDb3Jl
MTJJY29uRGF0YWJhc2U5c2V0Q2xpZW50RVBOUwogX19aTjdXZWJDb3JlMTJTY2hlZHVsZVBhaXJD
MUVQOU5TUnVuTG9vcFBLMTBfX0NGU3RyaW5nCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEw
d3JhcE5TRGF0YUVQNk5TRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNyZWF0ZU5T
RGF0YUV2CitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlckQxRXYKIF9fWk43V2ViQ29yZTEyVGV4
dEVuY29kaW5nQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IxMXJh
bmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMjZyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRFaWliCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg2MzcpCisrKyBXZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NDI2MCw2ICs0MjYwLDggQEAKIAkJRTQ0NjE0NTIwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRlclZp
ZGVvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0
MUUzNDBDQkZCNjA5MDBBRjJFQ0UgLyogUmVuZGVyVmlkZW8uaCAqLzsgfTsKIAkJRTQ3QjRCRTgw
RTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQg
LyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlFNDdCNEJFOTBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ3QjRCRTcwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNw
cCAqLzsgfTsKKwkJRTQ5MjdDMkYwRUQzQzQxRTAwQkQ1OEIxIC8qIFZvbGF0aWxlQnVmZmVyTWFj
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEQ3
NjE0MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgKi87IH07CisJCUU0
OTI3QzMwMEVEM0M0MkIwMEJENThCMSAvKiBWb2xhdGlsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0RDc2MTIwRUNCNzhDNDAwNzYwRjE0
IC8qIFZvbGF0aWxlQnVmZmVyLmggKi87IH07CiAJCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAv
KiBQcmVsb2FkU2Nhbm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogUHJlbG9hZFNjYW5uZXIuY3Bw
ICovOyB9OwogCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQwNUMgLyogUHJlbG9hZFNjYW5uZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRBQkUxMEQ3
NTQyRjEwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5lci5oICovOyB9OwogCQlFNEFGQ0ZBNTBEQUYy
OUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIu
aCAqLzsgfTsKQEAgLTg5MDQsNiArODkwNiw4IEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZBREE3
NSAvKiBKU01lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNN
ZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENENjgy
NjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNUaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRTQ0RDc2MTIwRUNCNzhDNDAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZvbGF0aWxlQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NEQ3NjE0MEVDQjc4RTkwMDc2MEYxNCAvKiBWb2xh
dGlsZUJ1ZmZlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
b2xhdGlsZUJ1ZmZlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NzIw
NTNBMEU1QTA1M0EwMDA2QkI0RCAvKiBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDdCNEJFNjBFNzEyNDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkUmVz
b3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QjRCRTcwRTcx
MjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MDQsNiArOTcwOCw3IEBACiAJCQkJODRCMkIyNEYwNTZC
RjE1RjAwRDJCNzcxIC8qIFNTTEtleUdlbmVyYXRvck1hYy5tbSAqLywKIAkJCQk2NTgyQTE1NTA5
OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1hYy5jcHAgKi8sCiAJCQkJNTFERjZEN0YwQjky
QTE4RTAwQzJEQzg1IC8qIFRocmVhZENoZWNrLm1tICovLAorCQkJCUU0NEQ3NjE0MEVDQjc4RTkw
MDc2MEYxNCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgKi8sCiAJCQkJODRCMkIxRjcwNTZCRUYz
QTAwRDJCNzcxIC8qIFdlYkNvcmVLZXlHZW5lcmF0b3IuaCAqLywKIAkJCQk4NEIyQjFGODA1NkJF
RjNBMDBEMkI3NzEgLyogV2ViQ29yZUtleUdlbmVyYXRvci5tICovLAogCQkJCTkzNEQ5QkE2MEI4
QzExNzUwMDdCNDJBOSAvKiBXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAqLywKQEAgLTEzNDU3LDYg
KzEzNDYyLDcgQEAKIAkJCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICov
LAogCQkJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovLAogCQkJCTE0MTlE
MkM0MENFQTZGNjEwMEZGNTA3QSAvKiBUcmVlU2hhcmVkLmggKi8sCisJCQkJRTQ0RDc2MTIwRUNC
NzhDNDAwNzYwRjE0IC8qIFZvbGF0aWxlQnVmZmVyLmggKi8sCiAJCQkJOTM4MEY0NzEwOUExMUFC
NDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgKi8sCiAJCQkJOTM4MEY0NzIwOUExMUFCNDAwMUZEQjM0
IC8qIFdpZGdldC5oICovLAogCQkJKTsKQEAgLTE2MzEwLDYgKzE2MzE2LDcgQEAKIAkJCQlFMTQ3
OTlBNzBFQ0RFM0E0MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzNENDMEUyMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg5N0MxNEQwRUQyRUJBNTAwQUUwNkRCIC8qIFdNTEJSRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTQ5MjdDMzAwRUQzQzQyQjAwQkQ1OEIxIC8qIFZvbGF0aWxl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MjMxLDYgKzE4MjM4LDcgQEAKIAkJCQlFMTQ3
OTlCNDBFQ0RFOUQ4MDAyOTJCRjMgLyogV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDg5N0MxNEMwRUQyRUJBNTAwQUUwNkRCIC8qIFdNTEJSRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTgyNTA0RjBFRDJGMjAyMDA0OTlBOEYgLyogRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ5MjdDMkYwRUQzQzQxRTAwQkQ1OEIx
IC8qIFZvbGF0aWxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNENDMEUxMEVE
MzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJ
KHJldmlzaW9uIDM4NjM3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OSwyNSArOTksMTkgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVz
b3VyY2UoRAogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICAvLyBMb29rIHVwIHRoZSByZXNv
dXJjZSBpbiBvdXIgbWFwLgotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1fcmVzb3Vy
Y2VzLmdldCh1cmwuc3RyaW5nKCkpOwotCi0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIGlm
IChpc1ByZWxvYWQgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGlmIChGcmFtZUxvYWRlcjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkg
JiYgIUZyYW1lTG9hZGVyOjpjYW5Mb2FkKHVybCwgU3RyaW5nKCksIGRvY0xvYWRlci0+ZG9jKCkp
KSB7Ci0gICAgICAgICAgICBEb2N1bWVudCogZG9jID0gZG9jTG9hZGVyLT5kb2MoKTsKLSAgICAg
ICAgICAgIGlmKGRvYyAmJiAhaXNQcmVsb2FkKQotICAgICAgICAgICAgICAgIEZyYW1lTG9hZGVy
OjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoZG9jLT5mcmFtZSgpLCByZXNvdXJjZS0+dXJsKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoRnJhbWVMb2FkZXI6OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFGcmFtZUxvYWRlcjo6
Y2FuTG9hZCh1cmwsIFN0cmluZygpLCBkb2NMb2FkZXItPmRvYygpKSkgewotICAgICAgICAgICAg
RG9jdW1lbnQqIGRvYyA9IGRvY0xvYWRlci0+ZG9jKCk7Ci0gICAgICAgICAgICBpZihkb2MgJiYg
IWlzUHJlbG9hZCkKLSAgICAgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2Fk
RmFpbGVkKGRvYy0+ZnJhbWUoKSwgdXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0KKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXNvdXJjZUZv
clVSTCh1cmwuc3RyaW5nKCkpOworICAgIAorICAgIGlmIChyZXNvdXJjZSAmJiBpc1ByZWxvYWQg
JiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBpZiAoRnJhbWVMb2FkZXI6OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFGcmFtZUxvYWRl
cjo6Y2FuTG9hZCh1cmwsIFN0cmluZygpLCBkb2NMb2FkZXItPmRvYygpKSkgeworICAgICAgICBE
b2N1bWVudCogZG9jID0gZG9jTG9hZGVyLT5kb2MoKTsKKyAgICAgICAgaWYoZG9jICYmICFpc1By
ZWxvYWQpCisgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGRv
Yy0+ZnJhbWUoKSwgdXJsLnN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IAorICAgIGlmICghcmVzb3VyY2UpIHsKICAgICAgICAgLy8gVGhlIHJlc291cmNlIGRvZXMgbm90
IGV4aXN0LiBDcmVhdGUgaXQuCiAgICAgICAgIHJlc291cmNlID0gY3JlYXRlUmVzb3VyY2UodHlw
ZSwgdXJsLCBjaGFyc2V0KTsKICAgICAgICAgQVNTRVJUKHJlc291cmNlKTsKQEAgLTE2NSw3ICsx
NTksNyBAQCBDYWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZShECiBDYWNoZWRD
U1NTdHlsZVNoZWV0KiBDYWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KERvY0xvYWRlciog
ZG9jTG9hZGVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewog
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHVzZXJTaGVldDsKLSAgICBpZiAoQ2FjaGVkUmVzb3Vy
Y2UqIGV4aXN0aW5nID0gbV9yZXNvdXJjZXMuZ2V0KHVybCkpIHsKKyAgICBpZiAoQ2FjaGVkUmVz
b3VyY2UqIGV4aXN0aW5nID0gcmVzb3VyY2VGb3JVUkwodXJsKSkgewogICAgICAgICBpZiAoZXhp
c3RpbmctPnR5cGUoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB1c2VyU2hlZXQgPSBzdGF0aWNfY2FzdDxDYWNoZWRDU1NT
dHlsZVNoZWV0Kj4oZXhpc3RpbmcpOwpAQCAtMjQ0LDcgKzIzOCwxMyBAQCB2b2lkIENhY2hlOjpy
ZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzCiAKIENhY2hlZFJlc291cmNlKiBDYWNoZTo6cmVz
b3VyY2VGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCiB7Ci0gICAgcmV0dXJuIG1fcmVzb3VyY2Vz
LmdldCh1cmwpOworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmdl
dCh1cmwpOworICAgIGlmIChyZXNvdXJjZSAmJiAhcmVzb3VyY2UtPnRyeU1ha2VOb25Wb2xhdGls
ZSgpKSB7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSk7CisgICAgICAg
IGV2aWN0KHJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBy
ZXNvdXJjZTsKIH0KIAogdW5zaWduZWQgQ2FjaGU6OmRlYWRDYXBhY2l0eSgpIGNvbnN0IApAQCAt
MzExLDYgKzMxMSwyNSBAQCB2b2lkIENhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQogCiAgICAg
dW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNU
YXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGlt
bWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5z
aXplKCk7CisgICAgCisgICAgaWYgKCFtX2luUHJ1bmVEZWFkUmVzb3VyY2VzKSB7CisgICAgICAg
IC8vIFNlZSBpZiB3ZSBoYXZlIGFueSBwdXJnZWQgcmVzb3VyY2VzIHdlIGNhbiBldmljdC4KKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIENhY2hl
ZFJlc291cmNlKiBjdXJyZW50ID0gbV9hbGxSZXNvdXJjZXNbaV0ubV90YWlsOworICAgICAgICAg
ICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJl
diA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudC0+d2FzVm9sYXRpbGVEYXRhUHVyZ2VkKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFjdXJyZW50LT5oYXNDbGllbnRzKCkpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWN1cnJlbnQtPmlzUHJlbG9hZGVkKCkpOworICAgICAgICAgICAgICAgICAgICBldmlj
dChjdXJyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudCA9
IHByZXY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRhcmdldFNpemUg
JiYgbV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICBib29sIGNhblNocmlua0xSVUxpc3RzID0gdHJ1ZTsKICAgICBtX2luUHJ1bmVE
ZWFkUmVzb3VyY2VzID0gdHJ1ZTsKICAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsg
aS0tKSB7CkBAIC02MzMsNDcgKzY1Miw2MiBAQCBDYWNoZTo6U3RhdGlzdGljcyBDYWNoZTo6Z2V0
U3RhdGlzdGljcygpCiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291
cmNlcy5lbmQoKTsKICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9y
ZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyArK2kpIHsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2Ug
Km8gPSBpLT5zZWNvbmQ7CisgICAgICAgIGJvb2wgcHVyZ2VkID0gby0+d2FzVm9sYXRpbGVEYXRh
UHVyZ2VkKCk7CisgICAgICAgIGJvb2wgaXNWb2xhdGlsZSA9IG8tPmlzVm9sYXRpbGUoKSAmJiAh
cHVyZ2VkOyAKKyAgICAgICAgaW50IHBhZ2VTaXplID0gKG8tPmVuY29kZWRTaXplKCkgKyA0MDk1
KSAmIH40MDk1OwogICAgICAgICBzd2l0Y2ggKG8tPnR5cGUoKSkgewogICAgICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKICAgICAgICAgICAgICAgICBzdGF0cy5p
bWFnZXMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMuc2l6ZSArPSBvLT5z
aXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLnNpemUgKz0gcHVyZ2VkID8gMCA6
IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmxpdmVTaXplICs9IG8t
Pmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuaW1h
Z2VzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAgc3Rh
dHMuaW1hZ2VzLnB1cmdhYmxlU2l6ZSArPSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAg
ICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXpl
IDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKICAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNo
ZWV0cy5jb3VudCsrOwotICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLnNpemUg
Kz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLnNpemUg
Kz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5
bGVTaGVldHMubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAg
ICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNv
ZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLnB1cmdhYmxl
U2l6ZSArPSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAgICAgICAgICAgICAgIHN0YXRz
LmNzc1N0eWxlU2hlZXRzLnB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
Y3JpcHQ6CiAgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5jb3VudCsrOwotICAgICAgICAg
ICAgICAgIHN0YXRzLnNjcmlwdHMuc2l6ZSArPSBvLT5zaXplKCk7CisgICAgICAgICAgICAgICAg
c3RhdHMuc2NyaXB0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAg
ICAgICAgIHN0YXRzLnNjcmlwdHMubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6
ZSgpIDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmRlY29kZWRTaXplICs9IG8t
PmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5wdXJnYWJsZVNp
emUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAgICAgICAgICBzdGF0cy5z
Y3JpcHRzLnB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogI2lmIEVOQUJMRShYU0xUKQogICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6WFNMU3R5bGVTaGVldDoKICAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0
cy5jb3VudCsrOwotICAgICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLnNpemUgKz0g
by0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLnNpemUgKz0g
cHVyZ2VkID8gMCA6IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVT
aGVldHMubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAg
ICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVk
U2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLnB1cmdhYmxlU2l6
ZSArPSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAgICAgICAgICAgICAgIHN0YXRzLnhz
bFN0eWxlU2hlZXRzLnB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpGb250UmVzb3VyY2U6CiAgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuY291bnQrKzsKLSAg
ICAgICAgICAgICAgICBzdGF0cy5mb250cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBzdGF0cy5mb250cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAg
ICAgICAgICAgIHN0YXRzLmZvbnRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNp
emUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuZGVjb2RlZFNpemUgKz0gby0+
ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5wdXJnYWJsZVNpemUg
Kz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAgICAgICAgICBzdGF0cy5mb250
cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICNpZiBFTkFCTEUoWEJMKQogICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
WEJMOgogICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3MuY291bnQrKzsKLSAgICAgICAgICAg
ICAgICBzdGF0cy54YmxEb2NzLnNpemUgKz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0
YXRzLnhibERvY3Muc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+c2l6ZSgpOyAKICAgICAgICAgICAg
ICAgICBzdGF0cy54YmxEb2NzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUo
KSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5kZWNvZGVkU2l6ZSArPSBvLT5k
ZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3MucHVyZ2FibGVTaXpl
ICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAgICAgICAgc3RhdHMueGJs
RG9jcy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcwMiwxNiArNzM2LDE2
IEBAIHZvaWQgQ2FjaGU6OnNldERpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiB2b2lkIENhY2hlOjpk
dW1wU3RhdHMoKQogewogICAgIFN0YXRpc3RpY3MgcyA9IGdldFN0YXRpc3RpY3MoKTsKLSAgICBw
cmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG4iLCAiIiwgIkNvdW50IiwgIlNp
emUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiKTsKLSAgICBwcmludGYoIiUtMTFzICUtMTFz
ICUtMTFzICUtMTFzICUtMTFzXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iKTsKLSAgICBwcmludGYoIiUt
MTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJJbWFnZXMiLCBzLmltYWdlcy5jb3VudCwgcy5p
bWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMuaW1hZ2VzLmRlY29kZWRTaXplKTsKLSAg
ICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJDU1MiLCBzLmNzc1N0eWxl
U2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2
ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMg
JS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICIiLCAiQ291bnQiLCAiU2l6
ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIsICJQdXJnYWJsZVNpemUiLCAiUHVyZ2VkU2l6
ZSIpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0x
MXNcbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOwor
ICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJJbWFn
ZXMiLCBzLmltYWdlcy5jb3VudCwgcy5pbWFnZXMuc2l6ZSwgcy5pbWFnZXMubGl2ZVNpemUsIHMu
aW1hZ2VzLmRlY29kZWRTaXplLCBzLmltYWdlcy5wdXJnYWJsZVNpemUsIHMuaW1hZ2VzLnB1cmdl
ZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkICUxMWRc
biIsICJDU1MiLCBzLmNzc1N0eWxlU2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUs
IHMuY3NzU3R5bGVTaGVldHMubGl2ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUs
IHMuY3NzU3R5bGVTaGVldHMucHVyZ2FibGVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLnB1cmdlZFNp
emUpOwogI2lmIEVOQUJMRShYU0xUKQotICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQg
JTExZFxuIiwgIlhTTCIsIHMueHNsU3R5bGVTaGVldHMuY291bnQsIHMueHNsU3R5bGVTaGVldHMu
c2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5kZWNvZGVk
U2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxu
IiwgIlhTTCIsIHMueHNsU3R5bGVTaGVldHMuY291bnQsIHMueHNsU3R5bGVTaGVldHMuc2l6ZSwg
cy54c2xTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSwg
cy54c2xTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2VkU2l6
ZSk7CiAjZW5kaWYKLSAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJK
YXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNvdW50LCBzLnNjcmlwdHMuc2l6ZSwgcy5zY3JpcHRzLmxp
dmVTaXplLCBzLnNjcmlwdHMuZGVjb2RlZFNpemUpOwotICAgIHByaW50ZigiJS0xMXMgJTExZCAl
MTFkICUxMWQgJTExZFxuIiwgIkZvbnRzIiwgcy5mb250cy5jb3VudCwgcy5mb250cy5zaXplLCBz
LmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29kZWRTaXplKTsKLSAgICBwcmludGYoIiUtMTFz
ICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG5cbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOworICAgIHBy
aW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJKYXZhU2NyaXB0
Iiwgcy5zY3JpcHRzLmNvdW50LCBzLnNjcmlwdHMuc2l6ZSwgcy5zY3JpcHRzLmxpdmVTaXplLCBz
LnNjcmlwdHMuZGVjb2RlZFNpemUsIHMuc2NyaXB0cy5wdXJnYWJsZVNpemUsIHMuc2NyaXB0cy5w
dXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAl
MTFkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50LCBzLmZvbnRzLnNpemUsIHMuZm9udHMubGl2
ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUsIHMuZm9udHMucHVyZ2FibGVTaXplLCBzLmZvbnRz
LnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMg
JS0xMXMgJS0xMXNcblxuIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tIik7CiB9CiAKIHZvaWQgQ2FjaGU6OmR1bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZl
KSBjb25zdApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZS5oCShyZXZpc2lvbiAzODYzNykKKysrIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDkgQEAgcHVibGljOgogICAgICAgICBp
bnQgc2l6ZTsKICAgICAgICAgaW50IGxpdmVTaXplOwogICAgICAgICBpbnQgZGVjb2RlZFNpemU7
Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMoKSA6IGNvdW50KDApLCBzaXplKDApLCBsaXZlU2l6ZSgw
KSwgZGVjb2RlZFNpemUoMCkgeyB9CisgICAgICAgIGludCBwdXJnYWJsZVNpemU7CisgICAgICAg
IGludCBwdXJnZWRTaXplOworICAgICAgICBUeXBlU3RhdGlzdGljKCkgOiBjb3VudCgwKSwgc2l6
ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApLCBwdXJnYWJsZVNpemUoMCksIHB1cmdl
ZFNpemUoMCkgeyB9CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzg2MzcpCisr
KyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsMTEgQEAgdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjphZGRDbGllbnQoQ2Fj
aAogICAgIGlmICghbV9sb2FkaW5nKQogICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1fdXJs
LCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCB0aGlzKTsKIH0KKyAgICAKK3ZvaWQgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQoKQoreworICAgIHRyeU1ha2VWb2xh
dGlsZSgpOworfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNldEVuY29kaW5nKGNvbnN0
IFN0cmluZyYgY2hzKQogewpAQCAtNjgsNiArNzMsOCBAQCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6ZW5jb2RpbmcoKSBjCiAgICAgCiBjb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVl
dDo6c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlKSBjb25zdCAKIHsgCisgICAgQVNTRVJU
KCFpc1ZvbGF0aWxlKCkpOworCiAgICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0VtcHR5KCkg
fHwgIWNhblVzZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9u
IDM4NjM3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgY29u
c3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUpIGNvbnN0Owog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsK
KyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKTsKICAgICAgICAg
dmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5j
cHAJKHJldmlzaW9uIDM4NjM3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRE
YXRhRGVsZXRpb25UaW0KIHsKICAgICBBU1NFUlQoIWhhc0NsaWVudHMoKSk7CiAgICAgZGVzdHJv
eURlY29kZWREYXRhKCk7CisgICAgdHJ5TWFrZVZvbGF0aWxlKCk7CiB9CiAKIHZvaWQgQ2FjaGVk
SW1hZ2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVz
b3VyY2UuY3BwCShyZXZpc2lvbiAzODYzNykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorI2luY2x1
ZGUgIlZvbGF0aWxlQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzE1LDQgKzMxNiw1NSBAQCBib29s
IENhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZShDYWNoCiAgICAgcmV0dXJuIGlzRXhwaXJl
ZCgpIHx8IGNhY2hlQ29udHJvbERpcmVjdGl2ZXMuY29udGFpbnMoIm5vLWNhY2hlIik7CiB9CiAK
K2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OnRyeU1ha2VOb25Wb2xhdGlsZSgpIAoreyAKKyAgICBpZiAo
bV9kYXRhIHx8ICFtX3ZvbGF0aWxlRGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG1fdm9sYXRpbGVEYXRhLT50cnlNYWtlTm9uVm9sYXRpbGUoKSkKKyAgICAgICAgbV9kYXRhID0g
U2hhcmVkQnVmZmVyOjphZG9wdFZvbGF0aWxlQnVmZmVyKG1fdm9sYXRpbGVEYXRhLnJlbGVhc2Uo
KSk7CisgICAgZWxzZSAKKyAgICAgICAgbV92b2xhdGlsZURhdGEuY2xlYXIoKTsKKyAgICAKKyAg
ICByZXR1cm4gbV9kYXRhOyAKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6dHJ5TWFrZVZvbGF0
aWxlKCkgCit7CisgICAgaWYgKG1fdm9sYXRpbGVEYXRhKSB7CisgICAgICAgIEFTU0VSVCghbV9k
YXRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghbV9kYXRhKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3Qgc2l6ZV90IHZvbGF0aWxlVGhyZXNo
b2xkID0gNCAqIDQwOTY7CisgICAgaWYgKG1fZGF0YS0+c2l6ZSgpIDwgdm9sYXRpbGVUaHJlc2hv
bGQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBDYW4ndCBtYWtlIGJ1ZmZl
ciB2b2xhdGlsZSBpZiBpdCBoYXMgcmVmcyBvdGhlbiB0aGFuIHRoaXMuCisgICAgaWYgKG1fZGF0
YS0+dm9sYXRpbGVCdWZmZXIoKSAmJiAhbV9kYXRhLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtX2RhdGEtPnZvbGF0aWxlQnVmZmVyKCkpCisgICAg
ICAgIG1fdm9sYXRpbGVEYXRhLnNldChtX2RhdGEtPnJlbGVhc2VWb2xhdGlsZUJ1ZmZlcigpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fdm9sYXRpbGVEYXRhLnNldChWb2xhdGlsZUJ1ZmZlcjo6Y3Jl
YXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpOworICAgIGlmICghbV92b2xhdGls
ZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3ZvbGF0aWxlRGF0YS0+
bWFrZVZvbGF0aWxlKCk7CisgICAgbV9kYXRhLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2U6OmlzVm9sYXRpbGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ZvbGF0aWxlRGF0YSAmJiBtX3ZvbGF0aWxlRGF0YS0+aXNWb2xhdGlsZSgpOworfQorCiti
b29sIENhY2hlZFJlc291cmNlOjp3YXNWb2xhdGlsZURhdGFQdXJnZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ZvbGF0aWxlRGF0YSAmJiBtX3ZvbGF0aWxlRGF0YS0+d2FzUHVyZ2VkKCk7Cit9
CisKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMzg2MzcpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3Vu
dGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMzks
NiArNDAsNyBAQCBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKIGNsYXNzIENhY2hlZFJlc291
cmNlSGFuZGxlQmFzZTsKIGNsYXNzIERvY0xvYWRlcjsKIGNsYXNzIFJlcXVlc3Q7CitjbGFzcyBW
b2xhdGlsZUJ1ZmZlcjsKIAogLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhlIGNhY2hl
LiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZlCiAvLyBm
cm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGNh
c2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgpAQCAtMTY0LDExICsxNjYsMTcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNDYWNoZVZhbGlkYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFs
aWRhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9CiAgICAgCisg
ICAgYm9vbCBpc1ZvbGF0aWxlKCkgY29uc3Q7CisgICAgYm9vbCB3YXNWb2xhdGlsZURhdGFQdXJn
ZWQoKSBjb25zdDsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEVuY29kZWRTaXplKHVu
c2lnbmVkKTsKICAgICB2b2lkIHNldERlY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIGRp
ZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApOwogCisgICAgYm9vbCB0cnlNYWtl
Vm9sYXRpbGUoKTsKKyAgICBib29sIHRyeU1ha2VOb25Wb2xhdGlsZSgpOworICAgIAogICAgIEhh
c2hDb3VudGVkU2V0PENhY2hlZFJlc291cmNlQ2xpZW50Kj4gbV9jbGllbnRzOwogCiAgICAgU3Ry
aW5nIG1fdXJsOwpAQCAtMTc3LDYgKzE4NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7Cisg
ICAgT3duUHRyPFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxlRGF0YTsKIAogICAgIFR5cGUgbV90
eXBlOwogICAgIFN0YXR1cyBtX3N0YXR1czsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNj
cmlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAko
cmV2aXNpb24gMzg2MzcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCB2b2lkIENhY2hlZFNjcmlwdDo6YWRkQ2xpZW50
KENhY2hlZFJlc291CiAgICAgaWYgKCFtX2xvYWRpbmcpCiAgICAgICAgIGMtPm5vdGlmeUZpbmlz
aGVkKHRoaXMpOwogfQorICAgIAordm9pZCBDYWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVk
KCkKK3sKKyAgICB0cnlNYWtlVm9sYXRpbGUoKTsKK30KIAogdm9pZCBDYWNoZWRTY3JpcHQ6OnNl
dEVuY29kaW5nKGNvbnN0IFN0cmluZyYgY2hzKQogewpAQCAtNzIsNiArNzcsOCBAQCBTdHJpbmcg
Q2FjaGVkU2NyaXB0OjplbmNvZGluZygpIGNvbnN0CiAKIGNvbnN0IFN0cmluZyYgQ2FjaGVkU2Ny
aXB0OjpzY3JpcHQoKQogeworICAgIEFTU0VSVCghaXNWb2xhdGlsZSgpKTsKKwogICAgIGlmICgh
bV9zY3JpcHQgJiYgbV9kYXRhKSB7CiAgICAgICAgIG1fc2NyaXB0ID0gbV9lbmNvZGluZy5kZWNv
ZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRTaXplKCkpOwogICAgICAgICBzZXREZWNvZGVkU2l6
ZShtX3NjcmlwdC5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikpOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2Ny
aXB0LmgJKHJldmlzaW9uIDM4NjM3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBjb25zdCBTdHJpbmcmIHNjcmlwdCgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRD
bGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
dm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbmNv
ZGluZyhjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZW5jb2RpbmcoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDM4NjM3KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKCkKQEAgLTQxLDYgKzQzLDEwIEBAIFNoYXJl
ZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmUKIHsKICAgICBtX2J1ZmZlci5hcHBl
bmQoZGF0YSwgc2l6ZSk7CiB9CisgICAgCitTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIoKQor
eworfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rv
cihWZWN0b3I8Y2hhcj4mIHZlY3RvcikKIHsKQEAgLTQ5LDExICs1NSwyMiBAQCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphCiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNl
KCk7CiB9CiAKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0Vm9s
YXRpbGVCdWZmZXIoVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVyKSAKK3sgCisgICAgQVNT
RVJUKCF2b2xhdGlsZUJ1ZmZlci0+aXNWb2xhdGlsZSgpKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBidWZmZXIgPSBjcmVhdGUoKTsKKyAgICBidWZmZXItPm1fdm9sYXRpbGVCdWZmZXIuc2V0
KHZvbGF0aWxlQnVmZmVyKTsKKyAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKK30KKwogdW5z
aWduZWQgU2hhcmVkQnVmZmVyOjpzaXplKCkgY29uc3QKIHsKICAgICBpZiAoaGFzUGxhdGZvcm1E
YXRhKCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGFTaXplKCk7CiAgICAgCisgICAgaWYg
KG1fdm9sYXRpbGVCdWZmZXIpCisgICAgICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLT5zaXpl
KCk7CisgICAgCiAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKIH0KIApAQCAtNjIsMTEgKzc5
LDE4IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAgICAgaWYgKGhh
c1BsYXRmb3JtRGF0YSgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRhKCk7CiAgICAgCisg
ICAgaWYgKG1fdm9sYXRpbGVCdWZmZXIpIHsKKyAgICAgICAgQVNTRVJUKCFtX3ZvbGF0aWxlQnVm
ZmVyLT5pc1ZvbGF0aWxlKCkpOworICAgICAgICByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci0+ZGF0
YSgpOworICAgIH0KKyAgICAKICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOwogfQogCiB2b2lk
IFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAg
QVNTRVJUKCFtX3ZvbGF0aWxlQnVmZmVyKTsKKwogICAgIG1heWJlVHJhbnNmZXJQbGF0Zm9ybURh
dGEoKTsKICAgICAKICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVuKTsKQEAgLTc3LDYgKzEw
MSw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpjbGVhcigpCiAgICAgY2xlYXJQbGF0Zm9ybURhdGEo
KTsKICAgICAKICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgIG1fdm9sYXRpbGVCdWZmZXIuY2xl
YXIoKTsKIH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y29weSgp
IGNvbnN0CkBAIC04NCw3ICsxMDksNiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgp
KTsKIH0KIAotCiAjaWYgIVBMQVRGT1JNKENGKQogCiBpbmxpbmUgdm9pZCBTaGFyZWRCdWZmZXI6
OmNsZWFyUGxhdGZvcm1EYXRhKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNp
b24gMzg2MzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw4IEBAIGNsYXNzIE5TRGF0YTsKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgCitjbGFzcyBWb2xhdGlsZUJ1ZmZlcjsKIAogY2xhc3MgU2hhcmVkQnVm
ZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CkBAIC01NCw2
ICs1Niw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNy
ZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWZWN0b3IoVmVjdG9yPGNoYXI+JiB2
ZWN0b3IpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWb2xhdGls
ZUJ1ZmZlcihWb2xhdGlsZUJ1ZmZlciogYnVmZmVyKTsKKyAgICAKKyAgICB+U2hhcmVkQnVmZmVy
KCk7CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TRGF0YSAqY3JlYXRlTlNEYXRhKCk7
CkBAIC03Niw2ICs4MSw5IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBjb3B5KCkgY29uc3Q7CiAgICAgCisgICAgVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci5nZXQoKTsgfQorICAgIFZvbGF0aWxl
QnVmZmVyKiByZWxlYXNlVm9sYXRpbGVCdWZmZXIoKSB7IHJldHVybiBtX3ZvbGF0aWxlQnVmZmVy
LnJlbGVhc2UoKTsgfQorICAgIAogcHJpdmF0ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBT
aGFyZWRCdWZmZXIoY29uc3QgY2hhciosIGludCk7CkBAIC04Niw2ICs5NCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGEoKSBjb25zdDsKICAgICAKICAgICBWZWN0b3I8Y2hh
cj4gbV9idWZmZXI7CisgICAgT3duUHRyPFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxlQnVmZmVy
OwogI2lmIFBMQVRGT1JNKENGKQogICAgIFNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYpOwogICAgIFJl
dGFpblB0cjxDRkRhdGFSZWY+IG1fY2ZEYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Wb2xh
dGlsZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZm
ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZvbGF0aWxlQnVmZmVyX2gKKyNkZWZpbmUgVm9s
YXRpbGVCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgVm9s
YXRpbGVCdWZmZXIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
Vm9sYXRpbGVCdWZmZXIqIGNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7Cisg
ICAgICAgIHN0YXRpYyBWb2xhdGlsZUJ1ZmZlciogY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYg
dikgeyByZXR1cm4gY3JlYXRlKHYuZGF0YSgpLCB2LnNpemUoKSk7IH0KKyAgICAgICAgCisgICAg
ICAgIH5Wb2xhdGlsZUJ1ZmZlcigpOworCisgICAgICAgIC8vIENhbGwgdHJ5TWFrZU5vblZvbGF0
aWxlKCkgYW5kIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0
YS4KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAgICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBQdXJn
ZVByaW9yaXR5IHsgUHVyZ2VMYXN0LCBQdXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZh
dWx0ID0gUHVyZ2VNaWRkbGUgfTsKKyAgICAgICAgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9wdXJnZVByaW9yaXR5OyB9CisgICAgICAgIHZvaWQgc2V0UHVy
Z2VQcmlvcml0eShQdXJnZVByaW9yaXR5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNWb2xh
dGlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9uVm9sYXRpbGU7IH0KKyAgICAgICAg
Ym9vbCB3YXNQdXJnZWQoKSBjb25zdDsKKworICAgICAgICB2b2lkIG1ha2VWb2xhdGlsZSgpOwor
ICAgICAgICBib29sIHRyeU1ha2VOb25Wb2xhdGlsZSgpOworICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBWb2xhdGlsZUJ1ZmZlcihjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAg
CisgICAgICAgIGNoYXIqIG1fZGF0YTsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAg
UHVyZ2VQcmlvcml0eSBtX3B1cmdlUHJpb3JpdHk7CisKKyAgICAgICAgZW51bSBTdGF0ZSB7IE5v
blZvbGF0aWxlLCBWb2xhdGlsZSwgUHVyZ2VkIH07CisgICAgICAgIG11dGFibGUgU3RhdGUgbV9z
dGF0ZTsKKyAgICB9OworCisjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikKKyAgICBpbmxpbmUgVm9sYXRpbGVCdWZmZXIqIFZvbGF0aWxlQnVmZmVyOjpj
cmVhdGUoY29uc3QgY2hhciosIHNpemVfdCkgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSBWb2xh
dGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkgeyB9CisgICAgaW5saW5lIGNvbnN0IGNoYXIq
IFZvbGF0aWxlQnVmZmVyOjpkYXRhKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSB2
b2lkIFZvbGF0aWxlQnVmZmVyOjpzZXRQdXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkpIHsgfQor
ICAgIGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQoKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIGlubGluZSBib29sIFZvbGF0aWxlQnVmZmVyOjp0cnlNYWtlTm9uVm9sYXRpbGUo
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIGlubGluZSB2b2lkIFZvbGF0aWxlQnVmZmVyOjptYWtl
Tm9uVm9sYXRpbGUoKSB7IH0KKyNlbmRpZgorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCShyZXZpc2lvbiAzODYzNykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKENGRGF0YVJlZiBjZkRhdGEpCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL21hYy9Wb2xhdGlsZUJ1ZmZlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5o
IgorCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitzdGF0aWMgY29uc3Qgc2l6ZV90IG1pblZvbGF0aWxlQnVmZmVyU2l6ZSA9IDQwOTY7IC8vIG9u
ZSBwYWdlCisgICAgCitWb2xhdGlsZUJ1ZmZlcjo6Vm9sYXRpbGVCdWZmZXIoY2hhciogZGF0YSwg
c2l6ZV90IHNpemUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fc2l6ZShzaXplKQorICAg
ICwgbV9wdXJnZVByaW9yaXR5KFB1cmdlRGVmYXVsdCkKKyAgICAsIG1fc3RhdGUoTm9uVm9sYXRp
bGUpCit7Cit9CisgICAgCitWb2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkKK3sKKyAg
ICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRk
cmVzc190PihtX2RhdGEpLCBtX3NpemUpOworfQorCitWb2xhdGlsZUJ1ZmZlciogVm9sYXRpbGVC
dWZmZXI6OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAo
c2l6ZSA8IG1pblZvbGF0aWxlQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgdm1fYWRkcmVzc190IGJ1ZmZlciA9IDA7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9h
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCAmYnVmZmVyLCBzaXplLCBWTV9GTEFHU19QVVJHQUJM
RSB8IFZNX0ZMQUdTX0FOWVdIRVJFKTsKKworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUNDRVNT
KTsKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXQgPSB2bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRk
cmVzc190PihkYXRhKSwgc2l6ZSwgYnVmZmVyKTsKKworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9T
VUNDRVNTKTsKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICB2bV9kZWFs
bG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIHJldHVybiBuZXcgVm9sYXRpbGVCdWZmZXIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYnVmZmVyKSwgc2l6ZSk7Cit9CisKK3ZvaWQgVm9sYXRpbGVCdWZmZXI6Om1ha2VW
b2xhdGlsZSgpCit7ICAgCisgICAgaWYgKG1fc3RhdGUgIT0gTm9uVm9sYXRpbGUpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgaW50IHZvbGF0aWxlR3JvdXA7CisgICAgaWYgKG1fcHVy
Z2VQcmlvcml0eSA9PSBQdXJnZUZpcnN0KQorICAgICAgICB2b2xhdGlsZUdyb3VwID0gVk1fVk9M
QVRJTEVfR1JPVVBfMDsKKyAgICBlbHNlIGlmIChtX3B1cmdlUHJpb3JpdHkgPT0gUHVyZ2VNaWRk
bGUpCisgICAgICAgIHZvbGF0aWxlR3JvdXAgPSBWTV9WT0xBVElMRV9HUk9VUF8zOworICAgIGVs
c2UKKyAgICAgICAgdm9sYXRpbGVHcm91cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzc7CisgICAgCisg
ICAgaW50IHN0YXRlID0gVk1fUFVSR0FCTEVfVk9MQVRJTEUgfCB2b2xhdGlsZUdyb3VwOworICAg
IGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29udHJvbChtYWNoX3Rhc2tfc2VsZigp
LCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwgVk1fUFVSR0FCTEVfU0VU
X1NUQVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAg
ICAgLy8gSXMgdGhpcyBjb3JyZWN0PworICAgICAgICBtX3N0YXRlID0gUHVyZ2VkOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0ZSA9IFZvbGF0aWxlOworICAgIHJldHVybjsK
K30KKworYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKCkKK3sKKyAgICBp
ZiAobV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG1fc3RhdGUgPT0gUHVyZ2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW50
IHN0YXRlID0gVk1fUFVSR0FCTEVfTk9OVk9MQVRJTEU7CisgICAga2Vybl9yZXR1cm5fdCByZXQg
PSB2bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm1fYWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJMRV9TRVRfU1RBVEUsICZzdGF0ZSk7CisK
KyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAvLyBJcyB0aGlzIGNvcnJl
Y3Q/CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBtX3N0YXRlID0gc3RhdGUgJiBWTV9QVVJHQUJMRV9FTVBUWSA/IFB1cmdlZCA6
IE5vblZvbGF0aWxlOworICAgIHJldHVybiBtX3N0YXRlID09IE5vblZvbGF0aWxlOworfQorICAg
IAorYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6d2FzUHVyZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBOb25Wb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0
YXRlID09IFB1cmdlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgc3RhdGU7Cisg
ICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19zZWxm
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJMRV9H
RVRfU1RBVEUsICZzdGF0ZSk7CisKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAg
ICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAg
ICAgIHJldHVybiB0cnVlOyAgICAgICAgCisgICAgfQorCisgICAgaWYgKHN0YXRlICYgVk1fUFVS
R0FCTEVfRU1QVFkpCisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIAorICAgIHJl
dHVybiBtX3N0YXRlID09IFB1cmdlZDsKK30KKwordm9pZCBWb2xhdGlsZUJ1ZmZlcjo6c2V0UHVy
Z2VQcmlvcml0eShQdXJnZVByaW9yaXR5IHByaW9yaXR5KQoreworICAgIGlmIChwcmlvcml0eSA9
PSBtX3B1cmdlUHJpb3JpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3B1cmdlUHJpb3JpdHkg
PSBwcmlvcml0eTsKKyAgICBpZiAobV9zdGF0ZSAhPSBWb2xhdGlsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc3RhdGUgPSBOb25Wb2xhdGlsZTsKKyAgICBtYWtlVm9sYXRpbGUoKTsKK30KKyAg
ICAKK2NvbnN0IGNoYXIqIFZvbGF0aWxlQnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSk7CisgICAgcmV0dXJuIG1fZGF0YTsKK30KKyAgICAK
K30KKworI2VuZGlmIC8vIEJVSUxESU5HX09OX1RJR0VSCg==
</data>
<flag name="review"
          id="11729"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25369</attachid>
            <date>2008-11-21 18:10:15 -0800</date>
            <delta_ts>2008-11-21 19:13:31 -0800</delta_ts>
            <desc>patch that applies cleanly and builds with current tot</desc>
            <filename>purgable-cache-8.patch</filename>
            <type>text/plain</type>
            <size>32557</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDgtMTEtMjAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNAorICAgICAgICBLZWVw
IGRlYWQgcmVzb3VyY3MgaW4gbWVtb3J5IGNhY2hlIGluIHB1cmdhYmxlIG1lbW9yeS4KKyAgICAg
ICAgCisgICAgICAgIE9TIFggMTAuNSBoYXMga2VybmVsIGZhY2lsaXR5IGZvciBwdXJnYWJsZSBt
ZW1vcnkgdGhhdCBhbGxvd3MgbWFya2luZyBtZW1vcnkKKyAgICAgICAgYXJlYXMgYXMgbGVzcyBp
bXBvcnRhbnQuIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBzeXN0ZW0gY2FuIHN0ZWFsIHBhZ2VzIHRo
YXQgaGF2ZQorICAgICAgICBiZWVuIG1hcmtlZCBwdXJnYWJsZSBmb3IgYmV0dGVyIHVzZXMgKGhv
cGVmdWxseSkuCisgICAgICAgIAorICAgICAgICBPbmx5IHJlc291cmNlcyBsYXJnZXIgdGhhbiAx
NktCIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHB1cmdhYmxlIG1lbW9yeS4KKworICAgICAgICAqIFdl
YkNvcmUuYmFzZS5leHA6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpyZXF1ZXN0VXNl
ckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlc291cmNlRm9yVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGU6OmR1bXBTdGF0cyk6CisgICAgICAgICogbG9hZGVyL0NhY2hlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6VHlwZVN0YXRpc3RpYzo6VHlwZVN0YXRpc3RpYyk6CisgICAgICAgICogbG9h
ZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NT
U3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
Q1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmlzVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6Ondh
c1ZvbGF0aWxlRGF0YVB1cmdlZCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFNjcmlwdDo6c2NyaXB0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6flNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmFkb3B0Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6dm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyOjpyZWxlYXNlVm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1ZvbGF0aWxlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRp
bGVCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlZvbGF0aWxlQnVmZmVyOjpwdXJnZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlZv
bGF0aWxlQnVmZmVyOjppc1ZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVm
ZmVyOjp+Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Ondhc1B1cmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtlTm9uVm9sYXRpbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
Vm9sYXRpbGVCdWZmZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxl
QnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZl
cjo6flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xhdGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Vm9sYXRpbGVCdWZmZXI6OmRhdGEpOgorCiAyMDA4LTExLTIxICBEYXJpbiBGaXNoZXIg
IDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2Fy
ZW4uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiAzODY4MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw3IEBAIF9fWk43V2ViQ29yZTEy
SWNvbkRhdGFiYXNlOXNldENsaWVudEVQTlMKIF9fWk43V2ViQ29yZTEyU2NoZWR1bGVQYWlyQzFF
UDlOU1J1bkxvb3BQSzEwX19DRlN0cmluZwogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdy
YXBOU0RhdGFFUDZOU0RhdGEKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMTJjcmVhdGVOU0Rh
dGFFdgorX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUxMlRleHRF
bmNvZGluZ0MxRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMTFyYW5n
ZUxlbmd0aEVQS05TXzVSYW5nZUViCiBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvcjI2cmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGhFUE5TXzdFbGVtZW50RWlpYgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkocmV2
aXNpb24gMzg2ODApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDI1ICs5OSwxOSBAQCBDYWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJj
ZShECiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIExvb2sgdXAgdGhlIHJlc291cmNl
IGluIG91ciBtYXAuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMu
Z2V0KHVybC5zdHJpbmcoKSk7Ci0KLSAgICBpZiAocmVzb3VyY2UpIHsKLSAgICAgICAgaWYgKGlz
UHJlbG9hZCAmJiAhcmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgaWYgKEZyYW1lTG9hZGVyOjpyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSAmJiAh
RnJhbWVMb2FkZXI6OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZG9jTG9hZGVyLT5kb2MoKSkpIHsK
LSAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOwotICAgICAgICAg
ICAgaWYoZG9jICYmICFpc1ByZWxvYWQpCi0gICAgICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJl
cG9ydExvY2FsTG9hZEZhaWxlZChkb2MtPmZyYW1lKCksIHJlc291cmNlLT51cmwoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChG
cmFtZUxvYWRlcjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkgJiYgIUZyYW1lTG9hZGVyOjpjYW5M
b2FkKHVybCwgU3RyaW5nKCksIGRvY0xvYWRlci0+ZG9jKCkpKSB7Ci0gICAgICAgICAgICBEb2N1
bWVudCogZG9jID0gZG9jTG9hZGVyLT5kb2MoKTsKLSAgICAgICAgICAgIGlmKGRvYyAmJiAhaXNQ
cmVsb2FkKQotICAgICAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWls
ZWQoZG9jLT5mcmFtZSgpLCB1cmwuc3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIH0KLQorICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJlc291cmNlRm9yVVJM
KHVybC5zdHJpbmcoKSk7CisgICAgCisgICAgaWYgKHJlc291cmNlICYmIGlzUHJlbG9hZCAmJiAh
cmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlm
IChGcmFtZUxvYWRlcjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkgJiYgIUZyYW1lTG9hZGVyOjpj
YW5Mb2FkKHVybCwgU3RyaW5nKCksIGRvY0xvYWRlci0+ZG9jKCkpKSB7CisgICAgICAgIERvY3Vt
ZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOworICAgICAgICBpZihkb2MgJiYgIWlzUHJlbG9h
ZCkKKyAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoZG9jLT5m
cmFtZSgpLCB1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFyZXNvdXJjZSkgewogICAgICAgICAvLyBUaGUgcmVzb3VyY2UgZG9lcyBub3QgZXhp
c3QuIENyZWF0ZSBpdC4KICAgICAgICAgcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCB1
cmwsIGNoYXJzZXQpOwogICAgICAgICBBU1NFUlQocmVzb3VyY2UpOwpAQCAtMTY1LDcgKzE1OSw3
IEBAIENhY2hlZFJlc291cmNlKiBDYWNoZTo6cmVxdWVzdFJlc291cmNlKEQKIENhY2hlZENTU1N0
eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoRG9jTG9hZGVyKiBkb2NM
b2FkZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7CiAgICAg
Q2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNoZWV0OwotICAgIGlmIChDYWNoZWRSZXNvdXJjZSog
ZXhpc3RpbmcgPSBtX3Jlc291cmNlcy5nZXQodXJsKSkgeworICAgIGlmIChDYWNoZWRSZXNvdXJj
ZSogZXhpc3RpbmcgPSByZXNvdXJjZUZvclVSTCh1cmwpKSB7CiAgICAgICAgIGlmIChleGlzdGlu
Zy0+dHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHVzZXJTaGVldCA9IHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxl
U2hlZXQqPihleGlzdGluZyk7CkBAIC0yNDQsNyArMjM4LDEzIEBAIHZvaWQgQ2FjaGU6OnJldmFs
aWRhdGlvbkZhaWxlZChDYWNoZWRSZXMKIAogQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXNvdXJj
ZUZvclVSTChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICByZXR1cm4gbV9yZXNvdXJjZXMuZ2V0
KHVybCk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KHVy
bCk7CisgICAgaWYgKHJlc291cmNlICYmICFyZXNvdXJjZS0+dHJ5TWFrZU5vblZvbGF0aWxlKCkp
IHsKKyAgICAgICAgQVNTRVJUKCFyZXNvdXJjZS0+aGFzQ2xpZW50cygpKTsKKyAgICAgICAgZXZp
Y3QocmVzb3VyY2UpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc291
cmNlOwogfQogCiB1bnNpZ25lZCBDYWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCkBAIC0zMTEs
NiArMzExLDI1IEBAIHZvaWQgQ2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCiAKICAgICB1bnNp
Z25lZCB0YXJnZXRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5ICogY1Rhcmdl
dFBydW5lUGVyY2VudGFnZSk7IC8vIEN1dCBieSBhIHBlcmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRp
YXRlbHkgcHJ1bmluZyBhZ2Fpbi4KICAgICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUo
KTsKKyAgICAKKyAgICBpZiAoIW1faW5QcnVuZURlYWRSZXNvdXJjZXMpIHsKKyAgICAgICAgLy8g
U2VlIGlmIHdlIGhhdmUgYW55IHB1cmdlZCByZXNvdXJjZXMgd2UgY2FuIGV2aWN0LgorICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIGN1cnJlbnQgPSBtX2FsbFJlc291cmNlc1tpXS5tX3RhaWw7CisgICAgICAgICAgICB3
aGlsZSAoY3VycmVudCkgeworICAgICAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0g
Y3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OworICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50LT53YXNWb2xhdGlsZURhdGFQdXJnZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWN1cnJlbnQtPmhhc0NsaWVudHMoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghY3VycmVudC0+aXNQcmVsb2FkZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGV2aWN0KGN1
cnJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gcHJl
djsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBt
X2RlYWRTaXplIDw9IHRhcmdldFNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAogICAgIGJvb2wgY2FuU2hyaW5rTFJVTGlzdHMgPSB0cnVlOwogICAgIG1faW5QcnVuZURlYWRS
ZXNvdXJjZXMgPSB0cnVlOwogICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0p
IHsKQEAgLTYzMyw0NyArNjUyLDYyIEBAIENhY2hlOjpTdGF0aXN0aWNzIENhY2hlOjpnZXRTdGF0
aXN0aWNzKCkKICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZSA9IG1fcmVzb3VyY2Vz
LmVuZCgpOwogICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGkgPSBtX3Jlc291
cmNlcy5iZWdpbigpOyBpICE9IGU7ICsraSkgewogICAgICAgICBDYWNoZWRSZXNvdXJjZSAqbyA9
IGktPnNlY29uZDsKKyAgICAgICAgYm9vbCBwdXJnZWQgPSBvLT53YXNWb2xhdGlsZURhdGFQdXJn
ZWQoKTsKKyAgICAgICAgYm9vbCBpc1ZvbGF0aWxlID0gby0+aXNWb2xhdGlsZSgpICYmICFwdXJn
ZWQ7IAorICAgICAgICBpbnQgcGFnZVNpemUgPSAoby0+ZW5jb2RlZFNpemUoKSArIDQwOTUpICYg
fjQwOTU7CiAgICAgICAgIHN3aXRjaCAoby0+dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdl
cy5jb3VudCsrOwotICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5zaXplICs9IG8tPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMuc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+
c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMubGl2ZVNpemUgKz0gby0+aGFz
Q2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMu
ZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy5p
bWFnZXMucHVyZ2FibGVTaXplICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAg
ICAgICAgICAgc3RhdHMuaW1hZ2VzLnB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAw
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0OgogICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRz
LmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuc2l6ZSArPSBv
LT5zaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuc2l6ZSArPSBw
dXJnZWQgPyAwIDogby0+c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNo
ZWV0cy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAg
ICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRT
aXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMucHVyZ2FibGVTaXpl
ICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAgICAgICAgc3RhdHMuY3Nz
U3R5bGVTaGVldHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dDoKICAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgc3RhdHMuc2NyaXB0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0
cy5zY3JpcHRzLnNpemUgKz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAg
ICAgc3RhdHMuc2NyaXB0cy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkg
OiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuZGVjb2RlZFNpemUgKz0gby0+ZGVj
b2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLnB1cmdhYmxlU2l6ZSAr
PSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlw
dHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpYU0xTdHlsZVNoZWV0OgogICAgICAgICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLmNv
dW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuc2l6ZSArPSBvLT5z
aXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuc2l6ZSArPSBwdXJn
ZWQgPyAwIDogby0+c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0
cy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAg
ICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXpl
KCk7CisgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMucHVyZ2FibGVTaXplICs9
IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5
bGVTaGVldHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZv
bnRSZXNvdXJjZToKICAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5jb3VudCsrOwotICAgICAg
ICAgICAgICAgIHN0YXRzLmZvbnRzLnNpemUgKz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAg
IHN0YXRzLmZvbnRzLnNpemUgKz0gcHVyZ2VkID8gMCA6IG8tPnNpemUoKTsgCiAgICAgICAgICAg
ICAgICAgc3RhdHMuZm9udHMubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgp
IDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNv
ZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLnB1cmdhYmxlU2l6ZSArPSBp
c1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOworICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLnB1
cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogI2lmIEVOQUJMRShYQkwpCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYQkw6
CiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5jb3VudCsrOwotICAgICAgICAgICAgICAg
IHN0YXRzLnhibERvY3Muc2l6ZSArPSBvLT5zaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMu
eGJsRG9jcy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAg
IHN0YXRzLnhibERvY3MubGl2ZVNpemUgKz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDog
MDsKICAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmRlY29kZWRTaXplICs9IG8tPmRlY29k
ZWRTaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5wdXJnYWJsZVNpemUgKz0g
aXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2Nz
LnB1cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNzAyLDE2ICs3MzYsMTYgQEAg
dm9pZCBDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHZvaWQgQ2FjaGU6OmR1bXBT
dGF0cygpCiB7CiAgICAgU3RhdGlzdGljcyBzID0gZ2V0U3RhdGlzdGljcygpOwotICAgIHByaW50
ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICIiLCAiQ291bnQiLCAiU2l6ZSIs
ICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIpOwotICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0x
MXMgJS0xMXMgJS0xMXNcbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOwotICAgIHByaW50ZigiJS0xMXMg
JTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkltYWdlcyIsIHMuaW1hZ2VzLmNvdW50LCBzLmltYWdl
cy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVjb2RlZFNpemUpOwotICAgIHBy
aW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkNTUyIsIHMuY3NzU3R5bGVTaGVl
dHMuY291bnQsIHMuY3NzU3R5bGVTaGVldHMuc2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6
ZSwgcy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlLTEx
cyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwg
IkxpdmVTaXplIiwgIkRlY29kZWRTaXplIiwgIlB1cmdhYmxlU2l6ZSIsICJQdXJnZWRTaXplIik7
CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xu
IiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7CisgICAg
cHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkltYWdlcyIs
IHMuaW1hZ2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFn
ZXMuZGVjb2RlZFNpemUsIHMuaW1hZ2VzLnB1cmdhYmxlU2l6ZSwgcy5pbWFnZXMucHVyZ2VkU2l6
ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwg
IkNTUyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMuY3NzU3R5bGVTaGVldHMuc2l6ZSwgcy5j
c3NTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6ZSwgcy5j
c3NTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUsIHMuY3NzU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSk7
CiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFk
XG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXpl
LCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXpl
KTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAi
WFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXplLCBzLnhz
bFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXplLCBzLnhz
bFN0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSwgcy54c2xTdHlsZVNoZWV0cy5wdXJnZWRTaXplKTsK
ICNlbmRpZgotICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkphdmFT
Y3JpcHQiLCBzLnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXplLCBzLnNjcmlwdHMubGl2ZVNp
emUsIHMuc2NyaXB0cy5kZWNvZGVkU2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQg
JTExZCAlMTFkXG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50LCBzLmZvbnRzLnNpemUsIHMuZm9u
dHMubGl2ZVNpemUsIHMuZm9udHMuZGVjb2RlZFNpemUpOwotICAgIHByaW50ZigiJS0xMXMgJS0x
MXMgJS0xMXMgJS0xMXMgJS0xMXNcblxuIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwg
Ii0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7CisgICAgcHJpbnRm
KCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkphdmFTY3JpcHQiLCBz
LnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXplLCBzLnNjcmlwdHMubGl2ZVNpemUsIHMuc2Ny
aXB0cy5kZWNvZGVkU2l6ZSwgcy5zY3JpcHRzLnB1cmdhYmxlU2l6ZSwgcy5zY3JpcHRzLnB1cmdl
ZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZCAlMTFkICUxMWRc
biIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMuZm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6
ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSwgcy5mb250cy5wdXJnYWJsZVNpemUsIHMuZm9udHMucHVy
Z2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTEx
cyAlLTExc1xuXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0i
LCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0iKTsKIH0KIAogdm9pZCBDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlLmgJKHJldmlzaW9uIDM4NjgwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOSBAQCBwdWJsaWM6CiAgICAgICAgIGludCBz
aXplOwogICAgICAgICBpbnQgbGl2ZVNpemU7CiAgICAgICAgIGludCBkZWNvZGVkU2l6ZTsKLSAg
ICAgICAgVHlwZVN0YXRpc3RpYygpIDogY291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBk
ZWNvZGVkU2l6ZSgwKSB7IH0KKyAgICAgICAgaW50IHB1cmdhYmxlU2l6ZTsKKyAgICAgICAgaW50
IHB1cmdlZFNpemU7CisgICAgICAgIFR5cGVTdGF0aXN0aWMoKSA6IGNvdW50KDApLCBzaXplKDAp
LCBsaXZlU2l6ZSgwKSwgZGVjb2RlZFNpemUoMCksIHB1cmdhYmxlU2l6ZSgwKSwgcHVyZ2VkU2l6
ZSgwKSB7IH0KICAgICB9OwogICAgIAogICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAzODY4MCkKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw2ICs1NSwxMSBAQCB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmFkZENsaWVudChDYWNoCiAg
ICAgaWYgKCFtX2xvYWRpbmcpCiAgICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV91cmwsIG1f
ZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCksIHRoaXMpOwogfQorICAgIAordm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjphbGxDbGllbnRzUmVtb3ZlZCgpCit7CisgICAgdHJ5TWFrZVZvbGF0aWxl
KCk7Cit9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2V0RW5jb2RpbmcoY29uc3QgU3Ry
aW5nJiBjaHMpCiB7CkBAIC02OCw2ICs3Myw4IEBAIFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0
OjplbmNvZGluZygpIGMKICAgICAKIGNvbnN0IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0Ojpz
aGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUpIGNvbnN0IAogeyAKKyAgICBBU1NFUlQoIWlz
Vm9sYXRpbGUoKSk7CisKICAgICBpZiAoIW1fZGF0YSB8fCBtX2RhdGEtPmlzRW1wdHkoKSB8fCAh
Y2FuVXNlU2hlZXQoZW5mb3JjZU1JTUVUeXBlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMzg2
ODApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjb25zdCBT
dHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1ZSkgY29uc3Q7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCopOworICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGFsbENsaWVudHNSZW1vdmVkKCk7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2aXJ0
dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAko
cmV2aXNpb24gMzg2ODApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFE
ZWxldGlvblRpbQogewogICAgIEFTU0VSVCghaGFzQ2xpZW50cygpKTsKICAgICBkZXN0cm95RGVj
b2RlZERhdGEoKTsKKyAgICB0cnlNYWtlVm9sYXRpbGUoKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFn
ZTo6bG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZS5jcHAJKHJldmlzaW9uIDM4NjgwKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIlJlcXVlc3QuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAi
Vm9sYXRpbGVCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zMTUsNCArMzE2LDU1IEBAIGJvb2wgQ2Fj
aGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlKENhY2gKICAgICByZXR1cm4gaXNFeHBpcmVkKCkg
fHwgY2FjaGVDb250cm9sRGlyZWN0aXZlcy5jb250YWlucygibm8tY2FjaGUiKTsKIH0KIAorYm9v
bCBDYWNoZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKCkgCit7IAorICAgIGlmIChtX2Rh
dGEgfHwgIW1fdm9sYXRpbGVEYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV92
b2xhdGlsZURhdGEtPnRyeU1ha2VOb25Wb2xhdGlsZSgpKQorICAgICAgICBtX2RhdGEgPSBTaGFy
ZWRCdWZmZXI6OmFkb3B0Vm9sYXRpbGVCdWZmZXIobV92b2xhdGlsZURhdGEucmVsZWFzZSgpKTsK
KyAgICBlbHNlIAorICAgICAgICBtX3ZvbGF0aWxlRGF0YS5jbGVhcigpOworICAgIAorICAgIHJl
dHVybiBtX2RhdGE7IAorfQorCitib29sIENhY2hlZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUo
KSAKK3sKKyAgICBpZiAobV92b2xhdGlsZURhdGEpIHsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGEp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBjb25zdCBzaXplX3Qgdm9sYXRpbGVUaHJlc2hvbGQg
PSA0ICogNDA5NjsKKyAgICBpZiAobV9kYXRhLT5zaXplKCkgPCB2b2xhdGlsZVRocmVzaG9sZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIENhbid0IG1ha2UgYnVmZmVyIHZv
bGF0aWxlIGlmIGl0IGhhcyByZWZzIG90aGVuIHRoYW4gdGhpcy4KKyAgICBpZiAobV9kYXRhLT52
b2xhdGlsZUJ1ZmZlcigpICYmICFtX2RhdGEtPmhhc09uZVJlZigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKG1fZGF0YS0+dm9sYXRpbGVCdWZmZXIoKSkKKyAgICAgICAg
bV92b2xhdGlsZURhdGEuc2V0KG1fZGF0YS0+cmVsZWFzZVZvbGF0aWxlQnVmZmVyKCkpOworICAg
IGVsc2UKKyAgICAgICAgbV92b2xhdGlsZURhdGEuc2V0KFZvbGF0aWxlQnVmZmVyOjpjcmVhdGUo
bV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisgICAgaWYgKCFtX3ZvbGF0aWxlRGF0
YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fdm9sYXRpbGVEYXRhLT5tYWtl
Vm9sYXRpbGUoKTsKKyAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDYWNoZWRSZXNvdXJjZTo6aXNWb2xhdGlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dm9sYXRpbGVEYXRhICYmIG1fdm9sYXRpbGVEYXRhLT5pc1ZvbGF0aWxlKCk7Cit9CisKK2Jvb2wg
Q2FjaGVkUmVzb3VyY2U6Ondhc1ZvbGF0aWxlRGF0YVB1cmdlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdm9sYXRpbGVEYXRhICYmIG1fdm9sYXRpbGVEYXRhLT53YXNQdXJnZWQoKTsKK30KKwog
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAzODY4MCkKKysrIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCkBAIC0zOSw2ICs0
MCw3IEBAIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VI
YW5kbGVCYXNlOwogY2xhc3MgRG9jTG9hZGVyOwogY2xhc3MgUmVxdWVzdDsKK2NsYXNzIFZvbGF0
aWxlQnVmZmVyOwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENs
YXNzZXMgd2hvIHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKIC8vIGZyb20g
Q2FjaGVkUmVzb3VyY2VDbGllbnQsIHRvIGdldCB0aGUgZnVuY3Rpb24gY2FsbHMgaW4gY2FzZSB0
aGUgcmVxdWVzdGVkIGRhdGEgaGFzIGFycml2ZWQuCkBAIC0xNjQsMTEgKzE2NiwxNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0NhY2hlVmFsaWRhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZTsgfQogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICAKKyAgICBi
b29sIGlzVm9sYXRpbGUoKSBjb25zdDsKKyAgICBib29sIHdhc1ZvbGF0aWxlRGF0YVB1cmdlZCgp
IGNvbnN0OworICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWdu
ZWQpOwogICAgIHZvaWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOwogICAgIHZvaWQgZGlkQWNj
ZXNzRGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFtcCk7CiAKKyAgICBib29sIHRyeU1ha2VWb2xh
dGlsZSgpOworICAgIGJvb2wgdHJ5TWFrZU5vblZvbGF0aWxlKCk7CisgICAgCiAgICAgSGFzaENv
dW50ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudHM7CiAKICAgICBTdHJpbmcg
bV91cmw7CkBAIC0xNzcsNiArMTg1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVzb3VyY2VSZXNw
b25zZSBtX3Jlc3BvbnNlOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBP
d25QdHI8Vm9sYXRpbGVCdWZmZXI+IG1fdm9sYXRpbGVEYXRhOwogCiAgICAgVHlwZSBtX3R5cGU7
CiAgICAgU3RhdHVzIG1fc3RhdHVzOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCShyZXZp
c2lvbiAzODY4MCkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OmFkZENsaWVudChDYWNo
ZWRSZXNvdQogdm9pZCBDYWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVkKCkKIHsKICAgICBk
ZXN0cm95RGVjb2RlZERhdGEoKTsKKyAgICB0cnlNYWtlVm9sYXRpbGUoKTsKICAgICBtX2RlY29k
ZWREYXRhRGVsZXRpb25UaW1lci5zdG9wKCk7CiB9CiAKQEAgLTc5LDYgKzgwLDggQEAgU3RyaW5n
IENhY2hlZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAogCiBjb25zdCBTdHJpbmcmIENhY2hlZFNj
cmlwdDo6c2NyaXB0KCkKIHsKKyAgICBBU1NFUlQoIWlzVm9sYXRpbGUoKSk7CisKICAgICBpZiAo
IW1fc2NyaXB0ICYmIG1fZGF0YSkgewogICAgICAgICBtX3NjcmlwdCA9IG1fZW5jb2RpbmcuZGVj
b2RlKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKICAgICAgICAgc2V0RGVjb2RlZFNp
emUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDM4NjgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJWb2xhdGls
ZUJ1ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVk
QnVmZmVyKCkKQEAgLTQxLDYgKzQzLDEwIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKGNv
bnN0IHVuc2lnbmUKIHsKICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7CiB9CisgICAg
CitTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZmZXIoKQoreworfQogCiBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihWZWN0b3I8Y2hhcj4mIHZlY3RvcikK
IHsKQEAgLTQ5LDExICs1NSwyMiBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVm
ZmVyOjphCiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0Vm9sYXRpbGVCdWZmZXIoVm9sYXRpbGVCdWZm
ZXIqIHZvbGF0aWxlQnVmZmVyKSAKK3sgCisgICAgQVNTRVJUKCF2b2xhdGlsZUJ1ZmZlci0+aXNW
b2xhdGlsZSgpKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBjcmVhdGUoKTsK
KyAgICBidWZmZXItPm1fdm9sYXRpbGVCdWZmZXIuc2V0KHZvbGF0aWxlQnVmZmVyKTsKKyAgICBy
ZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKK30KKwogdW5zaWduZWQgU2hhcmVkQnVmZmVyOjpzaXpl
KCkgY29uc3QKIHsKICAgICBpZiAoaGFzUGxhdGZvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBw
bGF0Zm9ybURhdGFTaXplKCk7CiAgICAgCisgICAgaWYgKG1fdm9sYXRpbGVCdWZmZXIpCisgICAg
ICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLT5zaXplKCk7CisgICAgCiAgICAgcmV0dXJuIG1f
YnVmZmVyLnNpemUoKTsKIH0KIApAQCAtNjIsMTEgKzc5LDE4IEBAIGNvbnN0IGNoYXIqIFNoYXJl
ZEJ1ZmZlcjo6ZGF0YSgpIGNvbnN0CiAgICAgaWYgKGhhc1BsYXRmb3JtRGF0YSgpKQogICAgICAg
ICByZXR1cm4gcGxhdGZvcm1EYXRhKCk7CiAgICAgCisgICAgaWYgKG1fdm9sYXRpbGVCdWZmZXIp
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ZvbGF0aWxlQnVmZmVyLT5pc1ZvbGF0aWxlKCkpOworICAg
ICAgICByZXR1cm4gbV92b2xhdGlsZUJ1ZmZlci0+ZGF0YSgpOworICAgIH0KKyAgICAKICAgICBy
ZXR1cm4gbV9idWZmZXIuZGF0YSgpOwogfQogCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAgQVNTRVJUKCFtX3ZvbGF0aWxlQnVmZmVy
KTsKKwogICAgIG1heWJlVHJhbnNmZXJQbGF0Zm9ybURhdGEoKTsKICAgICAKICAgICBtX2J1ZmZl
ci5hcHBlbmQoZGF0YSwgbGVuKTsKQEAgLTc3LDYgKzEwMSw3IEBAIHZvaWQgU2hhcmVkQnVmZmVy
OjpjbGVhcigpCiAgICAgY2xlYXJQbGF0Zm9ybURhdGEoKTsKICAgICAKICAgICBtX2J1ZmZlci5j
bGVhcigpOworICAgIG1fdm9sYXRpbGVCdWZmZXIuY2xlYXIoKTsKIH0KIAogUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y29weSgpIGNvbnN0CkBAIC04NCw3ICsxMDksNiBA
QCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjCiAgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKTsKIH0KIAotCiAjaWYgIVBMQVRGT1JN
KENGKQogCiBpbmxpbmUgdm9pZCBTaGFyZWRCdWZmZXI6OmNsZWFyUGxhdGZvcm1EYXRhKCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMzg2ODApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIGNs
YXNzIE5TRGF0YTsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBW
b2xhdGlsZUJ1ZmZlcjsKIAogY2xhc3MgU2hhcmVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8
U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CkBAIC01NCw2ICs1Niw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYWRvcHRWZWN0b3IoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWb2xhdGlsZUJ1ZmZlcihWb2xhdGlsZUJ1ZmZlciog
YnVmZmVyKTsKKyAgICAKKyAgICB+U2hhcmVkQnVmZmVyKCk7CiAgICAgCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIE5TRGF0YSAqY3JlYXRlTlNEYXRhKCk7CkBAIC03Niw2ICs4MSw5IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb3B5KCkgY29uc3Q7CiAgICAgCisg
ICAgVm9sYXRpbGVCdWZmZXIqIHZvbGF0aWxlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV92b2xh
dGlsZUJ1ZmZlci5nZXQoKTsgfQorICAgIFZvbGF0aWxlQnVmZmVyKiByZWxlYXNlVm9sYXRpbGVC
dWZmZXIoKSB7IHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLnJlbGVhc2UoKTsgfQorICAgIAogcHJp
dmF0ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBTaGFyZWRCdWZmZXIoY29uc3QgY2hhcios
IGludCk7CkBAIC04Niw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybURh
dGEoKSBjb25zdDsKICAgICAKICAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7CisgICAgT3duUHRy
PFZvbGF0aWxlQnVmZmVyPiBtX3ZvbGF0aWxlQnVmZmVyOwogI2lmIFBMQVRGT1JNKENGKQogICAg
IFNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYpOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fY2ZE
YXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGlsZUJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vVm9sYXRpbGVCdWZmZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFZvbGF0aWxlQnVmZmVyX2gKKyNkZWZpbmUgVm9sYXRpbGVCdWZmZXJfaAorCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgVm9sYXRpbGVCdWZmZXIgOiBOb25jb3B5YWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgVm9sYXRpbGVCdWZmZXIqIGNyZWF0ZShj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgICAgIHN0YXRpYyBWb2xhdGlsZUJ1
ZmZlciogY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdikgeyByZXR1cm4gY3JlYXRlKHYuZGF0
YSgpLCB2LnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgICAgIH5Wb2xhdGlsZUJ1ZmZlcigpOwor
CisgICAgICAgIC8vIENhbGwgdHJ5TWFrZU5vblZvbGF0aWxlKCkgYW5kIGNoZWNrIHRoZSByZXR1
cm4gdmFsdWUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICAgICAgY29uc3QgY2hhciog
ZGF0YSgpIGNvbnN0OworICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBQdXJnZVByaW9yaXR5IHsgUHVyZ2VMYXN0LCBQ
dXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZhdWx0ID0gUHVyZ2VNaWRkbGUgfTsKKyAg
ICAgICAgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9wdXJn
ZVByaW9yaXR5OyB9CisgICAgICAgIHZvaWQgc2V0UHVyZ2VQcmlvcml0eShQdXJnZVByaW9yaXR5
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNWb2xhdGlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgIT0gTm9uVm9sYXRpbGU7IH0KKyAgICAgICAgYm9vbCB3YXNQdXJnZWQoKSBjb25zdDsK
KworICAgICAgICB2b2lkIG1ha2VWb2xhdGlsZSgpOworICAgICAgICBib29sIHRyeU1ha2VOb25W
b2xhdGlsZSgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBWb2xhdGlsZUJ1ZmZl
cihjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgCisgICAgICAgIGNoYXIqIG1fZGF0YTsK
KyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgUHVyZ2VQcmlvcml0eSBtX3B1cmdlUHJp
b3JpdHk7CisKKyAgICAgICAgZW51bSBTdGF0ZSB7IE5vblZvbGF0aWxlLCBWb2xhdGlsZSwgUHVy
Z2VkIH07CisgICAgICAgIG11dGFibGUgU3RhdGUgbV9zdGF0ZTsKKyAgICB9OworCisjaWYgIVBM
QVRGT1JNKERBUldJTikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICBpbmxpbmUg
Vm9sYXRpbGVCdWZmZXIqIFZvbGF0aWxlQnVmZmVyOjpjcmVhdGUoY29uc3QgY2hhciosIHNpemVf
dCkgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSBWb2xhdGlsZUJ1ZmZlcjo6flZvbGF0aWxlQnVm
ZmVyKCkgeyB9CisgICAgaW5saW5lIGNvbnN0IGNoYXIqIFZvbGF0aWxlQnVmZmVyOjpkYXRhKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIGlubGluZSB2b2lkIFZvbGF0aWxlQnVmZmVyOjpzZXRQ
dXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkpIHsgfQorICAgIGlubGluZSBib29sIFZvbGF0aWxl
QnVmZmVyOjp3YXNQdXJnZWQoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGlubGluZSBib29sIFZv
bGF0aWxlQnVmZmVyOjp0cnlNYWtlTm9uVm9sYXRpbGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAg
IGlubGluZSB2b2lkIFZvbGF0aWxlQnVmZmVyOjptYWtlTm9uVm9sYXRpbGUoKSB7IH0KKyNlbmRp
ZgorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVm
ZmVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVy
Q0YuY3BwCShyZXZpc2lvbiAzODY4MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVm
ZmVyQ0YuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJWb2xhdGlsZUJ1
ZmZlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKENGRGF0YVJlZiBjZkRhdGEpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Wb2xhdGls
ZUJ1ZmZlck1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9sYXRp
bGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVm9s
YXRpbGVCdWZmZXJNYWMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgorCisjaWZuZGVmIEJVSUxESU5HX09O
X1RJR0VSCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1p
blZvbGF0aWxlQnVmZmVyU2l6ZSA9IDQwOTY7IC8vIG9uZSBwYWdlCisgICAgCitWb2xhdGlsZUJ1
ZmZlcjo6Vm9sYXRpbGVCdWZmZXIoY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCisgICAgOiBtX2Rh
dGEoZGF0YSkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9wdXJnZVByaW9yaXR5KFB1cmdl
RGVmYXVsdCkKKyAgICAsIG1fc3RhdGUoTm9uVm9sYXRpbGUpCit7Cit9CisgICAgCitWb2xhdGls
ZUJ1ZmZlcjo6flZvbGF0aWxlQnVmZmVyKCkKK3sKKyAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFz
a19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBtX3NpemUp
OworfQorCitWb2xhdGlsZUJ1ZmZlciogVm9sYXRpbGVCdWZmZXI6OmNyZWF0ZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA8IG1pblZvbGF0aWxlQnVmZmVy
U2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgdm1fYWRkcmVzc190IGJ1ZmZlciA9
IDA7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigp
LCAmYnVmZmVyLCBzaXplLCBWTV9GTEFHU19QVVJHQUJMRSB8IFZNX0ZMQUdTX0FOWVdIRVJFKTsK
KworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICBpZiAocmV0ICE9IEtFUk5f
U1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXQgPSB2bV9jb3B5KG1hY2hfdGFz
a19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihkYXRhKSwgc2l6ZSwgYnVm
ZmVyKTsKKworICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICBpZiAocmV0ICE9
IEtFUk5fU1VDQ0VTUykgeworICAgICAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCks
IGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBu
ZXcgVm9sYXRpbGVCdWZmZXIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSwgc2l6ZSk7
Cit9CisKK3ZvaWQgVm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xhdGlsZSgpCit7ICAgCisgICAgaWYg
KG1fc3RhdGUgIT0gTm9uVm9sYXRpbGUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
aW50IHZvbGF0aWxlR3JvdXA7CisgICAgaWYgKG1fcHVyZ2VQcmlvcml0eSA9PSBQdXJnZUZpcnN0
KQorICAgICAgICB2b2xhdGlsZUdyb3VwID0gVk1fVk9MQVRJTEVfR1JPVVBfMDsKKyAgICBlbHNl
IGlmIChtX3B1cmdlUHJpb3JpdHkgPT0gUHVyZ2VNaWRkbGUpCisgICAgICAgIHZvbGF0aWxlR3Jv
dXAgPSBWTV9WT0xBVElMRV9HUk9VUF8zOworICAgIGVsc2UKKyAgICAgICAgdm9sYXRpbGVHcm91
cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzc7CisgICAgCisgICAgaW50IHN0YXRlID0gVk1fUFVSR0FC
TEVfVk9MQVRJTEUgfCB2b2xhdGlsZUdyb3VwOworICAgIGtlcm5fcmV0dXJuX3QgcmV0ID0gdm1f
cHVyZ2FibGVfY29udHJvbChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2Fk
ZHJlc3NfdD4obV9kYXRhKSwgVk1fUFVSR0FCTEVfU0VUX1NUQVRFLCAmc3RhdGUpOworCisgICAg
aWYgKHJldCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgLy8gSXMgdGhpcyBjb3JyZWN0Pwor
ICAgICAgICBtX3N0YXRlID0gUHVyZ2VkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9zdGF0ZSA9IFZvbGF0aWxlOworICAgIHJldHVybjsKK30KKworYm9vbCBWb2xhdGlsZUJ1ZmZl
cjo6dHJ5TWFrZU5vblZvbGF0aWxlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBOb25Wb2xhdGls
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fc3RhdGUgPT0gUHVyZ2VkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW50IHN0YXRlID0gVk1fUFVSR0FCTEVfTk9O
Vk9MQVRJTEU7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9wdXJnYWJsZV9jb250cm9sKG1h
Y2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBW
TV9QVVJHQUJMRV9TRVRfU1RBVEUsICZzdGF0ZSk7CisKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VD
Q0VTUykgeworICAgICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIG1fc3RhdGUgPSBQ
dXJnZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3N0YXRlID0gc3Rh
dGUgJiBWTV9QVVJHQUJMRV9FTVBUWSA/IFB1cmdlZCA6IE5vblZvbGF0aWxlOworICAgIHJldHVy
biBtX3N0YXRlID09IE5vblZvbGF0aWxlOworfQorICAgIAorYm9vbCBWb2xhdGlsZUJ1ZmZlcjo6
d2FzUHVyZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBOb25Wb2xhdGlsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXRlID09IFB1cmdlZCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpbnQgc3RhdGU7CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2
bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1f
YWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJMRV9HRVRfU1RBVEUsICZzdGF0ZSk7CisKKyAg
ICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/
CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAg
CisgICAgfQorCisgICAgaWYgKHN0YXRlICYgVk1fUFVSR0FCTEVfRU1QVFkpCisgICAgICAgIG1f
c3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIAorICAgIHJldHVybiBtX3N0YXRlID09IFB1cmdlZDsK
K30KKwordm9pZCBWb2xhdGlsZUJ1ZmZlcjo6c2V0UHVyZ2VQcmlvcml0eShQdXJnZVByaW9yaXR5
IHByaW9yaXR5KQoreworICAgIGlmIChwcmlvcml0eSA9PSBtX3B1cmdlUHJpb3JpdHkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3B1cmdlUHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBpZiAobV9z
dGF0ZSAhPSBWb2xhdGlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBOb25Wb2xh
dGlsZTsKKyAgICBtYWtlVm9sYXRpbGUoKTsKK30KKyAgICAKK2NvbnN0IGNoYXIqIFZvbGF0aWxl
QnVmZmVyOjpkYXRhKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb25Wb2xhdGls
ZSk7CisgICAgcmV0dXJuIG1fZGF0YTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIEJVSUxESU5H
X09OX1RJR0VSCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25371</attachid>
            <date>2008-11-21 19:13:31 -0800</date>
            <delta_ts>2008-11-23 21:24:56 -0800</delta_ts>
            <desc>this time with the build file changes too</desc>
            <filename>purgable-cache-9.patch</filename>
            <type>text/plain</type>
            <size>36861</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDgtMTEtMjEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNAorICAgICAgICBLZWVw
IGRlYWQgcmVzb3VyY3MgaW4gbWVtb3J5IGNhY2hlIGluIHB1cmdhYmxlIG1lbW9yeS4KKyAgICAg
ICAgCisgICAgICAgIE9TIFggMTAuNSBoYXMga2VybmVsIGZhY2lsaXR5IGZvciBwdXJnYWJsZSBt
ZW1vcnkgdGhhdCBhbGxvd3MgbWFya2luZyBtZW1vcnkKKyAgICAgICAgYXJlYXMgYXMgbGVzcyBp
bXBvcnRhbnQuIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBzeXN0ZW0gY2FuIHN0ZWFsIHBhZ2VzIHRo
YXQgaGF2ZQorICAgICAgICBiZWVuIG1hcmtlZCBwdXJnYWJsZSBmb3IgYmV0dGVyIHVzZXMgKGhv
cGVmdWxseSkuCisgICAgICAgIAorICAgICAgICBPbmx5IHJlc291cmNlcyBsYXJnZXIgdGhhbiAx
NktCIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHB1cmdhYmxlIG1lbW9yeS4KKworICAgICAgICAqIFdl
YkNvcmUuYmFzZS5leHA6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpyZXF1ZXN0VXNl
ckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlc291cmNlRm9yVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGU6OmdldFN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGU6OmR1bXBTdGF0cyk6CisgICAgICAgICogbG9hZGVyL0NhY2hlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6VHlwZVN0YXRpc3RpYzo6VHlwZVN0YXRpc3RpYyk6CisgICAgICAgICogbG9h
ZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NT
U3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
Q1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRSZXNvdXJjZTo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjp0cnlNYWtlVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2U6OmlzVm9sYXRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6Ondh
c1ZvbGF0aWxlRGF0YVB1cmdlZCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRTY3JpcHQ6OmFsbENsaWVudHNSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFNjcmlwdDo6c2NyaXB0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6flNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmFkb3B0Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6dm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyOjpyZWxlYXNlVm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL1ZvbGF0aWxlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRp
bGVCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNv
cmU6OlZvbGF0aWxlQnVmZmVyOjpwdXJnZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlZv
bGF0aWxlQnVmZmVyOjppc1ZvbGF0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVm
ZmVyOjp+Vm9sYXRpbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6
OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Ondhc1B1cmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjptYWtlTm9uVm9sYXRpbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
Vm9sYXRpbGVCdWZmZXJNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxl
QnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZl
cjo6flZvbGF0aWxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6Om1ha2VWb2xhdGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpWb2xhdGlsZUJ1ZmZlcjo6dHJ5TWFrZU5vblZvbGF0aWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Vm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3JpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Vm9sYXRpbGVCdWZmZXI6OmRhdGEpOgorCiAyMDA4LTExLTIxICBLZXZpbiBXYXR0ZXJz
ICA8a2V2aW53YXR0ZXJzQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZXZpbiBP
bGxpdmllci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM4Njg0KQorKysgV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgX19aTjdXZWJD
b3JlMTJJY29uRGF0YWJhc2U5c2V0Q2xpZW50RVBOUwogX19aTjdXZWJDb3JlMTJTY2hlZHVsZVBh
aXJDMUVQOU5TUnVuTG9vcFBLMTBfX0NGU3RyaW5nCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZl
cjEwd3JhcE5TRGF0YUVQNk5TRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNyZWF0
ZU5TRGF0YUV2CitfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlckQxRXYKIF9fWk43V2ViQ29yZTEy
VGV4dEVuY29kaW5nQzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3Ix
MXJhbmdlTGVuZ3RoRVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMjZy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRFaWliCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzg2ODQpCisrKyBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI4MCw2ICs0MjgwLDggQEAKIAkJRTRBRkQwMTAwREFGMzM1NTAwRjVGNTVDIC8qIFNWR1NN
SUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEFGRDAwQTBEQUYzMzU0MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuaCAqLzsgfTsKIAkJ
RTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU2MENGOTc0MTkwMEU5N0I5
OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07CiAJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAv
KiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi87IH07CisJ
CUU0RDY4Nzc3MEVEN0FFM0QwMDZFQTk3OCAvKiBWb2xhdGlsZUJ1ZmZlck1hYy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3NjBFRDdBRTNE
MDA2RUE5NzggLyogVm9sYXRpbGVCdWZmZXJNYWMuY3BwICovOyB9OworCQlFNEQ2ODc3OTBFRDdB
RTRGMDA2RUE5NzggLyogVm9sYXRpbGVCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBWb2xhdGls
ZUJ1ZmZlci5oICovOyB9OwogCQlFNEVFRkZDODBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0Nv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0RUVGRkM2MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICov
OyB9OwogCQlFNEVFRkZDOTBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEVFRkZDNzBE
MzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmggKi87IH07CiAJCUVEMDQ4QUJD
MDgzM0YxMzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDA0OEFCQjA4MzNGMTMyMDA2
RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiAqLzsgfTsKQEAgLTg5NTMsNiArODk1
NSw4IEBACiAJCUU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogUHJlbG9hZFNjYW5u
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlbG9hZFNjYW5u
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ0QUJFMTBENzU0MkYxMDBG
OTY4NjkgLyogUHJlbG9hZFNjYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJlbG9hZFNjYW5uZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENjg3
NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFZvbGF0aWxlQnVmZmVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZvbGF0aWxlQnVmZmVyTWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFZvbGF0aWxl
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZvbGF0aWxlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RUVGRkM2MEQzNDU1MEMwMDQ2OUE1
OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRFRUZGQzcwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQ29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQwNDhBQkIwODMzRjEzMjAwNkUxRTY3IC8qIHRl
eHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBwYXRoID0gdGV4dEFyZWFSZXNpemVDb3JuZXIu
dGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2ODUsNiArOTY4OSw3IEBACiAJ
CTY1ODJBMTQ4MDk5OTlENkMwMEJFRUI2RCAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBWb2xh
dGlsZUJ1ZmZlck1hYy5jcHAgKi8sCiAJCQkJQkNFNjU5RTUwRUE5MkZCMjAwN0U0NTMzIC8qIFRo
ZW1lTWFjLmggKi8sCiAJCQkJQkNFNjU5RTgwRUE5MkZGQTAwN0U0NTMzIC8qIFRoZW1lTWFjLm1t
ICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5t
bSAqLywKQEAgLTEzNDAyLDYgKzEzNDA3LDcgQEAKIAkJQkNGMUE1QkEwOTc4MzIwOTAwNjFBMTIz
IC8qIHBsYXRmb3JtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogVm9sYXRpbGVCdWZmZXIuaCAqLywKIAkJ
CQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2YgKi8sCiAJCQkJQjJBMDE1OTEwQUY2Q0Q1
MzAwNkJDRTBFIC8qIGdyYXBoaWNzICovLAogCQkJCTY1NkI4NEQ3MEFFQTFDRTkwMEEwOTVCNCAv
KiBuZXR3b3JrICovLApAQCAtMTYzNDIsNiArMTYzNDgsNyBAQAogCQkJCTA4NERCQUEyMEVEMzlE
MzYwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MDA4MTk3
MEVEM0IyREQwMEM1M0JDMCAvKiBXTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0FEMkY4ODBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0RDY4Nzc5MEVEN0FFNEYwMDZFQTk3OCAvKiBWb2xhdGlsZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xODI2OCw2ICsxODI3NSw3IEBACiAJCQkJMDgwMDgxOTYwRUQzQjJERDAwQzUz
QkMwIC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0Q0MwRTEw
RUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
QUQyRjg3MEVDODlEMDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlFNEQ2ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogVm9sYXRpbGVCdWZmZXJNYWMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAzODY4NCkKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMjUgKzk5LDE5IEBAIENhY2hlZFJl
c291cmNlKiBDYWNoZTo6cmVxdWVzdFJlc291cmNlKEQKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
CiAgICAgLy8gTG9vayB1cCB0aGUgcmVzb3VyY2UgaW4gb3VyIG1hcC4KLSAgICBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQodXJsLnN0cmluZygpKTsKLQotICAgIGlm
IChyZXNvdXJjZSkgewotICAgICAgICBpZiAoaXNQcmVsb2FkICYmICFyZXNvdXJjZS0+aXNQcmVs
b2FkZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoRnJhbWVMb2FkZXI6
OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFGcmFtZUxvYWRlcjo6Y2FuTG9hZCh1cmwsIFN0
cmluZygpLCBkb2NMb2FkZXItPmRvYygpKSkgewotICAgICAgICAgICAgRG9jdW1lbnQqIGRvYyA9
IGRvY0xvYWRlci0+ZG9jKCk7Ci0gICAgICAgICAgICBpZihkb2MgJiYgIWlzUHJlbG9hZCkKLSAg
ICAgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGRvYy0+ZnJh
bWUoKSwgcmVzb3VyY2UtPnVybCgpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEZyYW1lTG9hZGVyOjpyZXN0cmljdEFjY2Vzc1Rv
TG9jYWwoKSAmJiAhRnJhbWVMb2FkZXI6OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZG9jTG9hZGVy
LT5kb2MoKSkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2MgPSBkb2NMb2FkZXItPmRvYygp
OwotICAgICAgICAgICAgaWYoZG9jICYmICFpc1ByZWxvYWQpCi0gICAgICAgICAgICAgICAgRnJh
bWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2MtPmZyYW1lKCksIHVybC5zdHJpbmco
KSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCisgICAgQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlID0gcmVzb3VyY2VGb3JVUkwodXJsLnN0cmluZygpKTsKKyAgICAKKyAgICBp
ZiAocmVzb3VyY2UgJiYgaXNQcmVsb2FkICYmICFyZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKEZyYW1lTG9hZGVyOjpyZXN0cmljdEFjY2Vz
c1RvTG9jYWwoKSAmJiAhRnJhbWVMb2FkZXI6OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZG9jTG9h
ZGVyLT5kb2MoKSkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY0xvYWRlci0+ZG9jKCk7
CisgICAgICAgIGlmKGRvYyAmJiAhaXNQcmVsb2FkKQorICAgICAgICAgICAgRnJhbWVMb2FkZXI6
OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2MtPmZyYW1lKCksIHVybC5zdHJpbmcoKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAg
IC8vIFRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgogICAgICAgICByZXNv
dXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCk7CiAgICAgICAgIEFTU0VS
VChyZXNvdXJjZSk7CkBAIC0xNjUsNyArMTU5LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpy
ZXF1ZXN0UmVzb3VyY2UoRAogQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVlc3RVc2Vy
Q1NTU3R5bGVTaGVldChEb2NMb2FkZXIqIGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgY2hhcnNldCkKIHsKICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hl
ZXQ7Ci0gICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IG1fcmVzb3VyY2VzLmdldCh1
cmwpKSB7CisgICAgaWYgKENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IHJlc291cmNlRm9yVVJM
KHVybCkpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nLT50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6
OkNTU1N0eWxlU2hlZXQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgdXNlclNoZWV0
ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGV4aXN0aW5nKTsKQEAgLTI0NCw3
ICsyMzgsMTMgQEAgdm9pZCBDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlcwogCiBD
YWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQog
ewotICAgIHJldHVybiBtX3Jlc291cmNlcy5nZXQodXJsKTsKKyAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQodXJsKTsKKyAgICBpZiAocmVzb3VyY2UgJiYgIXJl
c291cmNlLT50cnlNYWtlTm9uVm9sYXRpbGUoKSkgeworICAgICAgICBBU1NFUlQoIXJlc291cmNl
LT5oYXNDbGllbnRzKCkpOworICAgICAgICBldmljdChyZXNvdXJjZSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICByZXR1cm4gcmVzb3VyY2U7CiB9CiAKIHVuc2lnbmVkIENhY2hlOjpk
ZWFkQ2FwYWNpdHkoKSBjb25zdCAKQEAgLTMxMSw2ICszMTEsMjUgQEAgdm9pZCBDYWNoZTo6cHJ1
bmVEZWFkUmVzb3VyY2VzKCkKIAogICAgIHVuc2lnbmVkIHRhcmdldFNpemUgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY2FwYWNpdHkgKiBjVGFyZ2V0UHJ1bmVQZXJjZW50YWdlKTsgLy8gQ3V0IGJ5
IGEgcGVyY2VudGFnZSB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgogICAgIGlu
dCBzaXplID0gbV9hbGxSZXNvdXJjZXMuc2l6ZSgpOworICAgIAorICAgIGlmICghbV9pblBydW5l
RGVhZFJlc291cmNlcykgeworICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbnkgcHVyZ2VkIHJl
c291cmNlcyB3ZSBjYW4gZXZpY3QuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogY3VycmVudCA9IG1fYWxsUmVzb3Vy
Y2VzW2ldLm1fdGFpbDsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3ByZXZJbkFsbFJlc291cmNl
c0xpc3Q7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPndhc1ZvbGF0aWxlRGF0YVB1cmdl
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC0+aGFzQ2xpZW50cygp
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LT5pc1ByZWxvYWRlZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZXZpY3QoY3VycmVudCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwcmV2OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0YXJnZXRTaXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgYm9vbCBjYW5TaHJpbmtMUlVMaXN0
cyA9IHRydWU7CiAgICAgbV9pblBydW5lRGVhZFJlc291cmNlcyA9IHRydWU7CiAgICAgZm9yIChp
bnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewpAQCAtNjMzLDQ3ICs2NTIsNjIgQEAgQ2Fj
aGU6OlN0YXRpc3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQogICAgIENhY2hlZFJlc291cmNl
TWFwOjppdGVyYXRvciBlID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChDYWNoZWRSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGkgIT0gZTsgKytpKSB7
CiAgICAgICAgIENhY2hlZFJlc291cmNlICpvID0gaS0+c2Vjb25kOworICAgICAgICBib29sIHB1
cmdlZCA9IG8tPndhc1ZvbGF0aWxlRGF0YVB1cmdlZCgpOworICAgICAgICBib29sIGlzVm9sYXRp
bGUgPSBvLT5pc1ZvbGF0aWxlKCkgJiYgIXB1cmdlZDsgCisgICAgICAgIGludCBwYWdlU2l6ZSA9
IChvLT5lbmNvZGVkU2l6ZSgpICsgNDA5NSkgJiB+NDA5NTsKICAgICAgICAgc3dpdGNoIChvLT50
eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CiAgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmNvdW50Kys7Ci0gICAgICAgICAgICAgICAg
c3RhdHMuaW1hZ2VzLnNpemUgKz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmlt
YWdlcy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAgIHN0
YXRzLmltYWdlcy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwog
ICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6
ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5wdXJnYWJsZVNpemUgKz0gaXNWb2xh
dGlsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAgICAgICAgICAgICBzdGF0cy5pbWFnZXMucHVyZ2Vk
U2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgICAg
ICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBz
dGF0cy5jc3NTdHlsZVNoZWV0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBz
dGF0cy5jc3NTdHlsZVNoZWV0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAg
ICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVu
dHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMuY3NzU3R5bGVTaGVl
dHMuZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0
cy5jc3NTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDog
MDsKKyAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplICs9IHB1
cmdlZCA/IHBhZ2VTaXplIDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgogICAgICAgICAgICAgICAgIHN0YXRzLnNj
cmlwdHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLnNpemUgKz0gby0+
c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuc2l6ZSArPSBwdXJnZWQgPyAw
IDogby0+c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmxpdmVTaXplICs9
IG8tPmhhc0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMu
c2NyaXB0cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAg
IHN0YXRzLnNjcmlwdHMucHVyZ2FibGVTaXplICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7
CisgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBh
Z2VTaXplIDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKICAg
ICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgICAg
ICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0
cy54c2xTdHlsZVNoZWV0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0
cy54c2xTdHlsZVNoZWV0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAg
ICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMo
KSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMu
ZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54
c2xTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUgKz0gaXNWb2xhdGlsZSA/IHBhZ2VTaXplIDogMDsK
KyAgICAgICAgICAgICAgICBzdGF0cy54c2xTdHlsZVNoZWV0cy5wdXJnZWRTaXplICs9IHB1cmdl
ZCA/IHBhZ2VTaXplIDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAg
ICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgogICAgICAgICAgICAgICAg
IHN0YXRzLmZvbnRzLmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuc2l6ZSAr
PSBvLT5zaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMuc2l6ZSArPSBwdXJnZWQg
PyAwIDogby0+c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy5mb250cy5saXZlU2l6ZSAr
PSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRz
LmZvbnRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAg
c3RhdHMuZm9udHMucHVyZ2FibGVTaXplICs9IGlzVm9sYXRpbGUgPyBwYWdlU2l6ZSA6IDA7Cisg
ICAgICAgICAgICAgICAgc3RhdHMuZm9udHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6
ZSA6IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFhCTCkKICAgICAgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKICAgICAgICAgICAgICAgICBzdGF0cy54YmxE
b2NzLmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5zaXplICs9IG8tPnNp
emUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLnNpemUgKz0gcHVyZ2VkID8gMCA6
IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9jcy5saXZlU2l6ZSArPSBv
LT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLnhi
bERvY3MuZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBz
dGF0cy54YmxEb2NzLnB1cmdhYmxlU2l6ZSArPSBpc1ZvbGF0aWxlID8gcGFnZVNpemUgOiAwOwor
ICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3MucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdl
U2l6ZSA6IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgICAgIGRl
ZmF1bHQ6CkBAIC03MDIsMTYgKzczNiwxNiBAQCB2b2lkIENhY2hlOjpzZXREaXNhYmxlZChib29s
IGRpc2FibGVkKQogdm9pZCBDYWNoZTo6ZHVtcFN0YXRzKCkKIHsKICAgICBTdGF0aXN0aWNzIHMg
PSBnZXRTdGF0aXN0aWNzKCk7Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAl
LTExc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIik7
Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIi0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tIik7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiSW1h
Z2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBz
LmltYWdlcy5kZWNvZGVkU2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAl
MTFkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHlsZVNoZWV0cy5z
aXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRT
aXplKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUt
MTFzXG4iLCAiIiwgIkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiLCAi
UHVyZ2FibGVTaXplIiwgIlB1cmdlZFNpemUiKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUt
MTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFk
ICUxMWQgJTExZCAlMTFkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNp
emUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSwgcy5pbWFnZXMucHVy
Z2FibGVTaXplLCBzLmltYWdlcy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQg
JTExZCAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3Vu
dCwgcy5jc3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNz
c1N0eWxlU2hlZXRzLmRlY29kZWRTaXplLCBzLmNzc1N0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSwg
cy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplKTsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICBwcmlu
dGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRz
LmNvdW50LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUs
IHMueHNsU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAl
MTFkICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50
LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNs
U3R5bGVTaGVldHMuZGVjb2RlZFNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2FibGVTaXplLCBz
LnhzbFN0eWxlU2hlZXRzLnB1cmdlZFNpemUpOwogI2VuZGlmCi0gICAgcHJpbnRmKCIlLTExcyAl
MTFkICUxMWQgJTExZCAlMTFkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5z
Y3JpcHRzLnNpemUsIHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplKTsK
LSAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJGb250cyIsIHMuZm9u
dHMuY291bnQsIHMuZm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVk
U2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuXG4iLCAi
LS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0i
LCAiLS0tLS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQg
JTExZCAlMTFkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNp
emUsIHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplLCBzLnNjcmlwdHMu
cHVyZ2FibGVTaXplLCBzLnNjcmlwdHMucHVyZ2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAl
MTFkICUxMWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkZvbnRzIiwgcy5mb250cy5jb3VudCwg
cy5mb250cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29kZWRTaXplLCBzLmZv
bnRzLnB1cmdhYmxlU2l6ZSwgcy5mb250cy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFz
ICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG5cbiIsICItLS0tLS0tLS0tLSIs
ICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOwogfQogCiB2b2lkIENhY2hlOjpkdW1w
TFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAkocmV2aXNpb24gMzg2
ODQpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw5IEBAIHB1YmxpYzoKICAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGludCBsaXZlU2l6ZTsK
ICAgICAgICAgaW50IGRlY29kZWRTaXplOwotICAgICAgICBUeXBlU3RhdGlzdGljKCkgOiBjb3Vu
dCgwKSwgc2l6ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApIHsgfQorICAgICAgICBp
bnQgcHVyZ2FibGVTaXplOworICAgICAgICBpbnQgcHVyZ2VkU2l6ZTsKKyAgICAgICAgVHlwZVN0
YXRpc3RpYygpIDogY291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBkZWNvZGVkU2l6ZSgw
KSwgcHVyZ2FibGVTaXplKDApLCBwdXJnZWRTaXplKDApIHsgfQogICAgIH07CiAgICAgCiAgICAg
c3RydWN0IFN0YXRpc3RpY3MgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAJKHJldmlzaW9uIDM4Njg0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgQ2FjaGVkQ1NT
U3R5bGVTaGVldDo6YWRkQ2xpZW50KENhY2gKICAgICBpZiAoIW1fbG9hZGluZykKICAgICAgICAg
Yy0+c2V0Q1NTU3R5bGVTaGVldChtX3VybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwg
dGhpcyk7CiB9CisgICAgCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmFsbENsaWVudHNSZW1v
dmVkKCkKK3sKKyAgICB0cnlNYWtlVm9sYXRpbGUoKTsKK30KIAogdm9pZCBDYWNoZWRDU1NTdHls
ZVNoZWV0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKIHsKQEAgLTY4LDYgKzczLDgg
QEAgU3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6OmVuY29kaW5nKCkgYwogICAgIAogY29uc3Qg
U3RyaW5nIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlw
ZSkgY29uc3QgCiB7IAorICAgIEFTU0VSVCghaXNWb2xhdGlsZSgpKTsKKwogICAgIGlmICghbV9k
YXRhIHx8IG1fZGF0YS0+aXNFbXB0eSgpIHx8ICFjYW5Vc2VTaGVldChlbmZvcmNlTUlNRVR5cGUp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2xvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAzODY4NCkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyBzaGVldFRleHQoYm9vbCBlbmZvcmNl
TUlNRVR5cGUgPSB0cnVlKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2xpZW50
KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQg
YWxsQ2xpZW50c1JlbW92ZWQoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5jb2Rpbmco
Y29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAzODY4NCkKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCB2
b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltCiB7CiAgICAgQVNTRVJUKCFo
YXNDbGllbnRzKCkpOwogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgIHRyeU1ha2VWb2xh
dGlsZSgpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpsb2FkKERvY0xvYWRlciogZG9jTG9hZGVy
KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gMzg2ODQpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNsdWRlICJWb2xhdGlsZUJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTMxNSw0ICszMTYsNTUgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6bXVzdFJldmFsaWRhdGUo
Q2FjaAogICAgIHJldHVybiBpc0V4cGlyZWQoKSB8fCBjYWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNv
bnRhaW5zKCJuby1jYWNoZSIpOwogfQogCitib29sIENhY2hlZFJlc291cmNlOjp0cnlNYWtlTm9u
Vm9sYXRpbGUoKSAKK3sgCisgICAgaWYgKG1fZGF0YSB8fCAhbV92b2xhdGlsZURhdGEpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3ZvbGF0aWxlRGF0YS0+dHJ5TWFrZU5vblZvbGF0
aWxlKCkpCisgICAgICAgIG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRWb2xhdGlsZUJ1ZmZl
cihtX3ZvbGF0aWxlRGF0YS5yZWxlYXNlKCkpOworICAgIGVsc2UgCisgICAgICAgIG1fdm9sYXRp
bGVEYXRhLmNsZWFyKCk7CisgICAgCisgICAgcmV0dXJuIG1fZGF0YTsgCit9CisKK2Jvb2wgQ2Fj
aGVkUmVzb3VyY2U6OnRyeU1ha2VWb2xhdGlsZSgpIAoreworICAgIGlmIChtX3ZvbGF0aWxlRGF0
YSkgeworICAgICAgICBBU1NFUlQoIW1fZGF0YSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGNv
bnN0IHNpemVfdCB2b2xhdGlsZVRocmVzaG9sZCA9IDQgKiA0MDk2OworICAgIGlmIChtX2RhdGEt
PnNpemUoKSA8IHZvbGF0aWxlVGhyZXNob2xkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgLy8gQ2FuJ3QgbWFrZSBidWZmZXIgdm9sYXRpbGUgaWYgaXQgaGFzIHJlZnMgb3RoZW4g
dGhhbiB0aGlzLgorICAgIGlmIChtX2RhdGEtPnZvbGF0aWxlQnVmZmVyKCkgJiYgIW1fZGF0YS0+
aGFzT25lUmVmKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9kYXRh
LT52b2xhdGlsZUJ1ZmZlcigpKQorICAgICAgICBtX3ZvbGF0aWxlRGF0YS5zZXQobV9kYXRhLT5y
ZWxlYXNlVm9sYXRpbGVCdWZmZXIoKSk7CisgICAgZWxzZQorICAgICAgICBtX3ZvbGF0aWxlRGF0
YS5zZXQoVm9sYXRpbGVCdWZmZXI6OmNyZWF0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXpl
KCkpKTsKKyAgICBpZiAoIW1fdm9sYXRpbGVEYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgbV92b2xhdGlsZURhdGEtPm1ha2VWb2xhdGlsZSgpOworICAgIG1fZGF0YS5jbGVh
cigpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENhY2hlZFJlc291cmNlOjppc1ZvbGF0
aWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92b2xhdGlsZURhdGEgJiYgbV92b2xhdGlsZURh
dGEtPmlzVm9sYXRpbGUoKTsKK30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6d2FzVm9sYXRpbGVE
YXRhUHVyZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92b2xhdGlsZURhdGEgJiYgbV92b2xh
dGlsZURhdGEtPndhc1B1cmdlZCgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNl
LmgJKHJldmlzaW9uIDM4Njg0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx0aW1lLmg+CiAKQEAgLTM5LDYgKzQwLDcgQEAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7CiBjbGFzcyBEb2NMb2FkZXI7
CiBjbGFzcyBSZXF1ZXN0OworY2xhc3MgVm9sYXRpbGVCdWZmZXI7CiAKIC8vIEEgcmVzb3VyY2Ug
dGhhdCBpcyBoZWxkIGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBv
YmplY3Qgc2hvdWxkIGRlcml2ZQogLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudCwgdG8gZ2V0
IHRoZSBmdW5jdGlvbiBjYWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYXJyaXZl
ZC4KQEAgLTE2NCwxMSArMTY2LDE3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FjaGVWYWxpZGF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVG9SZXZhbGlkYXRlOyB9CiAgICAgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlVG9SZXZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVRvUmV2YWxpZGF0ZTsgfQogICAgIAorICAgIGJvb2wgaXNWb2xhdGlsZSgpIGNvbnN0OworICAg
IGJvb2wgd2FzVm9sYXRpbGVEYXRhUHVyZ2VkKCkgY29uc3Q7CisgICAgCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBzZXRFbmNvZGVkU2l6ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREZWNvZGVkU2l6
ZSh1bnNpZ25lZCk7CiAgICAgdm9pZCBkaWRBY2Nlc3NEZWNvZGVkRGF0YShkb3VibGUgdGltZVN0
YW1wKTsKIAorICAgIGJvb2wgdHJ5TWFrZVZvbGF0aWxlKCk7CisgICAgYm9vbCB0cnlNYWtlTm9u
Vm9sYXRpbGUoKTsKKyAgICAKICAgICBIYXNoQ291bnRlZFNldDxDYWNoZWRSZXNvdXJjZUNsaWVu
dCo+IG1fY2xpZW50czsKIAogICAgIFN0cmluZyBtX3VybDsKQEAgLTE3Nyw2ICsxODUsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIE93blB0cjxWb2xhdGlsZUJ1ZmZlcj4gbV92b2xh
dGlsZURhdGE7CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBTdGF0dXMgbV9zdGF0dXM7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDM4Njg0KQorKysgV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCB2b2lk
IENhY2hlZFNjcmlwdDo6YWRkQ2xpZW50KENhY2hlZFJlc291CiB2b2lkIENhY2hlZFNjcmlwdDo6
YWxsQ2xpZW50c1JlbW92ZWQoKQogewogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgIHRy
eU1ha2VWb2xhdGlsZSgpOwogICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0b3AoKTsK
IH0KIApAQCAtNzksNiArODAsOCBAQCBTdHJpbmcgQ2FjaGVkU2NyaXB0OjplbmNvZGluZygpIGNv
bnN0CiAKIGNvbnN0IFN0cmluZyYgQ2FjaGVkU2NyaXB0OjpzY3JpcHQoKQogeworICAgIEFTU0VS
VCghaXNWb2xhdGlsZSgpKTsKKwogICAgIGlmICghbV9zY3JpcHQgJiYgbV9kYXRhKSB7CiAgICAg
ICAgIG1fc2NyaXB0ID0gbV9lbmNvZGluZy5kZWNvZGUobV9kYXRhLT5kYXRhKCksIGVuY29kZWRT
aXplKCkpOwogICAgICAgICBzZXREZWNvZGVkU2l6ZShtX3NjcmlwdC5sZW5ndGgoKSAqIHNpemVv
ZihVQ2hhcikpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMzg2
ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKIAorI2luY2x1ZGUgIlZvbGF0aWxlQnVmZmVyLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoKQpAQCAtNDEsNiArNDMsMTAgQEAg
U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdW5zaWduZQogewogICAgIG1fYnVmZmVy
LmFwcGVuZChkYXRhLCBzaXplKTsKIH0KKyAgICAKK1NoYXJlZEJ1ZmZlcjo6flNoYXJlZEJ1ZmZl
cigpCit7Cit9CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0
VmVjdG9yKFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewpAQCAtNDksMTEgKzU1LDIyIEBAIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmEKICAgICByZXR1cm4gYnVmZmVyLnJl
bGVhc2UoKTsKIH0KIAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6YWRv
cHRWb2xhdGlsZUJ1ZmZlcihWb2xhdGlsZUJ1ZmZlciogdm9sYXRpbGVCdWZmZXIpIAoreyAKKyAg
ICBBU1NFUlQoIXZvbGF0aWxlQnVmZmVyLT5pc1ZvbGF0aWxlKCkpOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlciA9IGNyZWF0ZSgpOworICAgIGJ1ZmZlci0+bV92b2xhdGlsZUJ1ZmZl
ci5zZXQodm9sYXRpbGVCdWZmZXIpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQor
CiB1bnNpZ25lZCBTaGFyZWRCdWZmZXI6OnNpemUoKSBjb25zdAogewogICAgIGlmIChoYXNQbGF0
Zm9ybURhdGEoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YVNpemUoKTsKICAgICAKKyAg
ICBpZiAobV92b2xhdGlsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fdm9sYXRpbGVCdWZmZXIt
PnNpemUoKTsKKyAgICAKICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOwogfQogCkBAIC02Miwx
MSArNzksMTggQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICBp
ZiAoaGFzUGxhdGZvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKTsKICAg
ICAKKyAgICBpZiAobV92b2xhdGlsZUJ1ZmZlcikgeworICAgICAgICBBU1NFUlQoIW1fdm9sYXRp
bGVCdWZmZXItPmlzVm9sYXRpbGUoKSk7CisgICAgICAgIHJldHVybiBtX3ZvbGF0aWxlQnVmZmVy
LT5kYXRhKCk7CisgICAgfQorICAgIAogICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCk7CiB9CiAK
IHZvaWQgU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsK
KyAgICBBU1NFUlQoIW1fdm9sYXRpbGVCdWZmZXIpOworCiAgICAgbWF5YmVUcmFuc2ZlclBsYXRm
b3JtRGF0YSgpOwogICAgIAogICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhLCBsZW4pOwpAQCAtNzcs
NiArMTAxLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmNsZWFyKCkKICAgICBjbGVhclBsYXRmb3Jt
RGF0YSgpOwogICAgIAogICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgbV92b2xhdGlsZUJ1ZmZl
ci5jbGVhcigpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpj
b3B5KCkgY29uc3QKQEAgLTg0LDcgKzEwOSw2IEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBT
aGFyZWRCdWZmZXI6OmMKICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSgpLCBz
aXplKCkpOwogfQogCi0KICNpZiAhUExBVEZPUk0oQ0YpCiAKIGlubGluZSB2b2lkIFNoYXJlZEJ1
ZmZlcjo6Y2xlYXJQbGF0Zm9ybURhdGEoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCShy
ZXZpc2lvbiAzODY4NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTlNEYXRhOwogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFZvbGF0aWxlQnVmZmVyOwogCiBjbGFzcyBTaGFy
ZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoKQEAg
LTU0LDYgKzU2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gY3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBhZG9wdFZlY3RvcihWZWN0b3I8Y2hh
cj4mIHZlY3Rvcik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBhZG9wdFZv
bGF0aWxlQnVmZmVyKFZvbGF0aWxlQnVmZmVyKiBidWZmZXIpOworICAgIAorICAgIH5TaGFyZWRC
dWZmZXIoKTsKICAgICAKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNEYXRhICpjcmVhdGVOU0Rh
dGEoKTsKQEAgLTc2LDYgKzgxLDkgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGNvcHkoKSBjb25zdDsKICAgICAKKyAgICBWb2xhdGlsZUJ1ZmZlciogdm9sYXRpbGVC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3ZvbGF0aWxlQnVmZmVyLmdldCgpOyB9CisgICAgVm9s
YXRpbGVCdWZmZXIqIHJlbGVhc2VWb2xhdGlsZUJ1ZmZlcigpIHsgcmV0dXJuIG1fdm9sYXRpbGVC
dWZmZXIucmVsZWFzZSgpOyB9CisgICAgCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOwog
ICAgIFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgaW50KTsKQEAgLTg2LDYgKzk0LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtRGF0YSgpIGNvbnN0OwogICAgIAogICAgIFZlY3Rv
cjxjaGFyPiBtX2J1ZmZlcjsKKyAgICBPd25QdHI8Vm9sYXRpbGVCdWZmZXI+IG1fdm9sYXRpbGVC
dWZmZXI7CiAjaWYgUExBVEZPUk0oQ0YpCiAgICAgU2hhcmVkQnVmZmVyKENGRGF0YVJlZik7CiAg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9jZkRhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1ZvbGF0aWxlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGls
ZUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Wb2xhdGlsZUJ1ZmZl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVm9sYXRpbGVCdWZmZXJfaAorI2RlZmlu
ZSBWb2xhdGlsZUJ1ZmZlcl9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFz
cyBWb2xhdGlsZUJ1ZmZlciA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBWb2xhdGlsZUJ1ZmZlciogY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KTsKKyAgICAgICAgc3RhdGljIFZvbGF0aWxlQnVmZmVyKiBjcmVhdGUoY29uc3QgVmVjdG9yPGNo
YXI+JiB2KSB7IHJldHVybiBjcmVhdGUodi5kYXRhKCksIHYuc2l6ZSgpKTsgfQorICAgICAgICAK
KyAgICAgICAgflZvbGF0aWxlQnVmZmVyKCk7CisKKyAgICAgICAgLy8gQ2FsbCB0cnlNYWtlTm9u
Vm9sYXRpbGUoKSBhbmQgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWZvcmUgYWNjZXNzaW5nIHRo
ZSBkYXRhLgorICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgICAgIAorICAgICAgICBlbnVt
IFB1cmdlUHJpb3JpdHkgeyBQdXJnZUxhc3QsIFB1cmdlTWlkZGxlLCBQdXJnZUZpcnN0LCBQdXJn
ZURlZmF1bHQgPSBQdXJnZU1pZGRsZSB9OworICAgICAgICBQdXJnZVByaW9yaXR5IHB1cmdlUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiBtX3B1cmdlUHJpb3JpdHk7IH0KKyAgICAgICAgdm9pZCBz
ZXRQdXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkpOworICAgICAgICAKKyAgICAgICAgYm9vbCBp
c1ZvbGF0aWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb25Wb2xhdGlsZTsgfQorICAg
ICAgICBib29sIHdhc1B1cmdlZCgpIGNvbnN0OworCisgICAgICAgIHZvaWQgbWFrZVZvbGF0aWxl
KCk7CisgICAgICAgIGJvb2wgdHJ5TWFrZU5vblZvbGF0aWxlKCk7CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIFZvbGF0aWxlQnVmZmVyKGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsK
KyAgICAKKyAgICAgICAgY2hhciogbV9kYXRhOworICAgICAgICBzaXplX3QgbV9zaXplOworICAg
ICAgICBQdXJnZVByaW9yaXR5IG1fcHVyZ2VQcmlvcml0eTsKKworICAgICAgICBlbnVtIFN0YXRl
IHsgTm9uVm9sYXRpbGUsIFZvbGF0aWxlLCBQdXJnZWQgfTsKKyAgICAgICAgbXV0YWJsZSBTdGF0
ZSBtX3N0YXRlOworICAgIH07CisKKyNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCBkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKQorICAgIGlubGluZSBWb2xhdGlsZUJ1ZmZlciogVm9sYXRpbGVCdWZm
ZXI6OmNyZWF0ZShjb25zdCBjaGFyKiwgc2l6ZV90KSB7IHJldHVybiAwOyB9CisgICAgaW5saW5l
IFZvbGF0aWxlQnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIoKSB7IH0KKyAgICBpbmxpbmUgY29uc3Qg
Y2hhciogVm9sYXRpbGVCdWZmZXI6OmRhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgaW5s
aW5lIHZvaWQgVm9sYXRpbGVCdWZmZXI6OnNldFB1cmdlUHJpb3JpdHkoUHVyZ2VQcmlvcml0eSkg
eyB9CisgICAgaW5saW5lIGJvb2wgVm9sYXRpbGVCdWZmZXI6Ondhc1B1cmdlZCgpIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgaW5saW5lIGJvb2wgVm9sYXRpbGVCdWZmZXI6OnRyeU1ha2VOb25Wb2xh
dGlsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW5saW5lIHZvaWQgVm9sYXRpbGVCdWZmZXI6
Om1ha2VOb25Wb2xhdGlsZSgpIHsgfQorI2VuZGlmCisgICAgCit9CisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJKHJldmlzaW9uIDM4Njg0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKIAorI2luY2x1ZGUgIlZvbGF0aWxlQnVmZmVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGNmRGF0YSkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1ZvbGF0aWxlQnVmZmVyTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Wb2xhdGlsZUJ1ZmZlck1hYy5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Wb2xhdGlsZUJ1ZmZlck1hYy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlZvbGF0aWxlQnVm
ZmVyLmgiCisKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKworI2luY2x1ZGUgPG1hY2gvbWFj
aC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK3N0YXRpYyBjb25zdCBzaXplX3QgbWluVm9sYXRpbGVCdWZmZXJTaXplID0gNDA5Njsg
Ly8gb25lIHBhZ2UKKyAgICAKK1ZvbGF0aWxlQnVmZmVyOjpWb2xhdGlsZUJ1ZmZlcihjaGFyKiBk
YXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fZGF0YShkYXRhKQorICAgICwgbV9zaXplKHNpemUp
CisgICAgLCBtX3B1cmdlUHJpb3JpdHkoUHVyZ2VEZWZhdWx0KQorICAgICwgbV9zdGF0ZShOb25W
b2xhdGlsZSkKK3sKK30KKyAgICAKK1ZvbGF0aWxlQnVmZmVyOjp+Vm9sYXRpbGVCdWZmZXIoKQor
eworICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KG1fZGF0YSksIG1fc2l6ZSk7Cit9CisKK1ZvbGF0aWxlQnVmZmVyKiBWb2xh
dGlsZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAg
IGlmIChzaXplIDwgbWluVm9sYXRpbGVCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICB2bV9hZGRyZXNzX3QgYnVmZmVyID0gMDsKKyAgICBrZXJuX3JldHVybl90IHJldCA9
IHZtX2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksICZidWZmZXIsIHNpemUsIFZNX0ZMQUdTX1BV
UkdBQkxFIHwgVk1fRkxBR1NfQU5ZV0hFUkUpOworCisgICAgQVNTRVJUKHJldCA9PSBLRVJOX1NV
Q0NFU1MpOworICAgIGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldCA9IHZtX2NvcHkobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KGRhdGEpLCBzaXplLCBidWZmZXIpOworCisgICAgQVNTRVJUKHJldCA9PSBL
RVJOX1NVQ0NFU1MpOworICAgIGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIHZt
X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBWb2xhdGlsZUJ1ZmZlcihyZWludGVycHJl
dF9jYXN0PGNoYXIqPihidWZmZXIpLCBzaXplKTsKK30KKwordm9pZCBWb2xhdGlsZUJ1ZmZlcjo6
bWFrZVZvbGF0aWxlKCkKK3sgICAKKyAgICBpZiAobV9zdGF0ZSAhPSBOb25Wb2xhdGlsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpbnQgdm9sYXRpbGVHcm91cDsKKyAgICBpZiAo
bV9wdXJnZVByaW9yaXR5ID09IFB1cmdlRmlyc3QpCisgICAgICAgIHZvbGF0aWxlR3JvdXAgPSBW
TV9WT0xBVElMRV9HUk9VUF8wOworICAgIGVsc2UgaWYgKG1fcHVyZ2VQcmlvcml0eSA9PSBQdXJn
ZU1pZGRsZSkKKyAgICAgICAgdm9sYXRpbGVHcm91cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzM7Cisg
ICAgZWxzZQorICAgICAgICB2b2xhdGlsZUdyb3VwID0gVk1fVk9MQVRJTEVfR1JPVVBfNzsKKyAg
ICAKKyAgICBpbnQgc3RhdGUgPSBWTV9QVVJHQUJMRV9WT0xBVElMRSB8IHZvbGF0aWxlR3JvdXA7
CisgICAga2Vybl9yZXR1cm5fdCByZXQgPSB2bV9wdXJnYWJsZV9jb250cm9sKG1hY2hfdGFza19z
ZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihtX2RhdGEpLCBWTV9QVVJHQUJM
RV9TRVRfU1RBVEUsICZzdGF0ZSk7CisKKyAgICBpZiAocmV0ICE9IEtFUk5fU1VDQ0VTUykgewor
ICAgICAgICAvLyBJcyB0aGlzIGNvcnJlY3Q/CisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N0YXRlID0gVm9sYXRpbGU7CisgICAgcmV0
dXJuOworfQorCitib29sIFZvbGF0aWxlQnVmZmVyOjp0cnlNYWtlTm9uVm9sYXRpbGUoKQorewor
ICAgIGlmIChtX3N0YXRlID09IE5vblZvbGF0aWxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobV9zdGF0ZSA9PSBQdXJnZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpbnQgc3RhdGUgPSBWTV9QVVJHQUJMRV9OT05WT0xBVElMRTsKKyAgICBrZXJuX3JldHVybl90
IHJldCA9IHZtX3B1cmdhYmxlX2NvbnRyb2wobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2bV9hZGRyZXNzX3Q+KG1fZGF0YSksIFZNX1BVUkdBQkxFX1NFVF9TVEFURSwgJnN0YXRl
KTsKKworICAgIGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8vIElzIHRoaXMg
Y29ycmVjdD8KKyAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIG1fc3RhdGUgPSBzdGF0ZSAmIFZNX1BVUkdBQkxFX0VNUFRZID8gUHVy
Z2VkIDogTm9uVm9sYXRpbGU7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gTm9uVm9sYXRpbGU7Cit9
CisgICAgCitib29sIFZvbGF0aWxlQnVmZmVyOjp3YXNQdXJnZWQoKSBjb25zdAoreworICAgIGlm
IChtX3N0YXRlID09IE5vblZvbGF0aWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fc3RhdGUgPT0gUHVyZ2VkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGludCBzdGF0
ZTsKKyAgICBrZXJuX3JldHVybl90IHJldCA9IHZtX3B1cmdhYmxlX2NvbnRyb2wobWFjaF90YXNr
X3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KG1fZGF0YSksIFZNX1BVUkdB
QkxFX0dFVF9TVEFURSwgJnN0YXRlKTsKKworICAgIGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7
CisgICAgICAgIC8vIElzIHRoaXMgY29ycmVjdD8KKyAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsK
KyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICB9CisKKyAgICBpZiAoc3RhdGUgJiBW
TV9QVVJHQUJMRV9FTVBUWSkKKyAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsKKyAgICAgICAgCisg
ICAgcmV0dXJuIG1fc3RhdGUgPT0gUHVyZ2VkOworfQorCit2b2lkIFZvbGF0aWxlQnVmZmVyOjpz
ZXRQdXJnZVByaW9yaXR5KFB1cmdlUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgaWYgKHByaW9y
aXR5ID09IG1fcHVyZ2VQcmlvcml0eSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHVyZ2VQcmlv
cml0eSA9IHByaW9yaXR5OworICAgIGlmIChtX3N0YXRlICE9IFZvbGF0aWxlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdGF0ZSA9IE5vblZvbGF0aWxlOworICAgIG1ha2VWb2xhdGlsZSgpOwor
fQorICAgIAorY29uc3QgY2hhciogVm9sYXRpbGVCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAg
IEFTU0VSVChtX3N0YXRlID09IE5vblZvbGF0aWxlKTsKKyAgICByZXR1cm4gbV9kYXRhOworfQor
ICAgIAorfQorCisjZW5kaWYgLy8gQlVJTERJTkdfT05fVElHRVIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25410</attachid>
            <date>2008-11-23 21:24:56 -0800</date>
            <delta_ts>2008-11-24 17:14:22 -0800</delta_ts>
            <desc>updated with Geoff&apos;s comments plus some other fixes</desc>
            <filename>purgable-cache-11.patch</filename>
            <type>text/plain</type>
            <size>40917</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODAgQEAKKzIwMDgtMTEtMjMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjIxNAorICAgICAgICBLZWVw
IGRlYWQgcmVzb3VyY3MgaW4gbWVtb3J5IGNhY2hlIGluIHB1cmdhYmxlIG1lbW9yeS4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzYzMzMwODg+CisgICAgICAgIAorICAgICAgICBPUyBYIDEwLjUg
aGFzIHB1cmdhYmxlIG1lbW9yeSBrZXJuZWwgZmFjaWxpdHkgdGhhdCBhbGxvd3MgbWFya2luZyBy
ZXNlcnZlZCBtZW1vcnkKKyAgICAgICAgYXJlYXMgYXMgbGVzcyBpbXBvcnRhbnQuIFVuZGVyIG1l
bW9yeSBwcmVzc3VyZSBzeXN0ZW0gY2FuIHN0ZWFsIHBhZ2VzIHRoYXQgaGF2ZQorICAgICAgICBi
ZWVuIG1hcmtlZCBwdXJnYWJsZSBmb3IgKGhvcGVmdWxseSkgYmV0dGVyIHVzZXMuIFRoaXMgaXMg
aWRlYWwgZm9yIGNhY2hlcy4KKyAgICAgICAgCisgICAgICAgIE9ubHkgcmVzb3VyY2VzIGxhcmdl
ciB0aGFuIDE2S0Igd2lsbCBiZSBtb3ZlZCB0byB0aGUgcHVyZ2FibGUgbWVtb3J5LgorCisgICAg
ICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogbG9hZGVyL0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJl
cXVlc3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVzb3Vy
Y2VGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6Z2V0U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZTo6ZHVtcFN0YXRzKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlOjpUeXBlU3RhdGlzdGljOjpUeXBlU3RhdGlzdGljKToKKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRDU1NTdHlsZVNoZWV0OjphbGxDbGllbnRzUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQpOgorICAgICAgICAqIGxvYWRlci9DYWNo
ZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjphZGRDbGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkSW1hZ2U6OmltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpp
bWFnZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmltYWdlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OmFkZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6
bWFrZVB1cmdhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjppc1B1cmdh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp3YXNQdXJnZWQpOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6OmRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRTY3JpcHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0OjphbGxDbGllbnRzUmVtb3ZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OnNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vUHVyZ2Fi
bGVCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1cmdhYmxlQnVmZmVyOjpzaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlB1cmdhYmxlQnVmZmVyOjopOgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2FibGVC
dWZmZXI6OnB1cmdlUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2FibGVCdWZmZXI6
OmlzUHVyZ2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2FibGVCdWZmZXI6On5QdXJnYWJs
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6ZGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6c2V0UHVyZ2VQcmlvcml0eSk6CisgICAgICAg
IChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6d2FzUHVyZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlB1cmdhYmxlQnVmZmVyOjptYWtlUHVyZ2FibGUpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6On5TaGFyZWRCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjphZG9wdFB1cmdhYmxlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlbGVhc2VQdXJnYWJsZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6Omhhc1B1cmdhYmxlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRC
dWZmZXJDRi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1B1cmdhYmxlQnVmZmVyTWFjLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6UHVyZ2FibGVCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2FibGVCdWZmZXI6On5QdXJnYWJsZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlB1cmdhYmxlQnVmZmVyOjptYWtlUHVyZ2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6
UHVyZ2FibGVCdWZmZXI6Ondhc1B1cmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1
ZmZlcjo6c2V0UHVyZ2VQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpQdXJnYWJsZUJ1ZmZl
cjo6ZGF0YSk6CisKIDIwMDgtMTEtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemlt
bWVybWFubkB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZy
ZXl0aGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gMzg2OTYpCisrKyBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsNyBAQCBfX1pON1dlYkNv
cmUxMkljb25EYXRhYmFzZTlzZXRDbGllbnRFUE5TCiBfX1pON1dlYkNvcmUxMlNjaGVkdWxlUGFp
ckMxRVA5TlNSdW5Mb29wUEsxMF9fQ0ZTdHJpbmcKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVy
MTB3cmFwTlNEYXRhRVA2TlNEYXRhCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRl
TlNEYXRhRXYKK19fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyRDFFdgogX19aTjdXZWJDb3JlMTJU
ZXh0RW5jb2RpbmdDMUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRvcjEx
cmFuZ2VMZW5ndGhFUEtOU181UmFuZ2VFYgogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IyNnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoRVBOU183RWxlbWVudEVpaWIKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODY5NikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00MjkyLDYgKzQyOTIsOCBAQAogCQlFNEFGRDAxMDBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01J
TEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QUZEMDBBMERBRjMzNTQwMEY1RjU1QyAvKiBTVkdTTUlMRWxlbWVudC5oICovOyB9OwogCQlF
NEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsgfTsKKwkJ
RTRENjg3NzcwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdhYmxlQnVmZmVyTWFjLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc2MEVEN0FFM0Qw
MDZFQTk3OCAvKiBQdXJnYWJsZUJ1ZmZlck1hYy5jcHAgKi87IH07CisJCUU0RDY4Nzc5MEVEN0FF
NEYwMDZFQTk3OCAvKiBQdXJnYWJsZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdhYmxl
QnVmZmVyLmggKi87IH07CiAJCUU0RUVGRkM4MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRFRUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi87
IH07CiAJCUU0RUVGRkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RUVGRkM3MEQz
NDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJRUQwNDhBQkMw
ODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEMDQ4QUJCMDgzM0YxMzIwMDZF
MUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmICovOyB9OwpAQCAtODk3Nyw2ICs4OTc5
LDggQEAKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBQcmVsb2FkU2Nhbm5l
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmVsb2FkU2Nhbm5l
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDRBQkUxMEQ3NTQyRjEwMEY5
Njg2OSAvKiBQcmVsb2FkU2Nhbm5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcmVsb2FkU2Nhbm5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ2ODc3
NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2FibGVCdWZmZXJNYWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVyZ2FibGVCdWZmZXJNYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2FibGVC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2FibGVCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRFRUZGQzYwRDM0NTUwQzAwNDY5QTU4
IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEVFRkZDNzBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXVkaW9Db25zdHJ1Y3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFRDA0OEFCQjA4MzNGMTMyMDA2RTFFNjcgLyogdGV4
dEFyZWFSZXNpemVDb3JuZXIudGlmZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IGltYWdlLnRpZmY7IHBhdGggPSB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50
aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc1Miw2ICs5NzU2LDcgQEAKIAkJ
CQk5MzVDNDc2RjA5QUM0RDczMDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50TWFjLm1tICov
LAogCQkJCUJDOTREMTA3MEMyNzRGODgwMDZCQzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSAq
LywKIAkJCQkwNjY4RTE4RTBBREQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFjLm1tICovLAor
CQkJCUU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnYWJsZUJ1ZmZlck1hYy5jcHAgKi8s
CiAJCQkJMUNFMjRGOTYwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAqLywK
IAkJCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLywKIAkJCQlC
QzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKQEAgLTEz
NDk3LDYgKzEzNTAyLDcgQEAKIAkJCQkwNjY4RTE4OTBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBN
ZW51LmggKi8sCiAJCQkJQUJDMTI4NzYwQjMzQUE2RDAwQzY5M0Q1IC8qIFBvcHVwTWVudUNsaWVu
dC5oICovLAogCQkJCUJDM0JFMTJBMEU5ODA5MkYwMDgzNTU4OCAvKiBQb3B1cE1lbnVTdHlsZS5o
ICovLAorCQkJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJnYWJsZUJ1ZmZlci5oICov
LAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlC
QzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4
Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCkBAIC0xNjM4Miw2
ICsxNjM4OCw3IEBACiAJCQkJMDg4MDdCN0YwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTFJlZnJlc2hF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODgwN0I4MTBFRDcwOUFCMDAzRjY5NzUgLyog
V01MU2V0dmFyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBRDJGODgwRUM4OUQwNzAw
OEFCMDAyIC8qIExpbmtIYXNoLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ2ODc3OTBFRDdBRTRG
MDA2RUE5NzggLyogUHVyZ2FibGVCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MEFFQzgy
MEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDgwQUVDODQwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwpAQCAtMTgzMTQsNiArMTgzMjEsNyBAQAogCQkJCTA4ODA3
QjdFMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwODgwN0I4MDBFRDcwOUFCMDAzRjY5NzUgLyogV01MU2V0dmFyRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0FEMkY4NzBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2gu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRENjg3NzcwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdh
YmxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4MEFFQzgxMEVEODcwOEIwMERG
NENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODBBRUM4
MzBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDM4Njk2KQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRp
YyBDYWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2EKICAgICByZXR1cm4gMDsKIH0KIAot
Q2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIsIENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0LCBib29sIGlzUHJlbG9hZCkKK0NhY2hlZFJlc291cmNlKiBDYWNoZTo6cmVx
dWVzdFJlc291cmNlKERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZXF1ZXN0
SXNQcmVsb2FkKQogewogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFs
LWNhc2UgYW4gZW1wdHkgVVJMPwogICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdv
IG9uIHdpdGggdGhlIGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPwpAQCAtOTksMjUg
Kzk5LDE5IEBAIENhY2hlZFJlc291cmNlKiBDYWNoZTo6cmVxdWVzdFJlc291cmNlKEQKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCiAgICAgLy8gTG9vayB1cCB0aGUgcmVzb3VyY2UgaW4gb3VyIG1h
cC4KLSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQodXJsLnN0
cmluZygpKTsKLQotICAgIGlmIChyZXNvdXJjZSkgewotICAgICAgICBpZiAoaXNQcmVsb2FkICYm
ICFyZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBpZiAoRnJhbWVMb2FkZXI6OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpICYmICFGcmFtZUxvYWRl
cjo6Y2FuTG9hZCh1cmwsIFN0cmluZygpLCBkb2NMb2FkZXItPmRvYygpKSkgewotICAgICAgICAg
ICAgRG9jdW1lbnQqIGRvYyA9IGRvY0xvYWRlci0+ZG9jKCk7Ci0gICAgICAgICAgICBpZihkb2Mg
JiYgIWlzUHJlbG9hZCkKLSAgICAgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxM
b2FkRmFpbGVkKGRvYy0+ZnJhbWUoKSwgcmVzb3VyY2UtPnVybCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEZyYW1lTG9hZGVy
OjpyZXN0cmljdEFjY2Vzc1RvTG9jYWwoKSAmJiAhRnJhbWVMb2FkZXI6OmNhbkxvYWQodXJsLCBT
dHJpbmcoKSwgZG9jTG9hZGVyLT5kb2MoKSkpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2Mg
PSBkb2NMb2FkZXItPmRvYygpOwotICAgICAgICAgICAgaWYoZG9jICYmICFpc1ByZWxvYWQpCi0g
ICAgICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2MtPmZy
YW1lKCksIHVybC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVzb3VyY2VGb3JVUkwodXJsLnN0cmlu
ZygpKTsKKyAgICAKKyAgICBpZiAocmVzb3VyY2UgJiYgcmVxdWVzdElzUHJlbG9hZCAmJiAhcmVz
b3VyY2UtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChG
cmFtZUxvYWRlcjo6cmVzdHJpY3RBY2Nlc3NUb0xvY2FsKCkgJiYgIUZyYW1lTG9hZGVyOjpjYW5M
b2FkKHVybCwgU3RyaW5nKCksIGRvY0xvYWRlci0+ZG9jKCkpKSB7CisgICAgICAgIERvY3VtZW50
KiBkb2MgPSBkb2NMb2FkZXItPmRvYygpOworICAgICAgICBpZiAoZG9jICYmICFyZXF1ZXN0SXNQ
cmVsb2FkKQorICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChk
b2MtPmZyYW1lKCksIHVybC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAgIC8vIFRoZSByZXNvdXJjZSBkb2VzIG5v
dCBleGlzdC4gQ3JlYXRlIGl0LgogICAgICAgICByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5
cGUsIHVybCwgY2hhcnNldCk7CiAgICAgICAgIEFTU0VSVChyZXNvdXJjZSk7CkBAIC0xNjUsNyAr
MTU5LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoRAogQ2FjaGVk
Q1NTU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChEb2NMb2FkZXIq
IGRvY0xvYWRlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsK
ICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQ7Ci0gICAgaWYgKENhY2hlZFJlc291
cmNlKiBleGlzdGluZyA9IG1fcmVzb3VyY2VzLmdldCh1cmwpKSB7CisgICAgaWYgKENhY2hlZFJl
c291cmNlKiBleGlzdGluZyA9IHJlc291cmNlRm9yVVJMKHVybCkpIHsKICAgICAgICAgaWYgKGV4
aXN0aW5nLT50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgdXNlclNoZWV0ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NT
U3R5bGVTaGVldCo+KGV4aXN0aW5nKTsKQEAgLTI0NCw3ICsyMzgsMTMgQEAgdm9pZCBDYWNoZTo6
cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlcwogCiBDYWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJl
c291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIHJldHVybiBtX3Jlc291cmNl
cy5nZXQodXJsKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5n
ZXQodXJsKTsKKyAgICBpZiAocmVzb3VyY2UgJiYgIXJlc291cmNlLT5tYWtlUHVyZ2FibGUoZmFs
c2UpKSB7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSk7CisgICAgICAg
IGV2aWN0KHJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBy
ZXNvdXJjZTsKIH0KIAogdW5zaWduZWQgQ2FjaGU6OmRlYWRDYXBhY2l0eSgpIGNvbnN0IApAQCAt
MzExLDYgKzMxMSwyNSBAQCB2b2lkIENhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQogCiAgICAg
dW5zaWduZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNU
YXJnZXRQcnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGlt
bWVkaWF0ZWx5IHBydW5pbmcgYWdhaW4uCiAgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5z
aXplKCk7CisgICAgCisgICAgaWYgKCFtX2luUHJ1bmVEZWFkUmVzb3VyY2VzKSB7CisgICAgICAg
IC8vIFNlZSBpZiB3ZSBoYXZlIGFueSBwdXJnZWQgcmVzb3VyY2VzIHdlIGNhbiBldmljdC4KKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIENhY2hl
ZFJlc291cmNlKiBjdXJyZW50ID0gbV9hbGxSZXNvdXJjZXNbaV0ubV90YWlsOworICAgICAgICAg
ICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJl
diA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudC0+d2FzUHVyZ2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFj
dXJyZW50LT5oYXNDbGllbnRzKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWN1cnJl
bnQtPmlzUHJlbG9hZGVkKCkpOworICAgICAgICAgICAgICAgICAgICBldmljdChjdXJyZW50KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRhcmdldFNpemUgJiYgbV9kZWFkU2l6
ZSA8PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBi
b29sIGNhblNocmlua0xSVUxpc3RzID0gdHJ1ZTsKICAgICBtX2luUHJ1bmVEZWFkUmVzb3VyY2Vz
ID0gdHJ1ZTsKICAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKSB7CkBAIC02
MzMsNDcgKzY1Miw2MiBAQCBDYWNoZTo6U3RhdGlzdGljcyBDYWNoZTo6Z2V0U3RhdGlzdGljcygp
CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsK
ICAgICBmb3IgKENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVn
aW4oKTsgaSAhPSBlOyArK2kpIHsKICAgICAgICAgQ2FjaGVkUmVzb3VyY2UgKm8gPSBpLT5zZWNv
bmQ7CisgICAgICAgIGJvb2wgcHVyZ2VkID0gby0+d2FzUHVyZ2VkKCk7CisgICAgICAgIGJvb2wg
cHVyZ2FibGUgPSBvLT5pc1B1cmdhYmxlKCkgJiYgIXB1cmdlZDsgCisgICAgICAgIGludCBwYWdl
U2l6ZSA9IChvLT5lbmNvZGVkU2l6ZSgpICsgNDA5NSkgJiB+NDA5NTsKICAgICAgICAgc3dpdGNo
IChvLT50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2U6CiAgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLmNvdW50Kys7Ci0gICAgICAgICAg
ICAgICAgc3RhdHMuaW1hZ2VzLnNpemUgKz0gby0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0
YXRzLmltYWdlcy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAg
ICAgIHN0YXRzLmltYWdlcy5saXZlU2l6ZSArPSBvLT5oYXNDbGllbnRzKCkgPyBvLT5zaXplKCkg
OiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNv
ZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmltYWdlcy5wdXJnYWJsZVNpemUgKz0g
cHVyZ2FibGUgPyBwYWdlU2l6ZSA6IDA7CisgICAgICAgICAgICAgICAgc3RhdHMuaW1hZ2VzLnB1
cmdlZFNpemUgKz0gcHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgogICAg
ICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuc2l6ZSArPSBvLT5zaXplKCk7CisgICAgICAgICAgICAg
ICAgc3RhdHMuY3NzU3R5bGVTaGVldHMuc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+c2l6ZSgpOyAK
ICAgICAgICAgICAgICAgICBzdGF0cy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6ZSArPSBvLT5oYXND
bGllbnRzKCkgPyBvLT5zaXplKCkgOiAwOwogICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxl
U2hlZXRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAgICAg
c3RhdHMuY3NzU3R5bGVTaGVldHMucHVyZ2FibGVTaXplICs9IHB1cmdhYmxlID8gcGFnZVNpemUg
OiAwOworICAgICAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLnB1cmdlZFNpemUgKz0g
cHVyZ2VkID8gcGFnZVNpemUgOiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CiAgICAgICAgICAgICAgICAgc3RhdHMu
c2NyaXB0cy5jb3VudCsrOwotICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMuc2l6ZSArPSBv
LT5zaXplKCk7CisgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5zaXplICs9IHB1cmdlZCA/
IDAgOiBvLT5zaXplKCk7IAogICAgICAgICAgICAgICAgIHN0YXRzLnNjcmlwdHMubGl2ZVNpemUg
Kz0gby0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAgICAgICBzdGF0
cy5zY3JpcHRzLmRlY29kZWRTaXplICs9IG8tPmRlY29kZWRTaXplKCk7CisgICAgICAgICAgICAg
ICAgc3RhdHMuc2NyaXB0cy5wdXJnYWJsZVNpemUgKz0gcHVyZ2FibGUgPyBwYWdlU2l6ZSA6IDA7
CisgICAgICAgICAgICAgICAgc3RhdHMuc2NyaXB0cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBh
Z2VTaXplIDogMDsKICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWFNMVCkKICAg
ICAgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CiAgICAgICAgICAg
ICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMuY291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0
cy54c2xTdHlsZVNoZWV0cy5zaXplICs9IG8tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0
cy54c2xTdHlsZVNoZWV0cy5zaXplICs9IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAogICAgICAg
ICAgICAgICAgIHN0YXRzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMo
KSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMu
ZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICAgICAgICAgICAgICBzdGF0cy54
c2xTdHlsZVNoZWV0cy5wdXJnYWJsZVNpemUgKz0gcHVyZ2FibGUgPyBwYWdlU2l6ZSA6IDA7Cisg
ICAgICAgICAgICAgICAgc3RhdHMueHNsU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSArPSBwdXJnZWQg
PyBwYWdlU2l6ZSA6IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKICAgICAgICAgICAgICAgICBz
dGF0cy5mb250cy5jb3VudCsrOwotICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLnNpemUgKz0g
by0+c2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRzLmZvbnRzLnNpemUgKz0gcHVyZ2VkID8g
MCA6IG8tPnNpemUoKTsgCiAgICAgICAgICAgICAgICAgc3RhdHMuZm9udHMubGl2ZVNpemUgKz0g
by0+aGFzQ2xpZW50cygpID8gby0+c2l6ZSgpIDogMDsKICAgICAgICAgICAgICAgICBzdGF0cy5m
b250cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0
YXRzLmZvbnRzLnB1cmdhYmxlU2l6ZSArPSBwdXJnYWJsZSA/IHBhZ2VTaXplIDogMDsKKyAgICAg
ICAgICAgICAgICBzdGF0cy5mb250cy5wdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDog
MDsKICAgICAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoWEJMKQogICAgICAgICAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6WEJMOgogICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3Mu
Y291bnQrKzsKLSAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLnNpemUgKz0gby0+c2l6ZSgp
OworICAgICAgICAgICAgICAgIHN0YXRzLnhibERvY3Muc2l6ZSArPSBwdXJnZWQgPyAwIDogby0+
c2l6ZSgpOyAKICAgICAgICAgICAgICAgICBzdGF0cy54YmxEb2NzLmxpdmVTaXplICs9IG8tPmhh
c0NsaWVudHMoKSA/IG8tPnNpemUoKSA6IDA7CiAgICAgICAgICAgICAgICAgc3RhdHMueGJsRG9j
cy5kZWNvZGVkU2l6ZSArPSBvLT5kZWNvZGVkU2l6ZSgpOworICAgICAgICAgICAgICAgIHN0YXRz
LnhibERvY3MucHVyZ2FibGVTaXplICs9IHB1cmdhYmxlID8gcGFnZVNpemUgOiAwOworICAgICAg
ICAgICAgICAgIHN0YXRzLnhibERvY3MucHVyZ2VkU2l6ZSArPSBwdXJnZWQgPyBwYWdlU2l6ZSA6
IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC03MDIsMTYgKzczNiwxNiBAQCB2b2lkIENhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2Fi
bGVkKQogdm9pZCBDYWNoZTo6ZHVtcFN0YXRzKCkKIHsKICAgICBTdGF0aXN0aWNzIHMgPSBnZXRT
dGF0aXN0aWNzKCk7Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xu
IiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIik7Ci0gICAg
cHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwgIi0tLS0tLS0tLS0tIiwg
Ii0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
Iik7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiSW1hZ2VzIiwg
cy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxpdmVTaXplLCBzLmltYWdl
cy5kZWNvZGVkU2l6ZSk7Ci0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4i
LCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHlsZVNoZWV0cy5zaXplLCBz
LmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRzLmRlY29kZWRTaXplKTsK
KyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG4i
LCAiIiwgIkNvdW50IiwgIlNpemUiLCAiTGl2ZVNpemUiLCAiRGVjb2RlZFNpemUiLCAiUHVyZ2Fi
bGVTaXplIiwgIlB1cmdlZFNpemUiKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUt
MTFzICUtMTFzICUtMTFzICUtMTFzXG4iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAi
LS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0i
LCAiLS0tLS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQg
JTExZCAlMTFkXG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMu
aW1hZ2VzLmxpdmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSwgcy5pbWFnZXMucHVyZ2FibGVT
aXplLCBzLmltYWdlcy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAl
MTFkICUxMWQgJTExZCAlMTFkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5j
c3NTdHlsZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxl
U2hlZXRzLmRlY29kZWRTaXplLCBzLmNzc1N0eWxlU2hlZXRzLnB1cmdhYmxlU2l6ZSwgcy5jc3NT
dHlsZVNoZWV0cy5wdXJnZWRTaXplKTsKICNpZiBFTkFCTEUoWFNMVCkKLSAgICBwcmludGYoIiUt
MTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50
LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNs
U3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUx
MWQgJTExZCAlMTFkICUxMWRcbiIsICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50LCBzLnhz
bFN0eWxlU2hlZXRzLnNpemUsIHMueHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNsU3R5bGVT
aGVldHMuZGVjb2RlZFNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2FibGVTaXplLCBzLnhzbFN0
eWxlU2hlZXRzLnB1cmdlZFNpemUpOwogI2VuZGlmCi0gICAgcHJpbnRmKCIlLTExcyAlMTFkICUx
MWQgJTExZCAlMTFkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRz
LnNpemUsIHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplKTsKLSAgICBw
cmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJGb250cyIsIHMuZm9udHMuY291
bnQsIHMuZm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSk7
Ci0gICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuXG4iLCAiLS0tLS0t
LS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0iKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWQgJTExZCAl
MTFkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUsIHMu
c2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplLCBzLnNjcmlwdHMucHVyZ2Fi
bGVTaXplLCBzLnNjcmlwdHMucHVyZ2VkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUx
MWQgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkZvbnRzIiwgcy5mb250cy5jb3VudCwgcy5mb250
cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRzLmRlY29kZWRTaXplLCBzLmZvbnRzLnB1
cmdhYmxlU2l6ZSwgcy5mb250cy5wdXJnZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFz
ICUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFzXG5cbiIsICItLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICIt
LS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOwogfQogCiB2b2lkIENhY2hlOjpkdW1wTFJVTGlz
dHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAkocmV2aXNpb24gMzg2OTYpCisr
KyBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw5IEBA
IHB1YmxpYzoKICAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGludCBsaXZlU2l6ZTsKICAgICAg
ICAgaW50IGRlY29kZWRTaXplOwotICAgICAgICBUeXBlU3RhdGlzdGljKCkgOiBjb3VudCgwKSwg
c2l6ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApIHsgfQorICAgICAgICBpbnQgcHVy
Z2FibGVTaXplOworICAgICAgICBpbnQgcHVyZ2VkU2l6ZTsKKyAgICAgICAgVHlwZVN0YXRpc3Rp
YygpIDogY291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBkZWNvZGVkU2l6ZSgwKSwgcHVy
Z2FibGVTaXplKDApLCBwdXJnZWRTaXplKDApIHsgfQogICAgIH07CiAgICAgCiAgICAgc3RydWN0
IFN0YXRpc3RpY3MgewpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDM4Njk2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIHZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6YWRkQ2xpZW50KENhY2gKICAgICBpZiAoIW1fbG9hZGluZykKICAgICAgICAgYy0+c2V0
Q1NTU3R5bGVTaGVldChtX3VybCwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwgdGhpcyk7
CiB9CisgICAgCit2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmFsbENsaWVudHNSZW1vdmVkKCkK
K3sKKyAgICBtYWtlUHVyZ2FibGUodHJ1ZSk7Cit9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVl
dDo6c2V0RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBjaHMpCiB7CkBAIC02OCw2ICs3Myw4IEBAIFN0
cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjplbmNvZGluZygpIGMKICAgICAKIGNvbnN0IFN0cmlu
ZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUpIGNv
bnN0IAogeyAKKyAgICBBU1NFUlQoIWlzUHVyZ2FibGUoKSk7CisKICAgICBpZiAoIW1fZGF0YSB8
fCBtX2RhdGEtPmlzRW1wdHkoKSB8fCAhY2FuVXNlU2hlZXQoZW5mb3JjZU1JTUVUeXBlKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0
eWxlU2hlZXQuaAkocmV2aXNpb24gMzg2OTYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NT
dHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVU
eXBlID0gdHJ1ZSkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGFkZENsaWVudChDYWNo
ZWRSZXNvdXJjZUNsaWVudCopOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGFsbENs
aWVudHNSZW1vdmVkKCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0
IFN0cmluZyYpOwogICAgICAgICB2aXJ0dWFsIFN0cmluZyBlbmNvZGluZygpIGNvbnN0OwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMzg2OTYpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDExIEBAIHZvaWQg
Q2FjaGVkSW1hZ2U6OmFkZENsaWVudChDYWNoZWRSZXNvdXIKIAogICAgIGlmIChtX2RlY29kZWRE
YXRhRGVsZXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2RlY29kZWREYXRhRGVsZXRp
b25UaW1lci5zdG9wKCk7CisgICAgCisgICAgaWYgKG1fZGF0YSAmJiAhbV9pbWFnZSAmJiAhbV9l
cnJvck9jY3VycmVkKSB7CisgICAgICAgIGNyZWF0ZUltYWdlKCk7CisgICAgICAgIG1faW1hZ2Ut
PnNldERhdGEobV9kYXRhLCB0cnVlKTsKKyAgICB9CiAKICAgICBpZiAobV9pbWFnZSAmJiAhbV9p
bWFnZS0+cmVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgYy0+aW1hZ2VDaGFuZ2VkKHRoaXMpOwpA
QCAtMTIwLDYgKzEyNSw4IEBAIHN0YXRpYyBJbWFnZSogbnVsbEltYWdlKCkKIAogSW1hZ2UqIENh
Y2hlZEltYWdlOjppbWFnZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKCFpc1B1cmdhYmxlKCkpOwor
CiAgICAgaWYgKG1fZXJyb3JPY2N1cnJlZCkKICAgICAgICAgcmV0dXJuIGJyb2tlbkltYWdlKCk7
CiAKQEAgLTE2MSw2ICsxNjgsOCBAQCBib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0CiAKIEludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9hdCBtdWx0aXBsaWVy
KSBjb25zdAogeworICAgIEFTU0VSVCghaXNQdXJnYWJsZSgpKTsKKwogICAgIGlmICghbV9pbWFn
ZSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKICAgICBpZiAobXVsdGlwbGllciA9PSAxLjBm
KQpAQCAtMTgwLDYgKzE4OSw4IEBAIEludFNpemUgQ2FjaGVkSW1hZ2U6OmltYWdlU2l6ZShmbG9h
dCBtdWwKIAogSW50UmVjdCBDYWNoZWRJbWFnZTo6aW1hZ2VSZWN0KGZsb2F0IG11bHRpcGxpZXIp
IGNvbnN0CiB7CisgICAgQVNTRVJUKCFpc1B1cmdhYmxlKCkpOworCiAgICAgaWYgKCFtX2ltYWdl
KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIGlmIChtdWx0aXBsaWVyID09IDEuMGYg
fHwgKCFtX2ltYWdlLT5oYXNSZWxhdGl2ZVdpZHRoKCkgJiYgIW1faW1hZ2UtPmhhc1JlbGF0aXZl
SGVpZ2h0KCkpKQpAQCAtMzA5LDcgKzMyMCwxMyBAQCB2b2lkIENhY2hlZEltYWdlOjpjaGVja05v
dGlmeSgpCiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCiB7Ci0gICAg
aWYgKG1faW1hZ2UgJiYgIW1fZXJyb3JPY2N1cnJlZCkKKyAgICBpZiAoIWhhc0NsaWVudHMoKSAm
JiAoIW1faW1hZ2UgfHwgbV9pbWFnZS0+aGFzT25lUmVmKCkpICYmICFtX2xvYWRpbmcpIHsKKyAg
ICAgICAgLy8gSW1hZ2UgcmVmcyB0aGUgZGF0YSBidWZmZXIgc28gd2Ugc2hvdWxkIG5vdCBtYWtl
IGl0IHB1cmdhYmxlIHdoaWxlIHRoZSBpbWFnZSBpcyBhbGl2ZS4gCisgICAgICAgIC8vIEludm9r
aW5nIGFkZENsaWVudCgpIHdpbGwgcmVjb25zdHJ1Y3QgdGhlIGltYWdlIG9iamVjdC4KKyAgICAg
ICAgbV9pbWFnZSA9IDA7CisgICAgICAgIHNldERlY29kZWRTaXplKDApOworICAgICAgICBtYWtl
UHVyZ2FibGUodHJ1ZSk7CisgICAgfSBlbHNlIGlmIChtX2ltYWdlICYmICFtX2Vycm9yT2NjdXJy
ZWQpCiAgICAgICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwogfQogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAzODY5NikKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU3lzdGVt
VGltZS5oIgorI2luY2x1ZGUgIlB1cmdhYmxlQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRMZWFrQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTM4LDYg
KzEzOSw4IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCoKIAogdm9p
ZCBDYWNoZWRSZXNvdXJjZTo6YWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50ICpjKQogewor
ICAgIEFTU0VSVCghaXNQdXJnYWJsZSgpKTsKKwogICAgIGlmIChtX3ByZWxvYWRSZXN1bHQgPT0g
UHJlbG9hZE5vdFJlZmVyZW5jZWQpIHsKICAgICAgICAgaWYgKGlzTG9hZGVkKCkpCiAgICAgICAg
ICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGU7CkBA
IC0zMTUsNCArMzE4LDYwIEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlKENh
Y2gKICAgICByZXR1cm4gaXNFeHBpcmVkKCkgfHwgY2FjaGVDb250cm9sRGlyZWN0aXZlcy5jb250
YWlucygibm8tY2FjaGUiKTsKIH0KIAorYm9vbCBDYWNoZWRSZXNvdXJjZTo6bWFrZVB1cmdhYmxl
KGJvb2wgcHVyZ2FibGUpIAoreyAKKyAgICBpZiAocHVyZ2FibGUpIHsKKyAgICAgICAgQVNTRVJU
KCFoYXNDbGllbnRzKCkpOworCisgICAgICAgIGlmIChtX3B1cmdhYmxlRGF0YSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX2RhdGEpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICAvLyBTaG91bGQgbm90IG1ha2UgYnVmZmVyIHB1cmdhYmxlIGlmIGl0IGhh
cyByZWZzIG90aGVuIHRoYW4gdGhpcyBzaW5jZSB3ZSBkb24ndCB3YW50IHR3byBjb3BpZXMuCisg
ICAgICAgIGlmICghbV9kYXRhLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFB1cmdhYmxlIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBp
biBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZSAoNEtCIGluIGNvbW1vbiBDUFVzKSBzbyBpdCBk
b2VzIG5vdCBtYWtlIHNlbnNlIGZvciB2ZXJ5IHNtYWxsIGJ1ZmZlcnMuCisgICAgICAgIGNvbnN0
IHNpemVfdCBwdXJnYWJsZVRocmVzaG9sZCA9IDQgKiA0MDk2OworICAgICAgICBpZiAobV9kYXRh
LT5zaXplKCkgPCBwdXJnYWJsZVRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX2RhdGEtPmhhc1B1cmdhYmxlQnVmZmVyKCkpIHsKKyAg
ICAgICAgICAgIG1fcHVyZ2FibGVEYXRhLnNldChtX2RhdGEtPnJlbGVhc2VQdXJnYWJsZUJ1ZmZl
cigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHVyZ2FibGVEYXRhLnNldChQ
dXJnYWJsZUJ1ZmZlcjo6Y3JlYXRlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSkpOwor
ICAgICAgICAgICAgaWYgKCFtX3B1cmdhYmxlRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fcHVyZ2FibGVEYXRhLT5tYWtl
UHVyZ2FibGUodHJ1ZSk7CisgICAgICAgIG1fZGF0YS5jbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fcHVyZ2FibGVEYXRhKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBBU1NFUlQoIW1fZGF0YSk7CisgICAgQVNTRVJUKCFoYXNDbGllbnRzKCkpOwor
CisgICAgaWYgKCFtX3B1cmdhYmxlRGF0YS0+bWFrZVB1cmdhYmxlKGZhbHNlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAKKworICAgIG1fZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6YWRvcHRQdXJnYWJs
ZUJ1ZmZlcihtX3B1cmdhYmxlRGF0YS5yZWxlYXNlKCkpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENhY2hlZFJlc291cmNlOjppc1B1cmdhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wdXJnYWJsZURhdGEgJiYgbV9wdXJnYWJsZURhdGEtPmlzUHVyZ2FibGUoKTsKK30KKworYm9v
bCBDYWNoZWRSZXNvdXJjZTo6d2FzUHVyZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wdXJn
YWJsZURhdGEgJiYgbV9wdXJnYWJsZURhdGEtPndhc1B1cmdlZCgpOworfQorCiB9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDM4Njk2KQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKQEAgLTM5LDYgKzQwLDcgQEAgY2xh
c3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2U7
CiBjbGFzcyBEb2NMb2FkZXI7CiBjbGFzcyBSZXF1ZXN0OworY2xhc3MgUHVyZ2FibGVCdWZmZXI7
CiAKIC8vIEEgcmVzb3VyY2UgdGhhdCBpcyBoZWxkIGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8g
d2FudCB0byB1c2UgdGhpcyBvYmplY3Qgc2hvdWxkIGRlcml2ZQogLy8gZnJvbSBDYWNoZWRSZXNv
dXJjZUNsaWVudCwgdG8gZ2V0IHRoZSBmdW5jdGlvbiBjYWxscyBpbiBjYXNlIHRoZSByZXF1ZXN0
ZWQgZGF0YSBoYXMgYXJyaXZlZC4KQEAgLTEyOSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBzZXRSZXF1ZXN0KFJlcXVlc3QqKTsKIAotICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgp
IGNvbnN0IHsgQVNTRVJUKCFtX3B1cmdhYmxlRGF0YSk7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0K
IAogICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25z
ZTsgfQpAQCAtMTY0LDExICsxNjYsMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYWNoZVZhbGlk
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2VUb1JldmFsaWRhdGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291
cmNlVG9SZXZhbGlkYXRlOyB9CiAgICAgCisgICAgYm9vbCBpc1B1cmdhYmxlKCkgY29uc3Q7Cisg
ICAgYm9vbCB3YXNQdXJnZWQoKSBjb25zdDsKKyAgICAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNl
dEVuY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERlY29kZWRTaXplKHVuc2lnbmVk
KTsKICAgICB2b2lkIGRpZEFjY2Vzc0RlY29kZWREYXRhKGRvdWJsZSB0aW1lU3RhbXApOwogCisg
ICAgYm9vbCBtYWtlUHVyZ2FibGUoYm9vbCBwdXJnYWJsZSk7CisgICAgCiAgICAgSGFzaENvdW50
ZWRTZXQ8Q2FjaGVkUmVzb3VyY2VDbGllbnQqPiBtX2NsaWVudHM7CiAKICAgICBTdHJpbmcgbV91
cmw7CkBAIC0xNzcsNiArMTg0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKKyAgICBPd25Q
dHI8UHVyZ2FibGVCdWZmZXI+IG1fcHVyZ2FibGVEYXRhOwogCiAgICAgVHlwZSBtX3R5cGU7CiAg
ICAgU3RhdHVzIG1fc3RhdHVzOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCShyZXZpc2lv
biAzODY5NikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDggKzYxLDcgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OmFkZENsaWVudChDYWNoZWRS
ZXNvdQogCiB2b2lkIENhY2hlZFNjcmlwdDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewotICAgIGRl
c3Ryb3lEZWNvZGVkRGF0YSgpOwotICAgIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyLnN0b3Ao
KTsKKyAgICBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAK
IHZvaWQgQ2FjaGVkU2NyaXB0OjpzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGNocykKQEAgLTc5
LDYgKzc4LDggQEAgU3RyaW5nIENhY2hlZFNjcmlwdDo6ZW5jb2RpbmcoKSBjb25zdAogCiBjb25z
dCBTdHJpbmcmIENhY2hlZFNjcmlwdDo6c2NyaXB0KCkKIHsKKyAgICBBU1NFUlQoIWlzUHVyZ2Fi
bGUoKSk7CisKICAgICBpZiAoIW1fc2NyaXB0ICYmIG1fZGF0YSkgewogICAgICAgICBtX3Njcmlw
dCA9IG1fZW5jb2RpbmcuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBlbmNvZGVkU2l6ZSgpKTsKICAg
ICAgICAgc2V0RGVjb2RlZFNpemUobV9zY3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsK
QEAgLTEyMCw2ICsxMjEsOCBAQCB2b2lkIENhY2hlZFNjcmlwdDo6ZGVzdHJveURlY29kZWREYXRh
KCkKIHsKICAgICBtX3NjcmlwdCA9IFN0cmluZygpOwogICAgIHNldERlY29kZWRTaXplKDApOwor
ICAgIGlmICghaGFzQ2xpZW50cygpKQorICAgICAgICBtYWtlUHVyZ2FibGUodHJ1ZSk7CiB9CiAK
IHZvaWQgQ2FjaGVkU2NyaXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxD
YWNoZWRTY3JpcHQ+KikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUHVyZ2FibGVCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1B1cmdhYmxlQnVmZmVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL1B1cmdhYmxlQnVmZmVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQdXJnYWJsZUJ1ZmZlcl9oCisjZGVmaW5lIFB1cmdhYmxlQnVmZmVyX2gK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFB1cmdhYmxlQnVmZmVyIDog
Tm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFB1cmdhYmxlQnVmZmVy
KiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90KTsKKyAgICAgICAgc3RhdGljIFB1cmdh
YmxlQnVmZmVyKiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2KSB7IHJldHVybiBjcmVhdGUo
di5kYXRhKCksIHYuc2l6ZSgpKTsgfQorICAgICAgICAKKyAgICAgICAgflB1cmdhYmxlQnVmZmVy
KCk7CisKKyAgICAgICAgLy8gQ2FsbCBtYWtlUHVyZ2FibGUodHJ1ZSkgYW5kIGNoZWNrIHRoZSBy
ZXR1cm4gdmFsdWUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICAgICAgY29uc3QgY2hh
ciogZGF0YSgpIGNvbnN0OworICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQorICAgICAgICAKKyAgICAgICAgZW51bSBQdXJnZVByaW9yaXR5IHsgUHVyZ2VMYXN0
LCBQdXJnZU1pZGRsZSwgUHVyZ2VGaXJzdCwgUHVyZ2VEZWZhdWx0ID0gUHVyZ2VNaWRkbGUgfTsK
KyAgICAgICAgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gbV9w
dXJnZVByaW9yaXR5OyB9CisgICAgICAgIHZvaWQgc2V0UHVyZ2VQcmlvcml0eShQdXJnZVByaW9y
aXR5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNQdXJnYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUgIT0gTm9uVm9sYXRpbGU7IH0KKyAgICAgICAgYm9vbCB3YXNQdXJnZWQoKSBjb25z
dDsKKworICAgICAgICBib29sIG1ha2VQdXJnYWJsZShib29sIHB1cmdhYmxlKTsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUHVyZ2FibGVCdWZmZXIoY2hhciogZGF0YSwgc2l6ZV90
KTsKKyAgICAKKyAgICAgICAgY2hhciogbV9kYXRhOworICAgICAgICBzaXplX3QgbV9zaXplOwor
ICAgICAgICBQdXJnZVByaW9yaXR5IG1fcHVyZ2VQcmlvcml0eTsKKworICAgICAgICBlbnVtIFN0
YXRlIHsgTm9uVm9sYXRpbGUsIFZvbGF0aWxlLCBQdXJnZWQgfTsKKyAgICAgICAgbXV0YWJsZSBT
dGF0ZSBtX3N0YXRlOworICAgIH07CisKKyNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCBkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKQorICAgIGlubGluZSBQdXJnYWJsZUJ1ZmZlciogUHVyZ2FibGVC
dWZmZXI6OmNyZWF0ZShjb25zdCBjaGFyKiwgc2l6ZV90KSB7IHJldHVybiAwOyB9CisgICAgaW5s
aW5lIFB1cmdhYmxlQnVmZmVyOjp+UHVyZ2FibGVCdWZmZXIoKSB7IH0KKyAgICBpbmxpbmUgY29u
c3QgY2hhciogUHVyZ2FibGVCdWZmZXI6OmRhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
aW5saW5lIHZvaWQgUHVyZ2FibGVCdWZmZXI6OnNldFB1cmdlUHJpb3JpdHkoUHVyZ2VQcmlvcml0
eSkgeyB9CisgICAgaW5saW5lIGJvb2wgUHVyZ2FibGVCdWZmZXI6Ondhc1B1cmdlZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgaW5saW5lIGJvb2wgUHVyZ2FibGVCdWZmZXI6Om1ha2VQ
dXJnYWJsZShib29sKSB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisgICAgCit9CisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMzg2OTYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
IAorI2luY2x1ZGUgIlB1cmdhYmxlQnVmZmVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoKQpAQCAtNDEsNiArNDMsMTAgQEAgU2hhcmVkQnVm
ZmVyOjpTaGFyZWRCdWZmZXIoY29uc3QgdW5zaWduZQogewogICAgIG1fYnVmZmVyLmFwcGVuZChk
YXRhLCBzaXplKTsKIH0KKyAgICAKK1NoYXJlZEJ1ZmZlcjo6flNoYXJlZEJ1ZmZlcigpCit7Cit9
CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKFZl
Y3RvcjxjaGFyPiYgdmVjdG9yKQogewpAQCAtNDksMTEgKzU1LDIyIEBAIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmEKICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsK
IH0KIAorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6YWRvcHRQdXJnYWJs
ZUJ1ZmZlcihQdXJnYWJsZUJ1ZmZlciogcHVyZ2FibGVCdWZmZXIpIAoreyAKKyAgICBBU1NFUlQo
IXB1cmdhYmxlQnVmZmVyLT5pc1B1cmdhYmxlKCkpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciA9IGNyZWF0ZSgpOworICAgIGJ1ZmZlci0+bV9wdXJnYWJsZUJ1ZmZlci5zZXQocHVy
Z2FibGVCdWZmZXIpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCiB1bnNpZ25l
ZCBTaGFyZWRCdWZmZXI6OnNpemUoKSBjb25zdAogewogICAgIGlmIChoYXNQbGF0Zm9ybURhdGEo
KSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YVNpemUoKTsKICAgICAKKyAgICBpZiAobV9w
dXJnYWJsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fcHVyZ2FibGVCdWZmZXItPnNpemUoKTsK
KyAgICAKICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOwogfQogCkBAIC02MiwxMSArNzksMTYg
QEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpkYXRhKCkgY29uc3QKICAgICBpZiAoaGFzUGxh
dGZvcm1EYXRhKCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEoKTsKICAgICAKKyAgICBp
ZiAobV9wdXJnYWJsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fcHVyZ2FibGVCdWZmZXItPmRh
dGEoKTsKKyAgICAKICAgICByZXR1cm4gbV9idWZmZXIuZGF0YSgpOwogfQogCiB2b2lkIFNoYXJl
ZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAgQVNTRVJU
KCFtX3B1cmdhYmxlQnVmZmVyKTsKKwogICAgIG1heWJlVHJhbnNmZXJQbGF0Zm9ybURhdGEoKTsK
ICAgICAKICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVuKTsKQEAgLTc3LDYgKzk5LDcgQEAg
dm9pZCBTaGFyZWRCdWZmZXI6OmNsZWFyKCkKICAgICBjbGVhclBsYXRmb3JtRGF0YSgpOwogICAg
IAogICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgbV9wdXJnYWJsZUJ1ZmZlci5jbGVhcigpOwog
fQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjb3B5KCkgY29uc3QK
QEAgLTg0LDYgKzEwNywxMSBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVy
OjpjCiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEoKSwgc2l6ZSgpKTsKIH0K
IAorUHVyZ2FibGVCdWZmZXIqIFNoYXJlZEJ1ZmZlcjo6cmVsZWFzZVB1cmdhYmxlQnVmZmVyKCkK
K3sgCisgICAgQVNTRVJUKGhhc09uZVJlZigpKTsgCisgICAgcmV0dXJuIG1fcHVyZ2FibGVCdWZm
ZXIucmVsZWFzZSgpOyAKK30KIAogI2lmICFQTEFURk9STShDRikKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAzODY5NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgY2xhc3MgTlNEYXRhOwog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFB1cmdhYmxlQnVmZmVy
OwogCiBjbGFzcyBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRCdWZmZXI+
IHsKIHB1YmxpYzoKQEAgLTU1LDYgKzU3LDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYWRvcHRWZWN0b3IoVmVjdG9yPGNoYXI+JiB2ZWN0b3IpOwog
ICAgIAorICAgIC8vIFRoZSBidWZmZXIgbXVzdCBiZSBpbiBub24tcHVyZ2FibGUgc3RhdGUgYmVm
b3JlIGFkb3B0ZWQgdG8gYSBTaGFyZWRCdWZmZXIuIAorICAgIC8vIEl0IHdpbGwgc3RheSB0aGF0
IHdheSB1bnRpbCByZWxlYXNlZC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGFkb3B0UHVyZ2FibGVCdWZmZXIoUHVyZ2FibGVCdWZmZXIqIGJ1ZmZlcik7CisgICAgCisgICAg
flNoYXJlZEJ1ZmZlcigpOworICAgIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBOU0RhdGEgKmNy
ZWF0ZU5TRGF0YSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gd3JhcE5T
RGF0YShOU0RhdGEgKmRhdGEpOwpAQCAtNzYsNiArODQsMTEgQEAgcHVibGljOgogCiAgICAgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNvcHkoKSBjb25zdDsKICAgICAKKyAgICBib29sIGhhc1B1
cmdhYmxlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9wdXJnYWJsZUJ1ZmZlci5nZXQoKTsgfQor
CisgICAgLy8gRW5zdXJlIHRoaXMgYnVmZmVyIGhhcyBubyBvdGhlciBjbGllbnRzIGJlZm9yZSBj
YWxsaW5nIHRoaXMuCisgICAgUHVyZ2FibGVCdWZmZXIqIHJlbGVhc2VQdXJnYWJsZUJ1ZmZlcigp
OworICAgIAogcHJpdmF0ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBTaGFyZWRCdWZmZXIo
Y29uc3QgY2hhciosIGludCk7CkBAIC04Niw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBo
YXNQbGF0Zm9ybURhdGEoKSBjb25zdDsKICAgICAKICAgICBWZWN0b3I8Y2hhcj4gbV9idWZmZXI7
CisgICAgT3duUHRyPFB1cmdhYmxlQnVmZmVyPiBtX3B1cmdhYmxlQnVmZmVyOwogI2lmIFBMQVRG
T1JNKENGKQogICAgIFNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYpOwogICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IG1fY2ZEYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJD
Ri5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5j
cHAJKHJldmlzaW9uIDM4Njk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJD
Ri5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAorI2luY2x1ZGUgIlB1cmdhYmxlQnVmZmVy
LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIo
Q0ZEYXRhUmVmIGNmRGF0YSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1B1cmdhYmxlQnVm
ZmVyTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9QdXJnYWJsZUJ1
ZmZlck1hYy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QdXJnYWJs
ZUJ1ZmZlck1hYy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorCisjaW5jbHVkZSAiUHVyZ2FibGVCdWZmZXIu
aCIKKworI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0YXRpYyBjb25zdCBzaXplX3QgbWluUHVy
Z2FibGVCdWZmZXJTaXplID0gNDA5NjsgLy8gb25lIHBhZ2UKKyAgICAKK1B1cmdhYmxlQnVmZmVy
OjpQdXJnYWJsZUJ1ZmZlcihjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICA6IG1fZGF0YShk
YXRhKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3B1cmdlUHJpb3JpdHkoUHVyZ2VEZWZh
dWx0KQorICAgICwgbV9zdGF0ZShOb25Wb2xhdGlsZSkKK3sKK30KKyAgICAKK1B1cmdhYmxlQnVm
ZmVyOjp+UHVyZ2FibGVCdWZmZXIoKQoreworICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KG1fZGF0YSksIG1fc2l6ZSk7Cit9
CisKK1B1cmdhYmxlQnVmZmVyKiBQdXJnYWJsZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IGNoYXIqIGRh
dGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplIDwgbWluUHVyZ2FibGVCdWZmZXJTaXpl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICB2bV9hZGRyZXNzX3QgYnVmZmVyID0gMDsK
KyAgICBrZXJuX3JldHVybl90IHJldCA9IHZtX2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksICZi
dWZmZXIsIHNpemUsIFZNX0ZMQUdTX1BVUkdBQkxFIHwgVk1fRkxBR1NfQU5ZV0hFUkUpOworCisg
ICAgQVNTRVJUKHJldCA9PSBLRVJOX1NVQ0NFU1MpOworICAgIGlmIChyZXQgIT0gS0VSTl9TVUND
RVNTKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldCA9IHZtX2NvcHkobWFjaF90YXNrX3Nl
bGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGRhdGEpLCBzaXplLCBidWZmZXIp
OworCisgICAgQVNTRVJUKHJldCA9PSBLRVJOX1NVQ0NFU1MpOworICAgIGlmIChyZXQgIT0gS0VS
Tl9TVUNDRVNTKSB7CisgICAgICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgYnVm
ZmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBQ
dXJnYWJsZUJ1ZmZlcihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIpLCBzaXplKTsKK30K
KworYm9vbCBQdXJnYWJsZUJ1ZmZlcjo6bWFrZVB1cmdhYmxlKGJvb2wgcHVyZ2FibGUpCit7Cisg
ICAgaWYgKHB1cmdhYmxlKSB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IE5vblZvbGF0aWxlKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaW50IHZvbGF0aWxlR3JvdXA7Cisg
ICAgICAgIGlmIChtX3B1cmdlUHJpb3JpdHkgPT0gUHVyZ2VGaXJzdCkKKyAgICAgICAgICAgIHZv
bGF0aWxlR3JvdXAgPSBWTV9WT0xBVElMRV9HUk9VUF8wOworICAgICAgICBlbHNlIGlmIChtX3B1
cmdlUHJpb3JpdHkgPT0gUHVyZ2VNaWRkbGUpCisgICAgICAgICAgICB2b2xhdGlsZUdyb3VwID0g
Vk1fVk9MQVRJTEVfR1JPVVBfNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdm9sYXRpbGVH
cm91cCA9IFZNX1ZPTEFUSUxFX0dST1VQXzc7CisgICAgICAgIAorICAgICAgICBpbnQgc3RhdGUg
PSBWTV9QVVJHQUJMRV9WT0xBVElMRSB8IHZvbGF0aWxlR3JvdXA7CisgICAgICAgIGtlcm5fcmV0
dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29udHJvbChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVy
cHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwgVk1fUFVSR0FCTEVfU0VUX1NUQVRFLCAm
c3RhdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHJldCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAg
ICAgICAgICAgIC8vIElmIHRoYXQgZmFpbGVkIHdlIGhhdmUgbm8gY2x1ZSB3aGF0IHN0YXRlIHdl
IGFyZSBpbiBzbyBhc3N1bWUgcHVyZ2VkLgorICAgICAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X3N0YXRlID0gVm9sYXRpbGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtX3N0YXRlID09IE5vblZvbGF0aWxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBQdXJnZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnQg
c3RhdGUgPSBWTV9QVVJHQUJMRV9OT05WT0xBVElMRTsKKyAgICBrZXJuX3JldHVybl90IHJldCA9
IHZtX3B1cmdhYmxlX2NvbnRyb2wobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KG1fZGF0YSksIFZNX1BVUkdBQkxFX1NFVF9TVEFURSwgJnN0YXRlKTsKKwor
ICAgIGlmIChyZXQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8vIElmIHRoYXQgZmFpbGVk
IHdlIGhhdmUgbm8gY2x1ZSB3aGF0IHN0YXRlIHdlIGFyZSBpbiBzbyBhc3N1bWUgcHVyZ2VkLgor
ICAgICAgICBtX3N0YXRlID0gUHVyZ2VkOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgbV9zdGF0ZSA9IHN0YXRlICYgVk1fUFVSR0FCTEVfRU1QVFkgPyBQdXJnZWQgOiBOb25W
b2xhdGlsZTsKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBOb25Wb2xhdGlsZTsKK30KKyAgICAKK2Jv
b2wgUHVyZ2FibGVCdWZmZXI6Ondhc1B1cmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc3RhdGUg
PT0gTm9uVm9sYXRpbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zdGF0ZSA9
PSBQdXJnZWQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IHN0YXRlOworICAgIGtl
cm5fcmV0dXJuX3QgcmV0ID0gdm1fcHVyZ2FibGVfY29udHJvbChtYWNoX3Rhc2tfc2VsZigpLCBy
ZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwgVk1fUFVSR0FCTEVfR0VUX1NU
QVRFLCAmc3RhdGUpOworCisgICAgaWYgKHJldCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAg
Ly8gSWYgdGhhdCBmYWlsZWQgd2UgaGF2ZSBubyBjbHVlIHdoYXQgc3RhdGUgd2UgYXJlIGluIHNv
IGFzc3VtZSBwdXJnZWQuCisgICAgICAgIG1fc3RhdGUgPSBQdXJnZWQ7CisgICAgICAgIHJldHVy
biB0cnVlOyAgICAgICAgCisgICAgfQorCisgICAgaWYgKHN0YXRlICYgVk1fUFVSR0FCTEVfRU1Q
VFkpIHsKKyAgICAgICAgbV9zdGF0ZSA9IFB1cmdlZDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUHVyZ2FibGVCdWZm
ZXI6OnNldFB1cmdlUHJpb3JpdHkoUHVyZ2VQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBpZiAo
cHJpb3JpdHkgPT0gbV9wdXJnZVByaW9yaXR5KQorICAgICAgICByZXR1cm47CisgICAgbV9wdXJn
ZVByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgaWYgKG1fc3RhdGUgIT0gVm9sYXRpbGUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gTm9uVm9sYXRpbGU7CisgICAgbWFrZVB1cmdhYmxl
KHRydWUpOworfQorICAgIAorY29uc3QgY2hhciogUHVyZ2FibGVCdWZmZXI6OmRhdGEoKSBjb25z
dAoreworICAgIEFTU0VSVChtX3N0YXRlID09IE5vblZvbGF0aWxlKTsKKyAgICByZXR1cm4gbV9k
YXRhOworfQorICAgIAorfQorCisjZW5kaWYgLy8gQlVJTERJTkdfT05fVElHRVIK
</data>
<flag name="review"
          id="11783"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>