<?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>174312</bug_id>
          
          <creation_ts>2017-07-10 08:47:36 -0700</creation_ts>
          <short_desc>Factor common code in Style::*ChangeInvalidation into helper functions</short_desc>
          <delta_ts>2017-08-03 07:46:48 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1327015</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-07-10 08:47:36 -0700</bug_when>
    <thetext>There is a lot of copy code here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327038</commentid>
    <comment_count>1</comment_count>
      <attachid>314990</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-07-10 09:25:47 -0700</bug_when>
    <thetext>Created attachment 314990
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327048</commentid>
    <comment_count>2</comment_count>
      <attachid>314993</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-07-10 09:53:49 -0700</bug_when>
    <thetext>Created attachment 314993
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327384</commentid>
    <comment_count>3</comment_count>
      <attachid>314993</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2017-07-10 22:18:57 -0700</bug_when>
    <thetext>Comment on attachment 314993
patch

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

r=me

&gt; Source/WebCore/style/StyleInvalidationFunctions.h:38
&gt; +template &lt;typename Function&gt;
&gt; +inline void traverseRuleFeaturesInShadowTree(Element&amp; element, Function&amp;&amp; function)

Does the Function argument need to be templated when you&apos;re only ever using it to pass a void(RuleFeatureSet&amp;,bool)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334757</commentid>
    <comment_count>4</comment_count>
      <attachid>317117</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 06:23:55 -0700</bug_when>
    <thetext>Created attachment 317117
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334758</commentid>
    <comment_count>5</comment_count>
      <attachid>317118</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-08-03 06:25:17 -0700</bug_when>
    <thetext>Created attachment 317118
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334772</commentid>
    <comment_count>6</comment_count>
      <attachid>317118</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-03 07:45:34 -0700</bug_when>
    <thetext>Comment on attachment 317118
patch

Clearing flags on attachment: 317118

Committed r220204: &lt;http://trac.webkit.org/changeset/220204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334773</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-03 07:45:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334774</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-03 07:46:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/33699837&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314990</attachid>
            <date>2017-07-10 09:25:47 -0700</date>
            <delta_ts>2017-07-10 09:53:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-common.patch</filename>
            <type>text/plain</type>
            <size>19100</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA3LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgY29tbW9uIGNvZGUg
