<?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>212296</bug_id>
          
          <creation_ts>2020-05-22 22:30:07 -0700</creation_ts>
          <short_desc>Eliminate Color constructors that take strings, moving color parsing entirely into the CSS parser</short_desc>
          <delta_ts>2020-05-26 13:10:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1655578</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-22 22:30:07 -0700</bug_when>
    <thetext>Eliminate Color constructors that take strings, moving color parsing entirely into the CSS parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655579</commentid>
    <comment_count>1</comment_count>
      <attachid>400110</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-22 22:30:37 -0700</bug_when>
    <thetext>Created attachment 400110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655930</commentid>
    <comment_count>2</comment_count>
      <attachid>400221</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-25 14:10:14 -0700</bug_when>
    <thetext>Created attachment 400221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655960</commentid>
    <comment_count>3</comment_count>
      <attachid>400221</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-25 20:21:20 -0700</bug_when>
    <thetext>Comment on attachment 400221
Patch

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

&gt; Source/WebCore/css/parser/CSSParser.h:89
&gt; +    WEBCORE_EXPORT static Color parseColor(const String&amp;, bool strict = false);
&gt; +    static Color parseColorWorkerSafe(const String&amp;);

Should these be converted to StringViews as well at some point?

&gt; Source/WebCore/css/parser/CSSParserFastPaths.cpp:469
&gt;          int red;

Might make sense to make this (and the ones below) uint8_t, and have an overload of makeSimpleColor that doesn&apos;t clamp?

&gt; Source/WebCore/platform/graphics/SimpleColor.cpp:-138
&gt; -// originally moved here from the CSS parser

I think you can remove HexNumber.h include from this file.

&gt; Source/WebCore/platform/graphics/SimpleColor.h:-80
&gt; -    static Optional&lt;SimpleColor&gt; parseHexColor(const String&amp;);
&gt; -    static Optional&lt;SimpleColor&gt; parseHexColor(const StringView&amp;);
&gt; -    static Optional&lt;SimpleColor&gt; parseHexColor(const LChar*, unsigned);
&gt; -    static Optional&lt;SimpleColor&gt; parseHexColor(const UChar*, unsigned);

I think you can remove the uchar.h and LChar.h #includes here now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656100</commentid>
    <comment_count>4</comment_count>
      <attachid>400221</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-26 10:58:49 -0700</bug_when>
    <thetext>Comment on attachment 400221
Patch

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

&gt;&gt; Source/WebCore/css/parser/CSSParser.h:89
&gt;&gt; +    static Color parseColorWorkerSafe(const String&amp;);
&gt; 
&gt; Should these be converted to StringViews as well at some point?

I think maybe. I believe I tried and didn’t for some trivial reason that could later be fixed.

&gt;&gt; Source/WebCore/css/parser/CSSParserFastPaths.cpp:469
&gt;&gt;          int red;
&gt; 
&gt; Might make sense to make this (and the ones below) uint8_t, and have an overload of makeSimpleColor that doesn&apos;t clamp?

Yes, I would like to do that. Also, there has to be a better way to refactor these repeated calls to parseColorIntOrPercentage so it’s clearer, but not urgent for now.

&gt;&gt; Source/WebCore/platform/graphics/SimpleColor.cpp:-138
&gt;&gt; -// originally moved here from the CSS parser
&gt; 
&gt; I think you can remove HexNumber.h include from this file.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/SimpleColor.h:-80
&gt;&gt; -    static Optional&lt;SimpleColor&gt; parseHexColor(const UChar*, unsigned);
&gt; 
&gt; I think you can remove the uchar.h and LChar.h #includes here now.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656120</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-26 12:16:19 -0700</bug_when>
    <thetext>Committed r262155: &lt;https://trac.webkit.org/changeset/262155&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656122</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-26 12:17:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/63635065&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656139</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-26 12:56:52 -0700</bug_when>
    <thetext>Very nice! We should get cssText() out of Color too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656142</commentid>
    <comment_count>8</comment_count>
      <attachid>400221</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-26 13:10:39 -0700</bug_when>
    <thetext>Comment on attachment 400221
Patch

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

&gt;&gt;&gt; Source/WebCore/css/parser/CSSParser.h:89
&gt;&gt;&gt; +    static Color parseColorWorkerSafe(const String&amp;);
&gt;&gt; 
&gt;&gt; Should these be converted to StringViews as well at some point?
&gt; 
&gt; I think maybe. I believe I tried and didn’t for some trivial reason that could later be fixed.

I did parseColorWorkerSafe. But probably can’t do parseColor until we also change parseSingleValue, which uses CSSTokenizer, so that’s a bigger project.

&gt;&gt;&gt; Source/WebCore/platform/graphics/SimpleColor.cpp:-138
&gt;&gt;&gt; -// originally moved here from the CSS parser
&gt;&gt; 
&gt;&gt; I think you can remove HexNumber.h include from this file.
&gt; 
&gt; Will do.

I think I can’t. The hex() function is used in SimpleColor::serializationForRenderTreeAsText.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400110</attachid>
            <date>2020-05-22 22:30:37 -0700</date>
            <delta_ts>2020-05-25 14:10:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212296-20200522223036.patch</filename>
            <type>text/plain</type>
            <size>39925</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGYwNGE4Mjk3Y2MwMmY4
