<?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>122433</bug_id>
          
          <creation_ts>2013-10-06 18:03:26 -0700</creation_ts>
          <short_desc>Factor text paint style computation out from InlineTextBox</short_desc>
          <delta_ts>2013-10-06 19:16:06 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936905</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 18:03:26 -0700</bug_when>
    <thetext>for the future</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936906</commentid>
    <comment_count>1</comment_count>
      <attachid>213547</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 18:06:08 -0700</bug_when>
    <thetext>Created attachment 213547
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936907</commentid>
    <comment_count>2</comment_count>
      <attachid>213547</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-06 18:13:18 -0700</bug_when>
    <thetext>Comment on attachment 213547
patch

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

&gt; Source/WebCore/rendering/TextPaintStyle.cpp:38
&gt; +TextPaintStyle::TextPaintStyle()

I would zero-initialize the stroke width here for good measure.

&gt; Source/WebCore/rendering/TextPaintStyle.h:54
&gt; +void updateGraphicsContext(GraphicsContext*, const TextPaintStyle&amp;, StrokeColorType = UseNormalStrokeColor);

This should take a GraphicsContext&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936909</commentid>
    <comment_count>3</comment_count>
      <attachid>213547</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-06 18:25:24 -0700</bug_when>
    <thetext>Comment on attachment 213547
patch

Attachment 213547 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3513054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936911</commentid>
    <comment_count>4</comment_count>
      <attachid>213547</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-06 18:33:31 -0700</bug_when>
    <thetext>Comment on attachment 213547
patch

Attachment 213547 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/3368046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936913</commentid>
    <comment_count>5</comment_count>
      <attachid>213547</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-06 18:38:43 -0700</bug_when>
    <thetext>Comment on attachment 213547
patch

Attachment 213547 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3519060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936914</commentid>
    <comment_count>6</comment_count>
      <attachid>213549</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 18:40:47 -0700</bug_when>
    <thetext>Created attachment 213549
for bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936923</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-06 19:16:06 -0700</bug_when>
    <thetext>https://trac.webkit.org/r157015</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213547</attachid>
            <date>2013-10-06 18:06:08 -0700</date>
            <delta_ts>2013-10-06 18:40:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>text-style-2.patch</filename>
            <type>text/plain</type>
            <size>34166</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEwLTA2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgdGV4dCBwYWludCBz
