<?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>51134</bug_id>
          
          <creation_ts>2010-12-15 14:13:36 -0800</creation_ts>
          <short_desc>Move loading related code from MemoryCache to CachedResourceLoader</short_desc>
          <delta_ts>2011-01-10 03:15:14 -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>PC</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>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>322807</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-15 14:13:36 -0800</bug_when>
    <thetext>Cache should not be the component that initiates loads. MemoryCache::requestResource and similar should be moved/merged to CachedResourceLoader. This is likely to simplify the code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322921</commentid>
    <comment_count>1</comment_count>
      <attachid>76707</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-15 16:23:49 -0800</bug_when>
    <thetext>Created attachment 76707
refactor loading code out of MemoryCache

Move loading related code from MemoryCache to CachedResourceLoader
- Merge MemoryCache::requestResource to CachedResourceLoader::requestResource
- Merge MemoryCache::requestUserCSSStyleSheet to CachedResourceLoader::requestUserCSSStyleSheet
- Move MemoryCache::revalidateResource to CachedResourceLoader::revalidateResource
- Add MemoryCache::add
- Refactor the decision on whether to reload, revalidate or use the existing resource to 
  a single function, CachedResourceLoader::determineRevalidationPolicy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322922</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-15 16:25:31 -0800</bug_when>
    <thetext>Attachment 76707 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/css/CSSImageValue.cpp&apos;, u&apos;WebCore/loader/ImageLoader.cpp&apos;, u&apos;WebCore/loader/cache/CachedImage.cpp&apos;, u&apos;WebCore/loader/cache/CachedResource.cpp&apos;, u&apos;WebCore/loader/cache/CachedResource.h&apos;, u&apos;WebCore/loader/cache/CachedResourceLoader.cpp&apos;, u&apos;WebCore/loader/cache/CachedResourceLoader.h&apos;, u&apos;WebCore/loader/cache/MemoryCache.cpp&apos;, u&apos;WebCore/loader/cache/MemoryCache.h&apos;]&quot; exit_code: 1
WebCore/loader/cache/CachedResourceLoader.cpp:57:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323132</commentid>
    <comment_count>3</comment_count>
      <attachid>76761</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-16 05:53:34 -0800</bug_when>
    <thetext>Created attachment 76761
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323496</commentid>
    <comment_count>4</comment_count>
      <attachid>76761</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-12-16 16:15:23 -0800</bug_when>
    <thetext>Comment on attachment 76761
fix style

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

Looks good to me, just a couple pedantic questions/comments.

I&apos;m going to refrain from r+ing to give other folks a chance to chime in, especially since I&apos;m not very familiar with the MemoryCache piece of this.

&gt; WebCore/loader/cache/CachedResourceLoader.cpp:76
&gt; +    default:
&gt; +        break;
&gt; +    }
&gt; +    return 0;

Should we have an ASSERT_NOT_REACHED() here?

&gt; WebCore/loader/cache/CachedResourceLoader.cpp:259
&gt; -    // FIXME: Consider letting the embedder block mixed content loads.
&gt; +

I&apos;m not really familiar with the mixed content policy code, is this FIXME not valid anymore?

&gt; WebCore/loader/cache/CachedResourceLoader.cpp:276
&gt; +    if (!url.isValid())
&gt; +        return 0;
&gt; +    
&gt; +    if (!canRequest(type, url))
&gt; +        return 0;

Is there any particular reason to split this out into 2 if statements?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323659</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-17 01:39:55 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 76761 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76761&amp;action=review
&gt; 
&gt; Looks good to me, just a couple pedantic questions/comments.
&gt; 
&gt; I&apos;m going to refrain from r+ing to give other folks a chance to chime in, especially since I&apos;m not very familiar with the MemoryCache piece of this.
&gt; 
&gt; &gt; WebCore/loader/cache/CachedResourceLoader.cpp:76
&gt; &gt; +    default:
&gt; &gt; +        break;
&gt; &gt; +    }
&gt; &gt; +    return 0;
&gt; 
&gt; Should we have an ASSERT_NOT_REACHED() here?

Copy code but yeah, we should.

&gt; 
&gt; &gt; WebCore/loader/cache/CachedResourceLoader.cpp:259
&gt; &gt; -    // FIXME: Consider letting the embedder block mixed content loads.
&gt; &gt; +
&gt; 
&gt; I&apos;m not really familiar with the mixed content policy code, is this FIXME not valid anymore?

That was removed by accident (I still don&apos;t know what it means).

&gt; 
&gt; &gt; WebCore/loader/cache/CachedResourceLoader.cpp:276
&gt; &gt; +    if (!url.isValid())
&gt; &gt; +        return 0;
&gt; &gt; +    
&gt; &gt; +    if (!canRequest(type, url))
&gt; &gt; +        return 0;
&gt; 
&gt; Is there any particular reason to split this out into 2 if statements?

I thought a security check deserves a line of it&apos;s own. As the comment below says, this should merge with the other similar security check but  I didn&apos;t want to change the existing behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324602</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-20 15:17:13 -0800</bug_when>
    <thetext>&gt; &gt; &gt; -    // FIXME: Consider letting the embedder block mixed content loads.
&gt; That was removed by accident (I still don&apos;t know what it means).

That comment is easier to understand when considered together with one before the switch block:

    // Note: Currently, we always allow mixed content, but we generate a
    //       callback to the FrameLoaderClient in case the embedder wants to
    //       update any security indicators.

For example, an https page that includes non-https scripts (and really, any subresources) should not be considered secure, and Safari doesn&apos;t display a lock icon for that. But loading non-https content is always risky, letting the party in control of your network connection run any sorts of attacks on authenticated https pages.

I&apos;m not sure why there is anything to consider - maybe the person who wrote this could tell why a way to block such loads wasn&apos;t added right away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327746</commentid>
    <comment_count>7</comment_count>
      <attachid>76761</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 16:47:08 -0800</bug_when>
    <thetext>Comment on attachment 76761
fix style

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