NmU5MzI1N2MzNjRkYzY3OTUyOTY5MWQwNy4uMjQwYWE2YWVjNzI2MTE1MDdiZTQ4ZTE5ZjM5ZTky
ZmQzN2IxMWZmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA1LTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBFbGltaW5hdGUgQ29sb3IgY29u
c3RydWN0b3JzIHRoYXQgdGFrZSBzdHJpbmdzLCBtb3ZpbmcgY29sb3IgcGFyc2luZyBlbnRpcmVs
eSBpbnRvIHRoZSBDU1MgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTIyOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogMjAyMC0wNS0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldm9raW5nIGFuIG9iamVjdCBVUkwgaW1tZWRpYXRlbHkgYWZ0ZXIgdHJpZ2dlcmluZyBu
YXZpZ2F0aW9uIGNhdXNlcyBuYXZpZ2F0aW9uIHRvIGZhaWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUGFyc2VyLmNwcAppbmRleCA1ZDEwYTIyZmFmZTJlYTlhMTVlNmRlZDhlNTViMDg4YWIz
MTliZDI4Li4zYzcwMmQ1MzBjOWU5YzE3MmNiYjQ4OTZkNzkyMGRiOGNjNDVlZWI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC05NCw2NiArOTQsNDkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25kaXRpb24oY29uc3QgU3RyaW5nJiBjb25kaXRp
b24pCiAKIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0cmluZywg
Ym9vbCBzdHJpY3QpCiB7Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBDb2xvcigpOwotICAgIAotICAgIC8vIFRyeSBuYW1lZCBjb2xvcnMgZmlyc3QuCi0gICAgQ29s
b3IgbmFtZWRDb2xvciB7IHN0cmluZyB9OwotICAgIGlmIChuYW1lZENvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuIG5hbWVkQ29sb3I7Ci0gICAgCi0gICAgLy8gVHJ5IHRoZSBmYXN0IHBh
dGggdG8gcGFyc2UgaGV4IGFuZCByZ2IuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENT
U1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcihzdHJpbmcsIHN0cmljdCA/IEhUTUxTdGFuZGFy
ZE1vZGUgOiBIVE1MUXVpcmtzTW9kZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0KLSAg
ICAvLyBJZiB0aGF0IGZhaWxzLCB0cnkgdGhlIGZ1bGwgcGFyc2VyLgotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHZhbHVlID0gcGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUNvbG9yLCBzdHJp
bmcsIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgY29uc3Qg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKKyAgICBpZiAoYXV0byBjb2xvciA9IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VTaW1wbGVD
b2xvcihzdHJpbmcsIHN0cmljdCkpCisgICAgICAgIHJldHVybiAqY29sb3I7CisgICAgLy8gRklY
TUU6IFVuY2xlYXIgd2h5IHdlIHdhbnQgdG8gaWdub3JlIHRoZSBib29sZWFuIGFyZ3VtZW50ICJz
dHJpY3QiIGFuZCBhbHdheXMgcGFzcyBzdHJpY3RDU1NQYXJzZXJDb250ZXh0IGhlcmUuCisgICAg
YXV0byB2YWx1ZSA9IHBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlDb2xvciwgc3RyaW5nLCBz
dHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOworICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgIGlmICghcHJpbWl0aXZl
VmFsdWUuaXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuY29sb3IoKTsKIH0KIAotQ29sb3Ig
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NT
VmFsdWVQb29sJiB2YWx1ZVBvb2wsIGJvb2wgc3RyaWN0KQorQ29sb3IgQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoc3RyaW5n
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICAvLyBUcnkgbmFtZWQg
Y29sb3JzIGZpcnN0LgotICAgIENvbG9yIG5hbWVkQ29sb3IgeyBzdHJpbmcgfTsKLSAgICBpZiAo
bmFtZWRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBuYW1lZENvbG9yOworICAgIGlm
IChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNvbG9yKHN0cmlu
ZykpCisgICAgICAgIHJldHVybiAqY29sb3I7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgcGFyc2UgbWFueSB0eXBlcyBvZiB2YWxpZCBDU1MgY29sb3Igc3ludGF4LCBzdWNo
IGFzIGNvbG9yIHdpdGggbm9uLXNSR0IgY29sb3Igc3BhY2VzLgorICAgIHJldHVybiB7IH07Cit9
CiAKLSAgICAvLyBUcnkgdGhlIGZhc3QgcGF0aCB0byBwYXJzZSBoZXggYW5kIHJnYi4KLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZUNvbG9yKHN0
cmluZywgc3RyaWN0ID8gSFRNTFN0YW5kYXJkTW9kZSA6IEhUTUxRdWlya3NNb2RlLCB2YWx1ZVBv
b2wpOworQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQoreworICAgIGF1dG8ga2V5d29yZCA9IGNzc1ZhbHVlS2V5d29yZElEKHN0cmluZyk7CisgICAg
aWYgKCFTdHlsZUNvbG9yOjppc1N5c3RlbUNvbG9yKGtleXdvcmQpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuc3lzdGVtQ29sb3Ioa2V5
d29yZCwgeyB9KTsKK30KIAotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIGNvbnN0IGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Ci0gICAgaWYgKCFw
cmltaXRpdmVWYWx1ZS5pc1JHQkNvbG9yKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAg
IHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOworT3B0aW9uYWw8U2ltcGxlQ29sb3I+IENT
U1BhcnNlcjo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIHJldHVy
biBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlTmFtZWRDb2xvcihzdHJpbmcpOwogfQogCi1Db2xv
ciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQqIGNvbnRleHQpCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gQ1NTUGFy
c2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQogewotICAgIENTU1ZhbHVlSUQg
aWQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwotICAgIGlmICghU3R5bGVDb2xvcjo6aXNT
eXN0ZW1Db2xvcihpZCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgT3B0aW9uU2V0
PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnM7Ci0gICAgaWYgKGNvbnRleHQgJiYgY29udGV4
dC0+dXNlU3lzdGVtQXBwZWFyYW5jZSkKLSAgICAgICAgb3B0aW9ucy5hZGQoU3R5bGVDb2xvcjo6
T3B0aW9uczo6VXNlU3lzdGVtQXBwZWFyYW5jZSk7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1lOjpz
aW5nbGV0b24oKS5zeXN0ZW1Db2xvcihpZCwgb3B0aW9ucyk7CisgICAgcmV0dXJuIENTU1BhcnNl
ckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQogCiBSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBp
ZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6bWF5YmVQYXJz
ZVZhbHVlKHByb3BlcnR5SUQsIHN0cmluZywgY29udGV4dC5tb2RlKSkKKyAgICBpZiAoYXV0byB2
YWx1ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6bWF5YmVQYXJzZVZhbHVlKHByb3BlcnR5SUQsIHN0
cmluZywgY29udGV4dCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICBDU1NUb2tlbml6ZXIg
dG9rZW5pemVyKHN0cmluZyk7CiAgICAgcmV0dXJuIENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNp
bmdsZVZhbHVlKHByb3BlcnR5SUQsIHRva2VuaXplci50b2tlblJhbmdlKCksIGNvbnRleHQpOwpA
QCAtMTYyLDEwICsxNDUsOCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5n
bGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cgogQ1NTUGFyc2VyOjpQ
YXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYg
ZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6bWF5YmVQYXJzZVZhbHVlKHByb3BlcnR5SUQsIHN0cmlu
ZywgY29udGV4dC5tb2RlKTsKLSAgICBpZiAodmFsdWUpCisgICAgaWYgKGF1dG8gdmFsdWUgPSBD
U1NQYXJzZXJGYXN0UGF0aHM6Om1heWJlUGFyc2VWYWx1ZShwcm9wZXJ0eUlELCBzdHJpbmcsIGNv
bnRleHQpKQogICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24uYWRkUGFyc2VkUHJvcGVydHkoQ1NT
UHJvcGVydHkocHJvcGVydHlJRCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCkpID8gQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6UGFyc2VSZXN1bHQ6OlVuY2hh
bmdlZDsKLQogICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7CiAgICAgcmV0dXJuIHBhcnNl
ci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAppbmRleCBiZDNkY2ZhMDM0Zjgy
MzQ4ZWJkZGFkMWEzYTBlZWE2NDMyYTJmM2EzLi43YWI4YmIzNzllMWI5YTRkNzM1MWEyZmNjNThj
OWRjOTAzY2VlZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTM3
LDYgKzM3LDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW1tdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgTXV0YWJsZVN0eWxlUHJvcGVydGllczsKK2NsYXNzIFNp
bXBsZUNvbG9yOwogY2xhc3MgU3R5bGVSdWxlQmFzZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1l
OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwpAQCAtODQsOSArODUsMTEgQEAgcHVibGljOgog
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhD
U1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAot
ICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0g
ZmFsc2UpOwotICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJp
bmcmLCBDU1NWYWx1ZVBvb2wmLCBib29sIHN0cmljdCA9IGZhbHNlKTsKLSAgICBzdGF0aWMgQ29s
b3IgcGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3QgU3Ry
aW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CisgICAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JX
b3JrZXJTYWZlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNv
bG9yKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VO
YW1lZENvbG9yKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4g
cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsKIAogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBw
YXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBT
dHJpbmcmLCBib29sIGltcG9ydGFudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1BhcnNlckZhc3RQYXRocy5jcHAKaW5kZXggMTc1NmY5MmZiYTJkNjRiZWMwMmE1ODE2ZWM5
ZmE4OThhYTkxMjA3Ny4uYzI2NTFiMzY0OTc4MjJmZjJiZTQxZDk4YzExNmFhNzg3ZDIxM2MyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNp
bmNsdWRlICJIYXNoVG9vbHMuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhh
bmQuaCIKQEAgLTE0NCw3ICsxNDUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VTaW1wbGVB
bmdsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNpbXBsZUxlbmd0
aFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNl
U2ltcGxlTGVuZ3RoVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBTdHJpbmdWaWV3IHN0
cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewogICAgIEFTU0VSVCghc3RyaW5n
LmlzRW1wdHkoKSk7CiAgICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzID0gZmFsc2U7CkBA
IC00MDgsODcgKzQwOSwxNzIgQEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgICAmJiBp
c0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0sICdiJyk7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIENvbG9yIGZhc3RQYXJzZUNvbG9y
SW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBib29sIHF1aXJrc01vZGUpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGZpbmlzaFBh
cnNpbmdIZXhDb2xvcih1aW50MzJfdCB2YWx1ZSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIENT
U1VuaXRUeXBlIGV4cGVjdCA9IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKyAgICBzd2l0Y2gg
KGxlbmd0aCkgeworICAgIGNhc2UgMzoKKyAgICAgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFi
YmNjCisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7IDB4RkYwMDAwMDAKKyAgICAgICAgICAg
IHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgKKyAgICAgICAg
ICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjApIDw8IDQKKyAgICAgICAg
ICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhGKSB9OworICAgIGNhc2UgNDoK
KyAgICAgICAgLy8gI2FiY2QgY29udmVydHMgdG8gZGRhYWJiY2Mgc2luY2UgYWxwaGEgYnl0ZXMg
YXJlIHRoZSBoaWdoIGJ5dGVzLgorICAgICAgICByZXR1cm4gU2ltcGxlQ29sb3IgeyAodmFsdWUg
JiAweEYpIDw8IDI4IHwgKHZhbHVlICYgMHhGKSA8PCAyNAorICAgICAgICAgICAgfCAodmFsdWUg
JiAweEYwMDApIDw8IDggfCAodmFsdWUgJiAweEYwMDApIDw8IDQKKyAgICAgICAgICAgIHwgKHZh
bHVlICYgMHhGMDApIDw8IDQgfCAodmFsdWUgJiAweEYwMCkKKyAgICAgICAgICAgIHwgKHZhbHVl
ICYgMHhGMCkgfCAodmFsdWUgJiAweEYwKSA+PiA0IH07CisgICAgY2FzZSA2OgorICAgICAgICBy
ZXR1cm4gU2ltcGxlQ29sb3IgeyAweEZGMDAwMDAwIHwgdmFsdWUgfTsKKyAgICBjYXNlIDg6Cisg
ICAgICAgIC8vIFdlIHBhcnNlZCB0aGUgdmFsdWVzIGludG8gUkdCQSBvcmRlciwgYnV0IHdlIHN0
b3JlIHRoZW0gaW4gQVJHQiBvcmRlci4KKyAgICAgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgdmFs
dWUgPDwgMjQgfCB2YWx1ZSA+PiA4IH07CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxT
aW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVu
Z3RoICE9IDQgJiYgbGVuZ3RoICE9IDYgJiYgbGVuZ3RoICE9IDgpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgdWludDMyX3QgdmFsdWUgPSAwOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIGRpZ2l0ID0gY2hhcmFjdGVy
c1tpXTsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoZGlnaXQpKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVl
IHw9IHRvQVNDSUlIZXhWYWx1ZShkaWdpdCk7CisgICAgfQorICAgIHJldHVybiBmaW5pc2hQYXJz
aW5nSGV4Q29sb3IodmFsdWUsIGxlbmd0aCk7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOdW1lcmljQ29sb3Io
Y29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBib29sIHN0
cmljdCkKK3sKICAgICBpZiAobGVuZ3RoID49IDQgJiYgY2hhcmFjdGVyc1swXSA9PSAnIycpIHsK
LSAgICAgICAgUkdCQTMyIHJnYjsKLSAgICAgICAgaWYgKENvbG9yOjpwYXJzZUhleENvbG9yKGNo
YXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxLCByZ2IpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9y
KHJnYik7CisgICAgICAgIGlmIChhdXRvIGhleENvbG9yID0gcGFyc2VIZXhDb2xvckludGVybmFs
KGNoYXJhY3RlcnMgKyAxLCBsZW5ndGggLSAxKSkKKyAgICAgICAgICAgIHJldHVybiAqaGV4Q29s
b3I7CiAgICAgfQogCi0gICAgaWYgKHF1aXJrc01vZGUgJiYgKGxlbmd0aCA9PSAzIHx8IGxlbmd0
aCA9PSA2KSkgewotICAgICAgICBSR0JBMzIgcmdiOwotICAgICAgICBpZiAoQ29sb3I6OnBhcnNl
SGV4Q29sb3IoY2hhcmFjdGVycywgbGVuZ3RoLCByZ2IpKQotICAgICAgICAgICAgcmV0dXJuIENv
bG9yKHJnYik7CisgICAgaWYgKCFzdHJpY3QgJiYgKGxlbmd0aCA9PSAzIHx8IGxlbmd0aCA9PSA2
KSkgeworICAgICAgICBpZiAoYXV0byBoZXhDb2xvciA9IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChj
aGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuICpoZXhDb2xvcjsKICAgICB9
CiAKKyAgICBhdXRvIGV4cGVjdCA9IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKwogICAgIC8v
IFRyeSByZ2JhKCkgc3ludGF4LgogICAgIGlmIChtaWdodEJlUkdCQShjaGFyYWN0ZXJzLCBsZW5n
dGgpKSB7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBjaGFyYWN0ZXJz
ICsgNTsKLSAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVycyArIGxl
bmd0aDsKKyAgICAgICAgYXV0byBjdXJyZW50ID0gY2hhcmFjdGVycyArIDU7CisgICAgICAgIGF1
dG8gZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICAgICAgaW50IHJlZDsKLSAgICAgICAg
aW50IGdyZWVuOwotICAgICAgICBpbnQgYmx1ZTsKLSAgICAgICAgaW50IGFscGhhOwotCiAgICAg
ICAgIGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhw
ZWN0LCByZWQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAgIGlmICghcGFyc2VD
b2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCi0g
ICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgIGludCBibHVlOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNl
bnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlu
dCBhbHBoYTsKICAgICAgICAgaWYgKCFwYXJzZUFscGhhVmFsdWUoY3VycmVudCwgZW5kLCAnKScs
IGFscGhhKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQotICAgICAgICAgICAg
cmV0dXJuIENvbG9yKCk7Ci0gICAgICAgIHJldHVybiBDb2xvcihtYWtlUkdCQShyZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFs
cmVhZHkgY2xhbXBlZCwgZG9uJ3QgbmVlZCB0byByZS1jbGFtcCBhcyBtYWtlUkdCQSBkb2VzLgog
ICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50YXguCiAgICAgaWYgKG1pZ2h0QmVSR0IoY2hh
cmFjdGVycywgbGVuZ3RoKSkgewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50
ID0gY2hhcmFjdGVycyArIDQ7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNo
YXJhY3RlcnMgKyBsZW5ndGg7CisgICAgICAgIGF1dG8gY3VycmVudCA9IGNoYXJhY3RlcnMgKyA0
OworICAgICAgICBhdXRvIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgIGludCBy
ZWQ7Ci0gICAgICAgIGludCBncmVlbjsKLSAgICAgICAgaW50IGJsdWU7CiAgICAgICAgIGlmICgh
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCByZWQp
KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAgIGlmICghcGFyc2VDb2xvckludE9y
UGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0LCBncmVlbikpCi0gICAgICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIGludCBibHVlOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3Vy
cmVudCwgZW5kLCAnKScsIGV4cGVjdCwgYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50
ICE9IGVuZCkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXR1cm4gQ29s
b3IobWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICByZXR1cm4gbWFrZVJHQihyZWQsIGdyZWVuLCBibHVlKTsgLy8gRklY
TUU6IEFscmVhZHkgY2xhbXBlZCwgZG9uJ3QgbmVlZCB0byByZS1jbGFtcCBhcyBtYWtlUkdCIGRv
ZXMuCiAgICAgfQogCi0gICAgcmV0dXJuIENvbG9yKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZU51bWVyaWNDb2xvcihT
dHJpbmdWaWV3IHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBib29sIHN0cmljdCA9ICFpc1F1aXJrc01vZGVCZWhhdmlvcihjb250ZXh0Lm1vZGUpOworICAg
IGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNDb2xvcihz
dHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpLCBzdHJpY3QpOworICAgIHJldHVy
biBwYXJzZU51bWVyaWNDb2xvcihzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSwgc3RyaWN0KTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBh
cnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
Q1NTVmFsdWVQb29sJiB2YWx1ZVBvb2wpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNv
bG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgQ1NTVmFsdWVJRCB2YWx1ZUlE
ID0gY3NzVmFsdWVLZXl3b3JkSUQoc3RyaW5nKTsKKyAgICBhdXRvIHZhbHVlSUQgPSBjc3NWYWx1
ZUtleXdvcmRJRChzdHJpbmcpOwogICAgIGlmIChTdHlsZUNvbG9yOjppc0NvbG9yS2V5d29yZCh2
YWx1ZUlEKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKHZhbHVlSUQsIHBh
cnNlck1vZGUpKQorICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKHZhbHVlSUQsIGNv
bnRleHQubW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IHZhbHVlUG9vbC5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CisgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlE
KTsKKyAgICB9CisgICAgaWYgKGF1dG8gY29sb3IgPSBwYXJzZU51bWVyaWNDb2xvcihzdHJpbmcs
IGNvbnRleHQpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVDb2xvclZhbHVlKCpjb2xvcik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBP
cHRpb25hbDxTaW1wbGVDb2xvcj4gZmluaXNoUGFyc2luZ05hbWVkQ29sb3IoY2hhciogYnVmZmVy
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworICAgIGF1
dG8gbmFtZWRDb2xvciA9IGZpbmRDb2xvcihidWZmZXIsIGxlbmd0aCk7CisgICAgaWYgKCFuYW1l
ZENvbG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBTaW1wbGVD
b2xvciB7IG5hbWVkQ29sb3ItPkFSR0JWYWx1ZSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlTmFtZWRDb2xv
ckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIEVhc2lseSBiaWcgZW5vdWdoIGZvciB0aGUg
bG9uZ2VzdCBjb2xvciBuYW1lLgorICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tp
XTsKKyAgICAgICAgaWYgKCFjaGFyYWN0ZXIgfHwgIWlzQVNDSUkoY2hhcmFjdGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGJ1ZmZlcltpXSA9IHRvQVNDSUlM
b3dlcihzdGF0aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXIpKTsKICAgICB9CisgICAgcmV0dXJuIGZp
bmlzaFBhcnNpbmdOYW1lZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZVNp
bXBsZUNvbG9ySW50ZXJuYWwoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoLCBib29sIHN0cmljdCkKK3sKKyAgICBpZiAoYXV0byBjb2xvciA9IHBhcnNlTnVt
ZXJpY0NvbG9yKGNoYXJhY3RlcnMsIGxlbmd0aCwgc3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIGNv
bG9yOworICAgIHJldHVybiBwYXJzZU5hbWVkQ29sb3JJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5n
dGgpOworfQogCi0gICAgYm9vbCBxdWlya3NNb2RlID0gaXNRdWlya3NNb2RlQmVoYXZpb3IocGFy
c2VyTW9kZSk7CitPcHRpb25hbDxTaW1wbGVDb2xvcj4gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJz
ZVNpbXBsZUNvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBib29sIHN0cmljdCkKK3sKKyAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VTaW1wbGVDb2xvckludGVybmFs
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHN0cmljdCk7CisgICAgcmV0
dXJuIHBhcnNlU2ltcGxlQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmlu
Zy5sZW5ndGgoKSwgc3RyaWN0KTsKK30KIAotICAgIC8vIEZhc3QgcGF0aCBmb3IgaGV4IGNvbG9y
cyBhbmQgcmdiKCkvcmdiYSgpIGNvbG9ycwotICAgIENvbG9yIGNvbG9yOworT3B0aW9uYWw8U2lt
cGxlQ29sb3I+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3IHN0
cmluZykKK3sKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBjb2xvciA9IGZhc3RQ
YXJzZUNvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwg
cXVpcmtzTW9kZSk7Ci0gICAgZWxzZQotICAgICAgICBjb2xvciA9IGZhc3RQYXJzZUNvbG9ySW50
ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIHF1aXJrc01vZGUp
OwotICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gdmFsdWVQb29sLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOworICAgICAgICByZXR1
cm4gcGFyc2VIZXhDb2xvckludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVu
Z3RoKCkpOworICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3Rl
cnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gQ1NT
UGFyc2VyRmFzdFBhdGhzOjpwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCit7Cisg
ICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlTmFtZWRDb2xvcklu
dGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVy
biBwYXJzZU5hbWVkQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5s
ZW5ndGgoKSk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyRmFzdFBhdGhzOjppc1ZhbGlkS2V5d29yZFBy
b3BlcnR5QW5kVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZUlEIHZhbHVl
SUQsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC05NTQsMTYgKzEwNDAsMTYg
QEAgYm9vbCBDU1NQYXJzZXJGYXN0UGF0aHM6OmlzS2V5d29yZFByb3BlcnR5SUQoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlkKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3
b3JkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQorc3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3b3Jk
KFN0cmluZ1ZpZXcgc3RyaW5nKQogewogICAgIC8vIFRoZXNlIGtleXdvcmRzIGNhbiBiZSB1c2Vk
IGZvciBhbGwgcHJvcGVydGllcy4KICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nLCAiaW5pdGlhbCIpCi0gICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nLCAiaW5oZXJpdCIpCi0gICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nLCAidW5zZXQiKQotICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKHN0cmluZywgInJldmVydCIpOworICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsICJpbmhlcml0IikKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoc3RyaW5nLCAidW5zZXQiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShzdHJpbmcsICJyZXZlcnQiKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VLZXl3b3JkVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlS2V5d29yZFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
ZCwgU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7
CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKIApAQCAtMTI1NSw3ICsxMzQxLDcgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlU2ltcGxlVHJhbnNmb3JtTGlzdChjb25z
dCBDaGFyVHlwZSogY2hhcnMsIHVuc2kKICAgICByZXR1cm4gdHJhbnNmb3JtTGlzdDsKIH0KIAot
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW1wbGVUcmFuc2Zvcm0oQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3N0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlU2ltcGxlVHJhbnNmb3JtKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3RyaW5n
VmlldyBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKICAgICBpZiAo
cHJvcGVydHlJRCAhPSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkKQEAgLTEyNjUsMjMgKzEzNTEsMjIg
QEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW1wbGVUcmFuc2Zvcm0oQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHIKICAgICByZXR1cm4gcGFyc2VTaW1wbGVUcmFuc2Zv
cm1MaXN0KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VDYXJldENvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJz
ZUNhcmV0Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNv
bnRleHQpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBDU1NWYWx1ZUlE
IHZhbHVlSUQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwotICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwotICAgIHJldHVybiBDU1NQYXJzZXJGYXN0
UGF0aHM6OnBhcnNlQ29sb3Ioc3RyaW5nLCBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpKTsKKyAgICBpZiAoY3NzVmFsdWVLZXl3b3JkSUQoc3RyaW5nKSA9PSBDU1NWYWx1ZUF1
dG8pCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgIHJldHVybiBwYXJzZUNvbG9yKHN0cmluZywg
Y29udGV4dCk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjptYXli
ZVBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyRmFzdFBhdGhzOjptYXliZVBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKHByb3BlcnR5SUQs
IHN0cmluZywgY29udGV4dC5tb2RlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZiAo
cHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNhcmV0Q29sb3IpCi0gICAgICAgIHJldHVybiBwYXJz
ZUNhcmV0Q29sb3Ioc3RyaW5nLCBjb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gcGFyc2VD
YXJldENvbG9yKHN0cmluZywgY29udGV4dCk7CiAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0NvbG9y
UHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAgICAgIHJldHVybiBwYXJzZUNvbG9yKHN0cmluZywg
Y29udGV4dC5tb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJu
IHBhcnNlQ29sb3Ioc3RyaW5nLCBjb250ZXh0KTsKICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJz
ZUtleXdvcmRWYWx1ZShwcm9wZXJ0eUlELCBzdHJpbmcsIGNvbnRleHQpKQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIHJldHVybiBwYXJzZVNpbXBsZVRyYW5zZm9ybShwcm9wZXJ0eUlELCBz
dHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJG
YXN0UGF0aHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhz
LmgKaW5kZXggNDE2ODBhYWQ1YTQ0MmFmZGMwOWJjMThhNWE2YmU4OGY1ZTk1MTA4Mi4uZWQ2YTU1
MTg1MzczNjc3ODliYTA5YWY3MzcxMGM2ZjkwYjYzYTZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5oCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjksMjkgKzI5LDI5IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIENTU1ZhbHVlUG9vbDsK
LWNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKKwogc3RydWN0IENTU1BhcnNlckNvbnRleHQ7CiAK
IGNsYXNzIENTU1BhcnNlckZhc3RQYXRocyB7CiBwdWJsaWM6Ci0gICAgLy8gUGFyc2VzIHNpbXBs
ZSB2YWx1ZXMgbGlrZSAnMTBweCcgb3IgJ2dyZWVuJywgYnV0IG1ha2VzIG5vIGd1YXJhbnRlZXMK
LSAgICAvLyBhYm91dCBoYW5kbGluZyBhbnkgcHJvcGVydHkgY29tcGxldGVseS4KLSAgICBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBtYXliZVBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworICAgIC8vIFBhcnNlcyBzaW1wbGUg
dmFsdWVzIGxpa2UgJzEwcHgnIG9yICdncmVlbicsIGJ1dCBtYWtlcyBubyBndWFyYW50ZWVzIGFi
b3V0IGhhbmRsaW5nIGFueSBwcm9wZXJ0eSBjb21wbGV0ZWx5LgorICAgIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IG1heWJlUGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHJpbmdWaWV3LCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0Jik7CiAKLSAgICAvLyBQcm9wZXJ0aWVzIGhhbmRsZWQgaGVyZSBz
aG91bGRuJ3QgYmUgZXhwbGljaXRseSBoYW5kbGVkIGluIENTU1Byb3BlcnR5UGFyc2VyCisgICAg
Ly8gUHJvcGVydGllcyBoYW5kbGVkIGhlcmUgc2hvdWxkbid0IGJlIGV4cGxpY2l0bHkgaGFuZGxl
ZCBpbiBDU1NQcm9wZXJ0eVBhcnNlci4KICAgICBzdGF0aWMgYm9vbCBpc0tleXdvcmRQcm9wZXJ0
eUlEKENTU1Byb3BlcnR5SUQpOwogICAgIHN0YXRpYyBib29sIGlzVmFsaWRLZXl3b3JkUHJvcGVy
dHlBbmRWYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZUlELCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0Jik7CiAKLSAgICBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNvbG9yKGNvbnN0IFN0
cmluZyYsIENTU1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYpOworICAgIC8vIFBhcnNlcyBudW1l
cmljIGFuZCBuYW1lZCBjb2xvcnMuCisgICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBw
YXJzZVNpbXBsZUNvbG9yKFN0cmluZ1ZpZXcsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOworICAgIHN0
YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsgLy8g
SGV4IGNvbG9ycyBvZiBsZW5ndGggMywgNCwgNiwgb3IgOCwgd2l0aG91dCBsZWFkaW5nICIjIi4K
KyAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdW
aWV3KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCAzODdl
NTk4MjliYzhkMjY0NzFmYTZkMWE4ZGZmMDNiN2QwMzdmMDBiLi40MzZlOGM4ZDM4YjlhMDgyM2E5
M2QwYTAzZWM4ZmM3ODBkNjJmZTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC02OTMsMzggKzY5Myw0MSBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JD
aGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFj
ZSk7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUhleENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVD
b2xvcj4gcGFyc2VIZXhDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgYm9vbCBhY2Nl
cHRRdWlya3lDb2xvcnMpCiB7Ci0gICAgUkdCQTMyIHJlc3VsdDsKLSAgICBjb25zdCBDU1NQYXJz
ZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBI
YXNoVG9rZW4pIHsKLSAgICAgICAgaWYgKCFDb2xvcjo6cGFyc2VIZXhDb2xvcih0b2tlbi52YWx1
ZSgpLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgfSBlbHNlIGlm
IChhY2NlcHRRdWlya3lDb2xvcnMpIHsKLSAgICAgICAgU3RyaW5nIGNvbG9yOwotICAgICAgICBp
ZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNp
b25Ub2tlbikgewotICAgICAgICAgICAgaWYgKHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSAhPSBJ
bnRlZ2VyVmFsdWVUeXBlCi0gICAgICAgICAgICAgICAgfHwgdG9rZW4ubnVtZXJpY1ZhbHVlKCkg
PCAwLiB8fCB0b2tlbi5udW1lcmljVmFsdWUoKSA+PSAxMDAwMDAwLikKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pIC8vIGUuZy4gMTEyMjMzCi0gICAgICAgICAgICAgICAgY29sb3IgPSBTdHJpbmc6Om51
bWJlcihzdGF0aWNfY2FzdDxpbnQ+KHRva2VuLm51bWVyaWNWYWx1ZSgpKSk7Ci0gICAgICAgICAg
ICBlbHNlIC8vIGUuZy4gMDAwMUZGCi0gICAgICAgICAgICAgICAgY29sb3IgPSBtYWtlU3RyaW5n
KHN0YXRpY19jYXN0PGludD4odG9rZW4ubnVtZXJpY1ZhbHVlKCkpLCB0b2tlbi52YWx1ZSgpLnRv
U3RyaW5nKCkpOwotICAgICAgICAgICAgd2hpbGUgKGNvbG9yLmxlbmd0aCgpIDwgNikKLSAgICAg
ICAgICAgICAgICBjb2xvciA9ICIwIiArIGNvbG9yOwotICAgICAgICB9IGVsc2UgaWYgKHRva2Vu
LnR5cGUoKSA9PSBJZGVudFRva2VuKSB7IC8vIGUuZy4gRkYwMDAwCi0gICAgICAgICAgICBjb2xv
ciA9IHRva2VuLnZhbHVlKCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgc3RyaW5nOworICAgIFN0
cmluZ1ZpZXcgdmlldzsKKyAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAo
dG9rZW4udHlwZSgpID09IEhhc2hUb2tlbikKKyAgICAgICAgdmlldyA9IHRva2VuLnZhbHVlKCk7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICghYWNjZXB0UXVpcmt5Q29sb3JzKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVu
dFRva2VuKQorICAgICAgICAgICAgc3RyaW5nID0gdG9rZW4udmFsdWUoKS50b1N0cmluZygpOyAv
LyBlLmcuIEZGMDAwMAorICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9r
ZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CisgICAgICAgICAgICBpZiAo
dG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpICE9IEludGVnZXJWYWx1ZVR5cGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGF1dG8gbnVtZXJpY1ZhbHVl
ID0gdG9rZW4ubnVtZXJpY1ZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIShudW1lcmljVmFsdWUg
Pj0gMCAmJiBudW1lcmljVmFsdWUgPCAxMDAwMDAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHRva2VuLm51bWVyaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pCisgICAgICAgICAgICAgICAgc3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoaW50ZWdlclZhbHVlKTsgLy8gZS5nLiAxMTIyMzMKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdHJpbmcgPSBtYWtlU3RyaW5nKGludGVnZXJWYWx1ZSwgdG9rZW4udmFsdWUo
KSk7IC8vIGUuZy4gMDAwMUZGCisgICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgNikK
KyAgICAgICAgICAgICAgICBzdHJpbmcgPSBtYWtlU3RyaW5nKCYiMDAwMDAwIltzdHJpbmcubGVu
Z3RoKCldLCBzdHJpbmcpOwogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNv
bG9yLmxlbmd0aCgpOwotICAgICAgICBpZiAobGVuZ3RoICE9IDMgJiYgbGVuZ3RoICE9IDYpCi0g
ICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgaWYgKCFDb2xvcjo6cGFyc2VIZXhD
b2xvcihjb2xvciwgcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0
aCgpICE9IDMgJiYgc3RyaW5nLmxlbmd0aCgpICE9IDYpCisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICB2aWV3ID0gc3RyaW5nOwogICAgIH0KKyAgICBhdXRvIHJlc3Vs
dCA9IENTU1BhcnNlcjo6cGFyc2VIZXhDb2xvcih2aWV3KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOwotICAgIHJldHVybiBDb2xvcihyZXN1bHQpOworICAgIHJldHVybiAqcmVzdWx0
OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCkBAIC03NTQsMTcgKzc1Nywy
MCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcgogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKIHsKLSAgICBDU1NWYWx1ZUlE
IGlkID0gcmFuZ2UucGVlaygpLmlkKCk7Ci0gICAgaWYgKFN0eWxlQ29sb3I6OmlzQ29sb3JLZXl3
b3JkKGlkKSkgewotICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGlkLCBjc3NQYXJz
ZXJNb2RlKSkKKyAgICBhdXRvIGtleXdvcmQgPSByYW5nZS5wZWVrKCkuaWQoKTsKKyAgICBpZiAo
U3R5bGVDb2xvcjo6aXNDb2xvcktleXdvcmQoa2V5d29yZCkpIHsKKyAgICAgICAgaWYgKCFpc1Zh
bHVlQWxsb3dlZEluTW9kZShrZXl3b3JkLCBjc3NQYXJzZXJNb2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50KHJhbmdlKTsKICAgICB9
Ci0gICAgQ29sb3IgY29sb3IgPSBwYXJzZUhleENvbG9yKHJhbmdlLCBhY2NlcHRRdWlya3lDb2xv
cnMpOwotICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgIENvbG9yIGNvbG9yOworICAgIGlm
IChhdXRvIHBhcnNlZENvbG9yID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29s
b3JzKSkKKyAgICAgICAgY29sb3IgPSAqcGFyc2VkQ29sb3I7CisgICAgZWxzZSB7CiAgICAgICAg
IGNvbG9yID0gcGFyc2VDb2xvckZ1bmN0aW9uKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLSAgICBp
ZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQog
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNvbG9yKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCBkNjUyZTA5ODZhNDNlYmM4
ODA3YWY4ZTg0NWVjMDdlYWI4MTYxZjUxLi5hYTFhYzY2Y2Y3NDQ3YTZiMGIxNDM3MDIwMDM3ODFj
MTM2Y2UyYjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtOTczLDI4ICs5
NzMsNDggQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTExlbmd0aFRvU3R5bGUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnQKICAgICBhZGRQcm9wZXJ0eVRvUHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoc3R5bGUsIHByb3BlcnR5SUQsIHZhbHVlKTsKIH0KIAotc3Rh
dGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29uc3QgU3Ry
aW5nJiBjb2xvclN0cmluZykKKy8vIENvbG9yIHBhcnNpbmcgdGhhdCBtYXRjaGVzIEhUTUwncyAi
cnVsZXMgZm9yIHBhcnNpbmcgYSBsZWdhY3kgY29sb3IgdmFsdWUiCisvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnLyNydWxlcy1mb3ItcGFyc2luZy1hLWxlZ2FjeS1jb2xvdXItdmFsdWUK
K3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VMZWdhY3lDb2xvclZhbHVlKFN0cmlu
Z1ZpZXcgc3RyaW5nKQogeworICAgIC8vIEFuIGVtcHR5IHN0cmluZyBkb2Vzbid0IGFwcGx5IGEg
Y29sb3IuCisgICAgLy8gQSBzdHJpbmcgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UgZG9lcyBh
cHBseSBhIGNvbG9yLCB3aGljaCBpcyB3aHkgdGhpcyBjaGVjayBtdXN0IGJlIGRvbmUgYmVmb3Jl
IHN0cmlwcGluZy4KKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHN0cmluZyA9IHN0cmluZy5zdHJpcExlYWRpbmdBbmRUcmFpbGlu
Z01hdGNoZWRDaGFyYWN0ZXJzKGlzSFRNTFNwYWNlPFVDaGFyPik7CisKKyAgICAvLyAidHJhbnNw
YXJlbnQiIGRvZXNuJ3QgYXBwbHkgYSBjb2xvciBlaXRoZXIuCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKHN0cmluZywgInRyYW5zcGFyZW50IikpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYXV0byBuYW1lZENvbG9yID0gQ1NTUGFyc2VyOjpw
YXJzZU5hbWVkQ29sb3Ioc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG5hbWVkQ29sb3I7CisKKyAg
ICBpZiAoc3RyaW5nLmxlbmd0aCgpID09IDQgJiYgc3RyaW5nWzBdID09ICcjJyAmJiBpc0FTQ0lJ
SGV4RGlnaXQoc3RyaW5nWzFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nWzJdKSAmJiBpc0FT
Q0lJSGV4RGlnaXQoc3RyaW5nWzNdKSkKKyAgICAgICAgcmV0dXJuIG1ha2VSR0IodG9BU0NJSUhl
eFZhbHVlKHN0cmluZ1sxXSkgKiAweDExLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzJdKSAqIDB4
MTEsIHRvQVNDSUlIZXhWYWx1ZShzdHJpbmdbMl0pICogMHgxMSk7CisKICAgICAvLyBQZXIgc3Bl
Yywgb25seSBsb29rIGF0IHRoZSBmaXJzdCAxMjggZGlnaXRzIG9mIHRoZSBzdHJpbmcuCi0gICAg
Y29uc3Qgc2l6ZV90IG1heENvbG9yTGVuZ3RoID0gMTI4OworICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhDb2xvckxlbmd0aCA9IDEyODsKKwogICAgIC8vIFdlJ2xsIHBhZCB0aGUgYnVmZmVyIHdp
dGggdHdvIGV4dHJhIDBzIGxhdGVyLCBzbyByZXNlcnZlIHR3byBtb3JlIHRoYW4gdGhlIG1heC4K
LSAgICBWZWN0b3I8Y2hhciwgbWF4Q29sb3JMZW5ndGgrMj4gZGlnaXRCdWZmZXI7CisgICAgVmVj
dG9yPGNoYXIsIG1heENvbG9yTGVuZ3RoICsgMj4gZGlnaXRCdWZmZXI7CiAKICAgICBzaXplX3Qg
aSA9IDA7CiAgICAgLy8gU2tpcCBhIGxlYWRpbmcgIy4KLSAgICBpZiAoY29sb3JTdHJpbmdbMF0g
PT0gJyMnKQorICAgIGlmIChzdHJpbmdbMF0gPT0gJyMnKQogICAgICAgICBpID0gMTsKIAogICAg
IC8vIEdyYWIgdGhlIGZpcnN0IDEyOCBjaGFyYWN0ZXJzLCByZXBsYWNpbmcgbm9uLWhleCBjaGFy
YWN0ZXJzIHdpdGggMC4KICAgICAvLyBOb24tQk1QIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIHdp
dGggIjAwIiBkdWUgdG8gdGhlbSBhcHBlYXJpbmcgYXMgdHdvICJjaGFyYWN0ZXJzIiBpbiB0aGUg
U3RyaW5nLgotICAgIGZvciAoOyBpIDwgY29sb3JTdHJpbmcubGVuZ3RoKCkgJiYgZGlnaXRCdWZm
ZXIuc2l6ZSgpIDwgbWF4Q29sb3JMZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoIWlzQVNDSUlI
ZXhEaWdpdChjb2xvclN0cmluZ1tpXSkpCisgICAgZm9yICg7IGkgPCBzdHJpbmcubGVuZ3RoKCkg
JiYgZGlnaXRCdWZmZXIuc2l6ZSgpIDwgbWF4Q29sb3JMZW5ndGg7IGkrKykgeworICAgICAgICBp
ZiAoIWlzQVNDSUlIZXhEaWdpdChzdHJpbmdbaV0pKQogICAgICAgICAgICAgZGlnaXRCdWZmZXIu
YXBwZW5kKCcwJyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpZ2l0QnVmZmVyLmFwcGVu
ZChjb2xvclN0cmluZ1tpXSk7CisgICAgICAgICAgICBkaWdpdEJ1ZmZlci5hcHBlbmQoc3RyaW5n
W2ldKTsKICAgICB9CiAKLSAgICBpZiAoIWRpZ2l0QnVmZmVyLnNpemUoKSkKKyAgICBpZiAoZGln
aXRCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gQ29sb3I6OmJsYWNrOwogCiAgICAg
Ly8gUGFkIHRoZSBidWZmZXIgb3V0IHRvIGF0IGxlYXN0IHRoZSBuZXh0IG11bHRpcGxlIG9mIHRo
cmVlIGluIHNpemUuCkBAIC0xMDA2LDExICsxMDI2LDExIEBAIHN0YXRpYyBSR0JBMzIgcGFyc2VD
b2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzKGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcp
CiAKICAgICAvLyBTcGxpdCB0aGUgZGlnaXRzIGludG8gdGhyZWUgY29tcG9uZW50cywgdGhlbiBz
ZWFyY2ggdGhlIGxhc3QgOCBkaWdpdHMgb2YgZWFjaCBjb21wb25lbnQuCiAgICAgQVNTRVJUKGRp
Z2l0QnVmZmVyLnNpemUoKSA+PSA2KTsKLSAgICBzaXplX3QgY29tcG9uZW50TGVuZ3RoID0gZGln
aXRCdWZmZXIuc2l6ZSgpIC8gMzsKLSAgICBzaXplX3QgY29tcG9uZW50U2VhcmNoV2luZG93TGVu
Z3RoID0gc3RkOjptaW48c2l6ZV90Pihjb21wb25lbnRMZW5ndGgsIDgpOwotICAgIHNpemVfdCBy
ZWRJbmRleCA9IGNvbXBvbmVudExlbmd0aCAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aDsK
LSAgICBzaXplX3QgZ3JlZW5JbmRleCA9IGNvbXBvbmVudExlbmd0aCAqIDIgLSBjb21wb25lbnRT
ZWFyY2hXaW5kb3dMZW5ndGg7Ci0gICAgc2l6ZV90IGJsdWVJbmRleCA9IGNvbXBvbmVudExlbmd0
aCAqIDMgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dMZW5ndGg7CisgICAgdW5zaWduZWQgY29tcG9u
ZW50TGVuZ3RoID0gZGlnaXRCdWZmZXIuc2l6ZSgpIC8gMzsKKyAgICB1bnNpZ25lZCBjb21wb25l
bnRTZWFyY2hXaW5kb3dMZW5ndGggPSBzdGQ6Om1pbihjb21wb25lbnRMZW5ndGgsIDhVKTsKKyAg
ICB1bnNpZ25lZCByZWRJbmRleCA9IGNvbXBvbmVudExlbmd0aCAtIGNvbXBvbmVudFNlYXJjaFdp
bmRvd0xlbmd0aDsKKyAgICB1bnNpZ25lZCBncmVlbkluZGV4ID0gY29tcG9uZW50TGVuZ3RoICog
MiAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aDsKKyAgICB1bnNpZ25lZCBibHVlSW5kZXgg
PSBjb21wb25lbnRMZW5ndGggKiAzIC0gY29tcG9uZW50U2VhcmNoV2luZG93TGVuZ3RoOwogICAg
IC8vIFNraXAgZGlnaXRzIHVudGlsIG9uZSBvZiB0aGVtIGlzIG5vbi16ZXJvLCBvciB3ZSd2ZSBv
bmx5IGdvdCB0d28gZGlnaXRzIGxlZnQgaW4gdGhlIGNvbXBvbmVudC4KICAgICB3aGlsZSAoZGln
aXRCdWZmZXJbcmVkSW5kZXhdID09ICcwJyAmJiBkaWdpdEJ1ZmZlcltncmVlbkluZGV4XSA9PSAn
MCcgJiYgZGlnaXRCdWZmZXJbYmx1ZUluZGV4XSA9PSAnMCcgJiYgKGNvbXBvbmVudExlbmd0aCAt
IHJlZEluZGV4KSA+IDIpIHsKICAgICAgICAgcmVkSW5kZXgrKzsKQEAgLTEwMjksMjggKzEwNDks
MTAgQEAgc3RhdGljIFJHQkEzMiBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMo
Y29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKICAgICByZXR1cm4gbWFrZVJHQihyZWRWYWx1ZSwg
Z3JlZW5WYWx1ZSwgYmx1ZVZhbHVlKTsKIH0KIAotLy8gQ29sb3IgcGFyc2luZyB0aGF0IG1hdGNo
ZXMgSFRNTCdzICJydWxlcyBmb3IgcGFyc2luZyBhIGxlZ2FjeSBjb2xvciB2YWx1ZSIKIHZvaWQg
SFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5bGUoTXV0YWJsZVN0eWxlUHJvcGVydGllcyYg
c3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVW
YWx1ZSkKIHsKLSAgICAvLyBBbiBlbXB0eSBzdHJpbmcgZG9lc24ndCBhcHBseSBhIGNvbG9yLiAo
T25lIGNvbnRhaW5pbmcgb25seSB3aGl0ZXNwYWNlIGRvZXMsIHdoaWNoIGlzIHdoeSB0aGlzIGNo
ZWNrIG9jY3VycyBiZWZvcmUgc3RyaXBwaW5nLikKLSAgICBpZiAoYXR0cmlidXRlVmFsdWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgY29sb3JTdHJpbmcgPSBhdHRy
aWJ1dGVWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIC8vICJ0cmFuc3BhcmVudCIgZG9l
c24ndCBhcHBseSBhIGNvbG9yIGVpdGhlci4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoY29sb3JTdHJpbmcsICJ0cmFuc3BhcmVudCIpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDb2xvciBjb2xvcjsKLSAgICAvLyBXZSBjYW4ndCBhbHdheXMgdXNlIHRoZSBkZWZhdWx0
IENvbG9yIGNvbnN0cnVjdG9yIGJlY2F1c2UgaXQgYWNjZXB0cwotICAgIC8vIDQvOC1kaWdpdCBo
ZXgsIHdoaWNoIGNvbmZsaWN0IHdpdGggc29tZSBsZWdhY3kgSFRNTCBjb250ZW50IHVzaW5nIGF0
dHJpYnV0ZXMuCi0gICAgaWYgKChjb2xvclN0cmluZy5sZW5ndGgoKSAhPSA1ICYmIGNvbG9yU3Ry
aW5nLmxlbmd0aCgpICE9IDkpIHx8IGNvbG9yU3RyaW5nWzBdICE9ICcjJykKLSAgICAgICAgY29s
b3IgPSBDb2xvcihjb2xvclN0cmluZyk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIGNvbG9yID0gQ29sb3IocGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzKGNv
bG9yU3RyaW5nKSk7Ci0KLSAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpKTsKKyAgICBpZiAoYXV0
byBjb2xvciA9IHBhcnNlTGVnYWN5Q29sb3JWYWx1ZShhdHRyaWJ1dGVWYWx1ZSkpCisgICAgICAg
IHN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlQ29sb3JWYWx1ZSgqY29sb3IpKTsKIH0KIAogYm9vbCBIVE1MRWxlbWVudDo6d2lsbFJl
c3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5jcHAKaW5kZXggN2YyNzVkMGFlYTdiZTBlOTQyMzRiMmZjMDVkZjZmODYzM2EyNmMy
Ny4uMmJiOTNkYTJlMDQ3NmIyODEzNDMzNmJlMzMxNDUwYWUxMWM4MDI5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcApAQCAtNTQsMTcgKzU0LDE1IEBAIGJv
b2wgaXNDdXJyZW50Q29sb3JTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZykKIENvbG9y
IHBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgQ2FudmFzQmFzZSYgY2FudmFz
QmFzZSkKIHsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKLSAgICBpZiAoY2FudmFzQmFz
ZS5pc09mZnNjcmVlbkNhbnZhcygpKSB7Ci0gICAgICAgIGF1dG8mIGNhbnZhcyA9IGRvd25jYXN0
PE9mZnNjcmVlbkNhbnZhcz4oY2FudmFzQmFzZSk7Ci0gICAgICAgIHJldHVybiBDU1NQYXJzZXI6
OnBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbG9yU3RyaW5nLCBjYW52YXMuY3NzVmFsdWVQb29sKCkp
OwotICAgIH0KKyAgICBpZiAoY2FudmFzQmFzZS5pc09mZnNjcmVlbkNhbnZhcygpKQorICAgICAg
ICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yV29ya2VyU2FmZShjb2xvclN0cmluZyk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShjYW52YXNCYXNlKTsKICNlbmRpZgogICAgIENvbG9yIGNv
bG9yID0gQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yU3RyaW5nKTsKICAgICBpZiAoY29sb3Iu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIENTU1BhcnNlcjo6
cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZywgbnVsbHB0cik7CisgICAgcmV0dXJuIENTU1Bh
cnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihjb2xvclN0cmluZyk7CiB9CiAKIENvbG9yIGN1cnJlbnRD
b2xvcihDYW52YXNCYXNlJiBjYW52YXNCYXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCmluZGV4IDNkMDdjYzZmNWQ4NDJhMzE0ODhkMGNmODk5MjZkMzY5YzNj
N2ZlMTIuLjQzZDdlMjdkYzgzODZiNjA3MDNhYzY4YzIzNWE1NGE2ZDZiZjY1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTEwNSw3NSArMTA0LDYgQEAgUkdCQTMyIG1ha2VSR0JBRnJvbUNNWUtBKGZsb2F0IGMs
IGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiAgICAgcmV0dXJuIG1ha2VSR0JB
KHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKIH0K
IAotLy8gb3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKLXRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4Q29s
b3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJH
QkEzMiYgcmdiKQotewotICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5n
dGggIT0gNiAmJiBsZW5ndGggIT0gOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2ln
bmVkIHZhbHVlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtpXSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHZhbHVlIDw8PSA0OwotICAgICAgICB2YWx1ZSB8PSB0b0FT
Q0lJSGV4VmFsdWUobmFtZVtpXSk7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNikgewotICAg
ICAgICByZ2IgPSB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA4KSB7Ci0gICAgICAgIC8vIFdlIHBhcnNlZCB0aGUg
dmFsdWVzIGludG8gUkdCQSBvcmRlciwgYnV0IHRoZSBSR0JBMzIgdHlwZQotICAgICAgICAvLyBl
eHBlY3RzIHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0
IGJpdHMuCi0gICAgICAgIHJnYiA9IHsgdmFsdWUgPDwgMjQgfCB2YWx1ZSA+PiA4IH07Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDQpIHsKLSAgICAgICAg
Ly8gI2FiY2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gUkdCQTMyLgotICAgICAgICByZ2IgPSB7
ICh2YWx1ZSAmIDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0Ci0gICAgICAgICAgICB8
ICh2YWx1ZSAmIDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAotICAgICAgICAg
ICAgfCAodmFsdWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQotICAgICAgICAgICAg
fCAodmFsdWUgJiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQgfTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYwotICAgIHJnYiA9
IHsgMHhGRjAwMDAwMAotICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAxMiB8ICh2YWx1ZSAm
IDB4RjAwKSA8PCA4Ci0gICAgICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4
RjApIDw8IDQKLSAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH07
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3Qg
TENoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2IpCi17Ci0gICAgcmV0dXJu
IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJnYik7Ci19Ci0KLWJvb2wgQ29s
b3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdC
QTMyJiByZ2IpCi17Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5n
dGgsIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiBu
YW1lLCBSR0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgp
OwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5hbWUu
aXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgo
KSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNo
YXJhY3RlcnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJz
ZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUsIFJHQkEzMiYgcmdiKQotewotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotICAg
IHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCks
IHJnYik7Ci19Ci0KIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0
IENvbG9yJiBjMikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhc3N1bWluZyB0aGF0IHRoZSBj
b2xvcnMgYXJlIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UuCkBAIC0xOTIsNTEgKzEyMiw2IEBAIGlu
dCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0IENvbG9yJiBjMikKICAg
ICByZXR1cm4gZFIgKiBkUiArIGRHICogZEcgKyBkQiAqIGRCOwogfQogCi1zdGF0aWMgaW5saW5l
IGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lZENvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIGVhc2lseSBiaWcgZW5vdWdoIGZvciB0aGUgbG9uZ2Vz
dCBjb2xvciBuYW1lCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBp
ZiAobGVuZ3RoID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNo
YXIgYyA9IG5hbWVbaV07Ci0gICAgICAgIGlmICghYyB8fCAhV1RGOjppc0FTQ0lJKGMpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGJ1ZmZlcltpXSA9IHRvQVNDSUlMb3dl
cihzdGF0aWNfY2FzdDxjaGFyPihjKSk7Ci0gICAgfQotICAgIGJ1ZmZlcltsZW5ndGhdID0gJ1ww
JzsKLSAgICByZXR1cm4gZmluZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKLX0KLQotQ29sb3I6OkNv
bG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKLSAg
ICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICBib29sIHZhbGlkOwotCi0gICAgICAgIGlmIChu
YW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnMxNigpICsg
MSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKLQotICAgICAgICBpZiAodmFsaWQpCi0gICAg
ICAgICAgICBzZXRSR0IoY29sb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhdXRvKiBm
b3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAgICBzZXRSR0IoeyBm
b3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Ci0gICAgfQotfQotCi1Db2xvcjo6Q29sb3IoY29uc3Qg
Y2hhciogbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKLSAgICAgICAgU2ltcGxl
Q29sb3IgY29sb3I7Ci0gICAgICAgIGlmIChwYXJzZUhleENvbG9yKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigmbmFtZVsxXSksIHN0ZDo6c3RybGVuKCZuYW1lWzFdKSwgY29sb3IpKQot
ICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIGZvdW5kQ29s
b3IgPSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAgc2V0UkdCKHsgZm91
bmRDb2xvci0+QVJHQlZhbHVlIH0pOwotfQotCiBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3ImIG90
aGVyKQogICAgIDogbV9jb2xvckRhdGEob3RoZXIubV9jb2xvckRhdGEpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAppbmRleCBjZTViOTFmZjI5Y2RjN2MyMDRiMWE3
YmY4YTlmNTliMzcwYTczNmMyLi5lN2NmZTRmYzUzNTJhMDI5NDgxNzE3YTZiNzQ2ZGMzZGUxODdm
NmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTE0Miw5
ICsxNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNldFJHQihtYWtlUkdCQUZyb21DTVlLQShjLCBt
LCB5LCBrLCBhKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgQ29sb3Io
Y29uc3QgU3RyaW5nJik7Ci0gICAgZXhwbGljaXQgQ29sb3IoY29uc3QgY2hhciopOwotCiAgICAg
ZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgIHsKICAg
ICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxpZFJHQkFDb2xvciwg
IkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRl
ZENvbG9yIik7CkBAIC0yNTUsMTEgKzI1Miw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBzdGF0aWMg
Ym9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYsIFJHQkEzMiYpOwotICAgIHN0YXRpYyBi
b29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYsIFJHQkEzMiYpOwotICAgIHN0YXRp
YyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7Ci0g
ICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBSR0JB
MzImKTsKLQogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgYmxhY2sgeyAweEZGMDAw
MDAwIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciB3aGl0ZSB7IDB4RkZGRkZG
RkYgfTsKICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtHcmF5IHsgMHhGRjgw
ODA4MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCBjOGZkNWI4NzAyODA2ZWVi
OGQ5YTViNTA5NGFjNjFkOGE5MzgzYmNmLi4xMzhmYzJmZWE1Nzg4MmM3MzVlNTgzMTJlM2JjMGY1
OWNjYWEwODJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAtNjI1LDcgKzYyNSw3
IEBAIHZvaWQgV0tCdW5kbGVQYWdlU2V0Q29tcG9zaXRpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLU3RyaW5nUmVmIHRleHQsIGludCBmCiAgICAgICAgICAgICBoaWdobGlnaHRzLnVuY2hl
Y2tlZEFwcGVuZCh7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0
T2Zmc2V0KSwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZz
ZXQgKyBzdGF0aWNfY2FzdDxBUEk6OlVJbnQ2NCo+KGRpY3Rpb25hcnktPmdldCgibGVuZ3RoIikp
LT52YWx1ZSgpKSwKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb2xvcihzdGF0aWNfY2FzdDxB
UEk6OlN0cmluZyo+KGRpY3Rpb25hcnktPmdldCgiY29sb3IiKSktPnN0cmluZygpKQorICAgICAg
ICAgICAgICAgIFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihzdGF0aWNfY2FzdDxBUEk6
OlN0cmluZyo+KGRpY3Rpb25hcnktPmdldCgiY29sb3IiKSktPnN0cmluZygpKQogICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400221</attachid>
            <date>2020-05-25 14:10:14 -0700</date>
            <delta_ts>2020-05-26 10:58:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212296-20200525141011.patch</filename>
            <type>text/plain</type>
            <size>44668</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM5NzAxNTlkZDZkMWJj