dHlsZSBjb21wdXRhdGlvbiBvdXQgZnJvbSBJbmxpbmVUZXh0Qm94CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGl0IHRvIFRleHRQYWludFN0eWxl
LmgvY3BwLiBPdGhlciBwYXJ0cyBvZiB0aGUgY29kZSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUu
CisKIDIwMTMtMTAtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtHVEtdIEdldCByaWQgb2YgdXNlIG9mIGRlbGV0ZUFsbFZhbHVlcyBpbiBHdGtEcmFnQW5kRHJv
cEhlbHBlcgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NzAxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMTU2LDYgKzIx
NTYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmNwcAogICAgIHJlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmNwcAorICAgIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKICAgICByZW5k
ZXJpbmcvYnJlYWtfbGluZXMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAx
NTcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC00NDM2LDYgKzQ0MzYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TY3JvbGxCZWhhdmlvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dEF1dG9zaXplci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
QXV0b3NpemVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVydGljYWxQb3NpdGlvbkNhY2hlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggXApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lv
biAxNTcwMTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgwMSw2ICsxMDgwMSw3IEBACiAgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQ
cm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQ
cm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxl
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUG9seWdv
blNoYXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFw
ZXNcUmFzdGVyU2hhcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXHNoYXBlc1xSZWN0YW5nbGVTaGFwZS5jcHAiIC8+CkBAIC0xOTU3NSw2ICsxOTU3Niw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Jlc291cmNlc0Nh
Y2hlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1Jl
c291cmNlc0N5Y2xlU29sdmVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcVGFibGVMYXlvdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xUZXh0UGFpbnRTdHlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXG1hdGhtbFxSZW5kZXJNYXRoTUxCbG9jay5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXG1hdGhtbFxSZW5kZXJNYXRoTUxGZW5j
ZWQuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY0NCw2ICs1
NjQ0LDggQEAKIAkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMTc4OTYw
RUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAv
KiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovOyB9
OwogCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU3MENGOTc0MTkwMEU5
N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovOyB9OworCQlFNEM5MUEwRTE4MDIzNDMxMDBBMTdGNkQg
LyogVGV4dFBhaW50U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5oICov
OyB9OworCQlFNEM5MUExMDE4MDIzNDM5MDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDOTFBMEYxODAy
MzQzOTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmNwcCAqLzsgfTsKIAkJRTRENThFQjQxN0I0
REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDU4RUIyMTdCNERCREMwMENCRENB
OCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi87IH07CiAJCUU0RDU4RUI1MTdCNERC
REMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjMxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi87IH07CiAJCUU0RDU4RUI4MTdCNEVEODkwMENC
RENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHls
ZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLzsgfTsKQEAgLTEyNTgxLDYgKzEyNTgzLDggQEAKIAkJ
RTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1l
ZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QzkxQTBEMTgwMjM0MzEwMEEx
N0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZXh0UGFpbnRTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEM5MUEw
RjE4MDIzNDM5MDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFBhaW50U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1
OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0
eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDU1Myw2ICsyMDU1Nyw4IEBACiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEJlaGF2aW9yLmNwcCAqLywKIAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAg
LyogU2Nyb2xsQmVoYXZpb3IuaCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQgLyog
VGFibGVMYXlvdXQuaCAqLywKKwkJCQlFNEM5MUEwRjE4MDIzNDM5MDBBMTdGNkQgLyogVGV4dFBh
aW50U3R5bGUuY3BwICovLAorCQkJCUU0QzkxQTBEMTgwMjM0MzEwMEExN0Y2RCAvKiBUZXh0UGFp
bnRTdHlsZS5oICovLAogCQkJCTM3RkM5NkRBMTEwNEVENzEwMDNFMUZBRCAvKiBUcmFpbGluZ0Zs
b2F0c1Jvb3RJbmxpbmVCb3guaCAqLywKIAkJCQlCQ0EyNTcxNDEyOTNDMDEwMDA3QTI2M0QgLyog
VmVydGljYWxQb3NpdGlvbkNhY2hlLmggKi8sCiAJCQkpOwpAQCAtMjQyNzcsNiArMjQyODMsNyBA
QAogCQkJCUJDQTI1NzE1MTI5M0MwMTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJFODhFMERGMTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRlb1Ry
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTg4RTBFMjE3MTVEMkEyMDA2NThEOTggLyogVmlk
ZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QzkxQTBFMTgwMjM0MzEwMEExN0Y2
RCAvKiBUZXh0UGFpbnRTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVGMjlFRUMxNzE1REQw
OTAwQzRCNEM5IC8qIFZpZGVvVHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRUY0
MThDRjExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTNGRkZGOUFFMTU5RDlCMDYwMDIwQkJENSAvKiBWaWV3cG9ydFN0eWxlUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjU1NjEsNiArMjU1NjgsNyBAQAogCQkJCTdDRTMwREE5MTcx
QjYzRDIwMEVDMzNFMSAvKiBGcmFtZVNuYXBzaG90dGluZ01hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTA3OTY5REFEMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ0RhdGFDaGFubmVsRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjVBMjE0ODQwOTdBM0Y1MzAwQjkwNTBBIC8qIEZyYW1lVHJl
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEM5MUExMDE4MDIzNDM5MDBBMTdGNkQgLyogVGV4
dFBhaW50U3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDQkZFRjkwOTc0RjYwNzAwMURB
QzI1IC8qIEZyYW1lVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzIwNUFBRjEyMzkyOENB
MDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFDODFCODkwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDE1NzAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKICNpbmNsdWRlICJicmVh
a19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzMwLDQ4ICsz
MzEsNyBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAgICAgcmV0
dXJuIC0xOwogfQogCi1Db2xvciBjb3JyZWN0ZWRUZXh0Q29sb3IoQ29sb3IgdGV4dENvbG9yLCBD
b2xvciBiYWNrZ3JvdW5kQ29sb3IpIAotewotICAgIC8vIEFkanVzdCB0aGUgdGV4dCBjb2xvciBp
ZiBpdCBpcyB0b28gY2xvc2UgdG8gdGhlIGJhY2tncm91bmQgY29sb3IsCi0gICAgLy8gYnkgZGFy
a2VuaW5nIG9yIGxpZ2h0ZW5pbmcgaXQgdG8gbW92ZSBpdCBmdXJ0aGVyIGF3YXkuCi0gICAgCi0g
ICAgaW50IGQgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIGJhY2tncm91bmRDb2xvcik7
Ci0gICAgLy8gc2VtaS1hcmJpdHJhcmlseSBjaG9zZSA2NTAyNSAoMjU1XjIpIHZhbHVlIGhlcmUg
YWZ0ZXIgYSBmZXcgdGVzdHM7IAotICAgIGlmIChkID4gNjUwMjUpIHsKLSAgICAgICAgcmV0dXJu
IHRleHRDb2xvcjsKLSAgICB9Ci0gICAgCi0gICAgaW50IGRpc3RhbmNlRnJvbVdoaXRlID0gZGlm
ZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBDb2xvcjo6d2hpdGUpOwotICAgIGludCBkaXN0YW5j
ZUZyb21CbGFjayA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6OmJsYWNrKTsK
IAotICAgIGlmIChkaXN0YW5jZUZyb21XaGl0ZSA8IGRpc3RhbmNlRnJvbUJsYWNrKSB7Ci0gICAg
ICAgIHJldHVybiB0ZXh0Q29sb3IuZGFyaygpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdGV4
dENvbG9yLmxpZ2h0KCk7Ci19Ci0KLXZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvciwgY29uc3QgQ29sb3ImIHN0
cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VUaGlja25lc3MsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
LXsKLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdN
b2RlKCk7Ci0gICAgaWYgKHN0cm9rZVRoaWNrbmVzcyA+IDApIHsKLSAgICAgICAgVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbmV3TW9kZSA9IG1vZGUgfCBUZXh0TW9kZVN0cm9rZTsKLSAgICAgICAgaWYg
KG1vZGUgIT0gbmV3TW9kZSkgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdN
b2RlKG5ld01vZGUpOwotICAgICAgICAgICAgbW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1vZGUgJiBUZXh0TW9kZUZpbGwgJiYgKGZpbGxDb2xvciAhPSBj
b250ZXh0LT5maWxsQ29sb3IoKSB8fCBjb2xvclNwYWNlICE9IGNvbnRleHQtPmZpbGxDb2xvclNw
YWNlKCkpKQotICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoZmlsbENvbG9yLCBjb2xvclNw
YWNlKTsKLQotICAgIGlmIChtb2RlICYgVGV4dE1vZGVTdHJva2UpIHsKLSAgICAgICAgaWYgKHN0
cm9rZUNvbG9yICE9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCkpCi0gICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VDb2xvcihzdHJva2VDb2xvciwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChz
dHJva2VUaGlja25lc3MgIT0gY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICB9Ci19
CiAKIGJvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAogewpAQCAtNTgzLDkx
ICs1NDMsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAg
IGJvb2wgdXNlQ3VzdG9tVW5kZXJsaW5lcyA9IGNvbnRhaW5zQ29tcG9zaXRpb24gJiYgcmVuZGVy
ZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uVXNlc0N1c3RvbVVuZGVybGluZXMoKTsK
IAogICAgIC8vIERldGVybWluZSB0aGUgdGV4dCBjb2xvcnMgYW5kIHNlbGVjdGlvbiBjb2xvcnMu
Ci0gICAgQ29sb3IgdGV4dEZpbGxDb2xvcjsKLSAgICBDb2xvciB0ZXh0U3Ryb2tlQ29sb3I7Ci0g
ICAgQ29sb3IgZW1waGFzaXNNYXJrQ29sb3I7Ci0gICAgZmxvYXQgdGV4dFN0cm9rZVdpZHRoID0g
bGluZVN0eWxlLnRleHRTdHJva2VXaWR0aCgpOwotICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRT
aGFkb3cgPSBwYWludEluZm8uZm9yY2VCbGFja1RleHQoKSA/IDAgOiBsaW5lU3R5bGUudGV4dFNo
YWRvdygpOworICAgIFRleHRQYWludFN0eWxlIHRleHRQYWludFN0eWxlID0gY29tcHV0ZVRleHRQ
YWludFN0eWxlKHJlbmRlcmVyKCksIGxpbmVTdHlsZSwgcGFpbnRJbmZvKTsKIAotICAgIGlmIChw
YWludEluZm8uZm9yY2VCbGFja1RleHQoKSkgewotICAgICAgICB0ZXh0RmlsbENvbG9yID0gQ29s
b3I6OmJsYWNrOwotICAgICAgICB0ZXh0U3Ryb2tlQ29sb3IgPSBDb2xvcjo6YmxhY2s7Ci0gICAg
ICAgIGVtcGhhc2lzTWFya0NvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHRleHRGaWxsQ29sb3IgPSBsaW5lU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1By
b3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcik7Ci0gICAgICAgIAotICAgICAgICBib29sIGZvcmNl
QmFja2dyb3VuZFRvV2hpdGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzUHJpbnRpbmcpIHsKLSAg
ICAgICAgICAgIGlmIChsaW5lU3R5bGUucHJpbnRDb2xvckFkanVzdCgpID09IFByaW50Q29sb3JB
ZGp1c3RFY29ub215KQotICAgICAgICAgICAgICAgIGZvcmNlQmFja2dyb3VuZFRvV2hpdGUgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuZnJhbWUoKS5zZXR0aW5ncygpLnNob3Vs
ZFByaW50QmFja2dyb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBmb3JjZUJhY2tncm91bmRUb1do
aXRlID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIHRoZSB0ZXh0IGZpbGwg
Y29sb3IgbGVnaWJsZSBhZ2FpbnN0IGEgd2hpdGUgYmFja2dyb3VuZAotICAgICAgICBpZiAoZm9y
Y2VCYWNrZ3JvdW5kVG9XaGl0ZSkKLSAgICAgICAgICAgIHRleHRGaWxsQ29sb3IgPSBjb3JyZWN0
ZWRUZXh0Q29sb3IodGV4dEZpbGxDb2xvciwgQ29sb3I6OndoaXRlKTsKLQotICAgICAgICB0ZXh0
U3Ryb2tlQ29sb3IgPSBsaW5lU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE1ha2UgdGhlIHRl
eHQgc3Ryb2tlIGNvbG9yIGxlZ2libGUgYWdhaW5zdCBhIHdoaXRlIGJhY2tncm91bmQKLSAgICAg
ICAgaWYgKGZvcmNlQmFja2dyb3VuZFRvV2hpdGUpCi0gICAgICAgICAgICB0ZXh0U3Ryb2tlQ29s
b3IgPSBjb3JyZWN0ZWRUZXh0Q29sb3IodGV4dFN0cm9rZUNvbG9yLCBDb2xvcjo6d2hpdGUpOwot
Ci0gICAgICAgIGVtcGhhc2lzTWFya0NvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE1ha2UgdGhlIHRleHQgc3Ryb2tlIGNvbG9yIGxlZ2libGUgYWdhaW5zdCBhIHdoaXRl
IGJhY2tncm91bmQKLSAgICAgICAgaWYgKGZvcmNlQmFja2dyb3VuZFRvV2hpdGUpCi0gICAgICAg
ICAgICBlbXBoYXNpc01hcmtDb2xvciA9IGNvcnJlY3RlZFRleHRDb2xvcihlbXBoYXNpc01hcmtD
b2xvciwgQ29sb3I6OndoaXRlKTsKLSAgICB9Ci0KLSAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0
T25seSA9IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7Ci0gICAgYm9v
bCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSBmYWxzZTsKLQotICAgIENvbG9yIHNlbGVj
dGlvbkZpbGxDb2xvciA9IHRleHRGaWxsQ29sb3I7Ci0gICAgQ29sb3Igc2VsZWN0aW9uU3Ryb2tl
Q29sb3IgPSB0ZXh0U3Ryb2tlQ29sb3I7Ci0gICAgQ29sb3Igc2VsZWN0aW9uRW1waGFzaXNNYXJr
Q29sb3IgPSBlbXBoYXNpc01hcmtDb2xvcjsKLSAgICBmbG9hdCBzZWxlY3Rpb25TdHJva2VXaWR0
aCA9IHRleHRTdHJva2VXaWR0aDsKLSAgICBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFk
b3cgPSB0ZXh0U2hhZG93OwotICAgIGlmIChoYXZlU2VsZWN0aW9uKSB7Ci0gICAgICAgIC8vIENo
ZWNrIGZvcmVncm91bmQgY29sb3IgZmlyc3QuCi0gICAgICAgIENvbG9yIGZvcmVncm91bmQgPSBw
YWludEluZm8uZm9yY2VCbGFja1RleHQoKSA/IENvbG9yOjpibGFjayA6IHJlbmRlcmVyKCkuc2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Ci0gICAgICAgIGlmIChmb3JlZ3JvdW5kLmlzVmFsaWQo
KSAmJiBmb3JlZ3JvdW5kICE9IHNlbGVjdGlvbkZpbGxDb2xvcikgewotICAgICAgICAgICAgaWYg
KCFwYWludFNlbGVjdGVkVGV4dE9ubHkpCi0gICAgICAgICAgICAgICAgcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHNlbGVjdGlvbkZpbGxDb2xvciA9IGZv
cmVncm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2xvciBlbXBoYXNpc01hcmtGb3JlZ3Jv
dW5kID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyBDb2xvcjo6YmxhY2sgOiByZW5kZXJl
cigpLnNlbGVjdGlvbkVtcGhhc2lzTWFya0NvbG9yKCk7Ci0gICAgICAgIGlmIChlbXBoYXNpc01h
cmtGb3JlZ3JvdW5kLmlzVmFsaWQoKSAmJiBlbXBoYXNpc01hcmtGb3JlZ3JvdW5kICE9IHNlbGVj
dGlvbkVtcGhhc2lzTWFya0NvbG9yKSB7Ci0gICAgICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRU
ZXh0T25seSkKLSAgICAgICAgICAgICAgICBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSB0
cnVlOwotICAgICAgICAgICAgc2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IgPSBlbXBoYXNpc01h
cmtGb3JlZ3JvdW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBwc2V1
ZG9TdHlsZSA9IHJlbmRlcmVyKCkuZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VMRUNUSU9OKSkgewot
ICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlQmxh
Y2tUZXh0KCkgPyAwIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgIGlm
IChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWlu
dFNlbGVjdGVkVGV4dE9ubHkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0
U2VwYXJhdGVseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uU2hhZG93ID0gc2hh
ZG93OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHBz
ZXVkb1N0eWxlLT50ZXh0U3Ryb2tlV2lkdGgoKTsKLSAgICAgICAgICAgIGlmIChzdHJva2VXaWR0
aCAhPSBzZWxlY3Rpb25TdHJva2VXaWR0aCkgewotICAgICAgICAgICAgICAgIGlmICghcGFpbnRT
ZWxlY3RlZFRleHRPbmx5KQotICAgICAgICAgICAgICAgICAgICBwYWludFNlbGVjdGVkVGV4dFNl
cGFyYXRlbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0cm9rZVdpZHRoID0g
c3Ryb2tlV2lkdGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENvbG9yIHN0cm9rZSA9
IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29sb3I6OmJsYWNrIDogcHNldWRvU3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcik7
Ci0gICAgICAgICAgICBpZiAoc3Ryb2tlICE9IHNlbGVjdGlvblN0cm9rZUNvbG9yKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkpCi0gICAgICAgICAgICAgICAg
ICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uU3Ryb2tlQ29sb3IgPSBzdHJva2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9CisgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHk7CisgICAgYm9vbCBwYWludFNl
bGVjdGVkVGV4dFNlcGFyYXRlbHk7CisgICAgY29uc3QgU2hhZG93RGF0YSogc2VsZWN0aW9uU2hh
ZG93OworICAgIFRleHRQYWludFN0eWxlIHNlbGVjdGlvblBhaW50U3R5bGUgPSBjb21wdXRlVGV4
dFNlbGVjdGlvblBhaW50U3R5bGUodGV4dFBhaW50U3R5bGUsIHJlbmRlcmVyKCksIGxpbmVTdHls
ZSwgcGFpbnRJbmZvLCBwYWludFNlbGVjdGVkVGV4dE9ubHksIHBhaW50U2VsZWN0ZWRUZXh0U2Vw
YXJhdGVseSwgc2VsZWN0aW9uU2hhZG93KTsKIAogICAgIC8vIFNldCBvdXIgZm9udC4KICAgICBj
b25zdCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CkBAIC02
OTQsNyArNTc1LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQog
ICAgICAgICBwYWludERvY3VtZW50TWFya2Vycyhjb250ZXh0LCBib3hPcmlnaW4sIGxpbmVTdHls
ZSwgZm9udCwgdHJ1ZSk7CiAKICAgICAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1c3Rv
bVVuZGVybGluZXMpCi0gICAgICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0LCBib3hPcmln
aW4sIGxpbmVTdHlsZSwgZm9udCwgc2VsZWN0aW9uRmlsbENvbG9yKTsKKyAgICAgICAgICAgIHBh
aW50U2VsZWN0aW9uKGNvbnRleHQsIGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250LCBzZWxlY3Rp
b25QYWludFN0eWxlLmZpbGxDb2xvcik7CiAgICAgfQogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBy
ZW5kZXJlcigpLmZyYW1lKCkucGFnZSgpKSB7CkBAIC03NDUsMjAgKzYyNiwyMiBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgaWYgKCFlbXBoYXNpc01hcmsu
aXNFbXB0eSgpKQogICAgICAgICBlbXBoYXNpc01hcmtPZmZzZXQgPSBlbXBoYXNpc01hcmtQb3Np
dGlvbiA9PSBUZXh0RW1waGFzaXNQb3NpdGlvbk92ZXIgPyAtZm9udC5mb250TWV0cmljcygpLmFz
Y2VudCgpIC0gZm9udC5lbXBoYXNpc01hcmtEZXNjZW50KGVtcGhhc2lzTWFyaykgOiBmb250LmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpICsgZm9udC5lbXBoYXNpc01hcmtBc2NlbnQoZW1waGFzaXNN
YXJrKTsKIAorICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3cgPSBwYWludEluZm8uZm9y
Y2VCbGFja1RleHQoKSA/IDAgOiBsaW5lU3R5bGUudGV4dFNoYWRvdygpOworCiAgICAgaWYgKCFw
YWludFNlbGVjdGVkVGV4dE9ubHkpIHsKICAgICAgICAgLy8gRm9yIHN0cm9rZWQgcGFpbnRpbmcs
IHdlIGhhdmUgdG8gY2hhbmdlIHRoZSB0ZXh0IGRyYXdpbmcgbW9kZS4gIEl0J3MgcHJvYmFibHkg
ZGFuZ2Vyb3VzIHRvIGxlYXZlIHRoYXQgbXV0YXRlZCBhcyBhIHNpZGUKICAgICAgICAgLy8gZWZm
ZWN0LCBzbyBvbmx5IHdoZW4gd2Uga25vdyB3ZSdyZSBzdHJva2luZywgZG8gYSBzYXZlL3Jlc3Rv
cmUuCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4
dCwgdGV4dFN0cm9rZVdpZHRoID4gMCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgdGV4dFBhaW50U3R5bGUuc3Ryb2tlV2lkdGggPiAwKTsK
IAotICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgdGV4dEZpbGxDb2xvciwg
dGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlV2lkdGgsIGxpbmVTdHlsZS5jb2xvclNwYWNlKCkp
OworICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgdGV4dFBhaW50U3R5bGUp
OwogICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSB8fCBlUG9zIDw9IHNQ
b3MpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUcnVuY2F0ZSByaWdodC10by1sZWZ0IHRleHQg
Y29ycmVjdGx5LgotICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgZm9u
dCwgdGV4dFJ1biwgbnVsbEF0b20sIDAsIDAsIGxlbmd0aCwgbGVuZ3RoLCB0ZXh0T3JpZ2luLCBi
b3hSZWN0LCB0ZXh0U2hhZG93LCB0ZXh0U3Ryb2tlV2lkdGggPiAwLCBpc0hvcml6b250YWwoKSk7
CisgICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVu
LCBudWxsQXRvbSwgMCwgMCwgbGVuZ3RoLCBsZW5ndGgsIHRleHRPcmlnaW4sIGJveFJlY3QsIHRl
eHRTaGFkb3csIHRleHRQYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgaXNIb3Jpem9udGFsKCkp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIGZvbnQsIHRleHRSdW4sIG51bGxBdG9tLCAwLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRP
cmlnaW4sIGJveFJlY3QsIHRleHRTaGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpv
bnRhbCgpKTsKKyAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQs
IHRleHRSdW4sIG51bGxBdG9tLCAwLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4sIGJv
eFJlY3QsIHRleHRTaGFkb3csIHRleHRQYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgaXNIb3Jp
em9udGFsKCkpOwogCiAgICAgICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGVtcGhhc2lzTWFya0NvbG9y
LCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGluZVN0eWxlLmNvbG9yU3BhY2Uo
KSk7CisgICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgdGV4dFBhaW50
U3R5bGUsIFVzZUVtcGhhc2lzTWFya0NvbG9yKTsKIAogICAgICAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChUZXh0UnVuLCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4sICgmb2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDEpKTsKICAgICAgICAgICAgIFRleHRSdW4mIGVtcGhh
c2lzTWFya1RleHRSdW4gPSBjb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rl
clRleHRSdW4gOiB0ZXh0UnVuOwpAQCAtNzY4LDkgKzY1MSw5IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVk
VGV4dFNlcGFyYXRlbHkgfHwgZVBvcyA8PSBzUG9zKSB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAg
ICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgY29tYmluZWRUZXh0ID8gY29tYmluZWRU
ZXh0LT5vcmlnaW5hbEZvbnQoKSA6IGZvbnQsIGVtcGhhc2lzTWFya1RleHRSdW4sIGVtcGhhc2lz
TWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCAwLCBsZW5ndGgsIGxlbmd0aCwgZW1waGFzaXNNYXJr
VGV4dE9yaWdpbiwgYm94UmVjdCwgdGV4dFNoYWRvdywgdGV4dFN0cm9rZVdpZHRoID4gMCwgaXNI
b3Jpem9udGFsKCkpOworICAgICAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIGNvbWJpbmVkVGV4dCA/IGNvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBmb250LCBl
bXBoYXNpc01hcmtUZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgMCwg
bGVuZ3RoLCBsZW5ndGgsIGVtcGhhc2lzTWFya1RleHRPcmlnaW4sIGJveFJlY3QsIHRleHRTaGFk
b3csIHRleHRQYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgaXNIb3Jpem9udGFsKCkpOwogICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29u
dGV4dCwgY29tYmluZWRUZXh0ID8gY29tYmluZWRUZXh0LT5vcmlnaW5hbEZvbnQoKSA6IGZvbnQs
IGVtcGhhc2lzTWFya1RleHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBl
UG9zLCBzUG9zLCBsZW5ndGgsIGVtcGhhc2lzTWFya1RleHRPcmlnaW4sIGJveFJlY3QsIHRleHRT
aGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpvbnRhbCgpKTsKKyAgICAgICAgICAg
ICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBjb21iaW5lZFRleHQgPyBjb21iaW5l
ZFRleHQtPm9yaWdpbmFsRm9udCgpIDogZm9udCwgZW1waGFzaXNNYXJrVGV4dFJ1biwgZW1waGFz
aXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIGVQb3MsIHNQb3MsIGxlbmd0aCwgZW1waGFzaXNN
YXJrVGV4dE9yaWdpbiwgYm94UmVjdCwgdGV4dFNoYWRvdywgdGV4dFBhaW50U3R5bGUuc3Ryb2tl
V2lkdGggPiAwLCBpc0hvcml6b250YWwoKSk7CiAKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRl
eHQpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3Qs
IENvdW50ZXJjbG9ja3dpc2UpKTsKQEAgLTc3OSwxMiArNjYyLDEyIEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIGlmICgocGFpbnRTZWxlY3RlZFRleHRP
bmx5IHx8IHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgJiYgc1BvcyA8IGVQb3MpIHsKICAg
ICAgICAgLy8gcGFpbnQgb25seSB0aGUgdGV4dCB0aGF0IGlzIHNlbGVjdGVkCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgc2VsZWN0aW9uU3Ry
b2tlV2lkdGggPiAwKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0LCBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCk7CiAKLSAg
ICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlvbkZpbGxDb2xvciwg
c2VsZWN0aW9uU3Ryb2tlQ29sb3IsIHNlbGVjdGlvblN0cm9rZVdpZHRoLCBsaW5lU3R5bGUuY29s
b3JTcGFjZSgpKTsKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgZm9udCwg
dGV4dFJ1biwgbnVsbEF0b20sIDAsIHNQb3MsIGVQb3MsIGxlbmd0aCwgdGV4dE9yaWdpbiwgYm94
UmVjdCwgc2VsZWN0aW9uU2hhZG93LCBzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpv
bnRhbCgpKTsKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlv
blBhaW50U3R5bGUpOworICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBmb250
LCB0ZXh0UnVuLCBudWxsQXRvbSwgMCwgc1BvcywgZVBvcywgbGVuZ3RoLCB0ZXh0T3JpZ2luLCBi
b3hSZWN0LCBzZWxlY3Rpb25TaGFkb3csIHNlbGVjdGlvblBhaW50U3R5bGUuc3Ryb2tlV2lkdGgg
PiAwLCBpc0hvcml6b250YWwoKSk7CiAgICAgICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlv
bkVtcGhhc2lzTWFya0NvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGlu
ZVN0eWxlLmNvbG9yU3BhY2UoKSk7CisgICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29udGV4dCwgc2VsZWN0aW9uUGFpbnRTdHlsZSwgVXNlRW1waGFzaXNNYXJrQ29sb3IpOwogCiAg
ICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwogICAg
ICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRSdW47CkBAIC03OTIsNyArNjc1
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICAg
ICAgaWYgKGNvbWJpbmVkVGV4dCkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7CiAKLSAgICAgICAgICAgIHBhaW50VGV4dFdp
dGhTaGFkb3dzKGNvbnRleHQsIGNvbWJpbmVkVGV4dCA/IGNvbWJpbmVkVGV4dC0+b3JpZ2luYWxG
b250KCkgOiBmb250LCBlbXBoYXNpc01hcmtUZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhhc2lz
TWFya09mZnNldCwgc1BvcywgZVBvcywgbGVuZ3RoLCBlbXBoYXNpc01hcmtUZXh0T3JpZ2luLCBi
b3hSZWN0LCBzZWxlY3Rpb25TaGFkb3csIHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCwgaXNIb3Jp
em9udGFsKCkpOworICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgY29t
YmluZWRUZXh0ID8gY29tYmluZWRUZXh0LT5vcmlnaW5hbEZvbnQoKSA6IGZvbnQsIGVtcGhhc2lz
TWFya1RleHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBzUG9zLCBlUG9z
LCBsZW5ndGgsIGVtcGhhc2lzTWFya1RleHRPcmlnaW4sIGJveFJlY3QsIHNlbGVjdGlvblNoYWRv
dywgc2VsZWN0aW9uUGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpvbnRhbCgpKTsK
IAogICAgICAgICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwpAQCAtODAy
LDcgKzY4NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAg
ICAvLyBQYWludCBkZWNvcmF0aW9ucwogICAgIFRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0aW9u
cyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICh0ZXh0RGVj
b3JhdGlvbnMgIT0gVGV4dERlY29yYXRpb25Ob25lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlU2VsZWN0aW9uKSB7Ci0gICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0
LCB0ZXh0RmlsbENvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGluZVN0
eWxlLmNvbG9yU3BhY2UoKSk7CisgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0
LCB0ZXh0UGFpbnRTdHlsZSk7CiAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCiAgICAgICAgICAg
ICBjb250ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7CiAgICAg
ICAgIHBhaW50RGVjb3JhdGlvbihjb250ZXh0LCBib3hPcmlnaW4sIHRleHREZWNvcmF0aW9ucywg
bGluZVN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUoKSwgdGV4dFNoYWRvdyk7CkBAIC04ODksNyAr
NzcyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogICAgICAg
ICBjID0gQ29sb3IoMHhmZiAtIGMucmVkKCksIDB4ZmYgLSBjLmdyZWVuKCksIDB4ZmYgLSBjLmJs
dWUoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRl
eHQpOwotICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwLCBzdHlsZS5j
b2xvclNwYWNlKCkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQorICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjLCBzdHlsZS5jb2xvclNwYWNlKCkp
KTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKICAgICAKICAgICAvLyBJZiB0aGUgdGV4dCBp
cyB0cnVuY2F0ZWQsIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlv
bgogICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCkBAIC05MzYsNyArODE5LDcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFjawogCiAgICAgQ29sb3IgYyA9IENv
bG9yKDIyNSwgMjIxLCA4NSk7CiAgICAgCi0gICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQsIGMsIGMsIDAsIHN0eWxlLmNvbG9yU3BhY2UoKSk7IC8vIERvbid0IGRyYXcgdGV4dCBhdCBh
bGwhCisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIFRleHRQYWludFN0eWxlKGMs
IHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogCiAgICAg
aW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9k
ZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkg
LSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7
CkBAIC0xMzkxLDcgKzEyNzQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNo
TWFya2VyCiAgICAgICAgICAgICByZW5kZXJlcigpLnRoZW1lKCktPnBsYXRmb3JtQWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgOgogICAgICAgICAgICAgcmVuZGVyZXIoKS50aGVtZSgp
LT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCk7CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcHQpOwotICAgICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5bGUuY29sb3JTcGFjZSgpKTsg
Ly8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KHB0LCBUZXh0UGFpbnRTdHlsZShjb2xvciwgc3R5bGUuY29sb3JTcGFjZSgpKSk7IC8vIERvbid0
IGRyYXcgdGV4dCBhdCBhbGwhCiAgICAgICAgIHB0LT5jbGlwKEZsb2F0UmVjdChib3hPcmlnaW4u
eCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7
CiAgICAgICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQo
Ym94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIHNlbEhlaWdodCwgY29sb3Is
IHN0eWxlLmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAxNTcwMTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxMCArNDEsNiBAQCBwdWJsaWM6CiAgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKCkgeyBy
ZXNlcnZlQ2FwYWNpdHkoMjU2KTsgfQogfTsKIAotLy8gSGVscGVyIGZ1bmN0aW9ucyBzaGFyZWQg
YnkgSW5saW5lVGV4dEJveCAvIFNWR1Jvb3RJbmxpbmVCb3gKLXZvaWQgdXBkYXRlR3JhcGhpY3ND
b250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIGNvbnN0IENv
bG9yJiBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBDb2xvclNwYWNlKTsKLUNv
bG9yIGNvcnJlY3RlZFRleHRDb2xvcihDb2xvciB0ZXh0Q29sb3IsIENvbG9yIGJhY2tncm91bmRD
b2xvcik7Ci0KIGNsYXNzIElubGluZVRleHRCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBJbmxpbmVUZXh0Qm94KFJlbmRlclRleHQmIHJlbmRlcmVyKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRQYWludFN0eWxlOjpU
ZXh0UGFpbnRTdHlsZSgpCit7Cit9CisKK1RleHRQYWludFN0eWxlOjpUZXh0UGFpbnRTdHlsZShD
b2xvciBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogY29sb3JTcGFjZShjb2xv
clNwYWNlKQorICAgICwgZmlsbENvbG9yKGNvbG9yKQorICAgICwgc3Ryb2tlQ29sb3IoY29sb3Ip
CisgICAgLCBzdHJva2VXaWR0aCgwKQoreworfQorCitzdGF0aWMgQ29sb3IgY29ycmVjdGVkVGV4
dENvbG9yKENvbG9yIHRleHRDb2xvciwgQ29sb3IgYmFja2dyb3VuZENvbG9yKQoreworICAgIC8v
IEFkanVzdCB0aGUgdGV4dCBjb2xvciBpZiBpdCBpcyB0b28gY2xvc2UgdG8gdGhlIGJhY2tncm91
bmQgY29sb3IsCisgICAgLy8gYnkgZGFya2VuaW5nIG9yIGxpZ2h0ZW5pbmcgaXQgdG8gbW92ZSBp
dCBmdXJ0aGVyIGF3YXkuCisgICAgCisgICAgaW50IGQgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0
Q29sb3IsIGJhY2tncm91bmRDb2xvcik7CisgICAgLy8gU2VtaS1hcmJpdHJhcmlseSBjaG9zZSA2
NTAyNSAoMjU1XjIpIHZhbHVlIGhlcmUgYWZ0ZXIgYSBmZXcgdGVzdHMuCisgICAgaWYgKGQgPiA2
NTAyNSkKKyAgICAgICAgcmV0dXJuIHRleHRDb2xvcjsKKworICAgIGludCBkaXN0YW5jZUZyb21X
aGl0ZSA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6OndoaXRlKTsKKyAgICBp
bnQgZGlzdGFuY2VGcm9tQmxhY2sgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9y
OjpibGFjayk7CisgICAgaWYgKGRpc3RhbmNlRnJvbVdoaXRlIDwgZGlzdGFuY2VGcm9tQmxhY2sp
CisgICAgICAgIHJldHVybiB0ZXh0Q29sb3IuZGFyaygpOworCisgICAgcmV0dXJuIHRleHRDb2xv
ci5saWdodCgpOworfQorCitUZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4dFBhaW50U3R5bGUoY29u
c3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIFRleHRQYWludFN0eWxlIHBhaW50U3R5
bGU7CisgICAgcGFpbnRTdHlsZS5jb2xvclNwYWNlID0gbGluZVN0eWxlLmNvbG9yU3BhY2UoKTsK
KyAgICBwYWludFN0eWxlLnN0cm9rZVdpZHRoID0gbGluZVN0eWxlLnRleHRTdHJva2VXaWR0aCgp
OworCisgICAgaWYgKHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpKSB7CisgICAgICAgIHBhaW50
U3R5bGUuZmlsbENvbG9yID0gQ29sb3I6OmJsYWNrOworICAgICAgICBwYWludFN0eWxlLnN0cm9r
ZUNvbG9yID0gQ29sb3I6OmJsYWNrOworICAgICAgICBwYWludFN0eWxlLmVtcGhhc2lzTWFya0Nv
bG9yID0gQ29sb3I6OmJsYWNrOworICAgICAgICByZXR1cm4gcGFpbnRTdHlsZTsKKyAgICB9Cisg
ICAgcGFpbnRTdHlsZS5maWxsQ29sb3IgPSBsaW5lU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcik7CisKKyAgICBib29sIGZvcmNlQmFja2dy
b3VuZFRvV2hpdGUgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGlu
ZygpKSB7CisgICAgICAgIGlmIChsaW5lU3R5bGUucHJpbnRDb2xvckFkanVzdCgpID09IFByaW50
Q29sb3JBZGp1c3RFY29ub215KQorICAgICAgICAgICAgZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSA9
IHRydWU7CisgICAgICAgIGlmIChyZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuc2hvdWxkUHJp
bnRCYWNrZ3JvdW5kcygpKQorICAgICAgICAgICAgZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSA9IGZh
bHNlOworICAgIH0KKworICAgIC8vIE1ha2UgdGhlIHRleHQgZmlsbCBjb2xvciBsZWdpYmxlIGFn
YWluc3QgYSB3aGl0ZSBiYWNrZ3JvdW5kCisgICAgaWYgKGZvcmNlQmFja2dyb3VuZFRvV2hpdGUp
CisgICAgICAgIHBhaW50U3R5bGUuZmlsbENvbG9yID0gY29ycmVjdGVkVGV4dENvbG9yKHBhaW50
U3R5bGUuZmlsbENvbG9yLCBDb2xvcjo6d2hpdGUpOworCisgICAgcGFpbnRTdHlsZS5zdHJva2VD
b2xvciA9IGxpbmVTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0U3Ryb2tlQ29sb3IpOworCisgICAgLy8gTWFrZSB0aGUgdGV4dCBzdHJva2UgY29sb3IgbGVn
aWJsZSBhZ2FpbnN0IGEgd2hpdGUgYmFja2dyb3VuZAorICAgIGlmIChmb3JjZUJhY2tncm91bmRU
b1doaXRlKQorICAgICAgICBwYWludFN0eWxlLnN0cm9rZUNvbG9yID0gY29ycmVjdGVkVGV4dENv
bG9yKHBhaW50U3R5bGUuc3Ryb2tlQ29sb3IsIENvbG9yOjp3aGl0ZSk7CisKKyAgICBwYWludFN0
eWxlLmVtcGhhc2lzTWFya0NvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yKTsKKworICAgIC8vIE1ha2UgdGhlIHRl
eHQgc3Ryb2tlIGNvbG9yIGxlZ2libGUgYWdhaW5zdCBhIHdoaXRlIGJhY2tncm91bmQKKyAgICBp
ZiAoZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSkKKyAgICAgICAgcGFpbnRTdHlsZS5lbXBoYXNpc01h
cmtDb2xvciA9IGNvcnJlY3RlZFRleHRDb2xvcihwYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9y
LCBDb2xvcjo6d2hpdGUpOworCisgICAgcmV0dXJuIHBhaW50U3R5bGU7Cit9CisKK1RleHRQYWlu
dFN0eWxlIGNvbXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHls
ZSYgdGV4dFBhaW50U3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYm9vbCYgcGFp
bnRTZWxlY3RlZFRleHRPbmx5LCBib29sJiBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNv
bnN0IFNoYWRvd0RhdGEqJiBzZWxlY3Rpb25TaGFkb3cpCit7CisgICAgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5ID0gKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKKyAgICBw
YWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSBmYWxzZTsKKyAgICBjb25zdCBTaGFkb3dEYXRh
KiB0ZXh0U2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyAwIDogbGluZVN0eWxl
LnRleHRTaGFkb3coKTsKKworICAgIFRleHRQYWludFN0eWxlIHNlbGVjdGlvblBhaW50U3R5bGUg
PSB0ZXh0UGFpbnRTdHlsZTsKKworICAgIHNlbGVjdGlvblNoYWRvdyA9IHRleHRTaGFkb3c7Cisg
ICAgQ29sb3IgZm9yZWdyb3VuZCA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29sb3I6
OmJsYWNrIDogcmVuZGVyZXIuc2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CisgICAgaWYgKGZv
cmVncm91bmQuaXNWYWxpZCgpICYmIGZvcmVncm91bmQgIT0gc2VsZWN0aW9uUGFpbnRTdHlsZS5m
aWxsQ29sb3IpIHsKKyAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgICAg
ICAgICBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSB0cnVlOworICAgICAgICBzZWxlY3Rp
b25QYWludFN0eWxlLmZpbGxDb2xvciA9IGZvcmVncm91bmQ7CisgICAgfQorCisgICAgQ29sb3Ig
ZW1waGFzaXNNYXJrRm9yZWdyb3VuZCA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29s
b3I6OmJsYWNrIDogcmVuZGVyZXIuc2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IoKTsKKyAgICBp
ZiAoZW1waGFzaXNNYXJrRm9yZWdyb3VuZC5pc1ZhbGlkKCkgJiYgZW1waGFzaXNNYXJrRm9yZWdy
b3VuZCAhPSBzZWxlY3Rpb25QYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yKSB7CisgICAgICAg
IGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5ID0gdHJ1ZTsKKyAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZS5lbXBoYXNp
c01hcmtDb2xvciA9IGVtcGhhc2lzTWFya0ZvcmVncm91bmQ7CisgICAgfQorCisgICAgaWYgKFJl
bmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNF
TEVDVElPTikpIHsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZv
LmZvcmNlQmxhY2tUZXh0KCkgPyAwIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKKyAgICAg
ICAgaWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKKyAgICAgICAgICAgIGlmICghcGFp
bnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2Vw
YXJhdGVseSA9IHRydWU7CisgICAgICAgICAgICBzZWxlY3Rpb25TaGFkb3cgPSBzaGFkb3c7Cisg
ICAgICAgIH0KKworICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHBzZXVkb1N0eWxlLT50ZXh0
U3Ryb2tlV2lkdGgoKTsKKyAgICAgICAgaWYgKHN0cm9rZVdpZHRoICE9IHNlbGVjdGlvblBhaW50
U3R5bGUuc3Ryb2tlV2lkdGgpIHsKKyAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRP
bmx5KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRydWU7
CisgICAgICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID0gc3Ryb2tlV2lk
dGg7CisgICAgICAgIH0KKworICAgICAgICBDb2xvciBzdHJva2UgPSBwYWludEluZm8uZm9yY2VC
bGFja1RleHQoKSA/IENvbG9yOjpibGFjayA6IHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOworICAgICAgICBpZiAoc3Ry
b2tlICE9IHNlbGVjdGlvblBhaW50U3R5bGUuc3Ryb2tlQ29sb3IpIHsKKyAgICAgICAgICAgIGlm
ICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRU
ZXh0U2VwYXJhdGVseSA9IHRydWU7CisgICAgICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLnN0
cm9rZUNvbG9yID0gc3Ryb2tlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzZWxlY3Rp
b25QYWludFN0eWxlOworfQorCit2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRQYWludFN0eWxlJiBwYWludFN0eWxlLCBTdHJva2VD
b2xvclR5cGUgc3Ryb2tlQ29sb3JUeXBlKQoreworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1v
ZGUgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01vZGUoKTsKKyAgICBpZiAocGFpbnRTdHlsZS5zdHJv
a2VXaWR0aCA+IDApIHsKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgbmV3TW9kZSA9IG1v
ZGUgfCBUZXh0TW9kZVN0cm9rZTsKKyAgICAgICAgaWYgKG1vZGUgIT0gbmV3TW9kZSkgeworICAg
ICAgICAgICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKG5ld01vZGUpOworICAgICAgICAg
ICAgbW9kZSA9IG5ld01vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1vZGUg
JiBUZXh0TW9kZUZpbGwgJiYgKHBhaW50U3R5bGUuZmlsbENvbG9yICE9IGNvbnRleHQtPmZpbGxD
b2xvcigpIHx8IHBhaW50U3R5bGUuY29sb3JTcGFjZSAhPSBjb250ZXh0LT5maWxsQ29sb3JTcGFj
ZSgpKSkKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHBhaW50U3R5bGUuZmlsbENvbG9y
LCBwYWludFN0eWxlLmNvbG9yU3BhY2UpOworCisgICAgaWYgKG1vZGUgJiBUZXh0TW9kZVN0cm9r
ZSkgeworICAgICAgICBDb2xvciBzdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yVHlwZSA9PSBVc2VO
b3JtYWxTdHJva2VDb2xvciA/IHBhaW50U3R5bGUuc3Ryb2tlQ29sb3IgOiBwYWludFN0eWxlLmVt
cGhhc2lzTWFya0NvbG9yOworICAgICAgICBpZiAoc3Ryb2tlQ29sb3IgIT0gY29udGV4dC0+c3Ry
b2tlQ29sb3IoKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0cm9rZUNv
bG9yLCBwYWludFN0eWxlLmNvbG9yU3BhY2UpOworICAgICAgICBpZiAocGFpbnRTdHlsZS5zdHJv
a2VXaWR0aCAhPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyhwYWludFN0eWxlLnN0cm9rZVdpZHRoKTsKKyAgICB9Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4
dFBhaW50U3R5bGVfaAorI2RlZmluZSBUZXh0UGFpbnRTdHlsZV9oCisKKyNpbmNsdWRlICJDb2xv
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2Ns
YXNzIFJlbmRlclRleHQ7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFNoYWRvd0RhdGE7Citz
dHJ1Y3QgUGFpbnRJbmZvOworCitzdHJ1Y3QgVGV4dFBhaW50U3R5bGUgeworICAgIFRleHRQYWlu
dFN0eWxlKCk7CisgICAgVGV4dFBhaW50U3R5bGUoQ29sb3IsIENvbG9yU3BhY2UpOworCisgICAg
Q29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgIENvbG9yIGZpbGxDb2xvcjsKKyAgICBDb2xvciBz
dHJva2VDb2xvcjsKKyAgICBDb2xvciBlbXBoYXNpc01hcmtDb2xvcjsKKyAgICBmbG9hdCBzdHJv
a2VXaWR0aDsKK307CisKK1RleHRQYWludFN0eWxlIGNvbXB1dGVUZXh0UGFpbnRTdHlsZShjb25z
dCBSZW5kZXJUZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBQYWludEluZm8mKTsKK1Rl
eHRQYWludFN0eWxlIGNvbXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFp
bnRTdHlsZSYsIGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFBh
aW50SW5mbyYsIGJvb2wmIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCYgcGFpbnRTZWxlY3Rl
ZFRleHRTZXBhcmF0ZWx5LCBjb25zdCBTaGFkb3dEYXRhKiYgc2VsZWN0aW9uU2hhZG93KTsKKwor
ZW51bSBTdHJva2VDb2xvclR5cGUgeyBVc2VOb3JtYWxTdHJva2VDb2xvciwgVXNlRW1waGFzaXNN
YXJrQ29sb3IgfTsKK3ZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRQYWludFN0eWxlJiwgU3Ryb2tlQ29sb3JUeXBlID0gVXNlTm9ybWFsU3Ryb2tl
Q29sb3IpOworCit9CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="235915"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="235917"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213549</attachid>
            <date>2013-10-06 18:40:47 -0700</date>
            <delta_ts>2013-10-06 18:40:47 -0700</delta_ts>
            <desc>for bots</desc>
            <filename>text-style-3.patch</filename>
            <type>text/plain</type>
            <size>34236</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEzLTEwLTA2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3IgdGV4dCBwYWludCBz