aW4gU3R5bGU6OipDaGFuZ2VJbnZhbGlkYXRpb24gaW50byBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzMTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBpcyBhIGxv
dCBvZiBjb3B5IGNvZGUgaGVyZS4KKworICAgICAgICAqIFN0eWxlL1N0eWxlSW52YWxpZGF0aW9u
RnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZlcnNlU3R5
bGVBZmZlY3RpbmdIb3N0UnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZl
cnNlU3R5bGVBZmZlY3RpbmdTbG90dGVkUnVsZVNldHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OnRyYXZlcnNlU3R5bGVBZmZlY3RpbmdSdWxlU2V0cyk6CisKKyAgICAgICAgICAgIEFkZCBm
dW5jdGlvbnMgZm9yIHRyYXZlcnNpbmcgcnVsZXNldHMgdGhhdCBtYXkgYWZmZWN0IHN0eWxlLgor
ICAgICAgICAgICAgVXNlIGxhbWJkYXMgdG8gaW1wbGVtZW50IGNsaWVudC1zcGVjaWZpYyBiZWhh
dmlvci4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBzdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6Om1heUJlQWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1heUJlQWZmZWN0ZWRCeUhvc3RSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5U2xv
dHRlZFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZl
Y3RlZEJ5SG9zdFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlC
ZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJZENoYW5nZUlu
dmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpt
YXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6Om1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyk6IERlbGV0ZWQuCisKIDIwMTctMDctMTAg
IERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHIyMTg2MTYpOiBDYW5ub3QgYnVpbGQgV2ViQ29yZSBmb3IgbWFjT1MgMTAuMTIgd2l0aCBtYWNP
UyAxMC4xMyBTREsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1N0eWxlL1N0eWxlSW52YWxpZGF0aW9u
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU3R5bGUvU3R5bGVJbnZh
bGlkYXRpb25GdW5jdGlvbnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9TdHls
ZS9TdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRG9jdW1l
bnRSdWxlU2V0cy5oIgorI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgorI2luY2x1ZGUgIlNo
YWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU3R5bGVT
Y29wZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIHRyYXZlcnNlU3R5bGVBZmZl
Y3RpbmdIb3N0UnVsZVNldHMoRWxlbWVudCYgZWxlbWVudCwgRnVuY3Rpb24mJiBmdW5jdGlvbikK
K3sKKyAgICBpZiAoIWVsZW1lbnQuc2hhZG93Um9vdCgpKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byYgc2hhZG93UnVsZVNldHMgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKS0+c3R5bGVTY29wZSgp
LnJlc29sdmVyKCkucnVsZVNldHMoKTsKKyAgICBhdXRvJiBhdXRob3JTdHlsZSA9IHNoYWRvd1J1
bGVTZXRzLmF1dGhvclN0eWxlKCk7CisgICAgYm9vbCBoYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01h
dGNoaW5nSW5TaGFkb3dUcmVlID0gYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNN
YXRjaGluZ0luU2hhZG93VHJlZSgpOworICAgIGlmIChhdXRob3JTdHlsZS5ob3N0UHNldWRvQ2xh
c3NSdWxlcygpLmlzRW1wdHkoKSAmJiAhaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0lu
U2hhZG93VHJlZSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ1bmN0aW9uKHNoYWRvd1J1bGVTZXRz
LCBoYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVyc2VTdHlsZUFmZmVj
dGluZ1Nsb3R0ZWRSdWxlU2V0cyhFbGVtZW50JiBlbGVtZW50LCBGdW5jdGlvbiYmIGZ1bmN0aW9u
KQoreworICAgIGF1dG8gYXNzaWduZWRTaGFkb3dSb290cyA9IGFzc2lnbmVkU2hhZG93Um9vdHNJ
ZlNsb3R0ZWQoZWxlbWVudCk7CisgICAgZm9yIChhdXRvJiBhc3NpZ25lZFNoYWRvd1Jvb3QgOiBh
c3NpZ25lZFNoYWRvd1Jvb3RzKSB7CisgICAgICAgIGF1dG8mIHJ1bGVTZXRzID0gYXNzaWduZWRT
aGFkb3dSb290LT5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKS5ydWxlU2V0cygpOworICAgICAgICBp
ZiAocnVsZVNldHMuYXV0aG9yU3R5bGUoKS5zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZ1bmN0aW9uKHJ1bGVTZXRz
LCBpczxIVE1MU2xvdEVsZW1lbnQ+KGVsZW1lbnQpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lkIHRyYXZlcnNlU3R5bGVBZmZlY3RpbmdSdWxl
U2V0cyhFbGVtZW50JiBlbGVtZW50LCBGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIGF1dG8m
IHJ1bGVTZXRzID0gZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKKyAgICBib29s
IG1heUFmZmVjdFNoYWRvd1RyZWUgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKSAmJiBydWxlU2V0cy5h
dXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpOworCisgICAgZnVuY3Rp
b24ocnVsZVNldHMsIG1heUFmZmVjdFNoYWRvd1RyZWUpOworCisgICAgdHJhdmVyc2VTdHlsZUFm
ZmVjdGluZ0hvc3RSdWxlU2V0cyhlbGVtZW50LCBmdW5jdGlvbik7CisgICAgdHJhdmVyc2VTdHls
ZUFmZmVjdGluZ1Nsb3R0ZWRSdWxlU2V0cyhlbGVtZW50LCBmdW5jdGlvbik7Cit9CisKK30KK30K
KwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjE5Mjg4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ1Niw2ICsxNTQ1Niw3
IEBACiAJCUU0OUJEQTBBMTMxRkQzRTUwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTVmFsdWVQb29sLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBMDA3ODIxQjgyMEVDODAwMkM1QTZFIC8qIERhdGFV
UkxEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFVUkxEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTAwNzg0MUI4MjBFRDMwMDJD
NUE2RSAvKiBEYXRhVVJMRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRhVVJMRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0QTE4MjJGMUYxM0JFNTgwMEZFRjY5OCAvKiBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oOyBwYXRoID0gU3R5
bGUvU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OwogCQlFNEE4MTREMzFDNkRFQzQwMDBCRjg1QUMgLyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xhc3NDaGFuZ2VJbnZhbGlk
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBODE0RDUxQzZERUU4RDAw
QkY4NUFDIC8qIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBODE0RDcxQzcwRTEwNTAwQkY4NUFDIC8qIEF0dHJpYnV0
ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ5NjgsNiArMjQ5NjksNyBAQAogCQkJCUU0MDFFMEEzMUMzQzBCODMwMEYz
NEQxMCAvKiBTdHlsZUNoYW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAv
KiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlFNEQ1OEVCNzE3QjRFRDg5MDBD
QkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICovLAorCQkJCUU0QTE4MjJGMUYxM0JF
NTgwMEZFRjY5OCAvKiBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oICovLAogCQkJCUU0N0E5
N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmNwcCAqLywKIAkJCQlFNDdB
OTdDRjE2MzA1OUZDMDA1RENEOTkgLyogU3R5bGVJbnZhbGlkYXRvci5oICovLAogCQkJCUU0REFD
RTZCMUQxMkUxMTYwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNvdXJjZXMuY3BwICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCShyZXZpc2lvbiAyMTkyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRy
aWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlSW52YWxpZGF0
aW9uRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRvci5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCkBAIC0zNyw3MSArMzgs
MzQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLXN0YXRpYyBi
b29sIG1heUJlQWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZShEb2N1bWVudFJ1bGVTZXRzJiBydWxl
U2V0cywgYm9vbCBpc0hUTUwsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCitz
dGF0aWMgYm9vbCBtYXlCZUFmZmVjdGVkQnlBdHRyaWJ1dGVDaGFuZ2UoY29uc3QgRG9jdW1lbnRS
dWxlU2V0cyYgcnVsZVNldHMsIGJvb2wgaXNIVE1MLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKQogewogICAgIGF1dG8mIG5hbWVTZXQgPSBpc0hUTUwgPyBydWxlU2V0cy5mZWF0
dXJlcygpLmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVzIDogcnVsZVNldHMuZmVh
dHVyZXMoKS5hdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlczsKICAgICByZXR1cm4gbmFtZVNldC5j
b250YWlucyhhdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpKTsKIH0KIAotc3RhdGljIGJvb2wgbWF5
QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGJvb2wmIG1heUFmZmVjdFNoYWRvd1RyZWUpCi17Ci0g
ICAgLy8gRklYTUU6IE1vcmUgb2YgdGhpcyBjb2RlIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBD
bGFzcy9BdHRyaWJ1dGUvSWRJbnZhbGlkYXRpb24uCi0gICAgYXV0byogc2hhZG93Um9vdCA9IGVs
ZW1lbnQuc2hhZG93Um9vdCgpOwotICAgIGlmICghc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29w
ZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICBhdXRvJiBhdXRob3JTdHlsZSA9IHNoYWRv
d1J1bGVTZXRzLmF1dGhvclN0eWxlKCk7Ci0gICAgaWYgKGF1dGhvclN0eWxlLmhvc3RQc2V1ZG9D
bGFzc1J1bGVzKCkuaXNFbXB0eSgpICYmICFhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NS
dWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghbWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHNoYWRvd1J1bGVTZXRzLCBlbGVt
ZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0cmlidXRlTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5n
SW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBtYXlCZUFmZmVjdGVkQnlTbG90dGVkUnVs
ZXMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSkKLXsKLSAgICBmb3IgKGF1dG8qIHNoYWRvd1Jvb3QgOiBhc3NpZ25lZFNoYWRvd1Jvb3Rz
SWZTbG90dGVkKGVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJ1bGVTZXRzID0gc2hhZG93Um9v
dC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICAgICAgaWYgKHJ1bGVT
ZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAobWF5QmVBZmZlY3RlZEJ5QXR0cmli
dXRlQ2hhbmdlKHJ1bGVTZXRzLCBlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0cmlidXRlTmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
VmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7CiAgICAgaWYgKG5ld1ZhbHVl
ID09IG9sZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBydWxlU2V0cyA9IG1f
ZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKICAgICBib29sIGlzSFRNTCA9IG1f
ZWxlbWVudC5pc0hUTUxFbGVtZW50KCk7CisKKyAgICBib29sIG1heUFmZmVjdFN0eWxlID0gZmFs
c2U7CiAgICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7CiAKLSAgICBib29sIG1h
eUFmZmVjdFN0eWxlID0gbWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHJ1bGVTZXRzLCBp
c0hUTUwsIGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeUhvc3RSdWxl
cyhtX2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIG1heUFmZmVjdFNoYWRvd1RyZWUpCi0gICAgICAg
IHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhtX2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUp
OworICAgIHRyYXZlcnNlU3R5bGVBZmZlY3RpbmdSdWxlU2V0cyhtX2VsZW1lbnQsIFsmXSAoY29u
c3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMsIGJvb2wgbWF5TWF0Y2hJblNoYWRvd1RyZWUp
IHsKKyAgICAgICAgaWYgKCFtYXlCZUFmZmVjdGVkQnlBdHRyaWJ1dGVDaGFuZ2UocnVsZVNldHMs
IGlzSFRNTCwgYXR0cmlidXRlTmFtZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1h
eUFmZmVjdFN0eWxlID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1heU1hdGNoSW5TaGFkb3dUcmVlKQor
ICAgICAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7CisgICAgfSk7CiAKICAgICBp
ZiAoIW1heUFmZmVjdFN0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWlzSFRNTCkg
ewotICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fZWxlbWVudC5zaGFkb3dSb290KCkgJiYgcnVs
ZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSkKLSAgICAg
ICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7Ci0KLSAgICBpZiAoaXM8SFRNTFNsb3RFbGVt
ZW50PihtX2VsZW1lbnQpICYmICFydWxlU2V0cy5hdXRob3JTdHlsZSgpLnNsb3R0ZWRQc2V1ZG9F
bGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0
cnVlOwotCi0gICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUpIHsKKyAgICBpZiAoIWlzSFRNTCB8
fCBtYXlBZmZlY3RTaGFkb3dUcmVlKSB7CiAgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5
bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTEsNiArNzUsNyBA
QCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpCiAgICAgaWYgKCFjaGls
ZHJlbk9mVHlwZTxFbGVtZW50PihtX2VsZW1lbnQpLmZpcnN0KCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0
cygpOwogICAgIGF1dG8qIGF0dHJpYnV0ZVJ1bGVzID0gcnVsZVNldHMuYW5jZXN0b3JBdHRyaWJ1
dGVSdWxlc0ZvckhUTUwoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSk7CiAgICAgaWYgKCFhdHRy
aWJ1dGVSdWxlcykKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
Q2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE5Mjg4KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKKyNp
bmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlSW52
YWxpZGF0b3IuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVT
Y29wZS5oIgpAQCAtODcsNjMgKzg4LDI2IEBAIHN0YXRpYyBDbGFzc0NoYW5nZVZlY3RvciBjb21w
dXRlQ2xhc3NDaGEKICAgICByZXR1cm4gY2hhbmdlZENsYXNzZXM7CiB9CiAKLXN0YXRpYyBib29s
IG1heUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyhTaGFkb3dSb290KiBzaGFkb3dSb290LCBBdG9taWNT
dHJpbmdJbXBsKiBjaGFuZ2VkQ2xhc3MsIGJvb2wmIG1heUFmZmVjdFNoYWRvd1RyZWUpCi17Ci0g
ICAgLy8gRklYTUU6IE1vcmUgb2YgdGhpcyBjb2RlIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBD
bGFzcy9BdHRyaWJ1dGUvSWRJbnZhbGlkYXRpb24uCi0gICAgaWYgKCFzaGFkb3dSb290KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byYgc2hhZG93UnVsZVNldHMgPSBzaGFkb3dSb290
LT5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKS5ydWxlU2V0cygpOwotICAgIGF1dG8mIGF1dGhvclN0
eWxlID0gc2hhZG93UnVsZVNldHMuYXV0aG9yU3R5bGUoKTsKLSAgICBpZiAoYXV0aG9yU3R5bGUu
aG9zdFBzZXVkb0NsYXNzUnVsZXMoKS5pc0VtcHR5KCkgJiYgIWF1dGhvclN0eWxlLmhhc0hvc3RQ
c2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFzaGFkb3dSdWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVz
LmNvbnRhaW5zKGNoYW5nZWRDbGFzcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVl
KCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgYm9vbCBtYXlCZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMoY29uc3QgVmVj
dG9yPFNoYWRvd1Jvb3QqPiYgYXNzaWduZWRTaGFkb3dSb290cywgQXRvbWljU3RyaW5nSW1wbCog
Y2hhbmdlZENsYXNzKQotewotICAgIGZvciAoYXV0byYgYXNzaWduZWRTaGFkb3dSb290IDogYXNz
aWduZWRTaGFkb3dSb290cykgewotICAgICAgICBhdXRvJiBydWxlU2V0cyA9IGFzc2lnbmVkU2hh
ZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICAgICAgaWYg
KHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocnVsZVNldHMuZmVhdHVy
ZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBDbGFzc0No
YW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IG9sZENsYXNzZXMsIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMpCiB7CiAgICAg
YXV0byBjaGFuZ2VkQ2xhc3NlcyA9IGNvbXB1dGVDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBuZXdD
bGFzc2VzKTsKLSAgICBib29sIG1heUFmZmVjdFNoYWRvd1RyZWUgPSBmYWxzZTsKLQotICAgIGF1
dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwotICAg
IGF1dG8qIHNoYWRvd1Jvb3QgPSBtX2VsZW1lbnQuc2hhZG93Um9vdCgpOwotICAgIGF1dG8gYXNz
aWduZWRTaGFkb3dSb290cyA9IGFzc2lnbmVkU2hhZG93Um9vdHNJZlNsb3R0ZWQobV9lbGVtZW50
KTsKIAogICAgIENsYXNzQ2hhbmdlVmVjdG9yIGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGU7
Ci0gICAgZm9yIChhdXRvKiBjaGFuZ2VkQ2xhc3MgOiBjaGFuZ2VkQ2xhc3NlcykgewotICAgICAg
ICBib29sIG1heUFmZmVjdFN0eWxlID0gcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxl
cy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpCi0gICAgICAgICAgICB8fCBtYXlCZUFmZmVjdGVkQnlI
b3N0UnVsZXMoc2hhZG93Um9vdCwgY2hhbmdlZENsYXNzLCBtYXlBZmZlY3RTaGFkb3dUcmVlKQot
ICAgICAgICAgICAgfHwgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGFzc2lnbmVkU2hhZG93
Um9vdHMsIGNoYW5nZWRDbGFzcyk7Ci0gICAgICAgIGlmIChtYXlBZmZlY3RTdHlsZSkKKyAgICBi
b29sIG1heUFmZmVjdFNoYWRvd1RyZWUgPSBmYWxzZTsKKworICAgIHRyYXZlcnNlU3R5bGVBZmZl
Y3RpbmdSdWxlU2V0cyhtX2VsZW1lbnQsIFsmXSAoY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVs
ZVNldHMsIGJvb2wgbWF5TWF0Y2hJblNoYWRvd1RyZWUpIHsKKyAgICAgICAgZm9yIChhdXRvKiBj
aGFuZ2VkQ2xhc3MgOiBjaGFuZ2VkQ2xhc3NlcykgeworICAgICAgICAgICAgaWYgKCFydWxlU2V0
cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRDbGFzcykpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGlu
Z1N0eWxlLmFwcGVuZChjaGFuZ2VkQ2xhc3MpOwotICAgIH07CisgICAgICAgICAgICBpZiAobWF5
TWF0Y2hJblNoYWRvd1RyZWUpCisgICAgICAgICAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9KTsKIAogICAgIGlmIChjaGFuZ2VkQ2xhc3Nlc0FmZmVj
dGluZ1N0eWxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNoYWRvd1Jv
b3QgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMo
KSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7Ci0KLSAgICBpZiAoaXM8SFRN
TFNsb3RFbGVtZW50PihtX2VsZW1lbnQpICYmICFydWxlU2V0cy5hdXRob3JTdHlsZSgpLnNsb3R0
ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRv
d1RyZWUgPSB0cnVlOwotCiAgICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUpIHsKICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkbyBmaW5lLWdyYWluZWQgaW52YWxpZGF0aW9uIGZvciBzaGFk
b3cgdHJlZS4KICAgICAgICAgbV9lbGVtZW50LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsK
QEAgLTE1NSw2ICsxMTksNyBAQCB2b2lkIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlk
YXRlCiAgICAgaWYgKCFjaGlsZHJlbk9mVHlwZTxFbGVtZW50PihtX2VsZW1lbnQpLmZpcnN0KCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxl
UmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hh
bmdlZENsYXNzZXNBZmZlY3RpbmdTdHlsZSkgewogICAgICAgICBhdXRvKiBhbmNlc3RvckNsYXNz
UnVsZXMgPSBydWxlU2V0cy5hbmNlc3RvckNsYXNzUnVsZXMoY2hhbmdlZENsYXNzKTsKICAgICAg
ICAgaWYgKCFhbmNlc3RvckNsYXNzUnVsZXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9J
ZENoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMTkyODgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYzICszMCwzMyBAQAogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1
ZGUgIlN0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgY2hhbmdlZElkLCBib29s
JiBtYXlBZmZlY3RTaGFkb3dUcmVlKQotewotICAgIGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50
LnNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoIXNoYWRvd1Jvb3QpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5y
ZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgYXV0byYgYXV0aG9yU3R5bGUgPSBzaGFkb3dSdWxl
U2V0cy5hdXRob3JTdHlsZSgpOwotICAgIGlmIChhdXRob3JTdHlsZS5ob3N0UHNldWRvQ2xhc3NS
dWxlcygpLmlzRW1wdHkoKSAmJiAhYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNN
YXRjaGluZ0luU2hhZG93VHJlZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IXNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhjaGFuZ2VkSWQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBz
ZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpKQotICAgICAgICBtYXlBZmZlY3RT
aGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5
QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgY2hhbmdlZElkKQotewotICAgIGZvciAoYXV0byogc2hhZG93Um9vdCA6IGFz
c2lnbmVkU2hhZG93Um9vdHNJZlNsb3R0ZWQoZWxlbWVudCkpIHsKLSAgICAgICAgYXV0byYgcnVs
ZVNldHMgPSBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKS5ydWxlU2V0cygpOwot
ICAgICAgICBpZiAocnVsZVNldHMuYXV0aG9yU3R5bGUoKS5zbG90dGVkUHNldWRvRWxlbWVudFJ1
bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydWxl
U2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgSWRD
aGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIGNo
YW5nZWRJZCkKIHsKICAgICBpZiAoY2hhbmdlZElkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byYgcnVsZVNldHMgPSBtX2VsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVT
ZXRzKCk7CisKKyAgICBib29sIG1heUFmZmVjdFN0eWxlID0gZmFsc2U7CiAgICAgYm9vbCBtYXlB
ZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7CiAKLSAgICBib29sIG1heUFmZmVjdFN0eWxlID0gcnVs
ZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRJZCkKLSAgICAgICAg
fHwgbWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKG1fZWxlbWVudCwgY2hhbmdlZElkLCBtYXlBZmZl
Y3RTaGFkb3dUcmVlKQotICAgICAgICB8fCBtYXlCZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMobV9l
bGVtZW50LCBjaGFuZ2VkSWQpOworICAgIHRyYXZlcnNlU3R5bGVBZmZlY3RpbmdSdWxlU2V0cyht
X2VsZW1lbnQsIFsmXSAoY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMsIGJvb2wgbWF5
TWF0Y2hJblNoYWRvd1RyZWUpIHsKKyAgICAgICAgaWYgKCFydWxlU2V0cy5mZWF0dXJlcygpLmlk
c0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbWF5QWZmZWN0U3R5bGUgPSB0cnVlOworICAgICAgICBpZiAobWF5TWF0Y2hJblNoYWRvd1Ry
ZWUpCisgICAgICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKKyAgICB9KTsKIAog
ICAgIGlmICghbWF5QWZmZWN0U3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2Vs
ZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuaGFzU2hhZG93UHNl
dWRvRWxlbWVudFJ1bGVzKCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwot
Ci0gICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obV9lbGVtZW50KSAmJiAhcnVsZVNldHMuYXV0
aG9yU3R5bGUoKS5zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgpKQotICAgICAg
ICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQogICAgIGlmIChtYXlBZmZlY3RTaGFkb3dU
cmVlKSB7CiAgICAgICAgIG1fZWxlbWVudC5pbnZhbGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTk2LDYgKzY2LDcgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZVN0eQogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSBlYXNpbHkgb3B0aW1pemVk
IGZvciBmaW5lLWdyYWluZWQgZGVzY2VuZGFudCBpbnZhbGlkYXRpb24gc2ltaWxhciB0byBDbGFz
c0NoYW5nZUludmFsaWRhdGlvbi4KICAgICAvLyBIb3dldmVyIHVzaW5nIGlkcyBmb3IgZHluYW1p
YyBzdHlsaW5nIGlzIHJhcmUgYW5kIHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBtZW1v
cnkgY29zdCBvZiB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIGF1dG8mIHJ1bGVT
ZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogICAgIGJvb2wgbWF5
QWZmZWN0RGVzY2VuZGFudFN0eWxlID0gcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNNYXRjaGluZ0Fu
Y2VzdG9yc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKTsKICAgICBpZiAobWF5QWZmZWN0RGVz
Y2VuZGFudFN0eWxlKQogICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJl
ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314993</attachid>
            <date>2017-07-10 09:53:49 -0700</date>
            <delta_ts>2017-08-03 06:23:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-common-2.patch</filename>
            <type>text/plain</type>
            <size>21286</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA3LTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgY29tbW9uIGNvZGUg
