<?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>235101</bug_id>
          
          <creation_ts>2022-01-12 02:26:16 -0800</creation_ts>
          <short_desc>[LBSE] Introduce SVGContainerLayout</short_desc>
          <delta_ts>2022-01-14 01:44:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>
          <dependson>235099</dependson>
    
    <dependson>235100</dependson>
          <blocked>90738</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1830048</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-12 02:26:16 -0800</bug_when>
    <thetext>SVGContainerLayout contains the implementation for the two-pass layout procedure, as described in the technical design document.
The container-children-layout procedure was spread over SVGRenderSupport before and is now in a central place for LBSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830094</commentid>
    <comment_count>1</comment_count>
      <attachid>448935</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-12 05:14:13 -0800</bug_when>
    <thetext>Created attachment 448935
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830495</commentid>
    <comment_count>2</comment_count>
      <attachid>448935</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-13 01:46:11 -0800</bug_when>
    <thetext>Comment on attachment 448935
Patch, v1

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        Currently the functionality is not observable yet, as we don&apos;t create

Probably remove the first &apos;yet&apos;.

&gt; Source/WebCore/rendering/svg/SVGContainerLayout.cpp:99
&gt; +        bool childNeededLayout = child.needsLayout();

Is it possible that childNeededLayout != needsLayout here?

&gt; Source/WebCore/rendering/svg/SVGContainerLayout.h:44
&gt; +    static bool transformToRootChanged(const RenderObject* ancestor);

Do these 2 need to be public?

&gt; Source/WebCore/rendering/svg/SVGContainerLayout.h:47
&gt; +    void layoutDifferentRootIfNeeded(const RenderElement&amp;);

