<?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>230155</bug_id>
          
          <creation_ts>2021-09-10 09:09:05 -0700</creation_ts>
          <short_desc>Factor more text painting functions to TextBoxPainter</short_desc>
          <delta_ts>2021-09-10 10:17:22 -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>Layout and Rendering</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="Antti Koivisto">koivisto</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1792362</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 09:09:05 -0700</bug_when>
    <thetext>from LegacyInlineTextBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792381</commentid>
    <comment_count>1</comment_count>
      <attachid>437878</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 09:15:58 -0700</bug_when>
    <thetext>Created attachment 437878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792387</commentid>
    <comment_count>2</comment_count>
      <attachid>437882</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-09-10 09:23:38 -0700</bug_when>
    <thetext>Created attachment 437882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792412</commentid>
    <comment_count>3</comment_count>
      <attachid>437882</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-09-10 09:54:06 -0700</bug_when>
    <thetext>Comment on attachment 437882
Patch

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

&gt; Source/WebCore/rendering/TextBoxPainter.cpp:368
&gt; +    auto y = ascent + 0.11035 * fontSize;
&gt; +    auto height = 0.13247 * fontSize;

science.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792427</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-10 10:16:50 -0700</bug_when>
    <thetext>Committed r282277 (241555@main): &lt;https://commits.webkit.org/241555@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 437882.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792428</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-10 10:17:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/82978035&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437878</attachid>
            <date>2021-09-10 09:15:58 -0700</date>
            <delta_ts>2021-09-10 09:33:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230155-20210910191556.patch</filename>
            <type>text/plain</type>
            <size>24724</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWIxNDJhZTg4Y2JjMzcx
