<?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>231137</bug_id>
          
          <creation_ts>2021-10-03 06:19:52 -0700</creation_ts>
          <short_desc>Move RuleSet builder to a file of its own</short_desc>
          <delta_ts>2021-10-04 01:41:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799845</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-03 06:19:52 -0700</bug_when>
    <thetext>There is more than enough code here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799846</commentid>
    <comment_count>1</comment_count>
      <attachid>440003</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-03 06:32:01 -0700</bug_when>
    <thetext>Created attachment 440003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799849</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-03 07:29:42 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 440003 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799973</commentid>
    <comment_count>3</comment_count>
      <attachid>440035</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-10-03 23:08:14 -0700</bug_when>
    <thetext>Created attachment 440035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799974</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-03 23:37:52 -0700</bug_when>
    <thetext>Committed r283488 (242461@main): &lt;https://commits.webkit.org/242461@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 440035.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799975</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-03 23:38:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/83824507&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440003</attachid>
            <date>2021-10-03 06:32:01 -0700</date>
            <delta_ts>2021-10-03 23:08:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231137-20211003163159.patch</filename>
            <type>text/plain</type>
            <size>40387</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI0YjUyMGQ1NDg0Mjky
OGZlYzJhYjJlM2QyOTAyNWFmY2U1ODgzMS4uMzRlMDY3MDdkZjA3Y2UyMGJkYmNkNDg0ZWJiMTZl
ODljMDk0MjIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTEwLTAzICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJ1bGVTZXQgYnVp
bGRlciB0byBhIGZpbGUgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMTM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgY29kZSBmb3IgaXQuCisK
KyAgICAgICAgVGhlcmUgaXMgbG90cyBvZiByb29tIGZvciByZWZhY3RvcmluZyBhbmQgY2xlYW51
cHMgaGVyZS4gVGhpcyBwYXRjaCBkb2VzIG5vbmUgb2YgaXQuCisKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkUnVsZXNG
cm9tU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OkJ1aWxkZXI6OmFk
ZENoaWxkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6
OkJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjp+QnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6YWRkU3R5bGVSdWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjpyZWdpc3RlckxheWVy
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6
cHVzaENhc2NhZGVMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldDo6QnVpbGRlcjo6cG9wQ2FzY2FkZUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6YWRkTXV0
YXRpbmdSdWxlc1RvUmVzb2x2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6
cG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlmTmVlZGVk
KTogRGVsZXRlZC4KKworICAgICAgICBNZWRpYVF1ZXJ5Q29sbGVjdG9yIChhbiBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwgb2YgdGhlIEJ1aWxkZXIpIG1vdmVzIHRvby4KKworICAgICAgICAqIHN0eWxl
L1J1bGVTZXQuaDoKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp+UnVsZVNldEJ1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRDaGlsZFJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9t
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRTdHls
ZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpyZWdpc3Rl
ckxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hD
YXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpw
b3BDYXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVy
Ojp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6
ZGlkTXV0YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRp
YVF1ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAqIHN0eWxlL1J1bGVT
ZXRCdWlsZGVyLmg6IEFkZGVkLgorCiAyMDIxLTEwLTAyICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gTW92ZSBpbmxpbmUgaXRl
cmF0b3JzIHRvIElubGluZUl0ZXJhdG9yIG5hbWVzcGFjZSBhbmQgcmVuYW1lIFJ1biogdG8gQm94
KgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAppbmRleCA0NDdmMWM1M2VjZmExMDAwMjY5Zjg4ZGRhMDYxZjk0MDUwMzFi
NzU0Li44MWMzMTY2MTliOTg5NzE3MmI2MjYyM2JkNmE5OTMwNzY1Mzc4NmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtMjQ3OSw2ICsyNDc5LDcgQEAgc3R5bGUvUHNldWRvQ2xhc3NDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCiBzdHlsZS9SdWxlRGF0YS5jcHAKIHN0eWxlL1J1bGVGZWF0dXJlLmNwcAogc3R5
bGUvUnVsZVNldC5jcHAKK3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAogc3R5bGUvU3R5bGVBZGp1
c3Rlci5jcHAKIHN0eWxlL1N0eWxlQnVpbGRlci5jcHAKIHN0eWxlL1N0eWxlQnVpbGRlclN0YXRl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGMyMzZkN2E0NDdhM2FhNTIxMTY2NjBhZjFkMWFmYWVmZTUzOTY0MzAuLjRlYTgy
YzE1MzdlODFhNWZjOGQ0ZDE0NjRkNTBmZDIxMThkMTExOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyNzEsNiArNTI3MSw3
IEBACiAJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI4
MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCAqLzsgfTsKIAkJRTQ3
QzM5MzMxRkU2RTEwODAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3MUZF
NkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggKi87IH07CiAJ
CUU0N0NFQkM5MjcwNkVGNTIwMEI4RDhGNSAvKiBJbmxpbmVXYWxrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0NFQkM3MjcwNkVGNTEwMEI4RDhG
NSAvKiBJbmxpbmVXYWxrZXIuaCAqLzsgfTsKKwkJRTQ3Q0VCRUEyNzA5REZEMTAwQjhEOEY1IC8q
IFJ1bGVTZXRCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDdDRUJFODI3MDlERkQwMDBCOEQ4RjUgLyogUnVsZVNldEJ1aWxkZXIuaCAqLzsg
fTsKIAkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdFMjc2NDE2
MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDdGQzhBMzI1Qjg0RDcyMDA1NDk1
RkMgLyogTG9hZFNjaGVkdWxpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNDdGQzhBMTI1Qjg0RDcxMDA1NDk1RkMgLyogTG9hZFNjaGVkdWxp
bmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTQ4MTM3QjkxREIzQjUyNjAwNUM1OUJGIC8qIFN0eWxlVmFsaWRpdHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0ODEzN0I4MURCM0I1MjYwMDVD
NTlCRiAvKiBTdHlsZVZhbGlkaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTE2NTMwLDYgKzE2NTMxLDggQEAKIAkJRTQ3QzM5MkIxRkU2RTBE
RjAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDdDMzkyQzFGRTZFMERGMDBCQkJDNkIgLyogUmVuZGVyVHJl
ZVVwZGF0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZVVw
ZGF0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3Q0VCQzcyNzA2RUY1MTAw
QjhEOEY1IC8qIElubGluZVdhbGtlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbmxpbmVXYWxrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3Q0VCRTgy
NzA5REZEMDAwQjhEOEY1IC8qIFJ1bGVTZXRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJ1bGVTZXRCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0N0NFQkVCMjcwOURGREMwMEI4RDhGNSAvKiBSdWxlU2V0QnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSdWxlU2V0QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25TdHlsZVNoZWV0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdFMjc2NzE2MDM2RURDMDBFRTJBRkIg
LyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXh0ZW5zaW9uU3R5bGVTaGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDdGQzhBMTI1Qjg0RDcxMDA1NDk1RkMgLyogTG9hZFNjaGVkdWxpbmdNb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvYWRTY2hlZHVsaW5nTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk0MDAsNiArMjk0MDMsOCBAQAogCQkJCUE3
OUJBRDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5oICovLAogCQkJCUE3OUJBRDlG
MTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLywKIAkJCQlBNzlCQURBMDE2MUU3RjNG
MDBDMkU2NTIgLyogUnVsZVNldC5oICovLAorCQkJCUU0N0NFQkVCMjcwOURGREMwMEI4RDhGNSAv
KiBSdWxlU2V0QnVpbGRlci5jcHAgKi8sCisJCQkJRTQ3Q0VCRTgyNzA5REZEMDAwQjhEOEY1IC8q
IFJ1bGVTZXRCdWlsZGVyLmggKi8sCiAJCQkJNzE3M0RFQkQyNjE0REYwNDAwOTdERjMyIC8qIFN0
eWxlYWJsZS5jcHAgKi8sCiAJCQkJNzEzOTIyQkMyNTE4QUI3MDAwNURCM0MyIC8qIFN0eWxlYWJs
ZS5oICovLAogCQkJCUU0NUJBNkIyMjM3NjIyN0UwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmNw
cCAqLywKQEAgLTM0OTk1LDYgKzM1MDAwLDcgQEAKIAkJCQlFNDg2M0NGRTIzODQyRTlFMDA5NzIx
NTggLyogUnVsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OUJBREEyMTYxRTdGM0YwMEMy
RTY1MiAvKiBSdWxlRmVhdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5QkFEQTQxNjFFN0Yz
RjAwQzJFNjUyIC8qIFJ1bGVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0N0NFQkVBMjcwOURG
RDEwMEI4RDhGNSAvKiBSdWxlU2V0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCQTk0
NzEyM0FDMzA1MzAwNDQ0ODQ2IC8qIFJ1bkphdmFTY3JpcHRQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDc2QkI4MjE5NDU2MzI0MDBDRkQyOUEgLyogUnVuTG9vcE9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9h
cnJheS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9S
dWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCmluZGV4IGEzZjU2
NGQ2YmUyNGU5MTAwOGNjODlkOWEyNzc0NmU3OTI3Y2Q4OTMuLjY4ZWRjZjFlM2U1NjJhNjVhZTYw
ZWIyNzI2MWEzYjlkMzZmNjA5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgIlJ1bGVT
ZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWxl
Y3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgpAQCAtODMsNyArODQs
NyBAQCBzdGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dUcmVlKGNvbnN0
IENTU1NlbGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9zdFNlbGVjdG9y
LT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9zdFNlbGVjdG9y
LT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OwogfQog
Ci12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWduZWQgY2FzY2Fk
ZUxheWVySWRlbnRpZmllciwgTWVkaWFRdWVyeUNvbGxlY3RvciogbWVkaWFRdWVyeUNvbGxlY3Rv
cikKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25zdCBTdHlsZVJ1bGUmIHJ1bGUsIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4LCB1bnNpZ25lZCBjYXNj
YWRlTGF5ZXJJZGVudGlmaWVyLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciogbWVkaWFRdWVy
eUNvbGxlY3RvcikKIHsKICAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4
LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9ydWxlQ291bnQrKyk7CiAKQEAgLTI3Myw3ICsyNzQsNyBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmIHJ1bGUpCiAKIHZvaWQg
UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVl
dCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yKQogewotICAgIEJ1aWxkZXIg
YnVpbGRlciB7ICp0aGlzLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKKyAg
ICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVj
dG9yIHsgZXZhbHVhdG9yIH0gfTsKICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0
KTsKIAogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCkBAIC0yODMsMTQgKzI4NCwx
NCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcgogdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21T
aGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5U2V0
KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIFN0eWxl
OjpSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgYXV0byBjYW5Vc2VEeW5hbWljTWVkaWFRdWVy
eVJlc29sdXRpb24gPSBbJl0gewotICAgICAgICBCdWlsZGVyIGJ1aWxkZXIgeyAqdGhpcywgTWVk
aWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBudWxscHRyLCBCdWlsZGVyOjpN
b2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiB9OworICAgICAgICBSdWxlU2V0QnVpbGRlciBidWls
ZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCB0cnVl
IH0sIG51bGxwdHIsIFJ1bGVTZXRCdWlsZGVyOjpNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiB9
OwogICAgICAgICBpZiAoYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0
ZShzaGVldFF1ZXJ5KSkKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQpOwogICAgICAgICBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHNoZWV0UXVlcnkp
OwogICAgICAgICByZXR1cm4gIWJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVS
ZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5OwogICAgIH0oKTsKIAotICAgIEJ1aWxkZXIg
YnVpbGRlciB7ICp0aGlzLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5Vc2VE
eW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07CisgICAgUnVsZVNldEJ1
aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1
YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNvbHV0aW9uIH0sICZyZXNvbHZlciB9Owog
CiAgICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUoc2hl
ZXRRdWVyeSkpCiAgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQpOwpAQCAt
MzEwLDIyNyArMzExLDYgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChjb25zdCBT
dHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXIKICAgICAgICAgc2hyaW5r
VG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjpCdWlsZGVyOjphZGRDaGlsZFJ1bGVzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcykKLXsKLSAgICBmb3IgKGF1dG8m
IHJ1bGUgOiBydWxlcykgewotICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0
aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHlu
YW1pY01lZGlhUXVlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlPigqcnVsZSkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IE1vZGU6Ok5vcm1hbCkK
LSAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPFN0eWxl
UnVsZVBhZ2U+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFs
KQotICAgICAgICAgICAgICAgIHJ1bGVTZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVs
ZVBhZ2U+KCpydWxlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpydWxlKSkgewotICAgICAgICAgICAgYXV0byYgbWVk
aWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKTsKLSAgICAgICAgICAgIGlm
IChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZSgmbWVkaWFSdWxlLm1lZGlhUXVl
cmllcygpKSkKLSAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1
bGVzKCkpOwotICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AoJm1lZGlhUnVsZS5t
ZWRpYVF1ZXJpZXMoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaXM8U3R5bGVSdWxlTGF5ZXI+KCpydWxlKSkgewotICAgICAgICAgICAgYXV0byYgbGF5
ZXJSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTGF5ZXI+KCpydWxlKTsKLSAgICAgICAgICAgIGlm
IChsYXllclJ1bGUuaXNTdGF0ZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIFN0YXRlbWVu
dCBzeW50YXgganVzdCByZWdpc3RlcnMgdGhlIGxheWVycy4KLSAgICAgICAgICAgICAgICByZWdp
c3RlckxheWVycyhsYXllclJ1bGUubmFtZUxpc3QoKSk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBCbG9jayBzeW50YXguCi0gICAgICAg
ICAgICBwdXNoQ2FzY2FkZUxheWVyKGxheWVyUnVsZS5uYW1lKCkpOwotICAgICAgICAgICAgYWRk
Q2hpbGRSdWxlcyhsYXllclJ1bGUuY2hpbGRSdWxlcygpKTsKLSAgICAgICAgICAgIHBvcENhc2Nh
ZGVMYXllcihsYXllclJ1bGUubmFtZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUpIHx8IGlzPFN0eWxl
UnVsZUZvbnRQYWxldHRlVmFsdWVzPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigq
cnVsZSkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25T
Y2FuKSB7Ci0gICAgICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNv
bHZlcigpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHJlc29sdmVyKQotICAgICAgICAgICAgICAgIGNvbGxlY3RlZFJlc29sdmVyTXV0
YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIg
fSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1
bGUpLmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIGFkZENoaWxkUnVsZXMo
ZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5jaGlsZFJ1bGVzKCkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUnVsZVNldDo6QnVp
bGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCkK
LXsKLSAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVmb3JlSW1wb3J0UnVs
ZXMoKSkKLSAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3QoKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7Ci0gICAgICAgIGlmICghcnVs
ZS0+c3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVsZS0+bWVkaWFRdWVy
aWVzKCkpKSB7Ci0gICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1lID0gcnVsZS0+Y2Fz
Y2FkZUxheWVyTmFtZSgpOwotICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5hbWUpCi0gICAg
ICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7Ci0KLSAgICAg
ICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkpOwotCi0gICAgICAg
ICAgICBpZiAoY2FzY2FkZUxheWVyTmFtZSkKLSAgICAgICAgICAgICAgICBwb3BDYXNjYWRlTGF5
ZXIoKmNhc2NhZGVMYXllck5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIG1lZGlhUXVlcnlDb2xs
ZWN0b3IucG9wKHJ1bGUtPm1lZGlhUXVlcmllcygpKTsKLSAgICB9Ci0KLSAgICBhZGRDaGlsZFJ1
bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSk7Ci19Ci0KLVJ1bGVTZXQ6OkJ1aWxkZXI6On5CdWlsZGVy
KCkKLXsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKLSAgICBhZGRNdXRh
dGluZ1J1bGVzVG9SZXNvbHZlcigpOwotfQotCi12b2lkIFJ1bGVTZXQ6OkJ1aWxkZXI6OmFkZFN0
eWxlUnVsZShjb25zdCBTdHlsZVJ1bGUmIHJ1bGUpCi17Ci0gICAgYXV0byYgc2VsZWN0b3JMaXN0
ID0gcnVsZS5zZWxlY3Rvckxpc3QoKTsKLSAgICBpZiAoc2VsZWN0b3JMaXN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3Vu
ZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIo
c2VsZWN0b3JJbmRleCkpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJ
bmRleCwgc2VsZWN0b3JMaXN0SW5kZXgrKywgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIs
ICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpCdWlsZGVyOjpyZWdp
c3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVzKQotewotICAg
IGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7Ci0gICAgICAgIHB1c2hDYXNjYWRlTGF5ZXIobmFt
ZSk7Ci0gICAgICAgIHBvcENhc2NhZGVMYXllcihuYW1lKTsKLSAgICB9Ci19Ci0KLXZvaWQgUnVs
ZVNldDo6QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJiBu
YW1lKQotewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYmICFydWxlU2V0
LT5tX2Nhc2NhZGVMYXllcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZvciBpbmNyZW1lbnRh
bCBidWlsZCwgcmVjb25zdHJ1Y3QgdGhlIG5hbWUtPmlkZW50aWZpZXIgbWFwLgotICAgICAgICBD
YXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAwOwotICAgICAgICBmb3IgKGF1dG8m
IGxheWVyIDogcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQotICAgICAgICAgICAgY2FzY2FkZUxh
eWVySWRlbnRpZmllck1hcC5hZGQobGF5ZXIucmVzb2x2ZWROYW1lLCArK2lkZW50aWZpZXIpOwot
ICAgIH0KLQotICAgIGF1dG8gbmFtZVJlc29sdmluZ0Fub255bW91cyA9IFsmXSB7Ci0gICAgICAg
IGlmIChuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gTWFrZSB1bmlxdWUgbmFtZSBm
b3IgYW4gYW5vbnltb3VzIGxheWVyLgotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHJh
bmRvbSA9IHJhbmRvbU51bWJlcigpICogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n
IGxvbmc+OjptYXgoKTsKLSAgICAgICAgICAgIHJldHVybiBDYXNjYWRlTGF5ZXJOYW1lIHsgImFu
b25fIl9zICsgU3RyaW5nOjpudW1iZXIocmFuZG9tKSB9OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBuYW1lOwotICAgIH07Ci0KLSAgICAvLyBGb3IgaGllcmFyY2hpY2FsIG5hbWVzIHdlIHJl
Z2lzdGVyIHRoZSBjb250YWluaW5nIGxheWVycyBpbmRpdmlkdWFsbHkgZmlyc3QuCi0gICAgZm9y
IChhdXRvJiBuYW1lU2VnbWVudCA6IG5hbWVSZXNvbHZpbmdBbm9ueW1vdXMoKSkgewotICAgICAg
ICByZXNvbHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsKLSAgICAgICAg
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgPSBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFw
LmVuc3VyZShyZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7Ci0gICAgICAgICAgICAvLyBQ
cmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1fY2FzY2FkZUxh
eWVycy5zaXplKCk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgUnVsZVNldDo6QnVpbGRlcjo6cG9wQ2FzY2FkZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5h
bWUmIG5hbWUpCi17Ci0gICAgaWYgKG1vZGUgIT0gTW9kZTo6Tm9ybWFsKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8gc2l6ZSA9IG5hbWUuaXNFbXB0eSgpID8gMSA6IG5hbWUuc2l6
ZSgpOyBzaXplLS07KSB7Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFtZS5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gcnVsZVNldC0+
Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciku
cGFyZW50SWRlbnRpZmllcjsKLSAgICB9Ci19Ci0KLXZvaWQgUnVsZVNldDo6QnVpbGRlcjo6dXBk
YXRlQ2FzY2FkZUxheWVyT3JkZXIoKQotewotICAgIGlmIChjYXNjYWRlTGF5ZXJJZGVudGlmaWVy
TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb21wYXJlID0gWyZd
KENhc2NhZGVMYXllcklkZW50aWZpZXIgYSwgQ2FzY2FkZUxheWVySWRlbnRpZmllciBiKSB7Ci0g
ICAgICAgIHdoaWxlIChhICYmIGIpIHsKLSAgICAgICAgICAgIC8vIElkZW50aWZpZXJzIGFyZSBp
biBwYXJzZSBvcmRlciB3aGljaCBhbG1vc3QgY29ycmVzcG9uZHMgdG8gdGhlIGxheWVyIHByaW9y
aXR5IG9yZGVyLgotICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4gYSBz
dWJsYXllciBnZXRzIGFkZGVkIHRvIGEgbGF5ZXIgYWZ0ZXIgYWRkaW5nIG90aGVyIG5vbi1zdWJs
YXllcnMuCi0gICAgICAgICAgICAvLyBUbyByZXNvbHZlIHRoaXMgd2UgbmVlZCBsb29rIGZvciBh
IHNoYXJlZCBhbmNlc3RvciBsYXllci4KLSAgICAgICAgICAgIGF1dG8gYVBhcmVudCA9IHJ1bGVT
ZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRlbnRpZmllcjsKLSAgICAg
ICAgICAgIGF1dG8gYlBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIo
YikucGFyZW50SWRlbnRpZmllcjsKLSAgICAgICAgICAgIGlmIChhUGFyZW50ID09IGJQYXJlbnQg
fHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0gYSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBhcmVudCkKLSAgICAgICAgICAgICAgICBhID0g
YVBhcmVudDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiID0gYlBhcmVudDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gYSA8IGI7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxD
YXNjYWRlTGF5ZXJJZGVudGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxheWVyQ291bnQg
PSBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwotICAgIG9yZGVyVmVjdG9yLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobGF5ZXJDb3VudCk7Ci0gICAgZm9yIChDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDw9IGxheWVyQ291bnQ7ICsraWRlbnRp
ZmllcikKLSAgICAgICAgb3JkZXJWZWN0b3IudW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOwot
Ci0gICAgc3RkOjpzb3J0KG9yZGVyVmVjdG9yLmJlZ2luKCksIG9yZGVyVmVjdG9yLmVuZCgpLCBj
b21wYXJlKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmRlclZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihvcmRl
clZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKLX0KLQotdm9pZCBSdWxlU2V0OjpCdWlsZGVyOjph
ZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpCi17Ci0gICAgaWYgKCFyZXNvbHZlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0IFJlc29sdmVy
TXV0YXRpbmdSdWxlJiBhLCBjb25zdCBSZXNvbHZlck11dGF0aW5nUnVsZSYgYikgewotICAgICAg
ICBhdXRvIGFPcmRlciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRlbnRpZmllcihh
LmxheWVySWRlbnRpZmllcik7Ci0gICAgICAgIGF1dG8gYk9yZGVyID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0
dXJuIGFPcmRlciA8IGJPcmRlcjsKLSAgICB9OwotCi0gICAgLy8gVGhlIG9yZGVyIG1heSBjaGFu
Z2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0YXRpbmcgcnVsZXMgZnJvbSBl
YXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6ZXhjaGFuZ2Uo
cnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9KTsKLSAgICBydWxl
c1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxl
cykpOwotCi0gICAgaWYgKCFjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKLSAg
ICAgICAgc3RkOjpzdGFibGVfc29ydChydWxlc1RvQWRkLmJlZ2luKCksIHJ1bGVzVG9BZGQuZW5k
KCksIGNvbXBhcmVMYXllcnMpOwotCi0gICAgZm9yIChhdXRvJiBjb2xsZWN0ZWRSdWxlIDogcnVs
ZXNUb0FkZCkgewotICAgICAgICBpZiAoY29sbGVjdGVkUnVsZS5sYXllcklkZW50aWZpZXIpCi0g
ICAgICAgICAgICBydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLmFwcGVu
ZChjb2xsZWN0ZWRSdWxlKTsKLQotICAgICAgICBhdXRvJiBydWxlID0gY29sbGVjdGVkUnVsZS5y
dWxlOwotICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUpKSB7Ci0gICAgICAg
ICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUo
ZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBmYWxzZSk7Ci0gICAgICAg
ICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZv
bnRQYWxldHRlVmFsdWVzPihydWxlKSkgewotICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50
KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udFBhbGV0dGVWYWx1ZXNSdWxlKGRvd25jYXN0PFN0eWxl
UnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlLmdldCgpKSk7Ci0gICAgICAgICAgICByZXNvbHZl
ci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4ocnVs
ZSkpIHsKLSAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRvd25jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcz4ocnVsZS5nZXQoKSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgogdm9pZCBS
dWxlU2V0Ojp0cmF2ZXJzZVJ1bGVEYXRhcyhGdW5jdGlvbiYmIGZ1bmN0aW9uKQogewpAQCAtNjcw
LDY3ICs0NTAsNSBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKICAgICBtX3Jlc29sdmVy
TXV0YXRpbmdSdWxlc0luTGF5ZXJzLnNocmlua1RvRml0KCk7CiB9CiAKLVJ1bGVTZXQ6Ok1lZGlh
UXVlcnlDb2xsZWN0b3I6On5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0OwotCi1ib29s
IFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gT25seSBldmFsdWF0ZSBzdGF0aWMgZXhwcmVzc2lvbnMgdGhhdCByZXF1aXJlIHN0
eWxlIHJlYnVpbGQuCi0gICAgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzIGR5bmFtaWNSZXN1bHRz
OwotICAgIGF1dG8gbW9kZSA9IGNvbGxlY3REeW5hbWljID8gTWVkaWFRdWVyeUV2YWx1YXRvcjo6
TW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWljIDogTWVkaWFRdWVyeUV2YWx1YXRvcjo6TW9kZTo6Tm9y
bWFsOwotCi0gICAgYm9vbCByZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoKnNldCwgJmR5bmFt
aWNSZXN1bHRzLCBtb2RlKTsKLQotICAgIGlmICghZHluYW1pY1Jlc3VsdHMudmlld3BvcnQuaXNF
bXB0eSgpKQotICAgICAgICBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyA9IHRydWU7
Ci0KLSAgICBpZiAoIWR5bmFtaWNSZXN1bHRzLmlzRW1wdHkoKSkKLSAgICAgICAgZHluYW1pY0Nv
bnRleHRTdGFjay5hcHBlbmQoeyAqc2V0IH0pOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNl
dCogc2V0KQotewotICAgIGlmICghc2V0IHx8IGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgp
IHx8IHNldCAhPSAmZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuc2V0LmdldCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVk
UnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7Ci0gICAgICAgIER5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7Ci0gICAgICAgIGZvciAoYXV0byYgY29udGV4dCA6
IGR5bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5h
cHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOwotCi0gICAgICAgIGlmIChjb2xsZWN0RHluYW1pYykg
ewotICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVuZFZlY3Rvcihk
eW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMpOwotICAgICAg
ICAgICAgcnVsZXMucnVsZUZlYXR1cmVzID0gV1RGTW92ZShkeW5hbWljQ29udGV4dFN0YWNrLmxh
c3QoKS5ydWxlRmVhdHVyZXMpOwotICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1cmVzLnNocmlu
a1RvRml0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcnVsZXMucmVxdWlyZXNGdWxs
UmVzZXQgPSB0cnVlOwotCi0gICAgICAgIGR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBwZW5kKFdU
Rk1vdmUocnVsZXMpKTsKLSAgICB9Ci0KLSAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJlbW92ZUxh
c3QoKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpkaWRNdXRhdGVS
ZXNvbHZlcigpCi17Ci0gICAgaWYgKGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVy
eSA9IHRydWU7Ci19Ci0KLXZvaWQgUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVs
ZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBpZiAoZHluYW1pY0Nv
bnRleHRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGNvbnRl
eHQgPSBkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKTsKLSAgICBjb250ZXh0LmFmZmVjdGVkUnVs
ZVBvc2l0aW9ucy5hcHBlbmQocnVsZURhdGEucG9zaXRpb24oKSk7Ci0gICAgY29udGV4dC5ydWxl
RmVhdHVyZXMuYXBwZW5kKHsgcnVsZURhdGEgfSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFN0eWxl
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKaW5kZXggMmQ2ZTRi
YmYxMzk1YWU0Njc5NjFkNTE3MzgwZjJjY2I3YzFmNWM4YS4uOGE3MTNlNjVhOThmOGQ0YmNkN2Vk
MjYzNDIzMTExZWQ4MjYzYzc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVs
ZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaApAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgU3R5
bGUgewogCiBjbGFzcyBSZXNvbHZlcjsKIGNsYXNzIFJ1bGVTZXQ7CitzdHJ1Y3QgUnVsZVNldE1l
ZGlhUXVlcnlDb2xsZWN0b3I7CiAKIHVzaW5nIEludmFsaWRhdGlvblJ1bGVTZXRWZWN0b3IgPSBW
ZWN0b3I8UmVmUHRyPGNvbnN0IFJ1bGVTZXQ+LCAxPjsKIApAQCAtODUsMzMgKzg2LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgTWVkaWFRdWVyeUNvbGxlY3Rv
ciB7Ci0gICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7Ci0KLSAgICAgICAgY29uc3QgTWVk
aWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgICAgICBjb25zdCBib29sIGNvbGxlY3RE
eW5hbWljIHsgZmFsc2UgfTsKLQotICAgICAgICBzdHJ1Y3QgRHluYW1pY0NvbnRleHQgewotICAg
ICAgICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAgICAgIFZlY3Rv
cjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9ucyB7IH07Ci0gICAgICAgICAgICBSdWxlRmVh
dHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9OwotICAgICAgICB9OwotICAgICAgICBWZWN0b3I8
RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sgeyB9OwotCi0gICAgICAgIFZlY3Rv
cjxEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHsgfTsKLSAg
ICAgICAgYm9vbCBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5IHsgZmFs
c2UgfTsKLSAgICAgICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyB7IGZh
bHNlIH07Ci0KLSAgICAgICAgYm9vbCBwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNl
dCopOwotICAgICAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7Ci0gICAgICAgIHZv
aWQgZGlkTXV0YXRlUmVzb2x2ZXIoKTsKLSAgICAgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29u
c3QgUnVsZURhdGEmKTsKLSAgICB9OwotCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25z
dCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CiAgICAg
dm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBN
ZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5
bGU6OlJlc29sdmVyJik7CiAKLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVk
IGNhc2NhZGVMYXllck9yZGVyID0gMCwgTWVkaWFRdWVyeUNvbGxlY3RvciogPSBudWxscHRyKTsK
KyAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVy
ID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqID0gbnVsbHB0cik7CiAgICAgdm9pZCBh
ZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJik7CiAKICAgICB2b2lkIGFkZFRvUnVsZVNldChjb25z
dCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKQEAgLTE0
OCw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2FzY2FkZUxheWVyT3JkZXJGb3Io
Y29uc3QgUnVsZURhdGEmKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IFJ1
bGVTZXRCdWlsZGVyOworCiAgICAgUnVsZVNldCgpOwogCiAgICAgdXNpbmcgQ2FzY2FkZUxheWVy
SWRlbnRpZmllciA9IHVuc2lnbmVkOwpAQCAtMTU3LDMzICsxMzcsNiBAQCBwcml2YXRlOgogICAg
ICAgICBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGxheWVySWRlbnRpZmllcjsKICAgICB9OwogCi0g
ICAgc3RydWN0IEJ1aWxkZXIgewotICAgICAgICBlbnVtIGNsYXNzIE1vZGUgeyBOb3JtYWwsIFJl
c29sdmVyTXV0YXRpb25TY2FuIH07Ci0KLSAgICAgICAgUmVmPFJ1bGVTZXQ+IHJ1bGVTZXQ7Ci0g
ICAgICAgIE1lZGlhUXVlcnlDb2xsZWN0b3IgbWVkaWFRdWVyeUNvbGxlY3RvcjsKLSAgICAgICAg
U3R5bGU6OlJlc29sdmVyKiByZXNvbHZlciB7IG51bGxwdHIgfTsKLSAgICAgICAgTW9kZSBtb2Rl
IHsgTW9kZTo6Tm9ybWFsIH07Ci0gICAgICAgIENhc2NhZGVMYXllck5hbWUgcmVzb2x2ZWRDYXNj
YWRlTGF5ZXJOYW1lIHsgfTsKLSAgICAgICAgSGFzaE1hcDxDYXNjYWRlTGF5ZXJOYW1lLCBDYXNj
YWRlTGF5ZXJJZGVudGlmaWVyPiBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwIHsgfTsKLSAgICAg
ICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB7
IDAgfTsKLSAgICAgICAgVmVjdG9yPFJlc29sdmVyTXV0YXRpbmdSdWxlPiBjb2xsZWN0ZWRSZXNv
bHZlck11dGF0aW5nUnVsZXMgeyB9OwotCi0gICAgICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJik7Ci0KLSAgICAgICAgfkJ1aWxkZXIoKTsKLSAgICAg
ICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+Jik7Ci0gICAgICAgIHZvaWQgYWRkU3R5bGVSdWxlKGNv
bnN0IFN0eWxlUnVsZSYpOwotCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJMYXllcnMoY29uc3QgVmVj
dG9yPENhc2NhZGVMYXllck5hbWU+Jik7Ci0gICAgICAgIHZvaWQgcHVzaENhc2NhZGVMYXllcihj
b25zdCBDYXNjYWRlTGF5ZXJOYW1lJik7Ci0gICAgICAgIHZvaWQgcG9wQ2FzY2FkZUxheWVyKGNv
bnN0IENhc2NhZGVMYXllck5hbWUmKTsKLSAgICAgICAgdm9pZCB1cGRhdGVDYXNjYWRlTGF5ZXJP
cmRlcigpOwotICAgICAgICB2b2lkIGFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCk7Ci0gICAg
fTsKLQogICAgIHN0cnVjdCBDb2xsZWN0ZWRNZWRpYVF1ZXJ5Q2hhbmdlcyB7CiAgICAgICAgIGJv
b2wgcmVxdWlyZWRGdWxsUmVzZXQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8c2l6ZV90PiBj
aGFuZ2VkUXVlcnlJbmRleGVzIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMDFmZTE5MmQ4YjM0ODRiNjdhMDg1YjczYjkxMzg4NmMwYTQ5ZTc4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIu
Y3BwCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEs
IENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCitSdWxlU2V0QnVpbGRlcjo6flJ1bGVT
ZXRCdWlsZGVyKCkKK3sKKyAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2Nh
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAg
ICBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpOworfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVy
OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxl
cykKK3sKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBpZiAobW9kZSA9
PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11
dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmICht
b2RlID09IE1vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNh
c3Q8U3R5bGVSdWxlPigqcnVsZSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgeworICAgICAgICAgICAgaWYg
KG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQorICAgICAgICAgICAgICAgIHJ1bGVTZXQtPmFkZFBhZ2VS
dWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpydWxlKSkgewor
ICAgICAgICAgICAgYXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpy
dWxlKTsKKyAgICAgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0
ZSgmbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpKSkKKyAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1
bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCkpOworICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxl
Y3Rvci5wb3AoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTGF5ZXI+KCpydWxlKSkgewor
ICAgICAgICAgICAgYXV0byYgbGF5ZXJSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTGF5ZXI+KCpy
dWxlKTsKKyAgICAgICAgICAgIGlmIChsYXllclJ1bGUuaXNTdGF0ZW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFN0YXRlbWVudCBzeW50YXgganVzdCByZWdpc3RlcnMgdGhlIGxheWVycy4K
KyAgICAgICAgICAgICAgICByZWdpc3RlckxheWVycyhsYXllclJ1bGUubmFtZUxpc3QoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBC
bG9jayBzeW50YXguCisgICAgICAgICAgICBwdXNoQ2FzY2FkZUxheWVyKGxheWVyUnVsZS5uYW1l
KCkpOworICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhsYXllclJ1bGUuY2hpbGRSdWxlcygpKTsK
KyAgICAgICAgICAgIHBvcENhc2NhZGVMYXllcihsYXllclJ1bGUubmFtZSgpKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFj
ZT4oKnJ1bGUpIHx8IGlzPFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPigqcnVsZSkgfHwgaXM8
U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IE1v
ZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKSB7CisgICAgICAgICAgICAgICAgbWVkaWFRdWVyeUNv
bGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc29sdmVyKQorICAgICAgICAgICAgICAg
IGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwgY3VycmVudENh
c2NhZGVMYXllcklkZW50aWZpZXIgfSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxT
dHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKKyAgICAg
ICAgICAgIGFkZENoaWxkUnVsZXMoZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5j
aGlsZFJ1bGVzKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hl
ZXRDb250ZW50cyYgc2hlZXQpCit7CisgICAgZm9yIChhdXRvJiBydWxlIDogc2hlZXQubGF5ZXJS
dWxlc0JlZm9yZUltcG9ydFJ1bGVzKCkpCisgICAgICAgIHJlZ2lzdGVyTGF5ZXJzKHJ1bGUtPm5h
bWVMaXN0KCkpOworCisgICAgZm9yIChhdXRvJiBydWxlIDogc2hlZXQuaW1wb3J0UnVsZXMoKSkg
eworICAgICAgICBpZiAoIXJ1bGUtPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZShydWxl
LT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGNhc2NhZGVMYXllck5hbWUg
PSBydWxlLT5jYXNjYWRlTGF5ZXJOYW1lKCk7CisgICAgICAgICAgICBpZiAoY2FzY2FkZUxheWVy
TmFtZSkKKyAgICAgICAgICAgICAgICBwdXNoQ2FzY2FkZUxheWVyKCpjYXNjYWRlTGF5ZXJOYW1l
KTsKKworICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoKnJ1bGUtPnN0eWxlU2hlZXQoKSk7
CisKKyAgICAgICAgICAgIGlmIChjYXNjYWRlTGF5ZXJOYW1lKQorICAgICAgICAgICAgICAgIHBv
cENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgbWVk
aWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOworICAgIH0KKworICAg
IGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKK30KKwordm9pZCBSdWxlU2V0QnVp
bGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkKK3sKKyAgICBhdXRvJiBz
ZWxlY3Rvckxpc3QgPSBydWxlLnNlbGVjdG9yTGlzdCgpOworICAgIGlmIChzZWxlY3Rvckxpc3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5k
ZXggPSAwOworICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxlY3RvckluZGV4
ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gc2VsZWN0b3JMaXN0LmluZGV4T2ZOZXh0U2Vs
ZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxl
LCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrLCBjdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciwgJm1lZGlhUXVlcnlDb2xsZWN0b3IpOworfQorCit2b2lkIFJ1bGVTZXRCdWls
ZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVz
KQoreworICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CisgICAgICAgIHB1c2hDYXNjYWRl
TGF5ZXIobmFtZSk7CisgICAgICAgIHBvcENhc2NhZGVMYXllcihuYW1lKTsKKyAgICB9Cit9CisK
K3ZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVy
TmFtZSYgbmFtZSkKK3sKKyAgICBpZiAobW9kZSAhPSBNb2RlOjpOb3JtYWwpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSAmJiAh
cnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBGb3IgaW5j
cmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1lLT5pZGVudGlmaWVyIG1hcC4KKyAg
ICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBpZGVudGlmaWVyID0gMDsKKyAg
ICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1fY2FzY2FkZUxheWVycykKKyAgICAg
ICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVyLnJlc29sdmVkTmFtZSwg
KytpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBhdXRvIG5hbWVSZXNvbHZpbmdBbm9ueW1vdXMg
PSBbJl0geworICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIE1h
a2UgdW5pcXVlIG5hbWUgZm9yIGFuIGFub255bW91cyBsYXllci4KKyAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyByYW5kb20gPSByYW5kb21OdW1iZXIoKSAqIHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZyBsb25nPjo6bWF4KCk7CisgICAgICAgICAgICByZXR1cm4gQ2FzY2Fk
ZUxheWVyTmFtZSB7ICJhbm9uXyJfcyArIFN0cmluZzo6bnVtYmVyKHJhbmRvbSkgfTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9OworCisgICAgLy8gRm9yIGhpZXJhcmNo
aWNhbCBuYW1lcyB3ZSByZWdpc3RlciB0aGUgY29udGFpbmluZyBsYXllcnMgaW5kaXZpZHVhbGx5
IGZpcnN0LgorICAgIGZvciAoYXV0byYgbmFtZVNlZ21lbnQgOiBuYW1lUmVzb2x2aW5nQW5vbnlt
b3VzKCkpIHsKKyAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLmFwcGVuZChuYW1lU2Vn
bWVudCk7CisgICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0gY2FzY2FkZUxh
eWVySWRlbnRpZmllck1hcC5lbnN1cmUocmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLCBbJl0gewor
ICAgICAgICAgICAgLy8gUHJldmlvdXNseSB1bnNlZW4gbGF5ZXIuCisgICAgICAgICAgICBydWxl
U2V0LT5tX2Nhc2NhZGVMYXllcnMuYXBwZW5kKHsgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLCBj
dXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAgICAgICAgICAgIHJldHVybiBydWxl
U2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOworICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWU7
CisgICAgfQorfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5ZXIoY29uc3Qg
Q2FzY2FkZUxheWVyTmFtZSYgbmFtZSkKK3sKKyAgICBpZiAobW9kZSAhPSBNb2RlOjpOb3JtYWwp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byBzaXplID0gbmFtZS5pc0VtcHR5KCkg
PyAxIDogbmFtZS5zaXplKCk7IHNpemUtLTspIHsKKyAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZp
ZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGN1cnJlbnRDYXNjYWRlTGF5
ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOworICAgIH0KK30KKwordm9pZCBSdWxlU2V0
QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQoreworICAgIGlmIChjYXNjYWRlTGF5
ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBj
b21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CisgICAgICAgIHdoaWxlIChhICYmIGIpIHsK
KyAgICAgICAgICAgIC8vIElkZW50aWZpZXJzIGFyZSBpbiBwYXJzZSBvcmRlciB3aGljaCBhbG1v
c3QgY29ycmVzcG9uZHMgdG8gdGhlIGxheWVyIHByaW9yaXR5IG9yZGVyLgorICAgICAgICAgICAg
Ly8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4gYSBzdWJsYXllciBnZXRzIGFkZGVkIHRvIGEg
bGF5ZXIgYWZ0ZXIgYWRkaW5nIG90aGVyIG5vbi1zdWJsYXllcnMuCisgICAgICAgICAgICAvLyBU
byByZXNvbHZlIHRoaXMgd2UgbmVlZCBsb29rIGZvciBhIHNoYXJlZCBhbmNlc3RvciBsYXllci4K
KyAgICAgICAgICAgIGF1dG8gYVBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50
aWZpZXIoYSkucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgIGF1dG8gYlBhcmVudCA9IHJ1
bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKKyAg
ICAgICAgICAgIGlmIChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJl
bnQgPT0gYSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChhUGFyZW50
ID4gYlBhcmVudCkKKyAgICAgICAgICAgICAgICBhID0gYVBhcmVudDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBiID0gYlBhcmVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYSA8IGI7CisgICAgfTsKKworICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyPiBvcmRlclZlY3RvcjsKKyAgICBhdXRvIGxheWVyQ291bnQgPSBydWxlU2V0LT5tX2Nh
c2NhZGVMYXllcnMuc2l6ZSgpOworICAgIG9yZGVyVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGF5ZXJDb3VudCk7CisgICAgZm9yIChSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDw9IGxheWVyQ291bnQ7ICsraWRlbnRpZmllcikK
KyAgICAgICAgb3JkZXJWZWN0b3IudW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIpOworCisgICAg
c3RkOjpzb3J0KG9yZGVyVmVjdG9yLmJlZ2luKCksIG9yZGVyVmVjdG9yLmVuZCgpLCBjb21wYXJl
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmRlclZlY3Rvci5zaXplKCk7ICsr
aSkKKyAgICAgICAgcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihvcmRlclZlY3Rv
cltpXSkub3JkZXIgPSBpICsgMTsKK30KKwordm9pZCBSdWxlU2V0QnVpbGRlcjo6YWRkTXV0YXRp
bmdSdWxlc1RvUmVzb2x2ZXIoKQoreworICAgIGlmICghcmVzb2x2ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gY29tcGFyZUxheWVycyA9IFsmXShjb25zdCBhdXRvJiBhLCBjb25zdCBh
dXRvJiBiKSB7CisgICAgICAgIGF1dG8gYU9yZGVyID0gcnVsZVNldC0+Y2FzY2FkZUxheWVyT3Jk
ZXJGb3JJZGVudGlmaWVyKGEubGF5ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBiT3JkZXIg
PSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklkZW50aWZpZXIoYi5sYXllcklkZW50aWZp
ZXIpOworICAgICAgICByZXR1cm4gYU9yZGVyIDwgYk9yZGVyOworICAgIH07CisKKyAgICAvLyBU
aGUgb3JkZXIgbWF5IGNoYW5nZSBzbyB3ZSBuZWVkIHRvIHJlcHJvY2VzcyByZXNvbHZlciBtdXRh
dGluZyBydWxlcyBmcm9tIGVhcmxpZXIgc3R5bGVzaGVldHMuCisgICAgYXV0byBydWxlc1RvQWRk
ID0gc3RkOjpleGNoYW5nZShydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJz
LCB7IH0pOworICAgIHJ1bGVzVG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUoY29sbGVjdGVkUmVz
b2x2ZXJNdXRhdGluZ1J1bGVzKSk7CisKKyAgICBpZiAoIWNhc2NhZGVMYXllcklkZW50aWZpZXJN
YXAuaXNFbXB0eSgpKQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9BZGQuYmVnaW4o
KSwgcnVsZXNUb0FkZC5lbmQoKSwgY29tcGFyZUxheWVycyk7CisKKyAgICBmb3IgKGF1dG8mIGNv
bGxlY3RlZFJ1bGUgOiBydWxlc1RvQWRkKSB7CisgICAgICAgIGlmIChjb2xsZWN0ZWRSdWxlLmxh
eWVySWRlbnRpZmllcikKKyAgICAgICAgICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJNdXRhdGluZ1J1
bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxlY3RlZFJ1bGUpOworCisgICAgICAgIGF1dG8mIHJ1bGUg
PSBjb2xsZWN0ZWRSdWxlLnJ1bGU7CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4o
cnVsZSkpIHsKKyAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVsZS5nZXQoKSks
IGZhbHNlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7CisgICAgICAgICAgICBy
ZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFsZXR0ZVZhbHVlc1J1
bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVS
dWxlS2V5ZnJhbWVzPihydWxlKSkgeworICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEtleWZyYW1l
U3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworUnVsZVNldE1lZGlhUXVlcnlD
b2xsZWN0b3I6On5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpID0gZGVmYXVsdDsKKworYm9v
bCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNvbnN0IE1lZGlh
UXVlcnlTZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBPbmx5IGV2YWx1YXRlIHN0YXRpYyBleHByZXNzaW9ucyB0aGF0IHJlcXVpcmUgc3R5
bGUgcmVidWlsZC4KKyAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgZHluYW1pY1Jlc3VsdHM7
CisgICAgYXV0byBtb2RlID0gY29sbGVjdER5bmFtaWMgPyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpN
b2RlOjpBbHdheXNNYXRjaER5bmFtaWMgOiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNb2RlOjpOb3Jt
YWw7CisKKyAgICBib29sIHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZSgqc2V0LCAmZHluYW1p
Y1Jlc3VsdHMsIG1vZGUpOworCisgICAgaWYgKCFkeW5hbWljUmVzdWx0cy52aWV3cG9ydC5pc0Vt
cHR5KCkpCisgICAgICAgIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzID0gdHJ1ZTsK
KworICAgIGlmICghZHluYW1pY1Jlc3VsdHMuaXNFbXB0eSgpKQorICAgICAgICBkeW5hbWljQ29u
dGV4dFN0YWNrLmFwcGVuZCh7ICpzZXQgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCog
c2V0KQoreworICAgIGlmICghc2V0IHx8IGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0eSgpIHx8
IHNldCAhPSAmZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuc2V0LmdldCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVs
ZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CisgICAgICAgIFJ1bGVT
ZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIGZvciAoYXV0byYgY29u
dGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCisgICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5
U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOworCisgICAgICAgIGlmIChjb2xsZWN0RHlu
YW1pYykgeworICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVuZFZl
Y3RvcihkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMpOwor
ICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1cmVzID0gV1RGTW92ZShkeW5hbWljQ29udGV4dFN0
YWNrLmxhc3QoKS5ydWxlRmVhdHVyZXMpOworICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1cmVz
LnNocmlua1RvRml0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcnVsZXMucmVxdWly
ZXNGdWxsUmVzZXQgPSB0cnVlOworCisgICAgICAgIGR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMuYXBw
ZW5kKFdURk1vdmUocnVsZXMpKTsKKyAgICB9CisKKyAgICBkeW5hbWljQ29udGV4dFN0YWNrLnJl
bW92ZUxhc3QoKTsKK30KKwordm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0
YXRlUmVzb2x2ZXIoKQoreworICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlh
UXVlcnkgPSB0cnVlOworfQorCit2b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjphZGRS
dWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGlmIChkeW5hbWlj
Q29udGV4dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgY29u
dGV4dCA9IGR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpOworICAgIGNvbnRleHQuYWZmZWN0ZWRS
dWxlUG9zaXRpb25zLmFwcGVuZChydWxlRGF0YS5wb3NpdGlvbigpKTsKKyAgICBjb250ZXh0LnJ1
bGVGZWF0dXJlcy5hcHBlbmQoeyBydWxlRGF0YSB9KTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1J1bGVTZXRCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY0YWRmMDgzMTU1ZDA2M2RmNDUyNWYx
ZDViMWQzYmQxNzJjNmJjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJSdWxlU2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBTdHls
ZSB7CisKK3N0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7CisgICAgflJ1bGVTZXRN
ZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CisKKyAgICBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBl
dmFsdWF0b3I7CisgICAgY29uc3QgYm9vbCBjb2xsZWN0RHluYW1pYyB7IGZhbHNlIH07CisKKyAg
ICBzdHJ1Y3QgRHluYW1pY0NvbnRleHQgeworICAgICAgICBSZWY8Y29uc3QgTWVkaWFRdWVyeVNl
dD4gc2V0OworICAgICAgICBWZWN0b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVQb3NpdGlvbnMgeyB9
OworICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9OworICAgIH07Cisg
ICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsgfTsKKworICAg
IFZlY3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWljTWVkaWFRdWVy
eVJ1bGVzIHsgfTsKKyAgICBib29sIGRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlh
UXVlcnkgeyBmYWxzZSB9OworICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJp
ZXMgeyBmYWxzZSB9OworCisgICAgYm9vbCBwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVkaWFRdWVy
eVNldCopOworICAgIHZvaWQgcG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKKyAgICB2b2lkIGRp
ZE11dGF0ZVJlc29sdmVyKCk7CisgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURh
dGEmKTsKK307CisKK3N0cnVjdCBSdWxlU2V0QnVpbGRlciB7CisgICAgZW51bSBjbGFzcyBNb2Rl
IHsgTm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2NhbiB9OworCisgICAgUmVmPFJ1bGVTZXQ+IHJ1
bGVTZXQ7CisgICAgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IgbWVkaWFRdWVyeUNvbGxlY3Rv
cjsKKyAgICBSZXNvbHZlciogcmVzb2x2ZXIgeyBudWxscHRyIH07CisgICAgTW9kZSBtb2RlIHsg
TW9kZTo6Tm9ybWFsIH07CisgICAgQ2FzY2FkZUxheWVyTmFtZSByZXNvbHZlZENhc2NhZGVMYXll
ck5hbWUgeyB9OworICAgIEhhc2hNYXA8Q2FzY2FkZUxheWVyTmFtZSwgUnVsZVNldDo6Q2FzY2Fk
ZUxheWVySWRlbnRpZmllcj4gY2FzY2FkZUxheWVySWRlbnRpZmllck1hcCB7IH07CisgICAgUnVs
ZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmll
ciB7IDAgfTsKKyAgICBWZWN0b3I8UnVsZVNldDo6UmVzb2x2ZXJNdXRhdGluZ1J1bGU+IGNvbGxl
Y3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7IH07CisKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNo
ZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOworCisgICAgflJ1bGVTZXRCdWlsZGVyKCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVSdWxlQmFzZT4+Jik7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Jik7CisKKyAgICB2b2lkIHJlZ2lzdGVyTGF5ZXJzKGNvbnN0IFZlY3RvcjxDYXNjYWRlTGF5ZXJO
YW1lPiYpOworICAgIHZvaWQgcHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1l
Jik7CisgICAgdm9pZCBwb3BDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYpOwor
ICAgIHZvaWQgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB2b2lkIGFkZE11dGF0aW5n
UnVsZXNUb1Jlc29sdmVyKCk7Cit9OworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440035</attachid>
            <date>2021-10-03 23:08:14 -0700</date>
            <delta_ts>2021-10-04 01:41:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231137-20211004090812.patch</filename>
            <type>text/plain</type>
            <size>40396</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRiOTgzMzIzMDBlZjE1
MzFjZmJiZDAwZjQzYjJiY2QyNmFhMzg5OS4uYzU3MTJjMzk1MmFiYzgzMmE4NzQ4NWIwZTIwYjA2
OWJhYmQ5MGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIxLTEwLTAzICBBbnR0
aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFJ1bGVTZXQgYnVp
bGRlciB0byBhIGZpbGUgb2YgaXRzIG93bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMTM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxhbiBCdWp0
YXMuCisKKyAgICAgICAgVGhlcmUgaXMgcXVpdGUgYSBiaXQgb2YgY29kZSBmb3IgaXQuCisKKyAg
ICAgICAgVGhlcmUgaXMgbG90cyBvZiByb29tIGZvciByZWZhY3RvcmluZyBhbmQgY2xlYW51cHMg
aGVyZS4gVGhpcyBwYXRjaCBkb2VzIG5vbmUgb2YgaXQuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogc3R5bGUvUnVsZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6
YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OkJ1aWxkZXI6OmFkZENo
aWxkUnVsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6OkJ1
aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjp+QnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6YWRkU3R5bGVSdWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjpyZWdpc3RlckxheWVycyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6cHVz
aENhc2NhZGVMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dDo6QnVpbGRlcjo6cG9wQ2FzY2FkZUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpSdWxlU2V0OjpCdWlsZGVyOjp1cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6QnVpbGRlcjo6YWRkTXV0YXRp
bmdSdWxlc1RvUmVzb2x2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1
bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9w
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6YWRkUnVsZUlmTmVlZGVkKTog
RGVsZXRlZC4KKworICAgICAgICBNZWRpYVF1ZXJ5Q29sbGVjdG9yIChhbiBpbXBsZW1lbnRhdGlv
biBkZXRhaWwgb2YgdGhlIEJ1aWxkZXIpIG1vdmVzIHRvby4KKworICAgICAgICAqIHN0eWxlL1J1
bGVTZXQuaDoKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp+UnVsZVNldEJ1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRDaGlsZFJ1bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hl
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjphZGRTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpyZWdpc3Rlckxh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNj
YWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpwb3BD
YXNjYWRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjp1
cGRhdGVDYXNjYWRlTGF5ZXJPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dEJ1aWxkZXI6OmFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlk
TXV0YXRlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjphZGRSdWxlSWZOZWVkZWQpOgorICAgICAgICAqIHN0eWxlL1J1bGVTZXRC
dWlsZGVyLmg6IEFkZGVkLgorCiAyMDIxLTEwLTAzICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIERvIG5vdCB0YWtlIGhhbmdpbmcgd2hpdGVzcGFj
ZSBzZXF1ZW5jZSBpbnRvIGFjY291bnQgd2hpbGUgZmluZGluZyBleHBhbnNpb24gb3Bwb3J0dW5p
dGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBkNGVhZWRlZjFlYTUxZGU4YjExMTZkMjA4N2YyYzQwZjQ1
MTFiZTc1Li42YjZkOTQyMWI3MWU0NDI2OGNiNjAwNzg5NTBjMTA1NTVhNjJkNWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMjQ4MCw2ICsyNDgwLDcgQEAgc3R5bGUvUHNldWRvQ2xhc3NDaGFuZ2VJbnZh
bGlkYXRpb24uY3BwCiBzdHlsZS9SdWxlRGF0YS5jcHAKIHN0eWxlL1J1bGVGZWF0dXJlLmNwcAog
c3R5bGUvUnVsZVNldC5jcHAKK3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAogc3R5bGUvU3R5bGVB
ZGp1c3Rlci5jcHAKIHN0eWxlL1N0eWxlQnVpbGRlci5jcHAKIHN0eWxlL1N0eWxlQnVpbGRlclN0
YXRlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGVkNjUwYWU2NmNhZTU5NDg5M2NjNGFjM2JkMGI4MWRiNjlhOWQyYzEuLmVk
ZTlmNjdiYjFhM2EzNDNmM2YzM2I1ZDI1NjY0ZmZlMDM3MTA5NWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyNzEsNiArNTI3
MSw3IEBACiAJCUU0N0MzOTMyMUZFNkUxMDUwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0Mz
OTI4MUZFNkUwREQwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuaCAqLzsgfTsKIAkJ
RTQ3QzM5MzMxRkU2RTEwODAwQkJCQzZCIC8qIFJlbmRlclRyZWVCdWlsZGVyTXVsdGlDb2x1bW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0MzOTI3
MUZFNkUwREMwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlck11bHRpQ29sdW1uLmggKi87IH07
CiAJCUU0N0NFQkM5MjcwNkVGNTIwMEI4RDhGNSAvKiBJbmxpbmVXYWxrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0N0NFQkM3MjcwNkVGNTEwMEI4
RDhGNSAvKiBJbmxpbmVXYWxrZXIuaCAqLzsgfTsKKwkJRTQ3Q0VCRUEyNzA5REZEMTAwQjhEOEY1
IC8qIFJ1bGVTZXRCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDdDRUJFODI3MDlERkQwMDBCOEQ4RjUgLyogUnVsZVNldEJ1aWxkZXIuaCAq
LzsgfTsKIAkJRTQ3Q0VCRTEyNzA5OTE2RDAwQjhEOEY1IC8qIElubGluZUl0ZXJhdG9yVGV4dEJv
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3Q0VC
RTAyNzA5OTE2RDAwQjhEOEY1IC8qIElubGluZUl0ZXJhdG9yVGV4dEJveC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0N0UyNzY1MTYwMzZFRDIw
MEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RTI3NjQxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVu
c2lvblN0eWxlU2hlZXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ3RkM4QTMyNUI4NEQ3MjAwNTQ5NUZDIC8qIExvYWRTY2hlZHVsaW5nTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3RkM4
QTEyNUI4NEQ3MTAwNTQ5NUZDIC8qIExvYWRTY2hlZHVsaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjUzMSw2ICsxNjUzMiw4IEBA
CiAJCUU0N0MzOTJCMUZFNkUwREYwMEJCQkM2QiAvKiBSZW5kZXJUcmVlQnVpbGRlckxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QzM5MkMxRkU2RTBERjAw
QkJCQzZCIC8qIFJlbmRlclRyZWVVcGRhdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclRyZWVVcGRhdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0N0NFQkM3MjcwNkVGNTEwMEI4RDhGNSAvKiBJbmxpbmVXYWxrZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lV2Fsa2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0N0NFQkU4MjcwOURGRDAwMEI4RDhGNSAvKiBSdWxlU2V0QnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdWxlU2V0QnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDdDRUJFQjI3MDlERkRDMDBCOEQ4RjUgLyogUnVsZVNl
dEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUnVsZVNldEJ1aWxkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDdDRUJERTI3MDk5MTY0MDBCOEQ4RjUgLyogSW5s
aW5lSXRlcmF0b3JUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUl0ZXJhdG9y
VGV4dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0NFQkUwMjcwOTkx
NkQwMEI4RDhGNSAvKiBJbmxpbmVJdGVyYXRvclRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlcmF0b3JUZXh0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0N0UyNzY0MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNo
ZWV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25TdHlsZVNo
ZWV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk0MDMsNiArMjk0MDYsOCBA
QAogCQkJCUE3OUJBRDlFMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5oICovLAogCQkJ
CUE3OUJBRDlGMTYxRTdGM0YwMEMyRTY1MiAvKiBSdWxlU2V0LmNwcCAqLywKIAkJCQlBNzlCQURB
MDE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZVNldC5oICovLAorCQkJCUU0N0NFQkVCMjcwOURGREMw
MEI4RDhGNSAvKiBSdWxlU2V0QnVpbGRlci5jcHAgKi8sCisJCQkJRTQ3Q0VCRTgyNzA5REZEMDAw
QjhEOEY1IC8qIFJ1bGVTZXRCdWlsZGVyLmggKi8sCiAJCQkJNzE3M0RFQkQyNjE0REYwNDAwOTdE
RjMyIC8qIFN0eWxlYWJsZS5jcHAgKi8sCiAJCQkJNzEzOTIyQkMyNTE4QUI3MDAwNURCM0MyIC8q
IFN0eWxlYWJsZS5oICovLAogCQkJCUU0NUJBNkIyMjM3NjIyN0UwMDRERkMwNyAvKiBTdHlsZUFk
anVzdGVyLmNwcCAqLywKQEAgLTM1MDAxLDYgKzM1MDA2LDcgQEAKIAkJCQlFNDg2M0NGRTIzODQy
RTlFMDA5NzIxNTggLyogUnVsZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OUJBREEyMTYx
RTdGM0YwMEMyRTY1MiAvKiBSdWxlRmVhdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5QkFE
QTQxNjFFN0YzRjAwQzJFNjUyIC8qIFJ1bGVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0N0NF
QkVBMjcwOURGRDEwMEI4RDhGNSAvKiBSdWxlU2V0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFCQTk0NzEyM0FDMzA1MzAwNDQ0ODQ2IC8qIFJ1bkphdmFTY3JpcHRQYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDc2QkI4MjE5NDU2MzI0MDBDRkQyOUEgLyogUnVuTG9vcE9i
c2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxRjBEN0UyQjgyMDA3QzM5ODMgLyog
cnVudGltZV9hcnJheS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCmlu
ZGV4IGEzZjU2NGQ2YmUyNGU5MTAwOGNjODlkOWEyNzc0NmU3OTI3Y2Q4OTMuLjY4ZWRjZjFlM2U1
NjJhNjVhZTYwZWIyNzI2MWEzYjlkMzZmNjA5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3Bw
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1
ZGUgIlJ1bGVTZXRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNs
dWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckZpbHRlci5oIgpAQCAt
ODMsNyArODQsNyBAQCBzdGF0aWMgYm9vbCBpc0hvc3RTZWxlY3Rvck1hdGNoaW5nSW5TaGFkb3dU
cmVlKGNvbnN0IENTU1NlbGVjdG9yJiBzdGFydFNlbGVjdG9yKQogICAgIHJldHVybiBsZWZ0bW9z
dFNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJiBsZWZ0bW9z
dFNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NI
b3N0OwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiBydWxlLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCwgdW5zaWdu
ZWQgY2FzY2FkZUxheWVySWRlbnRpZmllciwgTWVkaWFRdWVyeUNvbGxlY3RvciogbWVkaWFRdWVy
eUNvbGxlY3RvcikKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShjb25zdCBTdHlsZVJ1bGUmIHJ1bGUs
IHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4LCB1bnNp
Z25lZCBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvciog
bWVkaWFRdWVyeUNvbGxlY3RvcikKIHsKICAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxl
Y3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9ydWxlQ291bnQrKyk7CiAKQEAgLTI3Myw3
ICsyNzQsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmIHJ1bGUp
CiAKIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRl
bnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yKQogewotICAg
IEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9y
IH0gfTsKKyAgICBSdWxlU2V0QnVpbGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1
ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yIH0gfTsKICAgICBidWlsZGVyLmFkZFJ1bGVzRnJvbVNo
ZWV0KHNoZWV0KTsKIAogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCkBAIC0yODMs
MTQgKzI4NCwxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxl
U2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcgogdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0
b3IsIFN0eWxlOjpSZXNvbHZlciYgcmVzb2x2ZXIpCiB7CiAgICAgYXV0byBjYW5Vc2VEeW5hbWlj
TWVkaWFRdWVyeVJlc29sdXRpb24gPSBbJl0gewotICAgICAgICBCdWlsZGVyIGJ1aWxkZXIgeyAq
dGhpcywgTWVkaWFRdWVyeUNvbGxlY3RvciB7IGV2YWx1YXRvciwgdHJ1ZSB9LCBudWxscHRyLCBC
dWlsZGVyOjpNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiB9OworICAgICAgICBSdWxlU2V0QnVp
bGRlciBidWlsZGVyIHsgKnRoaXMsIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVh
dG9yLCB0cnVlIH0sIG51bGxwdHIsIFJ1bGVTZXRCdWlsZGVyOjpNb2RlOjpSZXNvbHZlck11dGF0
aW9uU2NhbiB9OwogICAgICAgICBpZiAoYnVpbGRlci5tZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hB
bmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQpOwogICAgICAgICBidWlsZGVyLm1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHNo
ZWV0UXVlcnkpOwogICAgICAgICByZXR1cm4gIWJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5k
aWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1ZXJ5OwogICAgIH0oKTsKIAotICAg
IEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9y
LCBjYW5Vc2VEeW5hbWljTWVkaWFRdWVyeVJlc29sdXRpb24gfSwgJnJlc29sdmVyIH07CisgICAg
UnVsZVNldEJ1aWxkZXIgYnVpbGRlciB7ICp0aGlzLCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
ciB7IGV2YWx1YXRvciwgY2FuVXNlRHluYW1pY01lZGlhUXVlcnlSZXNvbHV0aW9uIH0sICZyZXNv
bHZlciB9OwogCiAgICAgaWYgKGJ1aWxkZXIubWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZh
bHVhdGUoc2hlZXRRdWVyeSkpCiAgICAgICAgIGJ1aWxkZXIuYWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQpOwpAQCAtMzEwLDIyNyArMzExLDYgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXIKICAgICAg
ICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjpCdWlsZGVyOjphZGRDaGlsZFJ1
bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcykKLXsKLSAgICBm
b3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgewotICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNv
bHZlck11dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVy
V2l0aGluRHluYW1pY01lZGlhUXVlcnkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBp
ZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IE1vZGU6
Ok5vcm1hbCkKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxl
PigqcnVsZSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgewotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTW9k
ZTo6Tm9ybWFsKQotICAgICAgICAgICAgICAgIHJ1bGVTZXQtPmFkZFBhZ2VSdWxlKGRvd25jYXN0
PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpydWxlKSkgewotICAgICAgICAgICAg
YXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTWVkaWE+KCpydWxlKTsKLSAgICAg
ICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFsdWF0ZSgmbWVkaWFSdWxl
Lm1lZGlhUXVlcmllcygpKSkKLSAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVs
ZS5jaGlsZFJ1bGVzKCkpOwotICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AoJm1l
ZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTGF5ZXI+KCpydWxlKSkgewotICAgICAgICAgICAg
YXV0byYgbGF5ZXJSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxlTGF5ZXI+KCpydWxlKTsKLSAgICAg
ICAgICAgIGlmIChsYXllclJ1bGUuaXNTdGF0ZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIC8v
IFN0YXRlbWVudCBzeW50YXgganVzdCByZWdpc3RlcnMgdGhlIGxheWVycy4KLSAgICAgICAgICAg
ICAgICByZWdpc3RlckxheWVycyhsYXllclJ1bGUubmFtZUxpc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBCbG9jayBzeW50YXgu
Ci0gICAgICAgICAgICBwdXNoQ2FzY2FkZUxheWVyKGxheWVyUnVsZS5uYW1lKCkpOwotICAgICAg
ICAgICAgYWRkQ2hpbGRSdWxlcyhsYXllclJ1bGUuY2hpbGRSdWxlcygpKTsKLSAgICAgICAgICAg
IHBvcENhc2NhZGVMYXllcihsYXllclJ1bGUubmFtZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUpIHx8
IGlzPFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPigqcnVsZSkgfHwgaXM8U3R5bGVSdWxlS2V5
ZnJhbWVzPigqcnVsZSkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IE1vZGU6OlJlc29sdmVy
TXV0YXRpb25TY2FuKSB7Ci0gICAgICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5kaWRN
dXRhdGVSZXNvbHZlcigpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHJlc29sdmVyKQotICAgICAgICAgICAgICAgIGNvbGxlY3RlZFJl
c29sdmVyTXV0YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwgY3VycmVudENhc2NhZGVMYXllcklk
ZW50aWZpZXIgfSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaXM8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKSAmJiBkb3duY2FzdDxTdHlsZVJ1bGVTdXBw
b3J0cz4oKnJ1bGUpLmNvbmRpdGlvbklzU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIGFkZENo
aWxkUnVsZXMoZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5jaGlsZFJ1bGVzKCkp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUnVs
ZVNldDo6QnVpbGRlcjo6YWRkUnVsZXNGcm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRz
JiBzaGVldCkKLXsKLSAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5sYXllclJ1bGVzQmVmb3Jl
SW1wb3J0UnVsZXMoKSkKLSAgICAgICAgcmVnaXN0ZXJMYXllcnMocnVsZS0+bmFtZUxpc3QoKSk7
Ci0KLSAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7Ci0gICAgICAg
IGlmICghcnVsZS0+c3R5bGVTaGVldCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAobWVkaWFRdWVyeUNvbGxlY3Rvci5wdXNoQW5kRXZhbHVhdGUocnVsZS0+
bWVkaWFRdWVyaWVzKCkpKSB7Ci0gICAgICAgICAgICBhdXRvJiBjYXNjYWRlTGF5ZXJOYW1lID0g
cnVsZS0+Y2FzY2FkZUxheWVyTmFtZSgpOwotICAgICAgICAgICAgaWYgKGNhc2NhZGVMYXllck5h
bWUpCi0gICAgICAgICAgICAgICAgcHVzaENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7
Ci0KLSAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCkpOwot
Ci0gICAgICAgICAgICBpZiAoY2FzY2FkZUxheWVyTmFtZSkKLSAgICAgICAgICAgICAgICBwb3BD
YXNjYWRlTGF5ZXIoKmNhc2NhZGVMYXllck5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIG1lZGlh
UXVlcnlDb2xsZWN0b3IucG9wKHJ1bGUtPm1lZGlhUXVlcmllcygpKTsKLSAgICB9Ci0KLSAgICBh
ZGRDaGlsZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSk7Ci19Ci0KLVJ1bGVTZXQ6OkJ1aWxkZXI6
On5CdWlsZGVyKCkKLXsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2Nh
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKLSAg
ICBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpOwotfQotCi12b2lkIFJ1bGVTZXQ6OkJ1aWxk
ZXI6OmFkZFN0eWxlUnVsZShjb25zdCBTdHlsZVJ1bGUmIHJ1bGUpCi17Ci0gICAgYXV0byYgc2Vs
ZWN0b3JMaXN0ID0gcnVsZS5zZWxlY3Rvckxpc3QoKTsKLSAgICBpZiAoc2VsZWN0b3JMaXN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAh
PSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHNlbGVjdG9yTGlzdC5pbmRleE9mTmV4dFNlbGVj
dG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZSwg
c2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0SW5kZXgrKywgY3VycmVudENhc2NhZGVMYXllcklk
ZW50aWZpZXIsICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpCdWls
ZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4mIG5hbWVz
KQotewotICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7Ci0gICAgICAgIHB1c2hDYXNjYWRl
TGF5ZXIobmFtZSk7Ci0gICAgICAgIHBvcENhc2NhZGVMYXllcihuYW1lKTsKLSAgICB9Ci19Ci0K
LXZvaWQgUnVsZVNldDo6QnVpbGRlcjo6cHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRlTGF5
ZXJOYW1lJiBuYW1lKQotewotICAgIGlmIChtb2RlICE9IE1vZGU6Ok5vcm1hbCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuaXNFbXB0eSgpICYm
ICFydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZvciBp
bmNyZW1lbnRhbCBidWlsZCwgcmVjb25zdHJ1Y3QgdGhlIG5hbWUtPmlkZW50aWZpZXIgbWFwLgot
ICAgICAgICBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAwOwotICAgICAgICBm
b3IgKGF1dG8mIGxheWVyIDogcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzKQotICAgICAgICAgICAg
Y2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5hZGQobGF5ZXIucmVzb2x2ZWROYW1lLCArK2lkZW50
aWZpZXIpOwotICAgIH0KLQotICAgIGF1dG8gbmFtZVJlc29sdmluZ0Fub255bW91cyA9IFsmXSB7
Ci0gICAgICAgIGlmIChuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gTWFrZSB1bmlx
dWUgbmFtZSBmb3IgYW4gYW5vbnltb3VzIGxheWVyLgotICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIHJhbmRvbSA9IHJhbmRvbU51bWJlcigpICogc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBsb25nIGxvbmc+OjptYXgoKTsKLSAgICAgICAgICAgIHJldHVybiBDYXNjYWRlTGF5ZXJO
YW1lIHsgImFub25fIl9zICsgU3RyaW5nOjpudW1iZXIocmFuZG9tKSB9OwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBuYW1lOwotICAgIH07Ci0KLSAgICAvLyBGb3IgaGllcmFyY2hpY2FsIG5h
bWVzIHdlIHJlZ2lzdGVyIHRoZSBjb250YWluaW5nIGxheWVycyBpbmRpdmlkdWFsbHkgZmlyc3Qu
Ci0gICAgZm9yIChhdXRvJiBuYW1lU2VnbWVudCA6IG5hbWVSZXNvbHZpbmdBbm9ueW1vdXMoKSkg
ewotICAgICAgICByZXNvbHZlZENhc2NhZGVMYXllck5hbWUuYXBwZW5kKG5hbWVTZWdtZW50KTsK
LSAgICAgICAgY3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgPSBjYXNjYWRlTGF5ZXJJZGVu
dGlmaWVyTWFwLmVuc3VyZShyZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIFsmXSB7Ci0gICAgICAg
ICAgICAvLyBQcmV2aW91c2x5IHVuc2VlbiBsYXllci4KLSAgICAgICAgICAgIHJ1bGVTZXQtPm1f
Y2FzY2FkZUxheWVycy5hcHBlbmQoeyByZXNvbHZlZENhc2NhZGVMYXllck5hbWUsIGN1cnJlbnRD
YXNjYWRlTGF5ZXJJZGVudGlmaWVyIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQtPm1f
Y2FzY2FkZUxheWVycy5zaXplKCk7Ci0gICAgICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9
Ci19Ci0KLXZvaWQgUnVsZVNldDo6QnVpbGRlcjo6cG9wQ2FzY2FkZUxheWVyKGNvbnN0IENhc2Nh
ZGVMYXllck5hbWUmIG5hbWUpCi17Ci0gICAgaWYgKG1vZGUgIT0gTW9kZTo6Tm9ybWFsKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8gc2l6ZSA9IG5hbWUuaXNFbXB0eSgpID8gMSA6
IG5hbWUuc2l6ZSgpOyBzaXplLS07KSB7Ci0gICAgICAgIHJlc29sdmVkQ2FzY2FkZUxheWVyTmFt
ZS5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0g
cnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihjdXJyZW50Q2FzY2FkZUxheWVySWRl
bnRpZmllcikucGFyZW50SWRlbnRpZmllcjsKLSAgICB9Ci19Ci0KLXZvaWQgUnVsZVNldDo6QnVp
bGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQotewotICAgIGlmIChjYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb21w
YXJlID0gWyZdKENhc2NhZGVMYXllcklkZW50aWZpZXIgYSwgQ2FzY2FkZUxheWVySWRlbnRpZmll
ciBiKSB7Ci0gICAgICAgIHdoaWxlIChhICYmIGIpIHsKLSAgICAgICAgICAgIC8vIElkZW50aWZp
ZXJzIGFyZSBpbiBwYXJzZSBvcmRlciB3aGljaCBhbG1vc3QgY29ycmVzcG9uZHMgdG8gdGhlIGxh
eWVyIHByaW9yaXR5IG9yZGVyLgotICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlz
IHdoZW4gYSBzdWJsYXllciBnZXRzIGFkZGVkIHRvIGEgbGF5ZXIgYWZ0ZXIgYWRkaW5nIG90aGVy
IG5vbi1zdWJsYXllcnMuCi0gICAgICAgICAgICAvLyBUbyByZXNvbHZlIHRoaXMgd2UgbmVlZCBs
b29rIGZvciBhIHNoYXJlZCBhbmNlc3RvciBsYXllci4KLSAgICAgICAgICAgIGF1dG8gYVBhcmVu
dCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRlbnRpZmll
cjsKLSAgICAgICAgICAgIGF1dG8gYlBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklk
ZW50aWZpZXIoYikucGFyZW50SWRlbnRpZmllcjsKLSAgICAgICAgICAgIGlmIChhUGFyZW50ID09
IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBiIHx8IGJQYXJlbnQgPT0gYSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChhUGFyZW50ID4gYlBhcmVudCkKLSAgICAgICAgICAg
ICAgICBhID0gYVBhcmVudDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiID0g
YlBhcmVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYSA8IGI7Ci0gICAgfTsKLQotICAg
IFZlY3RvcjxDYXNjYWRlTGF5ZXJJZGVudGlmaWVyPiBvcmRlclZlY3RvcjsKLSAgICBhdXRvIGxh
eWVyQ291bnQgPSBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOwotICAgIG9yZGVyVmVj
dG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGF5ZXJDb3VudCk7Ci0gICAgZm9yIChDYXNjYWRl
TGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDw9IGxheWVyQ291bnQ7
ICsraWRlbnRpZmllcikKLSAgICAgICAgb3JkZXJWZWN0b3IudW5jaGVja2VkQXBwZW5kKGlkZW50
aWZpZXIpOwotCi0gICAgc3RkOjpzb3J0KG9yZGVyVmVjdG9yLmJlZ2luKCksIG9yZGVyVmVjdG9y
LmVuZCgpLCBjb21wYXJlKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmRlclZl
Y3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRp
ZmllcihvcmRlclZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKLX0KLQotdm9pZCBSdWxlU2V0OjpC
dWlsZGVyOjphZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpCi17Ci0gICAgaWYgKCFyZXNvbHZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb21wYXJlTGF5ZXJzID0gWyZdKGNvbnN0
IFJlc29sdmVyTXV0YXRpbmdSdWxlJiBhLCBjb25zdCBSZXNvbHZlck11dGF0aW5nUnVsZSYgYikg
ewotICAgICAgICBhdXRvIGFPcmRlciA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllck9yZGVyRm9ySWRl
bnRpZmllcihhLmxheWVySWRlbnRpZmllcik7Ci0gICAgICAgIGF1dG8gYk9yZGVyID0gcnVsZVNl
dC0+Y2FzY2FkZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGIubGF5ZXJJZGVudGlmaWVyKTsKLSAg
ICAgICAgcmV0dXJuIGFPcmRlciA8IGJPcmRlcjsKLSAgICB9OwotCi0gICAgLy8gVGhlIG9yZGVy
IG1heSBjaGFuZ2Ugc28gd2UgbmVlZCB0byByZXByb2Nlc3MgcmVzb2x2ZXIgbXV0YXRpbmcgcnVs
ZXMgZnJvbSBlYXJsaWVyIHN0eWxlc2hlZXRzLgotICAgIGF1dG8gcnVsZXNUb0FkZCA9IHN0ZDo6
ZXhjaGFuZ2UocnVsZVNldC0+bV9yZXNvbHZlck11dGF0aW5nUnVsZXNJbkxheWVycywgeyB9KTsK
LSAgICBydWxlc1RvQWRkLmFwcGVuZFZlY3RvcihXVEZNb3ZlKGNvbGxlY3RlZFJlc29sdmVyTXV0
YXRpbmdSdWxlcykpOwotCi0gICAgaWYgKCFjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1w
dHkoKSkKLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChydWxlc1RvQWRkLmJlZ2luKCksIHJ1bGVz
VG9BZGQuZW5kKCksIGNvbXBhcmVMYXllcnMpOwotCi0gICAgZm9yIChhdXRvJiBjb2xsZWN0ZWRS
dWxlIDogcnVsZXNUb0FkZCkgewotICAgICAgICBpZiAoY29sbGVjdGVkUnVsZS5sYXllcklkZW50
aWZpZXIpCi0gICAgICAgICAgICBydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5
ZXJzLmFwcGVuZChjb2xsZWN0ZWRSdWxlKTsKLQotICAgICAgICBhdXRvJiBydWxlID0gY29sbGVj
dGVkUnVsZS5ydWxlOwotICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUpKSB7
Ci0gICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250
RmFjZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udEZhY2U+KHJ1bGUuZ2V0KCkpLCBmYWxzZSk7
Ci0gICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNo
ZSgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPFN0
eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlKSkgewotICAgICAgICAgICAgcmVzb2x2ZXIt
PmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udFBhbGV0dGVWYWx1ZXNSdWxlKGRvd25j
YXN0PFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPihydWxlLmdldCgpKSk7Ci0gICAgICAgICAg
ICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJhdGlvbnNDYWNoZSgpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUtleWZy
YW1lcz4ocnVsZSkpIHsKLSAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFtZVN0eWxlKGRv
d25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4ocnVsZS5nZXQoKSkpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
Pgogdm9pZCBSdWxlU2V0Ojp0cmF2ZXJzZVJ1bGVEYXRhcyhGdW5jdGlvbiYmIGZ1bmN0aW9uKQog
ewpAQCAtNjcwLDY3ICs0NTAsNSBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKICAgICBt
X3Jlc29sdmVyTXV0YXRpbmdSdWxlc0luTGF5ZXJzLnNocmlua1RvRml0KCk7CiB9CiAKLVJ1bGVT
ZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6On5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0
OwotCi1ib29sIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShj
b25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gT25seSBldmFsdWF0ZSBzdGF0aWMgZXhwcmVzc2lvbnMgdGhhdCBy
ZXF1aXJlIHN0eWxlIHJlYnVpbGQuCi0gICAgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzIGR5bmFt
aWNSZXN1bHRzOwotICAgIGF1dG8gbW9kZSA9IGNvbGxlY3REeW5hbWljID8gTWVkaWFRdWVyeUV2
YWx1YXRvcjo6TW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWljIDogTWVkaWFRdWVyeUV2YWx1YXRvcjo6
TW9kZTo6Tm9ybWFsOwotCi0gICAgYm9vbCByZXN1bHQgPSBldmFsdWF0b3IuZXZhbHVhdGUoKnNl
dCwgJmR5bmFtaWNSZXN1bHRzLCBtb2RlKTsKLQotICAgIGlmICghZHluYW1pY1Jlc3VsdHMudmll
d3BvcnQuaXNFbXB0eSgpKQotICAgICAgICBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmll
cyA9IHRydWU7Ci0KLSAgICBpZiAoIWR5bmFtaWNSZXN1bHRzLmlzRW1wdHkoKSkKLSAgICAgICAg
ZHluYW1pY0NvbnRleHRTdGFjay5hcHBlbmQoeyAqc2V0IH0pOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVk
aWFRdWVyeVNldCogc2V0KQotewotICAgIGlmICghc2V0IHx8IGR5bmFtaWNDb250ZXh0U3RhY2su
aXNFbXB0eSgpIHx8IHNldCAhPSAmZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuc2V0LmdldCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgp
LmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7Ci0g
ICAgICAgIER5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7Ci0gICAgICAgIGZvciAoYXV0byYg
Y29udGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1
ZXJ5U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOwotCi0gICAgICAgIGlmIChjb2xsZWN0
RHluYW1pYykgewotICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVu
ZFZlY3RvcihkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMp
OwotICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1cmVzID0gV1RGTW92ZShkeW5hbWljQ29udGV4
dFN0YWNrLmxhc3QoKS5ydWxlRmVhdHVyZXMpOwotICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1
cmVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcnVsZXMucmVx
dWlyZXNGdWxsUmVzZXQgPSB0cnVlOwotCi0gICAgICAgIGR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMu
YXBwZW5kKFdURk1vdmUocnVsZXMpKTsKLSAgICB9Ci0KLSAgICBkeW5hbWljQ29udGV4dFN0YWNr
LnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpk
aWRNdXRhdGVSZXNvbHZlcigpCi17Ci0gICAgaWYgKGR5bmFtaWNDb250ZXh0U3RhY2suaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWlj
TWVkaWFRdWVyeSA9IHRydWU7Ci19Ci0KLXZvaWQgUnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6YWRkUnVsZUlmTmVlZGVkKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSkKLXsKLSAgICBpZiAo
ZHluYW1pY0NvbnRleHRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIGNvbnRleHQgPSBkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKTsKLSAgICBjb250ZXh0LmFm
ZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBlbmQocnVsZURhdGEucG9zaXRpb24oKSk7Ci0gICAgY29u
dGV4dC5ydWxlRmVhdHVyZXMuYXBwZW5kKHsgcnVsZURhdGEgfSk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFN0eWxlCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKaW5k
ZXggMmQ2ZTRiYmYxMzk1YWU0Njc5NjFkNTE3MzgwZjJjY2I3YzFmNWM4YS4uOGE3MTNlNjVhOThm
OGQ0YmNkN2VkMjYzNDIzMTExZWQ4MjYzYzc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUnVsZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuaApAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNiArNDIsNyBAQCBuYW1l
c3BhY2UgU3R5bGUgewogCiBjbGFzcyBSZXNvbHZlcjsKIGNsYXNzIFJ1bGVTZXQ7CitzdHJ1Y3Qg
UnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3I7CiAKIHVzaW5nIEludmFsaWRhdGlvblJ1bGVTZXRW
ZWN0b3IgPSBWZWN0b3I8UmVmUHRyPGNvbnN0IFJ1bGVTZXQ+LCAxPjsKIApAQCAtODUsMzMgKzg2
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdHJ1Y3QgTWVkaWFRdWVy
eUNvbGxlY3RvciB7Ci0gICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7Ci0KLSAgICAgICAg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOwotICAgICAgICBjb25zdCBib29s
IGNvbGxlY3REeW5hbWljIHsgZmFsc2UgfTsKLQotICAgICAgICBzdHJ1Y3QgRHluYW1pY0NvbnRl
eHQgewotICAgICAgICAgICAgUmVmPGNvbnN0IE1lZGlhUXVlcnlTZXQ+IHNldDsKLSAgICAgICAg
ICAgIFZlY3RvcjxzaXplX3Q+IGFmZmVjdGVkUnVsZVBvc2l0aW9ucyB7IH07Ci0gICAgICAgICAg
ICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9OwotICAgICAgICB9OwotICAgICAg
ICBWZWN0b3I8RHluYW1pY0NvbnRleHQ+IGR5bmFtaWNDb250ZXh0U3RhY2sgeyB9OwotCi0gICAg
ICAgIFZlY3RvcjxEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWljTWVkaWFRdWVyeVJ1bGVz
IHsgfTsKLSAgICAgICAgYm9vbCBkaWRNdXRhdGVSZXNvbHZlcldpdGhpbkR5bmFtaWNNZWRpYVF1
ZXJ5IHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cmllcyB7IGZhbHNlIH07Ci0KLSAgICAgICAgYm9vbCBwdXNoQW5kRXZhbHVhdGUoY29uc3QgTWVk
aWFRdWVyeVNldCopOwotICAgICAgICB2b2lkIHBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7Ci0g
ICAgICAgIHZvaWQgZGlkTXV0YXRlUmVzb2x2ZXIoKTsKLSAgICAgICAgdm9pZCBhZGRSdWxlSWZO
ZWVkZWQoY29uc3QgUnVsZURhdGEmKTsKLSAgICB9OwotCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21T
aGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
Jik7CiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
LCBjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiwgU3R5bGU6OlJlc29sdmVyJik7CiAKLSAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVS
dWxlJiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgs
IHVuc2lnbmVkIGNhc2NhZGVMYXllck9yZGVyID0gMCwgTWVkaWFRdWVyeUNvbGxlY3RvciogPSBu
dWxscHRyKTsKKyAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3R5bGVSdWxlJiwgdW5zaWduZWQgc2Vs
ZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0b3JMaXN0SW5kZXgsIHVuc2lnbmVkIGNhc2NhZGVM
YXllck9yZGVyID0gMCwgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IqID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBhZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlJik7CiAKICAgICB2b2lkIGFkZFRvUnVs
ZVNldChjb25zdCBBdG9tU3RyaW5nJiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEm
KTsKQEAgLTE0OCw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2FzY2FkZUxheWVy
T3JkZXJGb3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQg
c3RydWN0IFJ1bGVTZXRCdWlsZGVyOworCiAgICAgUnVsZVNldCgpOwogCiAgICAgdXNpbmcgQ2Fz
Y2FkZUxheWVySWRlbnRpZmllciA9IHVuc2lnbmVkOwpAQCAtMTU3LDMzICsxMzcsNiBAQCBwcml2
YXRlOgogICAgICAgICBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyIGxheWVySWRlbnRpZmllcjsKICAg
ICB9OwogCi0gICAgc3RydWN0IEJ1aWxkZXIgewotICAgICAgICBlbnVtIGNsYXNzIE1vZGUgeyBO
b3JtYWwsIFJlc29sdmVyTXV0YXRpb25TY2FuIH07Ci0KLSAgICAgICAgUmVmPFJ1bGVTZXQ+IHJ1
bGVTZXQ7Ci0gICAgICAgIE1lZGlhUXVlcnlDb2xsZWN0b3IgbWVkaWFRdWVyeUNvbGxlY3RvcjsK
LSAgICAgICAgU3R5bGU6OlJlc29sdmVyKiByZXNvbHZlciB7IG51bGxwdHIgfTsKLSAgICAgICAg
TW9kZSBtb2RlIHsgTW9kZTo6Tm9ybWFsIH07Ci0gICAgICAgIENhc2NhZGVMYXllck5hbWUgcmVz
b2x2ZWRDYXNjYWRlTGF5ZXJOYW1lIHsgfTsKLSAgICAgICAgSGFzaE1hcDxDYXNjYWRlTGF5ZXJO
YW1lLCBDYXNjYWRlTGF5ZXJJZGVudGlmaWVyPiBjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwIHsg
fTsKLSAgICAgICAgQ2FzY2FkZUxheWVySWRlbnRpZmllciBjdXJyZW50Q2FzY2FkZUxheWVySWRl
bnRpZmllciB7IDAgfTsKLSAgICAgICAgVmVjdG9yPFJlc29sdmVyTXV0YXRpbmdSdWxlPiBjb2xs
ZWN0ZWRSZXNvbHZlck11dGF0aW5nUnVsZXMgeyB9OwotCi0gICAgICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoY29uc3QgU3R5bGVTaGVldENvbnRlbnRzJik7Ci0KLSAgICAgICAgfkJ1aWxkZXIo
KTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+Jik7Ci0gICAgICAgIHZvaWQgYWRkU3R5
bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYpOwotCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJMYXllcnMo
Y29uc3QgVmVjdG9yPENhc2NhZGVMYXllck5hbWU+Jik7Ci0gICAgICAgIHZvaWQgcHVzaENhc2Nh
ZGVMYXllcihjb25zdCBDYXNjYWRlTGF5ZXJOYW1lJik7Ci0gICAgICAgIHZvaWQgcG9wQ2FzY2Fk
ZUxheWVyKGNvbnN0IENhc2NhZGVMYXllck5hbWUmKTsKLSAgICAgICAgdm9pZCB1cGRhdGVDYXNj
YWRlTGF5ZXJPcmRlcigpOwotICAgICAgICB2b2lkIGFkZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVy
KCk7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBDb2xsZWN0ZWRNZWRpYVF1ZXJ5Q2hhbmdlcyB7CiAg
ICAgICAgIGJvb2wgcmVxdWlyZWRGdWxsUmVzZXQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8
c2l6ZV90PiBjaGFuZ2VkUXVlcnlJbmRleGVzIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVT
ZXRCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDFmZTE5MmQ4YjM0ODRiNjdhMDg1YjczYjkxMzg4
NmMwYTQ5ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSdWxlU2V0QnVpbGRlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCitSdWxlU2V0QnVpbGRl
cjo6flJ1bGVTZXRCdWlsZGVyKCkKK3sKKyAgICBpZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11
dGF0aW9uU2NhbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlQ2FzY2FkZUxheWVyT3Jk
ZXIoKTsKKyAgICBhZGRNdXRhdGluZ1J1bGVzVG9SZXNvbHZlcigpOworfQorCit2b2lkIFJ1bGVT
ZXRCdWlsZGVyOjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4+JiBydWxlcykKK3sKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAobW9kZSA9PSBNb2RlOjpSZXNvbHZlck11dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVj
dG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHluYW1pY01lZGlhUXVlcnkpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpZiAoaXM8U3R5bGVSdWxlPigqcnVsZSkpIHsKKyAgICAgICAg
ICAgIGlmIChtb2RlID09IE1vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1
bGUoZG93bmNhc3Q8U3R5bGVSdWxlPigqcnVsZSkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVBhZ2U+KCpydWxlKSkgeworICAgICAg
ICAgICAgaWYgKG1vZGUgPT0gTW9kZTo6Tm9ybWFsKQorICAgICAgICAgICAgICAgIHJ1bGVTZXQt
PmFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBhZ2U+KCpydWxlKSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpy
dWxlKSkgeworICAgICAgICAgICAgYXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxl
TWVkaWE+KCpydWxlKTsKKyAgICAgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hB
bmRFdmFsdWF0ZSgmbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpKSkKKyAgICAgICAgICAgICAgICBh
ZGRDaGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCkpOworICAgICAgICAgICAgbWVkaWFR
dWVyeUNvbGxlY3Rvci5wb3AoJm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlTGF5ZXI+KCpy
dWxlKSkgeworICAgICAgICAgICAgYXV0byYgbGF5ZXJSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxl
TGF5ZXI+KCpydWxlKTsKKyAgICAgICAgICAgIGlmIChsYXllclJ1bGUuaXNTdGF0ZW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIC8vIFN0YXRlbWVudCBzeW50YXgganVzdCByZWdpc3RlcnMgdGhl
IGxheWVycy4KKyAgICAgICAgICAgICAgICByZWdpc3RlckxheWVycyhsYXllclJ1bGUubmFtZUxp
c3QoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvLyBCbG9jayBzeW50YXguCisgICAgICAgICAgICBwdXNoQ2FzY2FkZUxheWVyKGxheWVy
UnVsZS5uYW1lKCkpOworICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhsYXllclJ1bGUuY2hpbGRS
dWxlcygpKTsKKyAgICAgICAgICAgIHBvcENhc2NhZGVMYXllcihsYXllclJ1bGUubmFtZSgpKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1
bGVGb250RmFjZT4oKnJ1bGUpIHx8IGlzPFN0eWxlUnVsZUZvbnRQYWxldHRlVmFsdWVzPigqcnVs
ZSkgfHwgaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmICht
b2RlID09IE1vZGU6OlJlc29sdmVyTXV0YXRpb25TY2FuKSB7CisgICAgICAgICAgICAgICAgbWVk
aWFRdWVyeUNvbGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc29sdmVyKQorICAgICAg
ICAgICAgICAgIGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcy5hcHBlbmQoeyAqcnVsZSwg
Y3VycmVudENhc2NhZGVMYXllcklkZW50aWZpZXIgfSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKSAmJiBk
b3duY2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNvbmRpdGlvbklzU3VwcG9ydGVkKCkp
IHsKKyAgICAgICAgICAgIGFkZENoaWxkUnVsZXMoZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+
KCpydWxlKS5jaGlsZFJ1bGVzKCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6OmFkZFJ1bGVzRnJvbVNoZWV0KGNvbnN0
IFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQpCit7CisgICAgZm9yIChhdXRvJiBydWxlIDogc2hl
ZXQubGF5ZXJSdWxlc0JlZm9yZUltcG9ydFJ1bGVzKCkpCisgICAgICAgIHJlZ2lzdGVyTGF5ZXJz
KHJ1bGUtPm5hbWVMaXN0KCkpOworCisgICAgZm9yIChhdXRvJiBydWxlIDogc2hlZXQuaW1wb3J0
UnVsZXMoKSkgeworICAgICAgICBpZiAoIXJ1bGUtPnN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1c2hBbmRFdmFs
dWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGNhc2NhZGVM
YXllck5hbWUgPSBydWxlLT5jYXNjYWRlTGF5ZXJOYW1lKCk7CisgICAgICAgICAgICBpZiAoY2Fz
Y2FkZUxheWVyTmFtZSkKKyAgICAgICAgICAgICAgICBwdXNoQ2FzY2FkZUxheWVyKCpjYXNjYWRl
TGF5ZXJOYW1lKTsKKworICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoKnJ1bGUtPnN0eWxl
U2hlZXQoKSk7CisKKyAgICAgICAgICAgIGlmIChjYXNjYWRlTGF5ZXJOYW1lKQorICAgICAgICAg
ICAgICAgIHBvcENhc2NhZGVMYXllcigqY2FzY2FkZUxheWVyTmFtZSk7CisgICAgICAgIH0KKyAg
ICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci5wb3AocnVsZS0+bWVkaWFRdWVyaWVzKCkpOworICAg
IH0KKworICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygpKTsKK30KKwordm9pZCBS
dWxlU2V0QnVpbGRlcjo6YWRkU3R5bGVSdWxlKGNvbnN0IFN0eWxlUnVsZSYgcnVsZSkKK3sKKyAg
ICBhdXRvJiBzZWxlY3Rvckxpc3QgPSBydWxlLnNlbGVjdG9yTGlzdCgpOworICAgIGlmIChzZWxl
Y3Rvckxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgc2VsZWN0
b3JMaXN0SW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXggPSAwOyBzZWxl
Y3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gc2VsZWN0b3JMaXN0LmluZGV4
T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKKyAgICAgICAgcnVsZVNldC0+YWRk
UnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrLCBjdXJyZW50Q2Fz
Y2FkZUxheWVySWRlbnRpZmllciwgJm1lZGlhUXVlcnlDb2xsZWN0b3IpOworfQorCit2b2lkIFJ1
bGVTZXRCdWlsZGVyOjpyZWdpc3RlckxheWVycyhjb25zdCBWZWN0b3I8Q2FzY2FkZUxheWVyTmFt
ZT4mIG5hbWVzKQoreworICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKSB7CisgICAgICAgIHB1
c2hDYXNjYWRlTGF5ZXIobmFtZSk7CisgICAgICAgIHBvcENhc2NhZGVMYXllcihuYW1lKTsKKyAg
ICB9Cit9CisKK3ZvaWQgUnVsZVNldEJ1aWxkZXI6OnB1c2hDYXNjYWRlTGF5ZXIoY29uc3QgQ2Fz
Y2FkZUxheWVyTmFtZSYgbmFtZSkKK3sKKyAgICBpZiAobW9kZSAhPSBNb2RlOjpOb3JtYWwpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChjYXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1w
dHkoKSAmJiAhcnVsZVNldC0+bV9jYXNjYWRlTGF5ZXJzLmlzRW1wdHkoKSkgeworICAgICAgICAv
LyBGb3IgaW5jcmVtZW50YWwgYnVpbGQsIHJlY29uc3RydWN0IHRoZSBuYW1lLT5pZGVudGlmaWVy
IG1hcC4KKyAgICAgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
ID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBsYXllciA6IHJ1bGVTZXQtPm1fY2FzY2FkZUxheWVy
cykKKyAgICAgICAgICAgIGNhc2NhZGVMYXllcklkZW50aWZpZXJNYXAuYWRkKGxheWVyLnJlc29s
dmVkTmFtZSwgKytpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBhdXRvIG5hbWVSZXNvbHZpbmdB
bm9ueW1vdXMgPSBbJl0geworICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2UgdW5pcXVlIG5hbWUgZm9yIGFuIGFub255bW91cyBsYXllci4KKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByYW5kb20gPSByYW5kb21OdW1iZXIoKSAqIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPjo6bWF4KCk7CisgICAgICAgICAgICByZXR1
cm4gQ2FzY2FkZUxheWVyTmFtZSB7ICJhbm9uXyJfcyArIFN0cmluZzo6bnVtYmVyKHJhbmRvbSkg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9OworCisgICAgLy8gRm9y
IGhpZXJhcmNoaWNhbCBuYW1lcyB3ZSByZWdpc3RlciB0aGUgY29udGFpbmluZyBsYXllcnMgaW5k
aXZpZHVhbGx5IGZpcnN0LgorICAgIGZvciAoYXV0byYgbmFtZVNlZ21lbnQgOiBuYW1lUmVzb2x2
aW5nQW5vbnltb3VzKCkpIHsKKyAgICAgICAgcmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1lLmFwcGVu
ZChuYW1lU2VnbWVudCk7CisgICAgICAgIGN1cnJlbnRDYXNjYWRlTGF5ZXJJZGVudGlmaWVyID0g
Y2FzY2FkZUxheWVySWRlbnRpZmllck1hcC5lbnN1cmUocmVzb2x2ZWRDYXNjYWRlTGF5ZXJOYW1l
LCBbJl0geworICAgICAgICAgICAgLy8gUHJldmlvdXNseSB1bnNlZW4gbGF5ZXIuCisgICAgICAg
ICAgICBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuYXBwZW5kKHsgcmVzb2x2ZWRDYXNjYWRlTGF5
ZXJOYW1lLCBjdXJyZW50Q2FzY2FkZUxheWVySWRlbnRpZmllciB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBydWxlU2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOworICAgICAgICB9KS5pdGVyYXRv
ci0+dmFsdWU7CisgICAgfQorfQorCit2b2lkIFJ1bGVTZXRCdWlsZGVyOjpwb3BDYXNjYWRlTGF5
ZXIoY29uc3QgQ2FzY2FkZUxheWVyTmFtZSYgbmFtZSkKK3sKKyAgICBpZiAobW9kZSAhPSBNb2Rl
OjpOb3JtYWwpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byBzaXplID0gbmFtZS5p
c0VtcHR5KCkgPyAxIDogbmFtZS5zaXplKCk7IHNpemUtLTspIHsKKyAgICAgICAgcmVzb2x2ZWRD
YXNjYWRlTGF5ZXJOYW1lLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgY3VycmVudENhc2NhZGVMYXll
cklkZW50aWZpZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJGb3JJZGVudGlmaWVyKGN1cnJlbnRD
YXNjYWRlTGF5ZXJJZGVudGlmaWVyKS5wYXJlbnRJZGVudGlmaWVyOworICAgIH0KK30KKwordm9p
ZCBSdWxlU2V0QnVpbGRlcjo6dXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKQoreworICAgIGlmIChj
YXNjYWRlTGF5ZXJJZGVudGlmaWVyTWFwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBjb21wYXJlID0gWyZdKGF1dG8gYSwgYXV0byBiKSB7CisgICAgICAgIHdoaWxlIChh
ICYmIGIpIHsKKyAgICAgICAgICAgIC8vIElkZW50aWZpZXJzIGFyZSBpbiBwYXJzZSBvcmRlciB3
aGljaCBhbG1vc3QgY29ycmVzcG9uZHMgdG8gdGhlIGxheWVyIHByaW9yaXR5IG9yZGVyLgorICAg
ICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4gYSBzdWJsYXllciBnZXRzIGFk
ZGVkIHRvIGEgbGF5ZXIgYWZ0ZXIgYWRkaW5nIG90aGVyIG5vbi1zdWJsYXllcnMuCisgICAgICAg
ICAgICAvLyBUbyByZXNvbHZlIHRoaXMgd2UgbmVlZCBsb29rIGZvciBhIHNoYXJlZCBhbmNlc3Rv
ciBsYXllci4KKyAgICAgICAgICAgIGF1dG8gYVBhcmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXll
ckZvcklkZW50aWZpZXIoYSkucGFyZW50SWRlbnRpZmllcjsKKyAgICAgICAgICAgIGF1dG8gYlBh
cmVudCA9IHJ1bGVTZXQtPmNhc2NhZGVMYXllckZvcklkZW50aWZpZXIoYikucGFyZW50SWRlbnRp
ZmllcjsKKyAgICAgICAgICAgIGlmIChhUGFyZW50ID09IGJQYXJlbnQgfHwgYVBhcmVudCA9PSBi
IHx8IGJQYXJlbnQgPT0gYSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlm
IChhUGFyZW50ID4gYlBhcmVudCkKKyAgICAgICAgICAgICAgICBhID0gYVBhcmVudDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiID0gYlBhcmVudDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gYSA8IGI7CisgICAgfTsKKworICAgIFZlY3RvcjxSdWxlU2V0OjpDYXNjYWRl
TGF5ZXJJZGVudGlmaWVyPiBvcmRlclZlY3RvcjsKKyAgICBhdXRvIGxheWVyQ291bnQgPSBydWxl
U2V0LT5tX2Nhc2NhZGVMYXllcnMuc2l6ZSgpOworICAgIG9yZGVyVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGF5ZXJDb3VudCk7CisgICAgZm9yIChSdWxlU2V0OjpDYXNjYWRlTGF5ZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSAxOyBpZGVudGlmaWVyIDw9IGxheWVyQ291bnQ7ICsraWRl
bnRpZmllcikKKyAgICAgICAgb3JkZXJWZWN0b3IudW5jaGVja2VkQXBwZW5kKGlkZW50aWZpZXIp
OworCisgICAgc3RkOjpzb3J0KG9yZGVyVmVjdG9yLmJlZ2luKCksIG9yZGVyVmVjdG9yLmVuZCgp
LCBjb21wYXJlKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmRlclZlY3Rvci5z
aXplKCk7ICsraSkKKyAgICAgICAgcnVsZVNldC0+Y2FzY2FkZUxheWVyRm9ySWRlbnRpZmllcihv
cmRlclZlY3RvcltpXSkub3JkZXIgPSBpICsgMTsKK30KKwordm9pZCBSdWxlU2V0QnVpbGRlcjo6
YWRkTXV0YXRpbmdSdWxlc1RvUmVzb2x2ZXIoKQoreworICAgIGlmICghcmVzb2x2ZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gY29tcGFyZUxheWVycyA9IFsmXShjb25zdCBhdXRvJiBh
LCBjb25zdCBhdXRvJiBiKSB7CisgICAgICAgIGF1dG8gYU9yZGVyID0gcnVsZVNldC0+Y2FzY2Fk
ZUxheWVyT3JkZXJGb3JJZGVudGlmaWVyKGEubGF5ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0
byBiT3JkZXIgPSBydWxlU2V0LT5jYXNjYWRlTGF5ZXJPcmRlckZvcklkZW50aWZpZXIoYi5sYXll
cklkZW50aWZpZXIpOworICAgICAgICByZXR1cm4gYU9yZGVyIDwgYk9yZGVyOworICAgIH07CisK
KyAgICAvLyBUaGUgb3JkZXIgbWF5IGNoYW5nZSBzbyB3ZSBuZWVkIHRvIHJlcHJvY2VzcyByZXNv
bHZlciBtdXRhdGluZyBydWxlcyBmcm9tIGVhcmxpZXIgc3R5bGVzaGVldHMuCisgICAgYXV0byBy
dWxlc1RvQWRkID0gc3RkOjpleGNoYW5nZShydWxlU2V0LT5tX3Jlc29sdmVyTXV0YXRpbmdSdWxl
c0luTGF5ZXJzLCB7IH0pOworICAgIHJ1bGVzVG9BZGQuYXBwZW5kVmVjdG9yKFdURk1vdmUoY29s
bGVjdGVkUmVzb2x2ZXJNdXRhdGluZ1J1bGVzKSk7CisKKyAgICBpZiAoIWNhc2NhZGVMYXllcklk
ZW50aWZpZXJNYXAuaXNFbXB0eSgpKQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJ1bGVzVG9B
ZGQuYmVnaW4oKSwgcnVsZXNUb0FkZC5lbmQoKSwgY29tcGFyZUxheWVycyk7CisKKyAgICBmb3Ig
KGF1dG8mIGNvbGxlY3RlZFJ1bGUgOiBydWxlc1RvQWRkKSB7CisgICAgICAgIGlmIChjb2xsZWN0
ZWRSdWxlLmxheWVySWRlbnRpZmllcikKKyAgICAgICAgICAgIHJ1bGVTZXQtPm1fcmVzb2x2ZXJN
dXRhdGluZ1J1bGVzSW5MYXllcnMuYXBwZW5kKGNvbGxlY3RlZFJ1bGUpOworCisgICAgICAgIGF1
dG8mIHJ1bGUgPSBjb2xsZWN0ZWRSdWxlLnJ1bGU7CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVG
b250RmFjZT4ocnVsZSkpIHsKKyAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRT
ZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4ocnVs
ZS5nZXQoKSksIGZhbHNlKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hl
ZERlY2xhcmF0aW9uc0NhY2hlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUpKSB7CisgICAg
ICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250UGFsZXR0
ZVZhbHVlc1J1bGUoZG93bmNhc3Q8U3R5bGVSdWxlRm9udFBhbGV0dGVWYWx1ZXM+KHJ1bGUuZ2V0
KCkpKTsKKyAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9u
c0NhY2hlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
aXM8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlKSkgeworICAgICAgICAgICAgcmVzb2x2ZXItPmFk
ZEtleWZyYW1lU3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzPihydWxlLmdldCgpKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworUnVsZVNldE1l
ZGlhUXVlcnlDb2xsZWN0b3I6On5SdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvcigpID0gZGVmYXVs
dDsKKworYm9vbCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cHVzaEFuZEV2YWx1YXRlKGNv
bnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBPbmx5IGV2YWx1YXRlIHN0YXRpYyBleHByZXNzaW9ucyB0aGF0IHJl
cXVpcmUgc3R5bGUgcmVidWlsZC4KKyAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgZHluYW1p
Y1Jlc3VsdHM7CisgICAgYXV0byBtb2RlID0gY29sbGVjdER5bmFtaWMgPyBNZWRpYVF1ZXJ5RXZh
bHVhdG9yOjpNb2RlOjpBbHdheXNNYXRjaER5bmFtaWMgOiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpN
b2RlOjpOb3JtYWw7CisKKyAgICBib29sIHJlc3VsdCA9IGV2YWx1YXRvci5ldmFsdWF0ZSgqc2V0
LCAmZHluYW1pY1Jlc3VsdHMsIG1vZGUpOworCisgICAgaWYgKCFkeW5hbWljUmVzdWx0cy52aWV3
cG9ydC5pc0VtcHR5KCkpCisgICAgICAgIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVz
ID0gdHJ1ZTsKKworICAgIGlmICghZHluYW1pY1Jlc3VsdHMuaXNFbXB0eSgpKQorICAgICAgICBk
eW5hbWljQ29udGV4dFN0YWNrLmFwcGVuZCh7ICpzZXQgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFR
dWVyeVNldCogc2V0KQoreworICAgIGlmICghc2V0IHx8IGR5bmFtaWNDb250ZXh0U3RhY2suaXNF
bXB0eSgpIHx8IHNldCAhPSAmZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuc2V0LmdldCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFm
ZmVjdGVkUnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CisgICAg
ICAgIFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIGZvciAo
YXV0byYgY29udGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCisgICAgICAgICAgICBydWxlcy5t
ZWRpYVF1ZXJ5U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOworCisgICAgICAgIGlmIChj
b2xsZWN0RHluYW1pYykgeworICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25z
LmFwcGVuZFZlY3RvcihkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3Np
dGlvbnMpOworICAgICAgICAgICAgcnVsZXMucnVsZUZlYXR1cmVzID0gV1RGTW92ZShkeW5hbWlj
Q29udGV4dFN0YWNrLmxhc3QoKS5ydWxlRmVhdHVyZXMpOworICAgICAgICAgICAgcnVsZXMucnVs
ZUZlYXR1cmVzLnNocmlua1RvRml0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcnVs
ZXMucmVxdWlyZXNGdWxsUmVzZXQgPSB0cnVlOworCisgICAgICAgIGR5bmFtaWNNZWRpYVF1ZXJ5
UnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZXMpKTsKKyAgICB9CisKKyAgICBkeW5hbWljQ29udGV4
dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3Rv
cjo6ZGlkTXV0YXRlUmVzb2x2ZXIoKQoreworICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHlu
YW1pY01lZGlhUXVlcnkgPSB0cnVlOworfQorCit2b2lkIFJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVj
dG9yOjphZGRSdWxlSWZOZWVkZWQoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoreworICAgIGlm
IChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgY29udGV4dCA9IGR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpOworICAgIGNvbnRleHQu
YWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVuZChydWxlRGF0YS5wb3NpdGlvbigpKTsKKyAgICBj
b250ZXh0LnJ1bGVGZWF0dXJlcy5hcHBlbmQoeyBydWxlRGF0YSB9KTsKK30KKworfQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY0YWRmMDgzMTU1ZDA2
M2RmNDUyNWYxZDViMWQzYmQxNzJjNmJjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSdWxlU2V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBTdHlsZSB7CisKK3N0cnVjdCBSdWxlU2V0TWVkaWFRdWVyeUNvbGxlY3RvciB7CisgICAg
flJ1bGVTZXRNZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CisKKyAgICBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBldmFsdWF0b3I7CisgICAgY29uc3QgYm9vbCBjb2xsZWN0RHluYW1pYyB7IGZhbHNl
IH07CisKKyAgICBzdHJ1Y3QgRHluYW1pY0NvbnRleHQgeworICAgICAgICBSZWY8Y29uc3QgTWVk
aWFRdWVyeVNldD4gc2V0OworICAgICAgICBWZWN0b3I8c2l6ZV90PiBhZmZlY3RlZFJ1bGVQb3Np
dGlvbnMgeyB9OworICAgICAgICBSdWxlRmVhdHVyZVZlY3RvciBydWxlRmVhdHVyZXMgeyB9Owor
ICAgIH07CisgICAgVmVjdG9yPER5bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsg
fTsKKworICAgIFZlY3RvcjxSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzPiBkeW5hbWlj
TWVkaWFRdWVyeVJ1bGVzIHsgfTsKKyAgICBib29sIGRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHlu
YW1pY01lZGlhUXVlcnkgeyBmYWxzZSB9OworICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMgeyBmYWxzZSB9OworCisgICAgYm9vbCBwdXNoQW5kRXZhbHVhdGUoY29uc3Qg
TWVkaWFRdWVyeVNldCopOworICAgIHZvaWQgcG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKKyAg
ICB2b2lkIGRpZE11dGF0ZVJlc29sdmVyKCk7CisgICAgdm9pZCBhZGRSdWxlSWZOZWVkZWQoY29u
c3QgUnVsZURhdGEmKTsKK307CisKK3N0cnVjdCBSdWxlU2V0QnVpbGRlciB7CisgICAgZW51bSBj
bGFzcyBNb2RlIHsgTm9ybWFsLCBSZXNvbHZlck11dGF0aW9uU2NhbiB9OworCisgICAgUmVmPFJ1
bGVTZXQ+IHJ1bGVTZXQ7CisgICAgUnVsZVNldE1lZGlhUXVlcnlDb2xsZWN0b3IgbWVkaWFRdWVy
eUNvbGxlY3RvcjsKKyAgICBSZXNvbHZlciogcmVzb2x2ZXIgeyBudWxscHRyIH07CisgICAgTW9k
ZSBtb2RlIHsgTW9kZTo6Tm9ybWFsIH07CisgICAgQ2FzY2FkZUxheWVyTmFtZSByZXNvbHZlZENh
c2NhZGVMYXllck5hbWUgeyB9OworICAgIEhhc2hNYXA8Q2FzY2FkZUxheWVyTmFtZSwgUnVsZVNl
dDo6Q2FzY2FkZUxheWVySWRlbnRpZmllcj4gY2FzY2FkZUxheWVySWRlbnRpZmllck1hcCB7IH07
CisgICAgUnVsZVNldDo6Q2FzY2FkZUxheWVySWRlbnRpZmllciBjdXJyZW50Q2FzY2FkZUxheWVy
SWRlbnRpZmllciB7IDAgfTsKKyAgICBWZWN0b3I8UnVsZVNldDo6UmVzb2x2ZXJNdXRhdGluZ1J1
bGU+IGNvbGxlY3RlZFJlc29sdmVyTXV0YXRpbmdSdWxlcyB7IH07CisKKyAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyYpOworCisgICAgflJ1bGVTZXRC
dWlsZGVyKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+Jik7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoY29uc3Qg
U3R5bGVSdWxlJik7CisKKyAgICB2b2lkIHJlZ2lzdGVyTGF5ZXJzKGNvbnN0IFZlY3RvcjxDYXNj
YWRlTGF5ZXJOYW1lPiYpOworICAgIHZvaWQgcHVzaENhc2NhZGVMYXllcihjb25zdCBDYXNjYWRl
TGF5ZXJOYW1lJik7CisgICAgdm9pZCBwb3BDYXNjYWRlTGF5ZXIoY29uc3QgQ2FzY2FkZUxheWVy
TmFtZSYpOworICAgIHZvaWQgdXBkYXRlQ2FzY2FkZUxheWVyT3JkZXIoKTsKKyAgICB2b2lkIGFk
ZE11dGF0aW5nUnVsZXNUb1Jlc29sdmVyKCk7Cit9OworCit9Cit9Cg==
</data>
<flag name="commit-queue"
          id="463864"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>