dHlsZSBjb21wdXRhdGlvbiBvdXQgZnJvbSBJbmxpbmVUZXh0Qm94CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MzMKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbmRyZWFzIEtsaW5nLgorCisgICAgICAgIE1vdmUgaXQgdG8gVGV4dFBhaW50U3R5bGUu
aC9jcHAuIE90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS4K
KwogMjAxMy0xMC0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W0dUS10gR2V0IHJpZCBvZiB1c2Ugb2YgZGVsZXRlQWxsVmFsdWVzIGluIEd0a0RyYWdBbmREcm9w
SGVscGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU3MDEwKQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIxNTYsNiArMjE1
Niw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAKICAgICByZW5kZXJpbmcvU2Nyb2xsQmVoYXZpb3IuY3BwCiAgICAgcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuY3BwCisgICAgcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAogICAgIHJlbmRl
cmluZy9icmVha19saW5lcy5jcHAKIAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1
NzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MzYsNiArNDQzNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Njcm9sbEJlaGF2aW9yLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0QXV0b3NpemVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9WZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBcCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9u
IDE1NzAxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTEwODAxLDYgKzEwODAxLDcgQEAKICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xQb2x5Z29u
U2hhcGUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBl
c1xSYXN0ZXJTaGFwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJp
bmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCIgLz4KQEAgLTE5NTc1LDYgKzE5NTc2LDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVzb3VyY2VzQ2Fj
aGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHUmVz
b3VyY2VzQ3ljbGVTb2x2ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xUYWJsZUxheW91dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXFRleHRQYWludFN0eWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTEJsb2NrLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTEZlbmNl
ZC5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU3MDEwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NjQ0LDYgKzU2
NDQsOCBAQAogCQlFNEMxNzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMxNzg5NjBF
RTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8q
IFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QzI3OTU2MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07
CiAJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggKi87IH07CisJCUU0QzkxQTBFMTgwMjM0MzEwMEExN0Y2RCAv
KiBUZXh0UGFpbnRTdHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRDOTFBMEQxODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi87
IH07CisJCUU0QzkxQTEwMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUEwRjE4MDIz
NDM5MDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuY3BwICovOyB9OwogCQlFNEQ1OEVCNDE3QjRE
QkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4
IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLzsgfTsKIAkJRTRENThFQjUxN0I0REJE
QzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyog
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLzsgfTsKIAkJRTRENThFQjgxN0I0RUQ4OTAwQ0JE
Q0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuY3BwICovOyB9OwpAQCAtMTI1ODEsNiArMTI1ODMsOCBAQAogCQlF
NEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1NlbGVjdG9yTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVkaWEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVk
aWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRDOTFBMEQxODAyMzQzMTAwQTE3
RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRQYWludFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QzkxQTBG
MTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UGFpbnRTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0RDU4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JE
b2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4
RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5
bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwNTUzLDYgKzIwNTU3LDggQEAKIAkJCQk1RDkyNUI2NTBGNjRENEREMDBCODQ3RjAg
LyogU2Nyb2xsQmVoYXZpb3IuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4NDdGMCAv
KiBTY3JvbGxCZWhhdmlvci5oICovLAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBU
YWJsZUxheW91dC5oICovLAorCQkJCUU0QzkxQTBGMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFp
bnRTdHlsZS5jcHAgKi8sCisJCQkJRTRDOTFBMEQxODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWlu
dFN0eWxlLmggKi8sCiAJCQkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxv
YXRzUm9vdElubGluZUJveC5oICovLAogCQkJCUJDQTI1NzE0MTI5M0MwMTAwMDdBMjYzRCAvKiBW
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCAqLywKIAkJCSk7CkBAIC0yNDI3Nyw2ICsyNDI4Myw3IEBA
CiAJCQkJQkNBMjU3MTUxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4OEUwREYxNzE1RDJBMjAwNjU4RDk4IC8qIFZpZGVvVHJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJFODhFMEUyMTcxNUQyQTIwMDY1OEQ5OCAvKiBWaWRl
b1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRDOTFBMEUxODAyMzQzMTAwQTE3RjZE
IC8qIFRleHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRUYyOUVFQzE3MTVERDA5
MDBDNEI0QzkgLyogVmlkZW9UcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRjQx
OENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJM0ZGRkY5QUUxNTlEOUIwNjAwMjBCQkQ1IC8qIFZpZXdwb3J0U3R5bGVSZXNvbHZlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNTU2MSw2ICsyNTU2OCw3IEBACiAJCQkJN0NFMzBEQTkxNzFC
NjNEMjAwRUMzM0UxIC8qIEZyYW1lU25hcHNob3R0aW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDc5NjlEQUQxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDRGF0YUNoYW5uZWxFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUEyMTQ4NDA5N0EzRjUzMDBCOTA1MEEgLyogRnJhbWVUcmVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0QzkxQTEwMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0
UGFpbnRTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUNCRkVGOTA5NzRGNjA3MDAxREFD
MjUgLyogRnJhbWVWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MjA1QUFGMTIzOTI4Q0Ew
MEIxNzM4MCAvKiBGVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUM4MUI4OTBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAkocmV2aXNpb24gMTU3MDExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgogI2luY2x1ZGUgImJyZWFr
X2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0zMzAsNDggKzMz
MSw3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm8KICAgICByZXR1
cm4gLTE7CiB9CiAKLUNvbG9yIGNvcnJlY3RlZFRleHRDb2xvcihDb2xvciB0ZXh0Q29sb3IsIENv
bG9yIGJhY2tncm91bmRDb2xvcikgCi17Ci0gICAgLy8gQWRqdXN0IHRoZSB0ZXh0IGNvbG9yIGlm
IGl0IGlzIHRvbyBjbG9zZSB0byB0aGUgYmFja2dyb3VuZCBjb2xvciwKLSAgICAvLyBieSBkYXJr
ZW5pbmcgb3IgbGlnaHRlbmluZyBpdCB0byBtb3ZlIGl0IGZ1cnRoZXIgYXdheS4KLSAgICAKLSAg
ICBpbnQgZCA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgYmFja2dyb3VuZENvbG9yKTsK
LSAgICAvLyBzZW1pLWFyYml0cmFyaWx5IGNob3NlIDY1MDI1ICgyNTVeMikgdmFsdWUgaGVyZSBh
ZnRlciBhIGZldyB0ZXN0czsgCi0gICAgaWYgKGQgPiA2NTAyNSkgewotICAgICAgICByZXR1cm4g
dGV4dENvbG9yOwotICAgIH0KLSAgICAKLSAgICBpbnQgZGlzdGFuY2VGcm9tV2hpdGUgPSBkaWZm
ZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9yOjp3aGl0ZSk7Ci0gICAgaW50IGRpc3RhbmNl
RnJvbUJsYWNrID0gZGlmZmVyZW5jZVNxdWFyZWQodGV4dENvbG9yLCBDb2xvcjo6YmxhY2spOwog
Ci0gICAgaWYgKGRpc3RhbmNlRnJvbVdoaXRlIDwgZGlzdGFuY2VGcm9tQmxhY2spIHsKLSAgICAg
ICAgcmV0dXJuIHRleHRDb2xvci5kYXJrKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0ZXh0
Q29sb3IubGlnaHQoKTsKLX0KLQotdm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQot
ewotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUgPSBjb250ZXh0LT50ZXh0RHJhd2luZ01v
ZGUoKTsKLSAgICBpZiAoc3Ryb2tlVGhpY2tuZXNzID4gMCkgewotICAgICAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyBuZXdNb2RlID0gbW9kZSB8IFRleHRNb2RlU3Ryb2tlOwotICAgICAgICBpZiAo
bW9kZSAhPSBuZXdNb2RlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0RHJhd2luZ01v
ZGUobmV3TW9kZSk7Ci0gICAgICAgICAgICBtb2RlID0gbmV3TW9kZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAobW9kZSAmIFRleHRNb2RlRmlsbCAmJiAoZmlsbENvbG9yICE9IGNv
bnRleHQtPmZpbGxDb2xvcigpIHx8IGNvbG9yU3BhY2UgIT0gY29udGV4dC0+ZmlsbENvbG9yU3Bh
Y2UoKSkpCi0gICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIGNvbG9yU3Bh
Y2UpOwotCi0gICAgaWYgKG1vZGUgJiBUZXh0TW9kZVN0cm9rZSkgewotICAgICAgICBpZiAoc3Ry
b2tlQ29sb3IgIT0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKHN0
cm9rZVRoaWNrbmVzcyAhPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MpOwotICAgIH0KLX0K
IAogYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiB7CkBAIC01ODMsOTEg
KzU0MywxMiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAg
Ym9vbCB1c2VDdXN0b21VbmRlcmxpbmVzID0gY29udGFpbnNDb21wb3NpdGlvbiAmJiByZW5kZXJl
cigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25Vc2VzQ3VzdG9tVW5kZXJsaW5lcygpOwog
CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB0ZXh0IGNvbG9ycyBhbmQgc2VsZWN0aW9uIGNvbG9ycy4K
LSAgICBDb2xvciB0ZXh0RmlsbENvbG9yOwotICAgIENvbG9yIHRleHRTdHJva2VDb2xvcjsKLSAg
ICBDb2xvciBlbXBoYXNpc01hcmtDb2xvcjsKLSAgICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGggPSBs
aW5lU3R5bGUudGV4dFN0cm9rZVdpZHRoKCk7Ci0gICAgY29uc3QgU2hhZG93RGF0YSogdGV4dFNo
YWRvdyA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gMCA6IGxpbmVTdHlsZS50ZXh0U2hh
ZG93KCk7CisgICAgVGV4dFBhaW50U3R5bGUgdGV4dFBhaW50U3R5bGUgPSBjb21wdXRlVGV4dFBh
aW50U3R5bGUocmVuZGVyZXIoKSwgbGluZVN0eWxlLCBwYWludEluZm8pOwogCi0gICAgaWYgKHBh
aW50SW5mby5mb3JjZUJsYWNrVGV4dCgpKSB7Ci0gICAgICAgIHRleHRGaWxsQ29sb3IgPSBDb2xv
cjo6YmxhY2s7Ci0gICAgICAgIHRleHRTdHJva2VDb2xvciA9IENvbG9yOjpibGFjazsKLSAgICAg
ICAgZW1waGFzaXNNYXJrQ29sb3IgPSBDb2xvcjo6YmxhY2s7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgdGV4dEZpbGxDb2xvciA9IGxpbmVTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlXZWJraXRUZXh0RmlsbENvbG9yKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgZm9yY2VC
YWNrZ3JvdW5kVG9XaGl0ZSA9IGZhbHNlOwotICAgICAgICBpZiAoaXNQcmludGluZykgewotICAg
ICAgICAgICAgaWYgKGxpbmVTdHlsZS5wcmludENvbG9yQWRqdXN0KCkgPT0gUHJpbnRDb2xvckFk
anVzdEVjb25vbXkpCi0gICAgICAgICAgICAgICAgZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSA9IHRy
dWU7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLnNldHRpbmdzKCkuc2hvdWxk
UHJpbnRCYWNrZ3JvdW5kcygpKQotICAgICAgICAgICAgICAgIGZvcmNlQmFja2dyb3VuZFRvV2hp
dGUgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1ha2UgdGhlIHRleHQgZmlsbCBj
b2xvciBsZWdpYmxlIGFnYWluc3QgYSB3aGl0ZSBiYWNrZ3JvdW5kCi0gICAgICAgIGlmIChmb3Jj
ZUJhY2tncm91bmRUb1doaXRlKQotICAgICAgICAgICAgdGV4dEZpbGxDb2xvciA9IGNvcnJlY3Rl
ZFRleHRDb2xvcih0ZXh0RmlsbENvbG9yLCBDb2xvcjo6d2hpdGUpOwotCi0gICAgICAgIHRleHRT
dHJva2VDb2xvciA9IGxpbmVTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U3Ryb2tlQ29sb3IpOwotICAgICAgICAKLSAgICAgICAgLy8gTWFrZSB0aGUgdGV4
dCBzdHJva2UgY29sb3IgbGVnaWJsZSBhZ2FpbnN0IGEgd2hpdGUgYmFja2dyb3VuZAotICAgICAg
ICBpZiAoZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSkKLSAgICAgICAgICAgIHRleHRTdHJva2VDb2xv
ciA9IGNvcnJlY3RlZFRleHRDb2xvcih0ZXh0U3Ryb2tlQ29sb3IsIENvbG9yOjp3aGl0ZSk7Ci0K
LSAgICAgICAgZW1waGFzaXNNYXJrQ29sb3IgPSBsaW5lU3R5bGUudmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3IpOwotICAgICAgICAKLSAgICAg
ICAgLy8gTWFrZSB0aGUgdGV4dCBzdHJva2UgY29sb3IgbGVnaWJsZSBhZ2FpbnN0IGEgd2hpdGUg
YmFja2dyb3VuZAotICAgICAgICBpZiAoZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSkKLSAgICAgICAg
ICAgIGVtcGhhc2lzTWFya0NvbG9yID0gY29ycmVjdGVkVGV4dENvbG9yKGVtcGhhc2lzTWFya0Nv
bG9yLCBDb2xvcjo6d2hpdGUpOwotICAgIH0KLQotICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRP
bmx5ID0gKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKLSAgICBib29s
IHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IGZhbHNlOwotCi0gICAgQ29sb3Igc2VsZWN0
aW9uRmlsbENvbG9yID0gdGV4dEZpbGxDb2xvcjsKLSAgICBDb2xvciBzZWxlY3Rpb25TdHJva2VD
b2xvciA9IHRleHRTdHJva2VDb2xvcjsKLSAgICBDb2xvciBzZWxlY3Rpb25FbXBoYXNpc01hcmtD
b2xvciA9IGVtcGhhc2lzTWFya0NvbG9yOwotICAgIGZsb2F0IHNlbGVjdGlvblN0cm9rZVdpZHRo
ID0gdGV4dFN0cm9rZVdpZHRoOwotICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlvblNoYWRv
dyA9IHRleHRTaGFkb3c7Ci0gICAgaWYgKGhhdmVTZWxlY3Rpb24pIHsKLSAgICAgICAgLy8gQ2hl
Y2sgZm9yZWdyb3VuZCBjb2xvciBmaXJzdC4KLSAgICAgICAgQ29sb3IgZm9yZWdyb3VuZCA9IHBh
aW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29sb3I6OmJsYWNrIDogcmVuZGVyZXIoKS5zZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgaWYgKGZvcmVncm91bmQuaXNWYWxpZCgp
ICYmIGZvcmVncm91bmQgIT0gc2VsZWN0aW9uRmlsbENvbG9yKSB7Ci0gICAgICAgICAgICBpZiAo
IXBhaW50U2VsZWN0ZWRUZXh0T25seSkKLSAgICAgICAgICAgICAgICBwYWludFNlbGVjdGVkVGV4
dFNlcGFyYXRlbHkgPSB0cnVlOwotICAgICAgICAgICAgc2VsZWN0aW9uRmlsbENvbG9yID0gZm9y
ZWdyb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgIENvbG9yIGVtcGhhc2lzTWFya0ZvcmVncm91
bmQgPSBwYWludEluZm8uZm9yY2VCbGFja1RleHQoKSA/IENvbG9yOjpibGFjayA6IHJlbmRlcmVy
KCkuc2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IoKTsKLSAgICAgICAgaWYgKGVtcGhhc2lzTWFy
a0ZvcmVncm91bmQuaXNWYWxpZCgpICYmIGVtcGhhc2lzTWFya0ZvcmVncm91bmQgIT0gc2VsZWN0
aW9uRW1waGFzaXNNYXJrQ29sb3IpIHsKLSAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRl
eHRPbmx5KQotICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRy
dWU7Ci0gICAgICAgICAgICBzZWxlY3Rpb25FbXBoYXNpc01hcmtDb2xvciA9IGVtcGhhc2lzTWFy
a0ZvcmVncm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVk
b1N0eWxlID0gcmVuZGVyZXIoKS5nZXRDYWNoZWRQc2V1ZG9TdHlsZShTRUxFQ1RJT04pKSB7Ci0g
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBwYWludEluZm8uZm9yY2VCbGFj
a1RleHQoKSA/IDAgOiBwc2V1ZG9TdHlsZS0+dGV4dFNoYWRvdygpOwotICAgICAgICAgICAgaWYg
KHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhaW50
U2VsZWN0ZWRUZXh0T25seSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRTZWxlY3RlZFRleHRT
ZXBhcmF0ZWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25TaGFkb3cgPSBzaGFk
b3c7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gcHNl
dWRvU3R5bGUtPnRleHRTdHJva2VXaWR0aCgpOwotICAgICAgICAgICAgaWYgKHN0cm9rZVdpZHRo
ICE9IHNlbGVjdGlvblN0cm9rZVdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYWludFNl
bGVjdGVkVGV4dE9ubHkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2Vw
YXJhdGVseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3Ryb2tlV2lkdGggPSBz
dHJva2VXaWR0aDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29sb3Igc3Ryb2tlID0g
cGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyBDb2xvcjo6YmxhY2sgOiBwc2V1ZG9TdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsK
LSAgICAgICAgICAgIGlmIChzdHJva2UgIT0gc2VsZWN0aW9uU3Ryb2tlQ29sb3IpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKLSAgICAgICAgICAgICAgICAg
ICAgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBz
ZWxlY3Rpb25TdHJva2VDb2xvciA9IHN0cm9rZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KKyAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seTsKKyAgICBib29sIHBhaW50U2Vs
ZWN0ZWRUZXh0U2VwYXJhdGVseTsKKyAgICBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFk
b3c7CisgICAgVGV4dFBhaW50U3R5bGUgc2VsZWN0aW9uUGFpbnRTdHlsZSA9IGNvbXB1dGVUZXh0
U2VsZWN0aW9uUGFpbnRTdHlsZSh0ZXh0UGFpbnRTdHlsZSwgcmVuZGVyZXIoKSwgbGluZVN0eWxl
LCBwYWludEluZm8sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgcGFpbnRTZWxlY3RlZFRleHRTZXBh
cmF0ZWx5LCBzZWxlY3Rpb25TaGFkb3cpOwogCiAgICAgLy8gU2V0IG91ciBmb250LgogICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKQEAgLTY5
NCw3ICs1NzUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAg
ICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQsIGJveE9yaWdpbiwgbGluZVN0eWxl
LCBmb250LCB0cnVlKTsKIAogICAgICAgICBpZiAoaGF2ZVNlbGVjdGlvbiAmJiAhdXNlQ3VzdG9t
VW5kZXJsaW5lcykKLSAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIGJveE9yaWdp
biwgbGluZVN0eWxlLCBmb250LCBzZWxlY3Rpb25GaWxsQ29sb3IpOworICAgICAgICAgICAgcGFp
bnRTZWxlY3Rpb24oY29udGV4dCwgYm94T3JpZ2luLCBsaW5lU3R5bGUsIGZvbnQsIHNlbGVjdGlv
blBhaW50U3R5bGUuZmlsbENvbG9yKTsKICAgICB9CiAKICAgICBpZiAoUGFnZSogcGFnZSA9IHJl
bmRlcmVyKCkuZnJhbWUoKS5wYWdlKCkpIHsKQEAgLTc0NSwyMCArNjI2LDIyIEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBpZiAoIWVtcGhhc2lzTWFyay5p
c0VtcHR5KCkpCiAgICAgICAgIGVtcGhhc2lzTWFya09mZnNldCA9IGVtcGhhc2lzTWFya1Bvc2l0
aW9uID09IFRleHRFbXBoYXNpc1Bvc2l0aW9uT3ZlciA/IC1mb250LmZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkgLSBmb250LmVtcGhhc2lzTWFya0Rlc2NlbnQoZW1waGFzaXNNYXJrKSA6IGZvbnQuZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCkgKyBmb250LmVtcGhhc2lzTWFya0FzY2VudChlbXBoYXNpc01h
cmspOwogCisgICAgY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdyA9IHBhaW50SW5mby5mb3Jj
ZUJsYWNrVGV4dCgpID8gMCA6IGxpbmVTdHlsZS50ZXh0U2hhZG93KCk7CisKICAgICBpZiAoIXBh
aW50U2VsZWN0ZWRUZXh0T25seSkgewogICAgICAgICAvLyBGb3Igc3Ryb2tlZCBwYWludGluZywg
d2UgaGF2ZSB0byBjaGFuZ2UgdGhlIHRleHQgZHJhd2luZyBtb2RlLiAgSXQncyBwcm9iYWJseSBk
YW5nZXJvdXMgdG8gbGVhdmUgdGhhdCBtdXRhdGVkIGFzIGEgc2lkZQogICAgICAgICAvLyBlZmZl
Y3QsIHNvIG9ubHkgd2hlbiB3ZSBrbm93IHdlJ3JlIHN0cm9raW5nLCBkbyBhIHNhdmUvcmVzdG9y
ZS4KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0
LCB0ZXh0U3Ryb2tlV2lkdGggPiAwKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpjb250ZXh0LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDApOwog
Ci0gICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCB0ZXh0RmlsbENvbG9yLCB0
ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGluZVN0eWxlLmNvbG9yU3BhY2UoKSk7
CisgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dCgqY29udGV4dCwgdGV4dFBhaW50U3R5bGUp
OwogICAgICAgICBpZiAoIXBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSB8fCBlUG9zIDw9IHNQ
b3MpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUcnVuY2F0ZSByaWdodC10by1sZWZ0IHRleHQg
Y29ycmVjdGx5LgotICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgZm9u
dCwgdGV4dFJ1biwgbnVsbEF0b20sIDAsIDAsIGxlbmd0aCwgbGVuZ3RoLCB0ZXh0T3JpZ2luLCBi
b3hSZWN0LCB0ZXh0U2hhZG93LCB0ZXh0U3Ryb2tlV2lkdGggPiAwLCBpc0hvcml6b250YWwoKSk7
CisgICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVu
LCBudWxsQXRvbSwgMCwgMCwgbGVuZ3RoLCBsZW5ndGgsIHRleHRPcmlnaW4sIGJveFJlY3QsIHRl
eHRTaGFkb3csIHRleHRQYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgaXNIb3Jpem9udGFsKCkp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIGZvbnQsIHRleHRSdW4sIG51bGxBdG9tLCAwLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRP
cmlnaW4sIGJveFJlY3QsIHRleHRTaGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpv
bnRhbCgpKTsKKyAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQs
IHRleHRSdW4sIG51bGxBdG9tLCAwLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4sIGJv
eFJlY3QsIHRleHRTaGFkb3csIHRleHRQYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgaXNIb3Jp
em9udGFsKCkpOwogCiAgICAgICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGVtcGhhc2lzTWFya0NvbG9y
LCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGluZVN0eWxlLmNvbG9yU3BhY2Uo
KSk7CisgICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoKmNvbnRleHQsIHRleHRQYWlu
dFN0eWxlLCBVc2VFbXBoYXNpc01hcmtDb2xvcik7CiAKICAgICAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBo
YXNpc01hcmtUZXh0UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0
ZXJUZXh0UnVuIDogdGV4dFJ1bjsKQEAgLTc2OCw5ICs2NTEsOSBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3Rl
ZFRleHRTZXBhcmF0ZWx5IHx8IGVQb3MgPD0gc1BvcykgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUcnVuY2F0ZSByaWdodC10by1sZWZ0IHRleHQgY29ycmVjdGx5LgotICAgICAgICAgICAg
ICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGNvbWJpbmVkVGV4dCA/IGNvbWJpbmVk
VGV4dC0+b3JpZ2luYWxGb250KCkgOiBmb250LCBlbXBoYXNpc01hcmtUZXh0UnVuLCBlbXBoYXNp
c01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgMCwgbGVuZ3RoLCBsZW5ndGgsIGVtcGhhc2lzTWFy
a1RleHRPcmlnaW4sIGJveFJlY3QsIHRleHRTaGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDAsIGlz
SG9yaXpvbnRhbCgpKTsKKyAgICAgICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250
ZXh0LCBjb21iaW5lZFRleHQgPyBjb21iaW5lZFRleHQtPm9yaWdpbmFsRm9udCgpIDogZm9udCwg
ZW1waGFzaXNNYXJrVGV4dFJ1biwgZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIDAs
IGxlbmd0aCwgbGVuZ3RoLCBlbXBoYXNpc01hcmtUZXh0T3JpZ2luLCBib3hSZWN0LCB0ZXh0U2hh
ZG93LCB0ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpvbnRhbCgpKTsKICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNv
bnRleHQsIGNvbWJpbmVkVGV4dCA/IGNvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBmb250
LCBlbXBoYXNpc01hcmtUZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwg
ZVBvcywgc1BvcywgbGVuZ3RoLCBlbXBoYXNpc01hcmtUZXh0T3JpZ2luLCBib3hSZWN0LCB0ZXh0
U2hhZG93LCB0ZXh0U3Ryb2tlV2lkdGggPiAwLCBpc0hvcml6b250YWwoKSk7CisgICAgICAgICAg
ICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgY29tYmluZWRUZXh0ID8gY29tYmlu
ZWRUZXh0LT5vcmlnaW5hbEZvbnQoKSA6IGZvbnQsIGVtcGhhc2lzTWFya1RleHRSdW4sIGVtcGhh
c2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBlUG9zLCBzUG9zLCBsZW5ndGgsIGVtcGhhc2lz
TWFya1RleHRPcmlnaW4sIGJveFJlY3QsIHRleHRTaGFkb3csIHRleHRQYWludFN0eWxlLnN0cm9r
ZVdpZHRoID4gMCwgaXNIb3Jpem9udGFsKCkpOwogCiAgICAgICAgICAgICBpZiAoY29tYmluZWRU
ZXh0KQogICAgICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0
LCBDb3VudGVyY2xvY2t3aXNlKSk7CkBAIC03NzksMTIgKzY2MiwxMiBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAgICBpZiAoKHBhaW50U2VsZWN0ZWRUZXh0
T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpICYmIHNQb3MgPCBlUG9zKSB7CiAg
ICAgICAgIC8vIHBhaW50IG9ubHkgdGhlIHRleHQgdGhhdCBpcyBzZWxlY3RlZAotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIHNlbGVjdGlvblN0
cm9rZVdpZHRoID4gMCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqY29udGV4dCwgc2VsZWN0aW9uUGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDApOwogCi0g
ICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250ZXh0LCBzZWxlY3Rpb25GaWxsQ29sb3Is
IHNlbGVjdGlvblN0cm9rZUNvbG9yLCBzZWxlY3Rpb25TdHJva2VXaWR0aCwgbGluZVN0eWxlLmNv
bG9yU3BhY2UoKSk7Ci0gICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQs
IHRleHRSdW4sIG51bGxBdG9tLCAwLCBzUG9zLCBlUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4sIGJv
eFJlY3QsIHNlbGVjdGlvblNoYWRvdywgc2VsZWN0aW9uU3Ryb2tlV2lkdGggPiAwLCBpc0hvcml6
b250YWwoKSk7CisgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dCgqY29udGV4dCwgc2VsZWN0
aW9uUGFpbnRTdHlsZSk7CisgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZv
bnQsIHRleHRSdW4sIG51bGxBdG9tLCAwLCBzUG9zLCBlUG9zLCBsZW5ndGgsIHRleHRPcmlnaW4s
IGJveFJlY3QsIHNlbGVjdGlvblNoYWRvdywgc2VsZWN0aW9uUGFpbnRTdHlsZS5zdHJva2VXaWR0
aCA+IDAsIGlzSG9yaXpvbnRhbCgpKTsKICAgICAgICAgaWYgKCFlbXBoYXNpc01hcmsuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgc2VsZWN0
aW9uRW1waGFzaXNNYXJrQ29sb3IsIHRleHRTdHJva2VDb2xvciwgdGV4dFN0cm9rZVdpZHRoLCBs
aW5lU3R5bGUuY29sb3JTcGFjZSgpKTsKKyAgICAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4
dCgqY29udGV4dCwgc2VsZWN0aW9uUGFpbnRTdHlsZSwgVXNlRW1waGFzaXNNYXJrQ29sb3IpOwog
CiAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwog
ICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/
IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRSdW47CkBAIC03OTIsNyAr
Njc1LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAg
ICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRD
VE0ocm90YXRpb24oYm94UmVjdCwgQ2xvY2t3aXNlKSk7CiAKLSAgICAgICAgICAgIHBhaW50VGV4
dFdpdGhTaGFkb3dzKGNvbnRleHQsIGNvbWJpbmVkVGV4dCA/IGNvbWJpbmVkVGV4dC0+b3JpZ2lu
YWxGb250KCkgOiBmb250LCBlbXBoYXNpc01hcmtUZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhh
c2lzTWFya09mZnNldCwgc1BvcywgZVBvcywgbGVuZ3RoLCBlbXBoYXNpc01hcmtUZXh0T3JpZ2lu
LCBib3hSZWN0LCBzZWxlY3Rpb25TaGFkb3csIHNlbGVjdGlvblN0cm9rZVdpZHRoID4gMCwgaXNI
b3Jpem9udGFsKCkpOworICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwg
Y29tYmluZWRUZXh0ID8gY29tYmluZWRUZXh0LT5vcmlnaW5hbEZvbnQoKSA6IGZvbnQsIGVtcGhh
c2lzTWFya1RleHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCBzUG9zLCBl
UG9zLCBsZW5ndGgsIGVtcGhhc2lzTWFya1RleHRPcmlnaW4sIGJveFJlY3QsIHNlbGVjdGlvblNo
YWRvdywgc2VsZWN0aW9uUGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAsIGlzSG9yaXpvbnRhbCgp
KTsKIAogICAgICAgICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKICAgICAgICAgICAgICAgICBjb250
ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwpAQCAt
ODAyLDcgKzY4NSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkK
ICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwogICAgIFRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0
aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICh0ZXh0
RGVjb3JhdGlvbnMgIT0gVGV4dERlY29yYXRpb25Ob25lICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZWN0aW9uKSB7Ci0gICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb250
ZXh0LCB0ZXh0RmlsbENvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgbGlu
ZVN0eWxlLmNvbG9yU3BhY2UoKSk7CisgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dCgqY29u
dGV4dCwgdGV4dFBhaW50U3R5bGUpOwogICAgICAgICBpZiAoY29tYmluZWRUZXh0KQogICAgICAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENsb2Nrd2lzZSkpOwog
ICAgICAgICBwYWludERlY29yYXRpb24oY29udGV4dCwgYm94T3JpZ2luLCB0ZXh0RGVjb3JhdGlv
bnMsIGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlKCksIHRleHRTaGFkb3cpOwpAQCAtODg5
LDcgKzc3Miw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKICAg
ICAgICAgYyA9IENvbG9yKDB4ZmYgLSBjLnJlZCgpLCAweGZmIC0gYy5ncmVlbigpLCAweGZmIC0g
Yy5ibHVlKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpj
b250ZXh0KTsKLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgYywgYywgMCwgc3R5
bGUuY29sb3JTcGFjZSgpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoKmNvbnRleHQsIFRleHRQYWludFN0eWxlKGMsIHN0eWxlLmNvbG9yU3Bh
Y2UoKSkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogICAgIAogICAgIC8vIElmIHRoZSB0
ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVu
Y2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KQEAgLTkzNiw3ICs4MTksNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrCiAKICAgICBDb2xvciBj
ID0gQ29sb3IoMjI1LCAyMjEsIDg1KTsKICAgICAKLSAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29udGV4dCwgYywgYywgMCwgc3R5bGUuY29sb3JTcGFjZSgpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0
IGF0IGFsbCEKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoKmNvbnRleHQsIFRleHRQYWludFN0
eWxlKGMsIHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQog
CiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0
aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2Fs
VG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVp
Z2h0KCk7CkBAIC0xMzkxLDcgKzEyNzQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4
dE1hdGNoTWFya2VyCiAgICAgICAgICAgICByZW5kZXJlcigpLnRoZW1lKCktPnBsYXRmb3JtQWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgOgogICAgICAgICAgICAgcmVuZGVyZXIoKS50
aGVtZSgpLT5wbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCk7CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcHQpOwotICAgICAgICB1
cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5bGUuY29sb3JTcGFj
ZSgpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgdXBkYXRlR3JhcGhpY3ND
b250ZXh0KCpwdCwgVGV4dFBhaW50U3R5bGUoY29sb3IsIHN0eWxlLmNvbG9yU3BhY2UoKSkpOyAv
LyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQogICAgICAgICBwdC0+Y2xpcChGbG9hdFJlY3QoYm94
T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwgbV9sb2dpY2FsV2lkdGgsIHNlbEhl
aWdodCkpOwogICAgICAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgcnVuLCBGbG9h
dFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpLCBzZWxIZWlnaHQs
IGNvbG9yLCBzdHlsZS5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMTU3MDEwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTAgKzQxLDYgQEAgcHVibGljOgogICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhl
bigpIHsgcmVzZXJ2ZUNhcGFjaXR5KDI1Nik7IH0KIH07CiAKLS8vIEhlbHBlciBmdW5jdGlvbnMg
c2hhcmVkIGJ5IElubGluZVRleHRCb3ggLyBTVkdSb290SW5saW5lQm94Ci12b2lkIHVwZGF0ZUdy
YXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBDb2xvciYgZmlsbENvbG9yLCBj
b25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgQ29sb3JTcGFj
ZSk7Ci1Db2xvciBjb3JyZWN0ZWRUZXh0Q29sb3IoQ29sb3IgdGV4dENvbG9yLCBDb2xvciBiYWNr
Z3JvdW5kQ29sb3IpOwotCiBjbGFzcyBJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZUJveCB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5saW5lVGV4dEJveChSZW5kZXJUZXh0JiByZW5kZXJl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKKworI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworVGV4dFBhaW50U3R5bGU6OlRleHRQYWludFN0eWxlKCkKKyAgICA6IHN0
cm9rZVdpZHRoKDApCit7Cit9CisKK1RleHRQYWludFN0eWxlOjpUZXh0UGFpbnRTdHlsZShDb2xv
ciBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogY29sb3JTcGFjZShjb2xvclNw
YWNlKQorICAgICwgZmlsbENvbG9yKGNvbG9yKQorICAgICwgc3Ryb2tlQ29sb3IoY29sb3IpCisg
ICAgLCBzdHJva2VXaWR0aCgwKQoreworfQorCitzdGF0aWMgQ29sb3IgY29ycmVjdGVkVGV4dENv
bG9yKENvbG9yIHRleHRDb2xvciwgQ29sb3IgYmFja2dyb3VuZENvbG9yKQoreworICAgIC8vIEFk
anVzdCB0aGUgdGV4dCBjb2xvciBpZiBpdCBpcyB0b28gY2xvc2UgdG8gdGhlIGJhY2tncm91bmQg
Y29sb3IsCisgICAgLy8gYnkgZGFya2VuaW5nIG9yIGxpZ2h0ZW5pbmcgaXQgdG8gbW92ZSBpdCBm
dXJ0aGVyIGF3YXkuCisgICAgCisgICAgaW50IGQgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29s
b3IsIGJhY2tncm91bmRDb2xvcik7CisgICAgLy8gU2VtaS1hcmJpdHJhcmlseSBjaG9zZSA2NTAy
NSAoMjU1XjIpIHZhbHVlIGhlcmUgYWZ0ZXIgYSBmZXcgdGVzdHMuCisgICAgaWYgKGQgPiA2NTAy
NSkKKyAgICAgICAgcmV0dXJuIHRleHRDb2xvcjsKKworICAgIGludCBkaXN0YW5jZUZyb21XaGl0
ZSA9IGRpZmZlcmVuY2VTcXVhcmVkKHRleHRDb2xvciwgQ29sb3I6OndoaXRlKTsKKyAgICBpbnQg
ZGlzdGFuY2VGcm9tQmxhY2sgPSBkaWZmZXJlbmNlU3F1YXJlZCh0ZXh0Q29sb3IsIENvbG9yOjpi
bGFjayk7CisgICAgaWYgKGRpc3RhbmNlRnJvbVdoaXRlIDwgZGlzdGFuY2VGcm9tQmxhY2spCisg
ICAgICAgIHJldHVybiB0ZXh0Q29sb3IuZGFyaygpOworCisgICAgcmV0dXJuIHRleHRDb2xvci5s
aWdodCgpOworfQorCitUZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4dFBhaW50U3R5bGUoY29uc3Qg
UmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIFRleHRQYWludFN0eWxlIHBhaW50U3R5bGU7
CisgICAgcGFpbnRTdHlsZS5jb2xvclNwYWNlID0gbGluZVN0eWxlLmNvbG9yU3BhY2UoKTsKKyAg
ICBwYWludFN0eWxlLnN0cm9rZVdpZHRoID0gbGluZVN0eWxlLnRleHRTdHJva2VXaWR0aCgpOwor
CisgICAgaWYgKHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpKSB7CisgICAgICAgIHBhaW50U3R5
bGUuZmlsbENvbG9yID0gQ29sb3I6OmJsYWNrOworICAgICAgICBwYWludFN0eWxlLnN0cm9rZUNv
bG9yID0gQ29sb3I6OmJsYWNrOworICAgICAgICBwYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9y
ID0gQ29sb3I6OmJsYWNrOworICAgICAgICByZXR1cm4gcGFpbnRTdHlsZTsKKyAgICB9CisgICAg
cGFpbnRTdHlsZS5maWxsQ29sb3IgPSBsaW5lU3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcik7CisKKyAgICBib29sIGZvcmNlQmFja2dyb3Vu
ZFRvV2hpdGUgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGluZygp
KSB7CisgICAgICAgIGlmIChsaW5lU3R5bGUucHJpbnRDb2xvckFkanVzdCgpID09IFByaW50Q29s
b3JBZGp1c3RFY29ub215KQorICAgICAgICAgICAgZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSA9IHRy
dWU7CisgICAgICAgIGlmIChyZW5kZXJlci5mcmFtZSgpLnNldHRpbmdzKCkuc2hvdWxkUHJpbnRC
YWNrZ3JvdW5kcygpKQorICAgICAgICAgICAgZm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSA9IGZhbHNl
OworICAgIH0KKworICAgIC8vIE1ha2UgdGhlIHRleHQgZmlsbCBjb2xvciBsZWdpYmxlIGFnYWlu
c3QgYSB3aGl0ZSBiYWNrZ3JvdW5kCisgICAgaWYgKGZvcmNlQmFja2dyb3VuZFRvV2hpdGUpCisg
ICAgICAgIHBhaW50U3R5bGUuZmlsbENvbG9yID0gY29ycmVjdGVkVGV4dENvbG9yKHBhaW50U3R5
bGUuZmlsbENvbG9yLCBDb2xvcjo6d2hpdGUpOworCisgICAgcGFpbnRTdHlsZS5zdHJva2VDb2xv
ciA9IGxpbmVTdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
U3Ryb2tlQ29sb3IpOworCisgICAgLy8gTWFrZSB0aGUgdGV4dCBzdHJva2UgY29sb3IgbGVnaWJs
ZSBhZ2FpbnN0IGEgd2hpdGUgYmFja2dyb3VuZAorICAgIGlmIChmb3JjZUJhY2tncm91bmRUb1do
aXRlKQorICAgICAgICBwYWludFN0eWxlLnN0cm9rZUNvbG9yID0gY29ycmVjdGVkVGV4dENvbG9y
KHBhaW50U3R5bGUuc3Ryb2tlQ29sb3IsIENvbG9yOjp3aGl0ZSk7CisKKyAgICBwYWludFN0eWxl
LmVtcGhhc2lzTWFya0NvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yKTsKKworICAgIC8vIE1ha2UgdGhlIHRleHQg
c3Ryb2tlIGNvbG9yIGxlZ2libGUgYWdhaW5zdCBhIHdoaXRlIGJhY2tncm91bmQKKyAgICBpZiAo
Zm9yY2VCYWNrZ3JvdW5kVG9XaGl0ZSkKKyAgICAgICAgcGFpbnRTdHlsZS5lbXBoYXNpc01hcmtD
b2xvciA9IGNvcnJlY3RlZFRleHRDb2xvcihwYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yLCBD
b2xvcjo6d2hpdGUpOworCisgICAgcmV0dXJuIHBhaW50U3R5bGU7Cit9CisKK1RleHRQYWludFN0
eWxlIGNvbXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHlsZSYg
dGV4dFBhaW50U3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYm9vbCYgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5LCBib29sJiBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHksIGNvbnN0
IFNoYWRvd0RhdGEqJiBzZWxlY3Rpb25TaGFkb3cpCit7CisgICAgcGFpbnRTZWxlY3RlZFRleHRP
bmx5ID0gKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKKyAgICBwYWlu
dFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSBmYWxzZTsKKyAgICBjb25zdCBTaGFkb3dEYXRhKiB0
ZXh0U2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyAwIDogbGluZVN0eWxlLnRl
eHRTaGFkb3coKTsKKworICAgIFRleHRQYWludFN0eWxlIHNlbGVjdGlvblBhaW50U3R5bGUgPSB0
ZXh0UGFpbnRTdHlsZTsKKworICAgIHNlbGVjdGlvblNoYWRvdyA9IHRleHRTaGFkb3c7CisgICAg
Q29sb3IgZm9yZWdyb3VuZCA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29sb3I6OmJs
YWNrIDogcmVuZGVyZXIuc2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CisgICAgaWYgKGZvcmVn
cm91bmQuaXNWYWxpZCgpICYmIGZvcmVncm91bmQgIT0gc2VsZWN0aW9uUGFpbnRTdHlsZS5maWxs
Q29sb3IpIHsKKyAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgICAgICAg
ICBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSB0cnVlOworICAgICAgICBzZWxlY3Rpb25Q
YWludFN0eWxlLmZpbGxDb2xvciA9IGZvcmVncm91bmQ7CisgICAgfQorCisgICAgQ29sb3IgZW1w
aGFzaXNNYXJrRm9yZWdyb3VuZCA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCgpID8gQ29sb3I6
OmJsYWNrIDogcmVuZGVyZXIuc2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IoKTsKKyAgICBpZiAo
ZW1waGFzaXNNYXJrRm9yZWdyb3VuZC5pc1ZhbGlkKCkgJiYgZW1waGFzaXNNYXJrRm9yZWdyb3Vu
ZCAhPSBzZWxlY3Rpb25QYWludFN0eWxlLmVtcGhhc2lzTWFya0NvbG9yKSB7CisgICAgICAgIGlm
ICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgcGFpbnRTZWxlY3RlZFRleHRT
ZXBhcmF0ZWx5ID0gdHJ1ZTsKKyAgICAgICAgc2VsZWN0aW9uUGFpbnRTdHlsZS5lbXBoYXNpc01h
cmtDb2xvciA9IGVtcGhhc2lzTWFya0ZvcmVncm91bmQ7CisgICAgfQorCisgICAgaWYgKFJlbmRl
clN0eWxlKiBwc2V1ZG9TdHlsZSA9IHJlbmRlcmVyLmdldENhY2hlZFBzZXVkb1N0eWxlKFNFTEVD
VElPTikpIHsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZv
cmNlQmxhY2tUZXh0KCkgPyAwIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKKyAgICAgICAg
aWYgKHNoYWRvdyAhPSBzZWxlY3Rpb25TaGFkb3cpIHsKKyAgICAgICAgICAgIGlmICghcGFpbnRT
ZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJh
dGVseSA9IHRydWU7CisgICAgICAgICAgICBzZWxlY3Rpb25TaGFkb3cgPSBzaGFkb3c7CisgICAg
ICAgIH0KKworICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHBzZXVkb1N0eWxlLT50ZXh0U3Ry
b2tlV2lkdGgoKTsKKyAgICAgICAgaWYgKHN0cm9rZVdpZHRoICE9IHNlbGVjdGlvblBhaW50U3R5
bGUuc3Ryb2tlV2lkdGgpIHsKKyAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5
KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IHRydWU7Cisg
ICAgICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID0gc3Ryb2tlV2lkdGg7
CisgICAgICAgIH0KKworICAgICAgICBDb2xvciBzdHJva2UgPSBwYWludEluZm8uZm9yY2VCbGFj
a1RleHQoKSA/IENvbG9yOjpibGFjayA6IHBzZXVkb1N0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOworICAgICAgICBpZiAoc3Ryb2tl
ICE9IHNlbGVjdGlvblBhaW50U3R5bGUuc3Ryb2tlQ29sb3IpIHsKKyAgICAgICAgICAgIGlmICgh
cGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICAgICAgICAgIHBhaW50U2VsZWN0ZWRUZXh0
U2VwYXJhdGVseSA9IHRydWU7CisgICAgICAgICAgICBzZWxlY3Rpb25QYWludFN0eWxlLnN0cm9r
ZUNvbG9yID0gc3Ryb2tlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzZWxlY3Rpb25Q
YWludFN0eWxlOworfQorCit2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRQYWludFN0eWxlJiBwYWludFN0eWxlLCBTdHJva2VDb2xv
clR5cGUgc3Ryb2tlQ29sb3JUeXBlKQoreworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUg
PSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpOworICAgIGlmIChwYWludFN0eWxlLnN0cm9rZVdp
ZHRoID4gMCkgeworICAgICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyBuZXdNb2RlID0gbW9kZSB8
IFRleHRNb2RlU3Ryb2tlOworICAgICAgICBpZiAobW9kZSAhPSBuZXdNb2RlKSB7CisgICAgICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShuZXdNb2RlKTsKKyAgICAgICAgICAgIG1v
ZGUgPSBuZXdNb2RlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChtb2RlICYgVGV4
dE1vZGVGaWxsICYmIChwYWludFN0eWxlLmZpbGxDb2xvciAhPSBjb250ZXh0LmZpbGxDb2xvcigp
IHx8IHBhaW50U3R5bGUuY29sb3JTcGFjZSAhPSBjb250ZXh0LmZpbGxDb2xvclNwYWNlKCkpKQor
ICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihwYWludFN0eWxlLmZpbGxDb2xvciwgcGFpbnRT
dHlsZS5jb2xvclNwYWNlKTsKKworICAgIGlmIChtb2RlICYgVGV4dE1vZGVTdHJva2UpIHsKKyAg
ICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvclR5cGUgPT0gVXNlTm9ybWFsU3Ry
b2tlQ29sb3IgPyBwYWludFN0eWxlLnN0cm9rZUNvbG9yIDogcGFpbnRTdHlsZS5lbXBoYXNpc01h
cmtDb2xvcjsKKyAgICAgICAgaWYgKHN0cm9rZUNvbG9yICE9IGNvbnRleHQuc3Ryb2tlQ29sb3Io
KSkKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IsIHBhaW50
U3R5bGUuY29sb3JTcGFjZSk7CisgICAgICAgIGlmIChwYWludFN0eWxlLnN0cm9rZVdpZHRoICE9
IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCkpCisgICAgICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcyhwYWludFN0eWxlLnN0cm9rZVdpZHRoKTsKKyAgICB9Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dFBhaW50U3R5bGVf
aAorI2RlZmluZSBUZXh0UGFpbnRTdHlsZV9oCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkNvbG9yU3BhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBSZW5kZXJUZXh0OworY2xhc3MgUmVuZGVyU3R5bGU7CitjbGFzcyBT
aGFkb3dEYXRhOworc3RydWN0IFBhaW50SW5mbzsKKworc3RydWN0IFRleHRQYWludFN0eWxlIHsK
KyAgICBUZXh0UGFpbnRTdHlsZSgpOworICAgIFRleHRQYWludFN0eWxlKENvbG9yLCBDb2xvclNw
YWNlKTsKKworICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICBDb2xvciBmaWxsQ29sb3I7
CisgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CisgICAgQ29sb3IgZW1waGFzaXNNYXJrQ29sb3I7Cisg
ICAgZmxvYXQgc3Ryb2tlV2lkdGg7Cit9OworCitUZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4dFBh
aW50U3R5bGUoY29uc3QgUmVuZGVyVGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUGFp
bnRJbmZvJik7CitUZXh0UGFpbnRTdHlsZSBjb21wdXRlVGV4dFNlbGVjdGlvblBhaW50U3R5bGUo
Y29uc3QgVGV4dFBhaW50U3R5bGUmLCBjb25zdCBSZW5kZXJUZXh0JiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBQYWludEluZm8mLCBib29sJiBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wm
IHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSwgY29uc3QgU2hhZG93RGF0YSomIHNlbGVjdGlv
blNoYWRvdyk7CisKK2VudW0gU3Ryb2tlQ29sb3JUeXBlIHsgVXNlTm9ybWFsU3Ryb2tlQ29sb3Is
IFVzZUVtcGhhc2lzTWFya0NvbG9yIH07Cit2b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UGFpbnRTdHlsZSYsIFN0cm9rZUNvbG9yVHlwZSA9IFVz
ZU5vcm1hbFN0cm9rZUNvbG9yKTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>