NGU2ZDVjNWEzZTI5ZTk4ZWNjNTViODAwZi4uMzEyOTU1YzY0NzdmNDk5MGYxMjUzMzc5NmQ3NjY0
Zjc1MjJkOWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTA5LTEwICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgbW9yZSB0ZXh0
IHBhaW50aW5nIGZ1bmN0aW9ucyB0byBUZXh0Qm94UGFpbnRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMTU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tcG9zaXRpb24gdW5kZXJsaW5lcyBhbmQg
ZG9jdW1lbnQgbWFya2Vycy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3Zl
cmZsb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6Y2FsY3Vs
YXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2Vy
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25VbmRlcmxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5k
ZXJsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJr
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVVbmlvbk9m
QWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50
ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOgorCiAyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZy
b20gTGVnYWN5SW5saW5lVGV4dEJveCBpbnRvIGEgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5NDgyMjZhNzczM2ViNGM4
MDY3MDNlNmI1ZTdkOTA3ZDc3YTE4MTU4Li5mMTU0ZjgxZTdhNTQwOGVmYmEyNzUzNTk5ZjAyYTM2
N2RmZmI0ZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zMjU1OCw3ICszMjU1OCw2IEBACiAJCQkJMzE4RUFENEQxRkE5MTM4
MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NDBERjU2MjZFQjUzRTAwMDRBRjA2QiAv
KiBUZXh0Qm94UGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAw
QUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3
MDVDOTI1NTI4RDM0MDAxRDBDOTQgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzUxNzgsNiArMzUxNzcsNyBAQAog
CQkJCUNFN0IyREI1MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTREQ0U2MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0
b1NpemluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMzQwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRCb3VuZGFyaWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDQwREY1NjI2RUI1M0UwMDA0
QUYwNkIgLyogVGV4dEJveFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDdGNUIzMjY2
Q0Y2M0QwMDEzM0YwMCAvKiBUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzE1MUJEODEyRjE1NThGMDA1QTBGNjQgLyogVGV4dENoZWNrZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3N0QwMDEyMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUlubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZUZsb3dCb3guY3BwCmluZGV4IDgzYTgxMmZmMWRlNzE0M2UxNTA2YjYwNmUyZjYwNzRiMjU1
YjY2ZjUuLmMxZjcxYjI3NTFjYjc3MWQ2Njc0ODRmMjBmMThlYzY4OGE2NGM3NjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEJveFBhaW50ZXIuaCIKICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtOTM2
LDcgKzkzNyw3IEBAIGlubGluZSB2b2lkIExlZ2FjeUlubGluZUZsb3dCb3g6OmFkZFRleHRCb3hW
aXN1YWxPdmVyZmxvdyhMZWdhY3lJbmxpbmVUZXh0Qm94JiB0CiAgICAgCiAgICAgbG9naWNhbFZp
c3VhbE92ZXJmbG93ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dp
Y2FsVG9wVmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNh
bExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNh
bFRvcFZpc3VhbE92ZXJmbG93KTsKIAotICAgIGF1dG8gZG9jdW1lbnRNYXJrZXJCb3VuZHMgPSB0
ZXh0Qm94LmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcygpOworICAgIGF1
dG8gZG9jdW1lbnRNYXJrZXJCb3VuZHMgPSBUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlVW5pb25P
ZkFsbERvY3VtZW50TWFya2VyQm91bmRzKHRleHRCb3gpOwogICAgIGRvY3VtZW50TWFya2VyQm91
bmRzLm1vdmUodGV4dEJveC5sb2dpY2FsTGVmdCgpLCB0ZXh0Qm94LmxvZ2ljYWxUb3AoKSk7CiAg
ICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gdW5pb25SZWN0KGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dywgTGF5b3V0UmVjdChkb2N1bWVudE1hcmtlckJvdW5kcykpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKaW5kZXggMWYwM2JjNDc5Mjhi
MTM5YzMwMzYyZTY1NDk3ZTQ1M2YyOWRmMmU4OS4uODgyM2ZmNzYwYTZmYjY4M2NjOWU4YjZhZmE3
MzNkMjMxZDA4YWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUlubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJ
bmxpbmVUZXh0Qm94LmNwcApAQCAtNTE3LDcgKzUxNyw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mCiAgICAgICAgIHJlbmRlcmVyKCkucGFnZSgpLmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0
KCZyZW5kZXJlcigpLCBJbnRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCksIGxvZ2lj
YWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCkKLSAgICAgICAgcGFpbnRQbGF0Zm9ybURvY3VtZW50
TWFya2Vycyhjb250ZXh0LCBib3hPcmlnaW4pOworICAgICAgICB0ZXh0Qm94UGFpbnRlci5wYWlu
dFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKCk7CiAKICAgICAvLyAyLiBOb3cgcGFpbnQgdGhlIGZv
cmVncm91bmQsIGluY2x1ZGluZyB0ZXh0IGFuZCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZS9v
dmVybGluZSAoaW4gcXVpcmtzIG1vZGUgb25seSkuCiAgICAgYm9vbCBzaG91bGRQYWludFNlbGVj
dGlvbkZvcmVncm91bmQgPSBoYXZlU2VsZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzOwpA
QCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAKICAgICAvLyAzLiBQ
YWludCBmYW5jeSBkZWNvcmF0aW9ucywgaW5jbHVkaW5nIGNvbXBvc2l0aW9uIHVuZGVybGluZXMg
YW5kIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybGluZXMgZm9yIHNwZWxsaW5nIGVycm9ycywgZ3Jh
bW1hciBlcnJvcnMsIGV0IGNldGVyYS4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2U6OkZvcmVncm91bmQgJiYgdXNlQ3VzdG9tVW5kZXJsaW5lcykKLSAgICAgICAgcGFpbnRD
b21wb3NpdGlvblVuZGVybGluZXMocGFpbnRJbmZvLCBib3hPcmlnaW4pOyAgICAKKyAgICAgICAg
dGV4dEJveFBhaW50ZXIucGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKTsKIH0KIAogVGV4dEJv
eFNlbGVjdGFibGVSYW5nZSBMZWdhY3lJbmxpbmVUZXh0Qm94OjpzZWxlY3RhYmxlUmFuZ2UoKSBj
b25zdApAQCAtNjUxLDgwICs2NTEsNiBAQCBib29sIExlZ2FjeUlubGluZVRleHRCb3g6Omhhc01h
cmtlcnMoKSBjb25zdAogICAgIHJldHVybiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRN
YXJrZXJzKHJlbmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBo
YXNlOjpEZWNvcmF0aW9uKS5zaXplKCk7CiB9CiAKLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6
cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbikKLXsKLSAgICAvLyBUaGlzIG11c3QgbWF0Y2ggY2Fs
Y3VsYXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKCkuCi0gICAgYXV0byBtYXJrZWRU
ZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMocmVuZGVyZXIoKSwg
c2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pOwot
ICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRU
ZXh0cywgTWFya2VkVGV4dDo6T3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpKQotICAgICAgICBw
YWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29udGV4dCwgYm94T3JpZ2luLCBtYXJrZWRUZXh0
KTsKLX0KLQotRmxvYXRSZWN0IExlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZVVuaW9uT2ZB
bGxEb2N1bWVudE1hcmtlckJvdW5kcygpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBtdXN0IG1hdGNo
IHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMoKS4KLSAgICBGbG9hdFJlY3QgcmVzdWx0Owot
ICAgIGF1dG8gbWFya2VkVGV4dHMgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJr
ZXJzKHJlbmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpEZWNvcmF0aW9uKTsKLSAgICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0Ojpz
dWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRt
b3N0KSkKLSAgICAgICAgcmVzdWx0ID0gdW5pb25SZWN0KHJlc3VsdCwgY2FsY3VsYXRlRG9jdW1l
bnRNYXJrZXJCb3VuZHMobWFya2VkVGV4dCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUZs
b2F0UmVjdCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5k
cyhjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KSBjb25zdAotewotICAgIGF1dG8mIGZvbnQg
PSBsaW5lRm9udCgpOwotICAgIGF1dG8gYXNjZW50ID0gZm9udC5mb250TWV0cmljcygpLmFzY2Vu
dCgpOwotICAgIGF1dG8gZm9udFNpemUgPSBzdGQ6Om1pbihzdGQ6Om1heChmb250LnNpemUoKSwg
MTAuMGYpLCA0MC4wZik7Ci0gICAgYXV0byB5ID0gYXNjZW50ICsgMC4xMTAzNSAqIGZvbnRTaXpl
OwotICAgIGF1dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOwotCi0gICAgLy8gQXZvaWQg
bWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBh
cyBhbiBvcHRpbWl6YXRpb24uCi0gICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFy
a2VkVGV4dC5lbmRPZmZzZXQgIT0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAoZW5kKCkpKSB7Ci0g
ICAgICAgIFRleHRSdW4gcnVuID0gY3JlYXRlVGV4dFJ1bigpOwotICAgICAgICBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KDAsIHksIDAsIGhlaWdodCk7Ci0gICAgICAgIGxp
bmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBt
YXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7Ci0gICAgICAgIHJl
dHVybiBzZWxlY3Rpb25SZWN0OwotICAgIH0KLQotICAgIHJldHVybiBGbG9hdFJlY3QoMCwgeSwg
bG9naWNhbFdpZHRoKCksIGhlaWdodCk7Ci19Ci0KLXZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6
cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQot
ewotICAgIC8vIE5ldmVyIHByaW50IHNwZWxsaW5nL2dyYW1tYXIgbWFya2VycyAoNTMyNzg4NykK
LSAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGJvdW5kcyA9IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRz
KG1hcmtlZFRleHQpOwotCi0gICAgYXV0byBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0VHlwZSA9IFsm
XSgpIC0+IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKLSAgICAgICAgYm9vbCBzaG91bGRVc2VE
YXJrQXBwZWFyYW5jZSA9IHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLSAgICAgICAg
c3dpdGNoIChtYXJrZWRUZXh0LnR5cGUpIHsKLSAgICAgICAgY2FzZSBNYXJrZWRUZXh0OjpTcGVs
bGluZ0Vycm9yOgotICAgICAgICAgICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OlNwZWxsaW5nLCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9OwotICAgICAgICBjYXNl
IE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiB7IERvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyLCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9
OwotICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkNvcnJlY3Rpb246Ci0gICAgICAgICAgICByZXR1
cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKLSAgICAgICAgY2FzZSBNYXJrZWRUZXh0
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6Ci0gICAgICAgICAgICByZXR1cm4geyBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBzaG91bGRVc2VEYXJr
QXBwZWFyYW5jZSB9OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGNhc2UgTWFy
a2VkVGV4dDo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW5hbWUgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlRleHRDaGVja2luZ0RpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgYW5kIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZB
TUlMWSktZ3VhcmQuCi0gICAgICAgICAgICByZXR1cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgc2hv
dWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4geyBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsIHNob3VsZFVzZURhcmtBcHBlYXJhbmNl
IH07Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm91bmRzLm1vdmVCeShib3hPcmlnaW4pOwot
ICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZv
ck1hcmtlZFRleHRUeXBlKCkpOwotfQotCiBGbG9hdFBvaW50IExlZ2FjeUlubGluZVRleHRCb3g6
OnRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0CiB7
CiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luIHsgYm94UmVjdC54KCksIGJveFJlY3QueSgpICsg
bGluZUZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpIH07CkBAIC03MzksODUgKzY2NSw2IEBA
IEZsb2F0UG9pbnQgTGVnYWN5SW5saW5lVGV4dEJveDo6dGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCkKICAgICByZXR1cm4gdGV4dE9yaWdpbjsKIH0KIAotdm9p
ZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKSBjb25zdAotewotICAg
IGlmIChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGF1dG8mIHVuZGVybGluZSA6IHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5j
dXN0b21Db21wb3NpdGlvblVuZGVybGluZXMoKSkgewotICAgICAgICBpZiAodW5kZXJsaW5lLmVu
ZE9mZnNldCA8PSBtX3N0YXJ0KSB7Ci0gICAgICAgICAgICAvLyBVbmRlcmxpbmUgaXMgY29tcGxl
dGVseSBiZWZvcmUgdGhpcyBydW4uIFRoaXMgbWlnaHQgYmUgYW4gdW5kZXJsaW5lIHRoYXQgc2l0
cwotICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBmaXJzdCBydW4gd2UgZHJhdywgb3IgdW5kZXJs
aW5lcyB0aGF0IHdlcmUgd2l0aGluIHJ1bnMgd2Ugc2tpcHBlZAotICAgICAgICAgICAgLy8gZHVl
IHRvIHRydW5jYXRpb24uCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh1bmRlcmxpbmUuc3RhcnRPZmZzZXQgPj0gZW5kKCkpCi0gICAgICAgICAgICBicmVh
azsgLy8gVW5kZXJsaW5lIGlzIGNvbXBsZXRlbHkgYWZ0ZXIgdGhpcyBydW4sIGJhaWwuIEEgbGF0
ZXIgcnVuIHdpbGwgcGFpbnQgaXQuCi0KLSAgICAgICAgLy8gVW5kZXJsaW5lIGludGVyc2VjdHMg
dGhpcyBydW4uIFBhaW50IGl0LgotICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKHBh
aW50SW5mbywgYm94T3JpZ2luLCB1bmRlcmxpbmUpOwotCi0gICAgICAgIGlmICh1bmRlcmxpbmUu
ZW5kT2Zmc2V0ID4gZW5kKCkpCi0gICAgICAgICAgICBicmVhazsgLy8gVW5kZXJsaW5lIGFsc28g
cnVucyBpbnRvIHRoZSBuZXh0IHJ1bi4gQmFpbCBub3csIG5vIG1vcmUgbWFya2VyIGFkdmFuY2Vt
ZW50LgotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxv
YXQgbG9naWNhbFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgZmxvYXQmIHN0YXJ0LCBm
bG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikK
LSAgICAgICAgcmV0dXJuOwotICAgIHN0YXJ0ID0gbG9naWNhbFdpZHRoIC0gd2lkdGggLSBzdGFy
dDsKLX0KLQotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNv
bnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
dHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBmbG9hdCBzdGFydCA9IDA7IC8vIHN0YXJ0IG9mIGxpbmUgdG8gZHJhdywgcmVsYXRpdmUgdG8g
dHgKLSAgICBmbG9hdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOyAvLyBob3cgbXVjaCBsaW5lIHRv
IGRyYXcKLSAgICBib29sIHVzZVdob2xlV2lkdGggPSB0cnVlOwotICAgIHVuc2lnbmVkIHBhaW50
U3RhcnQgPSBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIHBhaW50RW5kID0gZW5kKCk7Ci0gICAgaWYg
KHBhaW50U3RhcnQgPD0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgIHBhaW50U3Rh
cnQgPSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxz
ZTsKLSAgICAgICAgc3RhcnQgPSByZW5kZXJlcigpLndpZHRoKG1fc3RhcnQsIHBhaW50U3RhcnQg
LSBtX3N0YXJ0LCB0ZXh0UG9zKCksIGlzRmlyc3RMaW5lKCkpOwotICAgIH0KLSAgICBpZiAocGFp
bnRFbmQgIT0gdW5kZXJsaW5lLmVuZE9mZnNldCkgewotICAgICAgICBwYWludEVuZCA9IHN0ZDo6
bWluKHBhaW50RW5kLCAodW5zaWduZWQpdW5kZXJsaW5lLmVuZE9mZnNldCk7Ci0gICAgICAgIHVz
ZVdob2xlV2lkdGggPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9U
cnVuY2F0aW9uKSB7Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNp
Z25lZCltX3N0YXJ0ICsgbV90cnVuY2F0aW9uKTsKLSAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZh
bHNlOwotICAgIH0KLSAgICBpZiAoIXVzZVdob2xlV2lkdGgpIHsKLSAgICAgICAgd2lkdGggPSBy
ZW5kZXJlcigpLndpZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgdGV4dFBv
cygpICsgc3RhcnQsIGlzRmlyc3RMaW5lKCkpOwotICAgICAgICBtaXJyb3JSVExTZWdtZW50KGxv
Z2ljYWxXaWR0aCgpLCBkaXJlY3Rpb24oKSwgc3RhcnQsIHdpZHRoKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGljayBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzIGFyZSAycHggdGhpY2sgYXMgbG9uZyBhcyB0
aGVyZSBpcyByb29tIGZvciB0aGUgMnB4IGxpbmUgdW5kZXIgdGhlIGJhc2VsaW5lLgotICAgIC8v
IEFsbCBvdGhlciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzIGFyZSAxcHggdGhpY2suCi0gICAgLy8g
SWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIHRoZSB1bmRlcmxpbmUgd2lsbCB0b3VjaCBvciBv
dmVybGFwIGNoYXJhY3RlcnMuCi0gICAgaW50IGxpbmVUaGlja25lc3MgPSAxOwotICAgIGludCBi
YXNlbGluZSA9IGxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0gICAgaWYgKHVu
ZGVybGluZS50aGljayAmJiBsb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQotICAgICAg
ICBsaW5lVGhpY2tuZXNzID0gMjsKLQotICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21lIHNwYWNl
IGJldHdlZW4gdW5kZXJsaW5lcyBvZiBzdWJzZXF1ZW50IGNsYXVzZXMsIGJlY2F1c2Ugc29tZSBp
bnB1dCBtZXRob2RzIGRvIG5vdCB1c2UgZGlmZmVyZW50IHVuZGVybGluZSBzdHlsZXMgZm9yIHRo
b3NlLgotICAgIC8vIFdlIG1ha2UgZWFjaCBsaW5lIHNob3J0ZXIsIHdoaWNoIGhhcyBhIGhhcm1s
ZXNzIHNpZGUgZWZmZWN0IG9mIHNob3J0ZW5pbmcgdGhlIGZpcnN0IGFuZCBsYXN0IGNsYXVzZXMs
IHRvby4KLSAgICBzdGFydCArPSAxOwotICAgIHdpZHRoIC09IDI7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIENvbG9yIHVuZGVybGlu
ZUNvbG9yID0gdW5kZXJsaW5lLmNvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3IgPT0gQ29tcG9zaXRp
b25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9yID8gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3IpIDogcmVuZGVyZXIoKS5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHVuZGVy
bGluZS5jb2xvcik7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7
Ci0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobGluZVRoaWNrbmVzcyk7Ci0gICAgY29u
dGV4dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94
T3JpZ2luLnkoKSArIGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MsIHdpZHRoLCBsaW5l
VGhpY2tuZXNzKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5nKCkpOwotfQotCiBpbnQg
TGVnYWN5SW5saW5lVGV4dEJveDo6Y2FyZXRNaW5PZmZzZXQoKSBjb25zdAogewogICAgIHJldHVy
biBtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0
Qm94LmgKaW5kZXggMTMwYjIxOTY1ZGI3NTdlMzFhMzY1YWVlMWU1YTVlYjJlNDNjYjkwOC4uNjUy
MmFiNDEyZDBjNWJjNDVlZTZlMzIwMWQzMjYzNjI4ZmI1N2IwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCkBAIC0yMywyMCArMjMsMTMgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lQm94LmgiCi0jaW5jbHVkZSAi
TWFya2VkVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0UnVu
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyQ29tYmluZVRleHQ7Ci1j
bGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwotY2xhc3MgVGV4dFBhaW50ZXI7Ci1zdHJ1Y3Qg
Q29tcG9zaXRpb25VbmRlcmxpbmU7Ci1zdHJ1Y3QgTWFya2VkVGV4dDsKLXN0cnVjdCBTdHlsZWRN
YXJrZWRUZXh0Owogc3RydWN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2U7Ci1zdHJ1Y3QgVGV4dFBh
aW50U3R5bGU7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBVU0hSVF9N
QVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRpb24gPSBVU0hSVF9NQVggLSAx
OwpAQCAtMTU5LDIwICsxNTIsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRp
b25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKIAogICAgIGJvb2wgaGFzTWFya2Vy
cygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJr
ZXJCb3VuZHMoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJC
b3VuZHMoY29uc3QgTWFya2VkVGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBUZXh0Qm94UGFpbnRlcjsKIAogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludFBsYXRmb3JtRG9j
dW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBjb25zdCBNYXJrZWRUZXh0Jik7Ci0gICAgdm9pZCBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbik7Ci0KLSAg
ICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbikgY29uc3Q7Ci0gICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJs
aW5lKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9z
aXRpb25VbmRlcmxpbmUmKSBjb25zdDsKLQogICAgIGNvbnN0IFJlbmRlckNvbWJpbmVUZXh0KiBj
b21iaW5lZFRleHQoKSBjb25zdDsKICAgICBjb25zdCBGb250Q2FzY2FkZSYgbGluZUZvbnQoKSBj
b25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5jcHAKaW5k
ZXggNGEzNmI3MjczYmVmNjA2MTdjOWM0OWEzNzMxMTU0N2Q0YTg5MmUxOC4uMjViMDQ3ODllMzA5
MmJhMWEwMDQ2ZTFmMWM1MjZhMzgwYWUyOTg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEJveFBhaW50ZXIuY3BwCkBAIC0yMjcsNCArMjI3LDE1NSBAQCB2b2lkIFRleHRCb3hQ
YWludGVyOjpwYWludERlY29yYXRpb24oY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4
dCwgY29uc3QgRgogICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3Qs
IENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KIAordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21w
b3NpdGlvblVuZGVybGluZXMoKQoreworICAgIGlmIChtX3RleHRCb3gudHJ1bmNhdGlvbigpID09
IGNGdWxsVHJ1bmNhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiB1bmRl
cmxpbmUgOiBtX3RleHRCb3gucmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmN1c3RvbUNvbXBv
c2l0aW9uVW5kZXJsaW5lcygpKSB7CisgICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0IDw9
IG1fdGV4dEJveC5zdGFydCgpKSB7CisgICAgICAgICAgICAvLyBVbmRlcmxpbmUgaXMgY29tcGxl
dGVseSBiZWZvcmUgdGhpcyBydW4uIFRoaXMgbWlnaHQgYmUgYW4gdW5kZXJsaW5lIHRoYXQgc2l0
cworICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBmaXJzdCBydW4gd2UgZHJhdywgb3IgdW5kZXJs
aW5lcyB0aGF0IHdlcmUgd2l0aGluIHJ1bnMgd2Ugc2tpcHBlZAorICAgICAgICAgICAgLy8gZHVl
IHRvIHRydW5jYXRpb24uCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICh1bmRlcmxpbmUuc3RhcnRPZmZzZXQgPj0gbV90ZXh0Qm94LmVuZCgpKQorICAgICAg
ICAgICAgYnJlYWs7IC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGFmdGVyIHRoaXMgcnVuLCBi
YWlsLiBBIGxhdGVyIHJ1biB3aWxsIHBhaW50IGl0LgorCisgICAgICAgIC8vIFVuZGVybGluZSBp
bnRlcnNlY3RzIHRoaXMgcnVuLiBQYWludCBpdC4KKyAgICAgICAgcGFpbnRDb21wb3NpdGlvblVu
ZGVybGluZSh1bmRlcmxpbmUpOworCisgICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0ID4g
bV90ZXh0Qm94LmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7IC8vIFVuZGVybGluZSBhbHNvIHJ1
bnMgaW50byB0aGUgbmV4dCBydW4uIEJhaWwgbm93LCBubyBtb3JlIG1hcmtlciBhZHZhbmNlbWVu
dC4KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtaXJyb3JSVExTZWdtZW50KGZsb2F0
IGxvZ2ljYWxXaWR0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGZsb2F0JiBzdGFydCwgZmxv
YXQgd2lkdGgpCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCisg
ICAgICAgIHJldHVybjsKKyAgICBzdGFydCA9IGxvZ2ljYWxXaWR0aCAtIHdpZHRoIC0gc3RhcnQ7
Cit9CisKK3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoY29u
c3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fdGV4dEJveC5yZW5kZXJlcigpOworCisgICAgZmxvYXQgc3RhcnQgPSAwOyAvLyBzdGFy
dCBvZiBsaW5lIHRvIGRyYXcsIHJlbGF0aXZlIHRvIHR4CisgICAgZmxvYXQgd2lkdGggPSBtX3Rl
eHRCb3gubG9naWNhbFdpZHRoKCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdworICAgIGJvb2wg
dXNlV2hvbGVXaWR0aCA9IHRydWU7CisgICAgdW5zaWduZWQgcGFpbnRTdGFydCA9IG1fdGV4dEJv
eC5zdGFydCgpOworICAgIHVuc2lnbmVkIHBhaW50RW5kID0gbV90ZXh0Qm94LmVuZCgpOworICAg
IGlmIChwYWludFN0YXJ0IDw9IHVuZGVybGluZS5zdGFydE9mZnNldCkgeworICAgICAgICBwYWlu
dFN0YXJ0ID0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0OworICAgICAgICB1c2VXaG9sZVdpZHRoID0g
ZmFsc2U7CisgICAgICAgIHN0YXJ0ID0gcmVuZGVyZXIud2lkdGgobV90ZXh0Qm94LnN0YXJ0KCks
IHBhaW50U3RhcnQgLSBtX3RleHRCb3guc3RhcnQoKSwgbV90ZXh0Qm94LnRleHRQb3MoKSwgbV90
ZXh0Qm94LmlzRmlyc3RMaW5lKCkpOworICAgIH0KKyAgICBpZiAocGFpbnRFbmQgIT0gdW5kZXJs
aW5lLmVuZE9mZnNldCkgeworICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50RW5kLCAo
dW5zaWduZWQpdW5kZXJsaW5lLmVuZE9mZnNldCk7CisgICAgICAgIHVzZVdob2xlV2lkdGggPSBm
YWxzZTsKKyAgICB9CisgICAgaWYgKG1fdGV4dEJveC50cnVuY2F0aW9uKCkgIT0gY05vVHJ1bmNh
dGlvbikgeworICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50RW5kLCBtX3RleHRCb3gu
c3RhcnQoKSArIG1fdGV4dEJveC50cnVuY2F0aW9uKCkpOworICAgICAgICB1c2VXaG9sZVdpZHRo
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICghdXNlV2hvbGVXaWR0aCkgeworICAgICAgICB3aWR0
aCA9IHJlbmRlcmVyLndpZHRoKHBhaW50U3RhcnQsIHBhaW50RW5kIC0gcGFpbnRTdGFydCwgbV90
ZXh0Qm94LnRleHRQb3MoKSArIHN0YXJ0LCBtX3RleHRCb3guaXNGaXJzdExpbmUoKSk7CisgICAg
ICAgIG1pcnJvclJUTFNlZ21lbnQobV90ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCBtX3RleHRCb3gu
ZGlyZWN0aW9uKCksIHN0YXJ0LCB3aWR0aCk7CisgICAgfQorCisgICAgLy8gVGhpY2sgbWFya2Vk
IHRleHQgdW5kZXJsaW5lcyBhcmUgMnB4IHRoaWNrIGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBm
b3IgdGhlIDJweCBsaW5lIHVuZGVyIHRoZSBiYXNlbGluZS4KKyAgICAvLyBBbGwgb3RoZXIgbWFy
a2VkIHRleHQgdW5kZXJsaW5lcyBhcmUgMXB4IHRoaWNrLgorICAgIC8vIElmIHRoZXJlJ3Mgbm90
IGVub3VnaCBzcGFjZSB0aGUgdW5kZXJsaW5lIHdpbGwgdG91Y2ggb3Igb3ZlcmxhcCBjaGFyYWN0
ZXJzLgorICAgIGludCBsaW5lVGhpY2tuZXNzID0gMTsKKyAgICBpbnQgYmFzZWxpbmUgPSBtX3Rl
eHRCb3gubGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKyAgICBpZiAodW5kZXJs
aW5lLnRoaWNrICYmIG1fdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlbGluZSA+PSAyKQor
ICAgICAgICBsaW5lVGhpY2tuZXNzID0gMjsKKworICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzb21l
IHNwYWNlIGJldHdlZW4gdW5kZXJsaW5lcyBvZiBzdWJzZXF1ZW50IGNsYXVzZXMsIGJlY2F1c2Ug
c29tZSBpbnB1dCBtZXRob2RzIGRvIG5vdCB1c2UgZGlmZmVyZW50IHVuZGVybGluZSBzdHlsZXMg
Zm9yIHRob3NlLgorICAgIC8vIFdlIG1ha2UgZWFjaCBsaW5lIHNob3J0ZXIsIHdoaWNoIGhhcyBh
IGhhcm1sZXNzIHNpZGUgZWZmZWN0IG9mIHNob3J0ZW5pbmcgdGhlIGZpcnN0IGFuZCBsYXN0IGNs
YXVzZXMsIHRvby4KKyAgICBzdGFydCArPSAxOworICAgIHdpZHRoIC09IDI7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBtX3BhaW50SW5mby5jb250ZXh0KCk7CisgICAgQ29sb3Ig
dW5kZXJsaW5lQ29sb3IgPSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBD
b21wb3NpdGlvblVuZGVybGluZUNvbG9yOjpUZXh0Q29sb3IgPyByZW5kZXJlci5zdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRG
aWxsQ29sb3IpIDogcmVuZGVyZXIuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcih1
bmRlcmxpbmUuY29sb3IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5kZXJsaW5lQ29s
b3IpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOworICAg
IGNvbnRleHQuZHJhd0xpbmVGb3JUZXh0KEZsb2F0UmVjdChtX2JveFJlY3QueCgpICsgc3RhcnQs
IG1fYm94UmVjdC55KCkgKyBtX3RleHRCb3gubG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVz
cywgd2lkdGgsIGxpbmVUaGlja25lc3MpLCByZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkp
OworfQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJz
KCkKK3sKKyAgICBhdXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3Vt
ZW50TWFya2VycyhtX3RleHRCb3gucmVuZGVyZXIoKSwgbV90ZXh0Qm94LnNlbGVjdGFibGVSYW5n
ZSgpLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKKyAgICBmb3IgKGF1dG8m
IG1hcmtlZFRleHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRl
eHQ6Ok92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKKyAgICAgICAgcGFpbnRQbGF0Zm9ybURv
Y3VtZW50TWFya2VyKG1hcmtlZFRleHQpOworfQorCitGbG9hdFJlY3QgVGV4dEJveFBhaW50ZXI6
OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxp
bmVUZXh0Qm94JiB0ZXh0Qm94KQoreworICAgIC8vIFRoaXMgbXVzdCBtYXRjaCBwYWludFBsYXRm
b3JtRG9jdW1lbnRNYXJrZXJzKCkuCisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBhdXRvIG1h
cmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2Vycyh0ZXh0Qm94
LnJlbmRlcmVyKCksIHRleHRCb3guc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50
UGhhc2U6OkRlY29yYXRpb24pOworICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IE1hcmtlZFRl
eHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cywgTWFya2VkVGV4dDo6T3ZlcmxhcFN0cmF0ZWd5OjpG
cm9udG1vc3QpKQorICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVE
b2N1bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94LCBtYXJrZWRUZXh0KSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFy
a2VyKGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCit7CisgICAgLy8gTmV2ZXIgcHJpbnQg
c3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQorICAgIGlmIChtX3RleHRCb3gucmVu
ZGVyZXIoKS5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3RleHRCb3gudHJ1bmNhdGlvbigpID09IGNGdWxsVHJ1bmNhdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBib3VuZHMgPSBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyht
X3RleHRCb3gsIG1hcmtlZFRleHQpOworCisgICAgYXV0byBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0
VHlwZSA9IFsmXSgpIC0+IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICAgICAgYm9vbCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZSA9IG1fdGV4dEJveC5yZW5kZXJlcigpLnVzZURhcmtBcHBl
YXJhbmNlKCk7CisgICAgICAgIHN3aXRjaCAobWFya2VkVGV4dC50eXBlKSB7CisgICAgICAgIGNh
c2UgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiB7IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywgc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UgfTsKKyAgICAgICAgY2FzZSBNYXJrZWRUZXh0OjpHcmFtbWFyRXJyb3I6CisgICAgICAgICAg
ICByZXR1cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwgc2hvdWxk
VXNlRGFya0FwcGVhcmFuY2UgfTsKKyAgICAgICAgY2FzZSBNYXJrZWRUZXh0OjpDb3JyZWN0aW9u
OgorICAgICAgICAgICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1
dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH07CisgICAg
ICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAg
cmV0dXJuIHsgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcywgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXM6CisgICAgICAgICAgICAvLyBGSVhNRTogUmVuYW1lIERvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzIGFuZCByZW1vdmUg
dGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgorICAgICAgICAgICAgcmV0dXJuIHsgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXMsIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH07CisjZW5kaWYKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nLCBzaG91
bGRVc2VEYXJrQXBwZWFyYW5jZSB9OworICAgICAgICB9CisgICAgfTsKKworICAgIGJvdW5kcy5t
b3ZlQnkobV9ib3hSZWN0LmxvY2F0aW9uKCkpOworICAgIG1fcGFpbnRJbmZvLmNvbnRleHQoKS5k
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGJvdW5kcywgbGluZVN0eWxlRm9yTWFya2VkVGV4dFR5
cGUoKSk7Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y2FsY3VsYXRlRG9jdW1lbnRN
YXJrZXJCb3VuZHMoY29uc3QgTGVnYWN5SW5saW5lVGV4dEJveCYgdGV4dEJveCwgY29uc3QgTWFy
a2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICBhdXRvJiBmb250ID0gdGV4dEJveC5saW5lRm9u
dCgpOworICAgIGF1dG8gYXNjZW50ID0gZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpOworICAg
IGF1dG8gZm9udFNpemUgPSBzdGQ6Om1pbihzdGQ6Om1heChmb250LnNpemUoKSwgMTAuMGYpLCA0
MC4wZik7CisgICAgYXV0byB5ID0gYXNjZW50ICsgMC4xMTAzNSAqIGZvbnRTaXplOworICAgIGF1
dG8gaGVpZ2h0ID0gMC4xMzI0NyAqIGZvbnRTaXplOworCisgICAgLy8gQXZvaWQgbWVhc3VyaW5n
IHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBvcHRp
bWl6YXRpb24uCisgICAgaWYgKG1hcmtlZFRleHQuc3RhcnRPZmZzZXQgfHwgbWFya2VkVGV4dC5l
bmRPZmZzZXQgIT0gdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcCh0ZXh0Qm94LmVuZCgp
KSkgeworICAgICAgICBUZXh0UnVuIHJ1biA9IHRleHRCb3guY3JlYXRlVGV4dFJ1bigpOworICAg
ICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KDAsIHksIDAsIGhlaWdo
dCk7CisgICAgICAgIHRleHRCb3gubGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChydW4sIHNlbGVjdGlvblJlY3QsIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQu
ZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdGlvblJlY3Q7CisgICAgfQorCisgICAg
cmV0dXJuIEZsb2F0UmVjdCgwLCB5LCB0ZXh0Qm94LmxvZ2ljYWxXaWR0aCgpLCBoZWlnaHQpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oCmluZGV4IDNm
N2Q4YzBkODlmZjFkNzc5ODAzYTVjNmYwNDJjZjU4YWU3NWFjMGMuLjUzZWM5NjQzMDZiYzkxMmJl
ZjAzYjRiMTA2NDQxNWIwYWMwNjM5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0Qm94UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5oCkBAIC0yOCw5ICsyOCwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEZvbnRDYXNjYWRlOworY2xhc3MgQ29sb3I7CiBjbGFzcyBMZWdhY3lJbmxpbmVUZXh0
Qm94OwotY2xhc3MgUmVuZGVyQ29tYmluZVRleHQ7CitzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxp
bmU7CitzdHJ1Y3QgTWFya2VkVGV4dDsKIHN0cnVjdCBQYWludEluZm87CiBzdHJ1Y3QgU3R5bGVk
TWFya2VkVGV4dDsKIApAQCAtNDMsMTAgKzQ0LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50
QmFja2dyb3VuZChjb25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7CiAgICAgdm9pZCBwYWludEZvcmVn
cm91bmQoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYpOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
KGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRSZWN0KTsK
KyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7CisgICAgdm9pZCBwYWludFBs
YXRmb3JtRG9jdW1lbnRNYXJrZXJzKCk7CisKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNhbGN1bGF0
ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94
Jik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBCYWNrZ3JvdW5kU3R5bGUgeyBOb3JtYWws
IFJvdW5kZWQgfTsKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZCh1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBDb2xvciYsIEJhY2tncm91bmRTdHlsZSA9IEJh
Y2tncm91bmRTdHlsZTo6Tm9ybWFsKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxp
bmUoY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICB2b2lkIHBhaW50UGxhdGZvcm1E
b2N1bWVudE1hcmtlcihjb25zdCBNYXJrZWRUZXh0Jik7CisgICAgCisgICAgc3RhdGljIEZsb2F0
UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0
Qm94JiwgY29uc3QgTWFya2VkVGV4dCYpOwogCiAgICAgY29uc3QgTGVnYWN5SW5saW5lVGV4dEJv
eCYgbV90ZXh0Qm94OwogICAgIFBhaW50SW5mbyYgbV9wYWludEluZm87Cg==
</data>
<flag name="commit-queue"
          id="461148"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437882</attachid>
            <date>2021-09-10 09:23:38 -0700</date>
            <delta_ts>2021-09-10 10:16:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-230155-20210910192337.patch</filename>
            <type>text/plain</type>
            <size>26598</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWIxNDJhZTg4Y2JjMzcx