Different from what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830833</commentid>
    <comment_count>3</comment_count>
      <attachid>449144</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-14 00:41:29 -0800</bug_when>
    <thetext>Created attachment 449144
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830834</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-14 00:41:34 -0800</bug_when>
    <thetext>(In reply to Rob Buis from comment #2)
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        Currently the functionality is not observable yet, as we don&apos;t create
&gt; 
&gt; Probably remove the first &apos;yet&apos;.
Fixed.

&gt; &gt; Source/WebCore/rendering/svg/SVGContainerLayout.cpp:99
&gt; &gt; +        bool childNeededLayout = child.needsLayout();
&gt; 
&gt; Is it possible that childNeededLayout != needsLayout here?
Yes, there are cases where e.g. a text renderer did not originally need layout, but we force a relayout, e.g. if transform to root changes (on-screen scaling factor for text rendering -- which is an ugly topic that we should gt rid of in the future).

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGContainerLayout.h:44
&gt; &gt; +    static bool transformToRootChanged(const RenderObject* ancestor);
&gt; 
&gt; Do these 2 need to be public?
Yes, they are used in other places in LBSE branch.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGContainerLayout.h:47
&gt; &gt; +    void layoutDifferentRootIfNeeded(const RenderElement&amp;);
&gt; 
&gt; Different from what?
Different from the layout root belonging to the passed RenderElement...
Used for cases like referencing a SVG filter from a different document.

I agree the naming is not wise, though it&apos;s using existing terminology from SVGResources, which we do want to re-visit in future. SVGResources are mostly obsolete in LBSE, after all clipper/masker/filter... applyResource are all no-ops in LBSE as opposed to the legacy engine, since clipping/masking/filtering is handled via RenderLayer in LBSE.

Anyhow, I&apos;d like to keep the existing terminology for now, in order not to open another construction site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830838</commentid>
    <comment_count>5</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-01-14 01:07:06 -0800</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #4)
&gt; &gt; Different from what?
&gt; Different from the layout root belonging to the passed RenderElement...
&gt; Used for cases like referencing a SVG filter from a different document.
&gt; 
&gt; I agree the naming is not wise, though it&apos;s using existing terminology from
&gt; SVGResources, which we do want to re-visit in future. SVGResources are
&gt; mostly obsolete in LBSE, after all clipper/masker/filter... applyResource
&gt; are all no-ops in LBSE as opposed to the legacy engine, since
&gt; clipping/masking/filtering is handled via RenderLayer in LBSE.

That is great to hear!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830843</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-01-14 01:43:17 -0800</bug_when>
    <thetext>Committed r288011 (246037@trunk): &lt;https://commits.webkit.org/246037@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830844</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-14 01:44:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/87592353&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448935</attachid>
            <date>2022-01-12 05:14:13 -0800</date>
            <delta_ts>2022-01-14 00:41:24 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-235101-20220112051412.patch</filename>
            <type>text/plain</type>
            <size>26359</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFmZWJjYTAzODFjNDc5
NDgyZDdlMjJiNWM4NjZiMGU3ZjA4MDhlMC4uYmUzZmZhY2ZjYWNjZTk1NmVhNWNmNWZhNTAyM2Y3
YTRkMzdhZmE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAxLTEyICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQ29udGFpbmVyTGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzUxMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQsIGEgdXRp
bGl0eSBjbGFzcyBjZW50cmFsaXppbmcKKyAgICAgICAgdGhlICJsYXlvdXQgY2hpbGRyZW4gaW4g
U1ZHIHJlbmRlciB0cmVlIiBhbGdvcml0aG0uIFRoZSBsZWdhY3kKKyAgICAgICAgZW5naW5lcyBy
ZWxpZXMgb24gdmFyaW91cyBoZWxwZXIgbWV0aG9kcyBpbiBTVkdSZW5kZXJpbmdTdXBwb3J0IC0t
IGZvcgorICAgICAgICBMQlNFIGl0J3MgYWxsIGluIG9uZSBwbGFjZTogU1ZHQ29udGFpbmVyTGF5
b3V0LgorCisgICAgICAgIFRoZSBhY3R1YWwgdHdvLXBhc3MgYWxnb3JpdGhtIGlzIGRlc2NyaWJl
ZCBpbiB0aGUgdGVjaG5pY2FsIGRvY3VtZW50CisgICAgICAgIGNvdmVyaW5nIExCU0UuIEl0J3Mg
aWRlbnRpY2FsIHRvIHRoZSBMQlNFIGRvd25zdHJlYW0gdmVyc2lvbiwgd2hpY2gKKyAgICAgICAg
dXNlZCB0byBwYXNzIGFsbCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBm
dW5jdGlvbmFsaXR5IGlzIG5vdCBvYnNlcnZhYmxlIHlldCwgYXMgd2UgZG9uJ3QgY3JlYXRlCisg
ICAgICAgIExCU0UgcmVuZGVyZXJzIHlldC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVj
dDo6aXNTVkdMYXllckF3YXJlUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Nv
bnRhaW5lcjo6bGF5b3V0Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OlNWR0NvbnRhaW5lckxheW91dCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OmxheW91dENoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OmxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQ29udGFpbmVyTGF5b3V0Ojpwb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExv
Y2F0aW9uQ29uc2lzdGVuY3kpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29udGFpbmVyTGF5b3V0
OjpsYXlvdXREaWZmZXJlbnRSb290SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29u
dGFpbmVyTGF5b3V0OjppbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OmxheW91dFNpemVPZk5lYXJlc3RWaWV3cG9ydENo
YW5nZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ29udGFpbmVyTGF5b3V0Ojp0cmFu
c2Zvcm1Ub1Jvb3RDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5l
ckxheW91dC5oOiBBZGRlZC4KKwogMjAyMi0wMS0xMiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnpp
bW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBbTEJTRV0gQmVnaW4gbGF5ZXItYXdhcmUg
UmVuZGVyU1ZHQ29udGFpbmVyIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDU4NjYx
MGVhODc5ZDViZDZmMjRiNGE1ZWExMTVkY2QzYzhiOTQ0MGQuLmIzMGNkMjZiNDExZDMyYjJhYzU5
YjBjODEyNGI5ODc1MzY3ZjBiNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNTAzLDYgKzI1MDMsNyBA
QCByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHRQYXRoLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmNwcAogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdW
aWV3cG9ydENvbnRhaW5lci5jcHAKIHJlbmRlcmluZy9zdmcvU1ZHQm91bmRpbmdCb3hDb21wdXRh
dGlvbi5jcHAKK3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcAogcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAogcmVuZGVyaW5nL3N2Zy9TVkdQYXRoRGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NGRiMWU2ZWY0Zjk3Mzgx
NzljMDFkMGNlNDYyNWM2NWE3YTNjODI0Li45NTY0NDQ3OTM1MDYyOGQ4YzQ4ODJkN2EzZTczZTdl
NTBkNzE2YmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkJMDg1NEIwMUIxMjU1RTRFNjAwQjlD
REQwIC8qIFJlbmRlclNWR1RleHRQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAwOTEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4
dFBhdGguaCAqLzsgfTsKIAkJMDg1NEIwMUQxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRlclNWR1RT
cGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0
QjAwQjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCAqLzsgfTsKIAkJMDg0NEIw
MUQxMjU1QjRFNjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDRCMDFEMTI1NUU0RTYw
MEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmggKi87IH07CisJCTA4NDRCMDFE
MTI1NUI1QTYxMEI4QUZEMSAvKiBTVkdDb250YWluZXJMYXlvdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDRCMDFEMTI1NUU1QTYxMEI4QUZEMSAv
KiBTVkdDb250YWluZXJMYXlvdXQuaCAqLzsgfTsKIAkJMDg1NEIwMUYxMjU1RTRFNjAwQjlDREQw
IC8qIFNWR0lubGluZUZsb3dCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NTRCMDBEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94
LmggKi87IH07CiAJCTA4NTRCMDIxMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAw
RjEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lVGV4dEJveC5oICovOyB9OwogCQkwODU0QjAy
MzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMTExMjU1RTRFNjAwQjlDREQwIC8q
IFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKQEAgLTYxODgsNyArNjE4OSw5IEBACiAJCTA4NTRC
MDA5MTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdUZXh0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODU0QjAwQjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHVFNwYW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzNEIwMEMxMjQ0RTRFNjAwQjlDREQwIC8qIFNW
R0JvdW5kaW5nQm94Q29tcHV0YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTA4MzRCMDBDMTI0NEU1QTYxMEI4QUZEMSAvKiBTVkdDb250YWluZXJMYXlv
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHQ29udGFpbmVy
TGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0NEIwMUQxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwODQ0QjAxRDEyNTVFNUE2MTBCOEFGRDEgLyogU1ZHQ29udGFp
bmVyTGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0NvbnRhaW5l
ckxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwQzEyNTVFNEU2
MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdJbmxpbmVGbG93Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDg1NEIwMEQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZUZsb3dCb3guaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW5saW5lRmxvd0JveC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRTEyNTVFNEU2MDBCOUNERDAgLyogU1ZH
SW5saW5lVGV4dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
VkdJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MDA0
LDYgKzE5MDA3LDggQEAKIAkJCQk0MzY3MDhBQzEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZH
Vmlld3BvcnRDb250YWluZXIuaCAqLywKIAkJCQkwODM0QjAwQzEyNDRFNEU2MDBCOUNERDAgLyog
U1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAgKi8sCiAJCQkJMDg0NEIwMUQxMjU1RTRFNjAw
QjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24uaCAqLywKKwkJCQkwODM0QjAwQzEy
NDRFNUE2MTBCOEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmNwcCAqLywKKwkJCQkwODQ0QjAx
RDEyNTVFNUE2MTBCOEFGRDEgLyogU1ZHQ29udGFpbmVyTGF5b3V0LmggKi8sCiAJCQkJMDg1NEIw
MEMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZUZsb3dCb3guY3BwICovLAogCQkJCTA4NTRC
MDBEMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94LmggKi8sCiAJCQkJMDg1NEIw
MEUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guY3BwICovLApAQCAtMzczMzAs
NiArMzczMzUsNyBAQAogCQkJCUIyMjI3OTlDMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDaXJjbGVF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5RjBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHQ2xpcFBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBNTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTA4NDRCMDFEMTI1NUI1QTYxMEI4QUZEMSAvKiBTVkdDb250YWluZXJMYXlv
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUE4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdD
dXJzb3JFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlBRTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRGVmc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUIxMEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdEZXNjRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNGRiYTljODU0N2Q4ZTc4YTk3YzExMGYx
MWVjMDJkNWE2NmJkNWRjMS4uYzM1NjY1MGM1ZGY5NGQ2YmFlZmMwOWVlYzQ4NTU0ZjM2ZGM1NmM2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMzUyLDYgKzM1
Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU1ZHUm9vdE9yTGVnYWN5U1ZHUm9vdCgpIGNvbnN0
IHsgcmV0dXJuIGlzU1ZHUm9vdCgpIHx8IGlzTGVnYWN5U1ZHUm9vdCgpOyB9CiAgICAgYm9vbCBp
c1NWR1NoYXBlT3JMZWdhY3lTVkdTaGFwZSgpIGNvbnN0IHsgcmV0dXJuIGlzU1ZHU2hhcGUoKSB8
fCBpc0xlZ2FjeVNWR1NoYXBlKCk7IH0KICAgICBib29sIGlzUmVuZGVyT3JMZWdhY3lSZW5kZXJT
VkdNb2RlbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyU1ZHTW9kZWxPYmplY3QoKSB8
fCBpc0xlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0KCk7IH0KKyAgICBib29sIGlzU1ZHTGF5ZXJB
d2FyZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gaXNTVkdSb290KCkgfHwgaXNSZW5kZXJTVkdN
b2RlbE9iamVjdCgpIHx8IGlzU1ZHVGV4dCgpIHx8IGlzU1ZHSW5saW5lKCkgfHwgaXNTVkdGb3Jl
aWduT2JqZWN0KCk7IH0KIAogICAgIC8vIEZJWE1FOiBUaG9zZSBiZWxvbmcgaW50byBhIFNWRyBz
cGVjaWZpYyBiYXNlLWNsYXNzIGZvciBhbGwgcmVuZGVyZXJzIChzZWUgYWJvdmUpCiAgICAgLy8g
VW5mb3J0dW5hdGVseSB3ZSBkb24ndCBoYXZlIHN1Y2ggYSBjbGFzcyB5ZXQsIGJlY2F1c2UgaXQn
cyBub3QgcG9zc2libGUgZm9yIGFsbCByZW5kZXJlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAppbmRleCAyYmNkNWZlYWQ3MTk1
ZmM2YzU3MmVjYjNjNzVjZTBiMTI4OTk2ZDg5Li5iZGNjNTgxNWI0NjYyN2YwZmYxYzVhMTQ4MDI0
MGZmNjU3Yjk0N2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKLS8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0Ci0v
LyAjaW5jbHVkZSAiU1ZHQ29udGFpbmVyTGF5b3V0LmgiCisjaW5jbHVkZSAiU1ZHQ29udGFpbmVy
TGF5b3V0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNW
R1Jlc291cmNlcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCkBAIC04OCwxNyAr
ODcsMTUgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmNhbGN1bGF0ZVZpZXdwb3J0KCkKIAog
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dENoaWxkcmVuKCkKIHsKLSAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dAotICAgIC8vIFNWR0NvbnRhaW5l
ckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOwotICAgIC8vIGNvbnRhaW5lckxheW91dC5s
YXlvdXRDaGlsZHJlbihzZWxmTmVlZHNMYXlvdXQoKSB8fCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0
ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoKnRoaXMpKTsKKyAgICBTVkdDb250YWluZXJMYXlvdXQg
Y29udGFpbmVyTGF5b3V0KCp0aGlzKTsKKyAgICBjb250YWluZXJMYXlvdXQubGF5b3V0Q2hpbGRy
ZW4oc2VsZk5lZWRzTGF5b3V0KCkgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29u
dGFpbmVyTGF5b3V0KCp0aGlzKSk7CiAKICAgICBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uIGJv
dW5kaW5nQm94Q29tcHV0YXRpb24oKnRoaXMpOwogICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBi
b3VuZGluZ0JveENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3Vu
ZGluZ0JveENvbXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24sICZtX29iamVj
dEJvdW5kaW5nQm94VmFsaWQpOwogICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgIHNldExheW91dFJl
Y3QoZW5jbG9zaW5nTGF5b3V0UmVjdChtX29iamVjdEJvdW5kaW5nQm94KSk7CiAKLSAgICAvLyBG
SVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dAotICAgIC8vIGNvbnRhaW5l
ckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOworICAgIGNvbnRh
aW5lckxheW91dC5wb3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpOwogfQogCiB2
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDEyMWM2Mzc2NDkwNDFkZWNjZWJhNTc5
OTQ5ZjVjZTZkYzNmZjQ2ZGQuLjBkYzliYWI2N2QwMzM4MTBlNzlmM2Q4NDBmMzY3ZTM1NDJiYzk0
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9v
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cApAQCAtNDQsOCArNDQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLS8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0Ci0vLyAjaW5jbHVkZSAiU1ZHQ29u
dGFpbmVyTGF5b3V0LmgiCisjaW5jbHVkZSAiU1ZHQ29udGFpbmVyTGF5b3V0LmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCkBAIC0xOTQsMTkgKzE5MywxNCBAQCB2b2lkIFJl
bmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAgdXBkYXRlTGF5ZXJJbmZvcm1hdGlvbigpOwogCiAg
ICAgewotICAgICAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91
dAogICAgICAgICBTVkdDb250YWluZXJMYXlvdXQgY29udGFpbmVyTGF5b3V0KCp0aGlzKTsKICAg
ICAgICAgY29udGFpbmVyTGF5b3V0LmxheW91dENoaWxkcmVuKG5lZWRzTGF5b3V0IHx8IFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dCgqdGhpcykpOwotICAgICAg
ICAqLwogCiAgICAgICAgIFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdCb3hDb21w
dXRhdGlvbigqdGhpcyk7CiAgICAgICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBib3VuZGluZ0Jv
eENvbXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENv
bXB1dGF0aW9uOjpvYmplY3RCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgICAgICBtX3N0cm9r
ZUJvdW5kaW5nQm94ID0gYm91bmRpbmdCb3hDb21wdXRhdGlvbi5jb21wdXRlRGVjb3JhdGVkQm91
bmRpbmdCb3goU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbjo6c3Ryb2tlQm91bmRpbmdCb3hEZWNv
cmF0aW9uKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRh
aW5lckxheW91dCAtLSByZW1vdmUgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4uCi0g
ICAgU1ZHUmVuZGVyU3VwcG9ydDo6bGF5b3V0Q2hpbGRyZW4oKnRoaXMsIG5lZWRzTGF5b3V0KTsK
LQogICAgIGlmICghbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cy5pc0VtcHR5
KCkpIHsKICAgICAgICAgLy8gSW52YWxpZGF0ZSByZXNvdXJjZSBjbGllbnRzLCB3aGljaCBtYXkg
bWFyayBzb21lIG5vZGVzIGZvciBsYXlvdXQuCiAgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2Ug
OiAgbV9yZXNvdXJjZXNOZWVkaW5nVG9JbnZhbGlkYXRlQ2xpZW50cykgewpAQCAtMjE2LDEwICsy
MTAsOCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgpCiAKICAgICAgICAgbV9pc0xheW91
dFNpemVDaGFuZ2VkID0gZmFsc2U7CiAKLSAgICAgICAgLyogRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSBTVkdDb250YWluZXJMYXlvdXQKICAgICAgICAgU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRhaW5l
ckxheW91dCgqdGhpcyk7CiAgICAgICAgIGNvbnRhaW5lckxheW91dC5sYXlvdXRDaGlsZHJlbihm
YWxzZSk7Ci0gICAgICAgICovCiAgICAgfQogCiAgICAgbV9pc0xheW91dFNpemVDaGFuZ2VkID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRh
aW5lckxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5l
ckxheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUzYjNmYzM2NjJkYWY2YjBlOWQ1OTgwNTQ0ODZlYzhk
NDRmMjJjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHQ29udGFpbmVyTGF5b3V0LmNwcApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTVkdDb250YWluZXJMYXlvdXQuaCIKKworI2lmIEVO
QUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJSZW5kZXJBbmNlc3Rvckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVy
YXRvci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmUuaCIK
KyNpbmNsdWRlICJSZW5kZXJTVkdNb2RlbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Jv
b3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdTaGFwZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Rl
eHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJT
dXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlNW
R1Jlc291cmNlcy5oIgorI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU1ZHQ29udGFpbmVyTGF5b3V0OjpTVkdDb250YWluZXJMYXlvdXQoUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgY29udGFpbmVyKQorICAgIDogbV9jb250YWluZXIoY29udGFp
bmVyKQoreworfQorCit2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6bGF5b3V0Q2hpbGRyZW4oYm9v
bCBjb250YWluZXJOZWVkc0xheW91dCkKK3sKKyAgICBib29sIGxheW91dFNpemVDaGFuZ2VkID0g
bGF5b3V0U2l6ZU9mTmVhcmVzdFZpZXdwb3J0Q2hhbmdlZCgpOworICAgIGJvb2wgdHJhbnNmb3Jt
Q2hhbmdlZCA9IHRyYW5zZm9ybVRvUm9vdENoYW5nZWQoJm1fY29udGFpbmVyKTsKKyAgICBIYXNo
U2V0PFJlbmRlckVsZW1lbnQqPiBlbGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0OworCisg
ICAgbV9wb3NpdGlvbmVkQ2hpbGRyZW4uY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyT2JqZWN0PihtX2NvbnRhaW5lcikpIHsKKyAgICAgICAgaWYg
KGNoaWxkLmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChj
aGlsZC5oYXNMYXllcigpKTsKKyAgICAgICAgICAgIG1fcG9zaXRpb25lZENoaWxkcmVuLmFwcGVu
ZChkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihjaGlsZCkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBuZWVkc0xheW91dCA9IGNvbnRhaW5lck5lZWRzTGF5b3V0OworICAgICAg
ICBib29sIGNoaWxkRXZlckhhZExheW91dCA9IGNoaWxkLmV2ZXJIYWRMYXlvdXQoKTsKKworICAg
ICAgICBpZiAodHJhbnNmb3JtQ2hhbmdlZCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHRyYW5z
Zm9ybSBjaGFuZ2VkIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSB0ZXh0IG1ldHJpY3MgKG5vdGU6IHRo
aXMgYWxzbyBoYXBwZW5zIGZvciBsYXlvdXRTaXplQ2hhbmdlZD10cnVlKS4KKyAgICAgICAgICAg
IGlmIChpczxSZW5kZXJTVkdUZXh0PihjaGlsZCkpCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyU1ZHVGV4dD4oY2hpbGQpLnNldE5lZWRzVGV4dE1ldHJpY3NVcGRhdGUoKTsKKyAgICAg
ICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXlv
dXRTaXplQ2hhbmdlZCAmJiBjaGlsZC5ub2RlKCkgJiYgaXM8U1ZHRWxlbWVudD4oKmNoaWxkLm5v
ZGUoKSkpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gY29udGFpbmVyTmVlZHNMYXlvdXQgaXMgZmFs
c2UgYW5kIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCB3ZSBoYXZlIHRvIGNoZWNrIHdoZXRoZXIg
dGhpcyBjaGlsZCB1c2VzIHJlbGF0aXZlIGxlbmd0aHMKKyAgICAgICAgICAgIGF1dG8mIGVsZW1l
bnQgPSBkb3duY2FzdDxTVkdFbGVtZW50PigqY2hpbGQubm9kZSgpKTsKKyAgICAgICAgICAgIGlm
IChlbGVtZW50Lmhhc1JlbGF0aXZlTGVuZ3RocygpICYmIDEpIHsKKyAgICAgICAgICAgICAgICAv
LyBXaGVuIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkIGFuZCB3aGVuIHVzaW5nIHJlbGF0aXZlIHZh
bHVlcyB0ZWxsIHRoZSBSZW5kZXJTVkdTaGFwZSB0byB1cGRhdGUgaXRzIHNoYXBlIG9iamVjdAor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpKQorICAgICAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdTaGFwZT4oY2hpbGQpLnNldE5lZWRzU2hhcGVV
cGRhdGUoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJTVkdUZXh0PihjaGls
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgc3ZnVGV4dCA9IGRvd25jYXN0PFJlbmRl
clNWR1RleHQ+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1Rl
eHRNZXRyaWNzVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIHN2Z1RleHQuc2V0TmVlZHNQ
b3NpdGlvbmluZ1ZhbHVlc1VwZGF0ZSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG5lZWRzTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChuZWVkc0xheW91dCkKKyAgICAgICAgICAgIGNoaWxkLnNldE5lZWRzTGF5b3V0
KE1hcmtPbmx5VGhpcyk7CisKKyAgICAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxk
Lm5lZWRzTGF5b3V0KCk7CisgICAgICAgIGlmIChpczxSZW5kZXJFbGVtZW50PihjaGlsZCkpIHsK
KyAgICAgICAgICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihjaGls
ZCk7CisgICAgICAgICAgICBpZiAoY2hpbGROZWVkZWRMYXlvdXQpIHsKKyAgICAgICAgICAgICAg
ICBsYXlvdXREaWZmZXJlbnRSb290SWZOZWVkZWQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
ZWxlbWVudC5sYXlvdXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0U2l6ZUNoYW5n
ZWQpCisgICAgICAgICAgICAgICAgZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2ZUxheW91dC5hZGQo
JmVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAoIWNoaWxkRXZlckhhZExheW91dCAmJiBlbGVt
ZW50LmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQorICAgICAgICAgICAgICAgIGNoaWxk
LnJlcGFpbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghY2hpbGQubmVlZHNMYXlv
dXQoKSk7CisgICAgfQorCisgICAgaWYgKGxheW91dFNpemVDaGFuZ2VkKSB7CisgICAgICAgIC8v
IElmIHRoZSBsYXlvdXQgc2l6ZSBjaGFuZ2VkLCBpbnZhbGlkYXRlIGFsbCByZXNvdXJjZXMgb2Yg
YWxsIGNoaWxkcmVuIHRoYXQgZGlkbid0IGdvIHRocm91Z2ggdGhlIGxheW91dCgpIGNvZGUgcGF0
aC4KKyAgICAgICAgZm9yIChhdXRvKiBlbGVtZW50IDogZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2
ZUxheW91dCkKKyAgICAgICAgICAgIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKCplbGVt
ZW50KTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRzVGhhdERpZE5vdFJlY2Vp
dmVMYXlvdXQuaXNFbXB0eSgpKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRQb2ludCBsYXlv
dXRMb2NhdGlvbkZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQorewor
ICAgIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXlvdXRMb2NhdGlv
bigpOworCisgICAgaWYgKGlzPFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikpIC8vIDxmb3JlaWdu
T2JqZWN0PiAvIDx0ZXh0PgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHQmxvY2s+
KHJlbmRlcmVyKS5sb2NhdGlvbigpOworCisgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVu
ZGVyZXIpKSAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIHNldExheW91dExvY2F0aW9uRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5k
ZXJlciwgY29uc3QgTGF5b3V0UG9pbnQmIG5ld0xvY2F0aW9uKQoreworICAgIGlmIChpczxSZW5k
ZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpKSB7CisgICAgICAgIGRvd25jYXN0PFJlbmRlclNW
R01vZGVsT2JqZWN0PihyZW5kZXJlcikuc2V0TGF5b3V0TG9jYXRpb24obmV3TG9jYXRpb24pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+
CisgICAgaWYgKGlzPFJlbmRlclNWR0Jsb2NrPihyZW5kZXJlcikpIHsKKyAgICAgICAgZG93bmNh
c3Q8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKS5zZXRMb2NhdGlvbihuZXdMb2NhdGlvbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyA8dHNwYW4+IC8gPHRleHRQYXRoPgorICAg
IGlmIChpczxSZW5kZXJTVkdJbmxpbmU+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojpw
b3NpdGlvbkNoaWxkcmVuUmVsYXRpdmVUb0NvbnRhaW5lcigpCit7CisgICAgaWYgKG1fcG9zaXRp
b25lZENoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB2ZXJp
ZnlQb3NpdGlvbmVkQ2hpbGRSZW5kZXJlckV4cGVjdGF0aW9uID0gW10oUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikgeworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgQVNTRVJUKHJlbmRlcmVy
LmlzU1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkpOyAvLyBQcmUtY29uZGl0aW9uIHRvIGVudGVyIG1f
cG9zaXRpb25lZENoaWxkcmVuCisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIuaXNTVkdSb290KCkp
OyAvLyBUaGVyZSBpcyBvbmx5IG9uZSBvdXRlcm1vc3QgUmVuZGVyU1ZHUm9vdCBvYmplY3QKKyAg
ICAgICAgQVNTRVJUKCFyZW5kZXJlci5pc1NWR0lubGluZSgpKTsgLy8gSW5saW5lcyBhcmUgb25s
eSBhbGxvd2VkIHdpdGhpbiBhIFJlbmRlclNWR1RleHQgdHJlZQorCisgICAgICAgIGlmIChpczxS
ZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIpIHx8IGlzPFJlbmRlclNWR0Jsb2NrPihyZW5k
ZXJlcikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShyZW5kZXJl
cik7CisjZW5kaWYKKyAgICB9OworCisgICAgLy8gQXJyYW5nZSBsYXlvdXQgbG9jYXRpb24gZm9y
IGFsbCBjaGlsZCByZW5kZXJlcnMgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lciBsYXlvdXQgbG9j
YXRpb24uCisgICAgYXV0byBwYXJlbnRMYXlvdXRMb2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2lu
dChtX2NvbnRhaW5lci5vYmplY3RCb3VuZGluZ0JveCgpLm1pblhNaW5ZQ29ybmVyKCkpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0JiBjaGlsZCA6IG1fcG9zaXRpb25lZENoaWxkcmVuKSB7CisgICAg
ICAgIHZlcmlmeVBvc2l0aW9uZWRDaGlsZFJlbmRlcmVyRXhwZWN0YXRpb24oY2hpbGQpOworCisg
ICAgICAgIGF1dG8gb2JqZWN0Qm91bmRpbmdCb3hDaGlsZCA9IGNoaWxkLm9iamVjdEJvdW5kaW5n
Qm94KCk7CisgICAgICAgIGF1dG8gbGF5b3V0TG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9pbnQo
b2JqZWN0Qm91bmRpbmdCb3hDaGlsZC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgYXV0byBk
ZXNpcmVkTGF5b3V0TG9jYXRpb24gPSB0b0xheW91dFBvaW50KGxheW91dExvY2F0aW9uIC0gcGFy
ZW50TGF5b3V0TG9jYXRpb24pOworICAgICAgICBhdXRvIGN1cnJlbnRMYXlvdXRMb2NhdGlvbiA9
IGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKGNoaWxkKTsKKyAgICAgICAgaWYgKGN1cnJlbnRM
YXlvdXRMb2NhdGlvbiA9PSBkZXNpcmVkTGF5b3V0TG9jYXRpb24pCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgc2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcihjaGlsZCwgZGVzaXJl
ZExheW91dExvY2F0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0Ojp2
ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyKQoreworICAgIGlmIChyZW5kZXJlci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpICYmICFy
ZW5kZXJlci5pc1NWR1Jvb3QoKSkgeworICAgICAgICBhdXRvIGN1cnJlbnRMYXlvdXRMb2NhdGlv
biA9IGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKHJlbmRlcmVyKTsKKworICAgICAgICBhdXRv
IGV4cGVjdGVkTGF5b3V0TG9jYXRpb24gPSBjdXJyZW50TGF5b3V0TG9jYXRpb247CisgICAgICAg
IGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVu
ZGVyZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQoYW5jZXN0b3IuaXNTVkdMYXllckF3YXJlUmVu
ZGVyZXIoKSk7CisgICAgICAgICAgICBpZiAoYW5jZXN0b3IuaXNTVkdSb290KCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBleHBlY3RlZExheW91dExvY2F0aW9uLm1vdmVC
eShsYXlvdXRMb2NhdGlvbkZyb21SZW5kZXJlcihhbmNlc3RvcikpOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBpbml0aWFsTGF5b3V0TG9jYXRpb24gPSBmbG9vcmVkTGF5b3V0UG9pbnQocmVu
ZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKS5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgaWYg
KGV4cGVjdGVkTGF5b3V0TG9jYXRpb24gPT0gaW5pdGlhbExheW91dExvY2F0aW9uKSB7CisgICAg
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU1ZHLCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJM
YXlvdXQgcmVuZGVyZXIgIiA8PCAmcmVuZGVyZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJO
YW1lKCkgPDwgIikiCisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0aW9u
Q29uc2lzdGVuY3koKSBvYmplY3RCb3VuZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGFyZSBpbiBz
eW5jLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNW
Rywgc3RyZWFtIDw8ICItLT4gU1ZHQ29udGFpbmVyTGF5b3V0IHJlbmRlcmVyICIgPDwgJnJlbmRl
cmVyIDw8ICIgKCIgPDwgcmVuZGVyZXIucmVuZGVyTmFtZSgpIDw8ICIpIgorICAgICAgICAgICAg
ICAgIDw8ICIgLSB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgb2JqZWN0Qm91bmRp
bmdCb3ggLyBsYXlvdXRMb2NhdGlvbiBpbnZhcmlhbnQgdmlvbGF0ZWQgLS0gb3V0IG9mIHN5bmMg
ZHVlIHRvIHBhcnRpYWwgbGF5b3V0PyIKKyAgICAgICAgICAgICAgICA8PCAiIGN1cnJlbnRMYXlv
dXRMb2NhdGlvbj0iIDw8IGN1cnJlbnRMYXlvdXRMb2NhdGlvbgorICAgICAgICAgICAgICAgIDw8
ICIgIChleHBlY3RlZExheW91dExvY2F0aW9uPSIgPDwgZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbgor
ICAgICAgICAgICAgICAgIDw8ICIgIT0gaW5pdGlhbExheW91dExvY2F0aW9uPSIgPDwgaW5pdGlh
bExheW91dExvY2F0aW9uIDw8ICIpIgorICAgICAgICAgICAgICAgIDw8ICIgLT4gYWJvcnRpbmcg
d2l0aCBhIHJlbmRlciB0cmVlIGR1bXAiKTsKKworI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykK
KyAgICAgICAgICAgIHNob3dSZW5kZXJUcmVlKCZyZW5kZXJlcik7CisjZW5kaWYKKworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKSB7
CisgICAgICAgIGlmIChjaGlsZC5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKQorICAgICAgICAg
ICAgdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeShjaGlsZCk7CisgICAgfQorCisjaWYg
IWRlZmluZWQoTkRFQlVHKQorICAgIGlmIChyZW5kZXJlci5pc1NWR1Jvb3QoKSkgeworICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oU1ZHLCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWluZXJMYXlvdXQg
cmVuZGVyZXIgIiA8PCAmcmVuZGVyZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5kZXJOYW1lKCkg
PDwgIikiCisgICAgICAgICAgICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5j
eSgpIGVuZCIpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6
bGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
KQoreworICAgIGlmIChhdXRvKiByZXNvdXJjZXMgPSBTVkdSZXNvdXJjZXNDYWNoZTo6Y2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyZXIocmVuZGVyZXIpKSB7CisgICAgICAgIGF1dG8qIHN2Z1Jvb3Qg
PSBTVkdSZW5kZXJTdXBwb3J0OjpmaW5kVHJlZVJvb3RPYmplY3QocmVuZGVyZXIpOworICAgICAg
ICBBU1NFUlQoc3ZnUm9vdCk7CisgICAgICAgIHJlc291cmNlcy0+bGF5b3V0RGlmZmVyZW50Um9v
dElmTmVlZGVkKHN2Z1Jvb3QpOworICAgIH0KK30KKwordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6
OmludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQor
eworICAgIEFTU0VSVCghcmVuZGVyZXIubmVlZHNMYXlvdXQoKSk7CisgICAgaWYgKGF1dG8qIHJl
c291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcihy
ZW5kZXJlcikpCisgICAgICAgIHJlc291cmNlcy0+cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKHJlbmRl
cmVyLCBmYWxzZSk7CisKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVu
ZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAgICAgICBpbnZhbGlkYXRlUmVzb3VyY2VzT2ZDaGls
ZHJlbihjaGlsZCk7Cit9CisKK2Jvb2wgU1ZHQ29udGFpbmVyTGF5b3V0OjpsYXlvdXRTaXplT2ZO
ZWFyZXN0Vmlld3BvcnRDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhbmNl
c3RvciA9ICZtX2NvbnRhaW5lcjsKKyAgICB3aGlsZSAoYW5jZXN0b3IgJiYgIWlzPFJlbmRlclNW
R1Jvb3Q+KCphbmNlc3RvcikgJiYgIWlzPFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPigqYW5j
ZXN0b3IpKQorICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKKworICAgIEFT
U0VSVChhbmNlc3Rvcik7CisgICAgaWYgKGlzPFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPigq
YW5jZXN0b3IpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHVmlld3BvcnRDb250
YWluZXI+KCphbmNlc3RvcikuaXNMYXlvdXRTaXplQ2hhbmdlZCgpOworCisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlclNWR1Jvb3Q+KCphbmNlc3RvcikuaXNMYXlvdXRTaXplQ2hhbmdlZCgpOwor
fQorCitib29sIFNWR0NvbnRhaW5lckxheW91dDo6dHJhbnNmb3JtVG9Sb290Q2hhbmdlZChjb25z
dCBSZW5kZXJPYmplY3QqIGFuY2VzdG9yKQoreworICAgIHdoaWxlIChhbmNlc3RvcikgeworICAg
ICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250
YWluZXIgY2hhbmdlcworICAgICAgICAvLyBpZiAoaXM8UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNv
bnRhaW5lcj4oKmFuY2VzdG9yKSkKKyAgICAgICAgLy8gICAgIHJldHVybiBkb3duY2FzdDxjb25z
dCBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyPigqYW5jZXN0b3IpLmRpZFRyYW5zZm9y
bVRvUm9vdFVwZGF0ZSgpOworCisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gUmVu
ZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciBjaGFuZ2VzCisgICAgICAgIC8vIGlmIChpczxS
ZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKmFuY2VzdG9yKSkKKyAgICAgICAgLy8gICAgIHJl
dHVybiBkb3duY2FzdDxjb25zdCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKmFuY2VzdG9y
KS5kaWRUcmFuc2Zvcm1Ub1Jvb3RVcGRhdGUoKTsKKworICAgICAgICBpZiAoaXM8UmVuZGVyU1ZH
Um9vdD4oKmFuY2VzdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxjb25zdCBSZW5k
ZXJTVkdSb290PigqYW5jZXN0b3IpLmRpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSgpOworICAgICAg
ICBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlv
dXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWMxMzA5MzUxMjZjZjdlY2UxNTk5OTJhOGRiNzFjMTE2NzMwMjZlNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVy
TGF5b3V0LmgKQEAgLTAsMCArMSw1OCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lO
RSkKKyNpbmNsdWRlICJSZW5kZXJMYXllck1vZGVsT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxmdW5j
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTVkdDb250YWluZXJMYXlvdXQg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR0NvbnRhaW5lckxheW91dCk7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgU1ZHQ29udGFpbmVyTGF5b3V0KFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
KTsKKyAgICB+U1ZHQ29udGFpbmVyTGF5b3V0KCkgPSBkZWZhdWx0OworCisgICAgLy8gJ2NvbnRh
aW5lck5lZWRzTGF5b3V0JyBkZW5vdGVzIGlmIHRoZSBjb250YWluZXIgZm9yIHdoaWNoIHRoZQor
ICAgIC8vIFNWR0NvbnRhaW5lckxheW91dCBvYmplY3Qgd2FzIGNyZWF0ZWQgbmVlZHMgdG8gYmUg
bGFpZCBvdXQgb3Igbm90LgorICAgIHZvaWQgbGF5b3V0Q2hpbGRyZW4oYm9vbCBjb250YWluZXJO
ZWVkc0xheW91dCk7CisKKyAgICB2b2lkIHBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFp
bmVyKCk7CisKKyAgICBzdGF0aWMgdm9pZCB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5
KGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1Ub1Jvb3RD
aGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCogYW5jZXN0b3IpOworCitwcml2YXRlOgorICAgIHZv
aWQgbGF5b3V0RGlmZmVyZW50Um9vdElmTmVlZGVkKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAg
ICB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKFJlbmRlckVsZW1lbnQmKTsKKwor
ICAgIGJvb2wgbGF5b3V0U2l6ZU9mTmVhcmVzdFZpZXdwb3J0Q2hhbmdlZCgpIGNvbnN0OworCisg
ICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgbV9jb250YWluZXI7CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4+IG1fcG9zaXRpb25lZENo
aWxkcmVuOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449144</attachid>
            <date>2022-01-14 00:41:29 -0800</date>
            <delta_ts>2022-01-14 01:08:09 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-235101-20220114004128.patch</filename>
            <type>text/plain</type>
            <size>26388</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U5ZDRjN2Y3ZGQ5Mzcy
MmI5MGNkMmY4YWM0N2YxZjU2MmJlOGVhNS4uMjU0ZTZiNGVjNDVhMGQ1OGQzYmYwM2MzNzYwYzc4
NmEzMWZiNWI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAxLTEyICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtMQlNF
XSBJbnRyb2R1Y2UgU1ZHQ29udGFpbmVyTGF5b3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzUxMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVcHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQsIGEgdXRp
bGl0eSBjbGFzcyBjZW50cmFsaXppbmcKKyAgICAgICAgdGhlICJsYXlvdXQgY2hpbGRyZW4gaW4g
U1ZHIHJlbmRlciB0cmVlIiBhbGdvcml0aG0uIFRoZSBsZWdhY3kKKyAgICAgICAgZW5naW5lcyBy
ZWxpZXMgb24gdmFyaW91cyBoZWxwZXIgbWV0aG9kcyBpbiBTVkdSZW5kZXJpbmdTdXBwb3J0IC0t
IGZvcgorICAgICAgICBMQlNFIGl0J3MgYWxsIGluIG9uZSBwbGFjZTogU1ZHQ29udGFpbmVyTGF5
b3V0LgorCisgICAgICAgIFRoZSBhY3R1YWwgdHdvLXBhc3MgYWxnb3JpdGhtIGlzIGRlc2NyaWJl
ZCBpbiB0aGUgdGVjaG5pY2FsIGRvY3VtZW50CisgICAgICAgIGNvdmVyaW5nIExCU0UuIEl0J3Mg
aWRlbnRpY2FsIHRvIHRoZSBMQlNFIGRvd25zdHJlYW0gdmVyc2lvbiwgd2hpY2gKKyAgICAgICAg
dXNlZCB0byBwYXNzIGFsbCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBm
dW5jdGlvbmFsaXR5IGlzIG5vdCBvYnNlcnZhYmxlLCBhcyB3ZSBkb24ndCBjcmVhdGUKKyAgICAg
ICAgTEJTRSByZW5kZXJlcnMgeWV0LgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpp
c1NWR0xheWVyQXdhcmVSZW5kZXJlciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFp
bmVyOjpsYXlvdXRDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmxheW91dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxheW91dDo6U1ZHQ29udGFpbmVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxheW91dDo6bGF5b3V0Q2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6bGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0TGF5b3V0TG9jYXRpb25Gb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdDb250YWluZXJMYXlvdXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29udGFpbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0NvbnRhaW5lckxheW91dDo6dmVyaWZ5TGF5b3V0TG9jYXRp
b25Db25zaXN0ZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6Omxh
eW91dERpZmZlcmVudFJvb3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWlu
ZXJMYXlvdXQ6OmludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0NvbnRhaW5lckxheW91dDo6bGF5b3V0U2l6ZU9mTmVhcmVzdFZpZXdwb3J0Q2hhbmdl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb250YWluZXJMYXlvdXQ6OnRyYW5zZm9y
bVRvUm9vdENoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5
b3V0Lmg6IEFkZGVkLgorCiAyMDIyLTAxLTEzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IGNhbGwgaW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFy
a2VycygpIGZvciBldmVyeSBsYXllciBpbiB0aGUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMoKSB0cmF2
ZXJzYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZGQ4Yjk2MzJlOGI0OGVmMWRkMjcyZTcyNTNhNWFlZTM2
NzdhZTQ2ZS4uM2ZhMGJiZDk4MjRmOWE4NmExMmZlMzg3OWFiZGUwZDNlNDg1OWFmNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTI1MDEsNiArMjUwMSw3IEBAIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4
dFBhdGguY3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIu
Y3BwCiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcAogcmVuZGVy
aW5nL3N2Zy9TVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNwcAorcmVuZGVyaW5nL3N2Zy9TVkdD
b250YWluZXJMYXlvdXQuY3BwCiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCiBy
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCiByZW5kZXJpbmcvc3ZnL1NWR1BhdGhE
YXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDE1MWVjOWJkMmZmN2U4MjhlOTIzYjNiOGYxNmIwMjZhYjFlNjhhMjIuLjQy
OTMwYTE5YTU3OTBkNjNlOGY0NTEwMmQyMzdhNDViN2Q1NGNlMTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0Nyw2ICsyNDcs
NyBAQAogCQkwODU0QjAxQjEyNTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDA5MTI1
NUU0RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUZXh0UGF0aC5oICovOyB9OwogCQkwODU0QjAxRDEy
NTVFNEU2MDBCOUNERDAgLyogUmVuZGVyU1ZHVFNwYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDBCMTI1NUU0RTYwMEI5Q0REMCAvKiBSZW5k
ZXJTVkdUU3Bhbi5oICovOyB9OwogCQkwODQ0QjAxRDEyNTVCNEU2MDBCOUNERDAgLyogU1ZHQm91
bmRpbmdCb3hDb21wdXRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg0NEIwMUQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0JvdW5kaW5nQm94Q29t
cHV0YXRpb24uaCAqLzsgfTsKKwkJMDg0NEIwMUQxMjU1QjVBNjEwQjhBRkQxIC8qIFNWR0NvbnRh
aW5lckxheW91dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg0NEIwMUQxMjU1RTVBNjEwQjhBRkQxIC8qIFNWR0NvbnRhaW5lckxheW91dC5oICovOyB9
OwogCQkwODU0QjAxRjEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMEQxMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0lubGluZUZsb3dCb3guaCAqLzsgfTsKIAkJMDg1NEIwMjExMjU1RTRF
NjAwQjlDREQwIC8qIFNWR0lubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDBGMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxp
bmVUZXh0Qm94LmggKi87IH07CiAJCTA4NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290
SW5saW5lQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODU0QjAxMTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oICovOyB9OwpA
QCAtNjIxMCw3ICs2MjExLDkgQEAKIAkJMDg1NEIwMDkxMjU1RTRFNjAwQjlDREQwIC8qIFJlbmRl
clNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNW
R1RleHRQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDBCMTI1NUU0
RTYwMEI5Q0REMCAvKiBSZW5kZXJTVkdUU3Bhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTVkdUU3Bhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODM0QjAwQzEyNDRFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21wdXRhdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgzNEIwMEMxMjQ0RTVB
NjEwQjhBRkQxIC8qIFNWR0NvbnRhaW5lckxheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdDb250YWluZXJMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hD
b21wdXRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdCb3VuZGlu
Z0JveENvbXB1dGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4NDRCMDFE
MTI1NUU1QTYxMEI4QUZEMSAvKiBTVkdDb250YWluZXJMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQ29udGFpbmVyTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4NTRCMDBDMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVGbG93Qm94
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZUZsb3dC
b3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODU0QjAwRDEyNTVFNEU2MDBC
OUNERDAgLyogU1ZHSW5saW5lRmxvd0JveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdJbmxpbmVGbG93Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
NTRCMDBFMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0lubGluZVRleHRCb3guY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkwMjIsNiArMTkwMjUsOCBAQAogCQkJCTQzNjcwOEFD
MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oICovLAogCQkJ
CTA4MzRCMDBDMTI0NEU0RTYwMEI5Q0REMCAvKiBTVkdCb3VuZGluZ0JveENvbXB1dGF0aW9uLmNw
cCAqLywKIAkJCQkwODQ0QjAxRDEyNTVFNEU2MDBCOUNERDAgLyogU1ZHQm91bmRpbmdCb3hDb21w
dXRhdGlvbi5oICovLAorCQkJCTA4MzRCMDBDMTI0NEU1QTYxMEI4QUZEMSAvKiBTVkdDb250YWlu
ZXJMYXlvdXQuY3BwICovLAorCQkJCTA4NDRCMDFEMTI1NUU1QTYxMEI4QUZEMSAvKiBTVkdDb250
YWluZXJMYXlvdXQuaCAqLywKIAkJCQkwODU0QjAwQzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lRmxvd0JveC5jcHAgKi8sCiAJCQkJMDg1NEIwMEQxMjU1RTRFNjAwQjlDREQwIC8qIFNWR0lu
bGluZUZsb3dCb3guaCAqLywKIAkJCQkwODU0QjAwRTEyNTVFNEU2MDBCOUNERDAgLyogU1ZHSW5s
aW5lVGV4dEJveC5jcHAgKi8sCkBAIC0zNzMzNiw2ICszNzM0MSw3IEBACiAJCQkJQjIyMjc5OUMw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OTlGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDbGlwUGF0aEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3OUE1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDg0NEIwMUQxMjU1QjVB
NjEwQjhBRkQxIC8qIFNWR0NvbnRhaW5lckxheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
Mjc5QTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0N1cnNvckVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3OUFFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZWZzRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjIyMjc5QjEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Rlc2NFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApp
bmRleCA0ZGJhOWM4NTQ3ZDhlNzhhOTdjMTEwZjExZWMwMmQ1YTY2YmQ1ZGMxLi5jMzU2NjUwYzVk
Zjk0ZDZiYWVmYzA5ZWVjNDg1NTRmMzZkYzU2YzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCkBAIC0zNTIsNiArMzUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNT
VkdSb290T3JMZWdhY3lTVkdSb290KCkgY29uc3QgeyByZXR1cm4gaXNTVkdSb290KCkgfHwgaXNM
ZWdhY3lTVkdSb290KCk7IH0KICAgICBib29sIGlzU1ZHU2hhcGVPckxlZ2FjeVNWR1NoYXBlKCkg
Y29uc3QgeyByZXR1cm4gaXNTVkdTaGFwZSgpIHx8IGlzTGVnYWN5U1ZHU2hhcGUoKTsgfQogICAg
IGJvb2wgaXNSZW5kZXJPckxlZ2FjeVJlbmRlclNWR01vZGVsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gaXNSZW5kZXJTVkdNb2RlbE9iamVjdCgpIHx8IGlzTGVnYWN5UmVuZGVyU1ZHTW9kZWxPYmpl
Y3QoKTsgfQorICAgIGJvb2wgaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBpc1NWR1Jvb3QoKSB8fCBpc1JlbmRlclNWR01vZGVsT2JqZWN0KCkgfHwgaXNTVkdUZXh0KCkg
fHwgaXNTVkdJbmxpbmUoKSB8fCBpc1NWR0ZvcmVpZ25PYmplY3QoKTsgfQogCiAgICAgLy8gRklY
TUU6IFRob3NlIGJlbG9uZyBpbnRvIGEgU1ZHIHNwZWNpZmljIGJhc2UtY2xhc3MgZm9yIGFsbCBy
ZW5kZXJlcnMgKHNlZSBhYm92ZSkKICAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGhhdmUg
c3VjaCBhIGNsYXNzIHlldCwgYmVjYXVzZSBpdCdzIG5vdCBwb3NzaWJsZSBmb3IgYWxsIHJlbmRl
cmVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250
YWluZXIuY3BwCmluZGV4IDJiY2Q1ZmVhZDcxOTVmYzZjNTcyZWNiM2M3NWNlMGIxMjg5OTZkODku
LmJkY2M1ODE1YjQ2NjI3ZjBmZjFjNWExNDgwMjQwZmY2NTdiOTQ3ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTM0
LDggKzM0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotLy8gRklYTUU6IFtMQlNFXSBV
cHN0cmVhbSBTVkdDb250YWluZXJMYXlvdXQKLS8vICNpbmNsdWRlICJTVkdDb250YWluZXJMYXlv
dXQuaCIKKyNpbmNsdWRlICJTVkdDb250YWluZXJMYXlvdXQuaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzQ2FjaGUuaCIKQEAgLTg4LDE3ICs4NywxNSBAQCB2b2lkIFJlbmRlclNWR0NvbnRh
aW5lcjo6Y2FsY3VsYXRlVmlld3BvcnQoKQogCiB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5
b3V0Q2hpbGRyZW4oKQogewotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFp
bmVyTGF5b3V0Ci0gICAgLy8gU1ZHQ29udGFpbmVyTGF5b3V0IGNvbnRhaW5lckxheW91dCgqdGhp
cyk7Ci0gICAgLy8gY29udGFpbmVyTGF5b3V0LmxheW91dENoaWxkcmVuKHNlbGZOZWVkc0xheW91
dCgpIHx8IFNWR1JlbmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dCgqdGhp
cykpOworICAgIFNWR0NvbnRhaW5lckxheW91dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOworICAg
IGNvbnRhaW5lckxheW91dC5sYXlvdXRDaGlsZHJlbihzZWxmTmVlZHNMYXlvdXQoKSB8fCBTVkdS
ZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoKnRoaXMpKTsKIAogICAg
IFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb24gYm91bmRpbmdCb3hDb21wdXRhdGlvbigqdGhpcyk7
CiAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0
ZURlY29yYXRlZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJv
dW5kaW5nQm94RGVjb3JhdGlvbiwgJm1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZCk7CiAgICAgbV9z
dHJva2VCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRl
ZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246OnN0cm9rZUJvdW5kaW5nQm94
RGVjb3JhdGlvbik7CiAgICAgc2V0TGF5b3V0UmVjdChlbmNsb3NpbmdMYXlvdXRSZWN0KG1fb2Jq
ZWN0Qm91bmRpbmdCb3gpKTsKIAotICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29u
dGFpbmVyTGF5b3V0Ci0gICAgLy8gY29udGFpbmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5SZWxh
dGl2ZVRvQ29udGFpbmVyKCk7CisgICAgY29udGFpbmVyTGF5b3V0LnBvc2l0aW9uQ2hpbGRyZW5S
ZWxhdGl2ZVRvQ29udGFpbmVyKCk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAK
aW5kZXggMTIxYzYzNzY0OTA0MWRlY2NlYmE1Nzk5NDlmNWNlNmRjM2ZmNDZkZC4uMGRjOWJhYjY3
ZDAzMzgxMGU3OWYzZDg0MGYzNjdlMzU0MmJjOTRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC00NCw4ICs0NCw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgotLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBTVkdDb250YWlu
ZXJMYXlvdXQKLS8vICNpbmNsdWRlICJTVkdDb250YWluZXJMYXlvdXQuaCIKKyNpbmNsdWRlICJT
VkdDb250YWluZXJMYXlvdXQuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIK
ICNpbmNsdWRlICJTVkdJbWFnZS5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIK
QEAgLTE5NCwxOSArMTkzLDE0IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICB1
cGRhdGVMYXllckluZm9ybWF0aW9uKCk7CiAKICAgICB7Ci0gICAgICAgIC8qIEZJWE1FOiBbTEJT
RV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0CiAgICAgICAgIFNWR0NvbnRhaW5lckxheW91
dCBjb250YWluZXJMYXlvdXQoKnRoaXMpOwogICAgICAgICBjb250YWluZXJMYXlvdXQubGF5b3V0
Q2hpbGRyZW4obmVlZHNMYXlvdXQgfHwgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29u
dGFpbmVyTGF5b3V0KCp0aGlzKSk7Ci0gICAgICAgICovCiAKICAgICAgICAgU1ZHQm91bmRpbmdC
b3hDb21wdXRhdGlvbiBib3VuZGluZ0JveENvbXB1dGF0aW9uKCp0aGlzKTsKICAgICAgICAgbV9v
YmplY3RCb3VuZGluZ0JveCA9IGJvdW5kaW5nQm94Q29tcHV0YXRpb24uY29tcHV0ZURlY29yYXRl
ZEJvdW5kaW5nQm94KFNWR0JvdW5kaW5nQm94Q29tcHV0YXRpb246Om9iamVjdEJvdW5kaW5nQm94
RGVjb3JhdGlvbik7CiAgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBib3VuZGluZ0JveENv
bXB1dGF0aW9uLmNvbXB1dGVEZWNvcmF0ZWRCb3VuZGluZ0JveChTVkdCb3VuZGluZ0JveENvbXB1
dGF0aW9uOjpzdHJva2VCb3VuZGluZ0JveERlY29yYXRpb24pOwogICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBbTEJTRV0gVXBzdHJlYW0gU1ZHQ29udGFpbmVyTGF5b3V0IC0tIHJlbW92ZSBTVkdSZW5k
ZXJTdXBwb3J0OjpsYXlvdXRDaGlsZHJlbi4KLSAgICBTVkdSZW5kZXJTdXBwb3J0OjpsYXlvdXRD
aGlsZHJlbigqdGhpcywgbmVlZHNMYXlvdXQpOwotCiAgICAgaWYgKCFtX3Jlc291cmNlc05lZWRp
bmdUb0ludmFsaWRhdGVDbGllbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBJbnZhbGlkYXRl
IHJlc291cmNlIGNsaWVudHMsIHdoaWNoIG1heSBtYXJrIHNvbWUgbm9kZXMgZm9yIGxheW91dC4K
ICAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6ICBtX3Jlc291cmNlc05lZWRpbmdUb0ludmFs
aWRhdGVDbGllbnRzKSB7CkBAIC0yMTYsMTAgKzIxMCw4IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
bGF5b3V0KCkKIAogICAgICAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKIAotICAg
ICAgICAvKiBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIFNWR0NvbnRhaW5lckxheW91dAogICAgICAg
ICBTVkdDb250YWluZXJMYXlvdXQgY29udGFpbmVyTGF5b3V0KCp0aGlzKTsKICAgICAgICAgY29u
dGFpbmVyTGF5b3V0LmxheW91dENoaWxkcmVuKGZhbHNlKTsKLSAgICAgICAgKi8KICAgICB9CiAK
ICAgICBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHQ29udGFpbmVyTGF5b3V0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTNi
M2ZjMzY2MmRhZjZiMGU5ZDU5ODA1NDQ4NmVjOGQ0NGYyMmMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuY3BwCkBAIC0w
LDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IFJvYiBCdWlzIDxi
dWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNW
R0NvbnRhaW5lckxheW91dC5oIgorCisjaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckFuY2VzdG9ySXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
Rm9yZWlnbk9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR0lubGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNWR01vZGVsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1No
YXBlLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdWaWV3cG9ydENvbnRh
aW5lci5oIgorI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiU1ZH
UmVzb3VyY2VzQ2FjaGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdDb250YWluZXJM
YXlvdXQ6OlNWR0NvbnRhaW5lckxheW91dChSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBjb250YWlu
ZXIpCisgICAgOiBtX2NvbnRhaW5lcihjb250YWluZXIpCit7Cit9CisKK3ZvaWQgU1ZHQ29udGFp
bmVyTGF5b3V0OjpsYXlvdXRDaGlsZHJlbihib29sIGNvbnRhaW5lck5lZWRzTGF5b3V0KQorewor
ICAgIGJvb2wgbGF5b3V0U2l6ZUNoYW5nZWQgPSBsYXlvdXRTaXplT2ZOZWFyZXN0Vmlld3BvcnRD
aGFuZ2VkKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1DaGFuZ2VkID0gdHJhbnNmb3JtVG9Sb290Q2hh
bmdlZCgmbV9jb250YWluZXIpOworICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IGVsZW1lbnRz
VGhhdERpZE5vdFJlY2VpdmVMYXlvdXQ7CisKKyAgICBtX3Bvc2l0aW9uZWRDaGlsZHJlbi5jbGVh
cigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJPYmplY3Q+
KG1fY29udGFpbmVyKSkgeworICAgICAgICBpZiAoY2hpbGQuaXNTVkdMYXllckF3YXJlUmVuZGVy
ZXIoKSkgeworICAgICAgICAgICAgQVNTRVJUKGNoaWxkLmhhc0xheWVyKCkpOworICAgICAgICAg
ICAgbV9wb3NpdGlvbmVkQ2hpbGRyZW4uYXBwZW5kKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KGNoaWxkKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5lZWRzTGF5b3V0ID0g
Y29udGFpbmVyTmVlZHNMYXlvdXQ7CisgICAgICAgIGJvb2wgY2hpbGRFdmVySGFkTGF5b3V0ID0g
Y2hpbGQuZXZlckhhZExheW91dCgpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1DaGFuZ2VkKSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgdHJhbnNmb3JtIGNoYW5nZWQgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIHRleHQgbWV0cmljcyAobm90ZTogdGhpcyBhbHNvIGhhcHBlbnMgZm9yIGxheW91dFNp
emVDaGFuZ2VkPXRydWUpLgorICAgICAgICAgICAgaWYgKGlzPFJlbmRlclNWR1RleHQ+KGNoaWxk
KSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihjaGlsZCkuc2V0TmVl
ZHNUZXh0TWV0cmljc1VwZGF0ZSgpOworICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGxheW91dFNpemVDaGFuZ2VkICYmIGNoaWxkLm5vZGUo
KSAmJiBpczxTVkdFbGVtZW50PigqY2hpbGQubm9kZSgpKSkgeworICAgICAgICAgICAgLy8gV2hl
biBjb250YWluZXJOZWVkc0xheW91dCBpcyBmYWxzZSBhbmQgdGhlIGxheW91dCBzaXplIGNoYW5n
ZWQsIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGlzIGNoaWxkIHVzZXMgcmVsYXRpdmUgbGVu
Z3RocworICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpj
aGlsZC5ub2RlKCkpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzUmVsYXRpdmVMZW5ndGhz
KCkgJiYgMSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGxheW91dCBzaXplIGNoYW5n
ZWQgYW5kIHdoZW4gdXNpbmcgcmVsYXRpdmUgdmFsdWVzIHRlbGwgdGhlIFJlbmRlclNWR1NoYXBl
IHRvIHVwZGF0ZSBpdHMgc2hhcGUgb2JqZWN0CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRl
clNWR1NoYXBlPihjaGlsZCkpCisgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclNW
R1NoYXBlPihjaGlsZCkuc2V0TmVlZHNTaGFwZVVwZGF0ZSgpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGlzPFJlbmRlclNWR1RleHQ+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdmdUZXh0ID0gZG93bmNhc3Q8UmVuZGVyU1ZHVGV4dD4oY2hpbGQpOworICAgICAgICAg
ICAgICAgICAgICBzdmdUZXh0LnNldE5lZWRzVGV4dE1ldHJpY3NVcGRhdGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3ZnVGV4dC5zZXROZWVkc1Bvc2l0aW9uaW5nVmFsdWVzVXBkYXRlKCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmVlZHNMYXlvdXQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG5lZWRzTGF5b3V0KQorICAg
ICAgICAgICAgY2hpbGQuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKworICAgICAgICBi
b29sIGNoaWxkTmVlZGVkTGF5b3V0ID0gY2hpbGQubmVlZHNMYXlvdXQoKTsKKyAgICAgICAgaWYg
KGlzPFJlbmRlckVsZW1lbnQ+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byYgZWxlbWVudCA9
IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChjaGlsZE5l
ZWRlZExheW91dCkgeworICAgICAgICAgICAgICAgIGxheW91dERpZmZlcmVudFJvb3RJZk5lZWRl
ZChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmxheW91dCgpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChsYXlvdXRTaXplQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBlbGVtZW50
c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0LmFkZCgmZWxlbWVudCk7CisKKyAgICAgICAgICAgIGlm
ICghY2hpbGRFdmVySGFkTGF5b3V0ICYmIGVsZW1lbnQuY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5
b3V0KCkpCisgICAgICAgICAgICAgICAgY2hpbGQucmVwYWludCgpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKKyAgICB9CisKKyAgICBpZiAobGF5
b3V0U2l6ZUNoYW5nZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxheW91dCBzaXplIGNoYW5nZWQs
IGludmFsaWRhdGUgYWxsIHJlc291cmNlcyBvZiBhbGwgY2hpbGRyZW4gdGhhdCBkaWRuJ3QgZ28g
dGhyb3VnaCB0aGUgbGF5b3V0KCkgY29kZSBwYXRoLgorICAgICAgICBmb3IgKGF1dG8qIGVsZW1l
bnQgOiBlbGVtZW50c1RoYXREaWROb3RSZWNlaXZlTGF5b3V0KQorICAgICAgICAgICAgaW52YWxp
ZGF0ZVJlc291cmNlc09mQ2hpbGRyZW4oKmVsZW1lbnQpOworICAgIH0gZWxzZQorICAgICAgICBB
U1NFUlQoZWxlbWVudHNUaGF0RGlkTm90UmVjZWl2ZUxheW91dC5pc0VtcHR5KCkpOworfQorCitz
dGF0aWMgaW5saW5lIExheW91dFBvaW50IGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVyKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKGlzPFJlbmRlclNWR01vZGVsT2Jq
ZWN0PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJTVkdNb2RlbE9i
amVjdD4ocmVuZGVyZXIpLmxheW91dExvY2F0aW9uKCk7CisKKyAgICBpZiAoaXM8UmVuZGVyU1ZH
QmxvY2s+KHJlbmRlcmVyKSkgLy8gPGZvcmVpZ25PYmplY3Q+IC8gPHRleHQ+CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIpLmxvY2F0aW9uKCk7CisKKyAg
ICBpZiAoaXM8UmVuZGVyU1ZHSW5saW5lPihyZW5kZXJlcikpIC8vIDx0c3Bhbj4gLyA8dGV4dFBh
dGg+CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0TGF5b3V0TG9jYXRpb25G
b3JSZW5kZXJlcihSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRQb2ludCYgbmV3
TG9jYXRpb24pCit7CisgICAgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcikp
IHsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5zZXRM
YXlvdXRMb2NhdGlvbihuZXdMb2NhdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyA8Zm9yZWlnbk9iamVjdD4gLyA8dGV4dD4KKyAgICBpZiAoaXM8UmVuZGVyU1ZHQmxvY2s+
KHJlbmRlcmVyKSkgeworICAgICAgICBkb3duY2FzdDxSZW5kZXJTVkdCbG9jaz4ocmVuZGVyZXIp
LnNldExvY2F0aW9uKG5ld0xvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIDx0c3Bhbj4gLyA8dGV4dFBhdGg+CisgICAgaWYgKGlzPFJlbmRlclNWR0lubGluZT4ocmVu
ZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnBvc2l0aW9uQ2hpbGRyZW5SZWxhdGl2ZVRvQ29u
dGFpbmVyKCkKK3sKKyAgICBpZiAobV9wb3NpdGlvbmVkQ2hpbGRyZW4uaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHZlcmlmeVBvc2l0aW9uZWRDaGlsZFJlbmRlcmVyRXhw
ZWN0YXRpb24gPSBbXShSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSB7CisjaWYgIWRlZmluZWQoTkRF
QlVHKQorICAgICAgICBBU1NFUlQocmVuZGVyZXIuaXNTVkdMYXllckF3YXJlUmVuZGVyZXIoKSk7
IC8vIFByZS1jb25kaXRpb24gdG8gZW50ZXIgbV9wb3NpdGlvbmVkQ2hpbGRyZW4KKyAgICAgICAg
QVNTRVJUKCFyZW5kZXJlci5pc1NWR1Jvb3QoKSk7IC8vIFRoZXJlIGlzIG9ubHkgb25lIG91dGVy
bW9zdCBSZW5kZXJTVkdSb290IG9iamVjdAorICAgICAgICBBU1NFUlQoIXJlbmRlcmVyLmlzU1ZH
SW5saW5lKCkpOyAvLyBJbmxpbmVzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aGluIGEgUmVuZGVyU1ZH
VGV4dCB0cmVlCisKKyAgICAgICAgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJl
cikgfHwgaXM8UmVuZGVyU1ZHQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworI2Vsc2UK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsKKyNlbmRpZgorICAgIH07CisKKyAgICAv
LyBBcnJhbmdlIGxheW91dCBsb2NhdGlvbiBmb3IgYWxsIGNoaWxkIHJlbmRlcmVycyByZWxhdGl2
ZSB0byB0aGUgY29udGFpbmVyIGxheW91dCBsb2NhdGlvbi4KKyAgICBhdXRvIHBhcmVudExheW91
dExvY2F0aW9uID0gZmxvb3JlZExheW91dFBvaW50KG1fY29udGFpbmVyLm9iamVjdEJvdW5kaW5n
Qm94KCkubWluWE1pbllDb3JuZXIoKSk7CisgICAgZm9yIChSZW5kZXJPYmplY3QmIGNoaWxkIDog
bV9wb3NpdGlvbmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgdmVyaWZ5UG9zaXRpb25lZENoaWxkUmVu
ZGVyZXJFeHBlY3RhdGlvbihjaGlsZCk7CisKKyAgICAgICAgYXV0byBvYmplY3RCb3VuZGluZ0Jv
eENoaWxkID0gY2hpbGQub2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAgICAgYXV0byBsYXlvdXRM
b2NhdGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChvYmplY3RCb3VuZGluZ0JveENoaWxkLm1pblhN
aW5ZQ29ybmVyKCkpOworICAgICAgICBhdXRvIGRlc2lyZWRMYXlvdXRMb2NhdGlvbiA9IHRvTGF5
b3V0UG9pbnQobGF5b3V0TG9jYXRpb24gLSBwYXJlbnRMYXlvdXRMb2NhdGlvbik7CisgICAgICAg
IGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVyZXIo
Y2hpbGQpOworICAgICAgICBpZiAoY3VycmVudExheW91dExvY2F0aW9uID09IGRlc2lyZWRMYXlv
dXRMb2NhdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzZXRMYXlvdXRMb2Nh
dGlvbkZvclJlbmRlcmVyKGNoaWxkLCBkZXNpcmVkTGF5b3V0TG9jYXRpb24pOworICAgIH0KK30K
Kwordm9pZCBTVkdDb250YWluZXJMYXlvdXQ6OnZlcmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVu
Y3koY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgaWYgKHJlbmRlcmVyLmlz
U1ZHTGF5ZXJBd2FyZVJlbmRlcmVyKCkgJiYgIXJlbmRlcmVyLmlzU1ZHUm9vdCgpKSB7CisgICAg
ICAgIGF1dG8gY3VycmVudExheW91dExvY2F0aW9uID0gbGF5b3V0TG9jYXRpb25Gcm9tUmVuZGVy
ZXIocmVuZGVyZXIpOworCisgICAgICAgIGF1dG8gZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9IGN1
cnJlbnRMYXlvdXRMb2NhdGlvbjsKKyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2Vz
dG9yc09mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgIEFTU0VS
VChhbmNlc3Rvci5pc1NWR0xheWVyQXdhcmVSZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlmIChh
bmNlc3Rvci5pc1NWR1Jvb3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGV4cGVjdGVkTGF5b3V0TG9jYXRpb24ubW92ZUJ5KGxheW91dExvY2F0aW9uRnJvbVJlbmRlcmVy
KGFuY2VzdG9yKSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGluaXRpYWxMYXlvdXRMb2Nh
dGlvbiA9IGZsb29yZWRMYXlvdXRQb2ludChyZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpLm1p
blhNaW5ZQ29ybmVyKCkpOworICAgICAgICBpZiAoZXhwZWN0ZWRMYXlvdXRMb2NhdGlvbiA9PSBp
bml0aWFsTGF5b3V0TG9jYXRpb24pIHsKKyAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcs
IHN0cmVhbSA8PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJl
ciA8PCAiICgiIDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKSA8PCAiKSIKKyAgICAgICAgICAgICAg
ICA8PCAiIC0gdmVyaWZ5TGF5b3V0TG9jYXRpb25Db25zaXN0ZW5jeSgpIG9iamVjdEJvdW5kaW5n
Qm94IC8gbGF5b3V0TG9jYXRpb24gYXJlIGluIHN5bmMuIik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU1ZHLCBzdHJlYW0gPDwgIi0tPiBTVkdDb250YWlu
ZXJMYXlvdXQgcmVuZGVyZXIgIiA8PCAmcmVuZGVyZXIgPDwgIiAoIiA8PCByZW5kZXJlci5yZW5k
ZXJOYW1lKCkgPDwgIikiCisgICAgICAgICAgICAgICAgPDwgIiAtIHZlcmlmeUxheW91dExvY2F0
aW9uQ29uc2lzdGVuY3koKSBvYmplY3RCb3VuZGluZ0JveCAvIGxheW91dExvY2F0aW9uIGludmFy
aWFudCB2aW9sYXRlZCAtLSBvdXQgb2Ygc3luYyBkdWUgdG8gcGFydGlhbCBsYXlvdXQ/IgorICAg
ICAgICAgICAgICAgIDw8ICIgY3VycmVudExheW91dExvY2F0aW9uPSIgPDwgY3VycmVudExheW91
dExvY2F0aW9uCisgICAgICAgICAgICAgICAgPDwgIiAgKGV4cGVjdGVkTGF5b3V0TG9jYXRpb249
IiA8PCBleHBlY3RlZExheW91dExvY2F0aW9uCisgICAgICAgICAgICAgICAgPDwgIiAhPSBpbml0
aWFsTGF5b3V0TG9jYXRpb249IiA8PCBpbml0aWFsTGF5b3V0TG9jYXRpb24gPDwgIikiCisgICAg
ICAgICAgICAgICAgPDwgIiAtPiBhYm9ydGluZyB3aXRoIGEgcmVuZGVyIHRyZWUgZHVtcCIpOwor
CisjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQorICAgICAgICAgICAgc2hvd1JlbmRlclRyZWUo
JnJlbmRlcmVyKTsKKyNlbmRpZgorCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlw
ZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpIHsKKyAgICAgICAgaWYgKGNoaWxkLmlzU1ZHTGF5
ZXJBd2FyZVJlbmRlcmVyKCkpCisgICAgICAgICAgICB2ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNp
c3RlbmN5KGNoaWxkKTsKKyAgICB9CisKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgaWYgKHJl
bmRlcmVyLmlzU1ZHUm9vdCgpKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTVkcsIHN0cmVh
bSA8PCAiLS0+IFNWR0NvbnRhaW5lckxheW91dCByZW5kZXJlciAiIDw8ICZyZW5kZXJlciA8PCAi
ICgiIDw8IHJlbmRlcmVyLnJlbmRlck5hbWUoKSA8PCAiKSIKKyAgICAgICAgICAgIDw8ICIgLSB2
ZXJpZnlMYXlvdXRMb2NhdGlvbkNvbnNpc3RlbmN5KCkgZW5kIik7CisgICAgfQorI2VuZGlmCit9
CisKK3ZvaWQgU1ZHQ29udGFpbmVyTGF5b3V0OjpsYXlvdXREaWZmZXJlbnRSb290SWZOZWVkZWQo
Y29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgaWYgKGF1dG8qIHJlc291cmNl
cyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJlcihyZW5kZXJl
cikpIHsKKyAgICAgICAgYXV0byogc3ZnUm9vdCA9IFNWR1JlbmRlclN1cHBvcnQ6OmZpbmRUcmVl
Um9vdE9iamVjdChyZW5kZXJlcik7CisgICAgICAgIEFTU0VSVChzdmdSb290KTsKKyAgICAgICAg
cmVzb3VyY2VzLT5sYXlvdXREaWZmZXJlbnRSb290SWZOZWVkZWQoc3ZnUm9vdCk7CisgICAgfQor
fQorCit2b2lkIFNWR0NvbnRhaW5lckxheW91dDo6aW52YWxpZGF0ZVJlc291cmNlc09mQ2hpbGRy
ZW4oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKCFyZW5kZXJlci5uZWVk
c0xheW91dCgpKTsKKyAgICBpZiAoYXV0byogcmVzb3VyY2VzID0gU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNhY2hlZFJlc291cmNlc0ZvclJlbmRlcmVyKHJlbmRlcmVyKSkKKyAgICAgICAgcmVzb3VyY2Vz
LT5yZW1vdmVDbGllbnRGcm9tQ2FjaGUocmVuZGVyZXIsIGZhbHNlKTsKKworICAgIGZvciAoYXV0
byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCisgICAg
ICAgIGludmFsaWRhdGVSZXNvdXJjZXNPZkNoaWxkcmVuKGNoaWxkKTsKK30KKworYm9vbCBTVkdD
b250YWluZXJMYXlvdXQ6OmxheW91dFNpemVPZk5lYXJlc3RWaWV3cG9ydENoYW5nZWQoKSBjb25z
dAoreworICAgIFJlbmRlckVsZW1lbnQqIGFuY2VzdG9yID0gJm1fY29udGFpbmVyOworICAgIHdo
aWxlIChhbmNlc3RvciAmJiAhaXM8UmVuZGVyU1ZHUm9vdD4oKmFuY2VzdG9yKSAmJiAhaXM8UmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCphbmNlc3RvcikpCisgICAgICAgIGFuY2VzdG9yID0g
YW5jZXN0b3ItPnBhcmVudCgpOworCisgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICBpZiAoaXM8
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCphbmNlc3RvcikpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcj4oKmFuY2VzdG9yKS5pc0xheW91dFNp
emVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyU1ZHUm9vdD4oKmFuY2Vz
dG9yKS5pc0xheW91dFNpemVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgU1ZHQ29udGFpbmVyTGF5b3V0
Ojp0cmFuc2Zvcm1Ub1Jvb3RDaGFuZ2VkKGNvbnN0IFJlbmRlck9iamVjdCogYW5jZXN0b3IpCit7
CisgICAgd2hpbGUgKGFuY2VzdG9yKSB7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJl
YW0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lciBjaGFuZ2VzCisgICAgICAgIC8vIGlm
IChpczxSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyPigqYW5jZXN0b3IpKQorICAgICAg
ICAvLyAgICAgcmV0dXJuIGRvd25jYXN0PGNvbnN0IFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250
YWluZXI+KCphbmNlc3RvcikuZGlkVHJhbnNmb3JtVG9Sb290VXBkYXRlKCk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVy
IGNoYW5nZXMKKyAgICAgICAgLy8gaWYgKGlzPFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyPigq
YW5jZXN0b3IpKQorICAgICAgICAvLyAgICAgcmV0dXJuIGRvd25jYXN0PGNvbnN0IFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyPigqYW5jZXN0b3IpLmRpZFRyYW5zZm9ybVRvUm9vdFVwZGF0ZSgp
OworCisgICAgICAgIGlmIChpczxSZW5kZXJTVkdSb290PigqYW5jZXN0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PGNvbnN0IFJlbmRlclNWR1Jvb3Q+KCphbmNlc3RvcikuZGlkVHJh
bnNmb3JtVG9Sb290VXBkYXRlKCk7CisgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVu
dCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0NvbnRhaW5lckxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzEzMDkzNTEyNmNmN2Vj
ZTE1OTk5MmE4ZGI3MWMxMTY3MzAyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdDb250YWluZXJMYXlvdXQuaApAQCAtMCwwICsxLDU4IEBACisv
KioKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorI2luY2x1ZGUgIlJlbmRlckxheWVyTW9k
ZWxPYmplY3QuaCIKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNWR0NvbnRhaW5lckxheW91dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U1ZHQ29udGFpbmVyTGF5b3V0KTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTVkdDb250YWluZXJM
YXlvdXQoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIH5TVkdDb250YWluZXJMYXlvdXQo
KSA9IGRlZmF1bHQ7CisKKyAgICAvLyAnY29udGFpbmVyTmVlZHNMYXlvdXQnIGRlbm90ZXMgaWYg
dGhlIGNvbnRhaW5lciBmb3Igd2hpY2ggdGhlCisgICAgLy8gU1ZHQ29udGFpbmVyTGF5b3V0IG9i
amVjdCB3YXMgY3JlYXRlZCBuZWVkcyB0byBiZSBsYWlkIG91dCBvciBub3QuCisgICAgdm9pZCBs
YXlvdXRDaGlsZHJlbihib29sIGNvbnRhaW5lck5lZWRzTGF5b3V0KTsKKworICAgIHZvaWQgcG9z
aXRpb25DaGlsZHJlblJlbGF0aXZlVG9Db250YWluZXIoKTsKKworICAgIHN0YXRpYyB2b2lkIHZl
cmlmeUxheW91dExvY2F0aW9uQ29uc2lzdGVuY3koY29uc3QgUmVuZGVyRWxlbWVudCYpOworICAg
IHN0YXRpYyBib29sIHRyYW5zZm9ybVRvUm9vdENoYW5nZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBh
bmNlc3Rvcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBsYXlvdXREaWZmZXJlbnRSb290SWZOZWVk
ZWQoY29uc3QgUmVuZGVyRWxlbWVudCYpOworICAgIHZvaWQgaW52YWxpZGF0ZVJlc291cmNlc09m
Q2hpbGRyZW4oUmVuZGVyRWxlbWVudCYpOworCisgICAgYm9vbCBsYXlvdXRTaXplT2ZOZWFyZXN0
Vmlld3BvcnRDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBt
X2NvbnRhaW5lcjsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0Pj4gbV9wb3NpdGlvbmVkQ2hpbGRyZW47Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
</data>
<flag name="review"
          id="475145"
          type_id="1"
          status="+"
          setter="rbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>