aW4gU3R5bGU6OipDaGFuZ2VJbnZhbGlkYXRpb24gaW50byBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzMTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBpcyBhIGxv
dCBvZiBjb3B5IGNvZGUgaGVyZS4KKworICAgICAgICAqIFN0eWxlL1N0eWxlSW52YWxpZGF0aW9u
RnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZlcnNlUnVs
ZUZlYXR1cmVzSW5TaGFkb3dUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjp0cmF2ZXJz
ZVJ1bGVGZWF0dXJlc0ZvclNsb3R0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZl
cnNlUnVsZUZlYXR1cmVzKToKKworICAgICAgICAgICAgQWRkIGZ1bmN0aW9ucyBmb3IgdHJhdmVy
c2luZyBydWxlIGZlYXR1cmVzIHRoYXQgbWF5IGFmZmVjdCBzdHlsZSBvZiBhbiBlbGVtZW50Lgor
ICAgICAgICAgICAgVXNlIGxhbWJkYXMgdG8gaW1wbGVtZW50IGNsaWVudC1zcGVjaWZpYyBiZWhh
dmlvci4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBzdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6Om1heUJlQWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uOjppbnZhbGlkYXRl
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1heUJlQWZmZWN0ZWRCeUhvc3RSdWxl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5U2xv
dHRlZFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Q2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZl
Y3RlZEJ5SG9zdFJ1bGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlC
ZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpJZENoYW5nZUlu
dmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpt
YXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6Om1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyk6IERlbGV0ZWQuCisKIDIwMTctMDctMTAg
IERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHIyMTg2MTYpOiBDYW5ub3QgYnVpbGQgV2ViQ29yZSBmb3IgbWFjT1MgMTAuMTIgd2l0aCBtYWNP
UyAxMC4xMyBTREsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxOTI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjgwOSw2
ICs2ODA5LDcgQEAKIAkJRTQ2QTJCMUMxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ2QTJCMUIxN0NBNjVCOTAwMERCQ0Q4IC8qIFR5cGVkRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hpbGRJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QTJCMUQx
N0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2QjQxRjkxQ0IyNEU3MDAwOEYx
MURFIC8qIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2QjQxRjgxQ0IyNEU3MDAwOEYxMURFIC8qIE5vRXZl
bnREaXNwYXRjaEFzc2VydGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUU0NkM3OTRCMUYxM0U4MkIwMEYzNzFFMSAvKiBTdHlsZUludmFsaWRh
dGlvbkZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRBMTgyMkYxRjEzQkU1ODAwRkVGNjk4IC8qIFN0eWxlSW52YWxpZGF0aW9uRnVuY3Rp
b25zLmggKi87IH07CiAJCUU0NzEyN0NBMTYzNDM4QTEwMEVENkY1QSAvKiBTdHlsZUludmFsaWRh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
N0E5N0NFMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmNwcCAqLzsgfTsKIAkJ
RTQ3MTI3Q0IxNjM0MzhBRTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0E5N0NGMTYzMDU5RkMwMDVE
Q0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi87IH07CiAJCUU0Nzc4QjdGMTE1QTU4MUEwMEI1
RDM3MiAvKiBKU0N1c3RvbUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0Nzc4QjdEMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50
LmNwcCAqLzsgfTsKQEAgLTE1NDU2LDYgKzE1NDU3LDcgQEAKIAkJRTQ5QkRBMEExMzFGRDNFNTAw
M0M1NkYwIC8qIENTU1ZhbHVlUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NWYWx1ZVBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEEwMDc4MjFCODIwRUM4MDAyQzVBNkUgLyogRGF0YVVSTERlY29kZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVVSTERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRBMDA3ODQxQjgyMEVEMzAwMkM1QTZFIC8qIERhdGFVUkxEZWNvZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFVUkxEZWNvZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBMTgyMkYxRjEzQkU1ODAwRkVGNjk4
IC8qIFN0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlSW52
YWxpZGF0aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTgx
NEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEE4MTRENTFDNkRFRThEMDBCRjg1QUMgLyogQ2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEE4MTRENzFDNzBFMTA1MDBCRjg1QUMgLyogQXR0cmlidXRlQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0dHJpYnV0
ZUNoYW5nZUludmFsaWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NDk2OCw2ICsyNDk3MCw3IEBACiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0eWxl
Q2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNp
emVGdW5jdGlvbnMuY3BwICovLAogCQkJCUU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHls
ZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTRBMTgyMkYxRjEzQkU1ODAwRkVGNjk4IC8q
IFN0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmggKi8sCiAJCQkJRTQ3QTk3Q0UxNjMwNTlGQzAw
NURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovLAogCQkJCUU0N0E5N0NGMTYzMDU5RkMw
MDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdG9yLmggKi8sCiAJCQkJRTREQUNFNkIxRDEyRTExNjAw
NzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAgKi8sCkBAIC0yODcyNSw2ICsyODcy
OCw3IEBACiAJCQkJNUVCQjg5MzcxQzc3NzgyOTAwQzY1RDQxIC8qIE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTE2QTJFNDFCRkE2NTBCMDAyOUEyMUUg
LyogTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RUJC
ODkzMjFDNzc3ODIzMDBDNjVENDEgLyogTWVkaWFFbmRwb2ludFNlc3Npb25Db25maWd1cmF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDZDNzk0QjFGMTNFODJCMDBGMzcxRTEgLyogU3R5bGVJ
bnZhbGlkYXRpb25GdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVFNEVBQjA0MUQwNzE2
NkEwMDA2QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDQ2MTNBRDBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFFcnJvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5h
bWVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0F0dHJpYnV0
ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjE5Mjg4KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsODIgKzI2LDQxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVu
dFJ1bGVTZXRzLmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSFRN
TFNsb3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxl
SW52YWxpZGF0aW9uRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRvci5oIgot
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLXN0YXRpYyBib29sIG1heUJl
QWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZShEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cywgYm9v
bCBpc0hUTUwsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCitzdGF0aWMgYm9v
bCBtYXlCZUFmZmVjdGVkQnlBdHRyaWJ1dGVDaGFuZ2UoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZl
YXR1cmVzLCBib29sIGlzSFRNTCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkK
IHsKLSAgICBhdXRvJiBuYW1lU2V0ID0gaXNIVE1MID8gcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRy
aWJ1dGVDYW5vbmljYWxMb2NhbE5hbWVzSW5SdWxlcyA6IHJ1bGVTZXRzLmZlYXR1cmVzKCkuYXR0
cmlidXRlTG9jYWxOYW1lc0luUnVsZXM7CisgICAgYXV0byYgbmFtZVNldCA9IGlzSFRNTCA/IGZl
YXR1cmVzLmF0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZXNJblJ1bGVzIDogZmVhdHVyZXMuYXR0
cmlidXRlTG9jYWxOYW1lc0luUnVsZXM7CiAgICAgcmV0dXJuIG5hbWVTZXQuY29udGFpbnMoYXR0
cmlidXRlTmFtZS5sb2NhbE5hbWUoKSk7CiB9CiAKLXN0YXRpYyBib29sIG1heUJlQWZmZWN0ZWRC
eUhvc3RSdWxlcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQotewotICAgIC8vIEZJWE1F
OiBNb3JlIG9mIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gQ2xhc3MvQXR0cmli
dXRlL0lkSW52YWxpZGF0aW9uLgotICAgIGF1dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRv
d1Jvb3QoKTsKLSAgICBpZiAoIXNoYWRvd1Jvb3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZl
cigpLnJ1bGVTZXRzKCk7Ci0gICAgYXV0byYgYXV0aG9yU3R5bGUgPSBzaGFkb3dSdWxlU2V0cy5h
dXRob3JTdHlsZSgpOwotICAgIGlmIChhdXRob3JTdHlsZS5ob3N0UHNldWRvQ2xhc3NSdWxlcygp
LmlzRW1wdHkoKSAmJiAhYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGlu
Z0luU2hhZG93VHJlZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1heUJl
QWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZShzaGFkb3dSdWxlU2V0cywgZWxlbWVudC5pc0hUTUxF
bGVtZW50KCksIGF0dHJpYnV0ZU5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJl
ZSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgZm9yIChhdXRvKiBzaGFkb3dSb290IDogYXNzaWduZWRTaGFkb3dSb290c0lmU2xvdHRlZChl
bGVtZW50KSkgewotICAgICAgICBhdXRvJiBydWxlU2V0cyA9IHNoYWRvd1Jvb3QtPnN0eWxlU2Nv
cGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgICAgIGlmIChydWxlU2V0cy5hdXRob3JT
dHlsZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKG1heUJlQWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZShy
dWxlU2V0cywgZWxlbWVudC5pc0hUTUxFbGVtZW50KCksIGF0dHJpYnV0ZU5hbWUpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBB
dHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZFZhbHVlLCBjb25z
dCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlKQogewogICAgIGlmIChuZXdWYWx1ZSA9PSBvbGRWYWx1
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcnVsZVNldHMgPSBtX2VsZW1lbnQuc3R5
bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CiAgICAgYm9vbCBpc0hUTUwgPSBtX2VsZW1lbnQuaXNI
VE1MRWxlbWVudCgpOworCisgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IGZhbHNlOwogICAgIGJv
b2wgbWF5QWZmZWN0U2hhZG93VHJlZSA9IGZhbHNlOwogCi0gICAgYm9vbCBtYXlBZmZlY3RTdHls
ZSA9IG1heUJlQWZmZWN0ZWRCeUF0dHJpYnV0ZUNoYW5nZShydWxlU2V0cywgaXNIVE1MLCBhdHRy
aWJ1dGVOYW1lKQotICAgICAgICB8fCBtYXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMobV9lbGVtZW50
LCBhdHRyaWJ1dGVOYW1lLCBtYXlBZmZlY3RTaGFkb3dUcmVlKQotICAgICAgICB8fCBtYXlCZUFm
ZmVjdGVkQnlTbG90dGVkUnVsZXMobV9lbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICB0cmF2
ZXJzZVJ1bGVGZWF0dXJlcyhtX2VsZW1lbnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZl
YXR1cmVzLCBib29sIG1heU1hdGNoSW5TaGFkb3dUcmVlKSB7CisgICAgICAgIGlmICghbWF5QmVB
ZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKGZlYXR1cmVzLCBpc0hUTUwsIGF0dHJpYnV0ZU5hbWUp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYXlBZmZlY3RTdHlsZSA9IHRydWU7Cisg
ICAgICAgIGlmIChtYXlNYXRjaEluU2hhZG93VHJlZSkKKyAgICAgICAgICAgIG1heUFmZmVjdFNo
YWRvd1RyZWUgPSB0cnVlOworICAgIH0pOwogCiAgICAgaWYgKCFtYXlBZmZlY3RTdHlsZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpc0hUTUwpIHsKLSAgICAgICAgbV9lbGVtZW50Lmlu
dmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuaGFz
U2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpCi0gICAgICAgIG1heUFmZmVjdFNoYWRvd1RyZWUg
PSB0cnVlOwotCi0gICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4obV9lbGVtZW50KSAmJiAhcnVs
ZVNldHMuYXV0aG9yU3R5bGUoKS5zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgp
KQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQotICAgIGlmIChtYXlBZmZl
Y3RTaGFkb3dUcmVlKSB7CisgICAgaWYgKCFpc0hUTUwgfHwgbWF5QWZmZWN0U2hhZG93VHJlZSkg
ewogICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTExLDYgKzcwLDcgQEAgdm9pZCBBdHRyaWJ1dGVDaGFuZ2VJ
bnZhbGlkYXRpb246OmludmFsaQogICAgIGlmICghY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4obV9l
bGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvJiBydWxlU2V0cyA9
IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKICAgICBhdXRvKiBhdHRyaWJ1
dGVSdWxlcyA9IHJ1bGVTZXRzLmFuY2VzdG9yQXR0cmlidXRlUnVsZXNGb3JIVE1MKGF0dHJpYnV0
ZU5hbWUubG9jYWxOYW1lKCkpOwogICAgIGlmICghYXR0cmlidXRlUnVsZXMpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9DbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5jcHAJKHJldmlzaW9uIDIxOTI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0Ns
YXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDEw
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIKICNpbmNsdWRlICJFbGVtZW50
Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1ZGUg
IlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5nLmgiCisjaW5jbHVkZSAi
U3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUludmFsaWRhdG9y
LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIK
ICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTg3
LDYzICs4MywyNiBAQCBzdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3IgY29tcHV0ZUNsYXNzQ2hhCiAg
ICAgcmV0dXJuIGNoYW5nZWRDbGFzc2VzOwogfQogCi1zdGF0aWMgYm9vbCBtYXlCZUFmZmVjdGVk
QnlIb3N0UnVsZXMoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgQXRvbWljU3RyaW5nSW1wbCogY2hh
bmdlZENsYXNzLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQotewotICAgIC8vIEZJWE1FOiBN
b3JlIG9mIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gQ2xhc3MvQXR0cmlidXRl
L0lkSW52YWxpZGF0aW9uLgotICAgIGlmICghc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgp
LnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICBhdXRvJiBhdXRob3JTdHlsZSA9IHNoYWRvd1J1
bGVTZXRzLmF1dGhvclN0eWxlKCk7Ci0gICAgaWYgKGF1dGhvclN0eWxlLmhvc3RQc2V1ZG9DbGFz
c1J1bGVzKCkuaXNFbXB0eSgpICYmICFhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxl
c01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhjaGFu
Z2VkQ2xhc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0aG9yU3R5bGUu
aGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpKQotICAgICAgICBt
YXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0IFZlY3RvcjxTaGFkb3dSb290
Kj4mIGFzc2lnbmVkU2hhZG93Um9vdHMsIEF0b21pY1N0cmluZ0ltcGwqIGNoYW5nZWRDbGFzcykK
LXsKLSAgICBmb3IgKGF1dG8mIGFzc2lnbmVkU2hhZG93Um9vdCA6IGFzc2lnbmVkU2hhZG93Um9v
dHMpIHsKLSAgICAgICAgYXV0byYgcnVsZVNldHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3QtPnN0eWxl
U2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgICAgIGlmIChydWxlU2V0cy5hdXRo
b3JTdHlsZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0lu
UnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgQ2xhc3NDaGFuZ2VJbnZhbGlkYXRp
b246OmludmFsaWRhdGVTdHlsZShjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzLCBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQogewogICAgIGF1dG8gY2hhbmdlZENs
YXNzZXMgPSBjb21wdXRlQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgbmV3Q2xhc3Nlcyk7Ci0gICAg
Ym9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7Ci0KLSAgICBhdXRvJiBydWxlU2V0cyA9
IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICBhdXRvKiBzaGFkb3dS
b290ID0gbV9lbGVtZW50LnNoYWRvd1Jvb3QoKTsKLSAgICBhdXRvIGFzc2lnbmVkU2hhZG93Um9v
dHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3RzSWZTbG90dGVkKG1fZWxlbWVudCk7CiAKICAgICBDbGFz
c0NoYW5nZVZlY3RvciBjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0eWxlOwotICAgIGZvciAoYXV0
byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAgICAgICAgYm9vbCBtYXlBZmZl
Y3RTdHlsZSA9IHJ1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hh
bmdlZENsYXNzKQotICAgICAgICAgICAgfHwgbWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKHNoYWRv
d1Jvb3QsIGNoYW5nZWRDbGFzcywgbWF5QWZmZWN0U2hhZG93VHJlZSkKLSAgICAgICAgICAgIHx8
IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhhc3NpZ25lZFNoYWRvd1Jvb3RzLCBjaGFuZ2Vk
Q2xhc3MpOwotICAgICAgICBpZiAobWF5QWZmZWN0U3R5bGUpCisgICAgYm9vbCBtYXlBZmZlY3RT
aGFkb3dUcmVlID0gZmFsc2U7CisKKyAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyhtX2VsZW1lbnQs
IFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heU1hdGNoSW5TaGFk
b3dUcmVlKSB7CisgICAgICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNz
ZXMpIHsKKyAgICAgICAgICAgIGlmICghZmVhdHVyZXMuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMo
Y2hhbmdlZENsYXNzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNo
YW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGUuYXBwZW5kKGNoYW5nZWRDbGFzcyk7Ci0gICAgfTsK
KyAgICAgICAgICAgIGlmIChtYXlNYXRjaEluU2hhZG93VHJlZSkKKyAgICAgICAgICAgICAgICBt
YXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0pOwogCiAgICAgaWYg
KGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoc2hhZG93Um9vdCAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRv
d1BzZXVkb0VsZW1lbnRSdWxlcygpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1
ZTsKLQotICAgIGlmIChpczxIVE1MU2xvdEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgIXJ1bGVTZXRz
LmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7Ci0KICAgICBpZiAobWF5QWZmZWN0U2hh
ZG93VHJlZSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGZpbmUtZ3JhaW5lZCBp
bnZhbGlkYXRpb24gZm9yIHNoYWRvdyB0cmVlLgogICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlRm9yU3VidHJlZSgpOwpAQCAtMTU1LDYgKzExNCw3IEBAIHZvaWQgQ2xhc3NDaGFuZ2VJ
bnZhbGlkYXRpb246OmludmFsaWRhdGUKICAgICBpZiAoIWNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+
KG1fZWxlbWVudCkuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byYgcnVsZVNl
dHMgPSBtX2VsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CiAgICAgZm9yIChhdXRv
KiBjaGFuZ2VkQ2xhc3MgOiBjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0eWxlKSB7CiAgICAgICAg
IGF1dG8qIGFuY2VzdG9yQ2xhc3NSdWxlcyA9IHJ1bGVTZXRzLmFuY2VzdG9yQ2xhc3NSdWxlcyhj
aGFuZ2VkQ2xhc3MpOwogICAgICAgICBpZiAoIWFuY2VzdG9yQ2xhc3NSdWxlcykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9JZENoYW5nZUludmFsaWRhdGlvbi5jcHAJKHJldmlzaW9u
IDIxOTI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNjcgKzI2LDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSWRDaGFuZ2VJbnZhbGlkYXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50
UnVsZVNldHMuaCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IkhUTUxTbG90RWxlbWVudC5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKLSNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTY29wZS5oIgorI2luY2x1ZGUgIlN0eWxl
SW52YWxpZGF0aW9uRnVuY3Rpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBTdHlsZSB7CiAKLXN0YXRpYyBib29sIG1heUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyhjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGNoYW5nZWRJZCwgYm9vbCYgbWF5
QWZmZWN0U2hhZG93VHJlZSkKLXsKLSAgICBhdXRvKiBzaGFkb3dSb290ID0gZWxlbWVudC5zaGFk
b3dSb290KCk7Ci0gICAgaWYgKCFzaGFkb3dSb290KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgYXV0byYgc2hhZG93UnVsZVNldHMgPSBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCkucmVzb2x2
ZXIoKS5ydWxlU2V0cygpOwotICAgIGF1dG8mIGF1dGhvclN0eWxlID0gc2hhZG93UnVsZVNldHMu
YXV0aG9yU3R5bGUoKTsKLSAgICBpZiAoYXV0aG9yU3R5bGUuaG9zdFBzZXVkb0NsYXNzUnVsZXMo
KS5pc0VtcHR5KCkgJiYgIWF1dGhvclN0eWxlLmhhc0hvc3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hp
bmdJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzaGFk
b3dSdWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dGhvclN0eWxlLmhhc0hvc3RQc2V1ZG9D
bGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93
VHJlZSA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIG1heUJlQWZm
ZWN0ZWRCeVNsb3R0ZWRSdWxlcyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIGNoYW5nZWRJZCkKLXsKLSAgICBmb3IgKGF1dG8qIHNoYWRvd1Jvb3QgOiBhc3NpZ25l
ZFNoYWRvd1Jvb3RzSWZTbG90dGVkKGVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8mIHJ1bGVTZXRz
ID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICAg
ICAgaWYgKHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxlcygp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAocnVsZVNldHMu
ZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKGNoYW5nZWRJZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIElkQ2hhbmdl
SW52YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiBjaGFuZ2Vk
SWQpCiB7CiAgICAgaWYgKGNoYW5nZWRJZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygp
OworICAgIGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBmYWxzZTsKICAgICBib29sIG1heUFmZmVjdFNo
YWRvd1RyZWUgPSBmYWxzZTsKIAotICAgIGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBydWxlU2V0cy5m
ZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKQotICAgICAgICB8fCBtYXlC
ZUFmZmVjdGVkQnlIb3N0UnVsZXMobV9lbGVtZW50LCBjaGFuZ2VkSWQsIG1heUFmZmVjdFNoYWRv
d1RyZWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhtX2VsZW1lbnQs
IGNoYW5nZWRJZCk7CisgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXMobV9lbGVtZW50LCBbJl0gKGNv
bnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgYm9vbCBtYXlNYXRjaEluU2hhZG93VHJlZSkg
eworICAgICAgICBpZiAoIWZlYXR1cmVzLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElkKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbWF5QWZmZWN0U3R5bGUgPSB0cnVlOworICAg
ICAgICBpZiAobWF5TWF0Y2hJblNoYWRvd1RyZWUpCisgICAgICAgICAgICBtYXlBZmZlY3RTaGFk
b3dUcmVlID0gdHJ1ZTsKKyAgICB9KTsKIAogICAgIGlmICghbWF5QWZmZWN0U3R5bGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2VsZW1lbnQuc2hhZG93Um9vdCgpICYmIHJ1bGVTZXRz
LmF1dGhvclN0eWxlKCkuaGFzU2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKCkpCi0gICAgICAgIG1h
eUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotCi0gICAgaWYgKGlzPEhUTUxTbG90RWxlbWVudD4o
bV9lbGVtZW50KSAmJiAhcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5zbG90dGVkUHNldWRvRWxlbWVu
dFJ1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsK
LQogICAgIGlmIChtYXlBZmZlY3RTaGFkb3dUcmVlKSB7CiAgICAgICAgIG1fZWxlbWVudC5pbnZh
bGlkYXRlU3R5bGVGb3JTdWJ0cmVlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk2LDYgKzYwLDcg
QEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eQogCiAgICAgLy8gVGhp
cyBjb3VsZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQgZGVzY2VuZGFudCBp
bnZhbGlkYXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi4KICAgICAvLyBI
b3dldmVyIHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUgYW5kIHRoaXMgaXMg
cHJvYmFibHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVxdWlyZWQgZGF0YSBz
dHJ1Y3R1cmVzLgorICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0eWxlUmVzb2x2ZXIo
KS5ydWxlU2V0cygpOwogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlID0gcnVsZVNl
dHMuZmVhdHVyZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29udGFpbnMoY2hhbmdl
ZElkKTsKICAgICBpZiAobWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlKQogICAgICAgICBtX2VsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCisjaW5jbHVkZSAiSFRNTFNsb3RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBTdHlsZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KK2lubGluZSB2b2lk
IHRyYXZlcnNlUnVsZUZlYXR1cmVzSW5TaGFkb3dUcmVlKEVsZW1lbnQmIGVsZW1lbnQsIEZ1bmN0
aW9uJiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFlbGVtZW50LnNoYWRvd1Jvb3QoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gZWxlbWVudC5zaGFkb3dSb290
KCktPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7CisgICAgYXV0byYgYXV0aG9y
U3R5bGUgPSBzaGFkb3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpOworICAgIGJvb2wgaGFzSG9zdFBz
ZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSA9IGF1dGhvclN0eWxlLmhhc0hvc3RQ
c2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUoKTsKKyAgICBpZiAoYXV0aG9yU3R5
bGUuaG9zdFBzZXVkb0NsYXNzUnVsZXMoKS5pc0VtcHR5KCkgJiYgIWhhc0hvc3RQc2V1ZG9DbGFz
c1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUpCisgICAgICAgIHJldHVybjsKKyAgICBmdW5jdGlv
bihzaGFkb3dSdWxlU2V0cy5mZWF0dXJlcygpLCBoYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNo
aW5nSW5TaGFkb3dUcmVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgoraW5s
aW5lIHZvaWQgdHJhdmVyc2VSdWxlRmVhdHVyZXNGb3JTbG90dGVkKEVsZW1lbnQmIGVsZW1lbnQs
IEZ1bmN0aW9uJiYgZnVuY3Rpb24pCit7CisgICAgYXV0byBhc3NpZ25lZFNoYWRvd1Jvb3RzID0g
YXNzaWduZWRTaGFkb3dSb290c0lmU2xvdHRlZChlbGVtZW50KTsKKyAgICBmb3IgKGF1dG8mIGFz
c2lnbmVkU2hhZG93Um9vdCA6IGFzc2lnbmVkU2hhZG93Um9vdHMpIHsKKyAgICAgICAgYXV0byYg
cnVsZVNldHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1
bGVTZXRzKCk7CisgICAgICAgIGlmIChydWxlU2V0cy5hdXRob3JTdHlsZSgpLnNsb3R0ZWRQc2V1
ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZnVuY3Rpb24ocnVsZVNldHMuZmVhdHVyZXMoKSwgaXM8SFRNTFNsb3RFbGVtZW50PihlbGVt
ZW50KSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CitpbmxpbmUg
dm9pZCB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyhFbGVtZW50JiBlbGVtZW50LCBGdW5jdGlvbiYmIGZ1
bmN0aW9uKQoreworICAgIGF1dG8mIHJ1bGVTZXRzID0gZWxlbWVudC5zdHlsZVJlc29sdmVyKCku
cnVsZVNldHMoKTsKKyAgICBib29sIG1heUFmZmVjdFNoYWRvd1RyZWUgPSBlbGVtZW50LnNoYWRv
d1Jvb3QoKSAmJiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRS
dWxlcygpOworCisgICAgZnVuY3Rpb24ocnVsZVNldHMuZmVhdHVyZXMoKSwgbWF5QWZmZWN0U2hh
ZG93VHJlZSk7CisKKyAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlc0luU2hhZG93VHJlZShlbGVtZW50
LCBmdW5jdGlvbik7CisgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXNGb3JTbG90dGVkKGVsZW1lbnQs
IGZ1bmN0aW9uKTsKK30KKworfQorfQorCg==
</data>
<flag name="review"
          id="335862"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317117</attachid>
            <date>2017-08-03 06:23:55 -0700</date>
            <delta_ts>2017-08-03 06:25:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-common-5.patch</filename>
            <type>text/plain</type>
            <size>21717</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA4LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgY29tbW9uIGNvZGUg
