<?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>229616</bug_id>
          
          <creation_ts>2021-08-27 10:38:21 -0700</creation_ts>
          <short_desc>[LFC][IFC] Move LineBoxBuilder to its own file</short_desc>
          <delta_ts>2021-09-04 15:19:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1788062</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-08-27 10:38:21 -0700</bug_when>
    <thetext>This is in preparation for incremental line layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788064</commentid>
    <comment_count>1</comment_count>
      <attachid>436640</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-08-27 10:40:29 -0700</bug_when>
    <thetext>Created attachment 436640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788116</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-27 12:33:01 -0700</bug_when>
    <thetext>Committed r281714 (241058@main): &lt;https://commits.webkit.org/241058@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436640.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788117</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-27 12:34:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/82450099&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790518</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-09-04 15:19:55 -0700</bug_when>
    <thetext>*** Bug 229299 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436640</attachid>
            <date>2021-08-27 10:40:29 -0700</date>
            <delta_ts>2021-08-27 12:33:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229616-20210827104028.patch</filename>
            <type>text/plain</type>
            <size>51019</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNjk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU0ZmJlZjYyNWI2OWI5
MmQ2MzU1ZGJhNTE0NDVjZTliYTkyZjFiOC4uYmMwODYyMDEzODE2NjQ3NTIwMjg5ZTcxYTJiMDgy
N2UzMmMxMjc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTA4LTI3ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJRkNdIE1vdmUgTGlu
ZUJveEJ1aWxkZXIgdG8gaXRzIG93biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk2MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5n
IGluY3JlbWVudGFsIGxpbmUgbGF5b3V0LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVHZW9tZXRyeUZvckxpbmVDb250ZW50KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6cm9vdEJv
eCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWls
ZGVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3hCdWlsZGVyOjppc1Jvb3RMYXlvdXRCb3ggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYW5naW5nR2x5cGhXaWR0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6TGluZUJveEJ1aWxk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6
YnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRl
cjo6c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RBbmRBbGlnbklu
bGluZUxldmVsQm94ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5Lmg6CisKIDIwMjEtMDgtMjcgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtJRkNdW0ludGVncmF0aW9uXSBHZW5lcmF0ZSBydW5zIGZvciB0
aGUgcm9vdCBpbmxpbmVib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNmQ1OWRjM2ZkODc4NGFjMzU3NjBh
ZGRmNWQ5MjA1OGQyNTg0ZDA3Yi4uZjQwZDQ4YmUwNjE3ZjlmMjRkMzE3YjFkMzUzZDBhNzQ4ZjYz
ZmVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NTksNiArMTQ1OSw3IEBAIGxheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUl0ZW0uY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvSW5saW5lTGluZUJveC5jcHAKK2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUxpbmVCb3hCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxp
bmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQm94VmVydGljYWxBbGlnbmVyLmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lVGV4dEl0ZW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDBhYTBlOGQyYjliOTEwNzNiOTgz
YTY4Y2Y1OWY3ZTY2YTJhNTM3NS4uMTZmYTAzYzZhZTEyY2I3MWJhNTdkMmNlNmJjNWFjNGE4Mzll
YmRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNDE3LDYgKzQxNyw3IEBACiAJCTExOTM0MDk3MUZFRDcxNTUwMDkzNUYxRSAv
KiBSZW5kZXJUcmVlQnVpbGRlckZvcm1Db250cm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTE5MzQwOTUxRkVENzE1NTAwOTM1RjFFIC8qIFJlbmRl
clRyZWVCdWlsZGVyRm9ybUNvbnRyb2xzLmggKi87IH07CiAJCTExOTM0MEEzMUZFRTAyNDAwMDkz
NUYxRSAvKiBSZW5kZXJUcmVlQnVpbGRlckJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMTkzNDBBMTFGRUUwMjQwMDA5MzVGMUUgLyogUmVuZGVy
VHJlZUJ1aWxkZXJCbG9jay5oICovOyB9OwogCQkxMTk5RkE0NjIwOEUzNUEzMDAyMzU4Q0MgLyog
TGF5b3V0Q29udGFpbmVyQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxMTk5RkE0NDIwOEUzNUEzMDAyMzU4Q0MgLyogTGF5b3V0Q29udGFpbmVyQm94
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTFD
MzIyN0QyNkQ5NThDRTAwMzI4RjREIC8qIElubGluZUxpbmVCb3hCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUMzMjI3QzI2RDk1OENFMDAz
MjhGNEQgLyogSW5saW5lTGluZUJveEJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxMUNCMjc4OTIwM0JBNTcwMDA0QTFEQzkgLyogUmVu
ZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxMUNCMjc4NzIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1
aWxkZXJGdWxsU2NyZWVuLmggKi87IH07CiAJCTExRTUxNjM4MjYxRTFBMDYwMEU2OUYyNSAvKiBX
ZWJYUklucHV0U3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDExRTUxNjM1MjYxRTFBMDUwMEU2OUYyNSAvKiBXZWJYUklucHV0U3BhY2UuaCAqLzsg
fTsKIAkJMTFFNTE2MzkyNjFFMUEwNjAwRTY5RjI1IC8qIFdlYlhSSW5wdXRTcGFjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxMUU1MTYzNzI2MUUx
QTA1MDBFNjlGMjUgLyogV2ViWFJJbnB1dFNwYWNlLmNwcCAqLzsgfTsKQEAgLTY0NTQsNiArNjQ1
NSw4IEBACiAJCTExOTlGQTQ0MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJCb3gu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Q29udGFpbmVyQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTExOTlGQTQ1MjA4RTM1QTMwMDIzNThDQyAvKiBMYXlvdXRDb250YWluZXJC
b3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0Q29udGFpbmVyQm94LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFCMDQyRkIyMEIwRTIxNDAwODI4QTZCIC8qIExheW91
dERlc2NlbmRhbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
YXlvdXREZXNjZW5kYW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MTFDMzIyN0EyNkQ5NThCNTAwMzI4RjREIC8qIElubGluZUxpbmVCb3hCdWlsZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCb3hCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTFDMzIyN0MyNkQ5NThDRTAwMzI4RjREIC8qIElubGluZUxpbmVCb3hC
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVCb3hC
dWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQzVGMTE2MjAwM0U3NzUw
MDAxQUU2MCAvKiBSZW5kZXJUcmVlQnVpbGRlcklubGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlcklubGluZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQzVGMTE4MjAwM0U3NzYwMDAxQUU2MCAvKiBSZW5kZXJU
cmVlQnVpbGRlcklubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJUcmVlQnVpbGRlcklubGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMUM1
RjExRDIwMDNGNjlFMDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJCbG9ja0Zsb3cuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJCbG9ja0Zsb3cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MDQ1LDYgKzE4MDQ4LDggQEAKIAkJ
CQk2RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oICovLAogCQkJCTZGNjlB
Nzk5MjRENkZBQjgwMEU2Qjg1RCAvKiBJbmxpbmVMaW5lQm94LmNwcCAqLywKIAkJCQk2RkIyNDAw
MzIzREZGMTI3MDA3OTY0NTggLyogSW5saW5lTGluZUJveC5oICovLAorCQkJCTExQzMyMjdBMjZE
OTU4QjUwMDMyOEY0RCAvKiBJbmxpbmVMaW5lQm94QnVpbGRlci5jcHAgKi8sCisJCQkJMTFDMzIy
N0MyNkQ5NThDRTAwMzI4RjREIC8qIElubGluZUxpbmVCb3hCdWlsZGVyLmggKi8sCiAJCQkJNkY2
RUU3NDQyNkQ0NEYwMzAwMzc0Q0RBIC8qIElubGluZUxpbmVCb3hWZXJ0aWNhbEFsaWduZXIuY3Bw
ICovLAogCQkJCTZGNkVFNzQxMjZENDRFRTIwMDM3NENEQSAvKiBJbmxpbmVMaW5lQm94VmVydGlj
YWxBbGlnbmVyLmggKi8sCiAJCQkJNkYyNUIyMDAyMjBBODVBQjAwMDAwMTFCIC8qIElubGluZUxp
bmVCdWlsZGVyLmNwcCAqLywKQEAgLTMzMzA0LDYgKzMzMzA5LDcgQEAKIAkJCQkwNzg0NjM0MzE0
NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTdC
NDkyMTE2QTlCOEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNzUwRDVEMEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTExQzMyMjdEMjZEOTU4Q0UwMDMyOEY0RCAvKiBJbmxpbmVMaW5lQm94QnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1IC8qIEpT
VUlFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY1MzA3RDAxREI2RUU0ODAwRTQxMzdDIC8q
IEpTVUlFdmVudEluaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNzNGQjEyMTkxRUY2RjQwMDdE
RTA2MSAvKiBKU1VzZXJNZXNzYWdlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggZDM0MjMwMDIy
ZDY3ZmVmODBlMDZmZjljMTM4ZDJkMDZlNGRkNGI0Yy4uMzAzMjJjN2RjODlhNDg5ZDM1M2I0Y2Mw
MzE0NzhhYjg1NGIzNzExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiSW5saW5l
TGluZUJveC5oIgorI2luY2x1ZGUgIklubGluZUxpbmVCb3hCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
SW5saW5lTGluZVJ1bi5oIgogI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCiAjaW5jbHVkZSAi
SW52YWxpZGF0aW9uU3RhdGUuaCIKQEAgLTU3Miw3ICs1NzMsNyBAQCBJbmxpbmVSZWN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudChjb25zdCBM
aW5lQnVpbAogICAgIGF1dG8mIGZvcm1hdHRpbmdHZW9tZXRyeSA9IHRoaXMtPmZvcm1hdHRpbmdH
ZW9tZXRyeSgpOwogICAgIGF1dG8gbGluZUluZGV4ID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCku
c2l6ZSgpOwogCi0gICAgYXV0byBsaW5lQm94QW5kR2VvbWV0cnkgPSBmb3JtYXR0aW5nR2VvbWV0
cnkubGluZUJveEZvckxpbmVDb250ZW50KGxpbmVDb250ZW50KTsKKyAgICBhdXRvIGxpbmVCb3hB
bmRHZW9tZXRyeSA9IExpbmVCb3hCdWlsZGVyKCp0aGlzKS5idWlsZChsaW5lQ29udGVudCk7CiAg
ICAgZm9ybWF0dGluZ1N0YXRlLmFkZExpbmVCb3goV1RGTW92ZShsaW5lQm94QW5kR2VvbWV0cnku
bGluZUJveCkpOwogICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRMaW5lKGxpbmVCb3hBbmRHZW9tZXRy
eS5saW5lR2VvbWV0cnkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0
dGluZ0dlb21ldHJ5LmNwcAppbmRleCA2MmJmMTg0NjUzYTk0YjY5MzA1NDJjN2RjYTYxZjg4YWZj
MDkxMmUzLi5kM2RkMWVlOTk2ZDFkZWMwM2FjNmUyNTFiZDAxMjNiYTdiZGQ2YjA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9Jbmxp
bmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTQy
LDMzOCArNDIsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
Ci1jbGFzcyBMaW5lQm94QnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgTGluZUJveEJ1aWxkZXIoY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmKTsKLQotICAgIElubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeTo6TGluZUJveEFuZEdlb21ldHJ5IGJ1aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29u
dGVudCYpOwotCi1wcml2YXRlOgotICAgIHZvaWQgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGlu
ZUJveChJbmxpbmVMZXZlbEJveCYpIGNvbnN0OwotICAgIElubGluZUxheW91dFVuaXQgY29uc3Ry
dWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0
Jik7Ci0KLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9Ci0gICAgY29u
c3QgQm94JiByb290Qm94KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290
KCk7IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3Jt
YXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KLQotICAgIGJvb2wgaXNSb290TGF5b3V0
Qm94KGNvbnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29u
dGFpbmVyQm94ID09ICZyb290Qm94KCk7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLX07Ci0KLXN0YXRp
YyBJbmxpbmVMYXlvdXRVbml0IGhhbmdpbmdHbHlwaFdpZHRoKElubGluZUxheW91dFVuaXQgZXh0
cmFIb3Jpem9udGFsU3BhY2UsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMsIGJvb2wgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KQotewotICAgIC8vIFdoZW4gYSBnbHlwaCBhdCB0aGUgc3Rh
cnQgb3IgZW5kIGVkZ2Ugb2YgYSBsaW5lIGhhbmdzLCBpdCBpcyBub3QgY29uc2lkZXJlZCB3aGVu
IG1lYXN1cmluZyB0aGUgbGluZeKAmXMgY29udGVudHMgZm9yIGZpdCwgYWxpZ25tZW50LCBvciBq
dXN0aWZpY2F0aW9uLgotICAgIC8vIERlcGVuZGluZyBvbiB0aGUgbGluZeKAmXMgYWxpZ25tZW50
L2p1c3RpZmljYXRpb24sIHRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgbWFyayBiZWluZyBwbGFjZWQg
b3V0c2lkZSB0aGUgbGluZSBib3guCi0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy10ZXh0LTMvI2hhbmdpbmcKLSAgICBhdXRvIGlzQ29uZGl0aW9uYWwgPSBpc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQ7Ci0gICAgYXV0byBoYW5naW5nV2lkdGggPSBJbmxpbmVMYXlvdXRVbml0
IHsgfTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykp
IHsKLSAgICAgICAgaWYgKHJ1bi5pc0lubGluZUJveFN0YXJ0KCkgfHwgcnVuLmlzSW5saW5lQm94
RW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVh
aygpKSB7Ci0gICAgICAgICAgICBpc0NvbmRpdGlvbmFsID0gdHJ1ZTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFj
ZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBw
cmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hp
dGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5n
IHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGhhbmdpbmdXaWR0aCArPSBydW4udHJhaWxp
bmdXaGl0ZXNwYWNlV2lkdGgoKTsKLSAgICB9Ci0gICAgLy8gSW4gc29tZSBjYXNlcywgYSBnbHlw
aCBhdCB0aGUgZW5kIG9mIGEgbGluZSBjYW4gY29uZGl0aW9uYWxseSBoYW5nOiBpdCBoYW5ncyBv
bmx5IGlmIGl0IGRvZXMgbm90IG90aGVyd2lzZSBmaXQgaW4gdGhlIGxpbmUgcHJpb3IgdG8ganVz
dGlmaWNhdGlvbi4KLSAgICByZXR1cm4gIWlzQ29uZGl0aW9uYWwgfHwgZXh0cmFIb3Jpem9udGFs
U3BhY2UgPCAwID8gaGFuZ2luZ1dpZHRoIDogSW5saW5lTGF5b3V0VW5pdCB7IH07Ci19Ci0KLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRP
ZmZzZXQoY29uc3QgTGluZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24s
IElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbFdpZHRoLCBib29sIGlzTGFzdExpbmUpCi17Ci0gICAgYXV0byBleHRyYUhvcml6
b250YWxTcGFjZSA9IGxpbmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbFdpZHRoOwotICAg
IC8vIERlcGVuZGluZyBvbiB0aGUgbGluZeKAmXMgYWxpZ25tZW50L2p1c3RpZmljYXRpb24sIHRo
ZSBoYW5naW5nIGdseXBoIGNhbiBiZSBwbGFjZWQgb3V0c2lkZSB0aGUgbGluZSBib3guCi0gICAg
ZXh0cmFIb3Jpem9udGFsU3BhY2UgKz0gaGFuZ2luZ0dseXBoV2lkdGgoZXh0cmFIb3Jpem9udGFs
U3BhY2UsIHJ1bnMsIGlzTGFzdExpbmUpOwotICAgIGlmIChleHRyYUhvcml6b250YWxTcGFjZSA8
PSAwKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxB
bGlnbm1lbnQgPSBbJl0gewotICAgICAgICBpZiAodGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6
Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwotICAgICAgICAvLyBUZXh0
IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRl
eHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxs
IHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1s
YXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0
aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAoaXNMYXN0
TGluZSB8fCAoIXJ1bnMuaXNFbXB0eSgpICYmIHJ1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0OwotICAgICAgICByZXR1cm4g
VGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLSAgICB9OwotCi0gICAgc3dpdGNoIChjb21wdXRlZEhv
cml6b250YWxBbGlnbm1lbnQoKSkgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpTdGFydDoKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJp
Z2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBleHRyYUhvcml6b250YWxTcGFjZTsKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Oldl
YktpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIGV4dHJhSG9yaXpvbnRhbFNwYWNlIC8gMjsKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgIC8vIFRleHRBbGlnbk1vZGU6
Okp1c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUgYm94IGFs
aWdubWVudCBoZXJlKQotICAgICAgICByZXR1cm4geyB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLUxpbmVC
b3hCdWlsZGVyOjpMaW5lQm94QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotewotfQotCi1JbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnk6OkxpbmVCb3hBbmRHZW9tZXRyeSBMaW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3QgTGluZUJ1
aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkKLXsKLSAgICBhdXRvJiBydW5zID0gbGlu
ZUNvbnRlbnQucnVuczsKLSAgICBhdXRvIGNvbnRlbnRMb2dpY2FsV2lkdGggPSBsaW5lQ29udGVu
dC5jb250ZW50TG9naWNhbFdpZHRoOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxMZWZ0ID0gTGF5
b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3RCb3goKS5zdHlsZSgpLnRl
eHRBbGlnbigpLCBsaW5lQ29udGVudC5saW5lTG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNhbFdp
ZHRoLCBsaW5lQ29udGVudC5pc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpLnZhbHVlX29yKElu
bGluZUxheW91dFVuaXQgeyB9KTsKLSAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgcm9vdEJv
eCgpLCBjb250ZW50TG9naWNhbExlZnQsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50
Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxCb3hDb3VudCB9OwotCi0gICAgYXV0byBsaW5lQm94TG9n
aWNhbEhlaWdodCA9IGNvbnN0cnVjdEFuZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBy
dW5zKTsKLQotICAgIGF1dG8gbGluZUdlb21ldHJ5ID0gWyZdIHsKLSAgICAgICAgYXV0byBsaW5l
Qm94TG9naWNhbFJlY3QgPSBJbmxpbmVSZWN0IHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQs
IGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGgsIGxpbmVCb3hMb2dpY2FsSGVpZ2h0IH07Ci0g
ICAgICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKLSAg
ICAgICAgYXV0byBlbmNsb3NpbmdUb3BBbmRCb3R0b20gPSBMaW5lR2VvbWV0cnk6OkVuY2xvc2lu
Z1RvcEFuZEJvdHRvbSB7IHJvb3RJbmxpbmVCb3gubG9naWNhbFRvcCgpLCByb290SW5saW5lQm94
LmxvZ2ljYWxCb3R0b20oKSB9OwotCi0gICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3gg
OiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAgICAgICAgIGlmICgh
aW5saW5lTGV2ZWxCb3guaXNBdG9taWNJbmxpbmVMZXZlbEJveCgpIHx8ICFpbmxpbmVMZXZlbEJv
eC5pc0lubGluZUJveCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC5sYXlvdXRCb3goKTsKLSAgICAgICAg
ICAgIGF1dG8gYm9yZGVyQm94ID0gSW5saW5lUmVjdCB7IH07Ci0KLSAgICAgICAgICAgIGlmIChp
bmxpbmVMZXZlbEJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkpCi0gICAgICAgICAgICAgICAg
Ym9yZGVyQm94ID0gbGluZUJveC5sb2dpY2FsQm9yZGVyQm94Rm9yQXRvbWljSW5saW5lTGV2ZWxC
b3gobGF5b3V0Qm94LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkK
LSAgICAgICAgICAgICAgICBib3JkZXJCb3ggPSBsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JJ
bmxpbmVCb3gobGF5b3V0Qm94LCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotCi0gICAgICAgICAgICBib3JkZXJCb3gubW92ZUJ5KGxpbmVCb3hMb2dpY2Fs
UmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgZW5jbG9zaW5nVG9wQW5kQm90dG9tLnRvcCA9
IHN0ZDo6bWluKGVuY2xvc2luZ1RvcEFuZEJvdHRvbS50b3AsIGJvcmRlckJveC50b3AoKSk7Ci0g
ICAgICAgICAgICBlbmNsb3NpbmdUb3BBbmRCb3R0b20uYm90dG9tID0gc3RkOjptYXgoZW5jbG9z
aW5nVG9wQW5kQm90dG9tLmJvdHRvbSwgYm9yZGVyQm94LmJvdHRvbSgpKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gTGluZUdlb21ldHJ5IHsgbGluZUJveExvZ2ljYWxSZWN0LCBlbmNsb3Np
bmdUb3BBbmRCb3R0b20sIHJvb3RJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgcm9vdElubGluZUJv
eC5iYXNlbGluZSgpLCByb290SW5saW5lQm94LmxvZ2ljYWxMZWZ0KCksIHJvb3RJbmxpbmVCb3gu
bG9naWNhbFdpZHRoKCkgfTsKLSAgICB9OwotICAgIHJldHVybiB7IGxpbmVCb3gsIGxpbmVHZW9t
ZXRyeSgpIH07Ci19Ci0KLXZvaWQgTGluZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlG
b3JJbmxpbmVCb3goSW5saW5lTGV2ZWxCb3gmIGlubGluZUxldmVsQm94KSBjb25zdAotewotICAg
IEFTU0VSVChpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpIHx8IGlubGluZUxldmVsQm94Lmlz
TGluZUJyZWFrQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3gu
c3R5bGUoKS5mb250TWV0cmljcygpOwotICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1l
dHJpY3MuZGVzY2VudCgpOwotICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2Nl
bnQ7Ci0gICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50
ZWdyYWwgcG9zaXRpb25pbmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3Jm
KGFzY2VudCkpOwotICAgIGlubGluZUxldmVsQm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7
Ci0gICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKLQot
ICAgIC8vIEZJWE1FOiBBZGp1c3QgbGF5b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hl
biBhcHBsaWNhYmxlLgotICAgIGF1dG8mIHN0eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94
KCkuc3R5bGUoKTsKLSAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7Ci0g
ICAgaWYgKGxpbmVIZWlnaHQuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgIC8vIElmIGxpbmUtaGVp
Z2h0IGNvbXB1dGVzIHRvIG5vcm1hbCBhbmQgZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9y
IHRoaXMgaXMgdGhlIHJvb3QgaW5saW5lIGJveCwKLSAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxp
bmUgZ2FwIG1ldHJpYyBtYXkgYWxzbyBiZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFk
ZGluZyBoYWxmIHRvIGVhY2ggc2lkZSBhcyBoYWxmLWxlYWRpbmcuCi0gICAgICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2lubGluZS1oZWlnaHQKLSAgICAgICAgLy8g
U2luY2UgdGV4dC1lZGdlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1
ZSBpcyBsZWFkaW5nLCB3ZSBzaG91bGQganVzdCBhcHBseSBpdCB0bwotICAgICAgICAvLyBhbGwg
aW5saW5lIGJveGVzLgotICAgICAgICBhdXRvIGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxp
bmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0KSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxm
TGluZUdhcDsKLSAgICAgICAgZGVzY2VudCArPSBoYWxmTGluZUdhcDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVI
ZWlnaHQoKTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVp
Z2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgICAgIGFzY2VudCArPSBoYWxmTGVh
ZGluZzsKLSAgICAgICAgZGVzY2VudCArPSBoYWxmTGVhZGluZzsKLSAgICB9Ci0gICAgLy8gV2Ug
bmVlZCBmbG9vci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25p
bmcuCi0gICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpM
YXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNjZW50KSwgY2VpbChkZXNjZW50KSB9KTsKLX0KLQotSW5s
aW5lTGF5b3V0VW5pdCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZl
bEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCi17Ci0g
ICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOwotICAgIHNl
dFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gocm9vdElubGluZUJveCk7Ci0KLSAgICAvLyBG
SVhNRTogQWRkIGZhc3QgcGF0aCBzdXBwb3J0IGZvciBsaW5lLWhlaWdodCBjb250ZW50LgotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3Qg
cGF0aCB3aGVuIHRoZSBsaW5lIGhhcyBubyBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3Rh
bmRhcmRzIG1vZGUgb3Igd2l0aCBsaW5lLWhlaWdodCBzZXQuCi0gICAgYXV0byBjYW5Vc2VTaW1w
bGlmaWVkQWxpZ25tZW50ID0gbGF5b3V0U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAmJiByb290
Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpOwotICAgIGF1dG8gdXBkYXRl
Q2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IFsmXShhdXRvJiBpbmxpbmVMZXZlbEJveCwgc3Rk
OjpvcHRpb25hbDxjb25zdCBCb3hHZW9tZXRyeT4gYm94R2VvbWV0cnkgPSBzdGQ6Om51bGxvcHQp
IHsKLSAgICAgICAgaWYgKCFjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gTGluZUJveFZlcnRp
Y2FsQWxpZ25lcjo6Y2FuVXNlU2ltcGxpZmllZEFsaWdubWVudEZvcklubGluZUxldmVsQm94KHJv
b3RJbmxpbmVCb3gsIGlubGluZUxldmVsQm94LCBib3hHZW9tZXRyeSk7Ci0gICAgfTsKLQotICAg
IGF1dG8gY3JlYXRlV3JhcHBlZElubGluZUJveGVzID0gWyZdIHsKLSAgICAgICAgaWYgKHJ1bnMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBBbiBpbmxpbmUgYm94
IG1heSBub3QgbmVjZXNzYXJpbHkgc3RhcnQgb24gdGhlIGN1cnJlbnQgbGluZToKLSAgICAgICAg
Ly8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBicmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5s
aW5lIGJveCgnb3V0ZXInKSA8c3BhbiBpZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxp
bmU8L3NwYW4+PC9zcGFuPgotICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRo
ZXJlJ3MgYW4gSW5saW5lTGV2ZWxCb3ggZm9yIGV2ZXJ5IGlubGluZSBib3ggdGhhdCdzIHByZXNl
bnQgb24gdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgLy8gSW4gbmVzdGluZyBjYXNlIHdlIG5l
ZWQgdG8gY3JlYXRlIElubGluZUxldmVsQm94ZXMgZm9yIHRoZSBpbmxpbmUgYm94IGFuY2VzdG9y
cy4KLSAgICAgICAgLy8gV2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uIHRoZSBmaXJzdCBydW4gYXMg
YW55IHN1YnNlcXVlbnQgaW5saW5lIGNvbnRlbnQgaXMgZWl0aGVyIGF0IHRoZSBzYW1lL2hpZ2hl
ciBuZXN0aW5nIGxldmVsIG9yCi0gICAgICAgIC8vIG5lc3RlZCB3aXRoIGEgW2lubGluZSBib3gg
c3RhcnRdIHJ1bi4KLSAgICAgICAgYXV0byYgZmlyc3RSdW4gPSBydW5zWzBdOwotICAgICAgICBh
dXRvJiBmaXJzdFJ1blBhcmVudExheW91dEJveCA9IGZpcnN0UnVuLmxheW91dEJveCgpLnBhcmVu
dCgpOwotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIHRoZSBmb3JtYXR0aW5nIHJvb3QsIHdl
IGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMgcm9vdCBpbmxpbmUgYm94IGNvbnRlbnQsIHRoZXJlJ3Mg
bm8gbmVzdGluZyBpbmxpbmUgYm94IGZyb20gdGhlIHByZXZpb3VzIGxpbmUocykKLSAgICAgICAg
Ly8gdW5sZXNzIHRoZSBpbmxpbmUgYm94IGNsb3NpbmcgaXMgZm9yY2VkIG92ZXIgdG8gdGhlIGN1
cnJlbnQgbGluZS4KLSAgICAgICAgLy8gZS5nLgotICAgICAgICAvLyA8c3Bhbj5ub3JtYWxseSB0
aGUgaW5saW5lIGJveCBjbG9zaW5nIGZvcm1zIGEgY29udGludW91cyBjb250ZW50PC9zcGFuPgot
ICAgICAgICAvLyA8c3Bhbj51bmxlc3MgaXQncyBmb3JjZWQgdG8gdGhlIG5leHQgbGluZTxicj48
L3NwYW4+Ci0gICAgICAgIGF1dG8gZmlyc3RSdW5OZWVkc0lubGluZUJveCA9IGZpcnN0UnVuLmlz
SW5saW5lQm94RW5kKCk7Ci0gICAgICAgIGlmICghZmlyc3RSdW5OZWVkc0lubGluZUJveCAmJiBp
c1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5QYXJlbnRMYXlvdXRCb3gpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBWZWN0b3I8Y29uc3QgQm94Kj4gbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5l
Qm94ZXM7Ci0gICAgICAgIGlmIChmaXJzdFJ1bk5lZWRzSW5saW5lQm94KQotICAgICAgICAgICAg
bGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXMuYXBwZW5kKCZmaXJzdFJ1bi5sYXlvdXRCb3go
KSk7Ci0gICAgICAgIGF1dG8qIGFuY2VzdG9yID0gJmZpcnN0UnVuUGFyZW50TGF5b3V0Qm94Owot
ICAgICAgICB3aGlsZSAoIWlzUm9vdExheW91dEJveCgqYW5jZXN0b3IpKSB7Ci0gICAgICAgICAg
ICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcy5hcHBlbmQoYW5jZXN0b3IpOwotICAgICAg
ICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0b3ItPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIENvbnN0cnVjdCB0aGUgbWlzc2luZyBMaW5lQm94OjpJbmxpbmVCb3hlcyBzdGFydGluZyB3
aXRoIHRoZSB0b3Btb3N0IGxheW91dCBib3guCi0gICAgICAgIGZvciAoYXV0byogbGF5b3V0Qm94
IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcykp
IHsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlu
bGluZUJveCgqbGF5b3V0Qm94LCByb290SW5saW5lQm94LmxvZ2ljYWxMZWZ0KCksIHJvb3RJbmxp
bmVCb3gubG9naWNhbFdpZHRoKCkpOwotICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveChpbmxpbmVCb3gpOwotICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmll
ZEFsaWdubWVudChpbmxpbmVCb3gpOwotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZl
bEJveChXVEZNb3ZlKGlubGluZUJveCkpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBjcmVhdGVX
cmFwcGVkSW5saW5lQm94ZXMoKTsKLQotICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsK
LSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0g
cnVuLmxheW91dEJveCgpOwotICAgICAgICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4g
Ym9vbCB7Ci0gICAgICAgICAgICBBU1NFUlQoIWxpbmVIYXNDb250ZW50KTsKLSAgICAgICAgICAg
IGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygp
IHx8IHJ1bi5pc0hhcmRMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIGF1dG8mIGlubGluZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2
ZSBob3Jpem9udGFsIG1hcmdpbiBtYWtlcyB0aGUgbGluZSAiY29udGVudGZ1bCIuCi0gICAgICAg
ICAgICBpZiAocnVuLmlzSW5saW5lQm94U3RhcnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
aW5saW5lQm94R2VvbWV0cnkubWFyZ2luU3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3Jk
ZXJMZWZ0KCkgfHwgaW5saW5lQm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZV9vcigwX2x1
KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hFbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gaW5saW5lQm94R2VvbWV0cnkubWFyZ2luRW5kKCkgfHwgaW5saW5lQm94R2VvbWV0
cnkuYm9yZGVyUmlnaHQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1
ZV9vcigwX2x1KTsKLSAgICAgICAgICAgIGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH07Ci0gICAgICAg
IGxpbmVIYXNDb250ZW50ID0gbGluZUhhc0NvbnRlbnQgfHwgcnVuSGFzQ29udGVudCgpOwotICAg
ICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0gcm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpICsgcnVu
LmxvZ2ljYWxMZWZ0KCk7Ci0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAg
YXV0byYgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0g
aW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLSAgICAgICAgICAgIGF1
dG8gYXNjZW50ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBpZiAobGF5b3V0
U3RhdGUoKS5zaG91bGROb3RTeW50aGVzaXplSW5saW5lQmxvY2tCYXNlbGluZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSW50ZWdyYXRpb24gY29kZXBhdGggY29uc3RydWN0cyByZXBsYWNlZCBi
b3hlcyBmb3IgaW5saW5lLWJsb2NrIGNvbnRlbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKGxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpOwotICAgICAgICAgICAgICAgIGFzY2VudCA9ICpkb3du
Y2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGJhc2VsaW5lIG9mIGFuICdpbmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBp
dHMgbGFzdCBsaW5lIGJveCBpbiB0aGUgbm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVy
IG5vIGluLWZsb3cgbGluZSBib3hlcyBvcgotICAgICAgICAgICAgICAgIC8vIGlmIGl0cyAnb3Zl
cmZsb3cnIHByb3BlcnR5IGhhcyBhIGNvbXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUn
LCBpbiB3aGljaCBjYXNlIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG1hcmdpbiBlZGdlLgot
ICAgICAgICAgICAgICAgIGF1dG8gc3ludGhlc2l6ZUJhc2VsaW5lID0gIWxheW91dEJveC5lc3Rh
Ymxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgIWxheW91dEJveC5zdHlsZSgpLmlz
T3ZlcmZsb3dWaXNpYmxlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5bnRoZXNpemVCYXNlbGlu
ZSkKLSAgICAgICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25j
YXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IGxhc3RMaW5lID0gZm9ybWF0dGluZ1N0YXRlLmxpbmVzKCkubGFzdCgpOwotICAgICAgICAgICAg
ICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZS5saW5lQm94TG9naWNh
bFJlY3QoKS50b3AoKSArIGxhc3RMaW5lLmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGFzY2VudCA9IGlubGluZUxldmVsQm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVM
ZXZlbEJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRk
aW5nVG9wKCkudmFsdWVfb3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkK
LSAgICAgICAgICAgICAgICBhc2NlbnQgPSBkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94
KS5iYXNlbGluZSgpLnZhbHVlX29yKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgYXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OwotICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gc3RkOjptYXgoMF9sdSwgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJn
aW5TdGFydCgpKTsKLSAgICAgICAgICAgIGF1dG8gYXRvbWljSW5saW5lTGV2ZWxCb3ggPSBJbmxp
bmVMZXZlbEJveDo6Y3JlYXRlQXRvbWljSW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBsb2dpY2Fs
TGVmdCwgeyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LmJvcmRlckJveFdpZHRoKCksIG1hcmdpbkJv
eEhlaWdodCB9KTsKLSAgICAgICAgICAgIGF0b21pY0lubGluZUxldmVsQm94LnNldEJhc2VsaW5l
KGFzY2VudCk7Ci0gICAgICAgICAgICBhdG9taWNJbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3Vu
ZHMoSW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGFzY2VudCwgbWFyZ2luQm94SGVpZ2h0
IC0gYXNjZW50IH0pOwotICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVu
dChhdG9taWNJbmxpbmVMZXZlbEJveCwgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7Ci0gICAgICAg
ICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoYXRvbWljSW5saW5lTGV2ZWxC
b3gpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChydW4u
aXNJbmxpbmVCb3hTdGFydCgpKSB7Ci0gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGRv
bid0IGtub3cgeWV0IGhvdyB3aWRlIHRoaXMgaW5saW5lIGJveCBpcy4gTGV0J3MgYXNzdW1lIGl0
J3MgYXMgbG9uZyBhcyB0aGUgbGluZSBpcwotICAgICAgICAgICAgLy8gYW5kIGFkanVzdCBpdCBs
YXRlciBpZiB3ZSBjb21lIGFjcm9zcyBhbiBpbmxpbmVCb3hFbmQgcnVuIChzZWUgYmVsb3cpLgot
ICAgICAgICAgICAgLy8gSW5saW5lIGJveCBydW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0
J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94LgotICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFy
dCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5T
dGFydCgpOwotICAgICAgICAgICAgYXV0byBpbml0aWFsTG9naWNhbFdpZHRoID0gcm9vdElubGlu
ZUJveC5sb2dpY2FsV2lkdGgoKSAtIChydW4ubG9naWNhbExlZnQoKSArIG1hcmdpblN0YXJ0KTsK
LSAgICAgICAgICAgIEFTU0VSVChpbml0aWFsTG9naWNhbFdpZHRoID49IDApOwotICAgICAgICAg
ICAgYXV0byBpbmxpbmVCb3ggPSBJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91
dEJveCwgbG9naWNhbExlZnQgKyBtYXJnaW5TdGFydCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7Ci0g
ICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7Ci0g
ICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGlubGluZUJveCk7Ci0g
ICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSW5s
aW5lQm94RW5kKCkpIHsKLSAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3
aGVuIHRoZSBpbmxpbmUgYm94IGNsb3NlcyBvbiB0aGlzIGxpbmUuCi0gICAgICAgICAgICAvLyBO
b3RlIHRoYXQgbWFyZ2luIGVuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGxvZ2ljYWwgd2lkdGggKGUu
Zy4gcG9zaXRpdmUgbWFyZ2luIHJpZ2h0IGRvZXMgbm90IG1ha2UgdGhlIHJ1biB3aWRlcikuCi0g
ICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5saW5lQm94LmlzSW5saW5l
Qm94KCkpOwotICAgICAgICAgICAgLy8gSW5saW5lIGJveCBydW4gaXMgYmFzZWQgb24gbWFyZ2lu
IGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94LgotICAgICAgICAgICAgLy8gTmVn
YXRpdmUgbWFyZ2luIGVuZCBtYWtlcyB0aGUgcnVuIGhhdmUgbmVnYXRpdmUgd2lkdGguCi0gICAg
ICAgICAgICBhdXRvIG1hcmdpbkVuZEFkanVzdGVtbnQgPSAtZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLm1hcmdpbkVuZCgpOwotICAgICAgICAgICAgYXV0byBs
b2dpY2FsV2lkdGggPSBydW4ubG9naWNhbFdpZHRoKCkgKyBtYXJnaW5FbmRBZGp1c3RlbW50Owot
ICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIGxv
Z2ljYWxXaWR0aDsKLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNvbnRlbnQgcHVsbHMgdGhlIDwv
c3Bhbj4gdG8gdGhlIGxvZ2ljYWwgbGVmdCBkaXJlY3Rpb24gKGUuZy4gbmVnYXRpdmUgbGV0dGVy
IHNwYWNlKQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIG5l
Z2F0aXZlIGxvZ2ljYWwgd2lkdGggb24gdGhlIGlubGluZSBib3guCi0gICAgICAgICAgICBpbmxp
bmVCb3guc2V0TG9naWNhbFdpZHRoKHN0ZDo6bWF4KDAuZiwgaW5saW5lQm94TG9naWNhbFJpZ2h0
IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpKTsKLSAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNp
bXBsaWZpZWRBbGlnbm1lbnQoaW5saW5lQm94KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhl
aWdodCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJv
eC4KLSAgICAgICAgICAgIGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94LnBhcmVudCgpKS5zZXRIYXNDb250ZW50KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7Ci0gICAgICAgICAg
ICBhdXRvIGxpbmVCcmVha0JveCA9IElubGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJlYWtCb3go
bGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5
Rm9ySW5saW5lQm94KGxpbmVCcmVha0JveCk7Ci0gICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1w
bGlmaWVkQWxpZ25tZW50KGxpbmVCcmVha0JveCk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElu
bGluZUxldmVsQm94KFdURk1vdmUobGluZUJyZWFrQm94KSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkg
ewotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChJbmxpbmVMZXZlbEJveDo6
Y3JlYXRlR2VuZXJpY0lubGluZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExlZnQpKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLQotICAgIGxpbmVCb3guc2V0SGFzQ29udGVudChsaW5lSGFzQ29udGVudCk7
Ci0KLSAgICBhdXRvIHZlcnRpY2FsQWxpZ25lciA9IExpbmVCb3hWZXJ0aWNhbEFsaWduZXIgeyBm
b3JtYXR0aW5nQ29udGV4dCgpIH07Ci0gICAgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IGNh
blVzZVNpbXBsaWZpZWRBbGlnbm1lbnQgfHwgIWxpbmVIYXNDb250ZW50OwotICAgIHJldHVybiB2
ZXJ0aWNhbEFsaWduZXIuY29tcHV0ZUxvZ2ljYWxIZWlnaHRBbmRBbGlnbihsaW5lQm94LCBjYW5V
c2VTaW1wbGlmaWVkQWxpZ25tZW50KTsKLX0KLQogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjpJ
bmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgIDogRm9ybWF0dGluZ0dlb21ldHJ5KGlubGluZUZv
cm1hdHRpbmdDb250ZXh0KQogewogfQogCi1JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OkxpbmVC
b3hBbmRHZW9tZXRyeSBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29u
dGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KSBjb25zdAot
ewotICAgIHJldHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChs
aW5lQ29udGVudCk7Ci19Ci0KIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0dlb21l
dHJ5Ojpsb2dpY2FsVG9wRm9yTmV4dExpbmUoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50
JiBsaW5lQ29udGVudCwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91c0xpbmVMb2dpY2FsQm90dG9t
LCBjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4dCkgY29uc3QKIHsKICAgICAv
LyBOb3JtYWxseSB0aGUgbmV4dCBsaW5lJ3MgbG9naWNhbCB0b3AgaXMgdGhlIHByZXZpb3VzIGxp
bmUncyBsb2dpY2FsIGJvdHRvbSwgYnV0IHdoZW4gdGhlIGxpbmUgZW5kcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCA1YTg1OGIwOGE4ZWM4
MDhiZGFhMDkyYmVkMWI1NTY5Y2VhZmQ2Njg0Li5kMDRmODQ0YTMyYzMwOTY2YTVkNjVjYzI4ZmE2
MjUzYzk3ZWZjNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuaApAQCAtMjgsMjMgKzI4LDE4IEBACiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRU
SU5HX0NPTlRFWFQpCiAKICNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKLSNpbmNsdWRl
ICJJbmxpbmVMaW5lQm94LmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJ1aWxkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK2NsYXNzIEZsb2F0aW5nQ29u
dGV4dDsKIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0OwogCiBjbGFzcyBJbmxpbmVGb3Jt
YXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAg
ICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
KTsKIAotICAgIHN0cnVjdCBMaW5lQm94QW5kR2VvbWV0cnkgewotICAgICAgICBMaW5lQm94IGxp
bmVCb3g7Ci0gICAgICAgIExpbmVHZW9tZXRyeSBsaW5lR2VvbWV0cnk7Ci0gICAgfTsKLSAgICBM
aW5lQm94QW5kR2VvbWV0cnkgbGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVy
OjpMaW5lQ29udGVudCYpIGNvbnN0OwogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcEZv
ck5leHRMaW5lKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYsIElubGluZUxheW91dFVu
aXQgcHJldmlvdXNMaW5lTG9naWNhbEJvdHRvbSwgY29uc3QgRmxvYXRpbmdDb250ZXh0JikgY29u
c3Q7CiAKICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrQ29udGVudEhlaWdo
dEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWls
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUxpbmVCb3hCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTg4MWE2YzQ2NmM4YjU2OTcw
YzQ4MGMwNDgzYWE3NzZhMDRmOWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJveEJ1aWxkZXIuY3Bw
CkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklubGluZUxpbmVCb3hCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJJbmxpbmVMaW5lQnVp
bGRlci5oIgorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0aWMgSW5saW5lTGF5b3V0
VW5pdCBoYW5naW5nR2x5cGhXaWR0aChJbmxpbmVMYXlvdXRVbml0IGV4dHJhSG9yaXpvbnRhbFNw
YWNlLCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBib29sIGlzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCkKK3sKKyAgICAvLyBXaGVuIGEgZ2x5cGggYXQgdGhlIHN0YXJ0IG9yIGVuZCBlZGdl
IG9mIGEgbGluZSBoYW5ncywgaXQgaXMgbm90IGNvbnNpZGVyZWQgd2hlbiBtZWFzdXJpbmcgdGhl
IGxpbmXigJlzIGNvbnRlbnRzIGZvciBmaXQsIGFsaWdubWVudCwgb3IganVzdGlmaWNhdGlvbi4K
KyAgICAvLyBEZXBlbmRpbmcgb24gdGhlIGxpbmXigJlzIGFsaWdubWVudC9qdXN0aWZpY2F0aW9u
LCB0aGlzIGNhbiByZXN1bHQgaW4gdGhlIG1hcmsgYmVpbmcgcGxhY2VkIG91dHNpZGUgdGhlIGxp
bmUgYm94LgorICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdGV4dC0zLyNoYW5n
aW5nCisgICAgYXV0byBpc0NvbmRpdGlvbmFsID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OworICAgIGF1dG8gaGFuZ2luZ1dpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgZm9y
IChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKHJ1bnMpKSB7CisgICAgICAgIGlm
IChydW4uaXNJbmxpbmVCb3hTdGFydCgpIHx8IHJ1bi5pc0lubGluZUJveEVuZCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAg
ICAgICAgaXNDb25kaXRpb25hbCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1
bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBX
aGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMg
aXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0
ZXNwYWNlLgorICAgICAgICBoYW5naW5nV2lkdGggKz0gcnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdp
ZHRoKCk7CisgICAgfQorICAgIC8vIEluIHNvbWUgY2FzZXMsIGEgZ2x5cGggYXQgdGhlIGVuZCBv
ZiBhIGxpbmUgY2FuIGNvbmRpdGlvbmFsbHkgaGFuZzogaXQgaGFuZ3Mgb25seSBpZiBpdCBkb2Vz
IG5vdCBvdGhlcndpc2UgZml0IGluIHRoZSBsaW5lIHByaW9yIHRvIGp1c3RpZmljYXRpb24uCisg
ICAgcmV0dXJuICFpc0NvbmRpdGlvbmFsIHx8IGV4dHJhSG9yaXpvbnRhbFNwYWNlIDwgMCA/IGhh
bmdpbmdXaWR0aCA6IElubGluZUxheW91dFVuaXQgeyB9OworfQorCitzdGF0aWMgc3RkOjpvcHRp
b25hbDxJbmxpbmVMYXlvdXRVbml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KGNvbnN0IExp
bmU6OlJ1bkxpc3QmIHJ1bnMsIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBJbmxpbmVMYXlvdXRV
bml0IGxpbmVMb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0
aCwgYm9vbCBpc0xhc3RMaW5lKQoreworICAgIGF1dG8gZXh0cmFIb3Jpem9udGFsU3BhY2UgPSBs
aW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICAvLyBEZXBlbmRpbmcg
b24gdGhlIGxpbmXigJlzIGFsaWdubWVudC9qdXN0aWZpY2F0aW9uLCB0aGUgaGFuZ2luZyBnbHlw
aCBjYW4gYmUgcGxhY2VkIG91dHNpZGUgdGhlIGxpbmUgYm94LgorICAgIGV4dHJhSG9yaXpvbnRh
bFNwYWNlICs9IGhhbmdpbmdHbHlwaFdpZHRoKGV4dHJhSG9yaXpvbnRhbFNwYWNlLCBydW5zLCBp
c0xhc3RMaW5lKTsKKyAgICBpZiAoZXh0cmFIb3Jpem9udGFsU3BhY2UgPD0gMCkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50ID0gWyZd
IHsKKyAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQorICAg
ICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKKyAgICAgICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQg
YWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJv
cGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUgbGluZSBib3gu
IFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwKKyAgICAgICAg
Ly8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUg
YmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKGlzTGFzdExpbmUgfHwgKCFydW5z
LmlzRW1wdHkoKSAmJiBydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKSkKKyAgICAgICAgICAgIHJl
dHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6
Okp1c3RpZnk7CisgICAgfTsKKworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgorICAgICAgICByZXR1cm4gZXh0cmFIb3Jpem9udGFsU3BhY2U7CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Cisg
ICAgICAgIHJldHVybiBleHRyYUhvcml6b250YWxTcGFjZSAvIDI7CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEg
cnVuIGFsaWdubWVudCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lN
UExFTUVOVEVEX1lFVCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitMaW5lQm94QnVpbGRlcjo6TGlu
ZUJveEJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQorICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKK3sKK30KKworTGluZUJveEJ1aWxkZXI6OkxpbmVCb3hBbmRHZW9tZXRyeSBM
aW5lQm94QnVpbGRlcjo6YnVpbGQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5l
Q29udGVudCkKK3sKKyAgICBhdXRvJiBydW5zID0gbGluZUNvbnRlbnQucnVuczsKKyAgICBhdXRv
IGNvbnRlbnRMb2dpY2FsV2lkdGggPSBsaW5lQ29udGVudC5jb250ZW50TG9naWNhbFdpZHRoOwor
ICAgIGF1dG8gY29udGVudExvZ2ljYWxMZWZ0ID0gTGF5b3V0Ojpob3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0KHJ1bnMsIHJvb3RCb3goKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsaW5lQ29udGVudC5s
aW5lTG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNhbFdpZHRoLCBsaW5lQ29udGVudC5pc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpLnZhbHVlX29yKElubGluZUxheW91dFVuaXQgeyB9KTsKKyAg
ICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgcm9vdEJveCgpLCBjb250ZW50TG9naWNhbExlZnQs
IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250ZW50Lm5vblNwYW5uaW5nSW5saW5lTGV2ZWxC
b3hDb3VudCB9OworCisgICAgYXV0byBsaW5lQm94TG9naWNhbEhlaWdodCA9IGNvbnN0cnVjdEFu
ZEFsaWduSW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKKworICAgIGF1dG8gbGluZUdl
b21ldHJ5ID0gWyZdIHsKKyAgICAgICAgYXV0byBsaW5lQm94TG9naWNhbFJlY3QgPSBJbmxpbmVS
ZWN0IHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250ZW50LmxpbmVMb2dpY2Fs
V2lkdGgsIGxpbmVCb3hMb2dpY2FsSGVpZ2h0IH07CisgICAgICAgIGF1dG8mIHJvb3RJbmxpbmVC
b3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKyAgICAgICAgYXV0byBlbmNsb3NpbmdUb3BB
bmRCb3R0b20gPSBMaW5lR2VvbWV0cnk6OkVuY2xvc2luZ1RvcEFuZEJvdHRvbSB7IHJvb3RJbmxp
bmVCb3gubG9naWNhbFRvcCgpLCByb290SW5saW5lQm94LmxvZ2ljYWxCb3R0b20oKSB9OworCisg
ICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVM
ZXZlbEJveGVzKCkpIHsKKyAgICAgICAgICAgIGlmICghaW5saW5lTGV2ZWxCb3guaXNBdG9taWNJ
bmxpbmVMZXZlbEJveCgpIHx8ICFpbmxpbmVMZXZlbEJveC5pc0lubGluZUJveCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxp
bmVMZXZlbEJveC5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGF1dG8gYm9yZGVyQm94ID0gSW5s
aW5lUmVjdCB7IH07CisKKyAgICAgICAgICAgIGlmIChpbmxpbmVMZXZlbEJveC5pc0F0b21pY0lu
bGluZUxldmVsQm94KCkpCisgICAgICAgICAgICAgICAgYm9yZGVyQm94ID0gbGluZUJveC5sb2dp
Y2FsQm9yZGVyQm94Rm9yQXRvbWljSW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkpOworICAgICAgICAgICAgZWxzZSBp
ZiAoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSkKKyAgICAgICAgICAgICAgICBib3JkZXJC
b3ggPSBsaW5lQm94LmxvZ2ljYWxCb3JkZXJCb3hGb3JJbmxpbmVCb3gobGF5b3V0Qm94LCBmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAg
ICBib3JkZXJCb3gubW92ZUJ5KGxpbmVCb3hMb2dpY2FsUmVjdC50b3BMZWZ0KCkpOworICAgICAg
ICAgICAgZW5jbG9zaW5nVG9wQW5kQm90dG9tLnRvcCA9IHN0ZDo6bWluKGVuY2xvc2luZ1RvcEFu
ZEJvdHRvbS50b3AsIGJvcmRlckJveC50b3AoKSk7CisgICAgICAgICAgICBlbmNsb3NpbmdUb3BB
bmRCb3R0b20uYm90dG9tID0gc3RkOjptYXgoZW5jbG9zaW5nVG9wQW5kQm90dG9tLmJvdHRvbSwg
Ym9yZGVyQm94LmJvdHRvbSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTGluZUdlb21l
dHJ5IHsgbGluZUJveExvZ2ljYWxSZWN0LCBlbmNsb3NpbmdUb3BBbmRCb3R0b20sIHJvb3RJbmxp
bmVCb3gubG9naWNhbFRvcCgpICsgcm9vdElubGluZUJveC5iYXNlbGluZSgpLCByb290SW5saW5l
Qm94LmxvZ2ljYWxMZWZ0KCksIHJvb3RJbmxpbmVCb3gubG9naWNhbFdpZHRoKCkgfTsKKyAgICB9
OworICAgIHJldHVybiB7IGxpbmVCb3gsIGxpbmVHZW9tZXRyeSgpIH07Cit9CisKK3ZvaWQgTGlu
ZUJveEJ1aWxkZXI6OnNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goSW5saW5lTGV2ZWxC
b3gmIGlubGluZUxldmVsQm94KSBjb25zdAoreworICAgIEFTU0VSVChpbmxpbmVMZXZlbEJveC5p
c0lubGluZUJveCgpIHx8IGlubGluZUxldmVsQm94LmlzTGluZUJyZWFrQm94KCkpOworICAgIGF1
dG8mIGZvbnRNZXRyaWNzID0gaW5saW5lTGV2ZWxCb3guc3R5bGUoKS5mb250TWV0cmljcygpOwor
ICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAg
SW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOworICAgIGF1
dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7CisgICAgLy8gV2UgbmVlZCBmbG9v
ci9jZWlsIHRvIG1hdGNoIGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCisgICAg
aW5saW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoZmxvb3JmKGFzY2VudCkpOworICAgIGlubGluZUxl
dmVsQm94LnNldERlc2NlbnQoY2VpbChkZXNjZW50KSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0
TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKKworICAgIC8vIEZJWE1FOiBBZGp1c3QgbGF5
b3V0IGJvdW5kcyB3aXRoIGZhbGxiYWNrIGZvbnQgd2hlbiBhcHBsaWNhYmxlLgorICAgIGF1dG8m
IHN0eWxlID0gaW5saW5lTGV2ZWxCb3gubGF5b3V0Qm94KCkuc3R5bGUoKTsKKyAgICBhdXRvIGxp
bmVIZWlnaHQgPSBzdHlsZS5saW5lSGVpZ2h0KCk7CisgICAgaWYgKGxpbmVIZWlnaHQuaXNOZWdh
dGl2ZSgpKSB7CisgICAgICAgIC8vIElmIGxpbmUtaGVpZ2h0IGNvbXB1dGVzIHRvIG5vcm1hbCBh
bmQgZWl0aGVyIHRleHQtZWRnZSBpcyBsZWFkaW5nIG9yIHRoaXMgaXMgdGhlIHJvb3QgaW5saW5l
IGJveCwKKyAgICAgICAgLy8gdGhlIGZvbnTigJlzIGxpbmUgZ2FwIG1ldHJpYyBtYXkgYWxzbyBi
ZSBpbmNvcnBvcmF0ZWQgaW50byBBIGFuZCBEIGJ5IGFkZGluZyBoYWxmIHRvIGVhY2ggc2lkZSBh
cyBoYWxmLWxlYWRpbmcuCisgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5s
aW5lLTMvI2lubGluZS1oZWlnaHQKKyAgICAgICAgLy8gU2luY2UgdGV4dC1lZGdlIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0IGFuZCB0aGUgaW5pdGlhbCB2YWx1ZSBpcyBsZWFkaW5nLCB3ZSBzaG91bGQg
anVzdCBhcHBseSBpdCB0bworICAgICAgICAvLyBhbGwgaW5saW5lIGJveGVzLgorICAgICAgICBh
dXRvIGhhbGZMaW5lR2FwID0gKGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVp
Z2h0KSAvIDI7CisgICAgICAgIGFzY2VudCArPSBoYWxmTGluZUdhcDsKKyAgICAgICAgZGVzY2Vu
dCArPSBoYWxmTGluZUdhcDsKKyAgICB9IGVsc2UgeworICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IGxpbmVIZWlnaHQgPSBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBoYWxmTGVhZGluZyA9IChsaW5lSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQp
KSAvIDI7CisgICAgICAgIGFzY2VudCArPSBoYWxmTGVhZGluZzsKKyAgICAgICAgZGVzY2VudCAr
PSBoYWxmTGVhZGluZzsKKyAgICB9CisgICAgLy8gV2UgbmVlZCBmbG9vci9jZWlsIHRvIG1hdGNo
IGxlZ2FjeSBsYXlvdXQgaW50ZWdyYWwgcG9zaXRpb25pbmcuCisgICAgaW5saW5lTGV2ZWxCb3gu
c2V0TGF5b3V0Qm91bmRzKElubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBmbG9vcmYoYXNj
ZW50KSwgY2VpbChkZXNjZW50KSB9KTsKK30KKworSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94QnVp
bGRlcjo6Y29uc3RydWN0QW5kQWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gs
IGNvbnN0IExpbmU6OlJ1bkxpc3QmIHJ1bnMpCit7CisgICAgYXV0byYgcm9vdElubGluZUJveCA9
IGxpbmVCb3gucm9vdElubGluZUJveCgpOworICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxp
bmVCb3gocm9vdElubGluZUJveCk7CisKKyAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBzdXBw
b3J0IGZvciBsaW5lLWhlaWdodCBjb250ZW50LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3
YXlzIGJlIGFibGUgdG8gZXhlcmNpc2UgdGhlIGZhc3QgcGF0aCB3aGVuIHRoZSBsaW5lIGhhcyBu
byBjb250ZW50IGF0IGFsbCwgZXZlbiBpbiBub24tc3RhbmRhcmRzIG1vZGUgb3Igd2l0aCBsaW5l
LWhlaWdodCBzZXQuCisgICAgYXV0byBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50ID0gbGF5b3V0
U3RhdGUoKS5pblN0YW5kYXJkc01vZGUoKSAmJiByb290Qm94KCkuc3R5bGUoKS5saW5lSGVpZ2h0
KCkuaXNOZWdhdGl2ZSgpOworICAgIGF1dG8gdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVu
dCA9IFsmXShhdXRvJiBpbmxpbmVMZXZlbEJveCwgc3RkOjpvcHRpb25hbDxjb25zdCBCb3hHZW9t
ZXRyeT4gYm94R2VvbWV0cnkgPSBzdGQ6Om51bGxvcHQpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VT
aW1wbGlmaWVkQWxpZ25tZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYW5Vc2VT
aW1wbGlmaWVkQWxpZ25tZW50ID0gTGluZUJveFZlcnRpY2FsQWxpZ25lcjo6Y2FuVXNlU2ltcGxp
ZmllZEFsaWdubWVudEZvcklubGluZUxldmVsQm94KHJvb3RJbmxpbmVCb3gsIGlubGluZUxldmVs
Qm94LCBib3hHZW9tZXRyeSk7CisgICAgfTsKKworICAgIGF1dG8gY3JlYXRlV3JhcHBlZElubGlu
ZUJveGVzID0gWyZdIHsKKyAgICAgICAgaWYgKHJ1bnMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAvLyBBbiBpbmxpbmUgYm94IG1heSBub3QgbmVjZXNzYXJpbHkgc3Rh
cnQgb24gdGhlIGN1cnJlbnQgbGluZToKKyAgICAgICAgLy8gPHNwYW4gaWQ9b3V0ZXI+bGluZSBi
cmVhazxicj50aGlzIGNvbnRlbnQncyBwYXJlbnQgaW5saW5lIGJveCgnb3V0ZXInKSA8c3BhbiBp
ZD1pbm5lcj5zdGFydHMgb24gdGhlIHByZXZpb3VzIGxpbmU8L3NwYW4+PC9zcGFuPgorICAgICAg
ICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3MgYW4gSW5saW5lTGV2ZWxCb3gg
Zm9yIGV2ZXJ5IGlubGluZSBib3ggdGhhdCdzIHByZXNlbnQgb24gdGhlIGN1cnJlbnQgbGluZS4K
KyAgICAgICAgLy8gSW4gbmVzdGluZyBjYXNlIHdlIG5lZWQgdG8gY3JlYXRlIElubGluZUxldmVs
Qm94ZXMgZm9yIHRoZSBpbmxpbmUgYm94IGFuY2VzdG9ycy4KKyAgICAgICAgLy8gV2Ugb25seSBo
YXZlIHRvIGRvIGl0IG9uIHRoZSBmaXJzdCBydW4gYXMgYW55IHN1YnNlcXVlbnQgaW5saW5lIGNv
bnRlbnQgaXMgZWl0aGVyIGF0IHRoZSBzYW1lL2hpZ2hlciBuZXN0aW5nIGxldmVsIG9yCisgICAg
ICAgIC8vIG5lc3RlZCB3aXRoIGEgW2lubGluZSBib3ggc3RhcnRdIHJ1bi4KKyAgICAgICAgYXV0
byYgZmlyc3RSdW4gPSBydW5zWzBdOworICAgICAgICBhdXRvJiBmaXJzdFJ1blBhcmVudExheW91
dEJveCA9IGZpcnN0UnVuLmxheW91dEJveCgpLnBhcmVudCgpOworICAgICAgICAvLyBJZiB0aGUg
cGFyZW50IGlzIHRoZSBmb3JtYXR0aW5nIHJvb3QsIHdlIGNhbiBzdG9wIGhlcmUuIFRoaXMgaXMg
cm9vdCBpbmxpbmUgYm94IGNvbnRlbnQsIHRoZXJlJ3Mgbm8gbmVzdGluZyBpbmxpbmUgYm94IGZy
b20gdGhlIHByZXZpb3VzIGxpbmUocykKKyAgICAgICAgLy8gdW5sZXNzIHRoZSBpbmxpbmUgYm94
IGNsb3NpbmcgaXMgZm9yY2VkIG92ZXIgdG8gdGhlIGN1cnJlbnQgbGluZS4KKyAgICAgICAgLy8g
ZS5nLgorICAgICAgICAvLyA8c3Bhbj5ub3JtYWxseSB0aGUgaW5saW5lIGJveCBjbG9zaW5nIGZv
cm1zIGEgY29udGludW91cyBjb250ZW50PC9zcGFuPgorICAgICAgICAvLyA8c3Bhbj51bmxlc3Mg
aXQncyBmb3JjZWQgdG8gdGhlIG5leHQgbGluZTxicj48L3NwYW4+CisgICAgICAgIGF1dG8gZmly
c3RSdW5OZWVkc0lubGluZUJveCA9IGZpcnN0UnVuLmlzSW5saW5lQm94RW5kKCk7CisgICAgICAg
IGlmICghZmlyc3RSdW5OZWVkc0lubGluZUJveCAmJiBpc1Jvb3RMYXlvdXRCb3goZmlyc3RSdW5Q
YXJlbnRMYXlvdXRCb3gpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBWZWN0b3I8Y29u
c3QgQm94Kj4gbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5lQm94ZXM7CisgICAgICAgIGlmIChmaXJz
dFJ1bk5lZWRzSW5saW5lQm94KQorICAgICAgICAgICAgbGF5b3V0Qm94ZXNXaXRob3V0SW5saW5l
Qm94ZXMuYXBwZW5kKCZmaXJzdFJ1bi5sYXlvdXRCb3goKSk7CisgICAgICAgIGF1dG8qIGFuY2Vz
dG9yID0gJmZpcnN0UnVuUGFyZW50TGF5b3V0Qm94OworICAgICAgICB3aGlsZSAoIWlzUm9vdExh
eW91dEJveCgqYW5jZXN0b3IpKSB7CisgICAgICAgICAgICBsYXlvdXRCb3hlc1dpdGhvdXRJbmxp
bmVCb3hlcy5hcHBlbmQoYW5jZXN0b3IpOworICAgICAgICAgICAgYW5jZXN0b3IgPSAmYW5jZXN0
b3ItPnBhcmVudCgpOworICAgICAgICB9CisgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgbWlzc2lu
ZyBMaW5lQm94OjpJbmxpbmVCb3hlcyBzdGFydGluZyB3aXRoIHRoZSB0b3Btb3N0IGxheW91dCBi
b3guCisgICAgICAgIGZvciAoYXV0byogbGF5b3V0Qm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5n
ZShsYXlvdXRCb3hlc1dpdGhvdXRJbmxpbmVCb3hlcykpIHsKKyAgICAgICAgICAgIGF1dG8gaW5s
aW5lQm94ID0gSW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveCgqbGF5b3V0Qm94LCByb290
SW5saW5lQm94LmxvZ2ljYWxMZWZ0KCksIHJvb3RJbmxpbmVCb3gubG9naWNhbFdpZHRoKCkpOwor
ICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChpbmxpbmVCb3gpOwor
ICAgICAgICAgICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChpbmxpbmVCb3gpOwor
ICAgICAgICAgICAgbGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkp
OworICAgICAgICB9CisgICAgfTsKKyAgICBjcmVhdGVXcmFwcGVkSW5saW5lQm94ZXMoKTsKKwor
ICAgIGF1dG8gbGluZUhhc0NvbnRlbnQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1
bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAg
ICBhdXRvIHJ1bkhhc0NvbnRlbnQgPSBbJl0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICBBU1NF
UlQoIWxpbmVIYXNDb250ZW50KTsKKyAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVu
LmlzQm94KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpIHx8IHJ1bi5pc0hhcmRMaW5lQnJlYWso
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGF1dG8mIGlubGlu
ZUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOworICAgICAgICAgICAgLy8gRXZlbiBuZWdhdGl2ZSBob3Jpem9udGFsIG1hcmdpbiBtYWtl
cyB0aGUgbGluZSAiY29udGVudGZ1bCIuCisgICAgICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94
U3RhcnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94R2VvbWV0cnkubWFyZ2lu
U3RhcnQoKSB8fCBpbmxpbmVCb3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCkgfHwgaW5saW5lQm94R2Vv
bWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZV9vcigwX2x1KTsKKyAgICAgICAgICAgIGlmIChydW4u
aXNJbmxpbmVCb3hFbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lQm94R2VvbWV0
cnkubWFyZ2luRW5kKCkgfHwgaW5saW5lQm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKSB8fCBpbmxp
bmVCb3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZV9vcigwX2x1KTsKKyAgICAgICAgICAg
IGlmIChydW4uaXNXb3JkQnJlYWtPcHBvcnR1bml0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGxpbmVIYXNDb250ZW50ID0gbGluZUhh
c0NvbnRlbnQgfHwgcnVuSGFzQ29udGVudCgpOworICAgICAgICBhdXRvIGxvZ2ljYWxMZWZ0ID0g
cm9vdElubGluZUJveC5sb2dpY2FsTGVmdCgpICsgcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAg
IGlmIChydW4uaXNCb3goKSkgeworICAgICAgICAgICAgYXV0byYgaW5saW5lTGV2ZWxCb3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAg
ICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5t
YXJnaW5Cb3hIZWlnaHQoKTsKKyAgICAgICAgICAgIGF1dG8gYXNjZW50ID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CisgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5zaG91bGROb3RTeW50aGVz
aXplSW5saW5lQmxvY2tCYXNlbGluZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gSW50ZWdyYXRp
b24gY29kZXBhdGggY29uc3RydWN0cyByZXBsYWNlZCBib3hlcyBmb3IgaW5saW5lLWJsb2NrIGNv
bnRlbnQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkp
OworICAgICAgICAgICAgICAgIGFzY2VudCA9ICpkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0
Qm94KS5iYXNlbGluZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxp
bmVCbG9ja0JveCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGJhc2VsaW5lIG9mIGFuICdp
bmxpbmUtYmxvY2snIGlzIHRoZSBiYXNlbGluZSBvZiBpdHMgbGFzdCBsaW5lIGJveCBpbiB0aGUg
bm9ybWFsIGZsb3csIHVubGVzcyBpdCBoYXMgZWl0aGVyIG5vIGluLWZsb3cgbGluZSBib3hlcyBv
cgorICAgICAgICAgICAgICAgIC8vIGlmIGl0cyAnb3ZlcmZsb3cnIHByb3BlcnR5IGhhcyBhIGNv
bXB1dGVkIHZhbHVlIG90aGVyIHRoYW4gJ3Zpc2libGUnLCBpbiB3aGljaCBjYXNlIHRoZSBiYXNl
bGluZSBpcyB0aGUgYm90dG9tIG1hcmdpbiBlZGdlLgorICAgICAgICAgICAgICAgIGF1dG8gc3lu
dGhlc2l6ZUJhc2VsaW5lID0gIWxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdD
b250ZXh0KCkgfHwgIWxheW91dEJveC5zdHlsZSgpLmlzT3ZlcmZsb3dWaXNpYmxlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKHN5bnRoZXNpemVCYXNlbGluZSkKKyAgICAgICAgICAgICAgICAgICAg
YXNjZW50ID0gbWFyZ2luQm94SGVpZ2h0OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFi
bGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGxhc3RMaW5lID0gZm9ybWF0dGluZ1N0
YXRlLmxpbmVzKCkubGFzdCgpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2Nr
QmFzZWxpbmUgPSBsYXN0TGluZS5saW5lQm94TG9naWNhbFJlY3QoKS50b3AoKSArIGxhc3RMaW5l
LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGFzY2VudCA9IGlubGluZUxldmVsQm94
R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBpbmxpbmVMZXZlbEJveEdlb21ldHJ5LmJvcmRlclRv
cCgpICsgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVfb3IoMCkgKyBp
bmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgICAgICAgICBhc2NlbnQg
PSBkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KS5iYXNlbGluZSgpLnZhbHVlX29yKG1h
cmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXNjZW50
ID0gbWFyZ2luQm94SGVpZ2h0OworICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gc3RkOjptYXgo
MF9sdSwgaW5saW5lTGV2ZWxCb3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpKTsKKyAgICAgICAgICAg
IGF1dG8gYXRvbWljSW5saW5lTGV2ZWxCb3ggPSBJbmxpbmVMZXZlbEJveDo6Y3JlYXRlQXRvbWlj
SW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCwgeyBpbmxpbmVMZXZlbEJveEdl
b21ldHJ5LmJvcmRlckJveFdpZHRoKCksIG1hcmdpbkJveEhlaWdodCB9KTsKKyAgICAgICAgICAg
IGF0b21pY0lubGluZUxldmVsQm94LnNldEJhc2VsaW5lKGFzY2VudCk7CisgICAgICAgICAgICBh
dG9taWNJbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3VuZHMoSW5saW5lTGV2ZWxCb3g6OkxheW91
dEJvdW5kcyB7IGFzY2VudCwgbWFyZ2luQm94SGVpZ2h0IC0gYXNjZW50IH0pOworICAgICAgICAg
ICAgdXBkYXRlQ2FuVXNlU2ltcGxpZmllZEFsaWdubWVudChhdG9taWNJbmxpbmVMZXZlbEJveCwg
aW5saW5lTGV2ZWxCb3hHZW9tZXRyeSk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxl
dmVsQm94KFdURk1vdmUoYXRvbWljSW5saW5lTGV2ZWxCb3gpKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4uaXNJbmxpbmVCb3hTdGFydCgpKSB7Cisg
ICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgeWV0IGhvdyB3aWRlIHRo
aXMgaW5saW5lIGJveCBpcy4gTGV0J3MgYXNzdW1lIGl0J3MgYXMgbG9uZyBhcyB0aGUgbGluZSBp
cworICAgICAgICAgICAgLy8gYW5kIGFkanVzdCBpdCBsYXRlciBpZiB3ZSBjb21lIGFjcm9zcyBh
biBpbmxpbmVCb3hFbmQgcnVuIChzZWUgYmVsb3cpLgorICAgICAgICAgICAgLy8gSW5saW5lIGJv
eCBydW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIg
Ym94LgorICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFydCA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFydCgpOworICAgICAgICAgICAgYXV0
byBpbml0aWFsTG9naWNhbFdpZHRoID0gcm9vdElubGluZUJveC5sb2dpY2FsV2lkdGgoKSAtIChy
dW4ubG9naWNhbExlZnQoKSArIG1hcmdpblN0YXJ0KTsKKyAgICAgICAgICAgIEFTU0VSVChpbml0
aWFsTG9naWNhbFdpZHRoID49IDApOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBJbmxp
bmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQgKyBtYXJn
aW5TdGFydCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBzZXRWZXJ0aWNhbEdl
b21ldHJ5Rm9ySW5saW5lQm94KGlubGluZUJveCk7CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VT
aW1wbGlmaWVkQWxpZ25tZW50KGlubGluZUJveCk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElu
bGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocnVuLmlzSW5saW5lQm94RW5kKCkpIHsKKyAgICAgICAg
ICAgIC8vIEFkanVzdCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgYm94IGNsb3Nl
cyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgbWFyZ2luIGVuZCBkb2Vz
IG5vdCBhZmZlY3QgdGhlIGxvZ2ljYWwgd2lkdGggKGUuZy4gcG9zaXRpdmUgbWFyZ2luIHJpZ2h0
IGRvZXMgbm90IG1ha2UgdGhlIHJ1biB3aWRlcikuCisgICAgICAgICAgICBhdXRvJiBpbmxpbmVC
b3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgICAgICBBU1NFUlQoaW5saW5lQm94LmlzSW5saW5lQm94KCkpOworICAgICAgICAgICAgLy8g
SW5saW5lIGJveCBydW4gaXMgYmFzZWQgb24gbWFyZ2luIGJveC4gTGV0J3MgY29udmVydCBpdCB0
byBib3JkZXIgYm94LgorICAgICAgICAgICAgLy8gTmVnYXRpdmUgbWFyZ2luIGVuZCBtYWtlcyB0
aGUgcnVuIGhhdmUgbmVnYXRpdmUgd2lkdGguCisgICAgICAgICAgICBhdXRvIG1hcmdpbkVuZEFk
anVzdGVtbnQgPSAtZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
Lm1hcmdpbkVuZCgpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsV2lkdGggPSBydW4ubG9naWNh
bFdpZHRoKCkgKyBtYXJnaW5FbmRBZGp1c3RlbW50OworICAgICAgICAgICAgYXV0byBpbmxpbmVC
b3hMb2dpY2FsUmlnaHQgPSBsb2dpY2FsTGVmdCArIGxvZ2ljYWxXaWR0aDsKKyAgICAgICAgICAg
IC8vIFdoZW4gdGhlIGNvbnRlbnQgcHVsbHMgdGhlIDwvc3Bhbj4gdG8gdGhlIGxvZ2ljYWwgbGVm
dCBkaXJlY3Rpb24gKGUuZy4gbmVnYXRpdmUgbGV0dGVyIHNwYWNlKQorICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHdlIGRvbid0IGVuZCB1cCB3aXRoIG5lZ2F0aXZlIGxvZ2ljYWwgd2lkdGggb24g
dGhlIGlubGluZSBib3guCisgICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9naWNhbFdpZHRoKHN0
ZDo6bWF4KDAuZiwgaW5saW5lQm94TG9naWNhbFJpZ2h0IC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0
KCkpKTsKKyAgICAgICAgICAgIHVwZGF0ZUNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQoaW5saW5l
Qm94KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogQWRqdXN0IG5vbi1lbXB0eSBpbmxpbmUgYm94IGhlaWdodCB3aGVuIGdseXBocyBmcm9tIHRo
ZSBub24tcHJpbWFyeSBmb250IHN0cmV0Y2ggdGhlIGJveC4KKyAgICAgICAgICAgIGxpbmVCb3gu
aW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKS5zZXRIYXNDb250
ZW50KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocnVu
LmlzSGFyZExpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBhdXRvIGxpbmVCcmVha0JveCA9IElu
bGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7
CisgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KGxpbmVCcmVha0Jv
eCk7CisgICAgICAgICAgICB1cGRhdGVDYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KGxpbmVCcmVh
a0JveCk7CisgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUobGlu
ZUJyZWFrQm94KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocnVuLmlzV29yZEJyZWFrT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgbGluZUJveC5h
ZGRJbmxpbmVMZXZlbEJveChJbmxpbmVMZXZlbEJveDo6Y3JlYXRlR2VuZXJpY0lubGluZUxldmVs
Qm94KGxheW91dEJveCwgbG9naWNhbExlZnQpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGxpbmVC
b3guc2V0SGFzQ29udGVudChsaW5lSGFzQ29udGVudCk7CisKKyAgICBhdXRvIHZlcnRpY2FsQWxp
Z25lciA9IExpbmVCb3hWZXJ0aWNhbEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpIH07Cisg
ICAgY2FuVXNlU2ltcGxpZmllZEFsaWdubWVudCA9IGNhblVzZVNpbXBsaWZpZWRBbGlnbm1lbnQg
fHwgIWxpbmVIYXNDb250ZW50OworICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduZXIuY29tcHV0ZUxv
Z2ljYWxIZWlnaHRBbmRBbGlnbihsaW5lQm94LCBjYW5Vc2VTaW1wbGlmaWVkQWxpZ25tZW50KTsK
K30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCb3hCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVp
bGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVmNjg1N2Q4ZjM4YTUxNzBiMzI2MGViNTVmYmM5MTc1OTY0NDM0
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9JbmxpbmVMaW5lQm94QnVpbGRlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lTGluZUJveC5oIgorI2luY2x1ZGUgIklubGluZUxp
bmVHZW9tZXRyeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsK
KworY2xhc3MgQm94OworY2xhc3MgQ29udGFpbmVyQm94OworY2xhc3MgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ7CitjbGFzcyBMYXlvdXRTdGF0ZTsKKworY2xhc3MgTGluZUJveEJ1aWxkZXIgewor
cHVibGljOgorICAgIExpbmVCb3hCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
Jik7CisKKyAgICBzdHJ1Y3QgTGluZUJveEFuZEdlb21ldHJ5IHsKKyAgICAgICAgTGluZUJveCBs
aW5lQm94OworICAgICAgICBMaW5lR2VvbWV0cnkgbGluZUdlb21ldHJ5OworICAgIH07CisgICAg
TGluZUJveEFuZEdlb21ldHJ5IGJ1aWxkKGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYp
OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChJ
bmxpbmVMZXZlbEJveCYpIGNvbnN0OworICAgIElubGluZUxheW91dFVuaXQgY29uc3RydWN0QW5k
QWxpZ25JbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7CisK
KyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CisgICAgY29uc3QgQm94
JiByb290Qm94KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCk7IH0K
KyAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5n
Q29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KKworICAgIGJvb2wgaXNSb290TGF5b3V0Qm94KGNv
bnN0IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94KSBjb25zdCB7IHJldHVybiAmY29udGFpbmVy
Qm94ID09ICZyb290Qm94KCk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK307CisKK30KK30KKworI2Vu
ZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>