NGU2ZDVjNWEzZTI5ZTk4ZWNjNTViODAwZi4uMzEyOTU1YzY0NzdmNDk5MGYxMjUzMzc5NmQ3NjY0
Zjc1MjJkOWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTA5LTEwICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgbW9yZSB0ZXh0
IHBhaW50aW5nIGZ1bmN0aW9ucyB0byBUZXh0Qm94UGFpbnRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMwMTU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tcG9zaXRpb24gdW5kZXJsaW5lcyBhbmQg
ZG9jdW1lbnQgbWFya2Vycy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5SW5saW5lRmxvd0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3Zl
cmZsb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6Y2FsY3Vs
YXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2Vy
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRl
eHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25VbmRlcmxpbmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9MZWdh
Y3lJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5k
ZXJsaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjptaXJyb3JSVExTZWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJr
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVVbmlvbk9m
QWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveFBhaW50
ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94UGFpbnRlcjo6Y2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9UZXh0Qm94UGFpbnRlci5oOgorCiAyMDIxLTA5LTEwICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWN0b3IgcGFpbnRpbmcgZnVuY3Rpb25zIGZy
b20gTGVnYWN5SW5saW5lVGV4dEJveCBpbnRvIGEgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5NDgyMjZhNzczM2ViNGM4
MDY3MDNlNmI1ZTdkOTA3ZDc3YTE4MTU4Li4zOTk1Njg4Y2VhNjZkZGY0MWY2Y2YxMDNlZjhjYjA1
MzU2M2ZiMmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zMjU1OCw3ICszMjU1OCw2IEBACiAJCQkJMzE4RUFENEQxRkE5MTM4
MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NDBERjU2MjZFQjUzRTAwMDRBRjA2QiAv
KiBUZXh0Qm94UGFpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAw
QUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3
MDVDOTI1NTI4RDM0MDAxRDBDOTQgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzI3MTAsNyArMzI3MDksNiBAQAog
CQkJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTVFRjUxMjUzQTQyNzkwMDZGRjRBNCAvKiBKU0Fic3Ry
YWN0UmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTQxRTZENzFCMjZFQTFBNDYwMEI3NjVENiAv
KiBSVENFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1
IC8qIEpTQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNjc3RTEzMjEzRTAz
QzYwMEEwOEMzNCAvKiBKU0FkZHJlc3NFcnJvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MDQ0
MDVBMUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBhcmFtcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNDU0Nyw2ICszNDU0NSw3IEBACiAJCQkJNDE4OEQ1NjMyNkM1NTFCMTAwNDg1OEM4IC8q
IFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MjAxN0Qx
NEQxQzAwNDIwQUExIC8qIFJUQ0RUTUZTZW5kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUw
OTIxMTdEMTREMUMwMDQyMEFBMSAvKiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0MUU2RDcxQjI2RUExQTQ2MDBCNzY1RDYgLyogUlRDRXJyb3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxQUI5Nzk1MjZFNzVBMkUwMDdDMEZFNiAvKiBSVENFcnJvckRldGFpbFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIzMTdEMTREMUMwMDQyMEFBMSAvKiBSVENJ
Y2VDYW5kaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTQwMTdEMTZFMUMwMDQyMEFB
MSAvKiBSVENJY2VDYW5kaWRhdGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM1MTc4
LDYgKzM1MTc3LDcgQEAKIAkJCQlDRTdCMkRCNTE1ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVy
bmF0aXZlV2l0aFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU0RENFNjE4ODEwNTFEMDAz
RUVEQkIgLyogVGV4dEF1dG9TaXppbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTM0MEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0
MERGNTYyNkVCNTNFMDAwNEFGMDZCIC8qIFRleHRCb3hQYWludGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ3RjVCMzI2NkNGNjNEMDAxMzNGMDAgLyogVGV4dEJveFNlbGVjdGFibGVSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcxNTFCRDgxMkYxNTU4RjAwNUEwRjY0IC8qIFRleHRDaGVj
a2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdEMDAxMjEzM0IwQUVCMDBENjY1OEMg
LyogVGV4dENoZWNraW5nLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVGbG93Qm94LmNwcAppbmRleCA4M2E4MTJmZjFkZTcxNDNlMTUw
NmI2MDZlMmY2MDc0YjI1NWI2NmY1Li5jMWY3MWIyNzUxY2I3NzFkNjY3NDg0ZjIwZjE4ZWM2ODhh
NjRjNzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5l
Rmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZUZs
b3dCb3guY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCb3hQ
YWludGVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxp
bmVzLmg+CiAKQEAgLTkzNiw3ICs5MzcsNyBAQCBpbmxpbmUgdm9pZCBMZWdhY3lJbmxpbmVGbG93
Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coTGVnYWN5SW5saW5lVGV4dEJveCYgdAogICAg
IAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IExheW91dFJlY3QobG9naWNhbExlZnRWaXN1
YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsUmlnaHRWaXN1YWxP
dmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxP
dmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7CiAKLSAgICBhdXRvIGRvY3VtZW50
TWFya2VyQm91bmRzID0gdGV4dEJveC5jYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJC
b3VuZHMoKTsKKyAgICBhdXRvIGRvY3VtZW50TWFya2VyQm91bmRzID0gVGV4dEJveFBhaW50ZXI6
OmNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5kcyh0ZXh0Qm94KTsKICAgICBk
b2N1bWVudE1hcmtlckJvdW5kcy5tb3ZlKHRleHRCb3gubG9naWNhbExlZnQoKSwgdGV4dEJveC5s
b2dpY2FsVG9wKCkpOwogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IHVuaW9uUmVjdChsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3csIExheW91dFJlY3QoZG9jdW1lbnRNYXJrZXJCb3VuZHMpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmlu
ZGV4IDFmMDNiYzQ3OTI4YjEzOWMzMDM2MmU2NTQ5N2U0NTNmMjlkZjJlODkuLjg5YWVjOGU0MjZj
NGQ4MTNiZTA3OTFiNmE4ZTEzZDNjOWY2NjhmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5jcHAKQEAgLTQ1OSw4ICs0NTksNiBAQCB2b2lk
IExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICB9CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKLQogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAKICAgICBsb2NhbFBhaW50
T2Zmc2V0Lm1vdmUoMCwgbGluZVN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyAwIDog
LWxvZ2ljYWxIZWlnaHQoKSk7CkBAIC00OTQsNiArNDkyLDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVU
ZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2YKICAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxl
Y3RGb3JIaWdobGlnaHRzKHJlbmRlcmVyKCksIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzZWxlY3Rh
YmxlUmFuZ2UsIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkJhY2tncm91bmQpKTsKIAogI2lmIEVO
QUJMRShURVhUX1NFTEVDVElPTikKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0g
cGFpbnRJbmZvLmNvbnRleHQoKTsKICAgICAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1
c3RvbVVuZGVybGluZXMgJiYgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7CiAgICAgICAg
ICAgICBhdXRvIHNlbGVjdGlvbk1hcmtlZFRleHQgPSBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVj
dGlvbkluQm94KCp0aGlzKTsKICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uTWFya2VkVGV4dC5p
c0VtcHR5KCkpCkBAIC01MTcsNyArNTE2LDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAg
ICAgICAgcmVuZGVyZXIoKS5wYWdlKCkuYWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QoJnJlbmRl
cmVyKCksIEludFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSwgbG9naWNhbFdpZHRo
KCksIGxvZ2ljYWxIZWlnaHQoKSkpOwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlOjpGb3JlZ3JvdW5kKQotICAgICAgICBwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJz
KGNvbnRleHQsIGJveE9yaWdpbik7CisgICAgICAgIHRleHRCb3hQYWludGVyLnBhaW50UGxhdGZv
cm1Eb2N1bWVudE1hcmtlcnMoKTsKIAogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3Vu
ZCwgaW5jbHVkaW5nIHRleHQgYW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5l
IChpbiBxdWlya3MgbW9kZSBvbmx5KS4KICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uRm9y
ZWdyb3VuZCA9IGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1c3RvbVVuZGVybGluZXM7CkBAIC02MDgs
NyArNjA3LDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKIAogICAgIC8vIDMuIFBhaW50IGZh
bmN5IGRlY29yYXRpb25zLCBpbmNsdWRpbmcgY29tcG9zaXRpb24gdW5kZXJsaW5lcyBhbmQgcGxh
dGZvcm0tc3BlY2lmaWMgdW5kZXJsaW5lcyBmb3Igc3BlbGxpbmcgZXJyb3JzLCBncmFtbWFyIGVy
cm9ycywgZXQgY2V0ZXJhLgogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6
Rm9yZWdyb3VuZCAmJiB1c2VDdXN0b21VbmRlcmxpbmVzKQotICAgICAgICBwYWludENvbXBvc2l0
aW9uVW5kZXJsaW5lcyhwYWludEluZm8sIGJveE9yaWdpbik7ICAgIAorICAgICAgICB0ZXh0Qm94
UGFpbnRlci5wYWludENvbXBvc2l0aW9uVW5kZXJsaW5lcygpOwogfQogCiBUZXh0Qm94U2VsZWN0
YWJsZVJhbmdlIExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGFibGVSYW5nZSgpIGNvbnN0CkBA
IC02NTEsODAgKzY1MCw2IEBAIGJvb2wgTGVnYWN5SW5saW5lVGV4dEJveDo6aGFzTWFya2Vycygp
IGNvbnN0CiAgICAgcmV0dXJuIE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMo
cmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRl
Y29yYXRpb24pLnNpemUoKTsKIH0KIAotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludFBs
YXRmb3JtRG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luKQotewotICAgIC8vIFRoaXMgbXVzdCBtYXRjaCBjYWxjdWxhdGVV
bmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoKS4KLSAgICBhdXRvIG1hcmtlZFRleHRzID0g
TWFya2VkVGV4dDo6Y29sbGVjdEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJlcigpLCBzZWxlY3Rh
YmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbik7Ci0gICAgZm9y
IChhdXRvJiBtYXJrZWRUZXh0IDogTWFya2VkVGV4dDo6c3ViZGl2aWRlKG1hcmtlZFRleHRzLCBN
YXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9zdCkpCi0gICAgICAgIHBhaW50UGxh
dGZvcm1Eb2N1bWVudE1hcmtlcihjb250ZXh0LCBib3hPcmlnaW4sIG1hcmtlZFRleHQpOwotfQot
Ci1GbG9hdFJlY3QgTGVnYWN5SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlVW5pb25PZkFsbERvY3Vt
ZW50TWFya2VyQm91bmRzKCkgY29uc3QKLXsKLSAgICAvLyBUaGlzIG11c3QgbWF0Y2ggcGFpbnRQ
bGF0Zm9ybURvY3VtZW50TWFya2VycygpLgotICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAgYXV0
byBtYXJrZWRUZXh0cyA9IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMocmVu
ZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29y
YXRpb24pOwotICAgIGZvciAoYXV0byYgbWFya2VkVGV4dCA6IE1hcmtlZFRleHQ6OnN1YmRpdmlk
ZShtYXJrZWRUZXh0cywgTWFya2VkVGV4dDo6T3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpKQot
ICAgICAgICByZXN1bHQgPSB1bmlvblJlY3QocmVzdWx0LCBjYWxjdWxhdGVEb2N1bWVudE1hcmtl
ckJvdW5kcyhtYXJrZWRUZXh0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0
IExlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0
IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpIGNvbnN0Ci17Ci0gICAgYXV0byYgZm9udCA9IGxpbmVG
b250KCk7Ci0gICAgYXV0byBhc2NlbnQgPSBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0g
ICAgYXV0byBmb250U2l6ZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KGZvbnQuc2l6ZSgpLCAxMC4wZiks
IDQwLjBmKTsKLSAgICBhdXRvIHkgPSBhc2NlbnQgKyAwLjExMDM1ICogZm9udFNpemU7Ci0gICAg
YXV0byBoZWlnaHQgPSAwLjEzMjQ3ICogZm9udFNpemU7Ci0KLSAgICAvLyBBdm9pZCBtZWFzdXJp
bmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9w
dGltaXphdGlvbi4KLSAgICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0
LmVuZE9mZnNldCAhPSBzZWxlY3RhYmxlUmFuZ2UoKS5jbGFtcChlbmQoKSkpIHsKLSAgICAgICAg
VGV4dFJ1biBydW4gPSBjcmVhdGVUZXh0UnVuKCk7Ci0gICAgICAgIExheW91dFJlY3Qgc2VsZWN0
aW9uUmVjdCA9IExheW91dFJlY3QoMCwgeSwgMCwgaGVpZ2h0KTsKLSAgICAgICAgbGluZUZvbnQo
KS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIG1hcmtlZFRl
eHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHNl
bGVjdGlvblJlY3Q7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCB5LCBsb2dpY2Fs
V2lkdGgoKSwgaGVpZ2h0KTsKLX0KLQotdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludFBs
YXRmb3JtRG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCi17Ci0gICAg
Ly8gTmV2ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQotICAgIGlm
IChyZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gYm91bmRzID0gY2FsY3VsYXRlRG9jdW1lbnRNYXJrZXJCb3VuZHMobWFya2Vk
VGV4dCk7Ci0KLSAgICBhdXRvIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlID0gWyZdKCkgLT4g
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgICAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlID0gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotICAgICAgICBzd2l0Y2gg
KG1hcmtlZFRleHQudHlwZSkgewotICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJy
b3I6Ci0gICAgICAgICAgICByZXR1cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
U3BlbGxpbmcsIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH07Ci0gICAgICAgIGNhc2UgTWFya2Vk
VGV4dDo6R3JhbW1hckVycm9yOgotICAgICAgICAgICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH07Ci0gICAg
ICAgIGNhc2UgTWFya2VkVGV4dDo6Q29ycmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVybiB7IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9OwotICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlczoKLSAgICAgICAgICAgIHJldHVybiB7IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIHNob3VsZFVzZURhcmtBcHBlYXJh
bmNlIH07Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgY2FzZSBNYXJrZWRUZXh0
OjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOgotICAgICAgICAgICAgLy8gRklYTUU6
IFJlbmFtZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlcyBhbmQgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1n
dWFyZC4KLSAgICAgICAgICAgIHJldHVybiB7IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBzaG91bGRVc2VE
YXJrQXBwZWFyYW5jZSB9OwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiB7IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBib3VuZHMubW92ZUJ5KGJveE9yaWdpbik7Ci0gICAgY29u
dGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGJvdW5kcywgbGluZVN0eWxlRm9yTWFya2Vk
VGV4dFR5cGUoKSk7Ci19Ci0KIEZsb2F0UG9pbnQgTGVnYWN5SW5saW5lVGV4dEJveDo6dGV4dE9y
aWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkgY29uc3QKIHsKICAgICBG
bG9hdFBvaW50IHRleHRPcmlnaW4geyBib3hSZWN0LngoKSwgYm94UmVjdC55KCkgKyBsaW5lRm9u
dCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgfTsKQEAgLTczOSw4NSArNjY0LDYgQEAgRmxvYXRQ
b2ludCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0KQogICAgIHJldHVybiB0ZXh0T3JpZ2luOwogfQogCi12b2lkIExlZ2Fj
eUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmVzKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pIGNvbnN0Ci17Ci0gICAgaWYgKG1f
dHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
ciAoYXV0byYgdW5kZXJsaW5lIDogcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmN1c3RvbUNv
bXBvc2l0aW9uVW5kZXJsaW5lcygpKSB7Ci0gICAgICAgIGlmICh1bmRlcmxpbmUuZW5kT2Zmc2V0
IDw9IG1fc3RhcnQpIHsKLSAgICAgICAgICAgIC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJl
Zm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdodCBiZSBhbiB1bmRlcmxpbmUgdGhhdCBzaXRzCi0gICAg
ICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IHJ1biB3ZSBkcmF3LCBvciB1bmRlcmxpbmVzIHRo
YXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVkCi0gICAgICAgICAgICAvLyBkdWUgdG8gdHJ1
bmNhdGlvbi4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHVuZGVybGluZS5zdGFydE9mZnNldCA+PSBlbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOyAvLyBV
bmRlcmxpbmUgaXMgY29tcGxldGVseSBhZnRlciB0aGlzIHJ1biwgYmFpbC4gQSBsYXRlciBydW4g
d2lsbCBwYWludCBpdC4KLQotICAgICAgICAvLyBVbmRlcmxpbmUgaW50ZXJzZWN0cyB0aGlzIHJ1
bi4gUGFpbnQgaXQuCi0gICAgICAgIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUocGFpbnRJbmZv
LCBib3hPcmlnaW4sIHVuZGVybGluZSk7Ci0KLSAgICAgICAgaWYgKHVuZGVybGluZS5lbmRPZmZz
ZXQgPiBlbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOyAvLyBVbmRlcmxpbmUgYWxzbyBydW5zIGlu
dG8gdGhlIG5leHQgcnVuLiBCYWlsIG5vdywgbm8gbW9yZSBtYXJrZXIgYWR2YW5jZW1lbnQuCi0g
ICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWlycm9yUlRMU2VnbWVudChmbG9hdCBsb2dp
Y2FsV2lkdGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBmbG9hdCYgc3RhcnQsIGZsb2F0IHdp
ZHRoKQotewotICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAg
ICByZXR1cm47Ci0gICAgc3RhcnQgPSBsb2dpY2FsV2lkdGggLSB3aWR0aCAtIHN0YXJ0OwotfQot
Ci12b2lkIExlZ2FjeUlubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29t
cG9zaXRpb25VbmRlcmxpbmUmIHVuZGVybGluZSkgY29uc3QKLXsKLSAgICBpZiAobV90cnVuY2F0
aW9uID09IGNGdWxsVHJ1bmNhdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZsb2F0
IHN0YXJ0ID0gMDsgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCByZWxhdGl2ZSB0byB0eAotICAg
IGZsb2F0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdwot
ICAgIGJvb2wgdXNlV2hvbGVXaWR0aCA9IHRydWU7Ci0gICAgdW5zaWduZWQgcGFpbnRTdGFydCA9
IG1fc3RhcnQ7Ci0gICAgdW5zaWduZWQgcGFpbnRFbmQgPSBlbmQoKTsKLSAgICBpZiAocGFpbnRT
dGFydCA8PSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgcGFpbnRTdGFydCA9IHVu
ZGVybGluZS5zdGFydE9mZnNldDsKLSAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwotICAg
ICAgICBzdGFydCA9IHJlbmRlcmVyKCkud2lkdGgobV9zdGFydCwgcGFpbnRTdGFydCAtIG1fc3Rh
cnQsIHRleHRQb3MoKSwgaXNGaXJzdExpbmUoKSk7Ci0gICAgfQotICAgIGlmIChwYWludEVuZCAh
PSB1bmRlcmxpbmUuZW5kT2Zmc2V0KSB7Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFp
bnRFbmQsICh1bnNpZ25lZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKLSAgICAgICAgdXNlV2hvbGVX
aWR0aCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRp
b24pIHsKLSAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKW1f
c3RhcnQgKyBtX3RydW5jYXRpb24pOwotICAgICAgICB1c2VXaG9sZVdpZHRoID0gZmFsc2U7Ci0g
ICAgfQotICAgIGlmICghdXNlV2hvbGVXaWR0aCkgewotICAgICAgICB3aWR0aCA9IHJlbmRlcmVy
KCkud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCB0ZXh0UG9zKCkgKyBz
dGFydCwgaXNGaXJzdExpbmUoKSk7Ci0gICAgICAgIG1pcnJvclJUTFNlZ21lbnQobG9naWNhbFdp
ZHRoKCksIGRpcmVjdGlvbigpLCBzdGFydCwgd2lkdGgpOwotICAgIH0KLQotICAgIC8vIFRoaWNr
IG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDJweCB0aGljayBhcyBsb25nIGFzIHRoZXJlIGlz
IHJvb20gZm9yIHRoZSAycHggbGluZSB1bmRlciB0aGUgYmFzZWxpbmUuCi0gICAgLy8gQWxsIG90
aGVyIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMgYXJlIDFweCB0aGljay4KLSAgICAvLyBJZiB0aGVy
ZSdzIG5vdCBlbm91Z2ggc3BhY2UgdGhlIHVuZGVybGluZSB3aWxsIHRvdWNoIG9yIG92ZXJsYXAg
Y2hhcmFjdGVycy4KLSAgICBpbnQgbGluZVRoaWNrbmVzcyA9IDE7Ci0gICAgaW50IGJhc2VsaW5l
ID0gbGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICBpZiAodW5kZXJsaW5l
LnRoaWNrICYmIGxvZ2ljYWxIZWlnaHQoKSAtIGJhc2VsaW5lID49IDIpCi0gICAgICAgIGxpbmVU
aGlja25lc3MgPSAyOwotCi0gICAgLy8gV2UgbmVlZCB0byBoYXZlIHNvbWUgc3BhY2UgYmV0d2Vl
biB1bmRlcmxpbmVzIG9mIHN1YnNlcXVlbnQgY2xhdXNlcywgYmVjYXVzZSBzb21lIGlucHV0IG1l
dGhvZHMgZG8gbm90IHVzZSBkaWZmZXJlbnQgdW5kZXJsaW5lIHN0eWxlcyBmb3IgdGhvc2UuCi0g
ICAgLy8gV2UgbWFrZSBlYWNoIGxpbmUgc2hvcnRlciwgd2hpY2ggaGFzIGEgaGFybWxlc3Mgc2lk
ZSBlZmZlY3Qgb2Ygc2hvcnRlbmluZyB0aGUgZmlyc3QgYW5kIGxhc3QgY2xhdXNlcywgdG9vLgot
ICAgIHN0YXJ0ICs9IDE7Ci0gICAgd2lkdGggLT0gMjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgQ29sb3IgdW5kZXJsaW5lQ29sb3Ig
PSB1bmRlcmxpbmUuY29tcG9zaXRpb25VbmRlcmxpbmVDb2xvciA9PSBDb21wb3NpdGlvblVuZGVy
bGluZUNvbG9yOjpUZXh0Q29sb3IgPyByZW5kZXJlcigpLnN0eWxlKCkudmlzaXRlZERlcGVuZGVu
dENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcikgOiBy
ZW5kZXJlcigpLnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIodW5kZXJsaW5lLmNv
bG9yKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHVuZGVybGluZUNvbG9yKTsKLSAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhsaW5lVGhpY2tuZXNzKTsKLSAgICBjb250ZXh0LmRy
YXdMaW5lRm9yVGV4dChGbG9hdFJlY3QoYm94T3JpZ2luLngoKSArIHN0YXJ0LCBib3hPcmlnaW4u
eSgpICsgbG9naWNhbEhlaWdodCgpIC0gbGluZVRoaWNrbmVzcywgd2lkdGgsIGxpbmVUaGlja25l
c3MpLCByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSk7Ci19Ci0KIGludCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpjYXJldE1pbk9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3Rh
cnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4
dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guaApp
bmRleCAxMzBiMjE5NjVkYjc1N2UzMWEzNjVhZWUxZTVhNWViMmU0M2NiOTA4Li42NTIyYWI0MTJk
MGM1YmM0NWVlNmUzMjAxZDMyNjM2MjhmYjU3YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKQEAgLTIzLDIwICsyMywxMyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJMZWdhY3lJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJNYXJrZWRU
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJDb21iaW5lVGV4dDsKLWNsYXNzIFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXI7Ci1jbGFzcyBUZXh0UGFpbnRlcjsKLXN0cnVjdCBDb21wb3Np
dGlvblVuZGVybGluZTsKLXN0cnVjdCBNYXJrZWRUZXh0Owotc3RydWN0IFN0eWxlZE1hcmtlZFRl
eHQ7CiBzdHJ1Y3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZTsKLXN0cnVjdCBUZXh0UGFpbnRTdHls
ZTsKIAogY29uc3QgdW5zaWduZWQgc2hvcnQgY05vVHJ1bmNhdGlvbiA9IFVTSFJUX01BWDsKIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGNGdWxsVHJ1bmNhdGlvbiA9IFVTSFJUX01BWCAtIDE7CkBAIC0x
NTksMjAgKzE1MiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29u
c3Q7Ci0gICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVVuaW9uT2ZBbGxEb2N1bWVudE1hcmtlckJvdW5k
cygpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhj
b25zdCBNYXJrZWRUZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFRl
eHRCb3hQYWludGVyOwogCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1h
cmtlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IE1hcmtlZFRleHQmKTsKLSAgICB2b2lkIHBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKTsKLQotICAgIHZvaWQg
cGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYg
Ym94T3JpZ2luKSBjb25zdDsKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVu
ZGVybGluZSYpIGNvbnN0OwotCiAgICAgY29uc3QgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVk
VGV4dCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEJveFBhaW50ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmNwcAppbmRleCA0YTM2
YjcyNzNiZWY2MDYxN2M5YzQ5YTM3MzExNTQ3ZDRhODkyZTE4Li4yNWIwNDc4OWUzMDkyYmExYTAw
NDZlMWYxYzUyNmEzODBhZTI5ODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEJveFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
Qm94UGFpbnRlci5jcHAKQEAgLTIyNyw0ICsyMjcsMTU1IEBAIHZvaWQgVGV4dEJveFBhaW50ZXI6
OnBhaW50RGVjb3JhdGlvbihjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25z
dCBGCiAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ291bnRl
cmNsb2Nrd2lzZSkpOwogfQogCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludENvbXBvc2l0aW9u
VW5kZXJsaW5lcygpCit7CisgICAgaWYgKG1fdGV4dEJveC50cnVuY2F0aW9uKCkgPT0gY0Z1bGxU
cnVuY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIHVuZGVybGluZSA6
IG1fdGV4dEJveC5yZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY3VzdG9tQ29tcG9zaXRpb25V
bmRlcmxpbmVzKCkpIHsKKyAgICAgICAgaWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPD0gbV90ZXh0
Qm94LnN0YXJ0KCkpIHsKKyAgICAgICAgICAgIC8vIFVuZGVybGluZSBpcyBjb21wbGV0ZWx5IGJl
Zm9yZSB0aGlzIHJ1bi4gVGhpcyBtaWdodCBiZSBhbiB1bmRlcmxpbmUgdGhhdCBzaXRzCisgICAg
ICAgICAgICAvLyBiZWZvcmUgdGhlIGZpcnN0IHJ1biB3ZSBkcmF3LCBvciB1bmRlcmxpbmVzIHRo
YXQgd2VyZSB3aXRoaW4gcnVucyB3ZSBza2lwcGVkCisgICAgICAgICAgICAvLyBkdWUgdG8gdHJ1
bmNhdGlvbi4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHVuZGVybGluZS5zdGFydE9mZnNldCA+PSBtX3RleHRCb3guZW5kKCkpCisgICAgICAgICAgICBi
cmVhazsgLy8gVW5kZXJsaW5lIGlzIGNvbXBsZXRlbHkgYWZ0ZXIgdGhpcyBydW4sIGJhaWwuIEEg
bGF0ZXIgcnVuIHdpbGwgcGFpbnQgaXQuCisKKyAgICAgICAgLy8gVW5kZXJsaW5lIGludGVyc2Vj
dHMgdGhpcyBydW4uIFBhaW50IGl0LgorICAgICAgICBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5l
KHVuZGVybGluZSk7CisKKyAgICAgICAgaWYgKHVuZGVybGluZS5lbmRPZmZzZXQgPiBtX3RleHRC
b3guZW5kKCkpCisgICAgICAgICAgICBicmVhazsgLy8gVW5kZXJsaW5lIGFsc28gcnVucyBpbnRv
IHRoZSBuZXh0IHJ1bi4gQmFpbCBub3csIG5vIG1vcmUgbWFya2VyIGFkdmFuY2VtZW50LgorICAg
IH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIG1pcnJvclJUTFNlZ21lbnQoZmxvYXQgbG9naWNh
bFdpZHRoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgZmxvYXQmIHN0YXJ0LCBmbG9hdCB3aWR0
aCkKK3sKKyAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAg
cmV0dXJuOworICAgIHN0YXJ0ID0gbG9naWNhbFdpZHRoIC0gd2lkdGggLSBzdGFydDsKK30KKwor
dm9pZCBUZXh0Qm94UGFpbnRlcjo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV90
ZXh0Qm94LnJlbmRlcmVyKCk7CisKKyAgICBmbG9hdCBzdGFydCA9IDA7IC8vIHN0YXJ0IG9mIGxp
bmUgdG8gZHJhdywgcmVsYXRpdmUgdG8gdHgKKyAgICBmbG9hdCB3aWR0aCA9IG1fdGV4dEJveC5s
b2dpY2FsV2lkdGgoKTsgLy8gaG93IG11Y2ggbGluZSB0byBkcmF3CisgICAgYm9vbCB1c2VXaG9s
ZVdpZHRoID0gdHJ1ZTsKKyAgICB1bnNpZ25lZCBwYWludFN0YXJ0ID0gbV90ZXh0Qm94LnN0YXJ0
KCk7CisgICAgdW5zaWduZWQgcGFpbnRFbmQgPSBtX3RleHRCb3guZW5kKCk7CisgICAgaWYgKHBh
aW50U3RhcnQgPD0gdW5kZXJsaW5lLnN0YXJ0T2Zmc2V0KSB7CisgICAgICAgIHBhaW50U3RhcnQg
PSB1bmRlcmxpbmUuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsK
KyAgICAgICAgc3RhcnQgPSByZW5kZXJlci53aWR0aChtX3RleHRCb3guc3RhcnQoKSwgcGFpbnRT
dGFydCAtIG1fdGV4dEJveC5zdGFydCgpLCBtX3RleHRCb3gudGV4dFBvcygpLCBtX3RleHRCb3gu
aXNGaXJzdExpbmUoKSk7CisgICAgfQorICAgIGlmIChwYWludEVuZCAhPSB1bmRlcmxpbmUuZW5k
T2Zmc2V0KSB7CisgICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNpZ25l
ZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKKyAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwor
ICAgIH0KKyAgICBpZiAobV90ZXh0Qm94LnRydW5jYXRpb24oKSAhPSBjTm9UcnVuY2F0aW9uKSB7
CisgICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsIG1fdGV4dEJveC5zdGFydCgp
ICsgbV90ZXh0Qm94LnRydW5jYXRpb24oKSk7CisgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKCF1c2VXaG9sZVdpZHRoKSB7CisgICAgICAgIHdpZHRoID0gcmVu
ZGVyZXIud2lkdGgocGFpbnRTdGFydCwgcGFpbnRFbmQgLSBwYWludFN0YXJ0LCBtX3RleHRCb3gu
dGV4dFBvcygpICsgc3RhcnQsIG1fdGV4dEJveC5pc0ZpcnN0TGluZSgpKTsKKyAgICAgICAgbWly
cm9yUlRMU2VnbWVudChtX3RleHRCb3gubG9naWNhbFdpZHRoKCksIG1fdGV4dEJveC5kaXJlY3Rp
b24oKSwgc3RhcnQsIHdpZHRoKTsKKyAgICB9CisKKyAgICAvLyBUaGljayBtYXJrZWQgdGV4dCB1
bmRlcmxpbmVzIGFyZSAycHggdGhpY2sgYXMgbG9uZyBhcyB0aGVyZSBpcyByb29tIGZvciB0aGUg
MnB4IGxpbmUgdW5kZXIgdGhlIGJhc2VsaW5lLgorICAgIC8vIEFsbCBvdGhlciBtYXJrZWQgdGV4
dCB1bmRlcmxpbmVzIGFyZSAxcHggdGhpY2suCisgICAgLy8gSWYgdGhlcmUncyBub3QgZW5vdWdo
IHNwYWNlIHRoZSB1bmRlcmxpbmUgd2lsbCB0b3VjaCBvciBvdmVybGFwIGNoYXJhY3RlcnMuCisg
ICAgaW50IGxpbmVUaGlja25lc3MgPSAxOworICAgIGludCBiYXNlbGluZSA9IG1fdGV4dEJveC5s
aW5lU3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOworICAgIGlmICh1bmRlcmxpbmUudGhp
Y2sgJiYgbV90ZXh0Qm94LmxvZ2ljYWxIZWlnaHQoKSAtIGJhc2VsaW5lID49IDIpCisgICAgICAg
IGxpbmVUaGlja25lc3MgPSAyOworCisgICAgLy8gV2UgbmVlZCB0byBoYXZlIHNvbWUgc3BhY2Ug
YmV0d2VlbiB1bmRlcmxpbmVzIG9mIHN1YnNlcXVlbnQgY2xhdXNlcywgYmVjYXVzZSBzb21lIGlu
cHV0IG1ldGhvZHMgZG8gbm90IHVzZSBkaWZmZXJlbnQgdW5kZXJsaW5lIHN0eWxlcyBmb3IgdGhv
c2UuCisgICAgLy8gV2UgbWFrZSBlYWNoIGxpbmUgc2hvcnRlciwgd2hpY2ggaGFzIGEgaGFybWxl
c3Mgc2lkZSBlZmZlY3Qgb2Ygc2hvcnRlbmluZyB0aGUgZmlyc3QgYW5kIGxhc3QgY2xhdXNlcywg
dG9vLgorICAgIHN0YXJ0ICs9IDE7CisgICAgd2lkdGggLT0gMjsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCA9IG1fcGFpbnRJbmZvLmNvbnRleHQoKTsKKyAgICBDb2xvciB1bmRlcmxp
bmVDb2xvciA9IHVuZGVybGluZS5jb21wb3NpdGlvblVuZGVybGluZUNvbG9yID09IENvbXBvc2l0
aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xvciA/IHJlbmRlcmVyLnN0eWxlKCkudmlzaXRlZERl
cGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xv
cikgOiByZW5kZXJlci5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHVuZGVybGlu
ZS5jb2xvcik7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmRlcmxpbmVDb2xvcik7Cisg
ICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobGluZVRoaWNrbmVzcyk7CisgICAgY29udGV4
dC5kcmF3TGluZUZvclRleHQoRmxvYXRSZWN0KG1fYm94UmVjdC54KCkgKyBzdGFydCwgbV9ib3hS
ZWN0LnkoKSArIG1fdGV4dEJveC5sb2dpY2FsSGVpZ2h0KCkgLSBsaW5lVGhpY2tuZXNzLCB3aWR0
aCwgbGluZVRoaWNrbmVzcyksIHJlbmRlcmVyLmRvY3VtZW50KCkucHJpbnRpbmcoKSk7Cit9CisK
K3ZvaWQgVGV4dEJveFBhaW50ZXI6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcnMoKQorewor
ICAgIGF1dG8gbWFya2VkVGV4dHMgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJr
ZXJzKG1fdGV4dEJveC5yZW5kZXJlcigpLCBtX3RleHRCb3guc2VsZWN0YWJsZVJhbmdlKCksIE1h
cmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pOworICAgIGZvciAoYXV0byYgbWFya2Vk
VGV4dCA6IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cywgTWFya2VkVGV4dDo6T3Zl
cmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpKQorICAgICAgICBwYWludFBsYXRmb3JtRG9jdW1lbnRN
YXJrZXIobWFya2VkVGV4dCk7Cit9CisKK0Zsb2F0UmVjdCBUZXh0Qm94UGFpbnRlcjo6Y2FsY3Vs
YXRlVW5pb25PZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRC
b3gmIHRleHRCb3gpCit7CisgICAgLy8gVGhpcyBtdXN0IG1hdGNoIHBhaW50UGxhdGZvcm1Eb2N1
bWVudE1hcmtlcnMoKS4KKyAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgIGF1dG8gbWFya2VkVGV4
dHMgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKHRleHRCb3gucmVuZGVy
ZXIoKSwgdGV4dEJveC5zZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6
RGVjb3JhdGlvbik7CisgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0IDogTWFya2VkVGV4dDo6c3Vi
ZGl2aWRlKG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9z
dCkpCisgICAgICAgIHJlc3VsdCA9IHVuaW9uUmVjdChyZXN1bHQsIGNhbGN1bGF0ZURvY3VtZW50
TWFya2VyQm91bmRzKHRleHRCb3gsIG1hcmtlZFRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIFRleHRCb3hQYWludGVyOjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoY29u
c3QgTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKK3sKKyAgICAvLyBOZXZlciBwcmludCBzcGVsbGlu
Zy9ncmFtbWFyIG1hcmtlcnMgKDUzMjc4ODcpCisgICAgaWYgKG1fdGV4dEJveC5yZW5kZXJlcigp
LmRvY3VtZW50KCkucHJpbnRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fdGV4
dEJveC50cnVuY2F0aW9uKCkgPT0gY0Z1bGxUcnVuY2F0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIGJvdW5kcyA9IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKG1fdGV4dEJv
eCwgbWFya2VkVGV4dCk7CisKKyAgICBhdXRvIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlID0g
WyZdKCkgLT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgeworICAgICAgICBib29sIHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlID0gbV90ZXh0Qm94LnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2Uo
KTsKKyAgICAgICAgc3dpdGNoIChtYXJrZWRUZXh0LnR5cGUpIHsKKyAgICAgICAgY2FzZSBNYXJr
ZWRUZXh0OjpTcGVsbGluZ0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIHsgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nLCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9Owor
ICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKKyAgICAgICAgICAgIHJldHVy
biB7IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyLCBzaG91bGRVc2VEYXJr
QXBwZWFyYW5jZSB9OworICAgICAgICBjYXNlIE1hcmtlZFRleHQ6OkNvcnJlY3Rpb246CisgICAg
ICAgICAgICByZXR1cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKKyAgICAgICAgY2Fz
ZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CisgICAgICAgICAgICByZXR1cm4g
eyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9OworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
ICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBSZW5hbWUgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OlRleHRD
aGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgYW5kIHJlbW92ZSB0aGUgUExB
VEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCisgICAgICAgICAgICByZXR1cm4geyBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlcywgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfTsKKyNlbmRpZgorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4geyBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsIHNob3VsZFVzZURh
cmtBcHBlYXJhbmNlIH07CisgICAgICAgIH0KKyAgICB9OworCisgICAgYm91bmRzLm1vdmVCeSht
X2JveFJlY3QubG9jYXRpb24oKSk7CisgICAgbV9wYWludEluZm8uY29udGV4dCgpLmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoYm91bmRzLCBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0VHlwZSgpKTsK
K30KKworRmxvYXRSZWN0IFRleHRCb3hQYWludGVyOjpjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJv
dW5kcyhjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94LCBjb25zdCBNYXJrZWRUZXh0
JiBtYXJrZWRUZXh0KQoreworICAgIGF1dG8mIGZvbnQgPSB0ZXh0Qm94LmxpbmVGb250KCk7Cisg
ICAgYXV0byBhc2NlbnQgPSBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CisgICAgYXV0byBm
b250U2l6ZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KGZvbnQuc2l6ZSgpLCAxMC4wZiksIDQwLjBmKTsK
KyAgICBhdXRvIHkgPSBhc2NlbnQgKyAwLjExMDM1ICogZm9udFNpemU7CisgICAgYXV0byBoZWln
aHQgPSAwLjEzMjQ3ICogZm9udFNpemU7CisKKyAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRl
eHQgd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlv
bi4KKyAgICBpZiAobWFya2VkVGV4dC5zdGFydE9mZnNldCB8fCBtYXJrZWRUZXh0LmVuZE9mZnNl
dCAhPSB0ZXh0Qm94LnNlbGVjdGFibGVSYW5nZSgpLmNsYW1wKHRleHRCb3guZW5kKCkpKSB7Cisg
ICAgICAgIFRleHRSdW4gcnVuID0gdGV4dEJveC5jcmVhdGVUZXh0UnVuKCk7CisgICAgICAgIExh
eW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoMCwgeSwgMCwgaGVpZ2h0KTsKKyAg
ICAgICAgdGV4dEJveC5saW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwg
c2VsZWN0aW9uUmVjdCwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZz
ZXQpOworICAgICAgICByZXR1cm4gc2VsZWN0aW9uUmVjdDsKKyAgICB9CisKKyAgICByZXR1cm4g
RmxvYXRSZWN0KDAsIHksIHRleHRCb3gubG9naWNhbFdpZHRoKCksIGhlaWdodCk7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0Qm94UGFpbnRlci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWludGVyLmgKaW5kZXggM2Y3ZDhjMGQ4
OWZmMWQ3Nzk4MDNhNWM2ZjA0MmNmNThhZTc1YWMwYy4uNTNlYzk2NDMwNmJjOTEyYmVmMDNiNGIx
MDY0NDE1YjBhYzA2MzlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRCb3hQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRCb3hQYWlu
dGVyLmgKQEAgLTI4LDkgKzI4LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
Rm9udENhc2NhZGU7CitjbGFzcyBDb2xvcjsKIGNsYXNzIExlZ2FjeUlubGluZVRleHRCb3g7Ci1j
bGFzcyBSZW5kZXJDb21iaW5lVGV4dDsKK3N0cnVjdCBDb21wb3NpdGlvblVuZGVybGluZTsKK3N0
cnVjdCBNYXJrZWRUZXh0Owogc3RydWN0IFBhaW50SW5mbzsKIHN0cnVjdCBTdHlsZWRNYXJrZWRU
ZXh0OwogCkBAIC00MywxMCArNDQsMTggQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCYWNrZ3Jv
dW5kKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZChj
b25zdCBTdHlsZWRNYXJrZWRUZXh0Jik7CiAgICAgdm9pZCBwYWludERlY29yYXRpb24oY29uc3Qg
U3R5bGVkTWFya2VkVGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcE91dFJlY3QpOworICAgIHZv
aWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZXMoKTsKKyAgICB2b2lkIHBhaW50UGxhdGZvcm1E
b2N1bWVudE1hcmtlcnMoKTsKKworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2FsY3VsYXRlVW5pb25P
ZkFsbERvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmKTsKIAog
cHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIEJhY2tncm91bmRTdHlsZSB7IE5vcm1hbCwgUm91bmRl
ZCB9OwogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsIGNvbnN0IENvbG9yJiwgQmFja2dyb3VuZFN0eWxlID0gQmFja2dyb3Vu
ZFN0eWxlOjpOb3JtYWwpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShjb25z
dCBDb21wb3NpdGlvblVuZGVybGluZSYpOworICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50
TWFya2VyKGNvbnN0IE1hcmtlZFRleHQmKTsKKyAgICAKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNh
bGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IExlZ2FjeUlubGluZVRleHRCb3gmLCBj
b25zdCBNYXJrZWRUZXh0Jik7CiAKICAgICBjb25zdCBMZWdhY3lJbmxpbmVUZXh0Qm94JiBtX3Rl
eHRCb3g7CiAgICAgUGFpbnRJbmZvJiBtX3BhaW50SW5mbzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>