<?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>241106</bug_id>
          
          <creation_ts>2022-05-30 11:18:02 -0700</creation_ts>
          <short_desc>[LFC][FFC] Move core flex layout to FlexLayout</short_desc>
          <delta_ts>2022-05-30 18:27:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1872788</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-05-30 11:18:02 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872789</commentid>
    <comment_count>1</comment_count>
      <attachid>459868</attachid>
    <who name="alan">zalan</who>
    <bug_when>2022-05-30 11:20:13 -0700</bug_when>
    <thetext>Created attachment 459868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872794</commentid>
    <comment_count>2</comment_count>
      <attachid>459868</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2022-05-30 11:35:44 -0700</bug_when>
    <thetext>Comment on attachment 459868
Patch

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

&gt; Source/WebCore/layout/formattingContexts/flex/FlexLayout.h:39
&gt; +class FlexLayout {

There is LayoutIntegration::FlexLayout too but maybe that is ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872852</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-05-30 18:26:47 -0700</bug_when>
    <thetext>Committed r295039 (251134@main): &lt;https://commits.webkit.org/251134@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 459868.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1872853</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-30 18:27:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/94125967&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459868</attachid>
            <date>2022-05-30 11:20:13 -0700</date>
            <delta_ts>2022-05-30 18:26:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-241106-20220530112012.patch</filename>
            <type>text/plain</type>
            <size>52369</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">RnJvbSBmZjI1ZGE2OWQ3ZTZiZDc5ZTU4ZjhmZjM1ZWJlODlkZDJjNzMyMjBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFuIEJ1anRhcyA8emFsYW5AYXBwbGUuY29tPgpEYXRlOiBN
b24sIDMwIE1heSAyMDIyIDExOjE4OjE1IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gW0xGQ11bRkZD
XSBNb3ZlIGNvcmUgZmxleCBsYXlvdXQgdG8gRmxleExheW91dAogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTEwNgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CgoqIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2U6CiogU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQ6CiogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwOgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbnZlcnRGbGV4SXRlbXNUb0xvZ2ljYWxTcGFjZSk6CihXZWJDb3JlOjpMYXlvdXQ6OkZs
ZXhGb3JtYXR0aW5nQ29udGV4dDo6c2V0RmxleEl0ZW1zR2VvbWV0cnkpOgooV2ViQ29yZTo6TGF5
b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnRGb3JJbnRlZ3Jh
dGlvbik6CihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUF2
YWlsYWJsZUxvZ2ljYWxWZXJ0aWNhbFNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKFdlYkNvcmU6Okxh
eW91dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQXZhaWxhYmxlTG9naWNhbEhvcml6
b250YWxTcGFjZSBjb25zdCk6IERlbGV0ZWQuCihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEZvclNocmlua2luZ0ZsZXhJdGVtcyk6IERl
bGV0ZWQuCihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEZvclN0cmV0Y2hpbmdGbGV4SXRlbXMpOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5
b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVMb2dpY2FsV2lkdGhGb3JGbGV4SXRl
bXMpOiBEZWxldGVkLgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVMb2dpY2FsSGVpZ2h0Rm9yRmxleEl0ZW1zKTogRGVsZXRlZC4KKFdlYkNvcmU6OkxheW91
dDo6RmxleEZvcm1hdHRpbmdDb250ZXh0OjphbGlnbkZsZXhJdGVtcyk6IERlbGV0ZWQuCihXZWJD
b3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nQ29udGV4dDo6anVzdGlmeUZsZXhJdGVtcyk6IERl
bGV0ZWQuCiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nQ29udGV4dC5oOgoqIFNvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvZmxleC9GbGV4TGF5b3V0LmNwcDogQWRkZWQuCihXZWJDb3JlOjpMYXlvdXQ6OkZs
ZXhMYXlvdXQ6OkZsZXhMYXlvdXQpOgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4TGF5b3V0Ojpjb21w
dXRlQXZhaWxhYmxlTG9naWNhbFZlcnRpY2FsU3BhY2UgY29uc3QpOgooV2ViQ29yZTo6TGF5b3V0
OjpGbGV4TGF5b3V0Ojpjb21wdXRlQXZhaWxhYmxlTG9naWNhbEhvcml6b250YWxTcGFjZSBjb25z
dCk6CihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhMYXlvdXQ6OmNvbXB1dGVMb2dpY2FsV2lkdGhGb3JT
aHJpbmtpbmdGbGV4SXRlbXMpOgooV2ViQ29yZTo6TGF5b3V0OjpGbGV4TGF5b3V0Ojpjb21wdXRl
TG9naWNhbFdpZHRoRm9yU3RyZXRjaGluZ0ZsZXhJdGVtcyk6CihXZWJDb3JlOjpMYXlvdXQ6OkZs
ZXhMYXlvdXQ6OmNvbXB1dGVMb2dpY2FsV2lkdGhGb3JGbGV4SXRlbXMpOgooV2ViQ29yZTo6TGF5
b3V0OjpGbGV4TGF5b3V0Ojpjb21wdXRlTG9naWNhbEhlaWdodEZvckZsZXhJdGVtcyk6CihXZWJD
b3JlOjpMYXlvdXQ6OkZsZXhMYXlvdXQ6OmFsaWduRmxleEl0ZW1zKToKKFdlYkNvcmU6OkxheW91
dDo6RmxleExheW91dDo6anVzdGlmeUZsZXhJdGVtcyk6CihXZWJDb3JlOjpMYXlvdXQ6OkZsZXhM
YXlvdXQ6OmxheW91dCk6CiogU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9mbGV4L0ZsZXhMYXlvdXQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5oLgooV2ViQ29yZTo6
TGF5b3V0OjpGbGV4TGF5b3V0Ojpmb3JtYXR0aW5nU3RhdGUgY29uc3QpOgooV2ViQ29yZTo6TGF5
b3V0OjpGbGV4TGF5b3V0OjpmbGV4Qm94U3R5bGUgY29uc3QpOgotLS0KIFNvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UgICAgICAgICAgICAgICAgICB8ICAgMSArCiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogLi4uL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHwgICA2ICsKIC4uLi9mbGV4L0ZsZXhGb3JtYXR0
aW5nQ29udGV4dC5jcHAgICAgICAgICAgICB8IDM4MCArKy0tLS0tLS0tLS0tLS0tLQogLi4uL2Zs
ZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmggICAgICAgICAgICAgIHwgIDE5ICstCiAuLi4vZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleExheW91dC5jcHAgICAgfCAzODEgKysrKysrKysrKysr
KysrKysrCiAuLi4vZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleExheW91dC5oICAgICAgfCAg
NzAgKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA0OTIgaW5zZXJ0aW9ucygrKSwgMzY2IGRlbGV0aW9u
cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvZmxleC9GbGV4TGF5b3V0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4TGF5b3V0LmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQppbmRleCA3NGZjNDVkN2RmYjcuLmFmYzJjZWY1MGM0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJz
LmNtYWtlCkBAIC05ODIsNiArOTgyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogCiAgICAgbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0
aW5nQ29uc3RyYWludHMuaAogICAgIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ1N0YXRlLmgKKyAgICBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxl
eExheW91dC5oCiAKICAgICBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5
L0lubGluZURpc3BsYXlCb3guaAogICAgIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZVJlY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlZjAyMjUwYjIzOGQuLjUyNmFjYzFiZjNj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTE1NjcsNiArMTU2Nyw3IEBAIGxheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvYmxvY2svdGFibGV3cmFwcGVyL1RhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQuCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL3RhYmxld3JhcHBlci9UYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCitsYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleExheW91dC5jcHAKIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxl
eC9GbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcAogbGF5b3V0L2Zsb2F0cy9GbG9hdEF2b2lkZXIuY3Bw
CiBsYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZTAyZDE5NWExOWMuLjA0
NmJkYmNlOTg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjIyMCw2ICsyMjIwLDcgQEAKIAkJNkVEODc4QzUxNDc0OTNGNDAw
NEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVEODc4QzMxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRh
YmxlQ2FwdGlvbi5oICovOyB9OwogCQk2RUQ4QzM3QTE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hh
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDhD
Mzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFRThBNzczMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCAqLzsgfTsKKwkJNkYwNDdBOTIyODQ1M0VEQjAwQzI1RUU3IC8qIEZsZXhM
YXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZG
MDQ3QTkxMjg0NTNFREIwMEMyNUVFNyAvKiBGbGV4TGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkYwQjk4QjUyM0YyNjhFQzAwRUVDMkYy
IC8qIExheW91dElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZGMEI5OEIzMjNGMjY4RUIwMEVFQzJGMiAvKiBMYXlvdXRJbmxpbmVU
ZXh0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNkYwQ0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMENENjk0MjI5RUQzMjcwMEM1OTk0
RSAvKiBJbmxpbmVMaW5lLmggKi87IH07CiAJCTZGMTU1MjIxMjY0NzZCNUMwMEUzNTNDNiAvKiBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMTU1MjIwMjY0NzZCNUIwMEUzNTNDNiAvKiBUYWJs
ZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTEwMjAsNiArMTEwMjEsOCBAQAogCQk2RUQ4QzM3
ODE4M0JGRjhDMDA5RTUzQkQgLyogQm94U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQm94U2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3
NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRB
MjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2RjA0N0E5MDI4NDUzRUQyMDBDMjVFRTcgLyogRmxleExheW91dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGbGV4TGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkYwNDdBOTEyODQ1M0VEQjAwQzI1RUU3IC8qIEZsZXhMYXlvdXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxleExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjA4MzBERjIwQjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjBCOThCMzIzRjI2OEVCMDBFRUMyRjIg
LyogTGF5b3V0SW5saW5lVGV4dEJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYXlvdXRJbmxpbmVUZXh0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZG
MEI5OEI2MjNGMjY5MDYwMEVFQzJGMiAvKiBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExheW91dElubGluZVRleHRCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ2OTMsNiArMjQ2OTYsOCBAQAogCQk2RkI3RDJENTI1MEZEN0I1MDAwMjA3
QUEgLyogZmxleCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNkYwNDdBOTEyODQ1M0VEQjAwQzI1RUU3IC8qIEZsZXhMYXlvdXQuaCAqLywKKwkJCQk2RjA0
N0E5MDI4NDUzRUQyMDBDMjVFRTcgLyogRmxleExheW91dC5jcHAgKi8sCiAJCQkJNkZCMTc0NzUy
ODNBOEZGNDAwNjdEOENBIC8qIEZsZXhGb3JtYXR0aW5nQ29uc3RyYWludHMuaCAqLywKIAkJCQk2
RkI3RDJENzI1MEZEN0U1MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmNwcCAqLywK
IAkJCQk2RkI3RDJEOTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0Lmgg
Ki8sCkBAIC0zNTI3OSw2ICszNTI4NCw3IEBACiAJCQkJQkM3RjQ0QTgwQjlFMzI0RTAwQTlEMDgx
IC8qIEltYWdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUE1OTMxMTUyNTI1RDAw
MDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDZENTM4
NjI3M0Q3RTQ2MDAwOUZBODAgLyogSW1hZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2
RjA0N0E5MjI4NDUzRURCMDBDMjVFRTcgLyogRmxleExheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjQ4MjQzNEIyNjBDMzMwNjAwMjI0OTdDIC8qIEltYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUY0NDZFREUxMjY1REIxRTUwMDMxREE4RiAvKiBJbWFnZU92ZXJs
YXlEYXRhRGV0ZWN0aW9uUmVzdWx0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzIy
ODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXgg
ZWE0OWVhYzU5OTU4Li44ODI2YTdiZGFiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9y
bWF0dGluZ0NvbnRleHQuY3BwCkBAIC0xMTksNTYgKzExOSwyMyBAQCB2b2lkIEZsZXhGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JGbGV4SXRlbXMo
KQogICAgIH0KIH0KIAotTGF5b3V0VW5pdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVB
dmFpbGFibGVMb2dpY2FsVmVydGljYWxTcGFjZShMb2dpY2FsRmxleEl0ZW1zJiBsb2dpY2FsRmxl
eEl0ZW1MaXN0LCBjb25zdCBDb25zdHJhaW50c0ZvckZsZXhDb250ZW50JiBmbGV4Q29uc3RyYWlu
dHMpIGNvbnN0CitGbGV4TGF5b3V0OjpMb2dpY2FsRmxleEl0ZW1zIEZsZXhGb3JtYXR0aW5nQ29u
dGV4dDo6Y29udmVydEZsZXhJdGVtc1RvTG9naWNhbFNwYWNlKCkKIHsKLSAgICBhdXRvIGF2YWls
YWJsZUxvZ2ljYWxWZXJ0aWNhbFNwYWNlRnJvbUNvbnN0cmFpbnQgPSBbJl0gewotICAgICAgICBh
dXRvIGZsZXhEaXJlY3Rpb24gPSByb290KCkuc3R5bGUoKS5mbGV4RGlyZWN0aW9uKCk7Ci0gICAg
ICAgIGF1dG8gZmxleERpcmVjdGlvbklzSW5saW5lQXhpcyA9IGZsZXhEaXJlY3Rpb24gPT0gRmxl
eERpcmVjdGlvbjo6Um93IHx8IGZsZXhEaXJlY3Rpb24gPT0gRmxleERpcmVjdGlvbjo6Um93UmV2
ZXJzZTsKLSAgICAgICAgaWYgKGZsZXhEaXJlY3Rpb25Jc0lubGluZUF4aXMpCi0gICAgICAgICAg
ICByZXR1cm4gZmxleENvbnN0cmFpbnRzLmF2YWlsYWJsZVZlcnRpY2FsU3BhY2UoKTsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4geyBmbGV4Q29uc3RyYWludHMuaG9y
aXpvbnRhbCgpLmxvZ2ljYWxXaWR0aCB9OworICAgIHN0cnVjdCBGbGV4SXRlbSB7CisgICAgICAg
IEZsZXhSZWN0IG1hcmdpblJlY3Q7CisgICAgICAgIGludCBsb2dpY2FsT3JkZXIgeyAwIH07CiAg
ICAgfTsKIAotICAgIGlmIChhdXRvIGF2YWlsYWJsZVNwYWNlID0gYXZhaWxhYmxlTG9naWNhbFZl
cnRpY2FsU3BhY2VGcm9tQ29uc3RyYWludCgpKQotICAgICAgICByZXR1cm4gKmF2YWlsYWJsZVNw
YWNlOwotCi0gICAgYXV0byBhdmFpbGFibGVTcGFjZSA9IExheW91dFVuaXQgeyB9OwotICAgIGZv
ciAoYXV0byYgbG9naWNhbEZsZXhJdGVtIDogbG9naWNhbEZsZXhJdGVtTGlzdCkKLSAgICAgICAg
YXZhaWxhYmxlU3BhY2UgPSBzdGQ6Om1heChhdmFpbGFibGVTcGFjZSwgbG9naWNhbEZsZXhJdGVt
LnJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVybiBhdmFpbGFibGVTcGFjZTsKLX0KLQotTGF5b3V0
VW5pdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVBdmFpbGFibGVMb2dpY2FsSG9yaXpv
bnRhbFNwYWNlKExvZ2ljYWxGbGV4SXRlbXMmIGxvZ2ljYWxGbGV4SXRlbUxpc3QsIGNvbnN0IENv
bnN0cmFpbnRzRm9yRmxleENvbnRlbnQmIGZsZXhDb25zdHJhaW50cykgY29uc3QKLXsKLSAgICBh
dXRvIGF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9udGFsU3BhY2VGcm9tQ29uc3RyYWludCA9IFsmXSB7
Ci0gICAgICAgIGF1dG8gZmxleERpcmVjdGlvbiA9IHJvb3QoKS5zdHlsZSgpLmZsZXhEaXJlY3Rp
b24oKTsKLSAgICAgICAgYXV0byBmbGV4RGlyZWN0aW9uSXNJbmxpbmVBeGlzID0gZmxleERpcmVj
dGlvbiA9PSBGbGV4RGlyZWN0aW9uOjpSb3cgfHwgZmxleERpcmVjdGlvbiA9PSBGbGV4RGlyZWN0
aW9uOjpSb3dSZXZlcnNlOwotICAgICAgICBpZiAoZmxleERpcmVjdGlvbklzSW5saW5lQXhpcykK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IHsgZmxleENvbnN0
cmFpbnRzLmhvcml6b250YWwoKS5sb2dpY2FsV2lkdGggfTsgCi0gICAgICAgIHJldHVybiBmbGV4
Q29uc3RyYWludHMuYXZhaWxhYmxlVmVydGljYWxTcGFjZSgpOwotICAgIH07Ci0KLSAgICBpZiAo
YXV0byBhdmFpbGFibGVTcGFjZSA9IGF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9udGFsU3BhY2VGcm9t
Q29uc3RyYWludCgpKQotICAgICAgICByZXR1cm4gKmF2YWlsYWJsZVNwYWNlOwotCi0gICAgYXV0
byBhdmFpbGFibGVTcGFjZSA9IExheW91dFVuaXQgeyB9OwotICAgIGZvciAoYXV0byYgbG9naWNh
bEZsZXhJdGVtIDogbG9naWNhbEZsZXhJdGVtTGlzdCkKLSAgICAgICAgYXZhaWxhYmxlU3BhY2Ug
Kz0gbG9naWNhbEZsZXhJdGVtLnJlY3Qud2lkdGgoKTsKLSAgICByZXR1cm4gYXZhaWxhYmxlU3Bh
Y2U7Ci19Ci0KLUZsZXhGb3JtYXR0aW5nQ29udGV4dDo6TG9naWNhbEZsZXhJdGVtcyBGbGV4Rm9y
bWF0dGluZ0NvbnRleHQ6OmNvbnZlcnRGbGV4SXRlbXNUb0xvZ2ljYWxTcGFjZSgpCi17CiAgICAg
YXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAgTG9n
aWNhbEZsZXhJdGVtcyBsb2dpY2FsRmxleEl0ZW1MaXN0OworICAgIFZlY3RvcjxGbGV4SXRlbT4g
ZmxleEl0ZW1MaXN0OwogICAgIGF1dG8gZmxleEl0ZW1zTmVlZFJlb3JkZXJpbmcgPSBmYWxzZTsK
IAogICAgIGF1dG8gY29udmVydFZpc3VhbFRvTG9naWNhbCA9IFsmXSB7CiAgICAgICAgIGF1dG8g
ZGlyZWN0aW9uID0gcm9vdCgpLnN0eWxlKCkuZmxleERpcmVjdGlvbigpOwogICAgICAgICBhdXRv
IHByZXZpb3VzTG9naWNhbE9yZGVyID0gc3RkOjpvcHRpb25hbDxpbnQ+IHsgfTsKIAotICAgICAg
ICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogY2hpbGRyZW5PZlR5cGU8Q29udGFpbmVyQm94Pihyb290
KCkpKSB7Ci0gICAgICAgICAgICBhdXRvJiBmbGV4SXRlbUdlb21ldHJ5ID0gZm9ybWF0dGluZ1N0
YXRlLmJveEdlb21ldHJ5KGZsZXhJdGVtKTsKKyAgICAgICAgZm9yIChhdXRvKiBmbGV4SXRlbSA9
IHJvb3QoKS5maXJzdEluRmxvd0NoaWxkKCk7IGZsZXhJdGVtOyBmbGV4SXRlbSA9IGZsZXhJdGVt
LT5uZXh0SW5GbG93U2libGluZygpKSB7CisgICAgICAgICAgICBhdXRvJiBmbGV4SXRlbUdlb21l
dHJ5ID0gZm9ybWF0dGluZ1N0YXRlLmJveEdlb21ldHJ5KCpmbGV4SXRlbSk7CiAgICAgICAgICAg
ICBhdXRvIGxvZ2ljYWxTaXplID0gTGF5b3V0U2l6ZSB7IH07CiAKICAgICAgICAgICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CkBAIC0xODQsMTEgKzE1MSwxMSBAQCBGbGV4Rm9ybWF0dGluZ0NvbnRl
eHQ6OkxvZ2ljYWxGbGV4SXRlbXMgRmxleEZvcm1hdHRpbmdDb250ZXh0Ojpjb252ZXJ0RmxleEl0
ZW1zVAogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBmbGV4SXRlbU9yZGVy
ID0gZmxleEl0ZW0uc3R5bGUoKS5vcmRlcigpOworICAgICAgICAgICAgYXV0byBmbGV4SXRlbU9y
ZGVyID0gZmxleEl0ZW0tPnN0eWxlKCkub3JkZXIoKTsKICAgICAgICAgICAgIGZsZXhJdGVtc05l
ZWRSZW9yZGVyaW5nID0gZmxleEl0ZW1zTmVlZFJlb3JkZXJpbmcgfHwgZmxleEl0ZW1PcmRlciAh
PSBwcmV2aW91c0xvZ2ljYWxPcmRlci52YWx1ZV9vcigwKTsKICAgICAgICAgICAgIHByZXZpb3Vz
TG9naWNhbE9yZGVyID0gZmxleEl0ZW1PcmRlcjsKIAotICAgICAgICAgICAgbG9naWNhbEZsZXhJ
dGVtTGlzdC5hcHBlbmQoeyB7IGxvZ2ljYWxTaXplIH0sIGZsZXhJdGVtT3JkZXIsICZmbGV4SXRl
bSB9KTsKKyAgICAgICAgICAgIGZsZXhJdGVtTGlzdC5hcHBlbmQoeyB7IGxvZ2ljYWxTaXplIH0s
IGZsZXhJdGVtT3JkZXIgfSk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGNvbnZlcnRWaXN1YWxU
b0xvZ2ljYWwoKTsKQEAgLTE5NywxOSArMTY0LDI1IEBAIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6
TG9naWNhbEZsZXhJdGVtcyBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbnZlcnRGbGV4SXRlbXNU
CiAgICAgICAgIGlmICghZmxleEl0ZW1zTmVlZFJlb3JkZXJpbmcpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChsb2dpY2FsRmxleEl0ZW1MaXN0LmJlZ2lu
KCksIGxvZ2ljYWxGbGV4SXRlbUxpc3QuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0byYgYikgewor
ICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGZsZXhJdGVtTGlzdC5iZWdpbigpLCBmbGV4SXRlbUxp
c3QuZW5kKCksIFsmXSAoYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICAgICAgcmV0dXJuIGEu
bG9naWNhbE9yZGVyIDwgYi5sb2dpY2FsT3JkZXI7CiAgICAgICAgIH0pOwogICAgIH07CiAgICAg
cmVvcmRlckZsZXhJdGVtc0lmQXBwbGljYWJsZSgpOwogCisgICAgYXV0byBsb2dpY2FsRmxleEl0
ZW1MaXN0ID0gRmxleExheW91dDo6TG9naWNhbEZsZXhJdGVtcyhmbGV4SXRlbUxpc3Quc2l6ZSgp
KTsKKyAgICBhdXRvKiBsYXlvdXRCb3ggPSByb290KCkuZmlyc3RJbkZsb3dDaGlsZCgpOworICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmbGV4SXRlbUxpc3Quc2l6ZSgpOyArK2lu
ZGV4KSB7CisgICAgICAgIGxvZ2ljYWxGbGV4SXRlbUxpc3RbaW5kZXhdID0geyBmbGV4SXRlbUxp
c3RbaW5kZXhdLm1hcmdpblJlY3QsIGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB9
OworICAgICAgICBsYXlvdXRCb3ggPSBsYXlvdXRCb3gtPm5leHRJbkZsb3dTaWJsaW5nKCk7Cisg
ICAgfQogICAgIHJldHVybiBsb2dpY2FsRmxleEl0ZW1MaXN0OwogfQogCi12b2lkIEZsZXhGb3Jt
YXR0aW5nQ29udGV4dDo6c2V0RmxleEl0ZW1zR2VvbWV0cnkoY29uc3QgTG9naWNhbEZsZXhJdGVt
cyYgbG9naWNhbEZsZXhJdGVtTGlzdCwgY29uc3QgQ29uc3RyYWludHNGb3JGbGV4Q29udGVudCYg
Y29uc3RyYWludHMpCit2b2lkIEZsZXhGb3JtYXR0aW5nQ29udGV4dDo6c2V0RmxleEl0ZW1zR2Vv
bWV0cnkoY29uc3QgRmxleExheW91dDo6TG9naWNhbEZsZXhJdGVtcyYgbG9naWNhbEZsZXhJdGVt
TGlzdCwgY29uc3QgQ29uc3RyYWludHNGb3JGbGV4Q29udGVudCYgY29uc3RyYWludHMpCiB7CiAg
ICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0gICAg
YXV0byBsb2dpY2FsV2lkdGggPSBsb2dpY2FsRmxleEl0ZW1MaXN0Lmxhc3QoKS5yZWN0LnJpZ2h0
KCkgLSBsb2dpY2FsRmxleEl0ZW1MaXN0LmZpcnN0KCkucmVjdC5sZWZ0KCk7CisgICAgYXV0byBs
b2dpY2FsV2lkdGggPSBsb2dpY2FsRmxleEl0ZW1MaXN0Lmxhc3QoKS5tYXJnaW5SZWN0LnJpZ2h0
KCkgLSBsb2dpY2FsRmxleEl0ZW1MaXN0LmZpcnN0KCkubWFyZ2luUmVjdC5sZWZ0KCk7CiAgICAg
YXV0byBkaXJlY3Rpb24gPSByb290KCkuc3R5bGUoKS5mbGV4RGlyZWN0aW9uKCk7CiAgICAgZm9y
IChhdXRvJiBsb2dpY2FsRmxleEl0ZW0gOiBsb2dpY2FsRmxleEl0ZW1MaXN0KSB7CiAgICAgICAg
IGF1dG8mIGZsZXhJdGVtR2VvbWV0cnkgPSBmb3JtYXR0aW5nU3RhdGUuYm94R2VvbWV0cnkoKmxv
Z2ljYWxGbGV4SXRlbS5sYXlvdXRCb3gpOwpAQCAtMjE3LDE4ICsxOTAsMTggQEAgdm9pZCBGbGV4
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldEZsZXhJdGVtc0dlb21ldHJ5KGNvbnN0IExvZ2ljYWxGbGV4
SXRlbXMmIGxvZ2ljYWwKIAogICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgICBj
YXNlIEZsZXhEaXJlY3Rpb246OlJvdzoKLSAgICAgICAgICAgIHRvcExlZnQgPSB7IGNvbnN0cmFp
bnRzLmhvcml6b250YWwoKS5sb2dpY2FsTGVmdCArIGxvZ2ljYWxGbGV4SXRlbS5yZWN0LmxlZnQo
KSwgY29uc3RyYWludHMubG9naWNhbFRvcCgpICsgbG9naWNhbEZsZXhJdGVtLnJlY3QudG9wKCkg
fTsKKyAgICAgICAgICAgIHRvcExlZnQgPSB7IGNvbnN0cmFpbnRzLmhvcml6b250YWwoKS5sb2dp
Y2FsTGVmdCArIGxvZ2ljYWxGbGV4SXRlbS5tYXJnaW5SZWN0LmxlZnQoKSwgY29uc3RyYWludHMu
bG9naWNhbFRvcCgpICsgbG9naWNhbEZsZXhJdGVtLm1hcmdpblJlY3QudG9wKCkgfTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZsZXhEaXJlY3Rpb246OlJvd1JldmVyc2U6Ci0g
ICAgICAgICAgICB0b3BMZWZ0ID0geyBjb25zdHJhaW50cy5ob3Jpem9udGFsKCkubG9naWNhbFJp
Z2h0KCkgLSBsb2dpY2FsRmxleEl0ZW0ucmVjdC5yaWdodCgpLCBjb25zdHJhaW50cy5sb2dpY2Fs
VG9wKCkgKyBsb2dpY2FsRmxleEl0ZW0ucmVjdC50b3AoKSB9OworICAgICAgICAgICAgdG9wTGVm
dCA9IHsgY29uc3RyYWludHMuaG9yaXpvbnRhbCgpLmxvZ2ljYWxSaWdodCgpIC0gbG9naWNhbEZs
ZXhJdGVtLm1hcmdpblJlY3QucmlnaHQoKSwgY29uc3RyYWludHMubG9naWNhbFRvcCgpICsgbG9n
aWNhbEZsZXhJdGVtLm1hcmdpblJlY3QudG9wKCkgfTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEZsZXhEaXJlY3Rpb246OkNvbHVtbjogewotICAgICAgICAgICAgYXV0byBmbGlw
cGVkVG9wTGVmdCA9IGxvZ2ljYWxGbGV4SXRlbS5yZWN0LnRvcExlZnQoKS50cmFuc3Bvc2VkUG9p
bnQoKTsKKyAgICAgICAgICAgIGF1dG8gZmxpcHBlZFRvcExlZnQgPSBsb2dpY2FsRmxleEl0ZW0u
bWFyZ2luUmVjdC50b3BMZWZ0KCkudHJhbnNwb3NlZFBvaW50KCk7CiAgICAgICAgICAgICB0b3BM
ZWZ0ID0geyBjb25zdHJhaW50cy5ob3Jpem9udGFsKCkubG9naWNhbExlZnQgKyBmbGlwcGVkVG9w
TGVmdC54KCksIGNvbnN0cmFpbnRzLmxvZ2ljYWxUb3AoKSArIGZsaXBwZWRUb3BMZWZ0LnkoKSB9
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGbGV4RGlyZWN0
aW9uOjpDb2x1bW5SZXZlcnNlOgotICAgICAgICAgICAgdG9wTGVmdCA9IHsgY29uc3RyYWludHMu
aG9yaXpvbnRhbCgpLmxvZ2ljYWxMZWZ0ICsgbG9naWNhbEZsZXhJdGVtLnJlY3QudG9wKCksIGNv
bnN0cmFpbnRzLmxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxGbGV4SXRlbS5y
ZWN0LnJpZ2h0KCkgfTsKKyAgICAgICAgICAgIHRvcExlZnQgPSB7IGNvbnN0cmFpbnRzLmhvcml6
b250YWwoKS5sb2dpY2FsTGVmdCArIGxvZ2ljYWxGbGV4SXRlbS5tYXJnaW5SZWN0LnRvcCgpLCBj
b25zdHJhaW50cy5sb2dpY2FsVG9wKCkgKyBsb2dpY2FsV2lkdGggLSBsb2dpY2FsRmxleEl0ZW0u
bWFyZ2luUmVjdC5yaWdodCgpIH07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjM2LDMxNSArMjA5LDIy
IEBAIHZvaWQgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpzZXRGbGV4SXRlbXNHZW9tZXRyeShjb25z
dCBMb2dpY2FsRmxleEl0ZW1zJiBsb2dpY2FsCiAgICAgICAgIH0KICAgICAgICAgZmxleEl0ZW1H
ZW9tZXRyeS5zZXRMb2dpY2FsVG9wTGVmdCh0b3BMZWZ0KTsKICAgICAgICAgaWYgKGRpcmVjdGlv
biA9PSBGbGV4RGlyZWN0aW9uOjpSb3cgfHwgZGlyZWN0aW9uID09IEZsZXhEaXJlY3Rpb246OlJv
d1JldmVyc2UpIHsKLSAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29udGVudEJveFdp
ZHRoKGxvZ2ljYWxGbGV4SXRlbS5yZWN0LndpZHRoKCkgLSBmbGV4SXRlbUdlb21ldHJ5Lmhvcml6
b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwotICAgICAgICAgICAgZmxleEl0ZW1HZW9t
ZXRyeS5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxGbGV4SXRlbS5yZWN0LmhlaWdodCgpIC0g
ZmxleEl0ZW1HZW9tZXRyeS52ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7CisgICAg
ICAgICAgICBmbGV4SXRlbUdlb21ldHJ5LnNldENvbnRlbnRCb3hXaWR0aChsb2dpY2FsRmxleEl0
ZW0ubWFyZ2luUmVjdC53aWR0aCgpIC0gZmxleEl0ZW1HZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2lu
Qm9yZGVyQW5kUGFkZGluZygpKTsKKyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29u
dGVudEJveEhlaWdodChsb2dpY2FsRmxleEl0ZW0ubWFyZ2luUmVjdC5oZWlnaHQoKSAtIGZsZXhJ
dGVtR2VvbWV0cnkudmVydGljYWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRyeS5zZXRDb250ZW50Qm94V2lkdGgo
bG9naWNhbEZsZXhJdGVtLnJlY3QuaGVpZ2h0KCkgLSBmbGV4SXRlbUdlb21ldHJ5Lmhvcml6b250
YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwotICAgICAgICAgICAgZmxleEl0ZW1HZW9tZXRy
eS5zZXRDb250ZW50Qm94SGVpZ2h0KGxvZ2ljYWxGbGV4SXRlbS5yZWN0LndpZHRoKCkgLSBmbGV4
SXRlbUdlb21ldHJ5LnZlcnRpY2FsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVMb2dpY2Fs
V2lkdGhGb3JTaHJpbmtpbmdGbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYgbG9naWNhbEZsZXhJ
dGVtTGlzdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSkKLXsKLSAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSB0aGlzLT5mb3JtYXR0aW5nU3RhdGUoKTsKLQotICAgIGF1dG8gdG90YWxTaHJp
bmsgPSAwLmY7Ci0gICAgYXV0byB0b3RhbEZsZXhpYmxlU3BhY2UgPSBMYXlvdXRVbml0IHsgfTsK
LSAgICBhdXRvIGZsZXhTaHJpbmtCYXNlID0gMC5mOwotCi0gICAgc3RydWN0IFNocmlua2luZ0Zs
ZXhJdGVtIHsKLSAgICAgICAgZmxvYXQgZmxleFNocmluayB7IDAgfTsKLSAgICAgICAgTGF5b3V0
VW5pdCBtaW5pbXVtU2l6ZTsKLSAgICAgICAgTGF5b3V0VW5pdCBmbGV4QmFzaXM7Ci0gICAgICAg
IExvZ2ljYWxGbGV4SXRlbSYgZmxleEl0ZW07Ci0gICAgICAgIGJvb2wgaXNGcm96ZW4geyBmYWxz
ZSB9OwotICAgIH07Ci0gICAgVmVjdG9yPFNocmlua2luZ0ZsZXhJdGVtPiBzaHJpbmtpbmdJdGVt
czsKLQotICAgIGF1dG8gY29tcHV0ZVRvdGFsU2hyaW5rQW5kT3ZlcmZsb3dpbmdTcGFjZSA9IFsm
XSB7Ci0gICAgICAgIC8vIENvbGxlY3QgZmxleCBpdGVtcyB3aXRoIG5vbi16ZXJvIGZsZXgtc2hy
aW5rIHZhbHVlLiBmbGV4LXNocmluazogMCBmbGV4IGl0ZW1zCi0gICAgICAgIC8vIGRvbid0IHBh
cnRpY2lwYXRlIGluIGNvbnRlbnQgZmxleGluZy4KLSAgICAgICAgZm9yIChhdXRvJiBmbGV4SXRl
bSA6IGxvZ2ljYWxGbGV4SXRlbUxpc3QpIHsKLSAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gZmxl
eEl0ZW0ubGF5b3V0Qm94LT5zdHlsZSgpOwotICAgICAgICAgICAgYXV0byBiYXNlU2l6ZSA9IHN0
eWxlLmZsZXhCYXNpcygpLmlzRml4ZWQoKSA/IExheW91dFVuaXQgeyBzdHlsZS5mbGV4QmFzaXMo
KS52YWx1ZSgpIH0gOiBmbGV4SXRlbS5yZWN0LndpZHRoKCk7Ci0gICAgICAgICAgICBpZiAoYXV0
byBzaHJpbmtWYWx1ZSA9IHN0eWxlLmZsZXhTaHJpbmsoKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gZmxleFNocmluayA9IHNocmlua1ZhbHVlICogYmFzZVNpemU7Ci0gICAgICAgICAgICAgICAg
c2hyaW5raW5nSXRlbXMuYXBwZW5kKHsgZmxleFNocmluaywgZm9ybWF0dGluZ1N0YXRlLmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goKmZsZXhJdGVtLmxheW91dEJveCktPm1pbmltdW0s
IGJhc2VTaXplLCBmbGV4SXRlbSwgeyB9IH0pOwotICAgICAgICAgICAgICAgIHRvdGFsU2hyaW5r
ICs9IGZsZXhTaHJpbms7Ci0gICAgICAgICAgICAgICAgdG90YWxGbGV4aWJsZVNwYWNlICs9IGJh
c2VTaXplOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYXZhaWxhYmxlU3Bh
Y2UgLT0gYmFzZVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvdGFsU2hyaW5rKQotICAg
ICAgICAgICAgZmxleFNocmlua0Jhc2UgPSAodG90YWxGbGV4aWJsZVNwYWNlIC0gYXZhaWxhYmxl
U3BhY2UpIC8gdG90YWxTaHJpbms7Ci0gICAgfTsKLSAgICBjb21wdXRlVG90YWxTaHJpbmtBbmRP
dmVyZmxvd2luZ1NwYWNlKCk7Ci0KLSAgICBhdXRvIGFkanVzdFNocmlua0Jhc2UgPSBbJl0gewot
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IGhvdyBtdWNoIGVhY2ggZmxleCBpdGVtIG5lZWRz
IHRvIGJlIHNocnVuaywgbGV0J3MgY2hlY2sKLSAgICAgICAgLy8gaWYgdGhleSBoaXQgdGhlaXIg
bWluaW11bSBjb250ZW50IHdpZHRoIChpLmUuIHdoZXRoZXIgdGhleSBjYW4gYmUgc2l6ZWQgdGhh
dCBzbWFsbCkuCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBhdXRvIGRpZEZy
ZWV6ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChhdXRvJiBzaGlyaW5raW5nRmxleCA6IHNo
cmlua2luZ0l0ZW1zKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBmbGV4ZWRTaXplID0gc2hpcmlu
a2luZ0ZsZXguZmxleEJhc2lzIC0gKHNoaXJpbmtpbmdGbGV4LmZsZXhTaHJpbmsgKiBmbGV4U2hy
aW5rQmFzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzaGlyaW5raW5nRmxleC5pc0Zyb3plbiAm
JiBzaGlyaW5raW5nRmxleC5taW5pbXVtU2l6ZSA+IGZsZXhlZFNpemUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2hpcmlua2luZ0ZsZXguaXNGcm96ZW4gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBkaWRGcmVlemUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0b3RhbFNocmluayAt
PSBzaGlyaW5raW5nRmxleC5mbGV4U2hyaW5rOwotICAgICAgICAgICAgICAgICAgICB0b3RhbEZs
ZXhpYmxlU3BhY2UgLT0gc2hpcmlua2luZ0ZsZXguZmxleEJhc2lzOwotICAgICAgICAgICAgICAg
ICAgICBhdmFpbGFibGVTcGFjZSAtPSBzaGlyaW5raW5nRmxleC5taW5pbXVtU2l6ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZEZyZWV6ZSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGZsZXhTaHJpbmtCYXNlID0gdG90
YWxTaHJpbmsgPyAodG90YWxGbGV4aWJsZVNwYWNlIC0gYXZhaWxhYmxlU3BhY2UpIC8gdG90YWxT
aHJpbmsgOiAwLmY7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGFkanVzdFNocmlua0Jhc2UoKTsK
LQotICAgIGF1dG8gY29tcHV0ZUxvZ2ljYWxXaWR0aCA9IFsmXSB7Ci0gICAgICAgIC8vIEFkanVz
dCB0aGUgdG90YWwgZ3JvdyB3aWR0aCBieSB0aGUgb3ZlcmZsb3cgdmFsdWUgKHNocmluaykgZXhj
ZXB0IHdoZW4gbWluIGNvbnRlbnQgd2l0aCBkaXNhZ3JlZXMuCi0gICAgICAgIGZvciAoYXV0byYg
c2hpcmlua2luZ0ZsZXggOiBzaHJpbmtpbmdJdGVtcykgewotICAgICAgICAgICAgYXV0byBmbGV4
ZWRTaXplID0gTGF5b3V0VW5pdCB7IHNoaXJpbmtpbmdGbGV4LmZsZXhCYXNpcyAtIChzaGlyaW5r
aW5nRmxleC5mbGV4U2hyaW5rICogZmxleFNocmlua0Jhc2UpIH07Ci0gICAgICAgICAgICBzaGly
aW5raW5nRmxleC5mbGV4SXRlbS5yZWN0LnNldFdpZHRoKHN0ZDo6bWF4KHNoaXJpbmtpbmdGbGV4
Lm1pbmltdW1TaXplLCBmbGV4ZWRTaXplKSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGNvbXB1
dGVMb2dpY2FsV2lkdGgoKTsKLX0KLQotdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVMb2dpY2FsV2lkdGhGb3JTdHJldGNoaW5nRmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRlbXMmIGxv
Z2ljYWxGbGV4SXRlbUxpc3QsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpCi17Ci0gICAgYXV0
byYgZm9ybWF0dGluZ1N0YXRlID0gdGhpcy0+Zm9ybWF0dGluZ1N0YXRlKCk7Ci0KLSAgICBhdXRv
IHRvdGFsRmxleGlibGVTcGFjZSA9IExheW91dFVuaXQgeyB9OwotICAgIGF1dG8gdG90YWxHcm93
dGggPSAwLmY7Ci0gICAgYXV0byBmbGV4R3Jvd0Jhc2UgPSAwLmY7Ci0gICAgc3RydWN0IFN0cmVj
aGluZ0ZsZXhJdGVtIHsKLSAgICAgICAgZmxvYXQgZmxleEdyb3cgeyAwIH07Ci0gICAgICAgIExh
eW91dFVuaXQgbWluaW11bVNpemU7Ci0gICAgICAgIExheW91dFVuaXQgZmxleEJhc2lzOwotICAg
ICAgICBMb2dpY2FsRmxleEl0ZW0mIGZsZXhJdGVtOwotICAgICAgICBib29sIGlzRnJvemVuIHsg
ZmFsc2UgfTsKLSAgICB9OwotICAgIFZlY3RvcjxTdHJlY2hpbmdGbGV4SXRlbT4gc3RyZXRjaGlu
Z0l0ZW1zOwotCi0gICAgYXV0byBjb21wdXRlVG90YWxHcm93dGhBbmRGbGV4aWJsZVNwYWNlID0g
WyZdIHsKLSAgICAgICAgLy8gQ29sbGVjdCBmbGV4IGl0ZW1zIHdpdGggbm9uLXplcm8gZmxleC1n
cm93IHZhbHVlLiBmbGV4LWdyb3c6IDAgKGluaXRpYWwpIGZsZXggaXRlbXMKLSAgICAgICAgLy8g
ZG9uJ3QgcGFydGljaXBhdGUgaW4gYXZhaWxhYmxlIHNwYWNlIGRpc3RyaWJ1dGlvbi4KLSAgICAg
ICAgZm9yIChhdXRvJiBmbGV4SXRlbSA6IGxvZ2ljYWxGbGV4SXRlbUxpc3QpIHsKLSAgICAgICAg
ICAgIGF1dG8mIHN0eWxlID0gZmxleEl0ZW0ubGF5b3V0Qm94LT5zdHlsZSgpOwotICAgICAgICAg
ICAgYXV0byBiYXNlU2l6ZSA9IHN0eWxlLmZsZXhCYXNpcygpLmlzRml4ZWQoKSA/IExheW91dFVu
aXQgeyBzdHlsZS5mbGV4QmFzaXMoKS52YWx1ZSgpIH0gOiBmbGV4SXRlbS5yZWN0LndpZHRoKCk7
Ci0gICAgICAgICAgICBpZiAoYXV0byBncm93VmFsdWUgPSBzdHlsZS5mbGV4R3JvdygpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBmbGV4R3JvdyA9IGdyb3dWYWx1ZSAqIGJhc2VTaXplOwotICAg
ICAgICAgICAgICAgIHN0cmV0Y2hpbmdJdGVtcy5hcHBlbmQoeyBmbGV4R3JvdywgZm9ybWF0dGlu
Z1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goKmZsZXhJdGVtLmxheW91dEJv
eCktPm1pbmltdW0sIGJhc2VTaXplLCBmbGV4SXRlbSwgeyB9IH0pOwotICAgICAgICAgICAgICAg
IHRvdGFsR3Jvd3RoICs9IGZsZXhHcm93OwotICAgICAgICAgICAgICAgIHRvdGFsRmxleGlibGVT
cGFjZSArPSBiYXNlU2l6ZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGF2
YWlsYWJsZVNwYWNlIC09IGJhc2VTaXplOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b3RhbEdy
b3d0aCkKLSAgICAgICAgICAgIGZsZXhHcm93QmFzZSA9IChhdmFpbGFibGVTcGFjZSAtIHRvdGFs
RmxleGlibGVTcGFjZSkgLyB0b3RhbEdyb3d0aDsKLSAgICB9OwotICAgIGNvbXB1dGVUb3RhbEdy
b3d0aEFuZEZsZXhpYmxlU3BhY2UoKTsKLSAgICBpZiAoIXRvdGFsR3Jvd3RoKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGFkanVzdEdyb3d0aEJhc2UgPSBbJl0gewotICAgICAgICAvLyBU
aGlzIGlzIHdoZXJlIHdlIGNvbXB1dGUgaG93IG11Y2ggc3BhY2UgdGhlIGZsZXhpbmcgYm94ZXMg
dGFrZSB1cCBpZiB3ZSBqdXN0Ci0gICAgICAgIC8vIGxldCB0aGVtIGZsZXggYnkgdGhlaXIgZmxl
eC1ncm93IHZhbHVlLiBOb3RlIHRoYXQgd2UgY2FuJ3Qgc2l6ZSB0aGVtIGJlbG93IHRoZWlyIG1p
bmltdW0gY29udGVudCB3aWR0aC4KLSAgICAgICAgLy8gU3VjaCBmbGV4IGl0ZW1zIGFyZSByZW1v
dmVkIGZyb20gdGhlIGZpbmFsIG92ZXJmbG93IGRpc3RyaWJ1dGlvbi4KLSAgICAgICAgYXV0byBh
Y2N1bXVsYXRlZFdpZHRoID0gTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgICAgICBhdXRvIGRpZEZyZWV6ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBzdHJldGNoaW5nRmxleCA6IHN0cmV0Y2hpbmdJdGVtcykgewotICAgICAgICAgICAgICAg
IGF1dG8gZmxleGVkU2l6ZSA9IHN0cmV0Y2hpbmdGbGV4LmZsZXhCYXNpcyArIHN0cmV0Y2hpbmdG
bGV4LmZsZXhHcm93ICogZmxleEdyb3dCYXNlOwotICAgICAgICAgICAgICAgIGlmIChzdHJldGNo
aW5nRmxleC5taW5pbXVtU2l6ZSA+PSBmbGV4ZWRTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0cmV0Y2hpbmdGbGV4LmlzRnJvemVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZGlk
RnJlZXplID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWxHcm93dGggLT0gc3RyZXRj
aGluZ0ZsZXguZmxleEdyb3c7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsRmxleGlibGVTcGFj
ZSAtPSBzdHJldGNoaW5nRmxleC5mbGV4QmFzaXM7Ci0gICAgICAgICAgICAgICAgICAgIGF2YWls
YWJsZVNwYWNlIC09IHN0cmV0Y2hpbmdGbGV4Lm1pbmltdW1TaXplOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZGlkRnJlZXplKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmxleEdyb3dCYXNlID0gdG90YWxHcm93dGggPyAo
dG90YWxGbGV4aWJsZVNwYWNlIC0gYXZhaWxhYmxlU3BhY2UpIC8gdG90YWxHcm93dGggOiAwLmY7
Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGFkanVzdEdyb3d0aEJhc2UoKTsKLQotICAgIGF1dG8g
Y29tcHV0ZUxvZ2ljYWxXaWR0aCA9IFsmXSB7Ci0gICAgICAgIC8vIEFkanVzdCB0aGUgdG90YWwg
Z3JvdyB3aWR0aCBieSB0aGUgb3ZlcmZsb3cgdmFsdWUgKHNocmluaykgZXhjZXB0IHdoZW4gbWlu
IGNvbnRlbnQgd2l0aCBkaXNhZ3JlZXMuCi0gICAgICAgIGZvciAoYXV0byYgc3RyZXRjaGluZ0Zs
ZXggOiBzdHJldGNoaW5nSXRlbXMpIHsKLSAgICAgICAgICAgIGF1dG8gZmxleGVkU2l6ZSA9IExh
eW91dFVuaXQgeyBzdHJldGNoaW5nRmxleC5mbGV4QmFzaXMgKyAoc3RyZXRjaGluZ0ZsZXguZmxl
eEdyb3cgKiBmbGV4R3Jvd0Jhc2UpIH07Ci0gICAgICAgICAgICBzdHJldGNoaW5nRmxleC5mbGV4
SXRlbS5yZWN0LnNldFdpZHRoKHN0ZDo6bWF4KHN0cmV0Y2hpbmdGbGV4Lm1pbmltdW1TaXplLCBm
bGV4ZWRTaXplKSk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgo
KTsKLX0KLQotdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVMb2dpY2FsV2lkdGhG
b3JGbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYgbG9naWNhbEZsZXhJdGVtTGlzdCwgTGF5b3V0
VW5pdCBhdmFpbGFibGVTcGFjZSkKLXsKLSAgICBhdXRvIGNvbnRlbnRMb2dpY2FsV2lkdGggPSBb
Jl0gewotICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IExheW91dFVuaXQgeyB9OwotICAgICAg
ICBmb3IgKGF1dG8mIGxvZ2ljYWxGbGV4SXRlbSA6IGxvZ2ljYWxGbGV4SXRlbUxpc3QpCi0gICAg
ICAgICAgICBsb2dpY2FsV2lkdGggKz0gbG9naWNhbEZsZXhJdGVtLnJlY3Qud2lkdGgoKTsKLSAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aDsKLSAgICB9KCk7Ci0KLSAgICBpZiAoYXZhaWxhYmxl
U3BhY2UgPiBjb250ZW50TG9naWNhbFdpZHRoKQotICAgICAgICBjb21wdXRlTG9naWNhbFdpZHRo
Rm9yU3RyZXRjaGluZ0ZsZXhJdGVtcyhsb2dpY2FsRmxleEl0ZW1MaXN0LCBhdmFpbGFibGVTcGFj
ZSk7Ci0gICAgZWxzZSBpZiAoYXZhaWxhYmxlU3BhY2UgPCBjb250ZW50TG9naWNhbFdpZHRoKQot
ICAgICAgICBjb21wdXRlTG9naWNhbFdpZHRoRm9yU2hyaW5raW5nRmxleEl0ZW1zKGxvZ2ljYWxG
bGV4SXRlbUxpc3QsIGF2YWlsYWJsZVNwYWNlKTsKLX0KLQotdm9pZCBGbGV4Rm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0Rm9yRmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRlbXMm
IGxvZ2ljYWxGbGV4SXRlbUxpc3QsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpCi17Ci0gICAg
YXV0byBhbGlnbkl0ZW1zID0gcm9vdCgpLnN0eWxlKCkuYWxpZ25JdGVtcygpOwotCi0gICAgZm9y
IChhdXRvJiBsb2dpY2FsRmxleEl0ZW0gOiBsb2dpY2FsRmxleEl0ZW1MaXN0KSB7Ci0gICAgICAg
IGF1dG8mIGhlaWdodCA9IGxvZ2ljYWxGbGV4SXRlbS5sYXlvdXRCb3gtPnN0eWxlKCkuaGVpZ2h0
KCk7Ci0gICAgICAgIGlmICghaGVpZ2h0LmlzQXV0bygpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHN3aXRjaCAoYWxpZ25JdGVtcy5wb3NpdGlvbigpKSB7Ci0gICAgICAgIGNhc2Ug
SXRlbVBvc2l0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpTdHJldGNo
OgotICAgICAgICAgICAgbG9naWNhbEZsZXhJdGVtLnJlY3Quc2V0SGVpZ2h0KGF2YWlsYWJsZVNw
YWNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6Q2Vu
dGVyOgotICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6U3RhcnQ6Ci0gICAgICAgIGNhc2UgSXRl
bVBvc2l0aW9uOjpGbGV4U3RhcnQ6Ci0gICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpFbmQ6Ci0g
ICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpGbGV4RW5kOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRmxleEZv
cm1hdHRpbmdDb250ZXh0OjphbGlnbkZsZXhJdGVtcyhMb2dpY2FsRmxleEl0ZW1zJiBsb2dpY2Fs
RmxleEl0ZW1MaXN0LCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKQotewotICAgIC8vIEZJWE1F
OiBDaGVjayBpZiBoZWlnaHQgY29tcHV0YXRpb24gYW5kIHZlcnRpY2FsIGFsaWdubWVudCBzaG91
bGQgbWVyZ2UuCi0gICAgYXV0byBmbGV4Qm94QWxpZ25JdGVtcyA9IHJvb3QoKS5zdHlsZSgpLmFs
aWduSXRlbXMoKTsKLQotICAgIGZvciAoYXV0byYgbG9naWNhbEZsZXhJdGVtIDogbG9naWNhbEZs
ZXhJdGVtTGlzdCkgewotICAgICAgICBhdXRvJiBmbGV4SXRlbUFsaWduU2VsZiA9IGxvZ2ljYWxG
bGV4SXRlbS5sYXlvdXRCb3gtPnN0eWxlKCkuYWxpZ25TZWxmKCk7Ci0gICAgICAgIGF1dG8gYWxp
Z25WYWx1ZSA9IGZsZXhJdGVtQWxpZ25TZWxmLnBvc2l0aW9uKCkgIT0gSXRlbVBvc2l0aW9uOjpB
dXRvID8gZmxleEl0ZW1BbGlnblNlbGYgOiBmbGV4Qm94QWxpZ25JdGVtczsKLSAgICAgICAgc3dp
dGNoIChhbGlnblZhbHVlLnBvc2l0aW9uKCkpIHsKLSAgICAgICAgY2FzZSBJdGVtUG9zaXRpb246
Ok5vcm1hbDoKLSAgICAgICAgY2FzZSBJdGVtUG9zaXRpb246OlN0cmV0Y2g6Ci0gICAgICAgICAg
ICBsb2dpY2FsRmxleEl0ZW0ucmVjdC5zZXRUb3AoeyB9KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6Q2VudGVyOgotICAgICAgICAgICAgbG9naWNhbEZs
ZXhJdGVtLnJlY3Quc2V0VG9wKHsgYXZhaWxhYmxlU3BhY2UgLyAyIC0gIGxvZ2ljYWxGbGV4SXRl
bS5yZWN0LmhlaWdodCgpIC8gMiB9KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEl0ZW1Qb3NpdGlvbjo6U3RhcnQ6Ci0gICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpGbGV4U3Rh
cnQ6Ci0gICAgICAgICAgICBsb2dpY2FsRmxleEl0ZW0ucmVjdC5zZXRUb3AoeyB9KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6RW5kOgotICAgICAgICBj
YXNlIEl0ZW1Qb3NpdGlvbjo6RmxleEVuZDoKLSAgICAgICAgICAgIGxvZ2ljYWxGbGV4SXRlbS5y
ZWN0LnNldFRvcCh7IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNhbEZsZXhJdGVtLnJlY3QuaGVpZ2h0
KCkgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29udGVudEJveFdpZHRoKGxvZ2ljYWxGbGV4SXRl
bS5tYXJnaW5SZWN0LmhlaWdodCgpIC0gZmxleEl0ZW1HZW9tZXRyeS5ob3Jpem9udGFsTWFyZ2lu
Qm9yZGVyQW5kUGFkZGluZygpKTsKKyAgICAgICAgICAgIGZsZXhJdGVtR2VvbWV0cnkuc2V0Q29u
dGVudEJveEhlaWdodChsb2dpY2FsRmxleEl0ZW0ubWFyZ2luUmVjdC53aWR0aCgpIC0gZmxleEl0
ZW1HZW9tZXRyeS52ZXJ0aWNhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CiAKLXZvaWQgRmxleEZvcm1hdHRpbmdDb250ZXh0OjpqdXN0aWZ5RmxleEl0ZW1z
KExvZ2ljYWxGbGV4SXRlbXMmIGxvZ2ljYWxGbGV4SXRlbUxpc3QsIExheW91dFVuaXQgYXZhaWxh
YmxlU3BhY2UpCi17Ci0gICAgYXV0byBqdXN0aWZ5Q29udGVudCA9IHJvb3QoKS5zdHlsZSgpLmp1
c3RpZnlDb250ZW50KCk7Ci0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBvcHRpb25hbC4KLSAgICBh
dXRvIGNvbnRlbnRMb2dpY2FsV2lkdGggPSBbJl0gewotICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0
aCA9IExheW91dFVuaXQgeyB9OwotICAgICAgICBmb3IgKGF1dG8mIGxvZ2ljYWxGbGV4SXRlbSA6
IGxvZ2ljYWxGbGV4SXRlbUxpc3QpCi0gICAgICAgICAgICBsb2dpY2FsV2lkdGggKz0gbG9naWNh
bEZsZXhJdGVtLnJlY3Qud2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aDsKLSAg
ICB9KCk7Ci0KLSAgICBhdXRvIGluaXRpYWxPZmZzZXQgPSBbJl0gewotICAgICAgICBzd2l0Y2gg
KGp1c3RpZnlDb250ZW50LmRpc3RyaWJ1dGlvbigpKSB7Ci0gICAgICAgIGNhc2UgQ29udGVudERp
c3RyaWJ1dGlvbjo6RGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBqdXN0aWZ5
Q29udGVudC5wb3NpdGlvbigpIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29u
dGVudERpc3RyaWJ1dGlvbjo6U3BhY2VCZXR3ZWVuOgotICAgICAgICAgICAgcmV0dXJuIExheW91
dFVuaXQgeyB9OwotICAgICAgICBjYXNlIENvbnRlbnREaXN0cmlidXRpb246OlNwYWNlQXJvdW5k
OgotICAgICAgICAgICAgcmV0dXJuIChhdmFpbGFibGVTcGFjZSAtIGNvbnRlbnRMb2dpY2FsV2lk
dGgpIC8gbG9naWNhbEZsZXhJdGVtTGlzdC5zaXplKCkgLyAyOyAKLSAgICAgICAgY2FzZSBDb250
ZW50RGlzdHJpYnV0aW9uOjpTcGFjZUV2ZW5seToKLSAgICAgICAgICAgIHJldHVybiAoYXZhaWxh
YmxlU3BhY2UgLSBjb250ZW50TG9naWNhbFdpZHRoKSAvIChsb2dpY2FsRmxleEl0ZW1MaXN0LnNp
emUoKSArIDEpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBM
RU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3dpdGNoIChqdXN0aWZ5Q29udGVudC5wb3NpdGlvbigpKSB7Ci0gICAgICAgIGNhc2UgQ29udGVu
dFBvc2l0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpTdGFydDoK
LSAgICAgICAgY2FzZSBDb250ZW50UG9zaXRpb246OkZsZXhTdGFydDoKLSAgICAgICAgY2FzZSBD
b250ZW50UG9zaXRpb246OkxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07
Ci0gICAgICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpFbmQ6Ci0gICAgICAgIGNhc2UgQ29udGVu
dFBvc2l0aW9uOjpGbGV4RW5kOgotICAgICAgICBjYXNlIENvbnRlbnRQb3NpdGlvbjo6UmlnaHQ6
Ci0gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlU3BhY2UgLSBjb250ZW50TG9naWNhbFdpZHRo
OwotICAgICAgICBjYXNlIENvbnRlbnRQb3NpdGlvbjo6Q2VudGVyOgotICAgICAgICAgICAgcmV0
dXJuIGF2YWlsYWJsZVNwYWNlIC8gMiAtIGNvbnRlbnRMb2dpY2FsV2lkdGggLyAyOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07Ci0gICAgfTsKLQotICAgIGF1dG8gZ2Fw
QmV0d2Vlbkl0ZW1zID0gWyZdIHsKLSAgICAgICAgc3dpdGNoIChqdXN0aWZ5Q29udGVudC5kaXN0
cmlidXRpb24oKSkgewotICAgICAgICBjYXNlIENvbnRlbnREaXN0cmlidXRpb246OkRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGNhc2UgQ29udGVu
dERpc3RyaWJ1dGlvbjo6U3BhY2VCZXR3ZWVuOgotICAgICAgICAgICAgaWYgKGxvZ2ljYWxGbGV4
SXRlbUxpc3Quc2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIExheW91dFVuaXQg
eyB9OwotICAgICAgICAgICAgcmV0dXJuIChhdmFpbGFibGVTcGFjZSAtIGNvbnRlbnRMb2dpY2Fs
V2lkdGgpIC8gKGxvZ2ljYWxGbGV4SXRlbUxpc3Quc2l6ZSgpIC0gMSk7IAotICAgICAgICBjYXNl
IENvbnRlbnREaXN0cmlidXRpb246OlNwYWNlQXJvdW5kOgotICAgICAgICAgICAgcmV0dXJuIChh
dmFpbGFibGVTcGFjZSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgpIC8gbG9naWNhbEZsZXhJdGVtTGlz
dC5zaXplKCk7IAotICAgICAgICBjYXNlIENvbnRlbnREaXN0cmlidXRpb246OlNwYWNlRXZlbmx5
OgotICAgICAgICAgICAgcmV0dXJuIChhdmFpbGFibGVTcGFjZSAtIGNvbnRlbnRMb2dpY2FsV2lk
dGgpIC8gKGxvZ2ljYWxGbGV4SXRlbUxpc3Quc2l6ZSgpICsgMSk7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBMYXlvdXRVbml0IHsgfTsKLSAgICB9OwotCi0gICAgYXV0byBsb2dpY2FsTGVmdCA9
IGluaXRpYWxPZmZzZXQoKTsKLSAgICBhdXRvIGdhcCA9IGdhcEJldHdlZW5JdGVtcygpOwotICAg
IGZvciAoYXV0byYgbG9naWNhbEZsZXhJdGVtIDogbG9naWNhbEZsZXhJdGVtTGlzdCkgewotICAg
ICAgICBsb2dpY2FsRmxleEl0ZW0ucmVjdC5zZXRMZWZ0KGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAg
bG9naWNhbExlZnQgPSBsb2dpY2FsRmxleEl0ZW0ucmVjdC5yaWdodCgpICsgZ2FwOwotICAgIH0K
LX0KLQogdm9pZCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnRGb3JJ
bnRlZ3JhdGlvbihjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNvbnN0cmFpbnRz
KQogewotICAgIGF1dG8gbG9naWNhbEZsZXhJdGVtTGlzdCA9IGNvbnZlcnRGbGV4SXRlbXNUb0xv
Z2ljYWxTcGFjZSgpOwogICAgIGF1dG8gZmxleENvbnN0cmFpbnRzID0gZG93bmNhc3Q8Q29uc3Ry
YWludHNGb3JGbGV4Q29udGVudD4oY29uc3RyYWludHMpOwotCi0gICAgYXV0byBhdmFpbGFibGVM
b2dpY2FsSG9yaXpvbnRhbFNwYWNlID0gY29tcHV0ZUF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9udGFs
U3BhY2UobG9naWNhbEZsZXhJdGVtTGlzdCwgZmxleENvbnN0cmFpbnRzKTsKLSAgICBjb21wdXRl
TG9naWNhbFdpZHRoRm9yRmxleEl0ZW1zKGxvZ2ljYWxGbGV4SXRlbUxpc3QsIGF2YWlsYWJsZUxv
Z2ljYWxIb3Jpem9udGFsU3BhY2UpOwotCi0gICAgYXV0byBhdmFpbGFibGVMb2dpY2FsVmVydGlj
YWxTcGFjZSA9IGNvbXB1dGVBdmFpbGFibGVMb2dpY2FsVmVydGljYWxTcGFjZShsb2dpY2FsRmxl
eEl0ZW1MaXN0LCBmbGV4Q29uc3RyYWludHMpOwotICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0Rm9y
RmxleEl0ZW1zKGxvZ2ljYWxGbGV4SXRlbUxpc3QsIGF2YWlsYWJsZUxvZ2ljYWxWZXJ0aWNhbFNw
YWNlKTsKLSAgICBhbGlnbkZsZXhJdGVtcyhsb2dpY2FsRmxleEl0ZW1MaXN0LCBhdmFpbGFibGVM
b2dpY2FsVmVydGljYWxTcGFjZSk7Ci0gICAganVzdGlmeUZsZXhJdGVtcyhsb2dpY2FsRmxleEl0
ZW1MaXN0LCBhdmFpbGFibGVMb2dpY2FsSG9yaXpvbnRhbFNwYWNlKTsKLQotICAgIHNldEZsZXhJ
dGVtc0dlb21ldHJ5KGxvZ2ljYWxGbGV4SXRlbUxpc3QsIGZsZXhDb25zdHJhaW50cyk7CisgICAg
YXV0byBsb2dpY2FsRmxleEl0ZW1zID0gY29udmVydEZsZXhJdGVtc1RvTG9naWNhbFNwYWNlKCk7
CisgICAgYXV0byBmbGV4TGF5b3V0ID0gRmxleExheW91dCB7IGZvcm1hdHRpbmdTdGF0ZSgpLCBy
b290KCkuc3R5bGUoKSB9OworICAgIGZsZXhMYXlvdXQubGF5b3V0KGZsZXhDb25zdHJhaW50cywg
bG9naWNhbEZsZXhJdGVtcyk7CisgICAgc2V0RmxleEl0ZW1zR2VvbWV0cnkobG9naWNhbEZsZXhJ
dGVtcywgZmxleENvbnN0cmFpbnRzKTsKIH0KIAogSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBG
bGV4Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50c0Zv
ckludGVncmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0NvbnRleHQuaApp
bmRleCA2ZTJlNzRlYTAwNDguLjU5YmE1NmE3ZjM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkZsZXhGb3Jt
YXR0aW5nQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5Lmgi
CiAjaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhMYXlvdXQu
aCIKICNpbmNsdWRlICJGbGV4UmVjdC5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3MuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CkBAIC01NywyMiArNTgsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2l6ZUFuZFBsYWNlRmxleEl0ZW1zKGNvbnN0IENvbnN0cmFpbnRzRm9yRmxleENv
bnRlbnQmKTsKICAgICB2b2lkIGNvbXB1dGVJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yRmxl
eEl0ZW1zKCk7CiAKLSAgICBzdHJ1Y3QgTG9naWNhbEZsZXhJdGVtIHsKLSAgICAgICAgRmxleFJl
Y3QgcmVjdDsKLSAgICAgICAgaW50IGxvZ2ljYWxPcmRlciB7IDAgfTsKLSAgICAgICAgQ2hlY2tl
ZFB0cjxjb25zdCBDb250YWluZXJCb3g+IGxheW91dEJveDsKLSAgICB9OwotICAgIHVzaW5nIExv
Z2ljYWxGbGV4SXRlbXMgPSBWZWN0b3I8TG9naWNhbEZsZXhJdGVtPjsKLSAgICBMb2dpY2FsRmxl
eEl0ZW1zIGNvbnZlcnRGbGV4SXRlbXNUb0xvZ2ljYWxTcGFjZSgpOwotICAgIHZvaWQgc2V0Rmxl
eEl0ZW1zR2VvbWV0cnkoY29uc3QgTG9naWNhbEZsZXhJdGVtcyYsIGNvbnN0IENvbnN0cmFpbnRz
Rm9yRmxleENvbnRlbnQmKTsKLSAgICB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGhGb3JGbGV4SXRl
bXMoTG9naWNhbEZsZXhJdGVtcyYsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOwotICAgIHZv
aWQgY29tcHV0ZUxvZ2ljYWxXaWR0aEZvclN0cmV0Y2hpbmdGbGV4SXRlbXMoTG9naWNhbEZsZXhJ
dGVtcyYsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOwotICAgIHZvaWQgY29tcHV0ZUxvZ2lj
YWxXaWR0aEZvclNocmlua2luZ0ZsZXhJdGVtcyhMb2dpY2FsRmxleEl0ZW1zJiwgTGF5b3V0VW5p
dCBhdmFpbGFibGVTcGFjZSk7Ci0gICAgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodEZvckZsZXhJ
dGVtcyhMb2dpY2FsRmxleEl0ZW1zJiwgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSk7Ci0gICAg
dm9pZCBhbGlnbkZsZXhJdGVtcyhMb2dpY2FsRmxleEl0ZW1zJiwgTGF5b3V0VW5pdCBhdmFpbGFi
bGVTcGFjZSk7Ci0gICAgdm9pZCBqdXN0aWZ5RmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRlbXMmLCBM
YXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKTsKLSAgICBMYXlvdXRVbml0IGNvbXB1dGVBdmFpbGFi
bGVMb2dpY2FsVmVydGljYWxTcGFjZShMb2dpY2FsRmxleEl0ZW1zJiwgY29uc3QgQ29uc3RyYWlu
dHNGb3JGbGV4Q29udGVudCYpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29tcHV0ZUF2YWlsYWJs
ZUxvZ2ljYWxIb3Jpem9udGFsU3BhY2UoTG9naWNhbEZsZXhJdGVtcyYsIGNvbnN0IENvbnN0cmFp
bnRzRm9yRmxleENvbnRlbnQmKSBjb25zdDsKKyAgICBGbGV4TGF5b3V0OjpMb2dpY2FsRmxleEl0
ZW1zIGNvbnZlcnRGbGV4SXRlbXNUb0xvZ2ljYWxTcGFjZSgpOworICAgIHZvaWQgc2V0RmxleEl0
ZW1zR2VvbWV0cnkoY29uc3QgRmxleExheW91dDo6TG9naWNhbEZsZXhJdGVtcyYsIGNvbnN0IENv
bnN0cmFpbnRzRm9yRmxleENvbnRlbnQmKTsKIAogICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nU3Rh
dGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEZsZXhGb3JtYXR0
aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5nU3RhdGUoKSk7IH0KICAgICBG
bGV4Rm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxG
bGV4Rm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2ZsZXgvRmxleExheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleExheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi4yNTY1NGIzMzA3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleExheW91dC5jcHAKQEAgLTAsMCAr
MSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmxl
eExheW91dC5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNp
bmNsdWRlICJGbGV4UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dENvbnRleHQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK0ZsZXhMYXlvdXQ6OkZsZXhMYXlv
dXQoY29uc3QgRmxleEZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgZmxleEJveFN0eWxlKQorICAgIDogbV9mb3JtYXR0aW5nU3RhdGUoZm9ybWF0dGlu
Z1N0YXRlKQorICAgICwgbV9mbGV4Qm94U3R5bGUoZmxleEJveFN0eWxlKQoreworfQorCitMYXlv
dXRVbml0IEZsZXhMYXlvdXQ6OmNvbXB1dGVBdmFpbGFibGVMb2dpY2FsVmVydGljYWxTcGFjZShM
b2dpY2FsRmxleEl0ZW1zJiBmbGV4SXRlbXMsIGNvbnN0IENvbnN0cmFpbnRzRm9yRmxleENvbnRl
bnQmIGZsZXhDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBhdXRvIGF2YWlsYWJsZUxvZ2ljYWxW
ZXJ0aWNhbFNwYWNlRnJvbUNvbnN0cmFpbnQgPSBbJl0geworICAgICAgICBhdXRvIGZsZXhEaXJl
Y3Rpb24gPSBmbGV4Qm94U3R5bGUoKS5mbGV4RGlyZWN0aW9uKCk7CisgICAgICAgIGF1dG8gZmxl
eERpcmVjdGlvbklzSW5saW5lQXhpcyA9IGZsZXhEaXJlY3Rpb24gPT0gRmxleERpcmVjdGlvbjo6
Um93IHx8IGZsZXhEaXJlY3Rpb24gPT0gRmxleERpcmVjdGlvbjo6Um93UmV2ZXJzZTsKKyAgICAg
ICAgaWYgKGZsZXhEaXJlY3Rpb25Jc0lubGluZUF4aXMpCisgICAgICAgICAgICByZXR1cm4gZmxl
eENvbnN0cmFpbnRzLmF2YWlsYWJsZVZlcnRpY2FsU3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4geyBmbGV4Q29uc3RyYWludHMuaG9yaXpvbnRhbCgpLmxv
Z2ljYWxXaWR0aCB9OworICAgIH07CisKKyAgICBpZiAoYXV0byBhdmFpbGFibGVTcGFjZSA9IGF2
YWlsYWJsZUxvZ2ljYWxWZXJ0aWNhbFNwYWNlRnJvbUNvbnN0cmFpbnQoKSkKKyAgICAgICAgcmV0
dXJuICphdmFpbGFibGVTcGFjZTsKKworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2UgPSBMYXlvdXRV
bml0IHsgfTsKKyAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogZmxleEl0ZW1zKQorICAgICAgICBh
dmFpbGFibGVTcGFjZSA9IHN0ZDo6bWF4KGF2YWlsYWJsZVNwYWNlLCBmbGV4SXRlbS5tYXJnaW5S
ZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gYXZhaWxhYmxlU3BhY2U7Cit9CisKK0xheW91dFVu
aXQgRmxleExheW91dDo6Y29tcHV0ZUF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9udGFsU3BhY2UoTG9n
aWNhbEZsZXhJdGVtcyYgZmxleEl0ZW1zLCBjb25zdCBDb25zdHJhaW50c0ZvckZsZXhDb250ZW50
JiBmbGV4Q29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgYXV0byBhdmFpbGFibGVMb2dpY2FsSG9y
aXpvbnRhbFNwYWNlRnJvbUNvbnN0cmFpbnQgPSBbJl0geworICAgICAgICBhdXRvIGZsZXhEaXJl
Y3Rpb24gPSBmbGV4Qm94U3R5bGUoKS5mbGV4RGlyZWN0aW9uKCk7CisgICAgICAgIGF1dG8gZmxl
eERpcmVjdGlvbklzSW5saW5lQXhpcyA9IGZsZXhEaXJlY3Rpb24gPT0gRmxleERpcmVjdGlvbjo6
Um93IHx8IGZsZXhEaXJlY3Rpb24gPT0gRmxleERpcmVjdGlvbjo6Um93UmV2ZXJzZTsKKyAgICAg
ICAgaWYgKGZsZXhEaXJlY3Rpb25Jc0lubGluZUF4aXMpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiB7IGZsZXhDb25zdHJhaW50cy5ob3Jpem9udGFsKCkubG9n
aWNhbFdpZHRoIH07IAorICAgICAgICByZXR1cm4gZmxleENvbnN0cmFpbnRzLmF2YWlsYWJsZVZl
cnRpY2FsU3BhY2UoKTsKKyAgICB9OworCisgICAgaWYgKGF1dG8gYXZhaWxhYmxlU3BhY2UgPSBh
dmFpbGFibGVMb2dpY2FsSG9yaXpvbnRhbFNwYWNlRnJvbUNvbnN0cmFpbnQoKSkKKyAgICAgICAg
cmV0dXJuICphdmFpbGFibGVTcGFjZTsKKworICAgIGF1dG8gYXZhaWxhYmxlU3BhY2UgPSBMYXlv
dXRVbml0IHsgfTsKKyAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogZmxleEl0ZW1zKQorICAgICAg
ICBhdmFpbGFibGVTcGFjZSArPSBmbGV4SXRlbS5tYXJnaW5SZWN0LndpZHRoKCk7CisgICAgcmV0
dXJuIGF2YWlsYWJsZVNwYWNlOworfQorCit2b2lkIEZsZXhMYXlvdXQ6OmNvbXB1dGVMb2dpY2Fs
V2lkdGhGb3JTaHJpbmtpbmdGbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYgZmxleEl0ZW1zLCBM
YXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKQoreworICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9
IHRoaXMtPmZvcm1hdHRpbmdTdGF0ZSgpOworCisgICAgYXV0byB0b3RhbFNocmluayA9IDAuZjsK
KyAgICBhdXRvIHRvdGFsRmxleGlibGVTcGFjZSA9IExheW91dFVuaXQgeyB9OworICAgIGF1dG8g
ZmxleFNocmlua0Jhc2UgPSAwLmY7CisKKyAgICBzdHJ1Y3QgU2hyaW5raW5nRmxleEl0ZW0gewor
ICAgICAgICBmbG9hdCBmbGV4U2hyaW5rIHsgMCB9OworICAgICAgICBMYXlvdXRVbml0IG1pbmlt
dW1TaXplOworICAgICAgICBMYXlvdXRVbml0IGZsZXhCYXNpczsKKyAgICAgICAgTG9naWNhbEZs
ZXhJdGVtJiBmbGV4SXRlbTsKKyAgICAgICAgYm9vbCBpc0Zyb3plbiB7IGZhbHNlIH07CisgICAg
fTsKKyAgICBWZWN0b3I8U2hyaW5raW5nRmxleEl0ZW0+IHNocmlua2luZ0l0ZW1zOworCisgICAg
YXV0byBjb21wdXRlVG90YWxTaHJpbmtBbmRPdmVyZmxvd2luZ1NwYWNlID0gWyZdIHsKKyAgICAg
ICAgLy8gQ29sbGVjdCBmbGV4IGl0ZW1zIHdpdGggbm9uLXplcm8gZmxleC1zaHJpbmsgdmFsdWUu
IGZsZXgtc2hyaW5rOiAwIGZsZXggaXRlbXMKKyAgICAgICAgLy8gZG9uJ3QgcGFydGljaXBhdGUg
aW4gY29udGVudCBmbGV4aW5nLgorICAgICAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogZmxleEl0
ZW1zKSB7CisgICAgICAgICAgICBhdXRvJiBzdHlsZSA9IGZsZXhJdGVtLmxheW91dEJveC0+c3R5
bGUoKTsKKyAgICAgICAgICAgIGF1dG8gYmFzZVNpemUgPSBzdHlsZS5mbGV4QmFzaXMoKS5pc0Zp
eGVkKCkgPyBMYXlvdXRVbml0IHsgc3R5bGUuZmxleEJhc2lzKCkudmFsdWUoKSB9IDogZmxleEl0
ZW0ubWFyZ2luUmVjdC53aWR0aCgpOworICAgICAgICAgICAgaWYgKGF1dG8gc2hyaW5rVmFsdWUg
PSBzdHlsZS5mbGV4U2hyaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGZsZXhTaHJpbmsg
PSBzaHJpbmtWYWx1ZSAqIGJhc2VTaXplOworICAgICAgICAgICAgICAgIHNocmlua2luZ0l0ZW1z
LmFwcGVuZCh7IGZsZXhTaHJpbmssIGZvcm1hdHRpbmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzRm9yQm94KCpmbGV4SXRlbS5sYXlvdXRCb3gpLT5taW5pbXVtLCBiYXNlU2l6ZSwgZmxl
eEl0ZW0sIHsgfSB9KTsKKyAgICAgICAgICAgICAgICB0b3RhbFNocmluayArPSBmbGV4U2hyaW5r
OworICAgICAgICAgICAgICAgIHRvdGFsRmxleGlibGVTcGFjZSArPSBiYXNlU2l6ZTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNwYWNlIC09IGJhc2VTaXpl
OworICAgICAgICB9CisgICAgICAgIGlmICh0b3RhbFNocmluaykKKyAgICAgICAgICAgIGZsZXhT
aHJpbmtCYXNlID0gKHRvdGFsRmxleGlibGVTcGFjZSAtIGF2YWlsYWJsZVNwYWNlKSAvIHRvdGFs
U2hyaW5rOworICAgIH07CisgICAgY29tcHV0ZVRvdGFsU2hyaW5rQW5kT3ZlcmZsb3dpbmdTcGFj
ZSgpOworCisgICAgYXV0byBhZGp1c3RTaHJpbmtCYXNlID0gWyZdIHsKKyAgICAgICAgLy8gTm93
IHRoYXQgd2Uga25vdyBob3cgbXVjaCBlYWNoIGZsZXggaXRlbSBuZWVkcyB0byBiZSBzaHJ1bmss
IGxldCdzIGNoZWNrCisgICAgICAgIC8vIGlmIHRoZXkgaGl0IHRoZWlyIG1pbmltdW0gY29udGVu
dCB3aWR0aCAoaS5lLiB3aGV0aGVyIHRoZXkgY2FuIGJlIHNpemVkIHRoYXQgc21hbGwpLgorICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgYXV0byBkaWRGcmVlemUgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgc2hpcmlua2luZ0ZsZXggOiBzaHJpbmtpbmdJdGVtcykg
eworICAgICAgICAgICAgICAgIGF1dG8gZmxleGVkU2l6ZSA9IHNoaXJpbmtpbmdGbGV4LmZsZXhC
YXNpcyAtIChzaGlyaW5raW5nRmxleC5mbGV4U2hyaW5rICogZmxleFNocmlua0Jhc2UpOworICAg
ICAgICAgICAgICAgIGlmICghc2hpcmlua2luZ0ZsZXguaXNGcm96ZW4gJiYgc2hpcmlua2luZ0Zs
ZXgubWluaW11bVNpemUgPiBmbGV4ZWRTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHNoaXJp
bmtpbmdGbGV4LmlzRnJvemVuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZGlkRnJlZXpl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxTaHJpbmsgLT0gc2hpcmlua2luZ0Zs
ZXguZmxleFNocmluazsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxGbGV4aWJsZVNwYWNlIC09
IHNoaXJpbmtpbmdGbGV4LmZsZXhCYXNpczsKKyAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
U3BhY2UgLT0gc2hpcmlua2luZ0ZsZXgubWluaW11bVNpemU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFkaWRGcmVlemUpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBmbGV4U2hyaW5rQmFzZSA9IHRvdGFsU2hyaW5rID8gKHRv
dGFsRmxleGlibGVTcGFjZSAtIGF2YWlsYWJsZVNwYWNlKSAvIHRvdGFsU2hyaW5rIDogMC5mOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBhZGp1c3RTaHJpbmtCYXNlKCk7CisKKyAgICBhdXRvIGNv
bXB1dGVMb2dpY2FsV2lkdGggPSBbJl0geworICAgICAgICAvLyBBZGp1c3QgdGhlIHRvdGFsIGdy
b3cgd2lkdGggYnkgdGhlIG92ZXJmbG93IHZhbHVlIChzaHJpbmspIGV4Y2VwdCB3aGVuIG1pbiBj
b250ZW50IHdpdGggZGlzYWdyZWVzLgorICAgICAgICBmb3IgKGF1dG8mIHNoaXJpbmtpbmdGbGV4
IDogc2hyaW5raW5nSXRlbXMpIHsKKyAgICAgICAgICAgIGF1dG8gZmxleGVkU2l6ZSA9IExheW91
dFVuaXQgeyBzaGlyaW5raW5nRmxleC5mbGV4QmFzaXMgLSAoc2hpcmlua2luZ0ZsZXguZmxleFNo
cmluayAqIGZsZXhTaHJpbmtCYXNlKSB9OworICAgICAgICAgICAgc2hpcmlua2luZ0ZsZXguZmxl
eEl0ZW0ubWFyZ2luUmVjdC5zZXRXaWR0aChzdGQ6Om1heChzaGlyaW5raW5nRmxleC5taW5pbXVt
U2l6ZSwgZmxleGVkU2l6ZSkpOworICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlTG9naWNh
bFdpZHRoKCk7Cit9CisKK3ZvaWQgRmxleExheW91dDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEZvclN0
cmV0Y2hpbmdGbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYgZmxleEl0ZW1zLCBMYXlvdXRVbml0
IGF2YWlsYWJsZVNwYWNlKQoreworICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IHRoaXMtPmZv
cm1hdHRpbmdTdGF0ZSgpOworCisgICAgYXV0byB0b3RhbEZsZXhpYmxlU3BhY2UgPSBMYXlvdXRV
bml0IHsgfTsKKyAgICBhdXRvIHRvdGFsR3Jvd3RoID0gMC5mOworICAgIGF1dG8gZmxleEdyb3dC
YXNlID0gMC5mOworICAgIHN0cnVjdCBTdHJlY2hpbmdGbGV4SXRlbSB7CisgICAgICAgIGZsb2F0
IGZsZXhHcm93IHsgMCB9OworICAgICAgICBMYXlvdXRVbml0IG1pbmltdW1TaXplOworICAgICAg
ICBMYXlvdXRVbml0IGZsZXhCYXNpczsKKyAgICAgICAgTG9naWNhbEZsZXhJdGVtJiBmbGV4SXRl
bTsKKyAgICAgICAgYm9vbCBpc0Zyb3plbiB7IGZhbHNlIH07CisgICAgfTsKKyAgICBWZWN0b3I8
U3RyZWNoaW5nRmxleEl0ZW0+IHN0cmV0Y2hpbmdJdGVtczsKKworICAgIGF1dG8gY29tcHV0ZVRv
dGFsR3Jvd3RoQW5kRmxleGlibGVTcGFjZSA9IFsmXSB7CisgICAgICAgIC8vIENvbGxlY3QgZmxl
eCBpdGVtcyB3aXRoIG5vbi16ZXJvIGZsZXgtZ3JvdyB2YWx1ZS4gZmxleC1ncm93OiAwIChpbml0
aWFsKSBmbGV4IGl0ZW1zCisgICAgICAgIC8vIGRvbid0IHBhcnRpY2lwYXRlIGluIGF2YWlsYWJs
ZSBzcGFjZSBkaXN0cmlidXRpb24uCisgICAgICAgIGZvciAoYXV0byYgZmxleEl0ZW0gOiBmbGV4
SXRlbXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gZmxleEl0ZW0ubGF5b3V0Qm94LT5z
dHlsZSgpOworICAgICAgICAgICAgYXV0byBiYXNlU2l6ZSA9IHN0eWxlLmZsZXhCYXNpcygpLmlz
Rml4ZWQoKSA/IExheW91dFVuaXQgeyBzdHlsZS5mbGV4QmFzaXMoKS52YWx1ZSgpIH0gOiBmbGV4
SXRlbS5tYXJnaW5SZWN0LndpZHRoKCk7CisgICAgICAgICAgICBpZiAoYXV0byBncm93VmFsdWUg
PSBzdHlsZS5mbGV4R3JvdygpKSB7CisgICAgICAgICAgICAgICAgYXV0byBmbGV4R3JvdyA9IGdy
b3dWYWx1ZSAqIGJhc2VTaXplOworICAgICAgICAgICAgICAgIHN0cmV0Y2hpbmdJdGVtcy5hcHBl
bmQoeyBmbGV4R3JvdywgZm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHNG
b3JCb3goKmZsZXhJdGVtLmxheW91dEJveCktPm1pbmltdW0sIGJhc2VTaXplLCBmbGV4SXRlbSwg
eyB9IH0pOworICAgICAgICAgICAgICAgIHRvdGFsR3Jvd3RoICs9IGZsZXhHcm93OworICAgICAg
ICAgICAgICAgIHRvdGFsRmxleGlibGVTcGFjZSArPSBiYXNlU2l6ZTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNwYWNlIC09IGJhc2VTaXplOworICAgICAg
ICB9CisgICAgICAgIGlmICh0b3RhbEdyb3d0aCkKKyAgICAgICAgICAgIGZsZXhHcm93QmFzZSA9
IChhdmFpbGFibGVTcGFjZSAtIHRvdGFsRmxleGlibGVTcGFjZSkgLyB0b3RhbEdyb3d0aDsKKyAg
ICB9OworICAgIGNvbXB1dGVUb3RhbEdyb3d0aEFuZEZsZXhpYmxlU3BhY2UoKTsKKyAgICBpZiAo
IXRvdGFsR3Jvd3RoKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGFkanVzdEdyb3d0aEJh
c2UgPSBbJl0geworICAgICAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIGNvbXB1dGUgaG93IG11Y2gg
c3BhY2UgdGhlIGZsZXhpbmcgYm94ZXMgdGFrZSB1cCBpZiB3ZSBqdXN0CisgICAgICAgIC8vIGxl
dCB0aGVtIGZsZXggYnkgdGhlaXIgZmxleC1ncm93IHZhbHVlLiBOb3RlIHRoYXQgd2UgY2FuJ3Qg
c2l6ZSB0aGVtIGJlbG93IHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aC4KKyAgICAgICAgLy8g
U3VjaCBmbGV4IGl0ZW1zIGFyZSByZW1vdmVkIGZyb20gdGhlIGZpbmFsIG92ZXJmbG93IGRpc3Ry
aWJ1dGlvbi4KKyAgICAgICAgYXV0byBhY2N1bXVsYXRlZFdpZHRoID0gTGF5b3V0VW5pdCB7IH07
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBhdXRvIGRpZEZyZWV6ZSA9IGZh
bHNlOworICAgICAgICAgICAgZm9yIChhdXRvJiBzdHJldGNoaW5nRmxleCA6IHN0cmV0Y2hpbmdJ
dGVtcykgeworICAgICAgICAgICAgICAgIGF1dG8gZmxleGVkU2l6ZSA9IHN0cmV0Y2hpbmdGbGV4
LmZsZXhCYXNpcyArIHN0cmV0Y2hpbmdGbGV4LmZsZXhHcm93ICogZmxleEdyb3dCYXNlOworICAg
ICAgICAgICAgICAgIGlmIChzdHJldGNoaW5nRmxleC5taW5pbXVtU2l6ZSA+PSBmbGV4ZWRTaXpl
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2hpbmdGbGV4LmlzRnJvemVuID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgZGlkRnJlZXplID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdG90YWxHcm93dGggLT0gc3RyZXRjaGluZ0ZsZXguZmxleEdyb3c7CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsRmxleGlibGVTcGFjZSAtPSBzdHJldGNoaW5nRmxleC5mbGV4QmFzaXM7Cisg
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNwYWNlIC09IHN0cmV0Y2hpbmdGbGV4Lm1pbmlt
dW1TaXplOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghZGlkRnJlZXplKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZmxleEdy
b3dCYXNlID0gdG90YWxHcm93dGggPyAodG90YWxGbGV4aWJsZVNwYWNlIC0gYXZhaWxhYmxlU3Bh
Y2UpIC8gdG90YWxHcm93dGggOiAwLmY7CisgICAgICAgIH0KKyAgICB9OworICAgIGFkanVzdEdy
b3d0aEJhc2UoKTsKKworICAgIGF1dG8gY29tcHV0ZUxvZ2ljYWxXaWR0aCA9IFsmXSB7CisgICAg
ICAgIC8vIEFkanVzdCB0aGUgdG90YWwgZ3JvdyB3aWR0aCBieSB0aGUgb3ZlcmZsb3cgdmFsdWUg
KHNocmluaykgZXhjZXB0IHdoZW4gbWluIGNvbnRlbnQgd2l0aCBkaXNhZ3JlZXMuCisgICAgICAg
IGZvciAoYXV0byYgc3RyZXRjaGluZ0ZsZXggOiBzdHJldGNoaW5nSXRlbXMpIHsKKyAgICAgICAg
ICAgIGF1dG8gZmxleGVkU2l6ZSA9IExheW91dFVuaXQgeyBzdHJldGNoaW5nRmxleC5mbGV4QmFz
aXMgKyAoc3RyZXRjaGluZ0ZsZXguZmxleEdyb3cgKiBmbGV4R3Jvd0Jhc2UpIH07CisgICAgICAg
ICAgICBzdHJldGNoaW5nRmxleC5mbGV4SXRlbS5tYXJnaW5SZWN0LnNldFdpZHRoKHN0ZDo6bWF4
KHN0cmV0Y2hpbmdGbGV4Lm1pbmltdW1TaXplLCBmbGV4ZWRTaXplKSk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKK30KKwordm9pZCBGbGV4TGF5b3V0Ojpj
b21wdXRlTG9naWNhbFdpZHRoRm9yRmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRlbXMmIGZsZXhJdGVt
cywgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSkKK3sKKyAgICBhdXRvIGNvbnRlbnRMb2dpY2Fs
V2lkdGggPSBbJl0geworICAgICAgICBhdXRvIGxvZ2ljYWxXaWR0aCA9IExheW91dFVuaXQgeyB9
OworICAgICAgICBmb3IgKGF1dG8mIGZsZXhJdGVtIDogZmxleEl0ZW1zKQorICAgICAgICAgICAg
bG9naWNhbFdpZHRoICs9IGZsZXhJdGVtLm1hcmdpblJlY3Qud2lkdGgoKTsKKyAgICAgICAgcmV0
dXJuIGxvZ2ljYWxXaWR0aDsKKyAgICB9KCk7CisKKyAgICBpZiAoYXZhaWxhYmxlU3BhY2UgPiBj
b250ZW50TG9naWNhbFdpZHRoKQorICAgICAgICBjb21wdXRlTG9naWNhbFdpZHRoRm9yU3RyZXRj
aGluZ0ZsZXhJdGVtcyhmbGV4SXRlbXMsIGF2YWlsYWJsZVNwYWNlKTsKKyAgICBlbHNlIGlmIChh
dmFpbGFibGVTcGFjZSA8IGNvbnRlbnRMb2dpY2FsV2lkdGgpCisgICAgICAgIGNvbXB1dGVMb2dp
Y2FsV2lkdGhGb3JTaHJpbmtpbmdGbGV4SXRlbXMoZmxleEl0ZW1zLCBhdmFpbGFibGVTcGFjZSk7
Cit9CisKK3ZvaWQgRmxleExheW91dDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRGb3JGbGV4SXRlbXMo
TG9naWNhbEZsZXhJdGVtcyYgZmxleEl0ZW1zLCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKQor
eworICAgIGF1dG8gYWxpZ25JdGVtcyA9IGZsZXhCb3hTdHlsZSgpLmFsaWduSXRlbXMoKTsKKwor
ICAgIGZvciAoYXV0byYgZmxleEl0ZW0gOiBmbGV4SXRlbXMpIHsKKyAgICAgICAgYXV0byYgaGVp
Z2h0ID0gZmxleEl0ZW0ubGF5b3V0Qm94LT5zdHlsZSgpLmhlaWdodCgpOworICAgICAgICBpZiAo
IWhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzd2l0Y2gg
KGFsaWduSXRlbXMucG9zaXRpb24oKSkgeworICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6Tm9y
bWFsOgorICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6U3RyZXRjaDoKKyAgICAgICAgICAgIGZs
ZXhJdGVtLm1hcmdpblJlY3Quc2V0SGVpZ2h0KGF2YWlsYWJsZVNwYWNlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6Q2VudGVyOgorICAgICAgICBjYXNl
IEl0ZW1Qb3NpdGlvbjo6U3RhcnQ6CisgICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpGbGV4U3Rh
cnQ6CisgICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpFbmQ6CisgICAgICAgIGNhc2UgSXRlbVBv
c2l0aW9uOjpGbGV4RW5kOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRmxleExheW91dDo6YWxpZ25GbGV4SXRl
bXMoTG9naWNhbEZsZXhJdGVtcyYgZmxleEl0ZW1zLCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNl
KQoreworICAgIC8vIEZJWE1FOiBDaGVjayBpZiBoZWlnaHQgY29tcHV0YXRpb24gYW5kIHZlcnRp
Y2FsIGFsaWdubWVudCBzaG91bGQgbWVyZ2UuCisgICAgYXV0byBmbGV4Qm94QWxpZ25JdGVtcyA9
IGZsZXhCb3hTdHlsZSgpLmFsaWduSXRlbXMoKTsKKworICAgIGZvciAoYXV0byYgZmxleEl0ZW0g
OiBmbGV4SXRlbXMpIHsKKyAgICAgICAgYXV0byYgZmxleEl0ZW1BbGlnblNlbGYgPSBmbGV4SXRl
bS5sYXlvdXRCb3gtPnN0eWxlKCkuYWxpZ25TZWxmKCk7CisgICAgICAgIGF1dG8gYWxpZ25WYWx1
ZSA9IGZsZXhJdGVtQWxpZ25TZWxmLnBvc2l0aW9uKCkgIT0gSXRlbVBvc2l0aW9uOjpBdXRvID8g
ZmxleEl0ZW1BbGlnblNlbGYgOiBmbGV4Qm94QWxpZ25JdGVtczsKKyAgICAgICAgc3dpdGNoIChh
bGlnblZhbHVlLnBvc2l0aW9uKCkpIHsKKyAgICAgICAgY2FzZSBJdGVtUG9zaXRpb246Ok5vcm1h
bDoKKyAgICAgICAgY2FzZSBJdGVtUG9zaXRpb246OlN0cmV0Y2g6CisgICAgICAgICAgICBmbGV4
SXRlbS5tYXJnaW5SZWN0LnNldFRvcCh7IH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXRlbVBvc2l0aW9uOjpDZW50ZXI6CisgICAgICAgICAgICBmbGV4SXRlbS5tYXJnaW5S
ZWN0LnNldFRvcCh7IGF2YWlsYWJsZVNwYWNlIC8gMiAtICBmbGV4SXRlbS5tYXJnaW5SZWN0Lmhl
aWdodCgpIC8gMiB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEl0ZW1Qb3Np
dGlvbjo6U3RhcnQ6CisgICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpGbGV4U3RhcnQ6CisgICAg
ICAgICAgICBmbGV4SXRlbS5tYXJnaW5SZWN0LnNldFRvcCh7IH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXRlbVBvc2l0aW9uOjpFbmQ6CisgICAgICAgIGNhc2UgSXRlbVBv
c2l0aW9uOjpGbGV4RW5kOgorICAgICAgICAgICAgZmxleEl0ZW0ubWFyZ2luUmVjdC5zZXRUb3Ao
eyBhdmFpbGFibGVTcGFjZSAtIGZsZXhJdGVtLm1hcmdpblJlY3QuaGVpZ2h0KCkgfSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBGbGV4TGF5b3V0OjpqdXN0aWZ5RmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRlbXMm
IGZsZXhJdGVtcywgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZSkKK3sKKyAgICBhdXRvIGp1c3Rp
ZnlDb250ZW50ID0gZmxleEJveFN0eWxlKCkuanVzdGlmeUNvbnRlbnQoKTsKKyAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIG9wdGlvbmFsLgorICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IFsm
XSB7CisgICAgICAgIGF1dG8gbG9naWNhbFdpZHRoID0gTGF5b3V0VW5pdCB7IH07CisgICAgICAg
IGZvciAoYXV0byYgZmxleEl0ZW0gOiBmbGV4SXRlbXMpCisgICAgICAgICAgICBsb2dpY2FsV2lk
dGggKz0gZmxleEl0ZW0ubWFyZ2luUmVjdC53aWR0aCgpOworICAgICAgICByZXR1cm4gbG9naWNh
bFdpZHRoOworICAgIH0oKTsKKworICAgIGF1dG8gaW5pdGlhbE9mZnNldCA9IFsmXSB7CisgICAg
ICAgIHN3aXRjaCAoanVzdGlmeUNvbnRlbnQuZGlzdHJpYnV0aW9uKCkpIHsKKyAgICAgICAgY2Fz
ZSBDb250ZW50RGlzdHJpYnV0aW9uOjpEZWZhdWx0OgorICAgICAgICAgICAgLy8gRmFsbCBiYWNr
IHRvIGp1c3RpZnlDb250ZW50LnBvc2l0aW9uKCkgCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb250ZW50RGlzdHJpYnV0aW9uOjpTcGFjZUJldHdlZW46CisgICAgICAgICAgICBy
ZXR1cm4gTGF5b3V0VW5pdCB7IH07CisgICAgICAgIGNhc2UgQ29udGVudERpc3RyaWJ1dGlvbjo6
U3BhY2VBcm91bmQ6CisgICAgICAgICAgICByZXR1cm4gKGF2YWlsYWJsZVNwYWNlIC0gY29udGVu
dExvZ2ljYWxXaWR0aCkgLyBmbGV4SXRlbXMuc2l6ZSgpIC8gMjsgCisgICAgICAgIGNhc2UgQ29u
dGVudERpc3RyaWJ1dGlvbjo6U3BhY2VFdmVubHk6CisgICAgICAgICAgICByZXR1cm4gKGF2YWls
YWJsZVNwYWNlIC0gY29udGVudExvZ2ljYWxXaWR0aCkgLyAoZmxleEl0ZW1zLnNpemUoKSArIDEp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChq
dXN0aWZ5Q29udGVudC5wb3NpdGlvbigpKSB7CisgICAgICAgIGNhc2UgQ29udGVudFBvc2l0aW9u
OjpOb3JtYWw6CisgICAgICAgIGNhc2UgQ29udGVudFBvc2l0aW9uOjpTdGFydDoKKyAgICAgICAg
Y2FzZSBDb250ZW50UG9zaXRpb246OkZsZXhTdGFydDoKKyAgICAgICAgY2FzZSBDb250ZW50UG9z
aXRpb246OkxlZnQ6CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07CisgICAgICAg
IGNhc2UgQ29udGVudFBvc2l0aW9uOjpFbmQ6CisgICAgICAgIGNhc2UgQ29udGVudFBvc2l0aW9u
OjpGbGV4RW5kOgorICAgICAgICBjYXNlIENvbnRlbnRQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAg
ICAgICByZXR1cm4gYXZhaWxhYmxlU3BhY2UgLSBjb250ZW50TG9naWNhbFdpZHRoOworICAgICAg
ICBjYXNlIENvbnRlbnRQb3NpdGlvbjo6Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIGF2YWls
YWJsZVNwYWNlIC8gMiAtIGNvbnRlbnRMb2dpY2FsV2lkdGggLyAyOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gTGF5b3V0VW5pdCB7IH07CisgICAgfTsKKworICAgIGF1dG8gZ2FwQmV0d2Vlbkl0
ZW1zID0gWyZdIHsKKyAgICAgICAgc3dpdGNoIChqdXN0aWZ5Q29udGVudC5kaXN0cmlidXRpb24o
KSkgeworICAgICAgICBjYXNlIENvbnRlbnREaXN0cmlidXRpb246OkRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07CisgICAgICAgIGNhc2UgQ29udGVudERpc3RyaWJ1
dGlvbjo6U3BhY2VCZXR3ZWVuOgorICAgICAgICAgICAgaWYgKGZsZXhJdGVtcy5zaXplKCkgPT0g
MSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBy
ZXR1cm4gKGF2YWlsYWJsZVNwYWNlIC0gY29udGVudExvZ2ljYWxXaWR0aCkgLyAoZmxleEl0ZW1z
LnNpemUoKSAtIDEpOyAKKyAgICAgICAgY2FzZSBDb250ZW50RGlzdHJpYnV0aW9uOjpTcGFjZUFy
b3VuZDoKKyAgICAgICAgICAgIHJldHVybiAoYXZhaWxhYmxlU3BhY2UgLSBjb250ZW50TG9naWNh
bFdpZHRoKSAvIGZsZXhJdGVtcy5zaXplKCk7IAorICAgICAgICBjYXNlIENvbnRlbnREaXN0cmli
dXRpb246OlNwYWNlRXZlbmx5OgorICAgICAgICAgICAgcmV0dXJuIChhdmFpbGFibGVTcGFjZSAt
IGNvbnRlbnRMb2dpY2FsV2lkdGgpIC8gKGZsZXhJdGVtcy5zaXplKCkgKyAxKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyB9OworICAgIH07CisKKyAgICBhdXRvIGxvZ2lj
YWxMZWZ0ID0gaW5pdGlhbE9mZnNldCgpOworICAgIGF1dG8gZ2FwID0gZ2FwQmV0d2Vlbkl0ZW1z
KCk7CisgICAgZm9yIChhdXRvJiBmbGV4SXRlbSA6IGZsZXhJdGVtcykgeworICAgICAgICBmbGV4
SXRlbS5tYXJnaW5SZWN0LnNldExlZnQobG9naWNhbExlZnQpOworICAgICAgICBsb2dpY2FsTGVm
dCA9IGZsZXhJdGVtLm1hcmdpblJlY3QucmlnaHQoKSArIGdhcDsKKyAgICB9Cit9CisKK3ZvaWQg
RmxleExheW91dDo6bGF5b3V0KGNvbnN0IENvbnN0cmFpbnRzRm9yRmxleENvbnRlbnQmIGNvbnN0
cmFpbnRzLCBMb2dpY2FsRmxleEl0ZW1zJiBmbGV4SXRlbXMpCit7CisgICAgYXV0byBhdmFpbGFi
bGVMb2dpY2FsSG9yaXpvbnRhbFNwYWNlID0gY29tcHV0ZUF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9u
dGFsU3BhY2UoZmxleEl0ZW1zLCBjb25zdHJhaW50cyk7CisgICAgY29tcHV0ZUxvZ2ljYWxXaWR0
aEZvckZsZXhJdGVtcyhmbGV4SXRlbXMsIGF2YWlsYWJsZUxvZ2ljYWxIb3Jpem9udGFsU3BhY2Up
OworCisgICAgYXV0byBhdmFpbGFibGVMb2dpY2FsVmVydGljYWxTcGFjZSA9IGNvbXB1dGVBdmFp
bGFibGVMb2dpY2FsVmVydGljYWxTcGFjZShmbGV4SXRlbXMsIGNvbnN0cmFpbnRzKTsKKyAgICBj
b21wdXRlTG9naWNhbEhlaWdodEZvckZsZXhJdGVtcyhmbGV4SXRlbXMsIGF2YWlsYWJsZUxvZ2lj
YWxWZXJ0aWNhbFNwYWNlKTsKKyAgICBhbGlnbkZsZXhJdGVtcyhmbGV4SXRlbXMsIGF2YWlsYWJs
ZUxvZ2ljYWxWZXJ0aWNhbFNwYWNlKTsKKyAgICBqdXN0aWZ5RmxleEl0ZW1zKGZsZXhJdGVtcywg
YXZhaWxhYmxlTG9naWNhbEhvcml6b250YWxTcGFjZSk7Cit9CisKK30KK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgv
RmxleExheW91dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmE1YjM1ZTdjZjEwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4TGF5b3V0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NP
TlRFWFQpCisKKyNpbmNsdWRlICJGbGV4Rm9ybWF0dGluZ0NvbnN0cmFpbnRzLmgiCisjaW5jbHVk
ZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhSZWN0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCisvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgZmxleCBmb3JtYXR0aW5nIGNvbnRleHRzLgorLy8g
aHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1mbGV4Ym94LTEvCitjbGFzcyBGbGV4TGF5b3V0IHsK
K3B1YmxpYzoKKyAgICBGbGV4TGF5b3V0KGNvbnN0IEZsZXhGb3JtYXR0aW5nU3RhdGUmLCBjb25z
dCBSZW5kZXJTdHlsZSYgZmxleEJveFN0eWxlKTsKKworICAgIHN0cnVjdCBMb2dpY2FsRmxleEl0
ZW0geworICAgICAgICBGbGV4UmVjdCBtYXJnaW5SZWN0OworICAgICAgICBDaGVja2VkUHRyPGNv
bnN0IENvbnRhaW5lckJveD4gbGF5b3V0Qm94OyAgICAgICAgCisgICAgfTsKKyAgICB1c2luZyBM
b2dpY2FsRmxleEl0ZW1zID0gVmVjdG9yPExvZ2ljYWxGbGV4SXRlbT47ICAgIAorICAgIHZvaWQg
bGF5b3V0KGNvbnN0IENvbnN0cmFpbnRzRm9yRmxleENvbnRlbnQmLCBMb2dpY2FsRmxleEl0ZW1z
Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wdXRlTG9naWNhbFdpZHRoRm9yRmxleEl0ZW1z
KExvZ2ljYWxGbGV4SXRlbXMmLCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKTsKKyAgICB2b2lk
IGNvbXB1dGVMb2dpY2FsV2lkdGhGb3JTdHJldGNoaW5nRmxleEl0ZW1zKExvZ2ljYWxGbGV4SXRl
bXMmLCBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlKTsKKyAgICB2b2lkIGNvbXB1dGVMb2dpY2Fs
V2lkdGhGb3JTaHJpbmtpbmdGbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYsIExheW91dFVuaXQg
YXZhaWxhYmxlU3BhY2UpOworICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHRGb3JGbGV4SXRl
bXMoTG9naWNhbEZsZXhJdGVtcyYsIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOworICAgIHZv
aWQgYWxpZ25GbGV4SXRlbXMoTG9naWNhbEZsZXhJdGVtcyYsIExheW91dFVuaXQgYXZhaWxhYmxl
U3BhY2UpOworICAgIHZvaWQganVzdGlmeUZsZXhJdGVtcyhMb2dpY2FsRmxleEl0ZW1zJiwgTGF5
b3V0VW5pdCBhdmFpbGFibGVTcGFjZSk7CisgICAgTGF5b3V0VW5pdCBjb21wdXRlQXZhaWxhYmxl
TG9naWNhbFZlcnRpY2FsU3BhY2UoTG9naWNhbEZsZXhJdGVtcyYsIGNvbnN0IENvbnN0cmFpbnRz
Rm9yRmxleENvbnRlbnQmKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbXB1dGVBdmFpbGFibGVM
b2dpY2FsSG9yaXpvbnRhbFNwYWNlKExvZ2ljYWxGbGV4SXRlbXMmLCBjb25zdCBDb25zdHJhaW50
c0ZvckZsZXhDb250ZW50JikgY29uc3Q7CisKKyAgICBjb25zdCBGbGV4Rm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBmbGV4Qm94U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Zs
ZXhCb3hTdHlsZTsgfQorCisgICAgY29uc3QgRmxleEZvcm1hdHRpbmdTdGF0ZSYgbV9mb3JtYXR0
aW5nU3RhdGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fZmxleEJveFN0eWxlOworfTsKKwor
fQorfQorCisjZW5kaWYKLS0gCjIuMzIuMCAoQXBwbGUgR2l0LTEzMikKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>