&gt; WebCore/css/CSSImageValue.cpp:75
&gt; +        CachedImage* cachedImage = loader-&gt;requestImage(url);
&gt;          if (cachedImage) {

Could put the definition inside the if statement.

&gt; WebCore/loader/cache/CachedResource.h:54
&gt; +    friend class CachedResourceLoader;

Is this really necessary? Can we do something to avoid it?

&gt; WebCore/loader/cache/CachedResourceLoader.cpp:74
&gt; +    default:
&gt; +        break;

Normally we try to avoid having a default. That way, the compiler will warn us if we forget to include a case. Just leaving out &quot;default: break&quot; should do the trick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328015</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-30 13:00:31 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74807</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328017</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-30 13:02:58 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/loader/cache/CachedResource.h:54
&gt; &gt; +    friend class CachedResourceLoader;
&gt; 
&gt; Is this really necessary? Can we do something to avoid it?

I gather you are not a fan of using friends for subsystem internal API?

I made some more functions public (with a comment) and got rid of the friend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331447</commentid>
    <comment_count>10</comment_count>
      <attachid>76761</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-09 10:18:13 -0800</bug_when>
    <thetext>Comment on attachment 76761
fix style

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

&gt; WebCore/ChangeLog:19
&gt; +        * css/CSSImageValue.cpp:
&gt; +        (WebCore::CSSImageValue::cachedImage):
&gt; +            
&gt; +            Remove a code path that called MemoryCache::requestResource directly. This code path would have crashed
&gt; +            if ever taken (since it passes null CachedResourceLoader pointer).

Are you sure this is the case? I have a sneaking suspicion that this change is causing random memory heap corruption issues, as being investigated here:

http://code.google.com/p/chromium/issues/detail?id=68516</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331465</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-01-09 12:58:18 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 76761 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76761&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:19
&gt; &gt; +        * css/CSSImageValue.cpp:
&gt; &gt; +        (WebCore::CSSImageValue::cachedImage):
&gt; &gt; +            
&gt; &gt; +            Remove a code path that called MemoryCache::requestResource directly. This code path would have crashed
&gt; &gt; +            if ever taken (since it passes null CachedResourceLoader pointer).
&gt; 
&gt; Are you sure this is the case? I have a sneaking suspicion that this change is causing random memory heap corruption issues, as being investigated here:
&gt; 
&gt; http://code.google.com/p/chromium/issues/detail?id=68516

Following this trail:

CSSImageValue::cachedImage is only called from CSSStyleSelector::loadPendingImages, which is in turn called by:

CSSStyleSelector::styleForElement
CSSStyleSelector::styleForPage
CSSStyleSelector::pseudoStyleForElement
CSSStyleSelector::keyframeStylesForAnimation

Since, in cachedImage(), the &quot;loader&quot; is document()-&gt;cachedResourceLoader() and returns an OwnPtr, could any of the methods above be invoked after the Document is destroyed?

If they could, we can have memory corruption. Right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331575</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-10 03:15:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Are you sure this is the case? I have a sneaking suspicion that this change is causing random memory heap corruption issues, as being investigated here:
&gt; 
&gt; http://code.google.com/p/chromium/issues/detail?id=68516

If CSSImageValue::cachedImage was called with null loader (which is the case I removed), it seems certain it would crash immediately when dereferencing in

if (CachedImage* cachedImage = loader-&gt;requestImage(url)) {

I can&apos;t see how it could survive that to corrupt memory. 

Can you enable that ASSERT(loader) crash in your reliability bot build to be sure?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76707</attachid>
            <date>2010-12-15 16:23:49 -0800</date>
            <delta_ts>2010-12-16 05:53:34 -0800</delta_ts>
            <desc>refactor loading code out of MemoryCache</desc>
            <filename>memorycache-loading-refactor-2.patch</filename>
            <type>text/plain</type>
            <size>37621</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTAtMTItMTUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTEzNAorICAgICAgICBNb3Zl
IGxvYWRpbmcgcmVsYXRlZCBjb2RlIGZyb20gTWVtb3J5Q2FjaGUgdG8gQ2FjaGVkUmVzb3VyY2VM
b2FkZXIKKworICAgICAgICAtIE1lcmdlIE1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgdG8g
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZQorICAgICAgICAtIE1lcmdlIE1l
bW9yeUNhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQgdG8gQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldAorICAgICAgICAtIE1vdmUgTWVtb3J5Q2FjaGU6
OnJldmFsaWRhdGVSZXNvdXJjZSB0byBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxpZGF0ZVJl
c291cmNlCisgICAgICAgIC0gQWRkIE1lbW9yeUNhY2hlOjphZGQKKyAgICAgICAgLSBSZWZhY3Rv
ciB0aGUgZGVjaXNpb24gb24gd2hldGhlciB0byByZWxvYWQsIHJldmFsaWRhdGUgb3IgdXNlIHRo
ZSBleGlzdGluZyByZXNvdXJjZSB0byAKKyAgICAgICAgICBhIHNpbmdsZSBmdW5jdGlvbiwgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeQorCisgICAgICAg
ICogY3NzL0NTU0ltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VWYWx1
ZTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUgYSBjb2Rl
IHBhdGggdGhhdCBjYWxsZWQgTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBkaXJlY3RseS4g
VGhpcyBjb2RlIHBhdGggd291bGQgaGF2ZSBjcmFzaGVkCisgICAgICAgICAgICBpZiBldmVyIHRh
a2VuIChzaW5jZSBpdCBwYXNzZXMgbnVsbCBDYWNoZWRSZXNvdXJjZUxvYWRlciBwb2ludGVyKS4K
KyAgICAgICAgICAgIAorICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpDYWNoZWRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZUR1
ZVRvQ2FjaGVIZWFkZXJzKToKKyAgICAgICAgCisgICAgICAgICAgICBNb3ZlZCB0ZXN0cyB0aGF0
IHdlcmUgbm90IGFib3V0IGNhY2hlIGhlYWRlcnMgdG8gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRl
dGVybWluZVJldmFsaWRhdGlvblBvbGljeSBhbmQgcmVuYW1lZC4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZFByaW9yaXR5KToKKyAgICAgICAgCisg
ICAgICAgICAgICBDaGVjayBmb3IgVW5yZXNvbHZlZCB2YWx1ZSBiZWZvcmUgc2V0dGluZy4KKyAg
ICAgICAgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIp
OgorICAgICAgICAKKyAgICAgICAgUmVuYW1lIHRvIGJlIGJpdCBsZXNzIG15c3RlcmlvdXMuCisg
ICAgICAgIAorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgVGhpcyB3YXMgbW92ZWQgZnJvbSBNZW1vcnlDYWNoZS4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRp
b25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIAorICAgICAgICAgICAgVGhpcyB3YXMgbW92
ZWQvbWVyZ2VkIGZyb20gTWVtb3J5Q2FjaGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgVGhpcyBjb21iaW5lcyBNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNlIGFuZCB0aGUgZXhp
c3RpbmcgbWV0aG9kLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXZhbGlkYXRlUmVzb3VyY2UpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMg
d2FzIG1vdmVkIGZyb20gTWVtb3J5Q2FjaGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgTmV3IG1ldGhvZCBmb3IgaW5pdGlhdGluZyBsb2FkaW5nLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpub3RpZnlMb2FkZWRGcm9tTWVtb3J5Q2Fj
aGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgdGhlIG15c3RlcmlvdXMgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNoZWNrQ2FjaGVPYmplY3RTdGF0dXMKKyAgICAgICAgCisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjph
ZGQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZSk6CisKIDIwMTAtMTItMTUgIEtlbm5ldGggUnVzc2Vs
bCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDc0MTA2KQorKysgV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI0ICs2NiwxOSBAQCBT
dHlsZUNhY2hlZEltYWdlKiBDU1NJbWFnZVZhbHVlOjpjYWNoZWRJCiAKIFN0eWxlQ2FjaGVkSW1h
Z2UqIENTU0ltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFN0cmluZyYgdXJsKQogeworICAgIEFTU0VSVChsb2FkZXIpOworCiAgICAgaWYg
KCFtX2FjY2Vzc2VkSW1hZ2UpIHsKICAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKIAot
ICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSAwOwotICAgICAgICBpZiAobG9hZGVy
KQotICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZSh1cmwpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgZmluZCBhIHdheSB0
byBtYWtlIHRoZXNlIGltYWdlcyBzaXQgaW4gdGhlaXIgb3duIG1lbW9yeSBwYXJ0aXRpb24sIHNp
bmNlIHRoZXkgYXJlIHVzZXIgYWdlbnQgaW1hZ2VzLgotICAgICAgICAgICAgY2FjaGVkSW1hZ2Ug
PSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCks
IFN0cmluZygpLCBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQpKTsKLSAgICAgICAgfQot
CisgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdl
KHVybCk7CiAgICAgICAgIGlmIChjYWNoZWRJbWFnZSkgewogICAgICAgICAgICAgY2FjaGVkSW1h
Z2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAgICAgICAgIG1faW1hZ2UgPSBTdHlsZUNhY2hlZElt
YWdlOjpjcmVhdGUoY2FjaGVkSW1hZ2UpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJl
dHVybiBtX2ltYWdlLT5pc0NhY2hlZEltYWdlKCkgPyBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZElt
YWdlKj4obV9pbWFnZS5nZXQoKSkgOiAwOworICAgIHJldHVybiAobV9pbWFnZSAmJiBtX2ltYWdl
LT5pc0NhY2hlZEltYWdlKCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KG1faW1h
Z2UuZ2V0KCkpIDogMDsKIH0KIAogU3RyaW5nIENTU0ltYWdlVmFsdWU6OmNhY2hlZEltYWdlVVJM
KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0MTA2KQorKysgV2ViQ29y
ZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKGZhbHNlKTsK
ICAgICAgICAgICAgIG5ld0ltYWdlID0gbmV3IENhY2hlZEltYWdlKHNvdXJjZVVSSShhdHRyKSk7
CiAgICAgICAgICAgICBuZXdJbWFnZS0+c2V0TG9hZGluZyh0cnVlKTsKLSAgICAgICAgICAgIG5l
d0ltYWdlLT5zZXRDYWNoZWRSZXNvdXJjZUxvYWRlcihkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSk7CisgICAgICAgICAgICBuZXdJbWFnZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgICAgICAgICAgZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPm1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KG5l
d0ltYWdlLT51cmwoKSwgbmV3SW1hZ2UpOwogICAgICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJl
c291cmNlTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKGF1dG9Mb2FkT3RoZXJJbWFnZXMpOwog
ICAgICAgICB9IGVsc2UKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJl
dmlzaW9uIDc0MTA2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3NDEwNykKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIENhY2hl
ZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHIKICAgICAsIG1fcHJldkluQWxsUmVz
b3VyY2VzTGlzdCgwKQogICAgICwgbV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQogICAgICwg
bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9jYWNoZWRSZXNvdXJjZUxvYWRl
cigwKQorICAgICwgbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKQogICAgICwgbV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZSgwKQogICAgICwgbV9wcm94eVJlc291cmNlKDApCiB7CkBAIC0xMjIs
OCArMTIyLDggQEAgQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCiAgICAgY2FjaGVk
UmVzb3VyY2VMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlbW92
ZUNhY2hlZFJlc291cmNlKHRoaXMpOworICAgIGlmIChtX293bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyKQorICAgICAgICBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVDYWNoZWRS
ZXNvdXJjZSh0aGlzKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3Vy
aXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKQpAQCAtNDkwLDE3ICs0OTAsMTQgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2Fj
aGVWYWxpZGF0bwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBl
VGFnSGVhZGVyLCAoImV0YWciKSk7CiAgICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0eSgpOwogfQotICAgIAotYm9vbCBDYWNoZWRSZXNv
dXJjZTo6bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17Ci0g
ICAgaWYgKGVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
Q2FjaGVkUmVzb3VyY2UgJXAgbXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX2Vycm9yT2NjdXJy
ZWRcbiIsIHRoaXMpOworCitib29sIENhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZUR1ZVRv
Q2FjaGVIZWFkZXJzKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAoreyAgICAKKyAgICBB
U1NFUlQoY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lSZXZhbGlkYXRlIHx8IGNhY2hlUG9saWN5
ID09IENhY2hlUG9saWN5Q2FjaGUgfHwgY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lWZXJpZnkp
OworCisgICAgaWYgKGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5UmV2YWxpZGF0ZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAogICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5z
Tm9DYWNoZSgpIHx8IG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsK
ICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZh
bGlkYXRlIGJlY2F1c2Ugb2YgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUo
KSB8fCBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpXG4iLCB0aGlzKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MTQsNiArNTExLDcgQEAgYm9vbCBDYWNoZWRSZXNv
dXJjZTo6bXVzdFJldmFsaWRhdGUoQ2FjaAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CisgICAgLy8gQ2FjaGVQb2xpY3lWZXJpZnkKICAgICBpZiAoaXNFeHBpcmVkKCkpIHsKICAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZhbGlkYXRl
IGJlY2F1c2Ugb2YgaXNFeHBpcmVkKClcbiIsIHRoaXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTU4Nyw1ICs1ODUsMTIgQEAgdW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6
ZSgpIAogICAgICAgICAgICAgICAzODQ7ICAgICAgICAgICAgICAgICAgICAvLyBhdmVyYWdlIHNp
emUgb2YgbV9jbGllbnRzIGhhc2ggbWFwCiAgICAgKi8KIH0KKyAgICAKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnNldExvYWRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBsb2FkUHJpb3JpdHkp
IAoreyAKKyAgICBpZiAobG9hZFByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNv
bHZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbG9hZFByaW9yaXR5ID0gbG9hZFByaW9yaXR5
OworfQogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJldmlz
aW9uIDc0MTA2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBQdXJnZWFibGVCdWZmZXI7CiAvLyBm
cm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGNh
c2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgogLy8gVGhpcyBjbGFzcyBhbHNvIGRv
ZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRhaW4gdGhl
IHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCiBjbGFzcyBDYWNoZWRSZXNvdXJjZSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwog
ICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
UmVzb3VyY2U7CiAgICAgCkBAIC0xODYsNyArMTg3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KIAotICAgIHZvaWQgc2V0Q2FjaGVk
UmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
KSB7IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlcjsgfQorICAg
IHZvaWQgc2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBj
YWNoZWRSZXNvdXJjZUxvYWRlcjsgfQogICAgIAogICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25z
dCB7IHJldHVybiBtX3ByZWxvYWRDb3VudDsgfQogICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291
bnQoKSB7ICsrbV9wcmVsb2FkQ291bnQ7IH0KQEAgLTE5Niw3ICsxOTcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7CiAg
ICAgCiAgICAgYm9vbCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OwotICAgIGJvb2wgbXVz
dFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kpIGNvbnN0OworICAgIGJvb2wgbXVzdFJldmFsaWRhdGVE
dWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3Q7CiAgICAgYm9vbCBpc0NhY2hlVmFs
aWRhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQogICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICAKQEAgLTIzNyw3ICsyMzgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogICAgIHZvaWQgdXBkYXRlUmVz
cG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5n
UmVzcG9uc2UpOwogICAgIHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gUHVyZ2VEZWZhdWx0OyB9Ci0gICAgdm9pZCBzZXRMb2FkUHJpb3JpdHkoUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KSB7IG1fbG9hZFByaW9yaXR5ID0gbG9hZFBy
aW9yaXR5OyB9CisgICAgdm9pZCBzZXRMb2FkUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
bG9hZFByaW9yaXR5KTsKIAogICAgIGRvdWJsZSBjdXJyZW50QWdlKCkgY29uc3Q7CiAgICAgZG91
YmxlIGZyZXNobmVzc0xpZmV0aW1lKCkgY29uc3Q7CkBAIC0yNzUsNyArMjc2LDcgQEAgcHJpdmF0
ZToKICAgICBDYWNoZWRSZXNvdXJjZSogbV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdDsKICAgICBD
YWNoZWRSZXNvdXJjZSogbV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdDsKIAotICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5IG5vbi0wIGZvciBy
ZXNvdXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQorICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5IG5vbi0wIGZvciByZXNv
dXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQogICAgIAogICAgIC8vIElmIHRoaXMgZmll
bGQgaXMgbm9uLW51bGwgd2UgYXJlIHVzaW5nIHRoZSByZXNvdXJjZSBhcyBhIHByb3h5IGZvciBj
aGVja2luZyB3aGV0aGVyIGFuIGV4aXN0aW5nIHJlc291cmNlIGlzIHN0aWxsIHVwIHRvIGRhdGUK
ICAgICAvLyB1c2luZyBIVFRQIElmLU1vZGlmaWVkLVNpbmNlL0lmLU5vbmUtTWF0Y2ggaGVhZGVy
cy4gSWYgdGhlIHJlc3BvbnNlIGlzIDMwNCBhbGwgY2xpZW50cyBvZiB0aGlzIHJlc291cmNlIGFy
ZSBtb3ZlZApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gNzQxMDcpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKICNpbmNsdWRlICJQaW5nTG9hZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKQEAgLTQ5LDYgKzUxLDMxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIENh
Y2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UodXJsLnN0cmluZygpKTsKKyAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgICAgIHJldHVybiBuZXcg
Q2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwuc3RyaW5nKCksIGNoYXJzZXQpOworICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNj
cmlwdCh1cmwuc3RyaW5nKCksIGNoYXJzZXQpOworICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpGb250UmVzb3VyY2U6CisgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlZEZvbnQodXJsLnN0
cmluZygpKTsKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
WFNMU3R5bGVTaGVldDoKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVl
dCh1cmwuc3RyaW5nKCkpOworI2VuZGlmCisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICAgICAgICAgIHJldHVy
biBuZXcgQ2FjaGVkUmVzb3VyY2UodXJsLnN0cmluZygpLCBDYWNoZWRSZXNvdXJjZTo6TGlua1By
ZWZldGNoKTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Q2FjaGVkUmVz
b3VyY2VMb2FkZXIoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogbV9jYWNoZShjYWNoZSgpKQog
ICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKQEAgLTY2LDcgKzkzLDcgQEAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6On5DYWNoZWRSZXNvdXJjZUxvYQogICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBE
b2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBlbmQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmVu
ZCgpOwogICAgIGZvciAoRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3Vt
ZW50UmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29u
ZC0+c2V0Q2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgIGl0LT5zZWNvbmQtPnNldE93
bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKDApOwogICAgIG1fY2FjaGUtPnJlbW92ZUNhY2hlZFJl
c291cmNlTG9hZGVyKHRoaXMpOwogCiAgICAgLy8gTWFrZSBzdXJlIG5vIHJlcXVlc3RzIHN0aWxs
IHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKQEAgLTkwLDQ1ICsxMTcsNiBAQCBG
cmFtZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmZyYW1lKCkgY29uCiAgICAgcmV0dXJuIG1fZG9j
dW1lbnQtPmZyYW1lKCk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrRm9y
UmVsb2FkKGNvbnN0IEtVUkwmIGZ1bGxVUkwpCi17Ci0gICAgaWYgKG1fYWxsb3dTdGFsZVJlc291
cmNlcykKLSAgICAgICAgcmV0dXJuOyAvLyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxlIHBh
c3RpbmcKLQotICAgIGlmIChmdWxsVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmIChtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hl
KCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwpOwotICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3Rp
bmctPmlzUHJlbG9hZGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoY2FjaGVQ
b2xpY3koKSkgewotICAgIGNhc2UgQ2FjaGVQb2xpY3lWZXJpZnk6Ci0gICAgICAgIGlmICghZXhp
c3RpbmctPm11c3RSZXZhbGlkYXRlKENhY2hlUG9saWN5VmVyaWZ5KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0ZVJlc291cmNlKGV4aXN0aW5nLCB0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZVBvbGljeUNhY2hlOgotICAgICAgICBp
ZiAoIWV4aXN0aW5nLT5tdXN0UmV2YWxpZGF0ZShDYWNoZVBvbGljeUNhY2hlKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgY2FjaGUoKS0+cmV2YWxpZGF0ZVJlc291cmNlKGV4aXN0aW5n
LCB0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWNoZVBvbGljeVJlbG9hZDoKLSAg
ICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsgICAgICAgIAotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENhY2hlUG9saWN5UmV2YWxpZGF0ZToKLSAgICAgICAgY2FjaGUoKS0+cmV2YWxp
ZGF0ZVJlc291cmNlKGV4aXN0aW5nLCB0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
YWNoZVBvbGljeUhpc3RvcnlCdWZmZXI6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7Ci19Ci0KIENhY2hlZEltYWdlKiBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQogewog
ICAgIGlmIChGcmFtZSogZiA9IGZyYW1lKCkpIHsKQEAgLTE2MSw5ICsxNDksMjcgQEAgQ2FjaGVk
Q1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3VyY2VMb2FkZQogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpD
U1NTdHlsZVNoZWV0LCB1cmwsIGNoYXJzZXQsIHByaW9yaXR5KSk7CiB9CiAKLUNhY2hlZENTU1N0
eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK0NhY2hlZENTU1N0eWxl
U2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiByZXF1ZXN0VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAgcmV0
dXJuIGNhY2hlKCktPnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldCh0aGlzLCBLVVJMKEtVUkwoKSwg
dXJsKSwgY2hhcnNldCk7CisgICAgS1VSTCB1cmwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVySWZOZWVkZWQoS1VSTChLVVJMKCksIHJlcXVlc3RVUkwpKTsKKworICAgIGlm
IChDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1cmwp
KSB7CisgICAgICAgIGlmIChleGlzdGluZy0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxl
U2hlZXQqPihleGlzdGluZyk7CisgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7Cisg
ICAgfQorICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NT
dHlsZVNoZWV0KHVybCwgY2hhcnNldCk7CisgICAgCisgICAgYm9vbCBpbkNhY2hlID0gY2FjaGUo
KS0+YWRkKHVzZXJTaGVldCk7CisgICAgaWYgKCFpbkNhY2hlKQorICAgICAgICB1c2VyU2hlZXQt
PnNldEluQ2FjaGUodHJ1ZSk7CisgICAgCisgICAgdXNlclNoZWV0LT5sb2FkKHRoaXMsIC8qaW5j
cmVtZW50YWwqLyBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ssIC8qc2VuZFJlc291cmNlTG9hZENh
bGxiYWNrcyovIGZhbHNlKTsKKworICAgIGlmICghaW5DYWNoZSkKKyAgICAgICAgdXNlclNoZWV0
LT5zZXRJbkNhY2hlKGZhbHNlKTsKKyAgICAKKyAgICByZXR1cm4gdXNlclNoZWV0OwogfQogCiBD
YWNoZWRTY3JpcHQqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCkBAIC0yNTAsNDUgKzI1NiwxOTAgQEAg
Ym9vbCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FuUmVxdWVzdChDYQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIC8vIEZJWE1FOiBDb25z
aWRlciBsZXR0aW5nIHRoZSBlbWJlZGRlciBibG9jayBtaXhlZCBjb250ZW50IGxvYWRzLgorCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUNhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9y
aXR5LCBib29sIGlzUHJlbG9hZCkKK0NhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgcmVzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHkgcHJpb3JpdHksIGJvb2wgZm9yUHJlbG9hZCkKIHsKLSAgICBLVVJMIGZ1bGxVUkwgPSBtX2Rv
Y3VtZW50LT5jb21wbGV0ZVVSTCh1cmwpOworICAgIEtVUkwgdXJsID0gbV9kb2N1bWVudC0+Y29t
cGxldGVVUkwocmVzb3VyY2VVUkwpOworICAgIAorICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlICclcycsIGNoYXJzZXQgJyVzJywg
cHJpb3JpdHk9JWQsIGZvclByZWxvYWQ9JXUiLCB1cmwuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgp
LCBjaGFyc2V0LmxhdGluMSgpLmRhdGEoKSwgcHJpb3JpdHksIGZvclByZWxvYWQpOwogICAgIAog
ICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXJzIGRpZmZlciwgaXQgaXMgdGhl
IHNhbWUgcmVzb3VyY2UuCi0gICAgZnVsbFVSTCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVu
dElkZW50aWZpZXJJZk5lZWRlZChmdWxsVVJMKTsKKyAgICB1cmwgPSBNZW1vcnlDYWNoZTo6cmVt
b3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQodXJsKTsKIAotICAgIGlmICghZnVsbFVSTC5p
c1ZhbGlkKCkgfHwgIWNhblJlcXVlc3QodHlwZSwgZnVsbFVSTCkpCisgICAgaWYgKCF1cmwuaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoIWNhblJlcXVlc3QodHlw
ZSwgdXJsKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3
aGF0IGlzIHRoZSBjb3JyZWN0IHdheSB0byBtZXJnZSB0aGlzIHNlY3VyaXR5IGNoZWNrIHdpdGgg
dGhlIG9uZSBhYm92ZS4KKyAgICBpZiAoIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
bkRpc3BsYXkodXJsKSkgeworICAgICAgICBpZiAoIWZvclByZWxvYWQpCisgICAgICAgICAgICBG
cmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGRvY3VtZW50KCktPmZyYW1lKCksIHVy
bC5zdHJpbmcoKSk7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlIFVSTCB3YXMgbm90IGFsbG93ZWQgYnkgU2VjdXJpdHlP
cmlnaW46OmNhbkRpc3BsYXkiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgaWYg
KGNhY2hlKCktPmRpc2FibGVkKCkpIHsKLSAgICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX2RvY3VtZW50UmVzb3VyY2VzLmZpbmQoZnVsbFVSTC5zdHJpbmcoKSk7Ci0g
ICAgICAgIAorICAgICAgICBEb2N1bWVudFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fZG9j
dW1lbnRSZXNvdXJjZXMuZmluZCh1cmwuc3RyaW5nKCkpOwogICAgICAgICBpZiAoaXQgIT0gbV9k
b2N1bWVudFJlc291cmNlcy5lbmQoKSkgewotICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0Q2Fj
aGVkUmVzb3VyY2VMb2FkZXIoMCk7CisgICAgICAgICAgICBpdC0+c2Vjb25kLT5zZXRPd25pbmdD
YWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRSZXNvdXJjZXMu
cmVtb3ZlKGl0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGNoZWNrRm9yUmVsb2FkKGZ1bGxV
UkwpOworICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIHJlc291cmNlIGZyb20g
dGhlIGNhY2hlLgorICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGNhY2hlKCktPnJlc291
cmNlRm9yVVJMKHVybCk7CiAKLSAgICBib29sIGFsbG93Rm9ySGlzdG9yeU9ubHlSZXNvdXJjZXMg
PSBjYWNoZVBvbGljeSgpID09IENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjsKLSAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZSgpLT5yZXF1ZXN0UmVzb3VyY2UodGhpcywgdHlwZSwg
ZnVsbFVSTCwgY2hhcnNldCwgcHJpb3JpdHksIGlzUHJlbG9hZCwgYWxsb3dGb3JIaXN0b3J5T25s
eVJlc291cmNlcyk7Ci0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIC8vIENoZWNrIGZpbmFs
IFVSTCBvZiByZXNvdXJjZSB0byBjYXRjaCByZWRpcmVjdHMuCi0gICAgICAgIC8vIFNlZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTYzPi4KLSAgICAgICAgaWYg
KGZ1bGxVUkwgIT0gcmVzb3VyY2UtPnVybCgpICYmICFjYW5SZXF1ZXN0KHR5cGUsIEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCByZXNvdXJjZS0+dXJsKCkpKSkKLSAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIGlmIChmb3JQcmVsb2FkICYmIHJlc291cmNlICYmIHJlc291cmNlLT5pc1ByZWxvYWRlZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN3aXRjaCAoZGV0ZXJtaW5lUmV2YWxpZGF0aW9u
UG9saWN5KHR5cGUsIHJlc291cmNlKSkgeworICAgIGNhc2UgUmVsb2FkOgorICAgICAgICBpZiAo
cmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7CisgICAg
ICAgICAgICBtX3JlbG9hZGVkQW5kUmV2YWxpZGF0ZWRVUkxzLmFkZCh1cmwuc3RyaW5nKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHVybCwgY2hh
cnNldCwgcHJpb3JpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldmFsaWRhdGU6Cisg
ICAgICAgIHJlc291cmNlID0gcmV2YWxpZGF0ZVJlc291cmNlKHJlc291cmNlLCBwcmlvcml0eSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVXNlOgorICAgICAgICBjYWNoZSgpLT5yZXNvdXJj
ZUFjY2Vzc2VkKHJlc291cmNlKTsKKyAgICAgICAgbm90aWZ5TG9hZGVkRnJvbU1lbW9yeUNhY2hl
KHJlc291cmNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFyZXNvdXJjZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQocmVzb3VyY2UtPnVybCgpID09IHVybC5z
dHJpbmcoKSk7CisgICAgbV9kb2N1bWVudFJlc291cmNlcy5zZXQocmVzb3VyY2UtPnVybCgpLCBy
ZXNvdXJjZSk7CisgICAgCisgICAgcmV0dXJuIHJlc291cmNlOworfQorICAgIAorQ2FjaGVkUmVz
b3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBB
U1NFUlQocmVzb3VyY2UpOworICAgIEFTU0VSVChyZXNvdXJjZS0+aW5DYWNoZSgpKTsKKyAgICBB
U1NFUlQoIWNhY2hlKCktPmRpc2FibGVkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+Y2FuVXNl
Q2FjaGVWYWxpZGF0b3IoKSk7CisgICAgQVNTRVJUKCFyZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFs
aWRhdGUoKSk7CisgICAgCisgICAgY29uc3QgU3RyaW5nJiB1cmwgPSByZXNvdXJjZS0+dXJsKCk7
CisgICAgQ2FjaGVkUmVzb3VyY2UqIG5ld1Jlc291cmNlID0gY3JlYXRlUmVzb3VyY2UocmVzb3Vy
Y2UtPnR5cGUoKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHJlc291cmNlLT5lbmNvZGlu
ZygpKTsKKyAgICAKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2UgJXAgY3JlYXRl
ZCB0byByZXZhbGlkYXRlICVwIiwgbmV3UmVzb3VyY2UsIHJlc291cmNlKTsKKyAgICBuZXdSZXNv
dXJjZS0+c2V0UmVzb3VyY2VUb1JldmFsaWRhdGUocmVzb3VyY2UpOworICAgIAorICAgIGNhY2hl
KCktPnJlbW92ZShyZXNvdXJjZSk7CisgICAgY2FjaGUoKS0+YWRkKG5ld1Jlc291cmNlKTsKKyAg
ICAKKyAgICBuZXdSZXNvdXJjZS0+c2V0TG9hZFByaW9yaXR5KHByaW9yaXR5KTsKKyAgICBuZXdS
ZXNvdXJjZS0+bG9hZCh0aGlzKTsKKyAgICAKKyAgICBtX3JlbG9hZGVkQW5kUmV2YWxpZGF0ZWRV
UkxzLmFkZCh1cmwpOworCisgICAgcmV0dXJuIG5ld1Jlc291cmNlOworfQogCi0gICAgICAgIG1f
ZG9jdW1lbnRSZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOwotICAgICAg
ICBjaGVja0NhY2hlT2JqZWN0U3RhdHVzKHJlc291cmNlKTsKK0NhY2hlZFJlc291cmNlKiBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6bG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSkKK3sKKyAgICBBU1NFUlQoIWNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVy
bCkpOworICAgIAorICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJMb2FkaW5nIENhY2hlZFJlc291
cmNlIGZvciAnJXMnLiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgIAorICAg
IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybCwgY2hh
cnNldCk7CisgICAgCisgICAgYm9vbCBpbkNhY2hlID0gY2FjaGUoKS0+YWRkKHJlc291cmNlKTsK
KyAgICAKKyAgICAvLyBQcmV0ZW5kIHRoZSByZXNvdXJjZSBpcyBpbiB0aGUgY2FjaGUsIHRvIHBy
ZXZlbnQgaXQgZnJvbSBiZWluZyBkZWxldGVkIGR1cmluZyB0aGUgbG9hZCgpIGNhbGwuCisgICAg
Ly8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3JtYWwgcmVmY291bnRp
bmcgaW5zdGVhZC4KKyAgICBpZiAoIWluQ2FjaGUpCisgICAgICAgIHJlc291cmNlLT5zZXRJbkNh
Y2hlKHRydWUpOworICAgIAorICAgIHJlc291cmNlLT5zZXRMb2FkUHJpb3JpdHkocHJpb3JpdHkp
OworICAgIHJlc291cmNlLT5sb2FkKHRoaXMpOworICAgIAorICAgIGlmICghaW5DYWNoZSkgewor
ICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIodGhpcyk7Cisg
ICAgICAgIHJlc291cmNlLT5zZXRJbkNhY2hlKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVk
aWF0ZSBmYWlsdXJlLgorICAgIGlmIChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAg
ICAgIGlmIChpbkNhY2hlKQorICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlc291cmNlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHJlc291cmNlOworICAgICAgICByZXR1
cm4gMDsKICAgICB9CisKICAgICByZXR1cm4gcmVzb3VyY2U7CiB9CiAKK0NhY2hlZFJlc291cmNl
TG9hZGVyOjpSZXZhbGlkYXRpb25Qb2xpY3kgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWlu
ZVJldmFsaWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBDYWNoZWRSZXNv
dXJjZSogZXhpc3RpbmdSZXNvdXJjZSkKK3sKKyAgICBpZiAoIWV4aXN0aW5nUmVzb3VyY2UpCisg
ICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgCisgICAgLy8gSWYgdGhlIHNhbWUgVVJMIGhhcyBi
ZWVuIGxvYWRlZCBhcyBhIGRpZmZlcmVudCB0eXBlLCB3ZSBuZWVkIHRvIHJlbG9hZC4KKyAgICBp
ZiAoZXhpc3RpbmdSZXNvdXJjZS0+dHlwZSgpICE9IHR5cGUpIHsKKyAgICAgICAgTE9HKFJlc291
cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Q
b2xpY3kgcmVsb2FkaW5nIGR1ZSB0byB0eXBlIG1pc21hdGNoLiIpOworICAgICAgICByZXR1cm4g
UmVsb2FkOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCByZWxvYWQgcmVzb3VyY2VzIHdoaWxl
IHBhc3RpbmcKKyAgICBpZiAobV9hbGxvd1N0YWxlUmVzb3VyY2VzKQorICAgICAgICByZXR1cm4g
VXNlOworICAgIAorICAgIC8vIEFsd2F1cyB1c2UgcHJlbG9hZHMuCisgICAgaWYgKGV4aXN0aW5n
UmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIHJldHVybiBVc2U7CisgICAgCisgICAg
Ly8gQXZvaWQgbG9hZGluZyB0aGUgc2FtZSByZXNvdXJjZSBtdWx0aXBsZSB0aW1lcyBmb3IgYSBz
aW5nbGUgZG9jdW1lbnQsIGV2ZW4gaWYgdGhlIGNhY2hlIHBvbGljaWVzIHdvdWxkIHRlbGwgdXMg
dG8uCisgICAgaWYgKG1fcmVsb2FkZWRBbmRSZXZhbGlkYXRlZFVSTHMuY29udGFpbnMoZXhpc3Rp
bmdSZXNvdXJjZS0+dXJsKCkpKQorICAgICAgICByZXR1cm4gVXNlOworICAgIAorICAgIC8vIENh
Y2hlUG9saWN5UmVsb2FkIGFsd2F5cyByZWxvYWRzCisgICAgaWYgKGNhY2hlUG9saWN5KCkgPT0g
Q2FjaGVQb2xpY3lSZWxvYWQpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hl
ZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVsb2FkaW5nIGR1
ZSB0byBDYWNoZVBvbGljeVJlbG9hZC4iKTsKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKyAgICB9
CisgICAgCisgICAgLy8gQ2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyIHVzZXMgdGhlIGNhY2hlIG5v
IG1hdHRlciB3aGF0LgorICAgIGlmIChjYWNoZVBvbGljeSgpID09IENhY2hlUG9saWN5SGlzdG9y
eUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFVzZTsKKyAgICAKKyAgICAvLyBXZSdsbCB0cnkgdG8g
cmVsb2FkIHRoZSByZXNvdXJjZSBpZiBpdCBmYWlsZWQgbGFzdCB0aW1lLgorICAgIGlmIChleGlz
dGluZ1Jlc291cmNlLT5lcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgTE9HKFJlc291cmNlTG9h
ZGluZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3ll
IHJlbG9hZGluZyBkdWUgdG8gcmVzb3VyY2UgYmVpbmcgaW4gdGhlIGVycm9yIHN0YXRlIik7Cisg
ICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorICAgIAorICAgIC8vIEZvciByZXNvdXJjZXMg
dGhhdCBhcmUgbm90IHlldCBsb2FkZWQgd2UgaWdub3JlIHRoZSBjYWNoZSBwb2xpY3kuCisgICAg
aWYgKGV4aXN0aW5nUmVzb3VyY2UtPmlzTG9hZGluZygpKQorICAgICAgICByZXR1cm4gVXNlOwor
CisgICAgLy8gQ2hlY2sgaWYgdGhlIGNhY2hlIGhlYWRlcnMgcmVxdWlyZXMgdXMgdG8gcmV2YWxp
ZGF0ZSAoY2FjaGUgZXhwaXJhdGlvbiBmb3IgZXhhbXBsZSkuCisgICAgaWYgKGV4aXN0aW5nUmVz
b3VyY2UtPm11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMoY2FjaGVQb2xpY3koKSkpIHsK
KyAgICAgICAgLy8gU2VlIGlmIHRoZSByZXNvdXJjZSBoYXMgdXNhYmxlIEVUYWcgb3IgTGFzdC1t
b2RpZmllZCBqZWFkZXJzLgorICAgICAgICBpZiAoZXhpc3RpbmdSZXNvdXJjZS0+Y2FuVXNlQ2Fj
aGVWYWxpZGF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXZhbGlkYXRlOworICAgICAgICAK
KyAgICAgICAgLy8gTm8sIG11c3QgcmVsb2FkLgorICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5n
LCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSByZWxv
YWRpbmcgZHVlIHRvIG1pc3NpbmcgY2FjaGUgdmFsaWRhdG9ycy4iKTsgICAgICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIFJlbG9hZDsKKyAgICB9CisKKyAgICByZXR1cm4gVXNlOworfQorCiB2b2lk
IENhY2hlZFJlc291cmNlTG9hZGVyOjpwcmludEFjY2Vzc0RlbmllZE1lc3NhZ2UoY29uc3QgS1VS
TCYgdXJsKSBjb25zdAogewogICAgIGlmICh1cmwuaXNOdWxsKCkpCkBAIC0zNzgsOSArNTI5LDgg
QEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsUmVxdWVzdAogICAgICAgICByZXF1
ZXN0c1RvQ2FuY2VsW2ldLT5kaWRGYWlsKHRydWUpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjaGVja0NhY2hlT2JqZWN0U3RhdHVzKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6Om5vdGlmeUxvYWRlZEZyb21NZW1vcnlDYWNoZShD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgLy8gUmV0dXJuIGZyb20gdGhlIGZ1bmN0
aW9uIGZvciBvYmplY3RzIHRoYXQgd2UgZGlkbid0IGxvYWQgZnJvbSB0aGUgY2FjaGUgb3IgaWYg
d2UgZG9uJ3QgaGF2ZSBhIGZyYW1lLgogICAgIGlmICghcmVzb3VyY2UgfHwgIWZyYW1lKCkgfHwg
cmVzb3VyY2UtPnN0YXR1cygpICE9IENhY2hlZFJlc291cmNlOjpDYWNoZWQpCiAgICAgICAgIHJl
dHVybjsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRl
ci5oCShyZXZpc2lvbiA3NDEwNykKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZVBvbGljeS5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KQEAgLTQxLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVk
Q1NTU3R5bGVTaGVldDsKIGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFzcyBDYWNoZWRJbWFnZTsKK2Ns
YXNzIENhY2hlZFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIENh
Y2hlZFhTTFN0eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTEwOCwxNCArMTA4LDE4IEBA
IHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQ
cmlvcml0eVVucmVzb2x2ZWQsIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UpOworICAgIENhY2hlZFJl
c291cmNlKiByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqLCBSZXNvdXJjZUxvYWRQ
cmlvcml0eSBwcmlvcml0eSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIGxvYWRSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpOwogICAgIHZvaWQgcmVxdWVzdFByZWxvYWQoQ2Fj
aGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpOwogCi0gICAgdm9pZCBjaGVja0ZvclJlbG9hZChjb25zdCBLVVJMJik7Ci0gICAgdm9pZCBj
aGVja0NhY2hlT2JqZWN0U3RhdHVzKENhY2hlZFJlc291cmNlKik7CisgICAgZW51bSBSZXZhbGlk
YXRpb25Qb2xpY3kgeyBVc2UsIFJldmFsaWRhdGUsIFJlbG9hZCB9OworICAgIFJldmFsaWRhdGlv
blBvbGljeSBkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUs
IENhY2hlZFJlc291cmNlKiBleGlzdGluZ1Jlc291cmNlKTsKKyAgICAKKyAgICB2b2lkIG5vdGlm
eUxvYWRlZEZyb21NZW1vcnlDYWNoZShDYWNoZWRSZXNvdXJjZSopOwogICAgIGJvb2wgY2FuUmVx
dWVzdChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29uc3QgS1VSTCYpOwogICAgIAogICAgIE1lbW9y
eUNhY2hlKiBtX2NhY2hlOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlbG9hZGVkVVJMczsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9yZWxvYWRlZEFuZFJldmFsaWRhdGVkVVJMczsKICAgICBtdXRh
YmxlIERvY3VtZW50UmVzb3VyY2VNYXAgbV9kb2N1bWVudFJlc291cmNlczsKICAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAko
cmV2aXNpb24gNzQxMDcpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDE1NiArNjksNiBAQCBNZW1vcnlDYWNoZTo6TWVtb3J5Q2Fj
aGUoKQogewogfQogCi1zdGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNyZWF0ZVJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Oklt
YWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkSW1hZ2UodXJsLnN0cmluZygp
KTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICByZXR1
cm4gbmV3IENhY2hlZENTU1N0eWxlU2hlZXQodXJsLnN0cmluZygpLCBjaGFyc2V0KTsKLSAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkU2Ny
aXB0KHVybC5zdHJpbmcoKSwgY2hhcnNldCk7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlOgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZEZvbnQodXJsLnN0cmluZygpKTsK
LSNpZiBFTkFCTEUoWFNMVCkKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0
OgotICAgICAgICByZXR1cm4gbmV3IENhY2hlZFhTTFN0eWxlU2hlZXQodXJsLnN0cmluZygpKTsK
LSNlbmRpZgotI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtQcmVmZXRjaDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSZXNvdXJjZSh1cmwu
c3RyaW5nKCksIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2gpOwotI2VuZGlmCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUNhY2hl
ZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciwgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29u
c3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQ
cmlvcml0eSBwcmlvcml0eSwgYm9vbCByZXF1ZXN0SXNQcmVsb2FkLCBib29sIGZvckhpc3Rvcnkp
Ci17Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIk1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3Vy
Y2UgJyVzJywgY2hhcnNldCAnJXMnLCBwcmlvcml0eT0lZCwgcHJlbG9hZD0ldSwgZm9ySGlzdG9y
eT0ldSIsIHJlcXVlc3RVUkwuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBjaGFyc2V0LmxhdGlu
MSgpLmRhdGEoKSwgcHJpb3JpdHksIHJlcXVlc3RJc1ByZWxvYWQsIGZvckhpc3RvcnkpOwotICAg
IAotICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNhc2UgYW4gZW1w
dHkgVVJMPwotICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhl
IGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPwotICAgIGlmIChyZXF1ZXN0VVJMLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRoaXMgaXMg
dGhlIHB1cmUgcHJpbWFyeSByZXNvdXJjZSBVUkwuCi0gICAgS1VSTCB1cmwgPSByZW1vdmVGcmFn
bWVudElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0VVJMKTsKLQotICAgIC8vIExvb2sgdXAgdGhl
IHJlc291cmNlIGluIG91ciBtYXAuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVz
b3VyY2VGb3JVUkwodXJsKTsKLQotICAgIC8vIE5vbiBodHRwcyAibm8tc3RvcmUiIHJlc291cmNl
cyBhcmUgbGVmdCBpbiB0aGUgY2FjaGUgdG8gYmUgdXNlZCBmb3IgYmFjay9mb3J3YXJkIG5hdmln
YXRpb24gb25seS4KLSAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHJlcXVlc3QgZm9ySGlzdG9yeSBh
bmQgdGhlIHJlc291cmNlIHdhcyBzZXJ2ZWQgd2l0aCAibm8tc3RvcmUiIHdlIHNob3VsZCBldmlj
dAotICAgIC8vIGl0IGhlcmUgYW5kIG1ha2UgYSBmcmVzaCByZXF1ZXN0LgotICAgIGlmICghZm9y
SGlzdG9yeSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xD
b250YWluc05vU3RvcmUoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5
Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBjbGVhcmVkIGEgZm9yIGhpc3Rvcnkgb25seSByZXNvdXJj
ZSBkdWUgdG8gYSBub24taGlzdG9yeSByZXF1ZXN0IGZvciB0aGUgcmVzb3VyY2UiKTsKLSAgICAg
ICAgZXZpY3QocmVzb3VyY2UpOwotICAgICAgICByZXNvdXJjZSA9IDA7Ci0gICAgfQotCi0gICAg
aWYgKHJlc291cmNlICYmIHJlcXVlc3RJc1ByZWxvYWQgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRl
ZCgpKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6cmVxdWVz
dFJlc291cmNlIGFscmVhZHkgaGFzIGEgcHJlbG9hZCByZXF1ZXN0IGZvciB0aGlzIHJlcXVlc3Qs
IGFuZCBpdCBoYXNuJ3QgYmVlbiBwcmVsb2FkZWQgeWV0Iik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIGlmICghY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiLi4uVVJMIHdhcyBub3QgYWxsb3dlZCBieSBTZWN1cml0eU9yaWdpbiIpOwotICAgICAg
ICBpZiAoIXJlcXVlc3RJc1ByZWxvYWQpCi0gICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0
TG9jYWxMb2FkRmFpbGVkKGNhY2hlZFJlc291cmNlTG9hZGVyLT5kb2N1bWVudCgpLT5mcmFtZSgp
LCB1cmwuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAocmVz
b3VyY2UgJiYgcmVzb3VyY2UtPnR5cGUoKSAhPSB0eXBlKSB7Ci0gICAgICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJDYWNoZTo6cmVxdWVzdFJlc291cmNlIGZvdW5kIGEgY2FjaGUgcmVzb3VyY2Ug
d2l0aCBtYXRjaGluZyB1cmwgYnV0IGRpZmZlcmVudCB0eXBlLCBldmljdGluZyBhbmQgbG9hZGlu
ZyB3aXRoIG5ldyB0eXBlLiIpOwotICAgICAgICBldmljdChyZXNvdXJjZSk7Ci0gICAgICAgIHJl
c291cmNlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc291cmNlKSB7Ci0gICAgICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZSBmb3IgJyVzJyB3YXNuJ3QgZm91bmQgaW4g
Y2FjaGUuIENyZWF0aW5nIGl0IiwgdXJsLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAg
ICAgIC8vIFRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgotICAgICAgICBy
ZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCk7Ci0gICAgICAgIEFT
U0VSVChyZXNvdXJjZSk7Ci0KLSAgICAgICAgLy8gUHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4g
dGhlIGNhY2hlLCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxv
YWQoKSBjYWxsLgotICAgICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3Qg
dXNlIG5vcm1hbCByZWZjb3VudGluZyBpbnN0ZWFkLgotICAgICAgICByZXNvdXJjZS0+c2V0SW5D
YWNoZSh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIERlZmF1bHQgcHJpb3JpdHkgYmFzZWQg
b24gcmVzb3VyY2UgdHlwZSBpcyB1c2VkIGlmIHRoZSByZXF1ZXN0IGRpZCBub3Qgc3BlY2lmeSBv
bmUuCi0gICAgICAgIGlmIChwcmlvcml0eSAhPSBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2
ZWQpCi0gICAgICAgICAgICByZXNvdXJjZS0+c2V0TG9hZFByaW9yaXR5KHByaW9yaXR5KTsKLQot
ICAgICAgICByZXNvdXJjZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAgIAot
ICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgLy8g
V2UgZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVk
aWF0ZSBmYWlsdXJlLgotICAgICAgICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCB0byBk
ZWxldGUgdGhlIHJlc291cmNlIG5vdyBhbmQgcmV0dXJuIDAgYmVjYXVzZSBvdGhlcndpc2UKLSAg
ICAgICAgICAgIC8vIGl0IHdvdWxkIGxlYWsgaWYgbm8gcmVmL2RlcmVmIHdhcyBldmVyIGRvbmUg
b24gaXQuCi0gICAgICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZShmYWxzZSk7Ci0gICAgICAg
ICAgICBkZWxldGUgcmVzb3VyY2U7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLnNldCh1
cmwuc3RyaW5nKCksIHJlc291cmNlKTsgIC8vIFRoZSBzaXplIHdpbGwgYmUgYWRkZWQgaW4gbGF0
ZXIgb25jZSB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkIGFuZCBjYWxscyBiYWNrIHRvIHVzIHdpdGgg
dGhlIG5ldyBzaXplLgotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEtpY2sgdGhlIHJl
c291cmNlIG91dCBvZiB0aGUgY2FjaGUsIGJlY2F1c2UgdGhlIGNhY2hlIGlzIGRpc2FibGVkLgot
ICAgICAgICAgICAgcmVzb3VyY2UtPnNldEluQ2FjaGUoZmFsc2UpOwotICAgICAgICAgICAgcmVz
b3VyY2UtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVcGdyYWRpbmcgdGhlIHBy
aW9yaXR5IGRvZXNuJ3QgcmVhbGx5IGRvIG11Y2ggc2luY2UgdGhlIFJlc291cmNlTG9hZFNjaGVk
dWxlciBkb2VzIG5vdCBjdXJyZW50bHkKLSAgICAgICAgLy8gYWxsb3cgY2hhbmdpbmcgcHJpb3Jp
dGllcy4gVGhpcyBtaWdodCBiZWNvbWUgaW1wb3J0YW50IGlmIHdlIG1ha2Ugc2NoZWR1bGluZyBw
cmlvcml0aWVzCi0gICAgICAgIC8vIG1vcmUgZHluYW1pYy4KLSAgICAgICAgaWYgKHByaW9yaXR5
ICE9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCAmJiByZXNvdXJjZS0+bG9hZFByaW9y
aXR5KCkgPCBwcmlvcml0eSkKLSAgICAgICAgICAgIHJlc291cmNlLT5zZXRMb2FkUHJpb3JpdHko
cHJpb3JpdHkpOwotICAgIH0KLQotICAgIGlmICghZGlzYWJsZWQoKSkgewotICAgICAgICAvLyBU
aGlzIHdpbGwgbW92ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGZyb250IG9mIGl0cyBMUlUgbGlzdCBh
bmQgaW5jcmVhc2UgaXRzIGFjY2VzcyBjb3VudC4KLSAgICAgICAgcmVzb3VyY2VBY2Nlc3NlZChy
ZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIk1lbW9yeUNhY2hl
OjpyZXF1ZXN0UmVzb3VyY2UgZm9yICclcycgcmV0dXJuaW5nIHJlc291cmNlICVwXG4iLCB1cmwu
c3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCByZXNvdXJjZSk7Ci0KLSAgICByZXR1cm4gcmVzb3Vy
Y2U7Ci19Ci0gICAgCi1DYWNoZWRDU1NTdHlsZVNoZWV0KiBNZW1vcnlDYWNoZTo6cmVxdWVzdFVz
ZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRl
ciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQotewotICAg
IC8vIEVuc3VyZSB0aGlzIGlzIHRoZSBwdXJlIHByaW1hcnkgcmVzb3VyY2UgVVJMLgotICAgIEtV
UkwgdXJsID0gcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQocmVxdWVzdFVSTCk7Ci0K
LSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQ7Ci0gICAgaWYgKENhY2hlZFJlc291
cmNlKiBleGlzdGluZyA9IHJlc291cmNlRm9yVVJMKHVybCkpIHsKLSAgICAgICAgaWYgKGV4aXN0
aW5nLT50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgdXNlclNoZWV0ID0gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5
bGVTaGVldCo+KGV4aXN0aW5nKTsKLSAgICB9IGVsc2UgewotICAgICAgICB1c2VyU2hlZXQgPSBu
ZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOwotCi0gICAgICAgIC8vIFByZXRl
bmQgdGhlIHJlc291cmNlIGlzIGluIHRoZSBjYWNoZSwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5n
IGRlbGV0ZWQgZHVyaW5nIHRoZSBsb2FkKCkgY2FsbC4KLSAgICAgICAgLy8gRklYTUU6IENhY2hl
ZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3JtYWwgcmVmY291bnRpbmcgaW5zdGVhZC4KLSAg
ICAgICAgdXNlclNoZWV0LT5zZXRJbkNhY2hlKHRydWUpOwotICAgICAgICAvLyBEb24ndCBsb2Fk
IGluY3JlbWVudGFsbHksIHNraXAgbG9hZCBjaGVja3MsIGRvbid0IHNlbmQgcmVzb3VyY2UgbG9h
ZCBjYWxsYmFja3MuCi0gICAgICAgIHVzZXJTaGVldC0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRl
ciwgZmFsc2UsIFNraXBTZWN1cml0eUNoZWNrLCBmYWxzZSk7Ci0gICAgICAgIGlmICghZGlzYWJs
ZWQoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLnNldCh1cmwsIHVzZXJTaGVldCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHVzZXJTaGVldC0+c2V0SW5DYWNoZShmYWxzZSk7Ci0gICAg
fQotCi0gICAgaWYgKCFkaXNhYmxlZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRo
ZSByZXNvdXJjZSB0byB0aGUgZnJvbnQgb2YgaXRzIExSVSBsaXN0IGFuZCBpbmNyZWFzZSBpdHMg
YWNjZXNzIGNvdW50LgotICAgICAgICByZXNvdXJjZUFjY2Vzc2VkKHVzZXJTaGVldCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHVzZXJTaGVldDsKLX0KLQogS1VSTCBNZW1vcnlDYWNoZTo6cmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQoY29uc3QgS1VSTCYgb3JpZ2luYWxVUkwpCiB7CiAg
ICAgaWYgKCFvcmlnaW5hbFVSTC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKQEAgLTIzMiwyOSAr
ODIsMjAgQEAgS1VSTCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaQogICAgIHJl
dHVybiB1cmw7CiB9CiAKLXZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGVSZXNvdXJjZShDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UsIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlcikKK2Jvb2wgTWVtb3J5Q2FjaGU6OmFkZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Up
CiB7Ci0gICAgQVNTRVJUKHJlc291cmNlKTsKLSAgICBBU1NFUlQocmVzb3VyY2UtPmluQ2FjaGUo
KSk7Ci0gICAgQVNTRVJUKHJlc291cmNlID09IG1fcmVzb3VyY2VzLmdldChyZXNvdXJjZS0+dXJs
KCkpKTsKLSAgICBBU1NFUlQoIWRpc2FibGVkKCkpOwotICAgIGlmIChyZXNvdXJjZS0+cmVzb3Vy
Y2VUb1JldmFsaWRhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghcmVzb3VyY2UtPmNh
blVzZUNhY2hlVmFsaWRhdG9yKCkpIHsKLSAgICAgICAgZXZpY3QocmVzb3VyY2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IFN0cmluZyYgdXJsID0gcmVzb3VyY2UtPnVybCgp
OwotICAgIENhY2hlZFJlc291cmNlKiBuZXdSZXNvdXJjZSA9IGNyZWF0ZVJlc291cmNlKHJlc291
cmNlLT50eXBlKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCByZXNvdXJjZS0+ZW5jb2Rp
bmcoKSk7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlc291cmNlICVwIGNyZWF0ZWQgdG8g
cmV2YWxpZGF0ZSAlcCIsIG5ld1Jlc291cmNlLCByZXNvdXJjZSk7Ci0gICAgbmV3UmVzb3VyY2Ut
PnNldFJlc291cmNlVG9SZXZhbGlkYXRlKHJlc291cmNlKTsKLSAgICBldmljdChyZXNvdXJjZSk7
Ci0gICAgbV9yZXNvdXJjZXMuc2V0KHVybCwgbmV3UmVzb3VyY2UpOwotICAgIG5ld1Jlc291cmNl
LT5zZXRJbkNhY2hlKHRydWUpOwotICAgIHJlc291cmNlQWNjZXNzZWQobmV3UmVzb3VyY2UpOwot
ICAgIG5ld1Jlc291cmNlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLX0KKyAgICBpZiAo
ZGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fcmVzb3VyY2Vz
LnNldChyZXNvdXJjZS0+dXJsKCksIHJlc291cmNlKTsKKyAgICByZXNvdXJjZS0+c2V0SW5DYWNo
ZSh0cnVlKTsKICAgICAKKyAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKKyAgICAKKyAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5Q2FjaGU6OmFkZCBBZGRlZCAnJXMnLCByZXNv
dXJjZSAlcFxuIiwgcmVzb3VyY2UtPnVybCgpLmxhdGluMSgpLmRhdGEoKSwgcmVzb3VyY2UpOwor
ICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25TdWNj
ZWVkZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBy
ZXZhbGlkYXRpbmdSZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gNzQxMDcpCisrKyBXZWJDb3JlL2xvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTYgKzEwMiwxNCBA
QCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgVHlwZVN0YXRpc3RpYyBmb250czsKICAgICB9Owot
Ci0gICAgLy8gUmVxdWVzdCByZXNvdXJjZXMgZnJvbSB0aGUgY2FjaGUuICBBIGxvYWQgd2lsbCBi
ZSBpbml0aWF0ZWQgYW5kIGEgY2FjaGUgb2JqZWN0IGNyZWF0ZWQgaWYgdGhlIG9iamVjdCBpcyBu
b3QKLSAgICAvLyBmb3VuZCBpbiB0aGUgY2FjaGUuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVl
c3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlOjpUeXBlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHksIGJvb2wgaXNQcmVsb2FkID0gZmFsc2UsIGJvb2wgZm9ySGlzdG9yeSA9IGZhbHNlKTsKLQot
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRS
ZXNvdXJjZUxvYWRlciosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsK
ICAgICAKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2VGb3JVUkwoY29uc3QgS1VSTCYpOwor
ICAgIAorICAgIGJvb2wgYWRkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSk7CisgICAgdm9pZCBy
ZW1vdmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSB7IGV2aWN0KHJlc291cmNlKTsgfQorCiAg
ICAgc3RhdGljIEtVUkwgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVySWZOZWVkZWQoY29uc3QgS1VS
TCYgb3JpZ2luYWxVUkwpOwogICAgIAotICAgIHZvaWQgcmV2YWxpZGF0ZVJlc291cmNlKENhY2hl
ZFJlc291cmNlKiwgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIHJldmFsaWRhdGlv
blN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIHJldmFsaWRhdGlvbkZhaWxlZChDYWNoZWRSZXNv
dXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UpOwogICAgIApAQCAtMTQwLDE0ICsxMzgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRvdWJs
ZSBpbnRlcnZhbCkgeyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBpbnRlcnZh
bDsgfQogICAgIGRvdWJsZSBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsOyB9CiAKLSAgICAvLyBS
ZW1vdmUgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgZnJvbSBib3RoIHRoZSByZXNvdXJjZSBtYXAg
YW5kIGZyb20gdGhlIExSVSBsaXN0LgotICAgIHZvaWQgcmVtb3ZlKENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSkgeyBldmljdChyZXNvdXJjZSk7IH0KLQogICAgIHZvaWQgYWRkQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKICAgICB2b2lkIHJlbW92ZUNhY2hlZFJl
c291cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAKLSAgICBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2VGb3JVUkwoY29uc3QgS1VSTCYpOwotCiAgICAgLy8gQ2FsbHMgdG8gcHV0IHRo
ZSBjYWNoZWQgcmVzb3VyY2UgaW50byBhbmQgb3V0IG9mIExSVSBsaXN0cy4KICAgICB2b2lkIGlu
c2VydEluTFJVTGlzdChDYWNoZWRSZXNvdXJjZSopOwogICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxp
c3QoQ2FjaGVkUmVzb3VyY2UqKTsKQEAgLTE2NiwxMyArMTU5LDE0IEBAIHB1YmxpYzoKIAogICAg
IC8vIEZ1bmN0aW9uIHRvIGNvbGxlY3QgY2FjaGUgc3RhdGlzdGljcyBmb3IgdGhlIGNhY2hlcyB3
aW5kb3cgaW4gdGhlIFNhZmFyaSBEZWJ1ZyBtZW51LgogICAgIFN0YXRpc3RpY3MgZ2V0U3RhdGlz
dGljcygpOworICAgIAorICAgIHZvaWQgcmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSop
OwogCiBwcml2YXRlOgogICAgIE1lbW9yeUNhY2hlKCk7CiAgICAgfk1lbW9yeUNhY2hlKCk7IC8v
IE5vdCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBk
ZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KICAgICAgICAKICAg
ICBMUlVMaXN0KiBscnVMaXN0Rm9yKENhY2hlZFJlc291cmNlKik7Ci0gICAgdm9pZCByZXNvdXJj
ZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlKik7CiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVt
cFN0YXRzKCk7CiAgICAgdm9pZCBkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3Q7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76761</attachid>
            <date>2010-12-16 05:53:34 -0800</date>
            <delta_ts>2011-01-09 10:18:13 -0800</delta_ts>
            <desc>fix style</desc>
            <filename>memorycache-loading-refactor-3.patch</filename>
            <type>text/plain</type>
            <size>37542</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTAtMTItMTUgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTEzNAorICAgICAgICBNb3Zl
IGxvYWRpbmcgcmVsYXRlZCBjb2RlIGZyb20gTWVtb3J5Q2FjaGUgdG8gQ2FjaGVkUmVzb3VyY2VM
b2FkZXIKKworICAgICAgICAtIE1lcmdlIE1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgdG8g
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZQorICAgICAgICAtIE1lcmdlIE1l
bW9yeUNhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQgdG8gQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldAorICAgICAgICAtIE1vdmUgTWVtb3J5Q2FjaGU6
OnJldmFsaWRhdGVSZXNvdXJjZSB0byBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmV2YWxpZGF0ZVJl
c291cmNlCisgICAgICAgIC0gQWRkIE1lbW9yeUNhY2hlOjphZGQKKyAgICAgICAgLSBSZWZhY3Rv
ciB0aGUgZGVjaXNpb24gb24gd2hldGhlciB0byByZWxvYWQsIHJldmFsaWRhdGUgb3IgdXNlIHRo
ZSBleGlzdGluZyByZXNvdXJjZSB0byAKKyAgICAgICAgICBhIHNpbmdsZSBmdW5jdGlvbiwgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeQorCisgICAgICAg
ICogY3NzL0NTU0ltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VWYWx1
ZTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUgYSBjb2Rl
IHBhdGggdGhhdCBjYWxsZWQgTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBkaXJlY3RseS4g
VGhpcyBjb2RlIHBhdGggd291bGQgaGF2ZSBjcmFzaGVkCisgICAgICAgICAgICBpZiBldmVyIHRh
a2VuIChzaW5jZSBpdCBwYXNzZXMgbnVsbCBDYWNoZWRSZXNvdXJjZUxvYWRlciBwb2ludGVyKS4K
KyAgICAgICAgICAgIAorICAgICAgICAqIGxvYWRlci9JbWFnZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpDYWNoZWRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZUR1
ZVRvQ2FjaGVIZWFkZXJzKToKKyAgICAgICAgCisgICAgICAgICAgICBNb3ZlZCB0ZXN0cyB0aGF0
IHdlcmUgbm90IGFib3V0IGNhY2hlIGhlYWRlcnMgdG8gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRl
dGVybWluZVJldmFsaWRhdGlvblBvbGljeSBhbmQgcmVuYW1lZC4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0TG9hZFByaW9yaXR5KToKKyAgICAgICAgCisg
ICAgICAgICAgICBDaGVjayBmb3IgVW5yZXNvbHZlZCB2YWx1ZSBiZWZvcmUgc2V0dGluZy4KKyAg
ICAgICAgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIp
OgorICAgICAgICAKKyAgICAgICAgUmVuYW1lIHRvIGJlIGJpdCBsZXNzIG15c3RlcmlvdXMuCisg
ICAgICAgIAorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgVGhpcyB3YXMgbW92ZWQgZnJvbSBNZW1vcnlDYWNoZS4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRp
b25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIAorICAgICAgICAgICAgVGhpcyB3YXMgbW92
ZWQvbWVyZ2VkIGZyb20gTWVtb3J5Q2FjaGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgVGhpcyBjb21iaW5lcyBNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNlIGFuZCB0aGUgZXhp
c3RpbmcgbWV0aG9kLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXZhbGlkYXRlUmVzb3VyY2UpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMg
d2FzIG1vdmVkIGZyb20gTWVtb3J5Q2FjaGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgIAorICAgICAgICAg
ICAgTmV3IG1ldGhvZCBmb3IgaW5pdGlhdGluZyBsb2FkaW5nLgorICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpub3RpZnlMb2FkZWRGcm9tTWVtb3J5Q2Fj
aGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFJlbmFtZWQgdGhlIG15c3RlcmlvdXMgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNoZWNrQ2FjaGVPYmplY3RTdGF0dXMKKyAgICAgICAgCisgICAgICAg
ICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjph
ZGQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZSk6CisKIDIwMTAtMTItMTUgIEtlbm5ldGggUnVzc2Vs
bCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29u
LgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDc0MTA2KQorKysgV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDI0ICs2NiwxOSBAQCBT
dHlsZUNhY2hlZEltYWdlKiBDU1NJbWFnZVZhbHVlOjpjYWNoZWRJCiAKIFN0eWxlQ2FjaGVkSW1h
Z2UqIENTU0ltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFN0cmluZyYgdXJsKQogeworICAgIEFTU0VSVChsb2FkZXIpOworCiAgICAgaWYg
KCFtX2FjY2Vzc2VkSW1hZ2UpIHsKICAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKIAot
ICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSAwOwotICAgICAgICBpZiAobG9hZGVy
KQotICAgICAgICAgICAgY2FjaGVkSW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZSh1cmwpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgZmluZCBhIHdheSB0
byBtYWtlIHRoZXNlIGltYWdlcyBzaXQgaW4gdGhlaXIgb3duIG1lbW9yeSBwYXJ0aXRpb24sIHNp
bmNlIHRoZXkgYXJlIHVzZXIgYWdlbnQgaW1hZ2VzLgotICAgICAgICAgICAgY2FjaGVkSW1hZ2Ug
PSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KGNhY2hlKCktPnJlcXVlc3RSZXNvdXJjZSgwLCBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCks
IFN0cmluZygpLCBSZXNvdXJjZUxvYWRQcmlvcml0eVVucmVzb2x2ZWQpKTsKLSAgICAgICAgfQot
CisgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdl
KHVybCk7CiAgICAgICAgIGlmIChjYWNoZWRJbWFnZSkgewogICAgICAgICAgICAgY2FjaGVkSW1h
Z2UtPmFkZENsaWVudCh0aGlzKTsKICAgICAgICAgICAgIG1faW1hZ2UgPSBTdHlsZUNhY2hlZElt
YWdlOjpjcmVhdGUoY2FjaGVkSW1hZ2UpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJl
dHVybiBtX2ltYWdlLT5pc0NhY2hlZEltYWdlKCkgPyBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZElt
YWdlKj4obV9pbWFnZS5nZXQoKSkgOiAwOworICAgIHJldHVybiAobV9pbWFnZSAmJiBtX2ltYWdl
LT5pc0NhY2hlZEltYWdlKCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KG1faW1h
Z2UuZ2V0KCkpIDogMDsKIH0KIAogU3RyaW5nIENTU0ltYWdlVmFsdWU6OmNhY2hlZEltYWdlVVJM
KCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDc0MTA2KQorKysgV2ViQ29y
ZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKGZhbHNlKTsK
ICAgICAgICAgICAgIG5ld0ltYWdlID0gbmV3IENhY2hlZEltYWdlKHNvdXJjZVVSSShhdHRyKSk7
CiAgICAgICAgICAgICBuZXdJbWFnZS0+c2V0TG9hZGluZyh0cnVlKTsKLSAgICAgICAgICAgIG5l
d0ltYWdlLT5zZXRDYWNoZWRSZXNvdXJjZUxvYWRlcihkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSk7CisgICAgICAgICAgICBuZXdJbWFnZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgICAgICAgICAgZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPm1fZG9jdW1lbnRSZXNvdXJjZXMuc2V0KG5l
d0ltYWdlLT51cmwoKSwgbmV3SW1hZ2UpOwogICAgICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJl
c291cmNlTG9hZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKGF1dG9Mb2FkT3RoZXJJbWFnZXMpOwog
ICAgICAgICB9IGVsc2UKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJl
dmlzaW9uIDc0MTA2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCShyZXZpc2lvbiA3NDEwNykKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIENhY2hl
ZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHIKICAgICAsIG1fcHJldkluQWxsUmVz
b3VyY2VzTGlzdCgwKQogICAgICwgbV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQogICAgICwg
bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdCgwKQotICAgICwgbV9jYWNoZWRSZXNvdXJjZUxvYWRl
cigwKQorICAgICwgbV9vd25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKQogICAgICwgbV9yZXNv
dXJjZVRvUmV2YWxpZGF0ZSgwKQogICAgICwgbV9wcm94eVJlc291cmNlKDApCiB7CkBAIC0xMjIs
OCArMTIyLDggQEAgQ2FjaGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSgpCiAgICAgY2FjaGVk
UmVzb3VyY2VMZWFrQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpCi0gICAgICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPnJlbW92
ZUNhY2hlZFJlc291cmNlKHRoaXMpOworICAgIGlmIChtX293bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyKQorICAgICAgICBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyLT5yZW1vdmVDYWNoZWRS
ZXNvdXJjZSh0aGlzKTsKIH0KIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6bG9hZChDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3Vy
aXR5Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKQpAQCAtNDkwLDE3ICs0OTAsMTQgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2Fj
aGVWYWxpZGF0bwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBl
VGFnSGVhZGVyLCAoImV0YWciKSk7CiAgICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0eSgpOwogfQotICAgIAotYm9vbCBDYWNoZWRSZXNv
dXJjZTo6bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0Ci17Ci0g
ICAgaWYgKGVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
Q2FjaGVkUmVzb3VyY2UgJXAgbXVzdFJldmFsaWRhdGUgYmVjYXVzZSBvZiBtX2Vycm9yT2NjdXJy
ZWRcbiIsIHRoaXMpOworCitib29sIENhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0ZUR1ZVRv
Q2FjaGVIZWFkZXJzKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdAoreyAgICAKKyAgICBB
U1NFUlQoY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lSZXZhbGlkYXRlIHx8IGNhY2hlUG9saWN5
ID09IENhY2hlUG9saWN5Q2FjaGUgfHwgY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lWZXJpZnkp
OworCisgICAgaWYgKGNhY2hlUG9saWN5ID09IENhY2hlUG9saWN5UmV2YWxpZGF0ZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCi0gICAgaWYgKG1fbG9hZGluZykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAogICAgIGlmIChtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5z
Tm9DYWNoZSgpIHx8IG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpIHsK
ICAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZh
bGlkYXRlIGJlY2F1c2Ugb2YgbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUo
KSB8fCBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpXG4iLCB0aGlzKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MTQsNiArNTExLDcgQEAgYm9vbCBDYWNoZWRSZXNv
dXJjZTo6bXVzdFJldmFsaWRhdGUoQ2FjaAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CisgICAgLy8gQ2FjaGVQb2xpY3lWZXJpZnkKICAgICBpZiAoaXNFeHBpcmVkKCkpIHsKICAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlZFJlc291cmNlICVwIG11c3RSZXZhbGlkYXRl
IGJlY2F1c2Ugb2YgaXNFeHBpcmVkKClcbiIsIHRoaXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTU4Nyw1ICs1ODUsMTIgQEAgdW5zaWduZWQgQ2FjaGVkUmVzb3VyY2U6Om92ZXJoZWFkU2l6
ZSgpIAogICAgICAgICAgICAgICAzODQ7ICAgICAgICAgICAgICAgICAgICAvLyBhdmVyYWdlIHNp
emUgb2YgbV9jbGllbnRzIGhhc2ggbWFwCiAgICAgKi8KIH0KKyAgICAKK3ZvaWQgQ2FjaGVkUmVz
b3VyY2U6OnNldExvYWRQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBsb2FkUHJpb3JpdHkp
IAoreyAKKyAgICBpZiAobG9hZFByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNv
bHZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbG9hZFByaW9yaXR5ID0gbG9hZFByaW9yaXR5
OworfQogCiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJldmlz
aW9uIDc0MTA2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBQdXJnZWFibGVCdWZmZXI7CiAvLyBm
cm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIGNh
c2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgogLy8gVGhpcyBjbGFzcyBhbHNvIGRv
ZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRhaW4gdGhl
IHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCiBjbGFzcyBDYWNoZWRSZXNvdXJjZSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwog
ICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
UmVzb3VyY2U7CiAgICAgCkBAIC0xODYsNyArMTg3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKSB7IH0KIAotICAgIHZvaWQgc2V0Q2FjaGVk
UmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
KSB7IG1fY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBjYWNoZWRSZXNvdXJjZUxvYWRlcjsgfQorICAg
IHZvaWQgc2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyKSB7IG1fb3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBj
YWNoZWRSZXNvdXJjZUxvYWRlcjsgfQogICAgIAogICAgIGJvb2wgaXNQcmVsb2FkZWQoKSBjb25z
dCB7IHJldHVybiBtX3ByZWxvYWRDb3VudDsgfQogICAgIHZvaWQgaW5jcmVhc2VQcmVsb2FkQ291
bnQoKSB7ICsrbV9wcmVsb2FkQ291bnQ7IH0KQEAgLTE5Niw3ICsxOTcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1bnJlZ2lzdGVySGFuZGxlKENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSogaCk7CiAg
ICAgCiAgICAgYm9vbCBjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0OwotICAgIGJvb2wgbXVz
dFJldmFsaWRhdGUoQ2FjaGVQb2xpY3kpIGNvbnN0OworICAgIGJvb2wgbXVzdFJldmFsaWRhdGVE
dWVUb0NhY2hlSGVhZGVycyhDYWNoZVBvbGljeSkgY29uc3Q7CiAgICAgYm9vbCBpc0NhY2hlVmFs
aWRhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZTsgfQogICAgIENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZVRvUmV2YWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VUb1JldmFsaWRhdGU7IH0KICAgICAKQEAgLTIzNyw3ICsyMzgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogICAgIHZvaWQgdXBkYXRlUmVz
cG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiB2YWxpZGF0aW5n
UmVzcG9uc2UpOwogICAgIHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gUHVyZ2VEZWZhdWx0OyB9Ci0gICAgdm9pZCBzZXRMb2FkUHJpb3JpdHkoUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbG9hZFByaW9yaXR5KSB7IG1fbG9hZFByaW9yaXR5ID0gbG9hZFBy
aW9yaXR5OyB9CisgICAgdm9pZCBzZXRMb2FkUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkg
bG9hZFByaW9yaXR5KTsKIAogICAgIGRvdWJsZSBjdXJyZW50QWdlKCkgY29uc3Q7CiAgICAgZG91
YmxlIGZyZXNobmVzc0xpZmV0aW1lKCkgY29uc3Q7CkBAIC0yNzUsNyArMjc2LDcgQEAgcHJpdmF0
ZToKICAgICBDYWNoZWRSZXNvdXJjZSogbV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdDsKICAgICBD
YWNoZWRSZXNvdXJjZSogbV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdDsKIAotICAgIENhY2hlZFJl
c291cmNlTG9hZGVyKiBtX2NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5IG5vbi0wIGZvciBy
ZXNvdXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQorICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyOyAvLyBvbmx5IG5vbi0wIGZvciByZXNv
dXJjZXMgdGhhdCBhcmUgbm90IGluIHRoZSBjYWNoZQogICAgIAogICAgIC8vIElmIHRoaXMgZmll
bGQgaXMgbm9uLW51bGwgd2UgYXJlIHVzaW5nIHRoZSByZXNvdXJjZSBhcyBhIHByb3h5IGZvciBj
aGVja2luZyB3aGV0aGVyIGFuIGV4aXN0aW5nIHJlc291cmNlIGlzIHN0aWxsIHVwIHRvIGRhdGUK
ICAgICAvLyB1c2luZyBIVFRQIElmLU1vZGlmaWVkLVNpbmNlL0lmLU5vbmUtTWF0Y2ggaGVhZGVy
cy4gSWYgdGhlIHJlc3BvbnNlIGlzIDMwNCBhbGwgY2xpZW50cyBvZiB0aGlzIHJlc291cmNlIGFy
ZSBtb3ZlZApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAkocmV2aXNpb24gNzQxMDcpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkRm9udC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKICNpbmNsdWRlICJQaW5nTG9hZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKQEAgLTQ5LDYgKzUxLDMxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIENh
Y2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICBy
ZXR1cm4gbmV3IENhY2hlZEltYWdlKHVybC5zdHJpbmcoKSk7CisgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRDU1NTdHlsZVNo
ZWV0KHVybC5zdHJpbmcoKSwgY2hhcnNldCk7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0OgorICAgICAgICByZXR1cm4gbmV3IENhY2hlZFNjcmlwdCh1cmwuc3RyaW5nKCksIGNoYXJz
ZXQpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0
dXJuIG5ldyBDYWNoZWRGb250KHVybC5zdHJpbmcoKSk7CisjaWYgRU5BQkxFKFhTTFQpCisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIG5ldyBD
YWNoZWRYU0xTdHlsZVNoZWV0KHVybC5zdHJpbmcoKSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoTElO
S19QUkVGRVRDSCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAg
ICAgIHJldHVybiBuZXcgQ2FjaGVkUmVzb3VyY2UodXJsLnN0cmluZygpLCBDYWNoZWRSZXNvdXJj
ZTo6TGlua1ByZWZldGNoKTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkNhY2hlZFJl
c291cmNlTG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fY2FjaGUoY2FjaGUoKSkK
ICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCkBAIC02Niw3ICs5Myw3IEBAIENhY2hlZFJlc291
cmNlTG9hZGVyOjp+Q2FjaGVkUmVzb3VyY2VMb2EKICAgICBjbGVhclByZWxvYWRzKCk7CiAgICAg
RG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9kb2N1bWVudFJlc291cmNlcy5l
bmQoKTsKICAgICBmb3IgKERvY3VtZW50UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb2N1
bWVudFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNv
bmQtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICBpdC0+c2Vjb25kLT5zZXRP
d25pbmdDYWNoZWRSZXNvdXJjZUxvYWRlcigwKTsKICAgICBtX2NhY2hlLT5yZW1vdmVDYWNoZWRS
ZXNvdXJjZUxvYWRlcih0aGlzKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBubyByZXF1ZXN0cyBzdGls
bCBwb2ludCB0byB0aGlzIENhY2hlZFJlc291cmNlTG9hZGVyCkBAIC05MCw0NSArMTE3LDYgQEAg
RnJhbWUqIENhY2hlZFJlc291cmNlTG9hZGVyOjpmcmFtZSgpIGNvbgogICAgIHJldHVybiBtX2Rv
Y3VtZW50LT5mcmFtZSgpOwogfQogCi12b2lkIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0Zv
clJlbG9hZChjb25zdCBLVVJMJiBmdWxsVVJMKQotewotICAgIGlmIChtX2FsbG93U3RhbGVSZXNv
dXJjZXMpCi0gICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGlsZSBw
YXN0aW5nCi0KLSAgICBpZiAoZnVsbFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBpZiAobV9yZWxvYWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC5zdHJpbmcoKSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDYWNoZWRSZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNo
ZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMKTsKLSAgICBpZiAoIWV4aXN0aW5nIHx8IGV4aXN0
aW5nLT5pc1ByZWxvYWRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGNhY2hl
UG9saWN5KCkpIHsKLSAgICBjYXNlIENhY2hlUG9saWN5VmVyaWZ5OgotICAgICAgICBpZiAoIWV4
aXN0aW5nLT5tdXN0UmV2YWxpZGF0ZShDYWNoZVBvbGljeVZlcmlmeSkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVSZXNvdXJjZShleGlzdGluZywgdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVQb2xpY3lDYWNoZToKLSAgICAgICAg
aWYgKCFleGlzdGluZy0+bXVzdFJldmFsaWRhdGUoQ2FjaGVQb2xpY3lDYWNoZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNhY2hlKCktPnJldmFsaWRhdGVSZXNvdXJjZShleGlzdGlu
ZywgdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ2FjaGVQb2xpY3lSZWxvYWQ6Ci0g
ICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7ICAgICAgICAKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDYWNoZVBvbGljeVJldmFsaWRhdGU6Ci0gICAgICAgIGNhY2hlKCktPnJldmFs
aWRhdGVSZXNvdXJjZShleGlzdGluZywgdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q2FjaGVQb2xpY3lIaXN0b3J5QnVmZmVyOgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOwotfQotCiBDYWNoZWRJbWFnZSog
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZShjb25zdCBTdHJpbmcmIHVybCkKIHsK
ICAgICBpZiAoRnJhbWUqIGYgPSBmcmFtZSgpKSB7CkBAIC0xNjEsOSArMTQ5LDI3IEBAIENhY2hl
ZENTU1N0eWxlU2hlZXQqIENhY2hlZFJlc291cmNlTG9hZGUKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldCwgdXJsLCBjaGFyc2V0LCBwcmlvcml0eSkpOwogfQogCi1DYWNoZWRDU1NT
dHlsZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCitDYWNoZWRDU1NTdHls
ZVNoZWV0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgcmVxdWVzdFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewotICAgIHJl
dHVybiBjYWNoZSgpLT5yZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQodGhpcywgS1VSTChLVVJMKCks
IHVybCksIGNoYXJzZXQpOworICAgIEtVUkwgdXJsID0gTWVtb3J5Q2FjaGU6OnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcklmTmVlZGVkKEtVUkwoS1VSTCgpLCByZXF1ZXN0VVJMKSk7CisKKyAgICBp
ZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJs
KSkgeworICAgICAgICBpZiAoZXhpc3RpbmctPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NT
U3R5bGVTaGVldCkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHls
ZVNoZWV0Kj4oZXhpc3RpbmcpOworICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhpc3RpbmcpOwor
ICAgIH0KKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiB1c2VyU2hlZXQgPSBuZXcgQ2FjaGVkQ1NT
U3R5bGVTaGVldCh1cmwsIGNoYXJzZXQpOworICAgIAorICAgIGJvb2wgaW5DYWNoZSA9IGNhY2hl
KCktPmFkZCh1c2VyU2hlZXQpOworICAgIGlmICghaW5DYWNoZSkKKyAgICAgICAgdXNlclNoZWV0
LT5zZXRJbkNhY2hlKHRydWUpOworICAgIAorICAgIHVzZXJTaGVldC0+bG9hZCh0aGlzLCAvKmlu
Y3JlbWVudGFsKi8gZmFsc2UsIFNraXBTZWN1cml0eUNoZWNrLCAvKnNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MqLyBmYWxzZSk7CisKKyAgICBpZiAoIWluQ2FjaGUpCisgICAgICAgIHVzZXJTaGVl
dC0+c2V0SW5DYWNoZShmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIHVzZXJTaGVldDsKIH0KIAog
Q2FjaGVkU2NyaXB0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNjcmlwdChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQpAQCAtMjUwLDQ0ICsyNTYsMTg5IEBA
IGJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QoQ2EKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBGSVhNRTogQ29u
c2lkZXIgbGV0dGluZyB0aGUgZW1iZWRkZXIgYmxvY2sgbWl4ZWQgY29udGVudCBsb2Fkcy4KKwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1DYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSwgYm9vbCBpc1ByZWxvYWQpCitDYWNoZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJp
bmcmIHJlc291cmNlVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9y
aXR5IHByaW9yaXR5LCBib29sIGZvclByZWxvYWQpCiB7Ci0gICAgS1VSTCBmdWxsVVJMID0gbV9k
b2N1bWVudC0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBLVVJMIHVybCA9IG1fZG9jdW1lbnQtPmNv
bXBsZXRlVVJMKHJlc291cmNlVVJMKTsKKyAgICAKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICclcycs
IHByaW9yaXR5PSVkLCBmb3JQcmVsb2FkPSV1IiwgdXJsLnN0cmluZygpLmxhdGluMSgpLmRhdGEo
KSwgY2hhcnNldC5sYXRpbjEoKS5kYXRhKCksIHByaW9yaXR5LCBmb3JQcmVsb2FkKTsKICAgICAK
ICAgICAvLyBJZiBvbmx5IHRoZSBmcmFnbWVudCBpZGVudGlmaWVycyBkaWZmZXIsIGl0IGlzIHRo
ZSBzYW1lIHJlc291cmNlLgotICAgIGZ1bGxVUkwgPSBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVySWZOZWVkZWQoZnVsbFVSTCk7CisgICAgdXJsID0gTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHVybCk7CisKKyAgICBpZiAoIXVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghY2FuUmVxdWVzdCh0eXBl
LCB1cmwpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICghZnVsbFVSTC5pc1ZhbGlkKCkg
fHwgIWNhblJlcXVlc3QodHlwZSwgZnVsbFVSTCkpCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
d2hhdCBpcyB0aGUgY29ycmVjdCB3YXkgdG8gbWVyZ2UgdGhpcyBzZWN1cml0eSBjaGVjayB3aXRo
IHRoZSBvbmUgYWJvdmUuCisgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5j
YW5EaXNwbGF5KHVybCkpIHsKKyAgICAgICAgaWYgKCFmb3JQcmVsb2FkKQorICAgICAgICAgICAg
RnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2N1bWVudCgpLT5mcmFtZSgpLCB1
cmwuc3RyaW5nKCkpOworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5
T3JpZ2luOjpjYW5EaXNwbGF5Iik7CiAgICAgICAgIHJldHVybiAwOworICAgIH0KIAogICAgIGlm
IChjYWNoZSgpLT5kaXNhYmxlZCgpKSB7Ci0gICAgICAgIERvY3VtZW50UmVzb3VyY2VNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kb2N1bWVudFJlc291cmNlcy5maW5kKGZ1bGxVUkwuc3RyaW5nKCkpOwot
ICAgICAgICAKKyAgICAgICAgRG9jdW1lbnRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2Rv
Y3VtZW50UmVzb3VyY2VzLmZpbmQodXJsLnN0cmluZygpKTsKICAgICAgICAgaWYgKGl0ICE9IG1f
ZG9jdW1lbnRSZXNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0LT5zZWNvbmQtPnNldENh
Y2hlZFJlc291cmNlTG9hZGVyKDApOworICAgICAgICAgICAgaXQtPnNlY29uZC0+c2V0T3duaW5n
Q2FjaGVkUmVzb3VyY2VMb2FkZXIoMCk7CiAgICAgICAgICAgICBtX2RvY3VtZW50UmVzb3VyY2Vz
LnJlbW92ZShpdCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjaGVja0ZvclJlbG9hZChmdWxs
VVJMKTsKKyAgICAvLyBTZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyByZXNvdXJjZSBmcm9t
IHRoZSBjYWNoZS4KKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZSgpLT5yZXNv
dXJjZUZvclVSTCh1cmwpOwogCi0gICAgYm9vbCBhbGxvd0Zvckhpc3RvcnlPbmx5UmVzb3VyY2Vz
ID0gY2FjaGVQb2xpY3koKSA9PSBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7Ci0gICAgQ2FjaGVk
UmVzb3VyY2UqIHJlc291cmNlID0gY2FjaGUoKS0+cmVxdWVzdFJlc291cmNlKHRoaXMsIHR5cGUs
IGZ1bGxVUkwsIGNoYXJzZXQsIHByaW9yaXR5LCBpc1ByZWxvYWQsIGFsbG93Rm9ySGlzdG9yeU9u
bHlSZXNvdXJjZXMpOwotICAgIGlmIChyZXNvdXJjZSkgewotICAgICAgICAvLyBDaGVjayBmaW5h
bCBVUkwgb2YgcmVzb3VyY2UgdG8gY2F0Y2ggcmVkaXJlY3RzLgotICAgICAgICAvLyBTZWUgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2Mz4uCi0gICAgICAgIGlm
IChmdWxsVVJMICE9IHJlc291cmNlLT51cmwoKSAmJiAhY2FuUmVxdWVzdCh0eXBlLCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgcmVzb3VyY2UtPnVybCgpKSkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoZm9yUHJlbG9hZCAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+aXNQcmVsb2FkZWQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgbV9kb2N1bWVudFJlc291cmNlcy5zZXQo
cmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7Ci0gICAgICAgIGNoZWNrQ2FjaGVPYmplY3RTdGF0
dXMocmVzb3VyY2UpOworICAgIHN3aXRjaCAoZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5KHR5
cGUsIHJlc291cmNlKSkgeworICAgIGNhc2UgUmVsb2FkOgorICAgICAgICBpZiAocmVzb3VyY2Up
IHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7CisgICAgICAgICAgICBt
X3JlbG9hZGVkQW5kUmV2YWxpZGF0ZWRVUkxzLmFkZCh1cmwuc3RyaW5nKCkpOworICAgICAgICB9
CisgICAgICAgIHJlc291cmNlID0gbG9hZFJlc291cmNlKHR5cGUsIHVybCwgY2hhcnNldCwgcHJp
b3JpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldmFsaWRhdGU6CisgICAgICAgIHJl
c291cmNlID0gcmV2YWxpZGF0ZVJlc291cmNlKHJlc291cmNlLCBwcmlvcml0eSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVXNlOgorICAgICAgICBjYWNoZSgpLT5yZXNvdXJjZUFjY2Vzc2Vk
KHJlc291cmNlKTsKKyAgICAgICAgbm90aWZ5TG9hZGVkRnJvbU1lbW9yeUNhY2hlKHJlc291cmNl
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBBU1NFUlQocmVzb3VyY2UtPnVybCgpID09IHVybC5zdHJpbmcoKSk7
CisgICAgbV9kb2N1bWVudFJlc291cmNlcy5zZXQocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7
CisgICAgCiAgICAgcmV0dXJuIHJlc291cmNlOwogfQorICAgIAorQ2FjaGVkUmVzb3VyY2UqIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpyZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlLCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBBU1NFUlQocmVz
b3VyY2UpOworICAgIEFTU0VSVChyZXNvdXJjZS0+aW5DYWNoZSgpKTsKKyAgICBBU1NFUlQoIWNh
Y2hlKCktPmRpc2FibGVkKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+Y2FuVXNlQ2FjaGVWYWxp
ZGF0b3IoKSk7CisgICAgQVNTRVJUKCFyZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKSk7
CisgICAgCisgICAgY29uc3QgU3RyaW5nJiB1cmwgPSByZXNvdXJjZS0+dXJsKCk7CisgICAgQ2Fj
aGVkUmVzb3VyY2UqIG5ld1Jlc291cmNlID0gY3JlYXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUo
KSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHJlc291cmNlLT5lbmNvZGluZygpKTsKKyAg
ICAKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmVzb3VyY2UgJXAgY3JlYXRlZCB0byByZXZh
bGlkYXRlICVwIiwgbmV3UmVzb3VyY2UsIHJlc291cmNlKTsKKyAgICBuZXdSZXNvdXJjZS0+c2V0
UmVzb3VyY2VUb1JldmFsaWRhdGUocmVzb3VyY2UpOworICAgIAorICAgIGNhY2hlKCktPnJlbW92
ZShyZXNvdXJjZSk7CisgICAgY2FjaGUoKS0+YWRkKG5ld1Jlc291cmNlKTsKKyAgICAKKyAgICBu
ZXdSZXNvdXJjZS0+c2V0TG9hZFByaW9yaXR5KHByaW9yaXR5KTsKKyAgICBuZXdSZXNvdXJjZS0+
bG9hZCh0aGlzKTsKKyAgICAKKyAgICBtX3JlbG9hZGVkQW5kUmV2YWxpZGF0ZWRVUkxzLmFkZCh1
cmwpOworCisgICAgcmV0dXJuIG5ld1Jlc291cmNlOworfQorCitDYWNoZWRSZXNvdXJjZSogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmxvYWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBl
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpCit7CisgICAgQVNTRVJUKCFjYWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1
cmwpKTsKKyAgICAKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTG9hZGluZyBDYWNoZWRSZXNv
dXJjZSBmb3IgJyVzJy4iLCB1cmwuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAKKyAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCB1cmwsIGNo
YXJzZXQpOworICAgIAorICAgIGJvb2wgaW5DYWNoZSA9IGNhY2hlKCktPmFkZChyZXNvdXJjZSk7
CisgICAgCisgICAgLy8gUHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIGNhY2hlLCB0byBw
cmV2ZW50IGl0IGZyb20gYmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxvYWQoKSBjYWxsLgorICAg
IC8vIEZJWE1FOiBDYWNoZWRSZXNvdXJjZSBzaG91bGQganVzdCB1c2Ugbm9ybWFsIHJlZmNvdW50
aW5nIGluc3RlYWQuCisgICAgaWYgKCFpbkNhY2hlKQorICAgICAgICByZXNvdXJjZS0+c2V0SW5D
YWNoZSh0cnVlKTsKKyAgICAKKyAgICByZXNvdXJjZS0+c2V0TG9hZFByaW9yaXR5KHByaW9yaXR5
KTsKKyAgICByZXNvdXJjZS0+bG9hZCh0aGlzKTsKKyAgICAKKyAgICBpZiAoIWluQ2FjaGUpIHsK
KyAgICAgICAgcmVzb3VyY2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKHRoaXMpOwor
ICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZShmYWxzZSk7CisgICAgfQorICAgIAorICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgaW1tZWRpYXRlIGxvYWRzLCBidXQgd2UgZG8gc3VwcG9ydCBpbW1l
ZGlhdGUgZmFpbHVyZS4KKyAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgeworICAg
ICAgICBpZiAoaW5DYWNoZSkKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXNvdXJjZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSByZXNvdXJjZTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHJlc291cmNlOworfQorCitDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6UmV2YWxpZGF0aW9uUG9saWN5IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1p
bmVSZXZhbGlkYXRpb25Qb2xpY3koQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgQ2FjaGVkUmVz
b3VyY2UqIGV4aXN0aW5nUmVzb3VyY2UpCit7CisgICAgaWYgKCFleGlzdGluZ1Jlc291cmNlKQor
ICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIAorICAgIC8vIElmIHRoZSBzYW1lIFVSTCBoYXMg
YmVlbiBsb2FkZWQgYXMgYSBkaWZmZXJlbnQgdHlwZSwgd2UgbmVlZCB0byByZWxvYWQuCisgICAg
aWYgKGV4aXN0aW5nUmVzb3VyY2UtPnR5cGUoKSAhPSB0eXBlKSB7CisgICAgICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9u
UG9saWN5IHJlbG9hZGluZyBkdWUgdG8gdHlwZSBtaXNtYXRjaC4iKTsKKyAgICAgICAgcmV0dXJu
IFJlbG9hZDsKKyAgICB9CisgICAgCisgICAgLy8gRG9uJ3QgcmVsb2FkIHJlc291cmNlcyB3aGls
ZSBwYXN0aW5nCisgICAgaWYgKG1fYWxsb3dTdGFsZVJlc291cmNlcykKKyAgICAgICAgcmV0dXJu
IFVzZTsKKyAgICAKKyAgICAvLyBBbHdhdXMgdXNlIHByZWxvYWRzLgorICAgIGlmIChleGlzdGlu
Z1Jlc291cmNlLT5pc1ByZWxvYWRlZCgpKQorICAgICAgICByZXR1cm4gVXNlOworICAgIAorICAg
IC8vIEF2b2lkIGxvYWRpbmcgdGhlIHNhbWUgcmVzb3VyY2UgbXVsdGlwbGUgdGltZXMgZm9yIGEg
c2luZ2xlIGRvY3VtZW50LCBldmVuIGlmIHRoZSBjYWNoZSBwb2xpY2llcyB3b3VsZCB0ZWxsIHVz
IHRvLgorICAgIGlmIChtX3JlbG9hZGVkQW5kUmV2YWxpZGF0ZWRVUkxzLmNvbnRhaW5zKGV4aXN0
aW5nUmVzb3VyY2UtPnVybCgpKSkKKyAgICAgICAgcmV0dXJuIFVzZTsKKyAgICAKKyAgICAvLyBD
YWNoZVBvbGljeVJlbG9hZCBhbHdheXMgcmVsb2FkcworICAgIGlmIChjYWNoZVBvbGljeSgpID09
IENhY2hlUG9saWN5UmVsb2FkKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5IHJlbG9hZGluZyBk
dWUgdG8gQ2FjaGVQb2xpY3lSZWxvYWQuIik7CisgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAg
fQorICAgIAorICAgIC8vIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlciB1c2VzIHRoZSBjYWNoZSBu
byBtYXR0ZXIgd2hhdC4KKyAgICBpZiAoY2FjaGVQb2xpY3koKSA9PSBDYWNoZVBvbGljeUhpc3Rv
cnlCdWZmZXIpCisgICAgICAgIHJldHVybiBVc2U7CisgICAgCisgICAgLy8gV2UnbGwgdHJ5IHRv
IHJlbG9hZCB0aGUgcmVzb3VyY2UgaWYgaXQgZmFpbGVkIGxhc3QgdGltZS4KKyAgICBpZiAoZXhp
c3RpbmdSZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKSB7CisgICAgICAgIExPRyhSZXNvdXJjZUxv
YWRpbmcsICJDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0aW9uUG9saWN5
ZSByZWxvYWRpbmcgZHVlIHRvIHJlc291cmNlIGJlaW5nIGluIHRoZSBlcnJvciBzdGF0ZSIpOwor
ICAgICAgICByZXR1cm4gUmVsb2FkOworICAgIH0KKyAgICAKKyAgICAvLyBGb3IgcmVzb3VyY2Vz
IHRoYXQgYXJlIG5vdCB5ZXQgbG9hZGVkIHdlIGlnbm9yZSB0aGUgY2FjaGUgcG9saWN5LgorICAg
IGlmIChleGlzdGluZ1Jlc291cmNlLT5pc0xvYWRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFVzZTsK
KworICAgIC8vIENoZWNrIGlmIHRoZSBjYWNoZSBoZWFkZXJzIHJlcXVpcmVzIHVzIHRvIHJldmFs
aWRhdGUgKGNhY2hlIGV4cGlyYXRpb24gZm9yIGV4YW1wbGUpLgorICAgIGlmIChleGlzdGluZ1Jl
c291cmNlLT5tdXN0UmV2YWxpZGF0ZUR1ZVRvQ2FjaGVIZWFkZXJzKGNhY2hlUG9saWN5KCkpKSB7
CisgICAgICAgIC8vIFNlZSBpZiB0aGUgcmVzb3VyY2UgaGFzIHVzYWJsZSBFVGFnIG9yIExhc3Qt
bW9kaWZpZWQgaGVhZGVycy4KKyAgICAgICAgaWYgKGV4aXN0aW5nUmVzb3VyY2UtPmNhblVzZUNh
Y2hlVmFsaWRhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gUmV2YWxpZGF0ZTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vLCBtdXN0IHJlbG9hZC4KKyAgICAgICAgTE9HKFJlc291cmNlTG9hZGlu
ZywgIkNhY2hlZFJlc291cmNlTG9hZGVyOjpkZXRlcm1pbmVSZXZhbGlkYXRpb25Qb2xpY3kgcmVs
b2FkaW5nIGR1ZSB0byBtaXNzaW5nIGNhY2hlIHZhbGlkYXRvcnMuIik7ICAgICAgICAgICAgCisg
ICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgfQorCisgICAgcmV0dXJuIFVzZTsKK30KIAogdm9p
ZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cHJpbnRBY2Nlc3NEZW5pZWRNZXNzYWdlKGNvbnN0IEtV
UkwmIHVybCkgY29uc3QKIHsKQEAgLTM3OCw5ICs1MjksOCBAQCB2b2lkIENhY2hlZFJlc291cmNl
TG9hZGVyOjpjYW5jZWxSZXF1ZXN0CiAgICAgICAgIHJlcXVlc3RzVG9DYW5jZWxbaV0tPmRpZEZh
aWwodHJ1ZSk7CiB9CiAKLXZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNoZWNrQ2FjaGVPYmpl
Y3RTdGF0dXMoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6bm90aWZ5TG9hZGVkRnJvbU1lbW9yeUNhY2hlKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSkKIHsKLSAgICAvLyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gZm9yIG9iamVjdHMgdGhhdCB3
ZSBkaWRuJ3QgbG9hZCBmcm9tIHRoZSBjYWNoZSBvciBpZiB3ZSBkb24ndCBoYXZlIGEgZnJhbWUu
CiAgICAgaWYgKCFyZXNvdXJjZSB8fCAhZnJhbWUoKSB8fCByZXNvdXJjZS0+c3RhdHVzKCkgIT0g
Q2FjaGVkUmVzb3VyY2U6OkNhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDc0MTA3KQor
KysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
UmVxdWVzdC5oIgogI2luY2x1ZGUgIkNhY2hlUG9saWN5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkUHJpb3JpdHkuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNDEsNiArNDAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3Mg
Q2FjaGVkRm9udDsKIGNsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OwogY2xhc3MgQ2FjaGVkU2NyaXB0OwogY2xhc3MgQ2FjaGVkWFNMU3R5bGVTaGVldDsKIGNs
YXNzIERvY3VtZW50OwpAQCAtMTA4LDE0ICsxMDgsMTggQEAgcHVibGljOgogICAgIAogcHJpdmF0
ZToKICAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxv
YWRQcmlvcml0eSBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCwgYm9v
bCBpc1ByZWxvYWQgPSBmYWxzZSk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGVSZXNv
dXJjZShDYWNoZWRSZXNvdXJjZSosIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KTsKKyAg
ICBDYWNoZWRSZXNvdXJjZSogbG9hZFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlv
cml0eSk7CiAgICAgdm9pZCByZXF1ZXN0UHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6VHlwZSwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CiAKLSAgICB2b2lkIGNoZWNr
Rm9yUmVsb2FkKGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIGNoZWNrQ2FjaGVPYmplY3RTdGF0dXMo
Q2FjaGVkUmVzb3VyY2UqKTsKKyAgICBlbnVtIFJldmFsaWRhdGlvblBvbGljeSB7IFVzZSwgUmV2
YWxpZGF0ZSwgUmVsb2FkIH07CisgICAgUmV2YWxpZGF0aW9uUG9saWN5IGRldGVybWluZVJldmFs
aWRhdGlvblBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSwgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0
aW5nUmVzb3VyY2UpOworICAgIAorICAgIHZvaWQgbm90aWZ5TG9hZGVkRnJvbU1lbW9yeUNhY2hl
KENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBjYW5SZXF1ZXN0KENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBLVVJMJik7CiAgICAgCiAgICAgTWVtb3J5Q2FjaGUqIG1fY2FjaGU7Ci0gICAg
SGFzaFNldDxTdHJpbmc+IG1fcmVsb2FkZWRVUkxzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3Jl
bG9hZGVkQW5kUmV2YWxpZGF0ZWRVUkxzOwogICAgIG11dGFibGUgRG9jdW1lbnRSZXNvdXJjZU1h
cCBtX2RvY3VtZW50UmVzb3VyY2VzOwogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCShyZXZpc2lvbiA3NDEwNykKKysrIFdl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
MTU2ICs2OSw2IEBAIE1lbW9yeUNhY2hlOjpNZW1vcnlDYWNoZSgpCiB7CiB9CiAKLXN0YXRpYyBD
YWNoZWRSZXNvdXJjZSogY3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi17Ci0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIG5ldyBDYWNoZWRJbWFnZSh1cmwuc3RyaW5nKCkpOwotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVT
aGVldCh1cmwuc3RyaW5nKCksIGNoYXJzZXQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNj
cmlwdDoKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0cmluZygpLCBjaGFy
c2V0KTsKLSAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJl
dHVybiBuZXcgQ2FjaGVkRm9udCh1cmwuc3RyaW5nKCkpOwotI2lmIEVOQUJMRShYU0xUKQotICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBuZXcg
Q2FjaGVkWFNMU3R5bGVTaGVldCh1cmwuc3RyaW5nKCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKExJ
TktfUFJFRkVUQ0gpCi0gICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAg
ICAgICByZXR1cm4gbmV3IENhY2hlZFJlc291cmNlKHVybC5zdHJpbmcoKSwgQ2FjaGVkUmVzb3Vy
Y2U6OkxpbmtQcmVmZXRjaCk7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hl
OjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29s
IHJlcXVlc3RJc1ByZWxvYWQsIGJvb2wgZm9ySGlzdG9yeSkKLXsKLSAgICBMT0coUmVzb3VyY2VM
b2FkaW5nLCAiTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICclcycs
IHByaW9yaXR5PSVkLCBwcmVsb2FkPSV1LCBmb3JIaXN0b3J5PSV1IiwgcmVxdWVzdFVSTC5zdHJp
bmcoKS5sYXRpbjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCBwcmlvcml0eSwg
cmVxdWVzdElzUHJlbG9hZCwgZm9ySGlzdG9yeSk7Ci0gICAgCi0gICAgLy8gRklYTUU6IERvIHdl
IHJlYWxseSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhbiBlbXB0eSBVUkw/Ci0gICAgLy8gV291bGQg
aXQgYmUgYmV0dGVyIHRvIGp1c3QgZ28gb24gd2l0aCB0aGUgY2FjaGUgY29kZSBhbmQgbGV0IGl0
IGZhaWwgbGF0ZXI/Ci0gICAgaWYgKHJlcXVlc3RVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICAvLyBFbnN1cmUgdGhpcyBpcyB0aGUgcHVyZSBwcmltYXJ5IHJlc291
cmNlIFVSTC4KLSAgICBLVVJMIHVybCA9IHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVk
KHJlcXVlc3RVUkwpOwotCi0gICAgLy8gTG9vayB1cCB0aGUgcmVzb3VyY2UgaW4gb3VyIG1hcC4K
LSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXNvdXJjZUZvclVSTCh1cmwpOwotCi0g
ICAgLy8gTm9uIGh0dHBzICJuby1zdG9yZSIgcmVzb3VyY2VzIGFyZSBsZWZ0IGluIHRoZSBjYWNo
ZSB0byBiZSB1c2VkIGZvciBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbiBvbmx5LgotICAgIC8vIElm
IHRoaXMgaXMgbm90IGEgcmVxdWVzdCBmb3JIaXN0b3J5IGFuZCB0aGUgcmVzb3VyY2Ugd2FzIHNl
cnZlZCB3aXRoICJuby1zdG9yZSIgd2Ugc2hvdWxkIGV2aWN0Ci0gICAgLy8gaXQgaGVyZSBhbmQg
bWFrZSBhIGZyZXNoIHJlcXVlc3QuCi0gICAgaWYgKCFmb3JIaXN0b3J5ICYmIHJlc291cmNlICYm
IHJlc291cmNlLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSB7Ci0g
ICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNl
IGNsZWFyZWQgYSBmb3IgaGlzdG9yeSBvbmx5IHJlc291cmNlIGR1ZSB0byBhIG5vbi1oaXN0b3J5
IHJlcXVlc3QgZm9yIHRoZSByZXNvdXJjZSIpOwotICAgICAgICBldmljdChyZXNvdXJjZSk7Ci0g
ICAgICAgIHJlc291cmNlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAocmVzb3VyY2UgJiYgcmVxdWVz
dElzUHJlbG9hZCAmJiAhcmVzb3VyY2UtPmlzUHJlbG9hZGVkKCkpIHsKLSAgICAgICAgTE9HKFJl
c291cmNlTG9hZGluZywgIk1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgYWxyZWFkeSBoYXMg
YSBwcmVsb2FkIHJlcXVlc3QgZm9yIHRoaXMgcmVxdWVzdCwgYW5kIGl0IGhhc24ndCBiZWVuIHBy
ZWxvYWRlZCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKCFjYWNo
ZWRSZXNvdXJjZUxvYWRlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxh
eSh1cmwpKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICIuLi5VUkwgd2FzIG5vdCBh
bGxvd2VkIGJ5IFNlY3VyaXR5T3JpZ2luIik7Ci0gICAgICAgIGlmICghcmVxdWVzdElzUHJlbG9h
ZCkKLSAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoY2FjaGVk
UmVzb3VyY2VMb2FkZXItPmRvY3VtZW50KCktPmZyYW1lKCksIHVybC5zdHJpbmcoKSk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChyZXNvdXJjZSAmJiByZXNvdXJjZS0+dHlw
ZSgpICE9IHR5cGUpIHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlOjpyZXF1
ZXN0UmVzb3VyY2UgZm91bmQgYSBjYWNoZSByZXNvdXJjZSB3aXRoIG1hdGNoaW5nIHVybCBidXQg
ZGlmZmVyZW50IHR5cGUsIGV2aWN0aW5nIGFuZCBsb2FkaW5nIHdpdGggbmV3IHR5cGUuIik7Ci0g
ICAgICAgIGV2aWN0KHJlc291cmNlKTsKLSAgICAgICAgcmVzb3VyY2UgPSAwOwotICAgIH0KLQot
ICAgIGlmICghcmVzb3VyY2UpIHsKLSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hl
ZFJlc291cmNlIGZvciAnJXMnIHdhc24ndCBmb3VuZCBpbiBjYWNoZS4gQ3JlYXRpbmcgaXQiLCB1
cmwuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgLy8gVGhlIHJlc291cmNlIGRv
ZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCi0gICAgICAgIHJlc291cmNlID0gY3JlYXRlUmVzb3Vy
Y2UodHlwZSwgdXJsLCBjaGFyc2V0KTsKLSAgICAgICAgQVNTRVJUKHJlc291cmNlKTsKLQotICAg
ICAgICAvLyBQcmV0ZW5kIHRoZSByZXNvdXJjZSBpcyBpbiB0aGUgY2FjaGUsIHRvIHByZXZlbnQg
aXQgZnJvbSBiZWluZyBkZWxldGVkIGR1cmluZyB0aGUgbG9hZCgpIGNhbGwuCi0gICAgICAgIC8v
IEZJWE1FOiBDYWNoZWRSZXNvdXJjZSBzaG91bGQganVzdCB1c2Ugbm9ybWFsIHJlZmNvdW50aW5n
IGluc3RlYWQuCi0gICAgICAgIHJlc291cmNlLT5zZXRJbkNhY2hlKHRydWUpOwotICAgICAgICAK
LSAgICAgICAgLy8gRGVmYXVsdCBwcmlvcml0eSBiYXNlZCBvbiByZXNvdXJjZSB0eXBlIGlzIHVz
ZWQgaWYgdGhlIHJlcXVlc3QgZGlkIG5vdCBzcGVjaWZ5IG9uZS4KLSAgICAgICAgaWYgKHByaW9y
aXR5ICE9IFJlc291cmNlTG9hZFByaW9yaXR5VW5yZXNvbHZlZCkKLSAgICAgICAgICAgIHJlc291
cmNlLT5zZXRMb2FkUHJpb3JpdHkocHJpb3JpdHkpOwotCi0gICAgICAgIHJlc291cmNlLT5sb2Fk
KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChyZXNvdXJjZS0+
ZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGltbWVk
aWF0ZSBsb2FkcywgYnV0IHdlIGRvIHN1cHBvcnQgaW1tZWRpYXRlIGZhaWx1cmUuCi0gICAgICAg
ICAgICAvLyBJbiB0aGF0IGNhc2Ugd2Ugc2hvdWxkIHRvIGRlbGV0ZSB0aGUgcmVzb3VyY2Ugbm93
IGFuZCByZXR1cm4gMCBiZWNhdXNlIG90aGVyd2lzZQotICAgICAgICAgICAgLy8gaXQgd291bGQg
bGVhayBpZiBubyByZWYvZGVyZWYgd2FzIGV2ZXIgZG9uZSBvbiBpdC4KLSAgICAgICAgICAgIHJl
c291cmNlLT5zZXRJbkNhY2hlKGZhbHNlKTsKLSAgICAgICAgICAgIGRlbGV0ZSByZXNvdXJjZTsK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFkaXNhYmxl
ZCgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXMuc2V0KHVybC5zdHJpbmcoKSwgcmVzb3VyY2Up
OyAgLy8gVGhlIHNpemUgd2lsbCBiZSBhZGRlZCBpbiBsYXRlciBvbmNlIHRoZSByZXNvdXJjZSBp
cyBsb2FkZWQgYW5kIGNhbGxzIGJhY2sgdG8gdXMgd2l0aCB0aGUgbmV3IHNpemUuCi0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgLy8gS2ljayB0aGUgcmVzb3VyY2Ugb3V0IG9mIHRoZSBjYWNo
ZSwgYmVjYXVzZSB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCi0gICAgICAgICAgICByZXNvdXJjZS0+
c2V0SW5DYWNoZShmYWxzZSk7Ci0gICAgICAgICAgICByZXNvdXJjZS0+c2V0Q2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gRklYTUU6IFVwZ3JhZGluZyB0aGUgcHJpb3JpdHkgZG9lc24ndCByZWFsbHkg
ZG8gbXVjaCBzaW5jZSB0aGUgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIGRvZXMgbm90IGN1cnJlbnRs
eQotICAgICAgICAvLyBhbGxvdyBjaGFuZ2luZyBwcmlvcml0aWVzLiBUaGlzIG1pZ2h0IGJlY29t
ZSBpbXBvcnRhbnQgaWYgd2UgbWFrZSBzY2hlZHVsaW5nIHByaW9yaXRpZXMKLSAgICAgICAgLy8g
bW9yZSBkeW5hbWljLgotICAgICAgICBpZiAocHJpb3JpdHkgIT0gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlVbnJlc29sdmVkICYmIHJlc291cmNlLT5sb2FkUHJpb3JpdHkoKSA8IHByaW9yaXR5KQotICAg
ICAgICAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0eShwcmlvcml0eSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFkaXNhYmxlZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZSByZXNv
dXJjZSB0byB0aGUgZnJvbnQgb2YgaXRzIExSVSBsaXN0IGFuZCBpbmNyZWFzZSBpdHMgYWNjZXNz
IGNvdW50LgotICAgICAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKLSAgICB9Ci0KLSAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBmb3Ig
JyVzJyByZXR1cm5pbmcgcmVzb3VyY2UgJXBcbiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCksIHJlc291cmNlKTsKLQotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLSAgICAKLUNhY2hlZENT
U1N0eWxlU2hlZXQqIE1lbW9yeUNhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBLVVJMJiByZXF1ZXN0
VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi17Ci0gICAgLy8gRW5zdXJlIHRoaXMgaXMgdGhl
IHB1cmUgcHJpbWFyeSByZXNvdXJjZSBVUkwuCi0gICAgS1VSTCB1cmwgPSByZW1vdmVGcmFnbWVu
dElkZW50aWZpZXJJZk5lZWRlZChyZXF1ZXN0VVJMKTsKLQotICAgIENhY2hlZENTU1N0eWxlU2hl
ZXQqIHVzZXJTaGVldDsKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gcmVzb3Vy
Y2VGb3JVUkwodXJsKSkgewotICAgICAgICBpZiAoZXhpc3RpbmctPnR5cGUoKSAhPSBDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB1
c2VyU2hlZXQgPSBzdGF0aWNfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4oZXhpc3RpbmcpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0
KHVybCwgY2hhcnNldCk7Ci0KLSAgICAgICAgLy8gUHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4g
dGhlIGNhY2hlLCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxv
YWQoKSBjYWxsLgotICAgICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3Qg
dXNlIG5vcm1hbCByZWZjb3VudGluZyBpbnN0ZWFkLgotICAgICAgICB1c2VyU2hlZXQtPnNldElu
Q2FjaGUodHJ1ZSk7Ci0gICAgICAgIC8vIERvbid0IGxvYWQgaW5jcmVtZW50YWxseSwgc2tpcCBs
b2FkIGNoZWNrcywgZG9uJ3Qgc2VuZCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrcy4KLSAgICAgICAg
dXNlclNoZWV0LT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBmYWxzZSwgU2tpcFNlY3VyaXR5
Q2hlY2ssIGZhbHNlKTsKLSAgICAgICAgaWYgKCFkaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9y
ZXNvdXJjZXMuc2V0KHVybCwgdXNlclNoZWV0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dXNlclNoZWV0LT5zZXRJbkNhY2hlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc2FibGVk
KCkpIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIG1vdmUgdGhlIHJlc291cmNlIHRvIHRoZSBmcm9u
dCBvZiBpdHMgTFJVIGxpc3QgYW5kIGluY3JlYXNlIGl0cyBhY2Nlc3MgY291bnQuCi0gICAgICAg
IHJlc291cmNlQWNjZXNzZWQodXNlclNoZWV0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXNlclNo
ZWV0OwotfQotCiBLVVJMIE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5l
ZWRlZChjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCkKIHsKICAgICBpZiAoIW9yaWdpbmFsVVJMLmhh
c0ZyYWdtZW50SWRlbnRpZmllcigpKQpAQCAtMjMyLDI5ICs4MiwyMCBAQCBLVVJMIE1lbW9yeUNh
Y2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpCiAgICAgcmV0dXJuIHVybDsKIH0KIAotdm9pZCBN
ZW1vcnlDYWNoZTo6cmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKQorYm9vbCBNZW1vcnlD
YWNoZTo6YWRkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKLSAgICBBU1NFUlQocmVzb3Vy
Y2UpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+aW5DYWNoZSgpKTsKLSAgICBBU1NFUlQocmVzb3Vy
Y2UgPT0gbV9yZXNvdXJjZXMuZ2V0KHJlc291cmNlLT51cmwoKSkpOwotICAgIEFTU0VSVCghZGlz
YWJsZWQoKSk7Ci0gICAgaWYgKHJlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFyZXNvdXJjZS0+Y2FuVXNlQ2FjaGVWYWxpZGF0b3IoKSkg
ewotICAgICAgICBldmljdChyZXNvdXJjZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y29uc3QgU3RyaW5nJiB1cmwgPSByZXNvdXJjZS0+dXJsKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2Uq
IG5ld1Jlc291cmNlID0gY3JlYXRlUmVzb3VyY2UocmVzb3VyY2UtPnR5cGUoKSwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIHVybCksIHJlc291cmNlLT5lbmNvZGluZygpKTsKLSAgICBMT0coUmVzb3Vy
Y2VMb2FkaW5nLCAiUmVzb3VyY2UgJXAgY3JlYXRlZCB0byByZXZhbGlkYXRlICVwIiwgbmV3UmVz
b3VyY2UsIHJlc291cmNlKTsKLSAgICBuZXdSZXNvdXJjZS0+c2V0UmVzb3VyY2VUb1JldmFsaWRh
dGUocmVzb3VyY2UpOwotICAgIGV2aWN0KHJlc291cmNlKTsKLSAgICBtX3Jlc291cmNlcy5zZXQo
dXJsLCBuZXdSZXNvdXJjZSk7Ci0gICAgbmV3UmVzb3VyY2UtPnNldEluQ2FjaGUodHJ1ZSk7Ci0g
ICAgcmVzb3VyY2VBY2Nlc3NlZChuZXdSZXNvdXJjZSk7Ci0gICAgbmV3UmVzb3VyY2UtPmxvYWQo
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotfQorICAgIGlmIChkaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9yZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwg
cmVzb3VyY2UpOworICAgIHJlc291cmNlLT5zZXRJbkNhY2hlKHRydWUpOwogICAgIAorICAgIHJl
c291cmNlQWNjZXNzZWQocmVzb3VyY2UpOworICAgIAorICAgIExPRyhSZXNvdXJjZUxvYWRpbmcs
ICJNZW1vcnlDYWNoZTo6YWRkIEFkZGVkICclcycsIHJlc291cmNlICVwXG4iLCByZXNvdXJjZS0+
dXJsKCkubGF0aW4xKCkuZGF0YSgpLCByZXNvdXJjZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IHZvaWQgTWVtb3J5Q2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSog
cmV2YWxpZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IHJldmFsaWRhdGluZ1Jlc291cmNlLT5y
ZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5o
CShyZXZpc2lvbiA3NDEwNykKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNiArMTAyLDE0IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
ICAgICBUeXBlU3RhdGlzdGljIGZvbnRzOwogICAgIH07Ci0KLSAgICAvLyBSZXF1ZXN0IHJlc291
cmNlcyBmcm9tIHRoZSBjYWNoZS4gIEEgbG9hZCB3aWxsIGJlIGluaXRpYXRlZCBhbmQgYSBjYWNo
ZSBvYmplY3QgY3JlYXRlZCBpZiB0aGUgb2JqZWN0IGlzIG5vdAotICAgIC8vIGZvdW5kIGluIHRo
ZSBjYWNoZS4KLSAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291
cmNlTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSwgYm9vbCBpc1ByZWxvYWQgPSBm
YWxzZSwgYm9vbCBmb3JIaXN0b3J5ID0gZmFsc2UpOwotCi0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVl
dCogcmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIAorICAgIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZUZvclVSTChjb25zdCBLVVJMJik7CisgICAgCisgICAgYm9vbCBhZGQoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlKTsKKyAgICB2b2lkIHJlbW92ZShDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UpIHsgZXZpY3QocmVzb3VyY2UpOyB9CisKICAgICBzdGF0aWMgS1VSTCByZW1vdmVG
cmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCk7CiAgICAg
Ci0gICAgdm9pZCByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqLCBDYWNoZWRSZXNv
dXJjZUxvYWRlciopOwogICAgIHZvaWQgcmV2YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZFJlc291
cmNlKiByZXZhbGlkYXRpbmdSZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgcmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlc291cmNlKiByZXZhbGlkYXRpbmdSZXNv
dXJjZSk7CiAgICAgCkBAIC0xNDAsMTQgKzEzOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZG91YmxlIGludGVydmFsKSB7IG1fZGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IGludGVydmFsOyB9CiAgICAgZG91YmxlIGRlYWRE
ZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2RlYWREZWNvZGVk
RGF0YURlbGV0aW9uSW50ZXJ2YWw7IH0KIAotICAgIC8vIFJlbW92ZSBhbiBleGlzdGluZyBjYWNo
ZSBlbnRyeSBmcm9tIGJvdGggdGhlIHJlc291cmNlIG1hcCBhbmQgZnJvbSB0aGUgTFJVIGxpc3Qu
Ci0gICAgdm9pZCByZW1vdmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSB7IGV2aWN0KHJlc291
cmNlKTsgfQotCiAgICAgdm9pZCBhZGRDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRSZXNvdXJj
ZUxvYWRlciopOwogICAgIHZvaWQgcmVtb3ZlQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqKTsKIAotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZUZvclVSTChjb25z
dCBLVVJMJik7Ci0KICAgICAvLyBDYWxscyB0byBwdXQgdGhlIGNhY2hlZCByZXNvdXJjZSBpbnRv
IGFuZCBvdXQgb2YgTFJVIGxpc3RzLgogICAgIHZvaWQgaW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJl
c291cmNlKik7CiAgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlzdChDYWNoZWRSZXNvdXJjZSopOwpA
QCAtMTY2LDEzICsxNTksMTQgQEAgcHVibGljOgogCiAgICAgLy8gRnVuY3Rpb24gdG8gY29sbGVj
dCBjYWNoZSBzdGF0aXN0aWNzIGZvciB0aGUgY2FjaGVzIHdpbmRvdyBpbiB0aGUgU2FmYXJpIERl
YnVnIG1lbnUuCiAgICAgU3RhdGlzdGljcyBnZXRTdGF0aXN0aWNzKCk7CisgICAgCisgICAgdm9p
ZCByZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291cmNlKik7CiAKIHByaXZhdGU6CiAgICAgTWVt
b3J5Q2FjaGUoKTsKICAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVkIHRvIG1h
a2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMg
bm90IGRlbGV0ZSBzaW5nbGV0b25zLgogICAgICAgIAogICAgIExSVUxpc3QqIGxydUxpc3RGb3Io
Q2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2b2lkIHJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3Vy
Y2UqKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wU3RhdHMoKTsKICAgICB2b2lkIGR1
bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdDsK
</data>
<flag name="review"
          id="67760"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>