<?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>21596</bug_id>
          
          <creation_ts>2008-10-14 12:58:23 -0700</creation_ts>
          <short_desc>WebCore::Cache should use parsed Pragma and Cache-Control headers</short_desc>
          <delta_ts>2008-11-05 18:00:44 -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>WebCore Misc.</component>
          <version>525.x (Safari 3.1)</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>http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21493</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95342</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-10-14 12:58:23 -0700</bug_when>
    <thetext>Currently the WebCore::Cache uses substring searches of Cache-Control headers to search for cache directives.  Instead, it should be parsing the headers and then checking for directives in the parsed structure.

This work was done under the auspices of Bug 21493, but is being moved to a separate bug for independent review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95374</commentid>
    <comment_count>1</comment_count>
      <attachid>24352</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-10-14 17:27:41 -0700</bug_when>
    <thetext>Created attachment 24352
Patch v1

Looking for feedback specifically on whether I should replace isControlCharacter(UChar) with !isASCIIPrintable().

I think I should make trimToNextSeparator(const String&amp;) inline as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95431</commentid>
    <comment_count>2</comment_count>
      <attachid>24352</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-10-15 13:19:23 -0700</bug_when>
    <thetext>Comment on attachment 24352
Patch v1

+void ResourceResponseBase::parsePragmaDirectives(PragmaDirectiveMap&amp; result) const
+{
+    lazyInit();
+void ResourceResponseBase::parseCacheControlDirectives(CacheControlDirectiveMap&amp; result) const
+{
+    lazyInit();

Would it make sense to save the parsed PragmaDirectiveMap and CacheControlDirectiveMap in the ResourceResponseBase? This way they would need to parsed only once.

+        const String directive = directives[i].first.lower();
+
+        Vector&lt;String&gt; directiveValues;
+        if ((directive == &quot;private&quot; || directive == &quot;no-cache&quot;) 

This could probably use equalIgnoringCase() instead of calling lower() and make directive a reference. The results already end up in a case folding hash.

+PassRefPtr&lt;StringImpl&gt; StringImpl::removeCharacters(CharacterMatchFunctionPtr findMatch)

This functions makes a copy even if nothing changes. Could that be avoided?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95440</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-10-15 13:34:45 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=24352) [edit]
&gt; Patch v1
&gt; 
&gt; Looking for feedback specifically on whether I should replace
&gt; isControlCharacter(UChar) with !isASCIIPrintable().

Spec says control characters are ASCII 0-31 and 127 (DEL).  Need to fix the method.

&gt; I think I should make trimToNextSeparator(const String&amp;) inline as well.

Will do this.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96281</commentid>
    <comment_count>4</comment_count>
      <attachid>24585</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-10-22 19:15:31 -0700</bug_when>
    <thetext>Created attachment 24585
Patch v2

(In reply to comment #2)
&gt; (From update of attachment 24352 [edit])
&gt; +void ResourceResponseBase::parsePragmaDirectives(PragmaDirectiveMap&amp; result)
&gt; const
&gt; +{
&gt; +    lazyInit();
&gt; +void
&gt; ResourceResponseBase::parseCacheControlDirectives(CacheControlDirectiveMap&amp;
&gt; result) const
&gt; +{
&gt; +    lazyInit();
&gt; 
&gt; Would it make sense to save the parsed PragmaDirectiveMap and
&gt; CacheControlDirectiveMap in the ResourceResponseBase? This way they would need
&gt; to parsed only once.

Fixed.  Added data members to ResourceResponseBase class along with boolean flags to tell when the maps are dirty and the headers need to be reparsed.

&gt; +        const String directive = directives[i].first.lower();
&gt; +
&gt; +        Vector&lt;String&gt; directiveValues;
&gt; +        if ((directive == &quot;private&quot; || directive == &quot;no-cache&quot;) 
&gt; 
&gt; This could probably use equalIgnoringCase() instead of calling lower() and make
&gt; directive a reference. The results already end up in a case folding hash.

Fixed.

&gt; +PassRefPtr&lt;StringImpl&gt; StringImpl::removeCharacters(CharacterMatchFunctionPtr
&gt; findMatch)
&gt; 
&gt; This functions makes a copy even if nothing changes. Could that be avoided?

Yes.  Fixed.

(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=24352) [edit]
&gt; &gt; Patch v1
&gt; &gt; 
&gt; &gt; Looking for feedback specifically on whether I should replace
&gt; &gt; isControlCharacter(UChar) with !isASCIIPrintable().
&gt; 
&gt; Spec says control characters are ASCII 0-31 and 127 (DEL).  Need to fix the
&gt; method.

Fixed.

&gt; &gt; I think I should make trimToNextSeparator(const String&amp;) inline as well.
&gt; 
&gt; Will do this.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96378</commentid>
    <comment_count>5</comment_count>
      <attachid>24585</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-10-23 13:08:18 -0700</bug_when>
    <thetext>Comment on attachment 24585
Patch v2

Looks good, r=me. One minor comment:

&gt; +PassRefPtr&lt;StringImpl&gt; StringImpl::removeCharacters(CharacterMatchFunctionPtr findMatch)
&gt; +{
&gt; +    StringBuffer data(m_length);
&gt; +
&gt; +    const UChar* from = m_data;
&gt; +    const UChar* fromend = from + m_length;
&gt; +    unsigned outc = 0;
&gt; +
&gt; +    UChar* to = data.characters();
&gt; +
&gt; +    while (true) {
&gt; +        while (from != fromend &amp;&amp; findMatch(*from))
&gt; +            from++;
&gt; +        while (from != fromend &amp;&amp; !findMatch(*from))
&gt; +            to[outc++] = *from++;
&gt; +        if (from == fromend)
&gt; +            break;
&gt; +    }
&gt; +
&gt; +    if (outc == m_length)
&gt; +        return this;

It would be more optimal to allocate the buffer when the first removable character is found. That would avoid unnecessary malloc/free in no removals case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97758</commentid>
    <comment_count>6</comment_count>
      <attachid>24927</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-11-05 17:32:24 -0800</bug_when>
    <thetext>Created attachment 24927
Patch to address Bug 21596 Comment #5

Applies on top of Attachment #24585.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97759</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-11-05 18:00:44 -0800</bug_when>
    <thetext>$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/loader/Cache.cpp
	M	WebCore/loader/Cache.h
	M	WebCore/loader/CachedResource.cpp
	M	WebCore/loader/loader.cpp
	M	WebCore/platform/network/ResourceResponseBase.cpp
	M	WebCore/platform/network/ResourceResponseBase.h
	M	WebCore/platform/text/PlatformString.h
	M	WebCore/platform/text/String.cpp
	M	WebCore/platform/text/StringImpl.cpp
	M	WebCore/platform/text/StringImpl.h
Committed r38145

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24352</attachid>
            <date>2008-10-14 17:27:41 -0700</date>
            <delta_ts>2008-10-22 19:15:31 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-21596-v1.diff</filename>
            <type>text/plain</type>
            <size>25620</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">Y29tbWl0IDA3NGQxYzJiZDdlOWFlOWQ3ZTkwMDZkNWFjNWUyMzY4MDIwZmI3ZWYKQXV0aG9yOiBE
YXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgT2N0IDEwIDEzOjU3
OjAzIDIwMDggLTA3MDAKCiAgICAgICAgICAgIEJ1ZyAyMTU5NjogV2ViQ29yZTo6Q2FjaGUgc2hv
dWxkIHVzZSBwYXJzZWQgUHJhZ21hIGFuZCBDYWNoZS1Db250cm9sIGhlYWRlcnMKICAgIAogICAg
ICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk2Pgog
ICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyByZWFsIHBhcnNpbmcgZm9yIFByYWdtYSBhbmQgQ2FjaGUtQ29u
dHJvbCBoZWFkZXJzCiAgICAgICAgICAgIGJhc2VkIG9uIFJGQyAyNjE2LCBTZWN0aW9ucyAyLCAx
NC45IGFuZCAxNC4zMi4gIEl0IGFsc28gYWRkcyBzb21lCiAgICAgICAgICAgIG5ldyBTdHJpbmcg
YW5kIFN0cmluZ0ltcGwgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCB0aGUgcGFyc2luZy4KICAgIAog
ICAgICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6ZHVtcFN0YXRzKTogQWRkZWQuICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGR1bXBpbmcKICAg
ICAgICAgICAgc3RhdHMgb3V0c2lkZSBvZiBTYWZhcmkuCiAgICAgICAgICAgICogbG9hZGVyL0Nh
Y2hlLmg6IERlY2xhcmVkIGR1bXBTdGF0cygpLgogICAgCiAgICAgICAgICAgICogbG9hZGVyL0Nh
Y2hlZFJlc291cmNlLmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpt
dXN0UmV2YWxpZGF0ZSk6IFVwZGF0ZWQgdG8gdXNlCiAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpjYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCkgaW5zdGVhZCBvZiBzdWJzdHJpbmcKICAg
ICAgICAgICAgbWF0Y2hpbmcgb2YgdGhlIGVudGlyZSBDYWNoZS1Db250cm9sIGhlYWRlci4KICAg
IAogICAgICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6
TG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBVc2VkIHRoZSBsb2NhbAogICAgICAg
ICAgICAncmVzb3VyY2UnIHZhcmlhYmxlIGluc3RlYWQgb2YgJ3JlcXVlc3QtPmNhY2hlZFJlc291
cmNlKCknLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3Bv
bnNlQmFzZS5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
cGFyc2VQcmFnbWFEaXJlY3RpdmVzKTogQWRkZWQuCiAgICAgICAgICAgIFByb3ZpZGVzIHBhcnNl
ZCBQcmFnbWEgaGVhZGVyIGRpcmVjdGl2ZXMuCiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKTogQWRkZWQuCiAgICAg
ICAgICAgIFByb3ZpZGVzIHBhcnNlZCBDYWNoZS1Db250cm9sIGhlYWRlciBkaXJlY3RpdmVzLgog
ICAgICAgICAgICAoV2ViQ29yZTo6aXNDYWNoZUhlYWRlclNlcGFyYXRvcik6IEFkZGVkLiAgUmV0
dXJucyB0cnVlIGlmIGEKICAgICAgICAgICAgY2hhcmFjdGVyIGlzIGEgc2VwYXJhdG9yIGNoYXJh
Y3RlciBwZXIgUkZDIDI2MTYsIFNlY3Rpb24gMi4yLCBlbHNlCiAgICAgICAgICAgIHJldHVybnMg
ZmFsc2UuCiAgICAgICAgICAgIChXZWJDb3JlOjppc0NvbnRyb2xDaGFyYWN0ZXIpOiBBZGRlZC4g
IFJldHVybnMgdHJ1ZSBpZiBhIGNoYXJhY3RlcgogICAgICAgICAgICBpcyBhIGNvbnRyb2wgY2hh
cmFjdGVyLCBlbHNlIHJldHVybnMgZmFsc2UuCiAgICAgICAgICAgIChXZWJDb3JlOjp0cmltVG9O
ZXh0U2VwYXJhdG9yKTogQWRkZWQuICBSZXR1cm5zIGEgc3RyaW5nIHRydW5jYXRlZAogICAgICAg
ICAgICBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIGNoYXJhY3RlciBwZXIgaXNDYWNoZUhlYWRlclNl
cGFyYXRvcigpLgogICAgICAgICAgICAoV2ViQ29yZTo6cGFyc2VDYWNoZUhlYWRlcik6IEFkZGVk
LiAgVGhpcyBpcyB0aGUgbWFpbiBwYXJzaW5nCiAgICAgICAgICAgIHJvdXRpbmUgZm9yIGJvdGgg
Q2FjaGUtQ29udHJvbCBhbmQgUHJhZ21hIGhlYWRlcnMuCiAgICAgICAgICAgIChXZWJDb3JlOjpw
YXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZVZhbHVlcyk6IEFkZGVkLiAgVGhpcyBzcGxpdHMKICAg
ICAgICAgICAgY2VydGFpbiBDYWNoZS1Db250cm9sIGRpcmVjdGl2ZSB2YWx1ZXMgaW50byBhIHZl
Y3RvciBvZiBzdHJpbmdzLgogICAgICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuaDoKICAgICAgICAgICAgKFdlYkNvcmU6OkNhY2hlQ29udHJvbERpcmVjdGl2
ZU1hcCk6IEFkZGVkLiAgVHlwZWRlZiBmb3IgYSBwYXJzZWQKICAgICAgICAgICAgQ2FjaGUtQ29u
dHJvbCBoZWFkZXIuCiAgICAgICAgICAgIChXZWJDb3JlOjpQcmFnbWFEaXJlY3RpdmVNYXApOiBB
ZGRlZC4gIFR5cGVkZWYgZm9yIGEgcGFyc2VkIFByYWdtYQogICAgICAgICAgICBoZWFkZXIuCiAg
ICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VQcmFnbWFEaXJl
Y3RpdmVzKTogQWRkZWQKICAgICAgICAgICAgZGVjbGFyYXRpb24uCiAgICAgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKTog
RGl0dG8uCiAgICAKICAgICAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmg6
CiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OmZpbmQpOiBBZGRlZC4gIFJldHVybnMgdGhl
IGZpcnN0IG1hdGNoIGJhc2VkIG9uCiAgICAgICAgICAgIHRoZSBjaGFyYWN0ZXItbWF0Y2hpbmcg
ZnVuY3Rpb24gcG9pbnRlciBwYXNzZWQgaW4uCiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6
OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZCBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgKFdlYkNv
cmU6OmZpbmQpOiBBZGRlZC4gIElubGluZSBtZXRob2QgdGhhdCB0YWtlcyBhIGNoYXJhY3Rlci0K
ICAgICAgICAgICAgbWF0Y2hpbmcgZnVuY3Rpb24gcG9pbnRlci4gIENhbGxlZCBieSBTdHJpbmdJ
bXBsOjpmaW5kKCkuCiAgICAgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwOgogICAg
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpyZW1vdmVDaGFyYWN0ZXJzKTogQWRkZWQuICBDYWxs
cwogICAgICAgICAgICBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKCkuCiAgICAgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZC4gIFJldHVybnMgYSBzdHJpbmcKICAg
ICAgICAgICAgd2l0aCBhbGwgY2hhcmFjdGVycyByZW1vdmVkIHRoYXQgbWF0Y2ggdGhlIGNoYXJh
Y3Rlci1tYXRjaGluZwogICAgICAgICAgICBmdW5jdGlvbiBwb2ludGVyIHBhc3NlZCBpbi4gIEJh
c2VkIGhlYXZpbHkgb24KICAgICAgICAgICAgU3RyaW5nSW1wbDo6c2ltcGxpZnlXaGl0ZXNwYWNl
KCkuCiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmaW5kKTogQWRkZWQuICBDYWxs
cyBXZWJDb3JlOjpmaW5kKCkuCiAgICAgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
Lmg6CiAgICAgICAgICAgIChXZWJDb3JlOjpGaW5kTWF0Y2hGdW5jdGlvblB0cik6IEFkZGVkLiAg
VHlwZWRlZiBmb3IgYSBjaGFyYWN0ZXItCiAgICAgICAgICAgIG1hdGNoaW5nIGZ1bmN0aW9uIHBv
aW50ZXIuCiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJz
KTogQWRkZWQgZGVjbGFyYXRpb24uCiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpm
aW5kKTogRGl0dG8uCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NDQ3Y2VlLi5iMzRhNzRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDA4LTEwLTEz
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgQnVnIDIxNTk2
OiBXZWJDb3JlOjpDYWNoZSBzaG91bGQgdXNlIHBhcnNlZCBQcmFnbWEgYW5kIENhY2hlLUNvbnRy
b2wgaGVhZGVycworCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHJlYWwgcGFyc2luZyBmb3IgUHJhZ21hIGFuZCBDYWNoZS1D
b250cm9sIGhlYWRlcnMKKyAgICAgICAgYmFzZWQgb24gUkZDIDI2MTYsIFNlY3Rpb25zIDIsIDE0
LjkgYW5kIDE0LjMyLiAgSXQgYWxzbyBhZGRzIHNvbWUKKyAgICAgICAgbmV3IFN0cmluZyBhbmQg
U3RyaW5nSW1wbCBtZXRob2RzIHRvIGFzc2lzdCB3aXRoIHRoZSBwYXJzaW5nLgorCisgICAgICAg
ICogbG9hZGVyL0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkdW1wU3RhdHMp
OiBBZGRlZC4gIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgZHVtcGluZworICAgICAgICBzdGF0cyBv
dXRzaWRlIG9mIFNhZmFyaS4KKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuaDogRGVjbGFyZWQgZHVt
cFN0YXRzKCkuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlKTogVXBkYXRlZCB0byB1
c2UKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbERpcmVjdGl2ZXMo
KSBpbnN0ZWFkIG9mIHN1YnN0cmluZworICAgICAgICBtYXRjaGluZyBvZiB0aGUgZW50aXJlIENh
Y2hlLUNvbnRyb2wgaGVhZGVyLgorCisgICAgICAgICogbG9hZGVyL2xvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVSZXNwb25zZSk6IFVzZWQgdGhl
IGxvY2FsCisgICAgICAgICdyZXNvdXJjZScgdmFyaWFibGUgaW5zdGVhZCBvZiAncmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKScuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNl
OjpwYXJzZVByYWdtYURpcmVjdGl2ZXMpOiBBZGRlZC4KKyAgICAgICAgUHJvdmlkZXMgcGFyc2Vk
IFByYWdtYSBoZWFkZXIgZGlyZWN0aXZlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjpwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMpOiBBZGRlZC4KKyAgICAgICAg
UHJvdmlkZXMgcGFyc2VkIENhY2hlLUNvbnRyb2wgaGVhZGVyIGRpcmVjdGl2ZXMuCisgICAgICAg
IChXZWJDb3JlOjppc0NhY2hlSGVhZGVyU2VwYXJhdG9yKTogQWRkZWQuICBSZXR1cm5zIHRydWUg
aWYgYQorICAgICAgICBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyIHBlciBSRkMg
MjYxNiwgU2VjdGlvbiAyLjIsIGVsc2UKKyAgICAgICAgcmV0dXJucyBmYWxzZS4KKyAgICAgICAg
KFdlYkNvcmU6OmlzQ29udHJvbENoYXJhY3Rlcik6IEFkZGVkLiAgUmV0dXJucyB0cnVlIGlmIGEg
Y2hhcmFjdGVyCisgICAgICAgIGlzIGEgY29udHJvbCBjaGFyYWN0ZXIsIGVsc2UgcmV0dXJucyBm
YWxzZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyaW1Ub05leHRTZXBhcmF0b3IpOiBBZGRlZC4gIFJl
dHVybnMgYSBzdHJpbmcgdHJ1bmNhdGVkCisgICAgICAgIGF0IHRoZSBmaXJzdCBzZXBhcmF0b3Ig
Y2hhcmFjdGVyIHBlciBpc0NhY2hlSGVhZGVyU2VwYXJhdG9yKCkuCisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUNhY2hlSGVhZGVyKTogQWRkZWQuICBUaGlzIGlzIHRoZSBtYWluIHBhcnNpbmcKKyAg
ICAgICAgcm91dGluZSBmb3IgYm90aCBDYWNoZS1Db250cm9sIGFuZCBQcmFnbWEgaGVhZGVycy4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlVmFsdWVzKTogQWRk
ZWQuICBUaGlzIHNwbGl0cworICAgICAgICBjZXJ0YWluIENhY2hlLUNvbnRyb2wgZGlyZWN0aXZl
IHZhbHVlcyBpbnRvIGEgdmVjdG9yIG9mIHN0cmluZ3MuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVDb250
cm9sRGlyZWN0aXZlTWFwKTogQWRkZWQuICBUeXBlZGVmIGZvciBhIHBhcnNlZAorICAgICAgICBD
YWNoZS1Db250cm9sIGhlYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OlByYWdtYURpcmVjdGl2ZU1h
cCk6IEFkZGVkLiAgVHlwZWRlZiBmb3IgYSBwYXJzZWQgUHJhZ21hCisgICAgICAgIGhlYWRlci4K
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZVByYWdtYURpcmVj
dGl2ZXMpOiBBZGRlZAorICAgICAgICBkZWNsYXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMpOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0cmluZzo6ZmluZCk6IEFkZGVkLiAgUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggYmFz
ZWQgb24KKyAgICAgICAgdGhlIGNoYXJhY3Rlci1tYXRjaGluZyBmdW5jdGlvbiBwb2ludGVyIHBh
c3NlZCBpbi4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6cmVtb3ZlQ2hhcmFjdGVycyk6IEFk
ZGVkIGRlY2xhcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6ZmluZCk6IEFkZGVkLiAgSW5saW5l
IG1ldGhvZCB0aGF0IHRha2VzIGEgY2hhcmFjdGVyLQorICAgICAgICBtYXRjaGluZyBmdW5jdGlv
biBwb2ludGVyLiAgQ2FsbGVkIGJ5IFN0cmluZ0ltcGw6OmZpbmQoKS4KKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnJlbW92ZUNo
YXJhY3RlcnMpOiBBZGRlZC4gIENhbGxzCisgICAgICAgIFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJh
Y3RlcnMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyk6IEFkZGVkLiAgUmV0dXJu
cyBhIHN0cmluZworICAgICAgICB3aXRoIGFsbCBjaGFyYWN0ZXJzIHJlbW92ZWQgdGhhdCBtYXRj
aCB0aGUgY2hhcmFjdGVyLW1hdGNoaW5nCisgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2Vk
IGluLiAgQmFzZWQgaGVhdmlseSBvbgorICAgICAgICBTdHJpbmdJbXBsOjpzaW1wbGlmeVdoaXRl
c3BhY2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmZpbmQpOiBBZGRlZC4gIENh
bGxzIFdlYkNvcmU6OmZpbmQoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbmRNYXRjaEZ1bmN0aW9uUHRyKTogQWRkZWQuICBUeXBl
ZGVmIGZvciBhIGNoYXJhY3Rlci0KKyAgICAgICAgbWF0Y2hpbmcgZnVuY3Rpb24gcG9pbnRlci4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZCBk
ZWNsYXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmZpbmQpOiBEaXR0by4K
KwogMjAwOC0xMC0xMyAgTWFyY28gQmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNvbGxhYm9y
YS5jby51az4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4gTGFuZGVkIGJ5IEph
biBBbG9uem8uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAgYi9XZWJDb3Jl
L2xvYWRlci9DYWNoZS5jcHAKaW5kZXggNzc1MjQzZS4uNjQwNGY3ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGUuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcApAQCAt
Njk3LDYgKzY5NywxOSBAQCB2b2lkIENhY2hlOjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQog
fQogCiAjaWZuZGVmIE5ERUJVRwordm9pZCBDYWNoZTo6ZHVtcFN0YXRzKCkKK3sKKyAgICBTdGF0
aXN0aWNzIHMgPSBnZXRTdGF0aXN0aWNzKCk7CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTEx
cyAlLTExcyAlLTExc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29k
ZWRTaXplIik7CisgICAgcHJpbnRmKCIlLTExcyAlLTExcyAlLTExcyAlLTExcyAlLTExc1xuIiwg
Ii0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
IiwgIi0tLS0tLS0tLS0tIik7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFk
XG4iLCAiSW1hZ2VzIiwgcy5pbWFnZXMuY291bnQsIHMuaW1hZ2VzLnNpemUsIHMuaW1hZ2VzLmxp
dmVTaXplLCBzLmltYWdlcy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUx
MWQgJTExZCAlMTFkXG4iLCAiQ1NTIiwgcy5jc3NTdHlsZVNoZWV0cy5jb3VudCwgcy5jc3NTdHls
ZVNoZWV0cy5zaXplLCBzLmNzc1N0eWxlU2hlZXRzLmxpdmVTaXplLCBzLmNzc1N0eWxlU2hlZXRz
LmRlY29kZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIs
ICJYU0wiLCBzLnhzbFN0eWxlU2hlZXRzLmNvdW50LCBzLnhzbFN0eWxlU2hlZXRzLnNpemUsIHMu
eHNsU3R5bGVTaGVldHMubGl2ZVNpemUsIHMueHNsU3R5bGVTaGVldHMuZGVjb2RlZFNpemUpOwor
ICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkphdmFTY3JpcHQiLCBz
LnNjcmlwdHMuY291bnQsIHMuc2NyaXB0cy5zaXplLCBzLnNjcmlwdHMubGl2ZVNpemUsIHMuc2Ny
aXB0cy5kZWNvZGVkU2l6ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFk
XG4iLCAiRm9udHMiLCBzLmZvbnRzLmNvdW50LCBzLmZvbnRzLnNpemUsIHMuZm9udHMubGl2ZVNp
emUsIHMuZm9udHMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMg
JS0xMXMgJS0xMXNcblxuIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tIik7Cit9CisKIHZvaWQgQ2FjaGU6OmR1
bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdAogewogICAgIHByaW50ZigiTFJVLVNQ
IGxpc3RzIGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVjb2RlZCwgS2lsb2J5dGVzIGVu
Y29kZWQsIEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCk6XG4iKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL0NhY2hlLmggYi9XZWJDb3JlL2xvYWRlci9DYWNoZS5oCmluZGV4IGYwMGVhNTIu
LjRjODQxYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlLmgKKysrIGIvV2ViQ29y
ZS9sb2FkZXIvQ2FjaGUuaApAQCAtMTU3LDYgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgTFJVTGlz
dCogbHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSopOwogICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3Nl
ZChDYWNoZWRSZXNvdXJjZSopOwogI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXBTdGF0cygp
OwogICAgIHZvaWQgZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0OwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcCBiL1dlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCA2ZDBhZjliLi44NTRiOTU3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBib29sIENhY2hl
ZFJlc291cmNlOjppc0V4cGlyZWQoKSBjb25zdAogICAgIHRpbWVfdCBub3cgPSB0aW1lKDApOwog
ICAgIHJldHVybiBkaWZmdGltZShub3csIG1fZXhwaXJhdGlvbkRhdGUpID49IDA7CiB9Ci0gIAor
CiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgbV9leHBpcmF0
aW9uRGF0ZSA9IHJlc3BvbnNlLmV4cGlyYXRpb25EYXRlKCk7CiB9Ci0gICAgCisKIHZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBpZiAocmVx
dWVzdCAmJiAhbV9yZXF1ZXN0KQpAQCAtMzA1LDEyICszMDUsMTUgQEAgYm9vbCBDYWNoZWRSZXNv
dXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSBjb25zdAogYm9vbCBDYWNoZWRSZXNvdXJjZTo6
bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CiB7CiAgICAgaWYg
KG1fbG9hZGluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICBTdHJpbmcgY2FjaGVD
b250cm9sID0gbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNhY2hlLUNvbnRyb2wiKTsKLSAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIHRvIHRva2VuaXplIHRoZSBmaWVsZC4KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2FjaGVDb250cm9sRGlyZWN0aXZlTWFwIGNhY2hl
Q29udHJvbERpcmVjdGl2ZXM7CisgICAgbV9yZXNwb25zZS5wYXJzZUNhY2hlQ29udHJvbERpcmVj
dGl2ZXMoY2FjaGVDb250cm9sRGlyZWN0aXZlcyk7CisKKyAgICAvLyBGSVhNRTogQWxzbyBsb29r
IGF0IG1heC1hZ2UsIG1pbi1mcmVzaCwgbWF4LXN0YWxlIGluIENhY2hlLUNvbnRyb2wKICAgICBp
ZiAoY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSkKLSAgICAgICAgcmV0dXJuICFjYWNo
ZUNvbnRyb2wuaXNFbXB0eSgpICYmIChjYWNoZUNvbnRyb2wuY29udGFpbnMoIm5vLWNhY2hlIiwg
ZmFsc2UpIHx8IChpc0V4cGlyZWQoKSAmJiBjYWNoZUNvbnRyb2wuY29udGFpbnMoIm11c3QtcmV2
YWxpZGF0ZSIsIGZhbHNlKSkpOwotICAgIHJldHVybiBpc0V4cGlyZWQoKSB8fCBjYWNoZUNvbnRy
b2wuY29udGFpbnMoIm5vLWNhY2hlIiwgZmFsc2UpOworICAgICAgICByZXR1cm4gIWNhY2hlQ29u
dHJvbERpcmVjdGl2ZXMuaXNFbXB0eSgpICYmIChjYWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRh
aW5zKCJuby1jYWNoZSIpIHx8IChpc0V4cGlyZWQoKSAmJiBjYWNoZUNvbnRyb2xEaXJlY3RpdmVz
LmNvbnRhaW5zKCJtdXN0LXJldmFsaWRhdGUiKSkpOworICAgIHJldHVybiBpc0V4cGlyZWQoKSB8
fCBjYWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRhaW5zKCJuby1jYWNoZSIpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAppbmRleCAyNDQyZDIxLi5mOTUyZjBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRl
ci9sb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKQEAgLTM5MSwxNiAr
MzkxLDE2IEBAIHZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSCiAgICAgICAgIC8vIERpZCBub3QgZ2V0
IDMwNCByZXNwb25zZSwgY29udGludWUgYXMgYSByZWd1bGFyIHJlc291cmNlIGxvYWQuCiAgICAg
ICAgIGNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxlZChyZXNvdXJjZSk7CiAgICAgfQotICAgIAor
CiAgICAgcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICAKKwogICAgIFN0cmlu
ZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKTsKICAgICBpZiAoIWVuY29k
aW5nLmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRFbmNv
ZGluZyhlbmNvZGluZyk7CisgICAgICAgIHJlc291cmNlLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7
CiAgICAgCiAgICAgaWYgKHJlcXVlc3QtPmlzTXVsdGlwYXJ0KCkpIHsKLSAgICAgICAgQVNTRVJU
KHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmlzSW1hZ2UoKSk7Ci0gICAgICAgIHN0YXRpY19j
YXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKSktPmNsZWFyKCk7Cisg
ICAgICAgIEFTU0VSVChyZXNvdXJjZS0+aXNJbWFnZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q2FjaGVkSW1hZ2UqPihyZXNvdXJjZSktPmNsZWFyKCk7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5k
b2NMb2FkZXIoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmRvY0xvYWRlcigpLT5m
cmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9IGVsc2UgaWYgKHJlc3Bv
bnNlLmlzTXVsdGlwYXJ0KCkpIHsKQEAgLTQwOCwxMCArNDA4LDEwIEBAIHZvaWQgTG9hZGVyOjpI
b3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VSCiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRz
IGluIGEgRG9jTG9hZGVyJ3MgcmVxdWVzdCBjb3VudAogICAgICAgICByZXF1ZXN0LT5kb2NMb2Fk
ZXIoKS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAv
LyBJZiB3ZSBnZXQgYSBtdWx0aXBhcnQgcmVzcG9uc2UsIHdlIG11c3QgaGF2ZSBhIGhhbmRsZQog
ICAgICAgICBBU1NFUlQobG9hZGVyLT5oYW5kbGUoKSk7Ci0gICAgICAgIGlmICghcmVxdWVzdC0+
Y2FjaGVkUmVzb3VyY2UoKS0+aXNJbWFnZSgpKQorICAgICAgICBpZiAoIXJlc291cmNlLT5pc0lt
YWdlKCkpCiAgICAgICAgICAgICBsb2FkZXItPmhhbmRsZSgpLT5jYW5jZWwoKTsKICAgICB9CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJh
c2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNw
cAppbmRleCBhOWRkYzMwLi4wYmUwYjg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmlu
ZyYgaGVhZGVyLCBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4gPiYgcmVzdWx0KTsKK3N0YXRp
YyB2b2lkIHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlVmFsdWVzKGNvbnN0IFN0cmluZyYgZGly
ZWN0aXZlcywgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCk7CisKIGJvb2wgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmlzSFRUUCgpIGNvbnN0CiB7CiAgICAgbGF6eUluaXQoKTsKQEAgLTE2Myw2ICsxNjYs
NTggQEAgY29uc3QgSFRUUEhlYWRlck1hcCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFk
ZXJGaWVsZHMoKSBjb25zdAogICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHM7IAogfQogCit2
b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZVByYWdtYURpcmVjdGl2ZXMoUHJhZ21hRGly
ZWN0aXZlTWFwJiByZXN1bHQpIGNvbnN0Cit7CisgICAgbGF6eUluaXQoKTsKKworICAgIGNvbnN0
IFN0cmluZyBwcmFnbWFIZWFkZXIgPSBodHRwSGVhZGVyRmllbGQoIlByYWdtYSIpOworICAgIGlm
IChwcmFnbWFIZWFkZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8
cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBkaXJlY3RpdmVzOworICAgIHBhcnNlQ2FjaGVIZWFkZXIo
cHJhZ21hSGVhZGVyLCBkaXJlY3RpdmVzKTsKKworICAgIHVuc2lnbmVkIG1heCA9IGRpcmVjdGl2
ZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXg7ICsraSkKKyAgICAg
ICAgcmVzdWx0LnNldChkaXJlY3RpdmVzW2ldLmZpcnN0LCBkaXJlY3RpdmVzW2ldLnNlY29uZCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb250cm9sRGlyZWN0
aXZlcyhDYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXAmIHJlc3VsdCkgY29uc3QKK3sKKyAgICBsYXp5
SW5pdCgpOworCisgICAgY29uc3QgU3RyaW5nIGNhY2hlQ29udHJvbEhlYWRlciA9IGh0dHBIZWFk
ZXJGaWVsZCgiQ2FjaGUtQ29udHJvbCIpOworICAgIGlmIChjYWNoZUNvbnRyb2xIZWFkZXIuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmlu
Zz4gPiBkaXJlY3RpdmVzOworICAgIHBhcnNlQ2FjaGVIZWFkZXIoY2FjaGVDb250cm9sSGVhZGVy
LCBkaXJlY3RpdmVzKTsKKworICAgIHVuc2lnbmVkIGlNYXggPSBkaXJlY3RpdmVzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaU1heDsgKytpKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyBkaXJlY3RpdmUgPSBkaXJlY3RpdmVzW2ldLmZpcnN0Lmxvd2VyKCk7CisKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0aXZlVmFsdWVzOworICAgICAgICBpZiAoKGRpcmVjdGl2
ZSA9PSAicHJpdmF0ZSIgfHwgZGlyZWN0aXZlID09ICJuby1jYWNoZSIpICYmICFkaXJlY3RpdmVz
W2ldLnNlY29uZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBwYXJzZUNhY2hlQ29udHJvbERpcmVj
dGl2ZVZhbHVlcyhkaXJlY3RpdmVzW2ldLnNlY29uZCwgZGlyZWN0aXZlVmFsdWVzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZGlyZWN0aXZlVmFsdWVzLmFwcGVuZChkaXJlY3RpdmVzW2ld
LnNlY29uZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5jb250YWlucyhkaXJlY3RpdmUpKSB7Cisg
ICAgICAgICAgICBDYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIGVudHJ5ID0gcmVz
dWx0LmZpbmQoZGlyZWN0aXZlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGpNYXggPSBkaXJlY3Rp
dmVWYWx1ZXMuc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGpN
YXg7ICsraikKKyAgICAgICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmFkZChkaXJlY3RpdmVWYWx1
ZXNbal0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSGFzaFNldDxTdHJpbmc+IHZh
bHVlczsKKyAgICAgICAgICAgIHVuc2lnbmVkIGpNYXggPSBkaXJlY3RpdmVWYWx1ZXMuc2l6ZSgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGpNYXg7ICsraikKKyAgICAg
ICAgICAgICAgICB2YWx1ZXMuYWRkKGRpcmVjdGl2ZVZhbHVlc1tqXSk7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0KGRpcmVjdGl2ZSwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogYm9v
bCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KCkgY29uc3QKIHsKICAgICBsYXp5
SW5pdCgpOwpAQCAtMjMzLDQgKzI4OCwxMDggQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
Y29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNvdXJjZVJlc3AKICAg
ICByZXR1cm4gUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1Db21wYXJlKGEsIGIpOwogfQogCitz
dGF0aWMgYm9vbCBpc0NhY2hlSGVhZGVyU2VwYXJhdG9yKFVDaGFyIGMpCit7CisgICAgLy8gU2Vl
IFJGQyAyNjE2LCBTZWN0aW9uIDIuMgorICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICco
JzoKKyAgICAgICAgY2FzZSAnKSc6CisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICBjYXNlICc+
JzoKKyAgICAgICAgY2FzZSAnQCc6CisgICAgICAgIGNhc2UgJywnOgorICAgICAgICBjYXNlICc7
JzoKKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgY2FzZSAn
Iic6CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgY2FzZSAn
XSc6CisgICAgICAgIGNhc2UgJz8nOgorICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgY2FzZSAn
eyc6CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICBjYXNlICcgJzoKKyAgICAgICAgY2FzZSAn
XHQnOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc0NvbnRyb2xDaGFy
YWN0ZXIoVUNoYXIgYykKK3sKKyAgICAvLyBTaG91bGQgdXNlICFpc0FTQ0lJUHJpbnRhYmxlKCkg
aW5zdGVhZD8KKyAgICByZXR1cm4gKGMgPCAnICcpOworfQorCitzdGF0aWMgU3RyaW5nIHRyaW1U
b05leHRTZXBhcmF0b3IoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgcmV0dXJuIHN0ci5zdWJz
dHJpbmcoMCwgc3RyLmZpbmQoaXNDYWNoZUhlYWRlclNlcGFyYXRvciwgMCkpOworfQorCitzdGF0
aWMgdm9pZCBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBWZWN0b3I8cGFp
cjxTdHJpbmcsIFN0cmluZz4gPiYgcmVzdWx0KQoreworICAgIGNvbnN0IFN0cmluZyBzYWZlSGVh
ZGVyID0gaGVhZGVyLnJlbW92ZUNoYXJhY3RlcnMoaXNDb250cm9sQ2hhcmFjdGVyKTsKKyAgICB1
bnNpZ25lZCBtYXggPSBzYWZlSGVhZGVyLmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcG9z
ID0gMDsgcG9zIDwgbWF4OyAvKiBwb3MgaW5jcmVtZW50ZWQgaW4gbG9vcCAqLykgeworICAgICAg
ICBpbnQgbmV4dENvbW1hUG9zaXRpb24gPSBzYWZlSGVhZGVyLmZpbmQoJywnLCBwb3MpOworICAg
ICAgICBpbnQgbmV4dEVxdWFsU2lnblBvc2l0aW9uID0gc2FmZUhlYWRlci5maW5kKCc9JywgcG9z
KTsKKyAgICAgICAgaWYgKG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA+PSAwICYmIChuZXh0RXF1YWxT
aWduUG9zaXRpb24gPCBuZXh0Q29tbWFQb3NpdGlvbiB8fCBuZXh0Q29tbWFQb3NpdGlvbiA8IDAp
KSB7CisgICAgICAgICAgICAvLyBHZXQgZGlyZWN0aXZlIG5hbWUsIHBhcnNlIHJpZ2h0IGhhbmQg
c2lkZSBvZiBlcXVhbCBzaWduLCB0aGVuIGFkZCB0byBtYXAKKyAgICAgICAgICAgIFN0cmluZyBk
aXJlY3RpdmUgPSB0cmltVG9OZXh0U2VwYXJhdG9yKHNhZmVIZWFkZXIuc3Vic3RyaW5nKHBvcywg
bmV4dEVxdWFsU2lnblBvc2l0aW9uIC0gcG9zKS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAg
ICAgICBwb3MgKz0gbmV4dEVxdWFsU2lnblBvc2l0aW9uIC0gcG9zICsgMTsKKworICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gc2FmZUhlYWRlci5zdWJzdHJpbmcocG9zLCBtYXggLSBwb3MpLnN0
cmlwV2hpdGVTcGFjZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlWzBdID09ICciJykgeworICAg
ICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIHF1b3RlZCBzdHJpbmcKKyAgICAgICAgICAg
ICAgICBpbnQgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gPSB2YWx1ZS5maW5kKCciJywgMSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5leHREb3VibGVRdW90ZVBvc2l0aW9uID49IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHZhbHVlIGFzIGEgcXVvdGVkIHN0cmluZyB3aXRo
b3V0IHF1b3RlcworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5n
LCBTdHJpbmc+KGRpcmVjdGl2ZSwgdmFsdWUuc3Vic3RyaW5nKDEsIG5leHREb3VibGVRdW90ZVBv
c2l0aW9uIC0gMSkuc3RyaXBXaGl0ZVNwYWNlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9z
ICs9IChzYWZlSGVhZGVyLmZpbmQoJyInLCBwb3MpIC0gcG9zKSArIG5leHREb3VibGVRdW90ZVBv
c2l0aW9uICsgMTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBwYXN0IG5leHQgY29tbWEs
IGlmIHRoZXJlIGlzIG9uZQorICAgICAgICAgICAgICAgICAgICBpbnQgbmV4dENvbW1hUG9zaXRp
b24yID0gc2FmZUhlYWRlci5maW5kKCcsJywgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5leHRDb21tYVBvc2l0aW9uMiA+PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9
IG5leHRDb21tYVBvc2l0aW9uMiAtIHBvcyArIDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gUGFyc2UgZXJyb3IgaWYgdGhlcmUg
aXMgYW55dGhpbmcgbGVmdCB3aXRoIG5vIGNvbW1hCisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXJyb3I7IGp1c3QgdXNlIHRoZSByZXN0IGFz
IHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5n
LCBTdHJpbmc+KGRpcmVjdGl2ZSwgdHJpbVRvTmV4dFNlcGFyYXRvcih2YWx1ZS5zdWJzdHJpbmco
MSwgdmFsdWUubGVuZ3RoKCkgLSAxKS5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGEgdG9rZW4gdW50aWwgdGhlIG5leHQg
Y29tbWEKKyAgICAgICAgICAgICAgICBpbnQgbmV4dENvbW1hUG9zaXRpb24yID0gdmFsdWUuZmlu
ZCgnLCcsIDApOworICAgICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFQb3NpdGlvbjIgPj0gMCkg
eworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZGVsaW1pdGVkIGJ5IHRoZSBu
ZXh0IGNvbW1hCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpcjxTdHJpbmcs
IFN0cmluZz4oZGlyZWN0aXZlLCB0cmltVG9OZXh0U2VwYXJhdG9yKHZhbHVlLnN1YnN0cmluZygw
LCBuZXh0Q29tbWFQb3NpdGlvbjIpLnN0cmlwV2hpdGVTcGFjZSgpKSkpOworICAgICAgICAgICAg
ICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmluZCgnLCcsIHBvcykgLSBwb3MpICsgMTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVzdCBp
cyB0aGUgdmFsdWU7IG5vIGNoYW5nZSB0byB2YWx1ZSBuZWVkZWQKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihkaXJlY3RpdmUsIHRyaW1Ub05l
eHRTZXBhcmF0b3IodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmV4dENvbW1h
UG9zaXRpb24gPj0gMCAmJiAobmV4dENvbW1hUG9zaXRpb24gPCBuZXh0RXF1YWxTaWduUG9zaXRp
b24gfHwgbmV4dEVxdWFsU2lnblBvc2l0aW9uIDwgMCkpIHsKKyAgICAgICAgICAgIC8vIEFkZCBk
aXJlY3RpdmUgdG8gbWFwIHdpdGggZW1wdHkgc3RyaW5nIGFzIHZhbHVlCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KHRyaW1Ub05leHRTZXBhcmF0b3Ioc2Fm
ZUhlYWRlci5zdWJzdHJpbmcocG9zLCBuZXh0Q29tbWFQb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0
ZVNwYWNlKCkpLCAiIikpOworICAgICAgICAgICAgcG9zICs9IG5leHRDb21tYVBvc2l0aW9uIC0g
cG9zICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFkZCBsYXN0IGRpcmVj
dGl2ZSB0byBtYXAgd2l0aCBlbXB0eSBzdHJpbmcgYXMgdmFsdWUKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4odHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVh
ZGVyLnN1YnN0cmluZyhwb3MsIG1heCAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpLCAiIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBw
YXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZVZhbHVlcyhjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZXMs
IFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCit7CisgICAgZGlyZWN0aXZlcy5zcGxpdCgnLCcsIGZh
bHNlLCByZXN1bHQpOworICAgIHVuc2lnbmVkIG1heCA9IHJlc3VsdC5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heDsgKytpKQorICAgICAgICByZXN1bHRbaV0gPSByZXN1
bHRbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKaW5kZXggMDZiMDQ5OS4uZjU1ZWRkMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKQEAg
LTMxLDYgKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBIYXNoU2V0PFN0cmluZz4sIENhc2VGb2xkaW5nSGFzaD4gQ2FjaGVDb250cm9sRGly
ZWN0aXZlTWFwOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nLCBDYXNlRm9sZGluZ0hh
c2g+IFByYWdtYURpcmVjdGl2ZU1hcDsKKwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogLy8g
RG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB1c2UgdGhlIGNsYXNzIFJlc3BvbnNlUmVz
cG9uc2UgaW5zdGVhZApAQCAtNjYsNiArNjksOSBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlQmFz
ZSB7CiAgICAgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKICAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBodHRwSGVhZGVyRmll
bGRzKCkgY29uc3Q7CiAKKyAgICB2b2lkIHBhcnNlUHJhZ21hRGlyZWN0aXZlcyhQcmFnbWFEaXJl
Y3RpdmVNYXAmKSBjb25zdDsKKyAgICB2b2lkIHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcyhD
YWNoZUNvbnRyb2xEaXJlY3RpdmVNYXAmKSBjb25zdDsKKwogICAgIGJvb2wgaXNNdWx0aXBhcnQo
KSBjb25zdCB7IHJldHVybiBtaW1lVHlwZSgpID09ICJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNl
IjsgfQogCiAgICAgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggYTIxNzRlZS4uYmE5MzQwMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogCiAgICAg
aW50IGZpbmQoVUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAgeyByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IC0xOyB9CisgICAgaW50IGZpbmQoQ2hh
cmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCBpbnQgc3RhcnQgPSAwKSBjb25z
dAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQobWF0Y2hGdW5jdGlvbiwg
c3RhcnQpIDogLTE7IH0KICAgICBpbnQgZmluZChjb25zdCBjaGFyKiBzdHIsIGludCBzdGFydCA9
IDAsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1f
aW1wbCA/IG1faW1wbC0+ZmluZChzdHIsIHN0YXJ0LCBjYXNlU2Vuc2l0aXZlKSA6IC0xOyB9CiAg
ICAgaW50IGZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIGludCBzdGFydCA9IDAsIGJvb2wgY2FzZVNl
bnNpdGl2ZSA9IHRydWUpIGNvbnN0CkBAIC0xMzQsNyArMTM2LDkgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIHN0cmlwV2hpdGVTcGFjZSgpIGNvbnN0OwogICAgIFN0cmluZyBzaW1wbGlmeVdoaXRl
U3BhY2UoKSBjb25zdDsKLSAgICAKKworICAgIFN0cmluZyByZW1vdmVDaGFyYWN0ZXJzKENoYXJh
Y3Rlck1hdGNoRnVuY3Rpb25QdHIpIGNvbnN0OworCiAgICAgLy8gUmV0dXJuIHRoZSBzdHJpbmcg
d2l0aCBjYXNlIGZvbGRlZCBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uLgogICAgIFN0
cmluZyBmb2xkQ2FzZSgpIGNvbnN0OwogCkBAIC0yOTIsNiArMjk2LDE3IEBAIGlubGluZSBpbnQg
ZmluZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVUNoYXIgY2hhcmFj
dGVyLCBpbnQgc3RhCiAgICAgcmV0dXJuIC0xOwogfQogCitpbmxpbmUgaW50IGZpbmQoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIENoYXJhY3Rlck1hdGNoRnVuY3Rpb25Q
dHIgbWF0Y2hGdW5jdGlvbiwgaW50IHN0YXJ0UG9zaXRpb24pCit7CisgICAgaWYgKHN0YXJ0UG9z
aXRpb24gPj0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0UG9zaXRpb247IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBpZiAobWF0Y2hGdW5jdGlvbihjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KGkpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIGlubGlu
ZSBpbnQgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgs
IFVDaGFyIGNoYXJhY3RlciwgaW50IHN0YXJ0UG9zaXRpb24pCiB7CiAgICAgaWYgKHN0YXJ0UG9z
aXRpb24gPj0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpIHx8ICFsZW5ndGgpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TdHJpbmcuY3BwCmluZGV4IDQ0NTAwZTEuLmYwY2UwNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJp
bmcuY3BwCkBAIC0yNzYsNiArMjc2LDEzIEBAIFN0cmluZyBTdHJpbmc6OnNpbXBsaWZ5V2hpdGVT
cGFjZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+c2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiB9
CiAKK1N0cmluZyBTdHJpbmc6OnJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlv
blB0ciBmaW5kTWF0Y2gpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pbXBsLT5yZW1vdmVDaGFyYWN0ZXJzKGZpbmRNYXRj
aCk7Cit9CisKIFN0cmluZyBTdHJpbmc6OmZvbGRDYXNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aW1wbCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCAwZmM4MjMyLi40MmQ2
NjlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zMzAsNiArMzMwLDMw
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6c3RyaXBXaGl0ZVNwYWNlKCkK
ICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YSArIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQpOwogfQog
CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoQ2hh
cmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBmaW5kTWF0Y2gpCit7CisgICAgU3RyaW5nQnVmZmVyIGRh
dGEobV9sZW5ndGgpOworCisgICAgY29uc3QgVUNoYXIqIGZyb20gPSBtX2RhdGE7CisgICAgY29u
c3QgVUNoYXIqIGZyb21lbmQgPSBmcm9tICsgbV9sZW5ndGg7CisgICAgaW50IG91dGMgPSAwOwor
CisgICAgVUNoYXIqIHRvID0gZGF0YS5jaGFyYWN0ZXJzKCk7CisKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB3aGlsZSAoZnJvbSAhPSBmcm9tZW5kICYmIGZpbmRNYXRjaCgqZnJvbSkpCisg
ICAgICAgICAgICBmcm9tKys7CisgICAgICAgIHdoaWxlIChmcm9tICE9IGZyb21lbmQgJiYgIWZp
bmRNYXRjaCgqZnJvbSkpCisgICAgICAgICAgICB0b1tvdXRjKytdID0gKmZyb20rKzsKKyAgICAg
ICAgaWYgKGZyb20gPT0gZnJvbWVuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGRhdGEuc2hyaW5rKG91dGMpOworCisgICAgcmV0dXJuIGFkb3B0KGRhdGEpOworfQorCiBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnNpbXBsaWZ5V2hpdGVTcGFjZSgpCiB7CiAg
ICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwpAQCAtNTA2LDYgKzUzMCwxMSBAQCBpbnQg
U3RyaW5nSW1wbDo6ZmluZChVQ2hhciBjLCBpbnQgc3RhcnQpCiAgICAgcmV0dXJuIFdlYkNvcmU6
OmZpbmQobV9kYXRhLCBtX2xlbmd0aCwgYywgc3RhcnQpOwogfQogCitpbnQgU3RyaW5nSW1wbDo6
ZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIGludCBzdGFydCkK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6ZmluZChtX2RhdGEsIG1fbGVuZ3RoLCBtYXRjaEZ1bmN0
aW9uLCBzdGFydCk7Cit9CisKIGludCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIHN0ciwg
aW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUpCiB7CiAgICAgLyoKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5oCmluZGV4IGNjOGY4MTUuLmExYjlmMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuaApAQCAtNDcsNiArNDcsOCBAQCBzdHJ1Y3QgSGFzaEFuZENoYXJhY3RlcnNUcmFu
c2xhdG9yOwogc3RydWN0IFN0cmluZ0hhc2g7CiBzdHJ1Y3QgVUNoYXJCdWZmZXJUcmFuc2xhdG9y
OwogCit0eXBlZGVmIGJvb2wgKCpDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKShVQ2hhcik7CisK
IGNsYXNzIFN0cmluZ0ltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHJpbmdJbXBsPiB7CiAgICAg
ZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZzsKICAgICBmcmllbmQgc3RydWN0IENTdHJpbmdUcmFu
c2xhdG9yOwpAQCAtMTIzLDggKzEyNSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBzdHJpcFdoaXRlU3BhY2UoKTsKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNp
bXBsaWZ5V2hpdGVTcGFjZSgpOwogCisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVD
aGFyYWN0ZXJzKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpOworCiAgICAgaW50IGZpbmQoY29u
c3QgY2hhciosIGludCBpbmRleCA9IDAsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpOwogICAg
IGludCBmaW5kKFVDaGFyLCBpbnQgaW5kZXggPSAwKTsKKyAgICBpbnQgZmluZChDaGFyYWN0ZXJN
YXRjaEZ1bmN0aW9uUHRyLCBpbnQgaW5kZXggPSAwKTsKICAgICBpbnQgZmluZChTdHJpbmdJbXBs
KiwgaW50IGluZGV4LCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKTsKIAogICAgIGludCByZXZl
cnNlRmluZChVQ2hhciwgaW50IGluZGV4KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24585</attachid>
            <date>2008-10-22 19:15:31 -0700</date>
            <delta_ts>2008-10-23 13:08:18 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-21596-v2.diff</filename>
            <type>text/plain</type>
            <size>28828</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">Y29tbWl0IGI1ODUzMGY3NzZlMmJhYTk1ZjA2YTI3OGM4NGM0OTU5MDZhOThjZWUKQXV0aG9yOiBE
YXZpZCBLaWx6ZXIgPGRka2lsemVyQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgT2N0IDEwIDEzOjU3
OjAzIDIwMDggLTA3MDAKCiAgICAgICAgICAgIEJ1ZyAyMTU5NjogV2ViQ29yZTo6Q2FjaGUgc2hv
dWxkIHVzZSBwYXJzZWQgUHJhZ21hIGFuZCBDYWNoZS1Db250cm9sIGhlYWRlcnMKICAgIAogICAg
ICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk2Pgog
ICAgCiAgICAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyByZWFsIHBhcnNpbmcgZm9yIFByYWdtYSBhbmQgQ2FjaGUtQ29u
dHJvbCBoZWFkZXJzCiAgICAgICAgICAgIGJhc2VkIG9uIFJGQyAyNjE2LCBTZWN0aW9ucyAyLCAx
NC45IGFuZCAxNC4zMi4gIEl0IGFsc28gYWRkcyBzb21lCiAgICAgICAgICAgIG5ldyBTdHJpbmcg
YW5kIFN0cmluZ0ltcGwgbWV0aG9kcyB0byBhc3Npc3Qgd2l0aCB0aGUgcGFyc2luZy4KICAgIAog
ICAgICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6ZHVtcFN0YXRzKTogQWRkZWQuICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGR1bXBpbmcKICAg
ICAgICAgICAgc3RhdHMgb3V0c2lkZSBvZiBTYWZhcmkuCiAgICAgICAgICAgICogbG9hZGVyL0Nh
Y2hlLmg6IERlY2xhcmVkIGR1bXBTdGF0cygpLgogICAgCiAgICAgICAgICAgICogbG9hZGVyL0Nh
Y2hlZFJlc291cmNlLmNwcDoKICAgICAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpt
dXN0UmV2YWxpZGF0ZSk6IFVwZGF0ZWQgdG8gdXNlCiAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpjYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCkgaW5zdGVhZCBvZiBzdWJzdHJpbmcKICAg
ICAgICAgICAgbWF0Y2hpbmcgb2YgdGhlIGVudGlyZSBDYWNoZS1Db250cm9sIGhlYWRlci4KICAg
IAogICAgICAgICAgICAqIGxvYWRlci9sb2FkZXIuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6
TG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UpOiBVc2VkIHRoZSBsb2NhbAogICAgICAg
ICAgICAncmVzb3VyY2UnIHZhcmlhYmxlIGluc3RlYWQgb2YgJ3JlcXVlc3QtPmNhY2hlZFJlc291
cmNlKCknLgogICAgCiAgICAgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3Bv
bnNlQmFzZS5jcHA6CiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0SFRUUEhlYWRlckZpZWxkKTogU2V0CiAgICAgICAgICAgIG1faGF2ZVBhcnNlZENhY2hlQ29u
dHJvbEhlYWRlciB0byBmYWxzZSB3aGVuIGEgIkNhY2hlLUNvbnRyb2wiCiAgICAgICAgICAgIGhl
YWRlciBpcyBzZXQuICBEaXR0byBmb3IgbV9oYXZlUGFyc2VkUHJhZ21hSGVhZGVyIGFuZCAiUHJh
Z21hIi4KICAgICAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZVBy
YWdtYURpcmVjdGl2ZXMpOiBBZGRlZC4KICAgICAgICAgICAgUHJvdmlkZXMgcGFyc2VkIFByYWdt
YSBoZWFkZXIgZGlyZWN0aXZlcy4KICAgICAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2VCYXNlOjpwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMpOiBBZGRlZC4KICAgICAgICAgICAg
UHJvdmlkZXMgcGFyc2VkIENhY2hlLUNvbnRyb2wgaGVhZGVyIGRpcmVjdGl2ZXMuCiAgICAgICAg
ICAgIChXZWJDb3JlOjppc0NhY2hlSGVhZGVyU2VwYXJhdG9yKTogQWRkZWQuICBSZXR1cm5zIHRy
dWUgaWYgYQogICAgICAgICAgICBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyIHBl
ciBSRkMgMjYxNiwgU2VjdGlvbiAyLjIsIGVsc2UKICAgICAgICAgICAgcmV0dXJucyBmYWxzZS4K
ICAgICAgICAgICAgKFdlYkNvcmU6OmlzQ29udHJvbENoYXJhY3Rlcik6IEFkZGVkLiAgUmV0dXJu
cyB0cnVlIGlmIGEgY2hhcmFjdGVyCiAgICAgICAgICAgIGlzIGEgY29udHJvbCBjaGFyYWN0ZXIg
cGVyIFJGQyAyNjE2IFNlY3Rpb24gMi4yLCBlbHNlIHJldHVybnMgZmFsc2UuCiAgICAgICAgICAg
IChXZWJDb3JlOjp0cmltVG9OZXh0U2VwYXJhdG9yKTogQWRkZWQuICBSZXR1cm5zIGEgc3RyaW5n
IHRydW5jYXRlZAogICAgICAgICAgICBhdCB0aGUgZmlyc3Qgc2VwYXJhdG9yIGNoYXJhY3RlciBw
ZXIgaXNDYWNoZUhlYWRlclNlcGFyYXRvcigpLgogICAgICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
YWNoZUhlYWRlcik6IEFkZGVkLiAgVGhpcyBpcyB0aGUgbWFpbiBwYXJzaW5nCiAgICAgICAgICAg
IHJvdXRpbmUgZm9yIGJvdGggQ2FjaGUtQ29udHJvbCBhbmQgUHJhZ21hIGhlYWRlcnMuCiAgICAg
ICAgICAgIChXZWJDb3JlOjpwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZVZhbHVlcyk6IEFkZGVk
LiAgVGhpcyBzcGxpdHMKICAgICAgICAgICAgY2VydGFpbiBDYWNoZS1Db250cm9sIGRpcmVjdGl2
ZSB2YWx1ZXMgaW50byBhIHZlY3RvciBvZiBzdHJpbmdzLgogICAgICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaDoKICAgICAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlQ29udHJvbERpcmVjdGl2ZU1hcCk6IEFkZGVkLiAgVHlwZWRlZiBmb3IgYSBwYXJzZWQKICAg
ICAgICAgICAgQ2FjaGUtQ29udHJvbCBoZWFkZXIuCiAgICAgICAgICAgIChXZWJDb3JlOjpQcmFn
bWFEaXJlY3RpdmVNYXApOiBBZGRlZC4gIFR5cGVkZWYgZm9yIGEgcGFyc2VkIFByYWdtYQogICAg
ICAgICAgICBoZWFkZXIuCiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6cGFyc2VQcmFnbWFEaXJlY3RpdmVzKTogQWRkZWQKICAgICAgICAgICAgZGVjbGFyYXRpb24u
CiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNv
bnRyb2xEaXJlY3RpdmVzKTogRGl0dG8uCiAgICAgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6bV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKToKICAgICAgICAgICAg
QWRkZWQuICBCb29sZWFuIHRvIGRlc2NyaWJlIHdoZW4gdGhlICJDYWNoZS1Db250cm9sIiBoZWFk
ZXIgbmVlZHMgdG8KICAgICAgICAgICAgYmUgcmVwYXJzZWQuCiAgICAgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bV9oYXZlUGFyc2VkUHJhZ21hSGVhZGVyKTogIEFkZGVk
LgogICAgICAgICAgICBCb29sZWFuIHRvIGRlc2NyaWJlIHdoZW4gdGhlICJQcmFnbWEiIGhlYWRl
ciBuZWVkcyB0byBiZSByZXBhcnNlZC4KICAgICAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjptX2NhY2hlQ29udHJvbERpcmVjdGl2ZU1hcCk6IEFkZGVkLgogICAgICAgICAg
ICBDYWNoZWQgbWFwIHRvIGhvbGQgcGFyc2VkICJDYWNoZS1Db250cm9sIiBoZWFkZXJzLgogICAg
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Om1fcHJhZ21hRGlyZWN0aXZl
TWFwKTogQWRkZWQuCiAgICAgICAgICAgIENhY2hlZCBtYXAgdG8gaG9sZCBwYXJzZWQgIlByYWdt
YSIgaGVhZGVycy4KICAgIAogICAgICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJp
bmcuaDoKICAgICAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6ZmluZCk6IEFkZGVkLiAgUmV0dXJu
cyB0aGUgZmlyc3QgbWF0Y2ggYmFzZWQgb24KICAgICAgICAgICAgdGhlIGNoYXJhY3Rlci1tYXRj
aGluZyBmdW5jdGlvbiBwb2ludGVyIHBhc3NlZCBpbi4KICAgICAgICAgICAgKFdlYkNvcmU6OlN0
cmluZzo6cmVtb3ZlQ2hhcmFjdGVycyk6IEFkZGVkIGRlY2xhcmF0aW9uLgogICAgICAgICAgICAo
V2ViQ29yZTo6ZmluZCk6IEFkZGVkLiAgSW5saW5lIG1ldGhvZCB0aGF0IHRha2VzIGEgY2hhcmFj
dGVyLQogICAgICAgICAgICBtYXRjaGluZyBmdW5jdGlvbiBwb2ludGVyLiAgQ2FsbGVkIGJ5IFN0
cmluZ0ltcGw6OmZpbmQoKS4KICAgICAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6
CiAgICAgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZC4g
IENhbGxzCiAgICAgICAgICAgIFN0cmluZ0ltcGw6OnJlbW92ZUNoYXJhY3RlcnMoKS4KICAgICAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwOgogICAgICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyk6IEFkZGVkLiAgUmV0dXJucyBhIHN0cmlu
ZwogICAgICAgICAgICB3aXRoIGFsbCBjaGFyYWN0ZXJzIHJlbW92ZWQgdGhhdCBtYXRjaCB0aGUg
Y2hhcmFjdGVyLW1hdGNoaW5nCiAgICAgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIgcGFzc2VkIGlu
LiAgSWYgdGhlcmUgaXMgbm8gY2hhbmdlIHRvIHRoZSBzdHJpbmcsIGl0CiAgICAgICAgICAgIHJl
dHVybnMgaXRzZWxmLiAgQmFzZWQgaGVhdmlseSBvbiBTdHJpbmdJbXBsOjpzaW1wbGlmeVdoaXRl
c3BhY2UoKS4KICAgICAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmZpbmQpOiBBZGRlZC4g
IENhbGxzIFdlYkNvcmU6OmZpbmQoKS4KICAgICAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmlu
Z0ltcGwuaDoKICAgICAgICAgICAgKFdlYkNvcmU6OkZpbmRNYXRjaEZ1bmN0aW9uUHRyKTogQWRk
ZWQuICBUeXBlZGVmIGZvciBhIGNoYXJhY3Rlci0KICAgICAgICAgICAgbWF0Y2hpbmcgZnVuY3Rp
b24gcG9pbnRlci4KICAgICAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJlbW92ZUNoYXJh
Y3RlcnMpOiBBZGRlZCBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OmZpbmQpOiBEaXR0by4KCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDZkYTY2MWMuLjY5ODBmOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMDgt
MTAtMjIgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KKworICAgICAgICBCdWcg
MjE1OTY6IFdlYkNvcmU6OkNhY2hlIHNob3VsZCB1c2UgcGFyc2VkIFByYWdtYSBhbmQgQ2FjaGUt
Q29udHJvbCBoZWFkZXJzCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgcmVhbCBwYXJzaW5nIGZvciBQcmFnbWEgYW5kIENh
Y2hlLUNvbnRyb2wgaGVhZGVycworICAgICAgICBiYXNlZCBvbiBSRkMgMjYxNiwgU2VjdGlvbnMg
MiwgMTQuOSBhbmQgMTQuMzIuICBJdCBhbHNvIGFkZHMgc29tZQorICAgICAgICBuZXcgU3RyaW5n
IGFuZCBTdHJpbmdJbXBsIG1ldGhvZHMgdG8gYXNzaXN0IHdpdGggdGhlIHBhcnNpbmcuCisKKyAg
ICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmR1bXBT
dGF0cyk6IEFkZGVkLiAgQ29udmVuaWVuY2UgbWV0aG9kIGZvciBkdW1waW5nCisgICAgICAgIHN0
YXRzIG91dHNpZGUgb2YgU2FmYXJpLgorICAgICAgICAqIGxvYWRlci9DYWNoZS5oOiBEZWNsYXJl
ZCBkdW1wU3RhdHMoKS4KKworICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6bXVzdFJldmFsaWRhdGUpOiBVcGRhdGVk
IHRvIHVzZQorICAgICAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FjaGVDb250cm9sRGlyZWN0
aXZlcygpIGluc3RlYWQgb2Ygc3Vic3RyaW5nCisgICAgICAgIG1hdGNoaW5nIG9mIHRoZSBlbnRp
cmUgQ2FjaGUtQ29udHJvbCBoZWFkZXIuCisKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKTogVXNl
ZCB0aGUgbG9jYWwKKyAgICAgICAgJ3Jlc291cmNlJyB2YXJpYWJsZSBpbnN0ZWFkIG9mICdyZXF1
ZXN0LT5jYWNoZWRSZXNvdXJjZSgpJy4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6IFNldAorICAgICAgICBtX2hhdmVQYXJzZWRDYWNo
ZUNvbnRyb2xIZWFkZXIgdG8gZmFsc2Ugd2hlbiBhICJDYWNoZS1Db250cm9sIgorICAgICAgICBo
ZWFkZXIgaXMgc2V0LiAgRGl0dG8gZm9yIG1faGF2ZVBhcnNlZFByYWdtYUhlYWRlciBhbmQgIlBy
YWdtYSIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VQcmFn
bWFEaXJlY3RpdmVzKTogQWRkZWQuCisgICAgICAgIFByb3ZpZGVzIHBhcnNlZCBQcmFnbWEgaGVh
ZGVyIGRpcmVjdGl2ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
cGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKTogQWRkZWQuCisgICAgICAgIFByb3ZpZGVzIHBh
cnNlZCBDYWNoZS1Db250cm9sIGhlYWRlciBkaXJlY3RpdmVzLgorICAgICAgICAoV2ViQ29yZTo6
aXNDYWNoZUhlYWRlclNlcGFyYXRvcik6IEFkZGVkLiAgUmV0dXJucyB0cnVlIGlmIGEKKyAgICAg
ICAgY2hhcmFjdGVyIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciBwZXIgUkZDIDI2MTYsIFNlY3Rp
b24gMi4yLCBlbHNlCisgICAgICAgIHJldHVybnMgZmFsc2UuCisgICAgICAgIChXZWJDb3JlOjpp
c0NvbnRyb2xDaGFyYWN0ZXIpOiBBZGRlZC4gIFJldHVybnMgdHJ1ZSBpZiBhIGNoYXJhY3Rlcgor
ICAgICAgICBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyIHBlciBSRkMgMjYxNiBTZWN0aW9uIDIuMiwg
ZWxzZSByZXR1cm5zIGZhbHNlLgorICAgICAgICAoV2ViQ29yZTo6dHJpbVRvTmV4dFNlcGFyYXRv
cik6IEFkZGVkLiAgUmV0dXJucyBhIHN0cmluZyB0cnVuY2F0ZWQKKyAgICAgICAgYXQgdGhlIGZp
cnN0IHNlcGFyYXRvciBjaGFyYWN0ZXIgcGVyIGlzQ2FjaGVIZWFkZXJTZXBhcmF0b3IoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlQ2FjaGVIZWFkZXIpOiBBZGRlZC4gIFRoaXMgaXMgdGhlIG1h
aW4gcGFyc2luZworICAgICAgICByb3V0aW5lIGZvciBib3RoIENhY2hlLUNvbnRyb2wgYW5kIFBy
YWdtYSBoZWFkZXJzLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDYWNoZUNvbnRyb2xEaXJlY3Rp
dmVWYWx1ZXMpOiBBZGRlZC4gIFRoaXMgc3BsaXRzCisgICAgICAgIGNlcnRhaW4gQ2FjaGUtQ29u
dHJvbCBkaXJlY3RpdmUgdmFsdWVzIGludG8gYSB2ZWN0b3Igb2Ygc3RyaW5ncy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXApOiBBZGRlZC4gIFR5cGVkZWYgZm9yIGEgcGFy
c2VkCisgICAgICAgIENhY2hlLUNvbnRyb2wgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6UHJh
Z21hRGlyZWN0aXZlTWFwKTogQWRkZWQuICBUeXBlZGVmIGZvciBhIHBhcnNlZCBQcmFnbWEKKyAg
ICAgICAgaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBh
cnNlUHJhZ21hRGlyZWN0aXZlcyk6IEFkZGVkCisgICAgICAgIGRlY2xhcmF0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb250cm9sRGlyZWN0
aXZlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Om1f
aGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcik6CisgICAgICAgIEFkZGVkLiAgQm9vbGVhbiB0
byBkZXNjcmliZSB3aGVuIHRoZSAiQ2FjaGUtQ29udHJvbCIgaGVhZGVyIG5lZWRzIHRvCisgICAg
ICAgIGJlIHJlcGFyc2VkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6
Om1faGF2ZVBhcnNlZFByYWdtYUhlYWRlcik6ICBBZGRlZC4KKyAgICAgICAgQm9vbGVhbiB0byBk
ZXNjcmliZSB3aGVuIHRoZSAiUHJhZ21hIiBoZWFkZXIgbmVlZHMgdG8gYmUgcmVwYXJzZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bV9jYWNoZUNvbnRyb2xEaXJl
Y3RpdmVNYXApOiBBZGRlZC4KKyAgICAgICAgQ2FjaGVkIG1hcCB0byBob2xkIHBhcnNlZCAiQ2Fj
aGUtQ29udHJvbCIgaGVhZGVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VC
YXNlOjptX3ByYWdtYURpcmVjdGl2ZU1hcCk6IEFkZGVkLgorICAgICAgICBDYWNoZWQgbWFwIHRv
IGhvbGQgcGFyc2VkICJQcmFnbWEiIGhlYWRlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OmZpbmQpOiBBZGRl
ZC4gIFJldHVybnMgdGhlIGZpcnN0IG1hdGNoIGJhc2VkIG9uCisgICAgICAgIHRoZSBjaGFyYWN0
ZXItbWF0Y2hpbmcgZnVuY3Rpb24gcG9pbnRlciBwYXNzZWQgaW4uCisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmc6OnJlbW92ZUNoYXJhY3RlcnMpOiBBZGRlZCBkZWNsYXJhdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OmZpbmQpOiBBZGRlZC4gIElubGluZSBtZXRob2QgdGhhdCB0YWtlcyBhIGNoYXJh
Y3Rlci0KKyAgICAgICAgbWF0Y2hpbmcgZnVuY3Rpb24gcG9pbnRlci4gIENhbGxlZCBieSBTdHJp
bmdJbXBsOjpmaW5kKCkuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nOjpyZW1vdmVDaGFyYWN0ZXJzKTogQWRkZWQuICBDYWxscwor
ICAgICAgICBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKCkuCisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnJl
bW92ZUNoYXJhY3RlcnMpOiBBZGRlZC4gIFJldHVybnMgYSBzdHJpbmcKKyAgICAgICAgd2l0aCBh
bGwgY2hhcmFjdGVycyByZW1vdmVkIHRoYXQgbWF0Y2ggdGhlIGNoYXJhY3Rlci1tYXRjaGluZwor
ICAgICAgICBmdW5jdGlvbiBwb2ludGVyIHBhc3NlZCBpbi4gIElmIHRoZXJlIGlzIG5vIGNoYW5n
ZSB0byB0aGUgc3RyaW5nLCBpdAorICAgICAgICByZXR1cm5zIGl0c2VsZi4gIEJhc2VkIGhlYXZp
bHkgb24gU3RyaW5nSW1wbDo6c2ltcGxpZnlXaGl0ZXNwYWNlKCkuCisgICAgICAgIChXZWJDb3Jl
OjpTdHJpbmdJbXBsOjpmaW5kKTogQWRkZWQuICBDYWxscyBXZWJDb3JlOjpmaW5kKCkuCisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpGaW5k
TWF0Y2hGdW5jdGlvblB0cik6IEFkZGVkLiAgVHlwZWRlZiBmb3IgYSBjaGFyYWN0ZXItCisgICAg
ICAgIG1hdGNoaW5nIGZ1bmN0aW9uIHBvaW50ZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJ
bXBsOjpyZW1vdmVDaGFyYWN0ZXJzKTogQWRkZWQgZGVjbGFyYXRpb24uCisgICAgICAgIChXZWJD
b3JlOjpTdHJpbmdJbXBsOjpmaW5kKTogRGl0dG8uCisKIDIwMDgtMTAtMjEgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwIGIvV2ViQ29yZS9sb2FkZXIvQ2Fj
aGUuY3BwCmluZGV4IGIyZDVmNDMuLjNiZWJmNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L0NhY2hlLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKQEAgLTY5OSw2ICs2OTks
MTkgQEAgdm9pZCBDYWNoZTo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIH0KIAogI2lmbmRl
ZiBOREVCVUcKK3ZvaWQgQ2FjaGU6OmR1bXBTdGF0cygpCit7CisgICAgU3RhdGlzdGljcyBzID0g
Z2V0U3RhdGlzdGljcygpOworICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0x
MXNcbiIsICIiLCAiQ291bnQiLCAiU2l6ZSIsICJMaXZlU2l6ZSIsICJEZWNvZGVkU2l6ZSIpOwor
ICAgIHByaW50ZigiJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXMgJS0xMXNcbiIsICItLS0tLS0tLS0t
LSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0t
LS0tLSIpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkltYWdl
cyIsIHMuaW1hZ2VzLmNvdW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5p
bWFnZXMuZGVjb2RlZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTEx
ZFxuIiwgIkNTUyIsIHMuY3NzU3R5bGVTaGVldHMuY291bnQsIHMuY3NzU3R5bGVTaGVldHMuc2l6
ZSwgcy5jc3NTdHlsZVNoZWV0cy5saXZlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5kZWNvZGVkU2l6
ZSk7CisgICAgcHJpbnRmKCIlLTExcyAlMTFkICUxMWQgJTExZCAlMTFkXG4iLCAiWFNMIiwgcy54
c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXplLCBzLnhzbFN0eWxlU2hl
ZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXplKTsKKyAgICBwcmludGYo
IiUtMTFzICUxMWQgJTExZCAlMTFkICUxMWRcbiIsICJKYXZhU2NyaXB0Iiwgcy5zY3JpcHRzLmNv
dW50LCBzLnNjcmlwdHMuc2l6ZSwgcy5zY3JpcHRzLmxpdmVTaXplLCBzLnNjcmlwdHMuZGVjb2Rl
ZFNpemUpOworICAgIHByaW50ZigiJS0xMXMgJTExZCAlMTFkICUxMWQgJTExZFxuIiwgIkZvbnRz
Iiwgcy5mb250cy5jb3VudCwgcy5mb250cy5zaXplLCBzLmZvbnRzLmxpdmVTaXplLCBzLmZvbnRz
LmRlY29kZWRTaXplKTsKKyAgICBwcmludGYoIiUtMTFzICUtMTFzICUtMTFzICUtMTFzICUtMTFz
XG5cbiIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLSIsICItLS0tLS0tLS0tLSIpOworfQorCiB2b2lkIENhY2hlOjpkdW1wTFJVTGlzdHMo
Ym9vbCBpbmNsdWRlTGl2ZSkgY29uc3QKIHsKICAgICBwcmludGYoIkxSVS1TUCBsaXN0cyBpbiBl
dmljdGlvbiBvcmRlciAoS2lsb2J5dGVzIGRlY29kZWQsIEtpbG9ieXRlcyBlbmNvZGVkLCBBY2Nl
c3MgY291bnQsIFJlZmVyZW5jZWQpOlxuIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9D
YWNoZS5oIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAppbmRleCBkZDhmNDMyLi5hZTE3NjI5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZS5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0Nh
Y2hlLmgKQEAgLTE2MCw2ICsxNjAsNyBAQCBwcml2YXRlOgogICAgIExSVUxpc3QqIGxydUxpc3RG
b3IoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2b2lkIHJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVz
b3VyY2UqKTsKICNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wU3RhdHMoKTsKICAgICB2b2lk
IGR1bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdDsKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAgYi9XZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggNmQwYWY5Yi4uZWI5MGM1MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0NhY2hl
ZFJlc291cmNlLmNwcApAQCAtMTIwLDEzICsxMjAsMTMgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6
aXNFeHBpcmVkKCkgY29uc3QKICAgICB0aW1lX3Qgbm93ID0gdGltZSgwKTsKICAgICByZXR1cm4g
ZGlmZnRpbWUobm93LCBtX2V4cGlyYXRpb25EYXRlKSA+PSAwOwogfQotICAKKwogdm9pZCBDYWNo
ZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
CiB7CiAgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOwogICAgIG1fZXhwaXJhdGlvbkRhdGUgPSBy
ZXNwb25zZS5leHBpcmF0aW9uRGF0ZSgpOwogfQotICAgIAorCiB2b2lkIENhY2hlZFJlc291cmNl
OjpzZXRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgaWYgKHJlcXVlc3QgJiYgIW1f
cmVxdWVzdCkKQEAgLTMwNSwxMiArMzA1LDE0IEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2U6OmNhblVz
ZUNhY2hlVmFsaWRhdG9yKCkgY29uc3QKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlk
YXRlKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAogewogICAgIGlmIChtX2xvYWRpbmcp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAgCi0gICAgU3RyaW5nIGNhY2hlQ29udHJvbCA9IG1f
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIik7Ci0gICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGJldHRlciB0byB0b2tlbml6ZSB0aGUgZmllbGQuCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNvbnN0IENhY2hlQ29udHJvbERpcmVjdGl2ZU1hcCYgY2FjaGVDb250
cm9sRGlyZWN0aXZlcyA9IG1fcmVzcG9uc2UucGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCk7
CisKKyAgICAvLyBGSVhNRTogQWxzbyBsb29rIGF0IG1heC1hZ2UsIG1pbi1mcmVzaCwgbWF4LXN0
YWxlIGluIENhY2hlLUNvbnRyb2wKICAgICBpZiAoY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lD
YWNoZSkKLSAgICAgICAgcmV0dXJuICFjYWNoZUNvbnRyb2wuaXNFbXB0eSgpICYmIChjYWNoZUNv
bnRyb2wuY29udGFpbnMoIm5vLWNhY2hlIiwgZmFsc2UpIHx8IChpc0V4cGlyZWQoKSAmJiBjYWNo
ZUNvbnRyb2wuY29udGFpbnMoIm11c3QtcmV2YWxpZGF0ZSIsIGZhbHNlKSkpOwotICAgIHJldHVy
biBpc0V4cGlyZWQoKSB8fCBjYWNoZUNvbnRyb2wuY29udGFpbnMoIm5vLWNhY2hlIiwgZmFsc2Up
OworICAgICAgICByZXR1cm4gIWNhY2hlQ29udHJvbERpcmVjdGl2ZXMuaXNFbXB0eSgpICYmIChj
YWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRhaW5zKCJuby1jYWNoZSIpIHx8IChpc0V4cGlyZWQo
KSAmJiBjYWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRhaW5zKCJtdXN0LXJldmFsaWRhdGUiKSkp
OworICAgIHJldHVybiBpc0V4cGlyZWQoKSB8fCBjYWNoZUNvbnRyb2xEaXJlY3RpdmVzLmNvbnRh
aW5zKCJuby1jYWNoZSIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9sb2Fk
ZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAppbmRleCA5MzBhZjRjLi43ZWUxMmFm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL2xvYWRlci5jcHAKQEAgLTM5NSwxNiArMzk1LDE2IEBAIHZvaWQgTG9hZGVyOjpIb3N0Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VSCiAgICAgICAgIC8vIERpZCBub3QgZ2V0IDMwNCByZXNwb25zZSwgY29udGludWUgYXMgYSBy
ZWd1bGFyIHJlc291cmNlIGxvYWQuCiAgICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGlvbkZhaWxl
ZChyZXNvdXJjZSk7CiAgICAgfQotICAgIAorCiAgICAgcmVzb3VyY2UtPnNldFJlc3BvbnNlKHJl
c3BvbnNlKTsKLSAgICAKKwogICAgIFN0cmluZyBlbmNvZGluZyA9IHJlc3BvbnNlLnRleHRFbmNv
ZGluZ05hbWUoKTsKICAgICBpZiAoIWVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0
LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7CisgICAgICAgIHJlc291
cmNlLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7CiAgICAgCiAgICAgaWYgKHJlcXVlc3QtPmlzTXVs
dGlwYXJ0KCkpIHsKLSAgICAgICAgQVNTRVJUKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmlz
SW1hZ2UoKSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdC0+Y2Fj
aGVkUmVzb3VyY2UoKSktPmNsZWFyKCk7CisgICAgICAgIEFTU0VSVChyZXNvdXJjZS0+aXNJbWFn
ZSgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXNvdXJjZSktPmNsZWFy
KCk7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKS0+ZnJhbWUoKSkKICAgICAgICAg
ICAgIHJlcXVlc3QtPmRvY0xvYWRlcigpLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0
ZWQoKTsKICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpIHsKQEAgLTQxMiwx
MCArNDEyLDEwIEBAIHZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSCiAgICAgICAgIAogICAgICAgICAv
LyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGluIGEgRG9jTG9hZGVyJ3MgcmVxdWVzdCBjb3Vu
dAogICAgICAgICByZXF1ZXN0LT5kb2NMb2FkZXIoKS0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7
Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBJZiB3ZSBnZXQgYSBtdWx0aXBhcnQgcmVzcG9u
c2UsIHdlIG11c3QgaGF2ZSBhIGhhbmRsZQogICAgICAgICBBU1NFUlQobG9hZGVyLT5oYW5kbGUo
KSk7Ci0gICAgICAgIGlmICghcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+aXNJbWFnZSgpKQor
ICAgICAgICBpZiAoIXJlc291cmNlLT5pc0ltYWdlKCkpCiAgICAgICAgICAgICBsb2FkZXItPmhh
bmRsZSgpLT5jYW5jZWwoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAppbmRleCBhOWRkYzMwLi40MWJlMDc3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAK
QEAgLTI5LDYgKzI5LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgdm9pZCBw
YXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBWZWN0b3I8cGFpcjxTdHJpbmcs
IFN0cmluZz4gPiYgcmVzdWx0KTsKK3N0YXRpYyB2b2lkIHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0
aXZlVmFsdWVzKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlcywgVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCk7CisKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmlzSFRUUCgpIGNvbnN0CiB7CiAgICAg
bGF6eUluaXQoKTsKQEAgLTE1Myw2ICsxNTYsMTEgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJgog
ewogICAgIGxhenlJbml0KCk7CiAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImNh
Y2hlLWNvbnRyb2wiKSkKKyAgICAgICAgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyID0g
ZmFsc2U7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInByYWdtYSIpKQor
ICAgICAgICBtX2hhdmVQYXJzZWRQcmFnbWFIZWFkZXIgPSBmYWxzZTsKKwogICAgIG1faHR0cEhl
YWRlckZpZWxkcy5zZXQobmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjMsNiArMTcxLDcyIEBAIGNv
bnN0IEhUVFBIZWFkZXJNYXAmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpodHRwSGVhZGVyRmllbGRz
KCkgY29uc3QKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzOyAKIH0KIAorY29uc3QgUHJh
Z21hRGlyZWN0aXZlTWFwJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VQcmFnbWFEaXJlY3Rp
dmVzKCkgY29uc3QKK3sKKyAgICBsYXp5SW5pdCgpOworCisgICAgaWYgKG1faGF2ZVBhcnNlZFBy
YWdtYUhlYWRlcikKKyAgICAgICAgcmV0dXJuIG1fcHJhZ21hRGlyZWN0aXZlTWFwOworCisgICAg
bV9wcmFnbWFEaXJlY3RpdmVNYXAuY2xlYXIoKTsKKyAgICBtX2hhdmVQYXJzZWRQcmFnbWFIZWFk
ZXIgPSB0cnVlOworCisgICAgY29uc3QgU3RyaW5nIHByYWdtYUhlYWRlciA9IGh0dHBIZWFkZXJG
aWVsZCgiUHJhZ21hIik7CisgICAgaWYgKHByYWdtYUhlYWRlci5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBtX3ByYWdtYURpcmVjdGl2ZU1hcDsKKworICAgIFZlY3RvcjxwYWlyPFN0cmluZywg
U3RyaW5nPiA+IGRpcmVjdGl2ZXM7CisgICAgcGFyc2VDYWNoZUhlYWRlcihwcmFnbWFIZWFkZXIs
IGRpcmVjdGl2ZXMpOworCisgICAgdW5zaWduZWQgbWF4ID0gZGlyZWN0aXZlcy5zaXplKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heDsgKytpKQorICAgICAgICBtX3ByYWdtYURp
cmVjdGl2ZU1hcC5zZXQoZGlyZWN0aXZlc1tpXS5maXJzdCwgZGlyZWN0aXZlc1tpXS5zZWNvbmQp
OworCisgICAgcmV0dXJuIG1fcHJhZ21hRGlyZWN0aXZlTWFwOworfQorCitjb25zdCBDYWNoZUNv
bnRyb2xEaXJlY3RpdmVNYXAmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNhY2hlQ29udHJv
bERpcmVjdGl2ZXMoKSBjb25zdAoreworICAgIGxhenlJbml0KCk7CisKKyAgICBpZiAobV9oYXZl
UGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKQorICAgICAgICByZXR1cm4gbV9jYWNoZUNvbnRyb2xE
aXJlY3RpdmVNYXA7CisKKyAgICBtX2NhY2hlQ29udHJvbERpcmVjdGl2ZU1hcC5jbGVhcigpOwor
ICAgIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlciA9IHRydWU7CisKKyAgICBjb25zdCBT
dHJpbmcgY2FjaGVDb250cm9sSGVhZGVyID0gaHR0cEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9s
Iik7CisgICAgaWYgKGNhY2hlQ29udHJvbEhlYWRlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBtX2NhY2hlQ29udHJvbERpcmVjdGl2ZU1hcDsKKworICAgIFZlY3RvcjxwYWlyPFN0cmluZywg
U3RyaW5nPiA+IGRpcmVjdGl2ZXM7CisgICAgcGFyc2VDYWNoZUhlYWRlcihjYWNoZUNvbnRyb2xI
ZWFkZXIsIGRpcmVjdGl2ZXMpOworCisgICAgdW5zaWduZWQgaU1heCA9IGRpcmVjdGl2ZXMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpTWF4OyArK2kpIHsKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gZGlyZWN0aXZlVmFsdWVzOworICAgICAgICBpZiAoKGVxdWFsSWdub3Jp
bmdDYXNlKGRpcmVjdGl2ZXNbaV0uZmlyc3QsICJwcml2YXRlIikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgIm5vLWNhY2hlIikpICYmICFkaXJlY3RpdmVzW2ldLnNl
Y29uZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZVZh
bHVlcyhkaXJlY3RpdmVzW2ldLnNlY29uZCwgZGlyZWN0aXZlVmFsdWVzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZGlyZWN0aXZlVmFsdWVzLmFwcGVuZChkaXJlY3RpdmVzW2ldLnNlY29u
ZCk7CisKKyAgICAgICAgaWYgKG1fY2FjaGVDb250cm9sRGlyZWN0aXZlTWFwLmNvbnRhaW5zKGRp
cmVjdGl2ZXNbaV0uZmlyc3QpKSB7CisgICAgICAgICAgICBDYWNoZUNvbnRyb2xEaXJlY3RpdmVN
YXA6Oml0ZXJhdG9yIGVudHJ5ID0gbV9jYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXAuZmluZChkaXJl
Y3RpdmVzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGpNYXggPSBkaXJlY3RpdmVW
YWx1ZXMuc2l6ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGpNYXg7
ICsraikKKyAgICAgICAgICAgICAgICBlbnRyeS0+c2Vjb25kLmFkZChkaXJlY3RpdmVWYWx1ZXNb
al0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSGFzaFNldDxTdHJpbmc+IHZhbHVl
czsKKyAgICAgICAgICAgIHVuc2lnbmVkIGpNYXggPSBkaXJlY3RpdmVWYWx1ZXMuc2l6ZSgpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGpNYXg7ICsraikKKyAgICAgICAg
ICAgICAgICB2YWx1ZXMuYWRkKGRpcmVjdGl2ZVZhbHVlc1tqXSk7CisgICAgICAgICAgICBtX2Nh
Y2hlQ29udHJvbERpcmVjdGl2ZU1hcC5zZXQoZGlyZWN0aXZlc1tpXS5maXJzdCwgdmFsdWVzKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtX2NhY2hlQ29udHJvbERpcmVjdGl2ZU1h
cDsKK30KKwogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KCkgY29uc3QK
IHsKICAgICBsYXp5SW5pdCgpOwpAQCAtMjMzLDQgKzMwNywxMDcgQEAgYm9vbCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6Y29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNv
dXJjZVJlc3AKICAgICByZXR1cm4gUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1Db21wYXJlKGEs
IGIpOwogfQogCitzdGF0aWMgYm9vbCBpc0NhY2hlSGVhZGVyU2VwYXJhdG9yKFVDaGFyIGMpCit7
CisgICAgLy8gU2VlIFJGQyAyNjE2LCBTZWN0aW9uIDIuMgorICAgIHN3aXRjaCAoYykgeworICAg
ICAgICBjYXNlICcoJzoKKyAgICAgICAgY2FzZSAnKSc6CisgICAgICAgIGNhc2UgJzwnOgorICAg
ICAgICBjYXNlICc+JzoKKyAgICAgICAgY2FzZSAnQCc6CisgICAgICAgIGNhc2UgJywnOgorICAg
ICAgICBjYXNlICc7JzoKKyAgICAgICAgY2FzZSAnOic6CisgICAgICAgIGNhc2UgJ1xcJzoKKyAg
ICAgICAgY2FzZSAnIic6CisgICAgICAgIGNhc2UgJy8nOgorICAgICAgICBjYXNlICdbJzoKKyAg
ICAgICAgY2FzZSAnXSc6CisgICAgICAgIGNhc2UgJz8nOgorICAgICAgICBjYXNlICc9JzoKKyAg
ICAgICAgY2FzZSAneyc6CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICBjYXNlICcgJzoKKyAg
ICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBp
c0NvbnRyb2xDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA8ICcgJyB8fCBjID09
IDEyNzsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgdHJpbVRvTmV4dFNlcGFyYXRvcihjb25z
dCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBzdHIuZmluZChp
c0NhY2hlSGVhZGVyU2VwYXJhdG9yLCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlQ2FjaGVI
ZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+
JiByZXN1bHQpCit7CisgICAgY29uc3QgU3RyaW5nIHNhZmVIZWFkZXIgPSBoZWFkZXIucmVtb3Zl
Q2hhcmFjdGVycyhpc0NvbnRyb2xDaGFyYWN0ZXIpOworICAgIHVuc2lnbmVkIG1heCA9IHNhZmVI
ZWFkZXIubGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwb3MgPSAwOyBwb3MgPCBtYXg7IC8q
IHBvcyBpbmNyZW1lbnRlZCBpbiBsb29wICovKSB7CisgICAgICAgIGludCBuZXh0Q29tbWFQb3Np
dGlvbiA9IHNhZmVIZWFkZXIuZmluZCgnLCcsIHBvcyk7CisgICAgICAgIGludCBuZXh0RXF1YWxT
aWduUG9zaXRpb24gPSBzYWZlSGVhZGVyLmZpbmQoJz0nLCBwb3MpOworICAgICAgICBpZiAobmV4
dEVxdWFsU2lnblBvc2l0aW9uID49IDAgJiYgKG5leHRFcXVhbFNpZ25Qb3NpdGlvbiA8IG5leHRD
b21tYVBvc2l0aW9uIHx8IG5leHRDb21tYVBvc2l0aW9uIDwgMCkpIHsKKyAgICAgICAgICAgIC8v
IEdldCBkaXJlY3RpdmUgbmFtZSwgcGFyc2UgcmlnaHQgaGFuZCBzaWRlIG9mIGVxdWFsIHNpZ24s
IHRoZW4gYWRkIHRvIG1hcAorICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGl2ZSA9IHRyaW1Ub05l
eHRTZXBhcmF0b3Ioc2FmZUhlYWRlci5zdWJzdHJpbmcocG9zLCBuZXh0RXF1YWxTaWduUG9zaXRp
b24gLSBwb3MpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgICAgIHBvcyArPSBuZXh0RXF1
YWxTaWduUG9zaXRpb24gLSBwb3MgKyAxOworCisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBz
YWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG1heCAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7Cisg
ICAgICAgICAgICBpZiAodmFsdWVbMF0gPT0gJyInKSB7CisgICAgICAgICAgICAgICAgLy8gVGhl
IHZhbHVlIGlzIGEgcXVvdGVkIHN0cmluZworICAgICAgICAgICAgICAgIGludCBuZXh0RG91Ymxl
UXVvdGVQb3NpdGlvbiA9IHZhbHVlLmZpbmQoJyInLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAo
bmV4dERvdWJsZVF1b3RlUG9zaXRpb24gPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBT
dG9yZSB0aGUgdmFsdWUgYXMgYSBxdW90ZWQgc3RyaW5nIHdpdGhvdXQgcXVvdGVzCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oZGlyZWN0aXZl
LCB2YWx1ZS5zdWJzdHJpbmcoMSwgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gLSAxKS5zdHJpcFdo
aXRlU3BhY2UoKSkpOworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmlu
ZCgnIicsIHBvcykgLSBwb3MpICsgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gKyAxOworICAgICAg
ICAgICAgICAgICAgICAvLyBNb3ZlIHBhc3QgbmV4dCBjb21tYSwgaWYgdGhlcmUgaXMgb25lCisg
ICAgICAgICAgICAgICAgICAgIGludCBuZXh0Q29tbWFQb3NpdGlvbjIgPSBzYWZlSGVhZGVyLmZp
bmQoJywnLCBwb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24y
ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gbmV4dENvbW1hUG9zaXRpb24y
IC0gcG9zICsgMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOyAvLyBQYXJzZSBlcnJvciBpZiB0aGVyZSBpcyBhbnl0aGluZyBsZWZ0IHdp
dGggbm8gY29tbWEKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBQYXJzZSBlcnJvcjsganVzdCB1c2UgdGhlIHJlc3QgYXMgdGhlIHZhbHVlCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oZGlyZWN0aXZl
LCB0cmltVG9OZXh0U2VwYXJhdG9yKHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGgoKSAt
IDEpLnN0cmlwV2hpdGVTcGFjZSgpKSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGUgdmFsdWUgaXMgYSB0b2tlbiB1bnRpbCB0aGUgbmV4dCBjb21tYQorICAgICAgICAgICAg
ICAgIGludCBuZXh0Q29tbWFQb3NpdGlvbjIgPSB2YWx1ZS5maW5kKCcsJywgMCk7CisgICAgICAg
ICAgICAgICAgaWYgKG5leHRDb21tYVBvc2l0aW9uMiA+PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZSB2YWx1ZSBpcyBkZWxpbWl0ZWQgYnkgdGhlIG5leHQgY29tbWEKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihkaXJlY3RpdmUs
IHRyaW1Ub05leHRTZXBhcmF0b3IodmFsdWUuc3Vic3RyaW5nKDAsIG5leHRDb21tYVBvc2l0aW9u
Mikuc3RyaXBXaGl0ZVNwYWNlKCkpKSk7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSAoc2Fm
ZUhlYWRlci5maW5kKCcsJywgcG9zKSAtIHBvcykgKyAxOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXN0IGlzIHRoZSB2YWx1ZTsgbm8gY2hh
bmdlIHRvIHZhbHVlIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBh
aXI8U3RyaW5nLCBTdHJpbmc+KGRpcmVjdGl2ZSwgdHJpbVRvTmV4dFNlcGFyYXRvcih2YWx1ZSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChuZXh0Q29tbWFQb3NpdGlvbiA+PSAwICYmIChu
ZXh0Q29tbWFQb3NpdGlvbiA8IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiB8fCBuZXh0RXF1YWxTaWdu
UG9zaXRpb24gPCAwKSkgeworICAgICAgICAgICAgLy8gQWRkIGRpcmVjdGl2ZSB0byBtYXAgd2l0
aCBlbXB0eSBzdHJpbmcgYXMgdmFsdWUKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpcjxT
dHJpbmcsIFN0cmluZz4odHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVhZGVyLnN1YnN0cmluZyhw
b3MsIG5leHRDb21tYVBvc2l0aW9uIC0gcG9zKS5zdHJpcFdoaXRlU3BhY2UoKSksICIiKSk7Cisg
ICAgICAgICAgICBwb3MgKz0gbmV4dENvbW1hUG9zaXRpb24gLSBwb3MgKyAxOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gQWRkIGxhc3QgZGlyZWN0aXZlIHRvIG1hcCB3aXRoIGVt
cHR5IHN0cmluZyBhcyB2YWx1ZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWlyPFN0cmlu
ZywgU3RyaW5nPih0cmltVG9OZXh0U2VwYXJhdG9yKHNhZmVIZWFkZXIuc3Vic3RyaW5nKHBvcywg
bWF4IC0gcG9zKS5zdHJpcFdoaXRlU3BhY2UoKSksICIiKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlQ2FjaGVDb250cm9sRGly
ZWN0aXZlVmFsdWVzKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlcywgVmVjdG9yPFN0cmluZz4mIHJl
c3VsdCkKK3sKKyAgICBkaXJlY3RpdmVzLnNwbGl0KCcsJywgZmFsc2UsIHJlc3VsdCk7CisgICAg
dW5zaWduZWQgbWF4ID0gcmVzdWx0LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWF4OyArK2kpCisgICAgICAgIHJlc3VsdFtpXSA9IHJlc3VsdFtpXS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNw
b25zZUJhc2UuaAppbmRleCAwNmIwNDk5Li4zZGUxYTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtMzEsNiArMzEsOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhhc2hTZXQ8U3Ry
aW5nPiwgQ2FzZUZvbGRpbmdIYXNoPiBDYWNoZUNvbnRyb2xEaXJlY3RpdmVNYXA7Cit0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gUHJhZ21hRGlyZWN0aXZl
TWFwOworCiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiAvLyBEbyBub3QgdXNlIHRoaXMgY2xh
c3MgZGlyZWN0bHksIHVzZSB0aGUgY2xhc3MgUmVzcG9uc2VSZXNwb25zZSBpbnN0ZWFkCkBAIC02
Niw2ICs2OSw5IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlIHsKICAgICB2b2lkIHNldEhU
VFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwog
ICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJGaWVsZHMoKSBjb25zdDsKIAorICAg
IGNvbnN0IFByYWdtYURpcmVjdGl2ZU1hcCYgcGFyc2VQcmFnbWFEaXJlY3RpdmVzKCkgY29uc3Q7
CisgICAgY29uc3QgQ2FjaGVDb250cm9sRGlyZWN0aXZlTWFwJiBwYXJzZUNhY2hlQ29udHJvbERp
cmVjdGl2ZXMoKSBjb25zdDsKKwogICAgIGJvb2wgaXNNdWx0aXBhcnQoKSBjb25zdCB7IHJldHVy
biBtaW1lVHlwZSgpID09ICJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIjsgfQogCiAgICAgYm9v
bCBpc0F0dGFjaG1lbnQoKSBjb25zdDsKQEAgLTExOSw4ICsxMjUsMTEgQEAgY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZUJhc2UgewogICAgIEhUVFBIZWFkZXJNYXAgbV9odHRwSGVhZGVyRmllbGRzOwog
ICAgIHRpbWVfdCBtX2V4cGlyYXRpb25EYXRlOwogICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZERh
dGU7Ci0gICAgYm9vbCBtX2lzTnVsbDsKLQorICAgIGJvb2wgbV9pc051bGw6MTsKKyAgICBtdXRh
YmxlIGJvb2wgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyOjE7CisgICAgbXV0YWJsZSBi
b29sIG1faGF2ZVBhcnNlZFByYWdtYUhlYWRlcjoxOworICAgIG11dGFibGUgQ2FjaGVDb250cm9s
RGlyZWN0aXZlTWFwIG1fY2FjaGVDb250cm9sRGlyZWN0aXZlTWFwOworICAgIG11dGFibGUgUHJh
Z21hRGlyZWN0aXZlTWFwIG1fcHJhZ21hRGlyZWN0aXZlTWFwOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiBiKSB7IHJldHVybiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29tcGFyZShhLCBiKTsgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmggYi9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAppbmRleCBhMjE3NGVlLi5iYTkzNDAx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaApAQCAtOTQsNiArOTQsOCBA
QCBwdWJsaWM6CiAKICAgICBpbnQgZmluZChVQ2hhciBjLCBpbnQgc3RhcnQgPSAwKSBjb25zdAog
ICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoYywgc3RhcnQpIDogLTE7IH0K
KyAgICBpbnQgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIGlu
dCBzdGFydCA9IDApIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Zmlu
ZChtYXRjaEZ1bmN0aW9uLCBzdGFydCkgOiAtMTsgfQogICAgIGludCBmaW5kKGNvbnN0IGNoYXIq
IHN0ciwgaW50IHN0YXJ0ID0gMCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKICAg
ICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQsIGNhc2VTZW5z
aXRpdmUpIDogLTE7IH0KICAgICBpbnQgZmluZChjb25zdCBTdHJpbmcmIHN0ciwgaW50IHN0YXJ0
ID0gMCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKQEAgLTEzNCw3ICsxMzYsOSBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwotICAgIAorCisgICAgU3RyaW5nIHJlbW92
ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cikgY29uc3Q7CisKICAgICAvLyBS
ZXR1cm4gdGhlIHN0cmluZyB3aXRoIGNhc2UgZm9sZGVkIGZvciBjYXNlIGluc2Vuc2l0aXZlIGNv
bXBhcmlzb24uCiAgICAgU3RyaW5nIGZvbGRDYXNlKCkgY29uc3Q7CiAKQEAgLTI5Miw2ICsyOTYs
MTcgQEAgaW5saW5lIGludCBmaW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVu
Z3RoLCBVQ2hhciBjaGFyYWN0ZXIsIGludCBzdGEKICAgICByZXR1cm4gLTE7CiB9CiAKK2lubGlu
ZSBpbnQgZmluZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgQ2hhcmFj
dGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCBpbnQgc3RhcnRQb3NpdGlvbikKK3sK
KyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiAtMTsKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRQb3NpdGlvbjsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIGlmIChtYXRjaEZ1bmN0aW9uKGNoYXJhY3RlcnNbaV0pKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oaSk7CisgICAgfQorICAgIHJldHVy
biAtMTsKK30KKwogaW5saW5lIGludCByZXZlcnNlRmluZChjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVUNoYXIgY2hhcmFjdGVyLCBpbnQgc3RhcnRQb3NpdGlvbikKIHsK
ICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkgfHwgIWxl
bmd0aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKaW5kZXggNDQ1MDBlMS4uZjBjZTA0MCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKQEAgLTI3Niw2ICsyNzYsMTMgQEAgU3RyaW5nIFN0cmlu
Zzo6c2ltcGxpZnlXaGl0ZVNwYWNlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT5zaW1wbGlm
eVdoaXRlU3BhY2UoKTsKIH0KIAorU3RyaW5nIFN0cmluZzo6cmVtb3ZlQ2hhcmFjdGVycyhDaGFy
YWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1w
bCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2ltcGwtPnJlbW92ZUNo
YXJhY3RlcnMoZmluZE1hdGNoKTsKK30KKwogU3RyaW5nIFN0cmluZzo6Zm9sZENhc2UoKSBjb25z
dAogewogICAgIGlmICghbV9pbXBsKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZ0ltcGwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCmlu
ZGV4IDBmYzgyMzIuLjE1MTVkMWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9T
dHJpbmdJbXBsLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAK
QEAgLTMzMCw2ICszMzAsMzMgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpz
dHJpcFdoaXRlU3BhY2UoKQogICAgIHJldHVybiBjcmVhdGUobV9kYXRhICsgc3RhcnQsIGVuZCAr
IDEgLSBzdGFydCk7CiB9CiAKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVt
b3ZlQ2hhcmFjdGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkKK3sKKyAg
ICBTdHJpbmdCdWZmZXIgZGF0YShtX2xlbmd0aCk7CisKKyAgICBjb25zdCBVQ2hhciogZnJvbSA9
IG1fZGF0YTsKKyAgICBjb25zdCBVQ2hhciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKKyAg
ICB1bnNpZ25lZCBvdXRjID0gMDsKKworICAgIFVDaGFyKiB0byA9IGRhdGEuY2hhcmFjdGVycygp
OworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAm
JiBmaW5kTWF0Y2goKmZyb20pKQorICAgICAgICAgICAgZnJvbSsrOworICAgICAgICB3aGlsZSAo
ZnJvbSAhPSBmcm9tZW5kICYmICFmaW5kTWF0Y2goKmZyb20pKQorICAgICAgICAgICAgdG9bb3V0
YysrXSA9ICpmcm9tKys7CisgICAgICAgIGlmIChmcm9tID09IGZyb21lbmQpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAob3V0YyA9PSBtX2xlbmd0aCkKKyAgICAgICAgcmV0
dXJuIHRoaXM7CisKKyAgICBkYXRhLnNocmluayhvdXRjKTsKKworICAgIHJldHVybiBhZG9wdChk
YXRhKTsKK30KKwogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpzaW1wbGlmeVdo
aXRlU3BhY2UoKQogewogICAgIFN0cmluZ0J1ZmZlciBkYXRhKG1fbGVuZ3RoKTsKQEAgLTUwNiw2
ICs1MzMsMTEgQEAgaW50IFN0cmluZ0ltcGw6OmZpbmQoVUNoYXIgYywgaW50IHN0YXJ0KQogICAg
IHJldHVybiBXZWJDb3JlOjpmaW5kKG1fZGF0YSwgbV9sZW5ndGgsIGMsIHN0YXJ0KTsKIH0KIAor
aW50IFN0cmluZ0ltcGw6OmZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0
aW9uLCBpbnQgc3RhcnQpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZpbmQobV9kYXRhLCBtX2xl
bmd0aCwgbWF0Y2hGdW5jdGlvbiwgc3RhcnQpOworfQorCiBpbnQgU3RyaW5nSW1wbDo6ZmluZChT
dHJpbmdJbXBsKiBzdHIsIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKQogewogICAgIC8q
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBjYzhmODE1Li5hMWI5ZjM2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTQ3LDYgKzQ3LDggQEAgc3RydWN0IEhhc2hB
bmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKIHN0cnVjdCBTdHJpbmdIYXNoOwogc3RydWN0IFVDaGFy
QnVmZmVyVHJhbnNsYXRvcjsKIAordHlwZWRlZiBib29sICgqQ2hhcmFjdGVyTWF0Y2hGdW5jdGlv
blB0cikoVUNoYXIpOworCiBjbGFzcyBTdHJpbmdJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8U3Ry
aW5nSW1wbD4gewogICAgIGZyaWVuZCBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgZnJpZW5kIHN0
cnVjdCBDU3RyaW5nVHJhbnNsYXRvcjsKQEAgLTEyMyw4ICsxMjUsMTEgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBzaW1wbGlmeVdoaXRlU3BhY2UoKTsKIAorICAgIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVtb3ZlQ2hhcmFjdGVycyhDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKTsKKwog
ICAgIGludCBmaW5kKGNvbnN0IGNoYXIqLCBpbnQgaW5kZXggPSAwLCBib29sIGNhc2VTZW5zaXRp
dmUgPSB0cnVlKTsKICAgICBpbnQgZmluZChVQ2hhciwgaW50IGluZGV4ID0gMCk7CisgICAgaW50
IGZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciwgaW50IGluZGV4ID0gMCk7CiAgICAgaW50
IGZpbmQoU3RyaW5nSW1wbCosIGludCBpbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSk7
CiAKICAgICBpbnQgcmV2ZXJzZUZpbmQoVUNoYXIsIGludCBpbmRleCk7Cg==
</data>
<flag name="review"
          id="11212"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24927</attachid>
            <date>2008-11-05 17:32:24 -0800</date>
            <delta_ts>2008-11-05 17:41:09 -0800</delta_ts>
            <desc>Patch to address Bug 21596 Comment #5</desc>
            <filename>bug-21596-comment-5.diff</filename>
            <type>text/plain</type>
            <size>1175</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBlNjJmY2U0Li40NDVlOTIzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0zMzYsMTMgKzMzNiwyMSBAQCBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnN0cmlwV2hpdGVTcGFjZSgpCiAKIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVtb3ZlQ2hhcmFjdGVycyhDaGFyYWN0
ZXJNYXRjaEZ1bmN0aW9uUHRyIGZpbmRNYXRjaCkKIHsKLSAgICBTdHJpbmdCdWZmZXIgZGF0YSht
X2xlbmd0aCk7Ci0KICAgICBjb25zdCBVQ2hhciogZnJvbSA9IG1fZGF0YTsKICAgICBjb25zdCBV
Q2hhciogZnJvbWVuZCA9IGZyb20gKyBtX2xlbmd0aDsKLSAgICB1bnNpZ25lZCBvdXRjID0gMDsK
IAorICAgIC8vIEFzc3VtZSB0aGUgY29tbW9uIGNhc2Ugd2lsbCBub3QgcmVtb3ZlIGFueSBjaGFy
YWN0ZXJzCisgICAgd2hpbGUgKGZyb20gIT0gZnJvbWVuZCAmJiAhZmluZE1hdGNoKCpmcm9tKSkK
KyAgICAgICAgZnJvbSsrOworICAgIGlmIChmcm9tID09IGZyb21lbmQpCisgICAgICAgIHJldHVy
biB0aGlzOworCisgICAgU3RyaW5nQnVmZmVyIGRhdGEobV9sZW5ndGgpOwogICAgIFVDaGFyKiB0
byA9IGRhdGEuY2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIG91dGMgPSBmcm9tIC0gbV9kYXRh
OworCisgICAgaWYgKG91dGMpCisgICAgICAgIG1lbWNweSh0bywgbV9kYXRhLCBvdXRjICogc2l6
ZW9mKFVDaGFyKSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB3aGlsZSAoZnJvbSAh
PSBmcm9tZW5kICYmIGZpbmRNYXRjaCgqZnJvbSkpCkBAIC0zNTMsOSArMzYxLDYgQEAgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rlck1h
dGNoRnVuY3Rpb25QdHIgZmkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGlmIChv
dXRjID09IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm4gdGhpczsKLQogICAgIGRhdGEuc2hyaW5r
KG91dGMpOwogCiAgICAgcmV0dXJuIGFkb3B0KGRhdGEpOwo=
</data>
<flag name="review"
          id="11435"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>