aW4gU3R5bGU6OipDaGFuZ2VJbnZhbGlkYXRpb24gaW50byBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzMTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFRoZXJlIGlzIGEgbG90
IG9mIGNvcHkgY29kZSBoZXJlLgorCisgICAgICAgICogU3R5bGUvU3R5bGVJbnZhbGlkYXRpb25G
dW5jdGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dHJhdmVyc2VSdWxl
RmVhdHVyZXNJblNoYWRvd1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZlcnNl
UnVsZUZlYXR1cmVzRm9yU2xvdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dHJhdmVy
c2VSdWxlRmVhdHVyZXMpOgorCisgICAgICAgICAgICBBZGQgZnVuY3Rpb25zIGZvciB0cmF2ZXJz
aW5nIHJ1bGUgZmVhdHVyZXMgdGhhdCBtYXkgYWZmZWN0IHN0eWxlIG9mIGFuIGVsZW1lbnQuCisg
ICAgICAgICAgICBVc2UgbGFtYmRhcyB0byBpbXBsZW1lbnQgY2xpZW50LXNwZWNpZmljIGJlaGF2
aW9yLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHN0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFmZmVjdGVkQnlTbG90
dGVkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFmZmVj
dGVkQnlIb3N0UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1heUJl
QWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvSWRDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OklkQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1h
eUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6bWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKTogRGVsZXRlZC4KKwogMjAxNy0wOC0wMiAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogYWRkIHN0YWNrIHRyYWNlIGluZm9ybWF0aW9uIGZvciBlYWNoIFJlY29yZGluZ0FjdGlvbgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NzYzLDYgKzY3NjMsNyBAQAog
CQlFNDZBMkIxQzE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZB
MkIxQjE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2QTJC
MUUxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3Q0E3NkIxMDAwREJD
RDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZCNDFGOTFDQjI0RTcwMDA4RjExREUgLyogTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDZCNDFGODFDQjI0RTcwMDA4RjExREUgLyogTm9FdmVudERpc3BhdGNoQXNz
ZXJ0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTQ2Qzc5NEIxRjEzRTgyQjAwRjM3MUUxIC8qIFN0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEExODIy
RjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCAqLzsgfTsK
IAkJRTQ3MTI3Q0ExNjM0MzhBMTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0UxNjMwNTlG
QzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovOyB9OwogCQlFNDcxMjdDQjE2MzQz
OEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxl
SW52YWxpZGF0b3IuaCAqLzsgfTsKIAkJRTQ3NzhCN0YxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3Vz
dG9tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ3NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICovOyB9OwpA
QCAtMTUzNjMsNiArMTUzNjQsNyBAQAogCQlFNDlCREEwQTEzMUZEM0U1MDAzQzU2RjAgLyogQ1NT
VmFsdWVQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Zh
bHVlUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTAwNzgyMUI4MjBF
QzgwMDJDNUE2RSAvKiBEYXRhVVJMRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhVVJMRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEEwMDc4NDFCODIwRUQzMDAyQzVBNkUgLyogRGF0YVVSTERlY29kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVVSTERlY29kZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNEExODIyRjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZh
bGlkYXRpb25GdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25GdW5j
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBODE0RDMxQzZERUM0MDAw
QkY4NUFDIC8qIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QTgxNEQ1MUM2REVFOEQwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGFzc0No
YW5nZUludmFsaWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTgx
NEQ3MUM3MEUxMDUwMEJGODVBQyAvKiBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXR0cmlidXRlQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODM4LDYgKzI0ODQw
LDcgQEAKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywK
IAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5j
cHAgKi8sCiAJCQkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5j
dGlvbnMuaCAqLywKKwkJCQlFNEExODIyRjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZhbGlk
YXRpb25GdW5jdGlvbnMuaCAqLywKIAkJCQlFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRvci5jcHAgKi8sCiAJCQkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0b3IuaCAqLywKIAkJCQlFNERBQ0U2QjFEMTJFMTE2MDA3NTk4MEYgLyogU3R5
bGVQZW5kaW5nUmVzb3VyY2VzLmNwcCAqLywKQEAgLTI4NTg0LDYgKzI4NTg3LDcgQEAKIAkJCQk1
RUJCODkzNzFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTVFMTZBMkU0MUJGQTY1MEIwMDI5QTIxRSAvKiBNZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVFQkI4OTMyMUM3Nzc4MjMw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0NkM3OTRCMUYxM0U4MkIwMEYzNzFFMSAvKiBTdHlsZUludmFsaWRhdGlvbkZ1
bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUU0RUFCMDQxRDA3MTY2QTAwMDZBMTg0IC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
NDYxM0FEMENENjMzMTAwMEZBREE3NSAvKiBNZWRpYUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0RTE5NTkyMjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVD
aGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2NiArMjYsMzYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBdHRyaWJ1
dGVDaGFuZ2VJbnZhbGlkYXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIK
ICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25G
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUludmFsaWRhdG9yLmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5QXR0
cmlidXRlQ2hhbmdlKERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzLCBib29sIGlzSFRNTCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3N0YXRpYyBib29sIG1heUJlQWZmZWN0
ZWRCeUF0dHJpYnV0ZUNoYW5nZShjb25zdCBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMsIGJvb2wg
aXNIVE1MLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGF1dG8m
IG5hbWVTZXQgPSBpc0hUTUwgPyBydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJpYnV0ZUNhbm9uaWNh
bExvY2FsTmFtZXNJblJ1bGVzIDogcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVMb2NhbE5h
bWVzSW5SdWxlczsKKyAgICBhdXRvJiBuYW1lU2V0ID0gaXNIVE1MID8gZmVhdHVyZXMuYXR0cmli
dXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVsZXMgOiBmZWF0dXJlcy5hdHRyaWJ1dGVMb2NhbE5h
bWVzSW5SdWxlczsKICAgICByZXR1cm4gbmFtZVNldC5jb250YWlucyhhdHRyaWJ1dGVOYW1lLmxv
Y2FsTmFtZSgpKTsKIH0KIAotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUs
IGJvb2wmIG1heUFmZmVjdFNoYWRvd1RyZWUpCi17Ci0gICAgLy8gRklYTUU6IE1vcmUgb2YgdGhp
cyBjb2RlIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBDbGFzcy9BdHRyaWJ1dGUvSWRJbnZhbGlk
YXRpb24uCi0gICAgYXV0byogc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpOwotICAg
IGlmICghc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8mIHNoYWRv
d1J1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMo
KTsKLSAgICBhdXRvJiBhdXRob3JTdHlsZSA9IHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCk7
Ci0gICAgaWYgKGF1dGhvclN0eWxlLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpICYm
ICFhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbWF5QmVBZmZlY3RlZEJ5QXR0
cmlidXRlQ2hhbmdlKHNoYWRvd1J1bGVTZXRzLCBlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0
cmlidXRlTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRob3JTdHls
ZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAg
IG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgYm9vbCBtYXlCZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKLXsKLSAgICBmb3IgKGF1dG8q
IHNoYWRvd1Jvb3QgOiBhc3NpZ25lZFNoYWRvd1Jvb3RzSWZTbG90dGVkKGVsZW1lbnQpKSB7Ci0g
ICAgICAgIGF1dG8mIHJ1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVy
KCkucnVsZVNldHMoKTsKLSAgICAgICAgaWYgKHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRl
ZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAobWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHJ1bGVTZXRzLCBlbGVt
ZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0cmlidXRlTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEF0dHJpYnV0ZUNoYW5n
ZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUpCiB7CiAgICAgaWYgKG5ld1ZhbHVlID09IG9sZFZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCku
cnVsZVNldHMoKTsKICAgICBib29sIGlzSFRNTCA9IG1fZWxlbWVudC5pc0hUTUxFbGVtZW50KCk7
Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7CiAKLSAgICBib29sIG1heUFm
ZmVjdFN0eWxlID0gbWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHJ1bGVTZXRzLCBpc0hU
TUwsIGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyht
X2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIG1heUFmZmVjdFNoYWRvd1RyZWUpCi0gICAgICAgIHx8
IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhtX2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwor
ICAgIGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBmYWxzZTsKKyAgICBib29sIG1heUFmZmVjdFN0eWxl
SW5TaGFkb3dUcmVlID0gZmFsc2U7CisKKyAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyhtX2VsZW1l
bnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heUFmZmVjdFNo
YWRvd1RyZWUpIHsKKyAgICAgICAgaWYgKCFtYXlCZUFmZmVjdGVkQnlBdHRyaWJ1dGVDaGFuZ2Uo
ZmVhdHVyZXMsIGlzSFRNTCwgYXR0cmlidXRlTmFtZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1heUFmZmVjdFN0eWxlID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1heUFmZmVjdFNoYWRv
d1RyZWUpCisgICAgICAgICAgICBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IHRydWU7Cisg
ICAgfSk7CiAKICAgICBpZiAoIW1heUFmZmVjdFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC05
NSwxMyArNjUsOCBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3QoKSAm
JiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQot
ICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQotICAgIGlmIChpczxIVE1MU2xv
dEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgIXJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBz
ZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJl
ZSA9IHRydWU7Ci0KLSAgICBpZiAobWF5QWZmZWN0U2hhZG93VHJlZSkgeworICAgIGlmIChtYXlB
ZmZlY3RTdHlsZUluU2hhZG93VHJlZSkgeworICAgICAgICAvLyBGSVhNRTogTW9yZSBmaW5lLWdy
YWluZWQgaW52YWxpZGF0aW9uLgogICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExLDYgKzc2LDcgQEAgdm9p
ZCBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaQogICAgIGlmICghY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4obV9lbGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsK
ICAgICBhdXRvKiBhdHRyaWJ1dGVSdWxlcyA9IHJ1bGVTZXRzLmFuY2VzdG9yQXR0cmlidXRlUnVs
ZXNGb3JIVE1MKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOwogICAgIGlmICghYXR0cmlidXRl
UnVsZXMpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNz
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTQgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIK
ICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxl
bWVudC5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3Ry
aW5nLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJTdHlsZUludmFsaWRhdG9yLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1
ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTg3LDY0ICs4MywyNyBAQCBzdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3Ig
Y29tcHV0ZUNsYXNzQ2hhCiAgICAgcmV0dXJuIGNoYW5nZWRDbGFzc2VzOwogfQogCi1zdGF0aWMg
Ym9vbCBtYXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgQXRv
bWljU3RyaW5nSW1wbCogY2hhbmdlZENsYXNzLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQot
ewotICAgIC8vIEZJWE1FOiBNb3JlIG9mIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIGJldHdl
ZW4gQ2xhc3MvQXR0cmlidXRlL0lkSW52YWxpZGF0aW9uLgotICAgIGlmICghc2hhZG93Um9vdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gc2hhZG93
Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICBhdXRvJiBhdXRo
b3JTdHlsZSA9IHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCk7Ci0gICAgaWYgKGF1dGhvclN0
eWxlLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpICYmICFhdXRob3JTdHlsZS5oYXNI
b3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5S
dWxlcy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93
VHJlZSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0
IFZlY3RvcjxTaGFkb3dSb290Kj4mIGFzc2lnbmVkU2hhZG93Um9vdHMsIEF0b21pY1N0cmluZ0lt
cGwqIGNoYW5nZWRDbGFzcykKLXsKLSAgICBmb3IgKGF1dG8mIGFzc2lnbmVkU2hhZG93Um9vdCA6
IGFzc2lnbmVkU2hhZG93Um9vdHMpIHsKLSAgICAgICAgYXV0byYgcnVsZVNldHMgPSBhc3NpZ25l
ZFNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgICAg
IGlmIChydWxlU2V0cy5hdXRob3JTdHlsZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bGVTZXRzLmZl
YXR1cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgQ2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZShjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQogewog
ICAgIGF1dG8gY2hhbmdlZENsYXNzZXMgPSBjb21wdXRlQ2xhc3NDaGFuZ2Uob2xkQ2xhc3Nlcywg
bmV3Q2xhc3Nlcyk7Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7Ci0KLSAg
ICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsK
LSAgICBhdXRvKiBzaGFkb3dSb290ID0gbV9lbGVtZW50LnNoYWRvd1Jvb3QoKTsKLSAgICBhdXRv
IGFzc2lnbmVkU2hhZG93Um9vdHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3RzSWZTbG90dGVkKG1fZWxl
bWVudCk7CiAKICAgICBDbGFzc0NoYW5nZVZlY3RvciBjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0
eWxlOwotICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAg
ICAgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IHJ1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0lu
UnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKQotICAgICAgICAgICAgfHwgbWF5QmVBZmZlY3Rl
ZEJ5SG9zdFJ1bGVzKHNoYWRvd1Jvb3QsIGNoYW5nZWRDbGFzcywgbWF5QWZmZWN0U2hhZG93VHJl
ZSkKLSAgICAgICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhhc3NpZ25lZFNo
YWRvd1Jvb3RzLCBjaGFuZ2VkQ2xhc3MpOwotICAgICAgICBpZiAobWF5QWZmZWN0U3R5bGUpCisg
ICAgYm9vbCBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IGZhbHNlOworCisgICAgdHJhdmVy
c2VSdWxlRmVhdHVyZXMobV9lbGVtZW50LCBbJl0gKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0
dXJlcywgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlKSB7CisgICAgICAgIGZvciAoYXV0byogY2hh
bmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKKyAgICAgICAgICAgIGlmICghZmVhdHVyZXMu
Y2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGUuYXBwZW5k
KGNoYW5nZWRDbGFzcyk7Ci0gICAgfTsKKyAgICAgICAgICAgIGlmIChtYXlBZmZlY3RTaGFkb3dU
cmVlKQorICAgICAgICAgICAgICAgIG1heUFmZmVjdFN0eWxlSW5TaGFkb3dUcmVlID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0pOwogCiAgICAgaWYgKGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5
bGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hhZG93Um9vdCAmJiBy
dWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQotICAg
ICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQotICAgIGlmIChpczxIVE1MU2xvdEVs
ZW1lbnQ+KG1fZWxlbWVudCkgJiYgIXJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVk
b0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9
IHRydWU7Ci0KLSAgICBpZiAobWF5QWZmZWN0U2hhZG93VHJlZSkgeworICAgIGlmIChtYXlBZmZl
Y3RTdHlsZUluU2hhZG93VHJlZSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGZp
bmUtZ3JhaW5lZCBpbnZhbGlkYXRpb24gZm9yIHNoYWRvdyB0cmVlLgogICAgICAgICBtX2VsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CkBAIC0xNTUs
NiArMTE0LDcgQEAgdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZQogICAg
IGlmICghY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4obV9lbGVtZW50KS5maXJzdCgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVy
KCkucnVsZVNldHMoKTsKICAgICBmb3IgKGF1dG8qIGNoYW5nZWRDbGFzcyA6IGNoYW5nZWRDbGFz
c2VzQWZmZWN0aW5nU3R5bGUpIHsKICAgICAgICAgYXV0byogYW5jZXN0b3JDbGFzc1J1bGVzID0g
cnVsZVNldHMuYW5jZXN0b3JDbGFzc1J1bGVzKGNoYW5nZWRDbGFzcyk7CiAgICAgICAgIGlmICgh
YW5jZXN0b3JDbGFzc1J1bGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2OCAr
MjYsMzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJZENoYW5nZUludmFsaWRh
dGlvbi5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkVsZW1l
bnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJT
dHlsZVNjb3BlLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIGJvb2wgbWF5
QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgY2hhbmdlZElkLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQotewotICAgIGF1
dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoIXNoYWRvd1Jv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNo
YWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgYXV0byYg
YXV0aG9yU3R5bGUgPSBzaGFkb3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpOwotICAgIGlmIChhdXRo
b3JTdHlsZS5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSAmJiAhYXV0aG9yU3R5bGUu
aGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5S
dWxlcy5jb250YWlucyhjaGFuZ2VkSWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJl
ZSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgY2hhbmdlZElkKQotewotICAgIGZv
ciAoYXV0byogc2hhZG93Um9vdCA6IGFzc2lnbmVkU2hhZG93Um9vdHNJZlNsb3R0ZWQoZWxlbWVu
dCkpIHsKLSAgICAgICAgYXV0byYgcnVsZVNldHMgPSBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCku
cmVzb2x2ZXIoKS5ydWxlU2V0cygpOwotICAgICAgICBpZiAocnVsZVNldHMuYXV0aG9yU3R5bGUo
KS5zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFp
bnMoY2hhbmdlZElkKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIHZvaWQgSWRDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHls
ZShjb25zdCBBdG9taWNTdHJpbmcmIGNoYW5nZWRJZCkKIHsKICAgICBpZiAoY2hhbmdlZElkLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcnVsZVNldHMgPSBtX2VsZW1l
bnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dU
cmVlID0gZmFsc2U7CisgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IGZhbHNlOworICAgIGJvb2wg
bWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUgPSBmYWxzZTsKIAotICAgIGJvb2wgbWF5QWZmZWN0
U3R5bGUgPSBydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElk
KQotICAgICAgICB8fCBtYXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMobV9lbGVtZW50LCBjaGFuZ2Vk
SWQsIG1heUFmZmVjdFNoYWRvd1RyZWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0
ZWRSdWxlcyhtX2VsZW1lbnQsIGNoYW5nZWRJZCk7CisgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXMo
bV9lbGVtZW50LCBbJl0gKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgYm9vbCBtYXlB
ZmZlY3RTaGFkb3dUcmVlKSB7CisgICAgICAgIGlmICghZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250
YWlucyhjaGFuZ2VkSWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYXlBZmZlY3RT
dHlsZSA9IHRydWU7CisgICAgICAgIGlmIChtYXlBZmZlY3RTaGFkb3dUcmVlKQorICAgICAgICAg
ICAgbWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUgPSB0cnVlOworICAgIH0pOwogCiAgICAgaWYg
KCFtYXlBZmZlY3RTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZWxlbWVudC5z
aGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7Ci0KLSAgICBp
ZiAoaXM8SFRNTFNsb3RFbGVtZW50PihtX2VsZW1lbnQpICYmICFydWxlU2V0cy5hdXRob3JTdHls
ZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1heUFm
ZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotCi0gICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUpIHsK
KyAgICBpZiAobWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUpIHsKICAgICAgICAgbV9lbGVtZW50
LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTk2LDYgKzYwLDcgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eQog
CiAgICAgLy8gVGhpcyBjb3VsZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQg
ZGVzY2VuZGFudCBpbnZhbGlkYXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlv
bi4KICAgICAvLyBIb3dldmVyIHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUg
YW5kIHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVx
dWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0
eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0
eWxlID0gcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29u
dGFpbnMoY2hhbmdlZElkKTsKICAgICBpZiAobWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlKQogICAg
ICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0aW9uRnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCisjaW5jbHVkZSAi
SFRNTFNsb3RFbGVtZW50LmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4K
K2lubGluZSB2b2lkIHRyYXZlcnNlUnVsZUZlYXR1cmVzSW5TaGFkb3dUcmVlKEVsZW1lbnQmIGVs
ZW1lbnQsIEZ1bmN0aW9uJiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFlbGVtZW50LnNoYWRvd1Jv
b3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gZWxlbWVu
dC5zaGFkb3dSb290KCktPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7CisgICAg
YXV0byYgYXV0aG9yU3R5bGUgPSBzaGFkb3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpOworICAgIGJv
b2wgaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSA9IGF1dGhvclN0
eWxlLmhhc0hvc3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUoKTsKKyAgICBp
ZiAoYXV0aG9yU3R5bGUuaG9zdFBzZXVkb0NsYXNzUnVsZXMoKS5pc0VtcHR5KCkgJiYgIWhhc0hv
c3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRvd1RyZWUpCisgICAgICAgIHJldHVybjsK
KyAgICBmdW5jdGlvbihzaGFkb3dSdWxlU2V0cy5mZWF0dXJlcygpLCBoYXNIb3N0UHNldWRvQ2xh
c3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVyc2VSdWxlRmVhdHVyZXNGb3JTbG90dGVkKEVsZW1l
bnQmIGVsZW1lbnQsIEZ1bmN0aW9uJiYgZnVuY3Rpb24pCit7CisgICAgYXV0byBhc3NpZ25lZFNo
YWRvd1Jvb3RzID0gYXNzaWduZWRTaGFkb3dSb290c0lmU2xvdHRlZChlbGVtZW50KTsKKyAgICBm
b3IgKGF1dG8mIGFzc2lnbmVkU2hhZG93Um9vdCA6IGFzc2lnbmVkU2hhZG93Um9vdHMpIHsKKyAg
ICAgICAgYXV0byYgcnVsZVNldHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5y
ZXNvbHZlcigpLnJ1bGVTZXRzKCk7CisgICAgICAgIGlmIChydWxlU2V0cy5hdXRob3JTdHlsZSgp
LnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZnVuY3Rpb24ocnVsZVNldHMuZmVhdHVyZXMoKSwgZmFsc2UpOworICAg
IH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVy
c2VSdWxlRmVhdHVyZXMoRWxlbWVudCYgZWxlbWVudCwgRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sK
KyAgICBhdXRvJiBydWxlU2V0cyA9IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7
CisKKyAgICBhdXRvIG1heUFmZmVjdFNoYWRvd1RyZWUgPSBbJl0geworICAgICAgICBpZiAoZWxl
bWVudC5zaGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1
ZG9FbGVtZW50UnVsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
aXM8SFRNTFNsb3RFbGVtZW50PihlbGVtZW50KSAmJiAhcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5z
bG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgZnVuY3Rpb24ocnVs
ZVNldHMuZmVhdHVyZXMoKSwgbWF5QWZmZWN0U2hhZG93VHJlZSgpKTsKKworICAgIHRyYXZlcnNl
UnVsZUZlYXR1cmVzSW5TaGFkb3dUcmVlKGVsZW1lbnQsIGZ1bmN0aW9uKTsKKyAgICB0cmF2ZXJz
ZVJ1bGVGZWF0dXJlc0ZvclNsb3R0ZWQoZWxlbWVudCwgZnVuY3Rpb24pOworfQorCit9Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317118</attachid>
            <date>2017-08-03 06:25:17 -0700</date>
            <delta_ts>2017-08-03 07:45:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-invalidation-common-6.patch</filename>
            <type>text/plain</type>
            <size>21765</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA4LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgY29tbW9uIGNvZGUg