NmVlOTg0NTljNzYxMjM3ODNlMzQ3NTUyMy4uYzk3YWUzYWI4NjI5ZDI3YjZiMjQxMWVmM2I3ZjJk
MDEyZWU4NTc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDIwLTA1LTI1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBFbGltaW5hdGUgQ29sb3IgY29u
c3RydWN0b3JzIHRoYXQgdGFrZSBzdHJpbmdzLCBtb3ZpbmcgY29sb3IgcGFyc2luZyBlbnRpcmVs
eSBpbnRvIHRoZSBDU1MgcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTIyOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6IE1vdmVkIG1vcmUgb2YgdGhlIGxvZ2ljIGludG8K
KyAgICAgICAgQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNvbG9yLiBBbHNvIGFkZGVk
IGEgRklYTUUgYWJvdXQgd2hhdAorICAgICAgICBzZWVtcyB0byBiZSBhIG1pc3Rha2UgYWJvdXQg
c3RyaWN0IG1vZGUuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3JXb3Jr
ZXJTYWZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU3lzdGVt
Q29sb3IpOiBSZW1vdmVkIHVudXNlZCBjb250ZXh0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZU5hbWVkQ29sb3IpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VIZXhDb2xvcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKTogVXNlIGF1dG8uCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlVmFsdWUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NT
UGFyc2VyLmg6IEV4cG9ydGVkIHBhcnNlQ29sb3IuIFJlbW92ZWQgdW51c2VkIHZhbHVlIHBvb2wK
KyAgICAgICAgYW5kIHN0cmljdCBhcmd1bWVudHMgZnJvbSBwYXJzZUNvbG9yV29ya2VyU2FmZS4g
UmVtb3ZlZCB1bnVzZWQgY29udGV4dAorICAgICAgICBhcmd1bWVudCBmcm9tIHBhcnNlU3lzdGVt
Q29sb3IuIEFkZGVkIHBhcnNlTmFtZWRDb2xvciBhbmQgcGFyc2VIZXhDb2xvci4KKworICAgICAg
ICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUpOiBUYWtlIGEgU3RyaW5nVmlldy4KKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFBhcnNpbmdIZXhDb2xvcik6IEFkZGVkLCBsb2dpYyBtb3ZlZCBmcm9tIENv
bG9yIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVybmFs
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWVyaWNDb2xvcik6IEFkZGVkLCBs
b2dpYyBtb3ZlZCBmcm9tIGZhc3RQYXJzZUNvbG9ySW50ZXJuYWwuCisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUNvbG9yKTogVHVybmVkIGludG8gYSBub24tbWVtYmVyIGZ1bmN0aW9uIHNpbmNlIGl0
J3MgcHJpdmF0ZQorICAgICAgICB0byB0aGlzIGZpbGUuIFVzZSBhdXRvIGEgYml0IG1vcmUsIGFu
ZCByZW1vdmVkIHVubmVlZGVkIHZhbHVlIHBvb2wgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpmaW5pc2hQYXJzaW5nTmFtZWRDb2xvcik6IEFkZGVkLCBsb2dpYyBtb3ZlZCBmcm9tIENvbG9y
IGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VOYW1lZENvbG9ySW50ZXJuYWwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2ltcGxlQ29sb3JJbnRlcm5hbCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJzZVNpbXBsZUNv
bG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNl
SGV4Q29sb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckZhc3RQYXRoczo6
cGFyc2VOYW1lZENvbG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1VuaXZlcnNhbEtl
eXdvcmQpOiBUYWtlIGEgU3RyaW5nVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlS2V5d29y
ZFZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZVRyYW5zZm9ybSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDYXJldENvbG9yKTogRGl0dG8uIEFsc28g
dGFrZSBhIHBhcnNlciBjb250ZXh0IHJhdGhlciB0aGFuCisgICAgICAgIGEgcGFyc2VyIG1vZGUu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJGYXN0UGF0aHM6Om1heWJlUGFyc2VWYWx1ZSk6
IFRha2UgYSBTdHJpbmdWaWV3LgorCisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0
UGF0aHMuaDogQ3V0IGRvd24gaW5jbHVkZXMuIFVzZSBTdHJpbmdWaWV3LgorICAgICAgICBBZGRl
ZCBwYXJzZVNpbXBsZUNvbG9yLCBwYXJzZUhleENvbG9yLCBhbmQgcGFyc2VOYW1lZENvbG9yLgor
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUhleENvbG9yKTog
UmV0dXJuIGFuCisgICAgICAgIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBpbnN0ZWFkIG9mIGEgQ29s
b3IuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVD
b2xvcik6IFJlZmFjdG9yIGEgYml0IGZvciBjbGFyaXR5LgorCisgICAgICAgICogaHRtbC9IVE1M
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUxlZ2FjeUNvbG9yVmFsdWUpOiBS
ZW5hbWVkIGZyb20gcGFyc2VDb2xvclN0cmluZ1dpdGhDcmF6eUxlZ2FjeVJ1bGVzCisgICAgICAg
IGFuZCByZWZhY3RvcmVkIGEgYml0LiBNYWRlIHRoaXMgbWF0Y2ggdGhlIEhUTUwgc3BlY2lmaWNh
dGlvbiBtb3JlIGNsb3NlbHkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6YWRkSFRN
TENvbG9yVG9TdHlsZSk6IFNpbXBsaWZ5IG5vdyB0aGF0IG1vcmUgb2YgdGhlIGxvZ2ljCisgICAg
ICAgIHdhcyBtb3ZlZCBpbnRvIHBhcnNlTGVnYWN5Q29sb3JWYWx1ZS4KKworICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3Ip
OiBSZW1vdmVkIHVubmVlZGVkIGFyZ3VtZW50cyBmb3IgcGFyc2VDb2xvcldvcmtlclNhZmUKKyAg
ICAgICAgYW5kIGZvciBwYXJzZVN5c3RlbUNvbG9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5hbWVkQ29sb3IpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKTogRGVsZXRlZCBvdmVybG9hZGRz
IHRoYXQgdGFrZSBzdHJpbmdzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6
IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGV4Q29sb3JJbnRlcm5hbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDogUmVt
b3ZlZCBwYXJzZUhleENvbG9yIGZ1bmN0aW9ucy4KKwogMjAyMC0wNS0yNSAgT3Jpb2wgQnJ1ZmF1
ICA8b2JydWZhdUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZ3JpZF0gUHJldmVudCBncmlk
LXRlbXBsYXRlLXJvd3MgZnJvbSBzZXJpYWxpemluZyBhZGphY2VudCA8bGluZS1uYW1lcz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMDJiOGY2YWY0MTZkYmFhNDE4YzZmZjA0YjFjYTJkMTFhZjJlYmUyYi4uYjgzNDU3
OGNlYWZjODM0NTdhODExNzdjMTkyZGJlOTk2YWVjYTQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMC0wNS0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgRWxpbWluYXRlIENvbG9yIGNvbnN0cnVjdG9ycyB0aGF0IHRha2Ugc3RyaW5ncywgbW92aW5n
IGNvbG9yIHBhcnNpbmcgZW50aXJlbHkgaW50byB0aGUgQ1NTIHBhcnNlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMjk2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VTZXRD
b21wb3NpdGlvbik6IFVzZSBXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IuCisKIDIwMjAt
MDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVk
IENvbG9yIENsZWFudXA6IFVzZSB0aGUgbmFtZSBTaW1wbGVDb2xvciBjb25zaXN0ZW50bHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCA1ZDEwYTIyZmFmZTJlYTlh
MTVlNmRlZDhlNTViMDg4YWIzMTliZDI4Li4zYzcwMmQ1MzBjOWU5YzE3MmNiYjQ4OTZkNzkyMGRi
OGNjNDVlZWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC05
NCw2NiArOTQsNDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3VwcG9ydHNDb25kaXRpb24oY29u
c3QgU3RyaW5nJiBjb25kaXRpb24pCiAKIENvbG9yIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25z
dCBTdHJpbmcmIHN0cmluZywgYm9vbCBzdHJpY3QpCiB7Ci0gICAgaWYgKHN0cmluZy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIC8vIFRyeSBuYW1lZCBjb2xv
cnMgZmlyc3QuCi0gICAgQ29sb3IgbmFtZWRDb2xvciB7IHN0cmluZyB9OwotICAgIGlmIChuYW1l
ZENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIG5hbWVkQ29sb3I7Ci0gICAgCi0gICAg
Ly8gVHJ5IHRoZSBmYXN0IHBhdGggdG8gcGFyc2UgaGV4IGFuZCByZ2IuCi0gICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcihzdHJpbmcsIHN0
cmljdCA/IEhUTUxTdGFuZGFyZE1vZGUgOiBIVE1MUXVpcmtzTW9kZSwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7Ci0KLSAgICAvLyBJZiB0aGF0IGZhaWxzLCB0cnkgdGhlIGZ1bGwgcGFyc2Vy
LgotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHZhbHVlID0gcGFyc2VTaW5nbGVWYWx1ZShDU1NQ
cm9wZXJ0eUNvbG9yLCBzdHJpbmcsIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7Ci0gICAgaWYg
KCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIENv
bG9yKCk7Ci0gICAgY29uc3QgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAoYXV0byBjb2xvciA9IENTU1BhcnNlckZhc3RQ
YXRoczo6cGFyc2VTaW1wbGVDb2xvcihzdHJpbmcsIHN0cmljdCkpCisgICAgICAgIHJldHVybiAq
Y29sb3I7CisgICAgLy8gRklYTUU6IFVuY2xlYXIgd2h5IHdlIHdhbnQgdG8gaWdub3JlIHRoZSBi
b29sZWFuIGFyZ3VtZW50ICJzdHJpY3QiIGFuZCBhbHdheXMgcGFzcyBzdHJpY3RDU1NQYXJzZXJD
b250ZXh0IGhlcmUuCisgICAgYXV0byB2YWx1ZSA9IHBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVy
dHlDb2xvciwgc3RyaW5nLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOworICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwog
ICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuY29s
b3IoKTsKIH0KIAotQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBT
dHJpbmcmIHN0cmluZywgQ1NTVmFsdWVQb29sJiB2YWx1ZVBvb2wsIGJvb2wgc3RyaWN0KQorQ29s
b3IgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yV29ya2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZykK
IHsKLSAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0K
LSAgICAvLyBUcnkgbmFtZWQgY29sb3JzIGZpcnN0LgotICAgIENvbG9yIG5hbWVkQ29sb3IgeyBz
dHJpbmcgfTsKLSAgICBpZiAobmFtZWRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBu
YW1lZENvbG9yOworICAgIGlmIChhdXRvIGNvbG9yID0gQ1NTUGFyc2VyRmFzdFBhdGhzOjpwYXJz
ZVNpbXBsZUNvbG9yKHN0cmluZykpCisgICAgICAgIHJldHVybiAqY29sb3I7CisgICAgLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgbWFueSB0eXBlcyBvZiB2YWxpZCBDU1Mg
Y29sb3Igc3ludGF4LCBzdWNoIGFzIGNvbG9yIHdpdGggbm9uLXNSR0IgY29sb3Igc3BhY2VzLgor
ICAgIHJldHVybiB7IH07Cit9CiAKLSAgICAvLyBUcnkgdGhlIGZhc3QgcGF0aCB0byBwYXJzZSBo
ZXggYW5kIHJnYi4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ1NTUGFyc2VyRmFzdFBh
dGhzOjpwYXJzZUNvbG9yKHN0cmluZywgc3RyaWN0ID8gSFRNTFN0YW5kYXJkTW9kZSA6IEhUTUxR
dWlya3NNb2RlLCB2YWx1ZVBvb2wpOworQ29sb3IgQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9y
KFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIGF1dG8ga2V5d29yZCA9IGNzc1ZhbHVlS2V5d29y
ZElEKHN0cmluZyk7CisgICAgaWYgKCFTdHlsZUNvbG9yOjppc1N5c3RlbUNvbG9yKGtleXdvcmQp
KQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9u
KCkuc3lzdGVtQ29sb3Ioa2V5d29yZCwgeyB9KTsKK30KIAotICAgIGlmICghdmFsdWUgfHwgIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIGNv
bnN0IGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7Ci0gICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1JHQkNvbG9yKCkpCi0gICAgICAgIHJl
dHVybiBDb2xvcigpOwotICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb2xvcigpOworT3B0aW9u
YWw8U2ltcGxlQ29sb3I+IENTU1BhcnNlcjo6cGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcgc3Ry
aW5nKQoreworICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlTmFtZWRDb2xvcihz
dHJpbmcpOwogfQogCi1Db2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQqIGNvbnRleHQpCitPcHRpb25hbDxT
aW1wbGVDb2xvcj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQog
ewotICAgIENTU1ZhbHVlSUQgaWQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwotICAgIGlm
ICghU3R5bGVDb2xvcjo6aXNTeXN0ZW1Db2xvcihpZCkpCi0gICAgICAgIHJldHVybiBDb2xvcigp
OwotCi0gICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnM7Ci0gICAgaWYg
KGNvbnRleHQgJiYgY29udGV4dC0+dXNlU3lzdGVtQXBwZWFyYW5jZSkKLSAgICAgICAgb3B0aW9u
cy5hZGQoU3R5bGVDb2xvcjo6T3B0aW9uczo6VXNlU3lzdGVtQXBwZWFyYW5jZSk7Ci0gICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKS5zeXN0ZW1Db2xvcihpZCwgb3B0aW9ucyk7Cisg
ICAgcmV0dXJuIENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQog
CiBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENTU1BhcnNlckZh
c3RQYXRoczo6bWF5YmVQYXJzZVZhbHVlKHByb3BlcnR5SUQsIHN0cmluZywgY29udGV4dC5tb2Rl
KSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6bWF5YmVQYXJzZVZh
bHVlKHByb3BlcnR5SUQsIHN0cmluZywgY29udGV4dCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7CiAgICAgcmV0dXJuIENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKHByb3BlcnR5SUQsIHRva2VuaXplci50b2tlblJh
bmdlKCksIGNvbnRleHQpOwpAQCAtMTYyLDEwICsxNDUsOCBAQCBSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0
IFN0cgogQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyYgZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBjb250ZXh0KQogewogICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7Ci0gICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENTU1BhcnNlckZhc3RQYXRoczo6bWF5YmVQYXJzZVZhbHVl
KHByb3BlcnR5SUQsIHN0cmluZywgY29udGV4dC5tb2RlKTsKLSAgICBpZiAodmFsdWUpCisgICAg
aWYgKGF1dG8gdmFsdWUgPSBDU1NQYXJzZXJGYXN0UGF0aHM6Om1heWJlUGFyc2VWYWx1ZShwcm9w
ZXJ0eUlELCBzdHJpbmcsIGNvbnRleHQpKQogICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24uYWRk
UGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgV1RGTW92ZSh2YWx1ZSksIGlt
cG9ydGFudCkpID8gQ1NTUGFyc2VyOjpQYXJzZVJlc3VsdDo6Q2hhbmdlZCA6IENTU1BhcnNlcjo6
UGFyc2VSZXN1bHQ6OlVuY2hhbmdlZDsKLQogICAgIENTU1BhcnNlciBwYXJzZXIoY29udGV4dCk7
CiAgICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBz
dHJpbmcsIGltcG9ydGFudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApp
bmRleCBiZDNkY2ZhMDM0ZjgyMzQ4ZWJkZGFkMWEzYTBlZWE2NDMyYTJmM2EzLi43YWI4YmIzNzll
MWI5YTRkNzM1MWEyZmNjNThjOWRjOTAzY2VlZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyLmgKQEAgLTM3LDYgKzM3LDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBFbGVtZW50
OwogY2xhc3MgSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgTXV0YWJsZVN0eWxlUHJv
cGVydGllczsKK2NsYXNzIFNpbXBsZUNvbG9yOwogY2xhc3MgU3R5bGVSdWxlQmFzZTsKIGNsYXNz
IFN0eWxlUnVsZUtleWZyYW1lOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwpAQCAtODQsOSAr
ODUsMTEgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZh
cmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0eWxlOjpC
dWlsZGVyU3RhdGUmKTsKIAotICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwotICAgIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yV29y
a2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NWYWx1ZVBvb2wmLCBib29sIHN0cmljdCA9IGZhbHNl
KTsKLSAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihjb25zdCBTdHJpbmcmLCBjb25z
dCBDU1NQYXJzZXJDb250ZXh0Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENvbG9yIHBh
cnNlQ29sb3IoY29uc3QgU3RyaW5nJiwgYm9vbCBzdHJpY3QgPSBmYWxzZSk7CisgICAgc3RhdGlj
IENvbG9yIHBhcnNlQ29sb3JXb3JrZXJTYWZlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBD
b2xvciBwYXJzZVN5c3RlbUNvbG9yKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRpb25hbDxT
aW1wbGVDb2xvcj4gcGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRp
b25hbDxTaW1wbGVDb2xvcj4gcGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsKIAogcHJpdmF0ZToK
ICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmLCBDU1NQ
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAKaW5kZXggOGNmNWY1MmVl
ZTg2NDBjYzA5YTM5OTMyZGRiMTc0MGQwZjBkNzdiOC4uMGMyZDI0YjViOGQ1N2RhNWU2MjM2ODRl
ZmIyNjhlYTgxZGNiMmM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXJGYXN0UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyRmFzdFBhdGhzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8vIENvcHlyaWdodCAyMDE0IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKQEAgLTE0NCw3ICsxNDUsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgcGFyc2VTaW1wbGVBbmdsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3N0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlkLCBTdHJpbmdWaWV3IHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewog
ICAgIEFTU0VSVCghc3RyaW5nLmlzRW1wdHkoKSk7CiAgICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVO
dW1iZXJzID0gZmFsc2U7CkBAIC00MDgsODUgKzQwOSwxNzIgQEAgc3RhdGljIGlubGluZSBib29s
IG1pZ2h0QmVSR0IoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogICAgICAgICAmJiBpc0FTQ0lJQWxwaGFDYXNlbGVzc0VxdWFsKGNoYXJhY3RlcnNbMl0s
ICdiJyk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIE9w
dGlvbmFsPFNpbXBsZUNvbG9yPiBmYXN0UGFyc2VDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3Rl
clR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBxdWlya3NNb2RlKQorc3Rh
dGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBmaW5pc2hQYXJzaW5nSGV4Q29sb3IodWludDMyX3Qg
dmFsdWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBDU1NVbml0VHlwZSBleHBlY3QgPSBDU1NV
bml0VHlwZTo6Q1NTX1VOS05PV047CisgICAgc3dpdGNoIChsZW5ndGgpIHsKKyAgICBjYXNlIDM6
CisgICAgICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYworICAgICAgICByZXR1cm4gU2lt
cGxlQ29sb3IgeyAweEZGMDAwMDAwCisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAx
MiB8ICh2YWx1ZSAmIDB4RjAwKSA8PCA4CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIDw8
IDggfCAodmFsdWUgJiAweEYwKSA8PCA0CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwg
NCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAgICBjYXNlIDQ6CisgICAgICAgIC8vICNhYmNkIGNvbnZl
cnRzIHRvIGRkYWFiYmNjIHNpbmNlIGFscGhhIGJ5dGVzIGFyZSB0aGUgaGlnaCBieXRlcy4KKyAg
ICAgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgKHZhbHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAm
IDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVl
ICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZh
bHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhG
MCkgPj4gNCB9OworICAgIGNhc2UgNjoKKyAgICAgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgMHhG
RjAwMDAwMCB8IHZhbHVlIH07CisgICAgY2FzZSA4OgorICAgICAgICAvLyBXZSBwYXJzZWQgdGhl
IHZhbHVlcyBpbnRvIFJHQkEgb3JkZXIsIGJ1dCB3ZSBzdG9yZSB0aGVtIGluIEFSR0Igb3JkZXIu
CisgICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9
OworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29s
b3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2
ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHVpbnQz
Ml90IHZhbHVlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgYXV0byBkaWdpdCA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIGlmICghaXNB
U0NJSUhleERpZ2l0KGRpZ2l0KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIHZhbHVlIDw8PSA0OworICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4VmFsdWUoZGln
aXQpOworICAgIH0KKyAgICByZXR1cm4gZmluaXNoUGFyc2luZ0hleENvbG9yKHZhbHVlLCBsZW5n
dGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBzdGF0aWMgT3B0aW9u
YWw8U2ltcGxlQ29sb3I+IHBhcnNlTnVtZXJpY0NvbG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBzdHJpY3QpCit7CiAgICAgaWYgKGxlbmd0
aCA+PSA0ICYmIGNoYXJhY3RlcnNbMF0gPT0gJyMnKSB7Ci0gICAgICAgIGlmIChhdXRvIGNvbG9y
ID0gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3IoY2hhcmFjdGVycyArIDEsIGxlbmd0aCAtIDEp
KQotICAgICAgICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICBpZiAoYXV0byBoZXhDb2xvciA9
IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjaGFyYWN0ZXJzICsgMSwgbGVuZ3RoIC0gMSkpCisgICAg
ICAgICAgICByZXR1cm4gKmhleENvbG9yOwogICAgIH0KIAotICAgIGlmIChxdWlya3NNb2RlICYm
IChsZW5ndGggPT0gMyB8fCBsZW5ndGggPT0gNikpIHsKLSAgICAgICAgaWYgKGF1dG8gY29sb3Ig
PSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAg
ICAgICAgcmV0dXJuIGNvbG9yOworICAgIGlmICghc3RyaWN0ICYmIChsZW5ndGggPT0gMyB8fCBs
ZW5ndGggPT0gNikpIHsKKyAgICAgICAgaWYgKGF1dG8gaGV4Q29sb3IgPSBwYXJzZUhleENvbG9y
SW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiAqaGV4Q29s
b3I7CiAgICAgfQogCisgICAgYXV0byBleHBlY3QgPSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047
CisKICAgICAvLyBUcnkgcmdiYSgpIHN5bnRheC4KICAgICBpZiAobWlnaHRCZVJHQkEoY2hhcmFj
dGVycywgbGVuZ3RoKSkgewotICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjdXJyZW50ID0g
Y2hhcmFjdGVycyArIDU7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCA9IGNoYXJh
Y3RlcnMgKyBsZW5ndGg7CisgICAgICAgIGF1dG8gY3VycmVudCA9IGNoYXJhY3RlcnMgKyA1Owor
ICAgICAgICBhdXRvIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgIGludCByZWQ7
Ci0gICAgICAgIGludCBncmVlbjsKLSAgICAgICAgaW50IGJsdWU7Ci0gICAgICAgIGludCBhbHBo
YTsKLQogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5k
LCAnLCcsIGV4cGVjdCwgcmVkKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIGludCBncmVlbjsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdl
KGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIGdyZWVuKSkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGludCBibHVlOwogICAgICAgICBpZiAoIXBhcnNlQ29sb3JJ
bnRPclBlcmNlbnRhZ2UoY3VycmVudCwgZW5kLCAnLCcsIGV4cGVjdCwgYmx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpbnQgYWxwaGE7CiAgICAgICAgIGlm
ICghcGFyc2VBbHBoYVZhbHVlKGN1cnJlbnQsIGVuZCwgJyknLCBhbHBoYSkpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoY3VycmVudCAhPSBlbmQpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQs
IGRvbid0IG5lZWQgdG8gcmUtY2xhbXAgYXMgbWFrZVNpbXBsZUNvbG9yIGRvZXMuCiAgICAgfQog
CiAgICAgLy8gVHJ5IHJnYigpIHN5bnRheC4KICAgICBpZiAobWlnaHRCZVJHQihjaGFyYWN0ZXJz
LCBsZW5ndGgpKSB7Ci0gICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGN1cnJlbnQgPSBjaGFy
YWN0ZXJzICsgNDsKLSAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kID0gY2hhcmFjdGVy
cyArIGxlbmd0aDsKKyAgICAgICAgYXV0byBjdXJyZW50ID0gY2hhcmFjdGVycyArIDQ7CisgICAg
ICAgIGF1dG8gZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICAgICAgaW50IHJlZDsKLSAg
ICAgICAgaW50IGdyZWVuOwotICAgICAgICBpbnQgYmx1ZTsKICAgICAgICAgaWYgKCFwYXJzZUNv
bG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVuZCwgJywnLCBleHBlY3QsIHJlZCkpCiAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpbnQgZ3JlZW47CiAgICAgICAg
IGlmICghcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjdXJyZW50LCBlbmQsICcsJywgZXhwZWN0
LCBncmVlbikpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpbnQg
Ymx1ZTsKICAgICAgICAgaWYgKCFwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGN1cnJlbnQsIGVu
ZCwgJyknLCBleHBlY3QsIGJsdWUpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWQsIGdyZWVuLCBibHVlKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihyZWQsIGdyZWVuLCBibHVlKTsgLy8gRklY
TUU6IEFscmVhZHkgY2xhbXBlZCwgZG9uJ3QgbmVlZCB0byByZS1jbGFtcCBhcyBtYWtlU2ltcGxl
Q29sb3IgZG9lcy4KICAgICB9CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1SZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcm
IHN0cmluZywgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHZhbHVlUG9v
bCkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOdW1lcmljQ29sb3IoU3RyaW5n
VmlldyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCit7CisgICAgYm9v
bCBzdHJpY3QgPSAhaXNRdWlya3NNb2RlQmVoYXZpb3IoY29udGV4dC5tb2RlKTsKKyAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljQ29sb3Ioc3RyaW5n
LmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgc3RyaWN0KTsKKyAgICByZXR1cm4gcGFy
c2VOdW1lcmljQ29sb3Ioc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIHN0
cmljdCk7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQ29sb3IoU3RyaW5nVmll
dyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVlSUQgPSBjc3NWYWx1ZUtl
eXdvcmRJRChzdHJpbmcpOworICAgIGF1dG8gdmFsdWVJRCA9IGNzc1ZhbHVlS2V5d29yZElEKHN0
cmluZyk7CiAgICAgaWYgKFN0eWxlQ29sb3I6OmlzQ29sb3JLZXl3b3JkKHZhbHVlSUQpKSB7Ci0g
ICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUodmFsdWVJRCwgcGFyc2VyTW9kZSkpCisg
ICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUodmFsdWVJRCwgY29udGV4dC5tb2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gdmFsdWVQb29sLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwogICAgIH0KKyAg
ICBpZiAoYXV0byBjb2xvciA9IHBhcnNlTnVtZXJpY0NvbG9yKHN0cmluZywgY29udGV4dCkpCisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUo
KmNvbG9yKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIE9wdGlvbmFsPFNpbXBs
ZUNvbG9yPiBmaW5pc2hQYXJzaW5nTmFtZWRDb2xvcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBidWZmZXJbbGVuZ3RoXSA9ICdcMCc7CisgICAgYXV0byBuYW1lZENvbG9y
ID0gZmluZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBpZiAoIW5hbWVkQ29sb3IpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsgbmFtZWRD
b2xvci0+QVJHQlZhbHVlIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOYW1lZENvbG9ySW50ZXJuYWwoY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNo
YXIgYnVmZmVyWzY0XTsgLy8gRWFzaWx5IGJpZyBlbm91Z2ggZm9yIHRoZSBsb25nZXN0IGNvbG9y
IG5hbWUuCisgICAgaWYgKGxlbmd0aCA+IHNpemVvZihidWZmZXIpIC0gMSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBp
ZiAoIWNoYXJhY3RlciB8fCAhaXNBU0NJSShjaGFyYWN0ZXIpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgYnVmZmVyW2ldID0gdG9BU0NJSUxvd2VyKHN0YXRpY19j
YXN0PGNoYXI+KGNoYXJhY3RlcikpOworICAgIH0KKyAgICByZXR1cm4gZmluaXNoUGFyc2luZ05h
bWVkQ29sb3IoYnVmZmVyLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlU2ltcGxlQ29sb3JJbnRl
cm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIGJv
b2wgc3RyaWN0KQoreworICAgIGlmIChhdXRvIGNvbG9yID0gcGFyc2VOdW1lcmljQ29sb3IoY2hh
cmFjdGVycywgbGVuZ3RoLCBzdHJpY3QpKQorICAgICAgICByZXR1cm4gY29sb3I7CisgICAgcmV0
dXJuIHBhcnNlTmFtZWRDb2xvckludGVybmFsKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CiAKLSAg
ICBib29sIHF1aXJrc01vZGUgPSBpc1F1aXJrc01vZGVCZWhhdmlvcihwYXJzZXJNb2RlKTsKK09w
dGlvbmFsPFNpbXBsZUNvbG9yPiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlU2ltcGxlQ29sb3Io
U3RyaW5nVmlldyBzdHJpbmcsIGJvb2wgc3RyaWN0KQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBwYXJzZVNpbXBsZUNvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJh
Y3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSwgc3RyaWN0KTsKKyAgICByZXR1cm4gcGFyc2VTaW1w
bGVDb2xvckludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpLCBz
dHJpY3QpOworfQogCi0gICAgLy8gRmFzdCBwYXRoIGZvciBoZXggY29sb3JzIGFuZCByZ2IoKS9y
Z2JhKCkgY29sb3JzCi0gICAgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IGNvbG9yOworT3B0aW9uYWw8
U2ltcGxlQ29sb3I+IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3
IHN0cmluZykKK3sKICAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBjb2xvciA9IGZh
c3RQYXJzZUNvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSwgcXVpcmtzTW9kZSk7Ci0gICAgZWxzZQotICAgICAgICBjb2xvciA9IGZhc3RQYXJzZUNvbG9y
SW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCksIHF1aXJrc01v
ZGUpOwotICAgIGlmICghY29sb3IpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biB2YWx1ZVBvb2wuY3JlYXRlQ29sb3JWYWx1ZSgqY29sb3IpOworICAgICAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkp
OworICAgIHJldHVybiBwYXJzZUhleENvbG9ySW50ZXJuYWwoc3RyaW5nLmNoYXJhY3RlcnMxNigp
LCBzdHJpbmcubGVuZ3RoKCkpOworfQorCitPcHRpb25hbDxTaW1wbGVDb2xvcj4gQ1NTUGFyc2Vy
RmFzdFBhdGhzOjpwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgaWYg
KHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlTmFtZWRDb2xvckludGVybmFs
KHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiBwYXJz
ZU5hbWVkQ29sb3JJbnRlcm5hbChzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgo
KSk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyRmFzdFBhdGhzOjppc1ZhbGlkS2V5d29yZFByb3BlcnR5
QW5kVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBDU1NWYWx1ZUlEIHZhbHVlSUQsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC05NTIsMTYgKzEwNDAsMTYgQEAgYm9v
bCBDU1NQYXJzZXJGYXN0UGF0aHM6OmlzS2V5d29yZFByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlkKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3b3JkKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQorc3RhdGljIGJvb2wgaXNVbml2ZXJzYWxLZXl3b3JkKFN0cmlu
Z1ZpZXcgc3RyaW5nKQogewogICAgIC8vIFRoZXNlIGtleXdvcmRzIGNhbiBiZSB1c2VkIGZvciBh
bGwgcHJvcGVydGllcy4KICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nLCAiaW5pdGlhbCIpCi0gICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nLCAiaW5oZXJpdCIpCi0gICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
c3RyaW5nLCAidW5zZXQiKQotICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0
cmluZywgInJldmVydCIpOworICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcsICJpbmhlcml0IikKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc3RyaW5nLCAidW5zZXQiKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShzdHJpbmcsICJyZXZlcnQiKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
cGFyc2VLZXl3b3JkVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3N0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IHBhcnNlS2V5d29yZFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgU3Ry
aW5nVmlldyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAg
QVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKIApAQCAtMTI1Myw3ICsxMzQxLDcgQEAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlU2ltcGxlVHJhbnNmb3JtTGlzdChjb25zdCBDaGFy
VHlwZSogY2hhcnMsIHVuc2kKICAgICByZXR1cm4gdHJhbnNmb3JtTGlzdDsKIH0KIAotc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW1wbGVUcmFuc2Zvcm0oQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBh
cnNlU2ltcGxlVHJhbnNmb3JtKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3RyaW5nVmlldyBz
dHJpbmcpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKICAgICBpZiAocHJvcGVy
dHlJRCAhPSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkKQEAgLTEyNjMsMjMgKzEzNTEsMjIgQEAgc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW1wbGVUcmFuc2Zvcm0oQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBTdHIKICAgICByZXR1cm4gcGFyc2VTaW1wbGVUcmFuc2Zvcm1MaXN0
KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKIH0KIAotc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VDYXJldENvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUNhcmV0
Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQp
CiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKLSAgICBDU1NWYWx1ZUlEIHZhbHVl
SUQgPSBjc3NWYWx1ZUtleXdvcmRJRChzdHJpbmcpOwotICAgIGlmICh2YWx1ZUlEID09IENTU1Zh
bHVlQXV0bykKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOwotICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6
OnBhcnNlQ29sb3Ioc3RyaW5nLCBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
KTsKKyAgICBpZiAoY3NzVmFsdWVLZXl3b3JkSUQoc3RyaW5nKSA9PSBDU1NWYWx1ZUF1dG8pCisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOworICAgIHJldHVybiBwYXJzZUNvbG9yKHN0cmluZywgY29udGV4
dCk7CiB9CiAKLVJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyRmFzdFBhdGhzOjptYXliZVBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29u
c3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
RmFzdFBhdGhzOjptYXliZVBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHJp
bmdWaWV3IHN0cmluZywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBp
ZiAoYXV0byByZXN1bHQgPSBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKHByb3BlcnR5SUQsIHN0cmlu
ZywgY29udGV4dC5tb2RlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBpZiAocHJvcGVy
dHlJRCA9PSBDU1NQcm9wZXJ0eUNhcmV0Q29sb3IpCi0gICAgICAgIHJldHVybiBwYXJzZUNhcmV0
Q29sb3Ioc3RyaW5nLCBjb250ZXh0Lm1vZGUpOworICAgICAgICByZXR1cm4gcGFyc2VDYXJldENv
bG9yKHN0cmluZywgY29udGV4dCk7CiAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0NvbG9yUHJvcGVy
dHkocHJvcGVydHlJRCkpCi0gICAgICAgIHJldHVybiBwYXJzZUNvbG9yKHN0cmluZywgY29udGV4
dC5tb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHBhcnNl
Q29sb3Ioc3RyaW5nLCBjb250ZXh0KTsKICAgICBpZiAoYXV0byByZXN1bHQgPSBwYXJzZUtleXdv
cmRWYWx1ZShwcm9wZXJ0eUlELCBzdHJpbmcsIGNvbnRleHQpKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIHJldHVybiBwYXJzZVNpbXBsZVRyYW5zZm9ybShwcm9wZXJ0eUlELCBzdHJpbmcp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0
aHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmgKaW5k
ZXggNDE2ODBhYWQ1YTQ0MmFmZGMwOWJjMThhNWE2YmU4OGY1ZTk1MTA4Mi4uOWFmOGZjZjJjNWJk
ODQ2MzE5Mzg5YWI3NTljMjQ1MDM4YjFlZTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5oCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJpZ2h0
IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjksMjkgKzI5LDMwIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTUGFyc2VyTW9kZS5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIENTU1ZhbHVlUG9vbDsKLWNsYXNz
IFN0eWxlU2hlZXRDb250ZW50czsKK2NsYXNzIFNpbXBsZUNvbG9yOworCiBzdHJ1Y3QgQ1NTUGFy
c2VyQ29udGV4dDsKIAogY2xhc3MgQ1NTUGFyc2VyRmFzdFBhdGhzIHsKIHB1YmxpYzoKLSAgICAv
LyBQYXJzZXMgc2ltcGxlIHZhbHVlcyBsaWtlICcxMHB4JyBvciAnZ3JlZW4nLCBidXQgbWFrZXMg
bm8gZ3VhcmFudGVlcwotICAgIC8vIGFib3V0IGhhbmRsaW5nIGFueSBwcm9wZXJ0eSBjb21wbGV0
ZWx5LgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IG1heWJlUGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgLy8g
UGFyc2VzIHNpbXBsZSB2YWx1ZXMgbGlrZSAnMTBweCcgb3IgJ2dyZWVuJywgYnV0IG1ha2VzIG5v
IGd1YXJhbnRlZXMgYWJvdXQgaGFuZGxpbmcgYW55IHByb3BlcnR5IGNvbXBsZXRlbHkuCisgICAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gbWF5YmVQYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
cmluZ1ZpZXcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAotICAgIC8vIFByb3BlcnRpZXMg
aGFuZGxlZCBoZXJlIHNob3VsZG4ndCBiZSBleHBsaWNpdGx5IGhhbmRsZWQgaW4gQ1NTUHJvcGVy
dHlQYXJzZXIKKyAgICAvLyBQcm9wZXJ0aWVzIGhhbmRsZWQgaGVyZSBzaG91bGRuJ3QgYmUgZXhw
bGljaXRseSBoYW5kbGVkIGluIENTU1Byb3BlcnR5UGFyc2VyLgogICAgIHN0YXRpYyBib29sIGlz
S2V5d29yZFByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCk7CiAgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZEtleXdvcmRQcm9wZXJ0eUFuZFZhbHVlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlSUQsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmKTsKIAotICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNl
Q29sb3IoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJik7CisgICAg
Ly8gUGFyc2VzIG51bWVyaWMgYW5kIG5hbWVkIGNvbG9ycy4KKyAgICBzdGF0aWMgT3B0aW9uYWw8
U2ltcGxlQ29sb3I+IHBhcnNlU2ltcGxlQ29sb3IoU3RyaW5nVmlldywgYm9vbCBzdHJpY3QgPSBm
YWxzZSk7CisgICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9yKFN0
cmluZ1ZpZXcpOyAvLyBIZXggY29sb3JzIG9mIGxlbmd0aCAzLCA0LCA2LCBvciA4LCB3aXRob3V0
IGxlYWRpbmcgIiMiLgorICAgIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVDb2xvcj4gcGFyc2VOYW1l
ZENvbG9yKFN0cmluZ1ZpZXcpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCmluZGV4IGNmNTAxNjAxNTVjZjljYzVkMmFmMTg2YTk2ZmZiZDI4YjIxZjU5YTUuLjAyOGI4
MTMyZjdjZTRhMDNlMDI2YmM1MDdmZDE1MmQwZjA3NWI2ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTY5
MCw0MiArNjkwLDQxIEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBDb2xvcihjb2xvckNoYW5u
ZWxzWzBdLCBjb2xvckNoYW5uZWxzWzFdLCBjb2xvckNoYW5uZWxzWzJdLCBjb2xvckNoYW5uZWxz
WzNdLCBjb2xvclNwYWNlKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlSGV4Q29sb3IoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQorc3RhdGljIE9w
dGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBib29sIGFjY2VwdFF1aXJreUNvbG9ycykKIHsKLSAgICBTaW1wbGVDb2xvciByZXN1bHQ7
Ci0gICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gSGFzaFRva2VuKSB7Ci0gICAgICAgIGF1dG8gc2ltcGxlQ29sb3Ig
PSBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcih0b2tlbi52YWx1ZSgpKTsKLSAgICAgICAgaWYg
KCFzaW1wbGVDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAgICAgICByZXN1
bHQgPSAqc2ltcGxlQ29sb3I7Ci0gICAgfSBlbHNlIGlmIChhY2NlcHRRdWlya3lDb2xvcnMpIHsK
LSAgICAgICAgU3RyaW5nIGNvbG9yOwotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJl
clRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewotICAgICAgICAgICAg
aWYgKHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSAhPSBJbnRlZ2VyVmFsdWVUeXBlCi0gICAgICAg
ICAgICAgICAgfHwgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwLiB8fCB0b2tlbi5udW1lcmljVmFs
dWUoKSA+PSAxMDAwMDAwLikKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIC8vIGUuZy4gMTEyMjMzCi0g
ICAgICAgICAgICAgICAgY29sb3IgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KHRv
a2VuLm51bWVyaWNWYWx1ZSgpKSk7Ci0gICAgICAgICAgICBlbHNlIC8vIGUuZy4gMDAwMUZGCi0g
ICAgICAgICAgICAgICAgY29sb3IgPSBtYWtlU3RyaW5nKHN0YXRpY19jYXN0PGludD4odG9rZW4u
bnVtZXJpY1ZhbHVlKCkpLCB0b2tlbi52YWx1ZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAg
d2hpbGUgKGNvbG9yLmxlbmd0aCgpIDwgNikKLSAgICAgICAgICAgICAgICBjb2xvciA9ICIwIiAr
IGNvbG9yOwotICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7
IC8vIGUuZy4gRkYwMDAwCi0gICAgICAgICAgICBjb2xvciA9IHRva2VuLnZhbHVlKCkudG9TdHJp
bmcoKTsKKyAgICBTdHJpbmcgc3RyaW5nOworICAgIFN0cmluZ1ZpZXcgdmlldzsKKyAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEhhc2hUb2tl
bikKKyAgICAgICAgdmlldyA9IHRva2VuLnZhbHVlKCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghYWNjZXB0UXVpcmt5Q29sb3JzKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKQorICAgICAgICAgICAgc3Ry
aW5nID0gdG9rZW4udmFsdWUoKS50b1N0cmluZygpOyAvLyBlLmcuIEZGMDAwMAorICAgICAgICBl
bHNlIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERp
bWVuc2lvblRva2VuKSB7CisgICAgICAgICAgICBpZiAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgp
ICE9IEludGVnZXJWYWx1ZVR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIGF1dG8gbnVtZXJpY1ZhbHVlID0gdG9rZW4ubnVtZXJpY1ZhbHVlKCk7
CisgICAgICAgICAgICBpZiAoIShudW1lcmljVmFsdWUgPj0gMCAmJiBudW1lcmljVmFsdWUgPCAx
MDAwMDAwKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAg
ICAgYXV0byBpbnRlZ2VyVmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHRva2VuLm51bWVyaWNWYWx1
ZSgpKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pCisgICAg
ICAgICAgICAgICAgc3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaW50ZWdlclZhbHVlKTsgLy8gZS5n
LiAxMTIyMzMKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdHJpbmcgPSBtYWtl
U3RyaW5nKGludGVnZXJWYWx1ZSwgdG9rZW4udmFsdWUoKSk7IC8vIGUuZy4gMDAwMUZGCisgICAg
ICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgNikKKyAgICAgICAgICAgICAgICBzdHJpbmcg
PSBtYWtlU3RyaW5nKCYiMDAwMDAwIltzdHJpbmcubGVuZ3RoKCldLCBzdHJpbmcpOwogICAgICAg
ICB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvbG9yLmxlbmd0aCgpOwotICAgICAgICBp
ZiAobGVuZ3RoICE9IDMgJiYgbGVuZ3RoICE9IDYpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9y
KGNvbG9yKTsKLSAgICAgICAgaWYgKCFzaW1wbGVDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgICAgICByZXN1bHQgPSAqc2ltcGxlQ29sb3I7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gMyAm
JiBzdHJpbmcubGVuZ3RoKCkgIT0gNikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHZpZXcgPSBzdHJpbmc7CiAgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gQ1NTUGFy
c2VyOjpwYXJzZUhleENvbG9yKHZpZXcpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gKnJlc3VsdDsKIH0KIAogc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtNzU1LDE3ICs3NTQsMjAgQEAgc3RhdGljIENvbG9y
IHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXIKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgYm9v
bCBhY2NlcHRRdWlya3lDb2xvcnMpCiB7Ci0gICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWso
KS5pZCgpOwotICAgIGlmIChTdHlsZUNvbG9yOjppc0NvbG9yS2V5d29yZChpZCkpIHsKLSAgICAg
ICAgaWYgKCFpc1ZhbHVlQWxsb3dlZEluTW9kZShpZCwgY3NzUGFyc2VyTW9kZSkpCisgICAgYXV0
byBrZXl3b3JkID0gcmFuZ2UucGVlaygpLmlkKCk7CisgICAgaWYgKFN0eWxlQ29sb3I6OmlzQ29s
b3JLZXl3b3JkKGtleXdvcmQpKSB7CisgICAgICAgIGlmICghaXNWYWx1ZUFsbG93ZWRJbk1vZGUo
a2V5d29yZCwgY3NzUGFyc2VyTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIGNvbnN1bWVJZGVudChyYW5nZSk7CiAgICAgfQotICAgIENvbG9yIGNvbG9y
ID0gcGFyc2VIZXhDb2xvcihyYW5nZSwgYWNjZXB0UXVpcmt5Q29sb3JzKTsKLSAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKKyAgICBDb2xvciBjb2xvcjsKKyAgICBpZiAoYXV0byBwYXJzZWRDb2xv
ciA9IHBhcnNlSGV4Q29sb3IocmFuZ2UsIGFjY2VwdFF1aXJreUNvbG9ycykpCisgICAgICAgIGNv
bG9yID0gKnBhcnNlZENvbG9yOworICAgIGVsc2UgewogICAgICAgICBjb2xvciA9IHBhcnNlQ29s
b3JGdW5jdGlvbihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRWxlbWVudC5jcHAKaW5kZXggYTk3MGU2YWFhOGQ2ODc1NjZiNTMzN2YzYWNhNDliYmRi
ZmVkYzU2ZS4uZjE2Y2ZhNDYxN2M3ZDkzZTkwZTc0NjQyN2E0MGEyM2I3NDU4NDhlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKQEAgLTk3MywyOCArOTczLDQ3IEBAIHZvaWQgSFRN
TEVsZW1lbnQ6OmFkZEhUTUxMZW5ndGhUb1N0eWxlKE11dGFibGVTdHlsZVByb3BlcnRpZXMmIHN0
eWxlLCBDU1NQcm9wZXJ0CiAgICAgYWRkUHJvcGVydHlUb1ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKHN0eWxlLCBwcm9wZXJ0eUlELCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBTaW1wbGVDb2xvciBw
YXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29uc3QgU3RyaW5nJiBjb2xvclN0
cmluZykKKy8vIENvbG9yIHBhcnNpbmcgdGhhdCBtYXRjaGVzIEhUTUwncyAicnVsZXMgZm9yIHBh
cnNpbmcgYSBsZWdhY3kgY29sb3IgdmFsdWUiCisvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cu
b3JnLyNydWxlcy1mb3ItcGFyc2luZy1hLWxlZ2FjeS1jb2xvdXItdmFsdWUKK3N0YXRpYyBPcHRp
b25hbDxTaW1wbGVDb2xvcj4gcGFyc2VMZWdhY3lDb2xvclZhbHVlKFN0cmluZ1ZpZXcgc3RyaW5n
KQogeworICAgIC8vIEFuIGVtcHR5IHN0cmluZyBkb2Vzbid0IGFwcGx5IGEgY29sb3IuCisgICAg
aWYgKHN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBzdHJpbmcgPSBzdHJpbmcuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVy
cyhpc0hUTUxTcGFjZTxVQ2hhcj4pOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gQ29sb3I6OmJsYWNrOworCisgICAgLy8gInRyYW5zcGFyZW50IiBkb2Vzbid0IGFw
cGx5IGEgY29sb3IgZWl0aGVyLgorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShzdHJpbmcsICJ0cmFuc3BhcmVudCIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgaWYgKGF1dG8gbmFtZWRDb2xvciA9IENTU1BhcnNlcjo6cGFyc2VOYW1lZENvbG9yKHN0
cmluZykpCisgICAgICAgIHJldHVybiBuYW1lZENvbG9yOworCisgICAgaWYgKHN0cmluZy5sZW5n
dGgoKSA9PSA0ICYmIHN0cmluZ1swXSA9PSAnIycgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1sx
XSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1syXSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmlu
Z1szXSkpCisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodG9BU0NJSUhleFZhbHVlKHN0
cmluZ1sxXSkgKiAweDExLCB0b0FTQ0lJSGV4VmFsdWUoc3RyaW5nWzJdKSAqIDB4MTEsIHRvQVND
SUlIZXhWYWx1ZShzdHJpbmdbM10pICogMHgxMSk7CisKICAgICAvLyBQZXIgc3BlYywgb25seSBs
b29rIGF0IHRoZSBmaXJzdCAxMjggZGlnaXRzIG9mIHRoZSBzdHJpbmcuCi0gICAgY29uc3Qgc2l6
ZV90IG1heENvbG9yTGVuZ3RoID0gMTI4OwotICAgIC8vIFdlJ2xsIHBhZCB0aGUgYnVmZmVyIHdp
dGggdHdvIGV4dHJhIDBzIGxhdGVyLCBzbyByZXNlcnZlIHR3byBtb3JlIHRoYW4gdGhlIG1heC4K
LSAgICBWZWN0b3I8Y2hhciwgbWF4Q29sb3JMZW5ndGgrMj4gZGlnaXRCdWZmZXI7CisgICAgY29u
c3RleHByIHVuc2lnbmVkIG1heENvbG9yTGVuZ3RoID0gMTI4OwogCi0gICAgc2l6ZV90IGkgPSAw
OwotICAgIC8vIFNraXAgYSBsZWFkaW5nICMuCi0gICAgaWYgKGNvbG9yU3RyaW5nWzBdID09ICcj
JykKLSAgICAgICAgaSA9IDE7CisgICAgLy8gV2UnbGwgcGFkIHRoZSBidWZmZXIgd2l0aCB0d28g
ZXh0cmEgMHMgbGF0ZXIsIHNvIHJlc2VydmUgdHdvIG1vcmUgdGhhbiB0aGUgbWF4LgorICAgIFZl
Y3RvcjxjaGFyLCBtYXhDb2xvckxlbmd0aCArIDI+IGRpZ2l0QnVmZmVyOwogCiAgICAgLy8gR3Jh
YiB0aGUgZmlyc3QgMTI4IGNoYXJhY3RlcnMsIHJlcGxhY2luZyBub24taGV4IGNoYXJhY3RlcnMg
d2l0aCAwLgogICAgIC8vIE5vbi1CTVAgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCAiMDAi
IGR1ZSB0byB0aGVtIGFwcGVhcmluZyBhcyB0d28gImNoYXJhY3RlcnMiIGluIHRoZSBTdHJpbmcu
Ci0gICAgZm9yICg7IGkgPCBjb2xvclN0cmluZy5sZW5ndGgoKSAmJiBkaWdpdEJ1ZmZlci5zaXpl
KCkgPCBtYXhDb2xvckxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0
KGNvbG9yU3RyaW5nW2ldKSkKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBpZiAoc3RyaW5nWzBd
ID09ICcjJykgLy8gU2tpcCBhIGxlYWRpbmcgIy4KKyAgICAgICAgaSA9IDE7CisgICAgZm9yICg7
IGkgPCBzdHJpbmcubGVuZ3RoKCkgJiYgZGlnaXRCdWZmZXIuc2l6ZSgpIDwgbWF4Q29sb3JMZW5n
dGg7IGkrKykgeworICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChzdHJpbmdbaV0pKQogICAg
ICAgICAgICAgZGlnaXRCdWZmZXIuYXBwZW5kKCcwJyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGRpZ2l0QnVmZmVyLmFwcGVuZChjb2xvclN0cmluZ1tpXSk7CisgICAgICAgICAgICBkaWdp
dEJ1ZmZlci5hcHBlbmQoc3RyaW5nW2ldKTsKICAgICB9CiAKLSAgICBpZiAoIWRpZ2l0QnVmZmVy
LnNpemUoKSkKKyAgICBpZiAoZGlnaXRCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
Q29sb3I6OmJsYWNrOwogCiAgICAgLy8gUGFkIHRoZSBidWZmZXIgb3V0IHRvIGF0IGxlYXN0IHRo
ZSBuZXh0IG11bHRpcGxlIG9mIHRocmVlIGluIHNpemUuCkBAIC0xMDA2LDExICsxMDI1LDExIEBA
IHN0YXRpYyBTaW1wbGVDb2xvciBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMo
Y29uc3QgU3RyaW5nJiBjb2xvclN0cmluCiAKICAgICAvLyBTcGxpdCB0aGUgZGlnaXRzIGludG8g
dGhyZWUgY29tcG9uZW50cywgdGhlbiBzZWFyY2ggdGhlIGxhc3QgOCBkaWdpdHMgb2YgZWFjaCBj
b21wb25lbnQuCiAgICAgQVNTRVJUKGRpZ2l0QnVmZmVyLnNpemUoKSA+PSA2KTsKLSAgICBzaXpl
X3QgY29tcG9uZW50TGVuZ3RoID0gZGlnaXRCdWZmZXIuc2l6ZSgpIC8gMzsKLSAgICBzaXplX3Qg
Y29tcG9uZW50U2VhcmNoV2luZG93TGVuZ3RoID0gc3RkOjptaW48c2l6ZV90Pihjb21wb25lbnRM
ZW5ndGgsIDgpOwotICAgIHNpemVfdCByZWRJbmRleCA9IGNvbXBvbmVudExlbmd0aCAtIGNvbXBv
bmVudFNlYXJjaFdpbmRvd0xlbmd0aDsKLSAgICBzaXplX3QgZ3JlZW5JbmRleCA9IGNvbXBvbmVu
dExlbmd0aCAqIDIgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dMZW5ndGg7Ci0gICAgc2l6ZV90IGJs
dWVJbmRleCA9IGNvbXBvbmVudExlbmd0aCAqIDMgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dMZW5n
dGg7CisgICAgdW5zaWduZWQgY29tcG9uZW50TGVuZ3RoID0gZGlnaXRCdWZmZXIuc2l6ZSgpIC8g
MzsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRTZWFyY2hXaW5kb3dMZW5ndGggPSBzdGQ6Om1pbihj
b21wb25lbnRMZW5ndGgsIDhVKTsKKyAgICB1bnNpZ25lZCByZWRJbmRleCA9IGNvbXBvbmVudExl
bmd0aCAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aDsKKyAgICB1bnNpZ25lZCBncmVlbklu
ZGV4ID0gY29tcG9uZW50TGVuZ3RoICogMiAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aDsK
KyAgICB1bnNpZ25lZCBibHVlSW5kZXggPSBjb21wb25lbnRMZW5ndGggKiAzIC0gY29tcG9uZW50
U2VhcmNoV2luZG93TGVuZ3RoOwogICAgIC8vIFNraXAgZGlnaXRzIHVudGlsIG9uZSBvZiB0aGVt
IGlzIG5vbi16ZXJvLCBvciB3ZSd2ZSBvbmx5IGdvdCB0d28gZGlnaXRzIGxlZnQgaW4gdGhlIGNv
bXBvbmVudC4KICAgICB3aGlsZSAoZGlnaXRCdWZmZXJbcmVkSW5kZXhdID09ICcwJyAmJiBkaWdp
dEJ1ZmZlcltncmVlbkluZGV4XSA9PSAnMCcgJiYgZGlnaXRCdWZmZXJbYmx1ZUluZGV4XSA9PSAn
MCcgJiYgKGNvbXBvbmVudExlbmd0aCAtIHJlZEluZGV4KSA+IDIpIHsKICAgICAgICAgcmVkSW5k
ZXgrKzsKQEAgLTEwMjksMjggKzEwNDgsMTAgQEAgc3RhdGljIFNpbXBsZUNvbG9yIHBhcnNlQ29s
b3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW4KICAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJlZFZhbHVlLCBncmVlblZhbHVlLCBibHVlVmFsdWUp
OwogfQogCi0vLyBDb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hlcyBIVE1MJ3MgInJ1bGVzIGZvciBw
YXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgogdm9pZCBIVE1MRWxlbWVudDo6YWRkSFRNTENv
bG9yVG9TdHlsZShNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewotICAgIC8vIEFuIGVt
cHR5IHN0cmluZyBkb2Vzbid0IGFwcGx5IGEgY29sb3IuIChPbmUgY29udGFpbmluZyBvbmx5IHdo
aXRlc3BhY2UgZG9lcywgd2hpY2ggaXMgd2h5IHRoaXMgY2hlY2sgb2NjdXJzIGJlZm9yZSBzdHJp
cHBpbmcuKQotICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBjb2xvclN0cmluZyA9IGF0dHJpYnV0ZVZhbHVlLnN0cmlwV2hpdGVT
cGFjZSgpOwotCi0gICAgLy8gInRyYW5zcGFyZW50IiBkb2Vzbid0IGFwcGx5IGEgY29sb3IgZWl0
aGVyLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShjb2xvclN0cmluZywg
InRyYW5zcGFyZW50IikpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yOwotICAg
IC8vIFdlIGNhbid0IGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgQ29sb3IgY29uc3RydWN0b3IgYmVj
YXVzZSBpdCBhY2NlcHRzCi0gICAgLy8gNC84LWRpZ2l0IGhleCwgd2hpY2ggY29uZmxpY3Qgd2l0
aCBzb21lIGxlZ2FjeSBIVE1MIGNvbnRlbnQgdXNpbmcgYXR0cmlidXRlcy4KLSAgICBpZiAoKGNv
bG9yU3RyaW5nLmxlbmd0aCgpICE9IDUgJiYgY29sb3JTdHJpbmcubGVuZ3RoKCkgIT0gOSkgfHwg
Y29sb3JTdHJpbmdbMF0gIT0gJyMnKQotICAgICAgICBjb2xvciA9IENvbG9yKGNvbG9yU3RyaW5n
KTsKLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgY29sb3IgPSBDb2xvcihwYXJz
ZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3JTdHJpbmcpKTsKLQotICAgIHN0
eWxlLnNldFByb3BlcnR5KHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlQ29sb3JWYWx1ZShjb2xvcikpOworICAgIGlmIChhdXRvIGNvbG9yID0gcGFyc2VMZWdhY3lD
b2xvclZhbHVlKGF0dHJpYnV0ZVZhbHVlKSkKKyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkocHJv
cGVydHlJRCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKCpjb2xv
cikpOwogfQogCiBib29sIEhUTUxFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VNb3ZlRXZlbnRz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAppbmRleCA3ZjI3
NWQwYWVhN2JlMGU5NDIzNGIyZmMwNWRmNmY4NjMzYTI2YzI3Li4yYmI5M2RhMmUwNDc2YjI4MTM0
MzM2YmUzMzE0NTBhZTExYzgwMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCkBAIC01NCwxNyArNTQsMTUgQEAgYm9vbCBpc0N1cnJlbnRDb2xvclN0cmlu
Zyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJp
bmcmIGNvbG9yU3RyaW5nLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQogewogI2lmIEVOQUJMRShP
RkZTQ1JFRU5fQ0FOVkFTKQotICAgIGlmIChjYW52YXNCYXNlLmlzT2Zmc2NyZWVuQ2FudmFzKCkp
IHsKLSAgICAgICAgYXV0byYgY2FudmFzID0gZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzPihjYW52
YXNCYXNlKTsKLSAgICAgICAgcmV0dXJuIENTU1BhcnNlcjo6cGFyc2VDb2xvcldvcmtlclNhZmUo
Y29sb3JTdHJpbmcsIGNhbnZhcy5jc3NWYWx1ZVBvb2woKSk7Ci0gICAgfQorICAgIGlmIChjYW52
YXNCYXNlLmlzT2Zmc2NyZWVuQ2FudmFzKCkpCisgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OnBh
cnNlQ29sb3JXb3JrZXJTYWZlKGNvbG9yU3RyaW5nKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGNhbnZhc0Jhc2UpOwogI2VuZGlmCiAgICAgQ29sb3IgY29sb3IgPSBDU1NQYXJzZXI6OnBhcnNl
Q29sb3IoY29sb3JTdHJpbmcpOwogICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybiBjb2xvcjsKLSAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9yKGNvbG9y
U3RyaW5nLCBudWxscHRyKTsKKyAgICByZXR1cm4gQ1NTUGFyc2VyOjpwYXJzZVN5c3RlbUNvbG9y
KGNvbG9yU3RyaW5nKTsKIH0KIAogQ29sb3IgY3VycmVudENvbG9yKENhbnZhc0Jhc2UmIGNhbnZh
c0Jhc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXgg
MGQxNjY2NTU4Yjc4ZjBiN2RlNWY4ZDU2NGQ2NDM0NzY2ZmVlZDI1My4uNzY5ZDVhYmQzN2I3YTk1
ZTgwOWY4OThlZDcwMGQ3YWQ0ZDMwMTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9u
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJIYXNo
VG9vbHMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNTcsNDkg
KzU2LDYgQEAgaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29s
b3ImIGMyKQogICAgIHJldHVybiBkUiAqIGRSICsgZEcgKiBkRyArIGRCICogZEI7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGNoYXIgYnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2ggZm9y
IHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0
aCgpOwotICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKLSAgICAgICAgaWYgKCFjIHx8ICFXVEY6OmlzQVND
SUkoYykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYnVmZmVyW2ldID0g
dG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKLSAgICB9Ci0gICAgYnVmZmVyW2xl
bmd0aF0gPSAnXDAnOwotICAgIHJldHVybiBmaW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOwotfQot
Ci1Db2xvcjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChuYW1lWzBdID09
ICcjJykgewotICAgICAgICBPcHRpb25hbDxTaW1wbGVDb2xvcj4gY29sb3I7Ci0gICAgICAgIGlm
IChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgY29sb3IgPSBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNlSGV4Q29sb3Io
bmFtZS5jaGFyYWN0ZXJzMTYoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxKTsKLQotICAgICAgICBp
ZiAoY29sb3IpCi0gICAgICAgICAgICBzZXRTaW1wbGVDb2xvcigqY29sb3IpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkp
Ci0gICAgICAgICAgICBzZXRTaW1wbGVDb2xvcih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsK
LSAgICB9Ci19Ci0KLUNvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQotewotICAgIGlmIChu
YW1lWzBdID09ICcjJykgewotICAgICAgICBhdXRvIGNvbG9yID0gU2ltcGxlQ29sb3I6OnBhcnNl
SGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpz
dHJsZW4oJm5hbWVbMV0pKTsKLSAgICAgICAgaWYgKGNvbG9yKQotICAgICAgICAgICAgc2V0U2lt
cGxlQ29sb3IoKmNvbG9yKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5k
Q29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAgc2V0U2ltcGxlQ29sb3IoeyBmb3Vu
ZENvbG9yLT5BUkdCVmFsdWUgfSk7Ci19Ci0KIENvbG9yOjpDb2xvcihjb25zdCBDb2xvciYgb3Ro
ZXIpCiAgICAgOiBtX2NvbG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDk5NmQ5NWNjYTU5ZGY3MjU5NGJhZjdi
NmE1MDAyN2JjMzNhZjhmMmQuLjJhZjljNDRlYjcwZjRiNWI3ZmE3NzIxYTg3NzI1M2RjNzI4YmUz
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtOTQsOSAr
OTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZy
b21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7Ci0gICAgZXhwbGljaXQgQ29sb3IoY29uc3QgY2hh
ciopOwotCiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxp
ZFNpbXBsZUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBs
aWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAppbmRleCA0MDE2YzdmODU1ODZmYjk0NmYxNjJhMTZhNWJl
MDlhMDkxNjg0MDIwLi41NjE3ZmRiYmE5MGU2MTk1MTIyMTAzOThkNDMyZGY1ZTk2MmY4NGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3Bw
CkBAIC0xMzUsNzMgKzEzNSw0IEBAIFN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZv
clJlbmRlclRyZWVBc1RleHQoKSBjb25zdAogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4
KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNv
bXBvbmVudCgpLCAyKSk7CiB9CiAKLS8vIG9yaWdpbmFsbHkgbW92ZWQgaGVyZSBmcm9tIHRoZSBD
U1MgcGFyc2VyCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxp
bmUgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3JJbnRlcm5hbChjb25zdCBDaGFy
YWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKGxlbmd0aCAhPSAz
ICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYmIGxlbmd0aCAhPSA4KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHVuc2lnbmVkIHZhbHVlID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc0FTQ0lJSGV4
RGlnaXQobmFtZVtpXSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAg
ICB2YWx1ZSA8PD0gNDsKLSAgICAgICAgdmFsdWUgfD0gdG9BU0NJSUhleFZhbHVlKG5hbWVbaV0p
OwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDYpCi0gICAgICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OwotICAgIGlmIChsZW5ndGggPT0gOCkgewotICAgICAg
ICAvLyBXZSBwYXJzZWQgdGhlIHZhbHVlcyBpbnRvIFJHQkEgb3JkZXIsIGJ1dCB0aGUgU2ltcGxl
Q29sb3IgdHlwZQotICAgICAgICAvLyBleHBlY3RzIHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwg
c28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMuCi0gICAgICAgIHJldHVybiBTaW1wbGVDb2xv
ciB7IHZhbHVlIDw8IDI0IHwgdmFsdWUgPj4gOCB9OwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09
IDQpIHsKLSAgICAgICAgLy8gI2FiY2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gU2ltcGxlQ29s
b3IuCi0gICAgICAgIHJldHVybiBTaW1wbGVDb2xvciB7Ci0gICAgICAgICAgICAgICh2YWx1ZSAm
IDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0Ci0gICAgICAgICAgICB8ICh2YWx1ZSAm
IDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAotICAgICAgICAgICAgfCAodmFs
dWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQotICAgICAgICAgICAgfCAodmFsdWUg
JiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQKLSAgICAgICAgfTsKLSAgICB9Ci0gICAgLy8g
I2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCi0gICAgcmV0dXJuIFNpbXBsZUNvbG9yIHsKLSAgICAg
ICAgICAoMHhGRjAwMDAwMCkKLSAgICAgICAgfCAodmFsdWUgJiAweEYwMCkgPDwgMTIgfCAodmFs
dWUgJiAweEYwMCkgPDwgOAotICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIDw8IDggfCAodmFsdWUg
JiAweEYwKSA8PCA0Ci0gICAgICAgIHwgKHZhbHVlICYgMHhGKSA8PCA0IHwgKHZhbHVlICYgMHhG
KQotICAgIH07Ci19Ci0KLU9wdGlvbmFsPFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb25zdCBMQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBwYXJzZUhleENvbG9ySW50ZXJuYWwobmFtZSwgbGVuZ3RoKTsKLX0KLQotT3B0aW9uYWw8U2lt
cGxlQ29sb3I+IFNpbXBsZUNvbG9yOjpwYXJzZUhleENvbG9yKGNvbnN0IFVDaGFyKiBuYW1lLCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1l
LCBsZW5ndGgpOwotfQotCi1PcHRpb25hbDxTaW1wbGVDb2xvcj4gU2ltcGxlQ29sb3I6OnBhcnNl
SGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5h
bWUubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgaWYgKG5hbWUuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9y
KG5hbWUuY2hhcmFjdGVyczgoKSwgbmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSk7Ci19Ci0KLU9wdGlvbmFs
PFNpbXBsZUNvbG9yPiBTaW1wbGVDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3
JiBuYW1lKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKG5hbWUuaXM4
Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwg
bmFtZS5sZW5ndGgoKSk7Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJz
MTYoKSwgbmFtZS5sZW5ndGgoKSk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKaW5kZXggYWEy
YTIxY2FhMTc0NDk4Mjk4NjJkYzFlMmIxYTQxMDZiMDMyNzhmOC4uZmMwMjljNzY1MmJjNjA0ZjNh
OGYxMjc1MTIwMjUyNWY2NzRmMTYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5oCkBAIC03NCwxMSArNzQsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgT3B0aW9u
YWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1ZpZXcmKTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoY29uc3QgTENo
YXIqLCB1bnNpZ25lZCk7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhl
eENvbG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwotCiBwcml2YXRlOgogICAgIHVpbnQzMl90
IG1fdmFsdWUgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAppbmRleCBjOGZk
NWI4NzAyODA2ZWViOGQ5YTViNTA5NGFjNjFkOGE5MzgzYmNmLi4xMzhmYzJmZWE1Nzg4MmM3MzVl
NTgzMTJlM2JjMGY1OWNjYWEwODJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcApAQCAt
NjI1LDcgKzYyNSw3IEBAIHZvaWQgV0tCdW5kbGVQYWdlU2V0Q29tcG9zaXRpb24oV0tCdW5kbGVQ
YWdlUmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHRleHQsIGludCBmCiAgICAgICAgICAgICBoaWdo
bGlnaHRzLnVuY2hlY2tlZEFwcGVuZCh7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXJ0T2Zmc2V0KSwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhcnRPZmZzZXQgKyBzdGF0aWNfY2FzdDxBUEk6OlVJbnQ2NCo+KGRpY3Rpb25hcnktPmdl
dCgibGVuZ3RoIikpLT52YWx1ZSgpKSwKLSAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb2xvcihz
dGF0aWNfY2FzdDxBUEk6OlN0cmluZyo+KGRpY3Rpb25hcnktPmdldCgiY29sb3IiKSktPnN0cmlu
ZygpKQorICAgICAgICAgICAgICAgIFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcihzdGF0
aWNfY2FzdDxBUEk6OlN0cmluZyo+KGRpY3Rpb25hcnktPmdldCgiY29sb3IiKSktPnN0cmluZygp
KQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="review"
          id="415634"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>