aW4gU3R5bGU6OipDaGFuZ2VJbnZhbGlkYXRpb24gaW50byBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQzMTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIFRoZXJlIGlzIGEgbG90
IG9mIGNvcHkgY29kZSBoZXJlLgorCisgICAgICAgICogU3R5bGUvU3R5bGVJbnZhbGlkYXRpb25G
dW5jdGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dHJhdmVyc2VSdWxl
RmVhdHVyZXNJblNoYWRvd1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnRyYXZlcnNl
UnVsZUZlYXR1cmVzRm9yU2xvdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dHJhdmVy
c2VSdWxlRmVhdHVyZXMpOgorCisgICAgICAgICAgICBBZGQgZnVuY3Rpb25zIGZvciB0cmF2ZXJz
aW5nIHJ1bGUgZmVhdHVyZXMgdGhhdCBtYXkgYWZmZWN0IHN0eWxlIG9mIGFuIGVsZW1lbnQuCisg
ICAgICAgICAgICBVc2UgbGFtYmRhcyB0byBpbXBsZW1lbnQgY2xpZW50LXNwZWNpZmljIGJlaGF2
aW9yLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHN0eWxlL0F0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6bWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFmZmVjdGVkQnlTbG90
dGVkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpDbGFzc0NoYW5nZUludmFsaWRhdGlv
bjo6aW52YWxpZGF0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYXlCZUFmZmVj
dGVkQnlIb3N0UnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1heUJl
QWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgICogc3R5bGUvSWRDaGFu
Z2VJbnZhbGlkYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OklkQ2hhbmdlSW52
YWxpZGF0aW9uOjppbnZhbGlkYXRlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6Om1h
eUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6bWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKTogRGVsZXRlZC4KKwogMjAxNy0wOC0wMiAg
RGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogYWRkIHN0YWNrIHRyYWNlIGluZm9ybWF0aW9uIGZvciBlYWNoIFJlY29yZGluZ0FjdGlvbgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NzYzLDYgKzY3NjMsNyBAQAog
CQlFNDZBMkIxQzE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZB
MkIxQjE3Q0E2NUI5MDAwREJDRDggLyogVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ2QTJC
MUUxN0NBNzZCMTAwMERCQ0Q4IC8qIEVsZW1lbnRDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDZBMkIxRDE3Q0E3NkIxMDAwREJD
RDggLyogRWxlbWVudENoaWxkSXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDZCNDFGOTFDQjI0RTcwMDA4RjExREUgLyogTm9FdmVu
dERpc3BhdGNoQXNzZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDZCNDFGODFDQjI0RTcwMDA4RjExREUgLyogTm9FdmVudERpc3BhdGNoQXNz
ZXJ0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTQ2Qzc5NEIxRjEzRTgyQjAwRjM3MUUxIC8qIFN0eWxlSW52YWxpZGF0aW9uRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEExODIy
RjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCAqLzsgfTsK
IAkJRTQ3MTI3Q0ExNjM0MzhBMTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0UxNjMwNTlG
QzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0b3IuY3BwICovOyB9OwogCQlFNDcxMjdDQjE2MzQz
OEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxl
SW52YWxpZGF0b3IuaCAqLzsgfTsKIAkJRTQ3NzhCN0YxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3Vz
dG9tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ3NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICovOyB9OwpA
QCAtMTUzNjMsNiArMTUzNjQsNyBAQAogCQlFNDlCREEwQTEzMUZEM0U1MDAzQzU2RjAgLyogQ1NT
VmFsdWVQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Zh
bHVlUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTAwNzgyMUI4MjBF
QzgwMDJDNUE2RSAvKiBEYXRhVVJMRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEYXRhVVJMRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEEwMDc4NDFCODIwRUQzMDAyQzVBNkUgLyogRGF0YVVSTERlY29kZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVVSTERlY29kZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNEExODIyRjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZh
bGlkYXRpb25GdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25GdW5j
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBODE0RDMxQzZERUM0MDAw
QkY4NUFDIC8qIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QTgxNEQ1MUM2REVFOEQwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGFzc0No
YW5nZUludmFsaWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTgx
NEQ3MUM3MEUxMDUwMEJGODVBQyAvKiBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXR0cmlidXRlQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODM4LDYgKzI0ODQw
LDcgQEAKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywK
IAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5j
cHAgKi8sCiAJCQkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5j
dGlvbnMuaCAqLywKKwkJCQlFNEExODIyRjFGMTNCRTU4MDBGRUY2OTggLyogU3R5bGVJbnZhbGlk
YXRpb25GdW5jdGlvbnMuaCAqLywKIAkJCQlFNDdBOTdDRTE2MzA1OUZDMDA1RENEOTkgLyogU3R5
bGVJbnZhbGlkYXRvci5jcHAgKi8sCiAJCQkJRTQ3QTk3Q0YxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0b3IuaCAqLywKIAkJCQlFNERBQ0U2QjFEMTJFMTE2MDA3NTk4MEYgLyogU3R5
bGVQZW5kaW5nUmVzb3VyY2VzLmNwcCAqLywKQEAgLTI4NTg0LDYgKzI4NTg3LDcgQEAKIAkJCQk1
RUJCODkzNzFDNzc3ODI5MDBDNjVENDEgLyogTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTVFMTZBMkU0MUJGQTY1MEIwMDI5QTIxRSAvKiBNZWRpYUVuZHBv
aW50UGVlckNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVFQkI4OTMyMUM3Nzc4MjMw
MEM2NUQ0MSAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0NkM3OTRCMUYxM0U4MkIwMEYzNzFFMSAvKiBTdHlsZUludmFsaWRhdGlvbkZ1
bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUU0RUFCMDQxRDA3MTY2QTAwMDZBMTg0IC8q
IE1lZGlhRW5kcG9pbnRTZXNzaW9uRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
NDYxM0FEMENENjMzMTAwMEZBREE3NSAvKiBNZWRpYUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0RTE5NTkyMjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxp
ZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9BdHRyaWJ1dGVD
aGFuZ2VJbnZhbGlkYXRpb24uY3BwCShyZXZpc2lvbiAyMjAxOTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9BdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2NiArMjYsMzYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBdHRyaWJ1
dGVDaGFuZ2VJbnZhbGlkYXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIK
ICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJIVE1MU2xvdEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25G
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZUludmFsaWRhdG9yLmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5QXR0
cmlidXRlQ2hhbmdlKERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzLCBib29sIGlzSFRNTCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKK3N0YXRpYyBib29sIG1heUJlQWZmZWN0
ZWRCeUF0dHJpYnV0ZUNoYW5nZShjb25zdCBSdWxlRmVhdHVyZVNldCYgZmVhdHVyZXMsIGJvb2wg
aXNIVE1MLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIGF1dG8m
IG5hbWVTZXQgPSBpc0hUTUwgPyBydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJpYnV0ZUNhbm9uaWNh
bExvY2FsTmFtZXNJblJ1bGVzIDogcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVMb2NhbE5h
bWVzSW5SdWxlczsKKyAgICBhdXRvJiBuYW1lU2V0ID0gaXNIVE1MID8gZmVhdHVyZXMuYXR0cmli
dXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVsZXMgOiBmZWF0dXJlcy5hdHRyaWJ1dGVMb2NhbE5h
bWVzSW5SdWxlczsKICAgICByZXR1cm4gbmFtZVNldC5jb250YWlucyhhdHRyaWJ1dGVOYW1lLmxv
Y2FsTmFtZSgpKTsKIH0KIAotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUs
IGJvb2wmIG1heUFmZmVjdFNoYWRvd1RyZWUpCi17Ci0gICAgLy8gRklYTUU6IE1vcmUgb2YgdGhp
cyBjb2RlIHNob3VsZCBiZSBzaGFyZWQgYmV0d2VlbiBDbGFzcy9BdHRyaWJ1dGUvSWRJbnZhbGlk
YXRpb24uCi0gICAgYXV0byogc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpOwotICAg
IGlmICghc2hhZG93Um9vdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8mIHNoYWRv
d1J1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMo
KTsKLSAgICBhdXRvJiBhdXRob3JTdHlsZSA9IHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCk7
Ci0gICAgaWYgKGF1dGhvclN0eWxlLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpICYm
ICFhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbWF5QmVBZmZlY3RlZEJ5QXR0
cmlidXRlQ2hhbmdlKHNoYWRvd1J1bGVTZXRzLCBlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0
cmlidXRlTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRob3JTdHls
ZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAg
IG1heUFmZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgYm9vbCBtYXlCZUFmZmVjdGVkQnlTbG90dGVkUnVsZXMoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKLXsKLSAgICBmb3IgKGF1dG8q
IHNoYWRvd1Jvb3QgOiBhc3NpZ25lZFNoYWRvd1Jvb3RzSWZTbG90dGVkKGVsZW1lbnQpKSB7Ci0g
ICAgICAgIGF1dG8mIHJ1bGVTZXRzID0gc2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVy
KCkucnVsZVNldHMoKTsKLSAgICAgICAgaWYgKHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRl
ZFBzZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAobWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHJ1bGVTZXRzLCBlbGVt
ZW50LmlzSFRNTEVsZW1lbnQoKSwgYXR0cmlidXRlTmFtZSkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEF0dHJpYnV0ZUNoYW5n
ZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eWxlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3VmFsdWUpCiB7CiAgICAgaWYgKG5ld1ZhbHVlID09IG9sZFZhbHVlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCku
cnVsZVNldHMoKTsKICAgICBib29sIGlzSFRNTCA9IG1fZWxlbWVudC5pc0hUTUxFbGVtZW50KCk7
Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7CiAKLSAgICBib29sIG1heUFm
ZmVjdFN0eWxlID0gbWF5QmVBZmZlY3RlZEJ5QXR0cmlidXRlQ2hhbmdlKHJ1bGVTZXRzLCBpc0hU
TUwsIGF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeUhvc3RSdWxlcyht
X2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIG1heUFmZmVjdFNoYWRvd1RyZWUpCi0gICAgICAgIHx8
IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhtX2VsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwor
ICAgIGJvb2wgbWF5QWZmZWN0U3R5bGUgPSBmYWxzZTsKKyAgICBib29sIG1heUFmZmVjdFN0eWxl
SW5TaGFkb3dUcmVlID0gZmFsc2U7CisKKyAgICB0cmF2ZXJzZVJ1bGVGZWF0dXJlcyhtX2VsZW1l
bnQsIFsmXSAoY29uc3QgUnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzLCBib29sIG1heUFmZmVjdFNo
YWRvd1RyZWUpIHsKKyAgICAgICAgaWYgKCFtYXlCZUFmZmVjdGVkQnlBdHRyaWJ1dGVDaGFuZ2Uo
ZmVhdHVyZXMsIGlzSFRNTCwgYXR0cmlidXRlTmFtZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1heUFmZmVjdFN0eWxlID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1heUFmZmVjdFNoYWRv
d1RyZWUpCisgICAgICAgICAgICBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IHRydWU7Cisg
ICAgfSk7CiAKICAgICBpZiAoIW1heUFmZmVjdFN0eWxlKQogICAgICAgICByZXR1cm47CkBAIC05
NSwxMyArNjUsOCBAQCB2b2lkIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9lbGVtZW50LnNoYWRvd1Jvb3QoKSAm
JiBydWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQot
ICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQotICAgIGlmIChpczxIVE1MU2xv
dEVsZW1lbnQ+KG1fZWxlbWVudCkgJiYgIXJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBz
ZXVkb0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJl
ZSA9IHRydWU7Ci0KLSAgICBpZiAobWF5QWZmZWN0U2hhZG93VHJlZSkgeworICAgIGlmIChtYXlB
ZmZlY3RTdHlsZUluU2hhZG93VHJlZSkgeworICAgICAgICAvLyBGSVhNRTogTW9yZSBmaW5lLWdy
YWluZWQgaW52YWxpZGF0aW9uLgogICAgICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9y
U3VidHJlZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExLDYgKzc2LDcgQEAgdm9p
ZCBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaQogICAgIGlmICghY2hpbGRyZW5P
ZlR5cGU8RWxlbWVudD4obV9lbGVtZW50KS5maXJzdCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsK
ICAgICBhdXRvKiBhdHRyaWJ1dGVSdWxlcyA9IHJ1bGVTZXRzLmFuY2VzdG9yQXR0cmlidXRlUnVs
ZXNGb3JIVE1MKGF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkpOwogICAgIGlmICghYXR0cmlidXRl
UnVsZXMpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL0NsYXNz
Q2hhbmdlSW52YWxpZGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAJKHJldmlzaW9uIDIyMDE5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTQgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuaCIK
ICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkhUTUxTbG90RWxl
bWVudC5oIgotI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3Ry
aW5nLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJTdHlsZUludmFsaWRhdG9yLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1
ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTg3LDY0ICs4MywyNyBAQCBzdGF0aWMgQ2xhc3NDaGFuZ2VWZWN0b3Ig
Y29tcHV0ZUNsYXNzQ2hhCiAgICAgcmV0dXJuIGNoYW5nZWRDbGFzc2VzOwogfQogCi1zdGF0aWMg
Ym9vbCBtYXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgQXRv
bWljU3RyaW5nSW1wbCogY2hhbmdlZENsYXNzLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQot
ewotICAgIC8vIEZJWE1FOiBNb3JlIG9mIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIGJldHdl
ZW4gQ2xhc3MvQXR0cmlidXRlL0lkSW52YWxpZGF0aW9uLgotICAgIGlmICghc2hhZG93Um9vdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8mIHNoYWRvd1J1bGVTZXRzID0gc2hhZG93
Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKLSAgICBhdXRvJiBhdXRo
b3JTdHlsZSA9IHNoYWRvd1J1bGVTZXRzLmF1dGhvclN0eWxlKCk7Ci0gICAgaWYgKGF1dGhvclN0
eWxlLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNFbXB0eSgpICYmICFhdXRob3JTdHlsZS5oYXNI
b3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5S
dWxlcy5jb250YWlucyhjaGFuZ2VkQ2xhc3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93
VHJlZSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0
IFZlY3RvcjxTaGFkb3dSb290Kj4mIGFzc2lnbmVkU2hhZG93Um9vdHMsIEF0b21pY1N0cmluZ0lt
cGwqIGNoYW5nZWRDbGFzcykKLXsKLSAgICBmb3IgKGF1dG8mIGFzc2lnbmVkU2hhZG93Um9vdCA6
IGFzc2lnbmVkU2hhZG93Um9vdHMpIHsKLSAgICAgICAgYXV0byYgcnVsZVNldHMgPSBhc3NpZ25l
ZFNoYWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgICAg
IGlmIChydWxlU2V0cy5hdXRob3JTdHlsZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bGVTZXRzLmZl
YXR1cmVzKCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgQ2xh
c3NDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHlsZShjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBvbGRDbGFzc2VzLCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzKQogewog
ICAgIGF1dG8gY2hhbmdlZENsYXNzZXMgPSBjb21wdXRlQ2xhc3NDaGFuZ2Uob2xkQ2xhc3Nlcywg
bmV3Q2xhc3Nlcyk7Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlID0gZmFsc2U7Ci0KLSAg
ICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVyKCkucnVsZVNldHMoKTsK
LSAgICBhdXRvKiBzaGFkb3dSb290ID0gbV9lbGVtZW50LnNoYWRvd1Jvb3QoKTsKLSAgICBhdXRv
IGFzc2lnbmVkU2hhZG93Um9vdHMgPSBhc3NpZ25lZFNoYWRvd1Jvb3RzSWZTbG90dGVkKG1fZWxl
bWVudCk7CiAKICAgICBDbGFzc0NoYW5nZVZlY3RvciBjaGFuZ2VkQ2xhc3Nlc0FmZmVjdGluZ1N0
eWxlOwotICAgIGZvciAoYXV0byogY2hhbmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKLSAg
ICAgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IHJ1bGVTZXRzLmZlYXR1cmVzKCkuY2xhc3Nlc0lu
UnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKQotICAgICAgICAgICAgfHwgbWF5QmVBZmZlY3Rl
ZEJ5SG9zdFJ1bGVzKHNoYWRvd1Jvb3QsIGNoYW5nZWRDbGFzcywgbWF5QWZmZWN0U2hhZG93VHJl
ZSkKLSAgICAgICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0ZWRSdWxlcyhhc3NpZ25lZFNo
YWRvd1Jvb3RzLCBjaGFuZ2VkQ2xhc3MpOwotICAgICAgICBpZiAobWF5QWZmZWN0U3R5bGUpCisg
ICAgYm9vbCBtYXlBZmZlY3RTdHlsZUluU2hhZG93VHJlZSA9IGZhbHNlOworCisgICAgdHJhdmVy
c2VSdWxlRmVhdHVyZXMobV9lbGVtZW50LCBbJl0gKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0
dXJlcywgYm9vbCBtYXlBZmZlY3RTaGFkb3dUcmVlKSB7CisgICAgICAgIGZvciAoYXV0byogY2hh
bmdlZENsYXNzIDogY2hhbmdlZENsYXNzZXMpIHsKKyAgICAgICAgICAgIGlmICghZmVhdHVyZXMu
Y2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZENsYXNzKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5bGUuYXBwZW5k
KGNoYW5nZWRDbGFzcyk7Ci0gICAgfTsKKyAgICAgICAgICAgIGlmIChtYXlBZmZlY3RTaGFkb3dU
cmVlKQorICAgICAgICAgICAgICAgIG1heUFmZmVjdFN0eWxlSW5TaGFkb3dUcmVlID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0pOwogCiAgICAgaWYgKGNoYW5nZWRDbGFzc2VzQWZmZWN0aW5nU3R5
bGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hhZG93Um9vdCAmJiBy
dWxlU2V0cy5hdXRob3JTdHlsZSgpLmhhc1NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcygpKQotICAg
ICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLQotICAgIGlmIChpczxIVE1MU2xvdEVs
ZW1lbnQ+KG1fZWxlbWVudCkgJiYgIXJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVk
b0VsZW1lbnRSdWxlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9
IHRydWU7Ci0KLSAgICBpZiAobWF5QWZmZWN0U2hhZG93VHJlZSkgeworICAgIGlmIChtYXlBZmZl
Y3RTdHlsZUluU2hhZG93VHJlZSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGZp
bmUtZ3JhaW5lZCBpbnZhbGlkYXRpb24gZm9yIHNoYWRvdyB0cmVlLgogICAgICAgICBtX2VsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwogICAgICAgICByZXR1cm47CkBAIC0xNTUs
NiArMTE0LDcgQEAgdm9pZCBDbGFzc0NoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZQogICAg
IGlmICghY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4obV9lbGVtZW50KS5maXJzdCgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBhdXRvJiBydWxlU2V0cyA9IG1fZWxlbWVudC5zdHlsZVJlc29sdmVy
KCkucnVsZVNldHMoKTsKICAgICBmb3IgKGF1dG8qIGNoYW5nZWRDbGFzcyA6IGNoYW5nZWRDbGFz
c2VzQWZmZWN0aW5nU3R5bGUpIHsKICAgICAgICAgYXV0byogYW5jZXN0b3JDbGFzc1J1bGVzID0g
cnVsZVNldHMuYW5jZXN0b3JDbGFzc1J1bGVzKGNoYW5nZWRDbGFzcyk7CiAgICAgICAgIGlmICgh
YW5jZXN0b3JDbGFzc1J1bGVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvSWRDaGFuZ2VJ
bnZhbGlkYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL0lkQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcAkocmV2aXNpb24gMjIwMTk4KQorKysgU291cmNlL1dlYkNvcmUv
c3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2OCAr
MjYsMzIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJZENoYW5nZUludmFsaWRh
dGlvbi5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnRSdWxlU2V0cy5oIgogI2luY2x1ZGUgIkVsZW1l
bnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiSFRNTFNsb3RFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJT
dHlsZVNjb3BlLmgiCisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RhdGljIGJvb2wgbWF5
QmVBZmZlY3RlZEJ5SG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgY2hhbmdlZElkLCBib29sJiBtYXlBZmZlY3RTaGFkb3dUcmVlKQotewotICAgIGF1
dG8qIHNoYWRvd1Jvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoIXNoYWRvd1Jv
b3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvJiBzaGFkb3dSdWxlU2V0cyA9IHNo
YWRvd1Jvb3QtPnN0eWxlU2NvcGUoKS5yZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgYXV0byYg
YXV0aG9yU3R5bGUgPSBzaGFkb3dSdWxlU2V0cy5hdXRob3JTdHlsZSgpOwotICAgIGlmIChhdXRo
b3JTdHlsZS5ob3N0UHNldWRvQ2xhc3NSdWxlcygpLmlzRW1wdHkoKSAmJiAhYXV0aG9yU3R5bGUu
aGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNoYWRvd1J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5S
dWxlcy5jb250YWlucyhjaGFuZ2VkSWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXV0aG9yU3R5bGUuaGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJl
ZSgpKQotICAgICAgICBtYXlBZmZlY3RTaGFkb3dUcmVlID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgbWF5QmVBZmZlY3RlZEJ5U2xvdHRlZFJ1bGVzKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgY2hhbmdlZElkKQotewotICAgIGZv
ciAoYXV0byogc2hhZG93Um9vdCA6IGFzc2lnbmVkU2hhZG93Um9vdHNJZlNsb3R0ZWQoZWxlbWVu
dCkpIHsKLSAgICAgICAgYXV0byYgcnVsZVNldHMgPSBzaGFkb3dSb290LT5zdHlsZVNjb3BlKCku
cmVzb2x2ZXIoKS5ydWxlU2V0cygpOwotICAgICAgICBpZiAocnVsZVNldHMuYXV0aG9yU3R5bGUo
KS5zbG90dGVkUHNldWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFp
bnMoY2hhbmdlZElkKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIHZvaWQgSWRDaGFuZ2VJbnZhbGlkYXRpb246OmludmFsaWRhdGVTdHls
ZShjb25zdCBBdG9taWNTdHJpbmcmIGNoYW5nZWRJZCkKIHsKICAgICBpZiAoY2hhbmdlZElkLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcnVsZVNldHMgPSBtX2VsZW1l
bnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7Ci0gICAgYm9vbCBtYXlBZmZlY3RTaGFkb3dU
cmVlID0gZmFsc2U7CisgICAgYm9vbCBtYXlBZmZlY3RTdHlsZSA9IGZhbHNlOworICAgIGJvb2wg
bWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUgPSBmYWxzZTsKIAotICAgIGJvb2wgbWF5QWZmZWN0
U3R5bGUgPSBydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoY2hhbmdlZElk
KQotICAgICAgICB8fCBtYXlCZUFmZmVjdGVkQnlIb3N0UnVsZXMobV9lbGVtZW50LCBjaGFuZ2Vk
SWQsIG1heUFmZmVjdFNoYWRvd1RyZWUpCi0gICAgICAgIHx8IG1heUJlQWZmZWN0ZWRCeVNsb3R0
ZWRSdWxlcyhtX2VsZW1lbnQsIGNoYW5nZWRJZCk7CisgICAgdHJhdmVyc2VSdWxlRmVhdHVyZXMo
bV9lbGVtZW50LCBbJl0gKGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcywgYm9vbCBtYXlB
ZmZlY3RTaGFkb3dUcmVlKSB7CisgICAgICAgIGlmICghZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250
YWlucyhjaGFuZ2VkSWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtYXlBZmZlY3RT
dHlsZSA9IHRydWU7CisgICAgICAgIGlmIChtYXlBZmZlY3RTaGFkb3dUcmVlKQorICAgICAgICAg
ICAgbWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUgPSB0cnVlOworICAgIH0pOwogCiAgICAgaWYg
KCFtYXlBZmZlY3RTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fZWxlbWVudC5z
aGFkb3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVt
ZW50UnVsZXMoKSkKLSAgICAgICAgbWF5QWZmZWN0U2hhZG93VHJlZSA9IHRydWU7Ci0KLSAgICBp
ZiAoaXM8SFRNTFNsb3RFbGVtZW50PihtX2VsZW1lbnQpICYmICFydWxlU2V0cy5hdXRob3JTdHls
ZSgpLnNsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1heUFm
ZmVjdFNoYWRvd1RyZWUgPSB0cnVlOwotCi0gICAgaWYgKG1heUFmZmVjdFNoYWRvd1RyZWUpIHsK
KyAgICBpZiAobWF5QWZmZWN0U3R5bGVJblNoYWRvd1RyZWUpIHsKICAgICAgICAgbV9lbGVtZW50
LmludmFsaWRhdGVTdHlsZUZvclN1YnRyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTk2LDYgKzYwLDcgQEAgdm9pZCBJZENoYW5nZUludmFsaWRhdGlvbjo6aW52YWxpZGF0ZVN0eQog
CiAgICAgLy8gVGhpcyBjb3VsZCBiZSBlYXNpbHkgb3B0aW1pemVkIGZvciBmaW5lLWdyYWluZWQg
ZGVzY2VuZGFudCBpbnZhbGlkYXRpb24gc2ltaWxhciB0byBDbGFzc0NoYW5nZUludmFsaWRhdGlv
bi4KICAgICAvLyBIb3dldmVyIHVzaW5nIGlkcyBmb3IgZHluYW1pYyBzdHlsaW5nIGlzIHJhcmUg
YW5kIHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBtZW1vcnkgY29zdCBvZiB0aGUgcmVx
dWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIGF1dG8mIHJ1bGVTZXRzID0gbV9lbGVtZW50LnN0
eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpOwogICAgIGJvb2wgbWF5QWZmZWN0RGVzY2VuZGFudFN0
eWxlID0gcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNNYXRjaGluZ0FuY2VzdG9yc0luUnVsZXMuY29u
dGFpbnMoY2hhbmdlZElkKTsKICAgICBpZiAobWF5QWZmZWN0RGVzY2VuZGFudFN0eWxlKQogICAg
ICAgICBtX2VsZW1lbnQuaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRpb25GdW5jdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0aW9uRnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCisjaW5jbHVkZSAi
SFRNTFNsb3RFbGVtZW50LmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUcmF2ZXJzZUZ1
bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVyc2VSdWxlRmVhdHVyZXNJblNoYWRvd1RyZWUoRWxl
bWVudCYgZWxlbWVudCwgVHJhdmVyc2VGdW5jdGlvbiYmIGZ1bmN0aW9uKQoreworICAgIGlmICgh
ZWxlbWVudC5zaGFkb3dSb290KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBzaGFkb3dS
dWxlU2V0cyA9IGVsZW1lbnQuc2hhZG93Um9vdCgpLT5zdHlsZVNjb3BlKCkucmVzb2x2ZXIoKS5y
dWxlU2V0cygpOworICAgIGF1dG8mIGF1dGhvclN0eWxlID0gc2hhZG93UnVsZVNldHMuYXV0aG9y
U3R5bGUoKTsKKyAgICBib29sIGhhc0hvc3RQc2V1ZG9DbGFzc1J1bGVzTWF0Y2hpbmdJblNoYWRv
d1RyZWUgPSBhdXRob3JTdHlsZS5oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFk
b3dUcmVlKCk7CisgICAgaWYgKGF1dGhvclN0eWxlLmhvc3RQc2V1ZG9DbGFzc1J1bGVzKCkuaXNF
bXB0eSgpICYmICFoYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dUcmVlKQor
ICAgICAgICByZXR1cm47CisgICAgZnVuY3Rpb24oc2hhZG93UnVsZVNldHMuZmVhdHVyZXMoKSwg
aGFzSG9zdFBzZXVkb0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUcmF2ZXJzZUZ1bmN0aW9uPgoraW5saW5lIHZvaWQgdHJhdmVyc2VSdWxl
RmVhdHVyZXNGb3JTbG90dGVkKEVsZW1lbnQmIGVsZW1lbnQsIFRyYXZlcnNlRnVuY3Rpb24mJiBm
dW5jdGlvbikKK3sKKyAgICBhdXRvIGFzc2lnbmVkU2hhZG93Um9vdHMgPSBhc3NpZ25lZFNoYWRv
d1Jvb3RzSWZTbG90dGVkKGVsZW1lbnQpOworICAgIGZvciAoYXV0byYgYXNzaWduZWRTaGFkb3dS
b290IDogYXNzaWduZWRTaGFkb3dSb290cykgeworICAgICAgICBhdXRvJiBydWxlU2V0cyA9IGFz
c2lnbmVkU2hhZG93Um9vdC0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKTsKKyAg
ICAgICAgaWYgKHJ1bGVTZXRzLmF1dGhvclN0eWxlKCkuc2xvdHRlZFBzZXVkb0VsZW1lbnRSdWxl
cygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmdW5jdGlvbihy
dWxlU2V0cy5mZWF0dXJlcygpLCBmYWxzZSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHJhdmVyc2VGdW5jdGlvbj4KK2lubGluZSB2b2lkIHRyYXZlcnNlUnVsZUZlYXR1cmVzKEVs
ZW1lbnQmIGVsZW1lbnQsIFRyYXZlcnNlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3sKKyAgICBhdXRv
JiBydWxlU2V0cyA9IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCk7CisKKyAgICBh
dXRvIG1heUFmZmVjdFNoYWRvd1RyZWUgPSBbJl0geworICAgICAgICBpZiAoZWxlbWVudC5zaGFk
b3dSb290KCkgJiYgcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5oYXNTaGFkb3dQc2V1ZG9FbGVtZW50
UnVsZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXM8SFRNTFNs
b3RFbGVtZW50PihlbGVtZW50KSAmJiAhcnVsZVNldHMuYXV0aG9yU3R5bGUoKS5zbG90dGVkUHNl
dWRvRWxlbWVudFJ1bGVzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgZnVuY3Rpb24ocnVsZVNldHMuZmVh
dHVyZXMoKSwgbWF5QWZmZWN0U2hhZG93VHJlZSgpKTsKKworICAgIHRyYXZlcnNlUnVsZUZlYXR1
cmVzSW5TaGFkb3dUcmVlKGVsZW1lbnQsIGZ1bmN0aW9uKTsKKyAgICB0cmF2ZXJzZVJ1bGVGZWF0
dXJlc0ZvclNsb3R0ZWQoZWxlbWVudCwgZnVuY3Rpb24pOworfQorCit9Cit9CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>