<?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>24376</bug_id>
          
          <creation_ts>2009-03-04 21:52:29 -0800</creation_ts>
          <short_desc>Spilt up InspectorController.cpp into separate classes</short_desc>
          <delta_ts>2009-03-05 09:15:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24355</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>mrowe</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>112344</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 21:52:29 -0800</bug_when>
    <thetext>This will become necessary once we introduce the IDL and JS bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112345</commentid>
    <comment_count>1</comment_count>
      <attachid>28297</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 21:54:32 -0800</bug_when>
    <thetext>Created attachment 28297
Split up InspectorController, v1

 WebCore/ChangeLog                                 |   23 ++
 WebCore/GNUmakefile.am                            |    8 +
 WebCore/WebCore.pro                               |    4 +
 WebCore/WebCore.scons                             |    4 +
 WebCore/WebCore.vcproj/WebCore.vcproj             |   32 ++
 WebCore/WebCore.xcodeproj/project.pbxproj         |   32 ++
 WebCore/WebCoreSources.bkl                        |    4 +
 WebCore/inspector/ConsoleMessage.cpp              |  117 +++++++
 WebCore/inspector/ConsoleMessage.h                |   70 +++++
 WebCore/inspector/InspectorController.cpp         |  341 +--------------------
 WebCore/inspector/InspectorDOMStorageResource.cpp |   69 +++++
 WebCore/inspector/InspectorDOMStorageResource.h   |   72 +++++
 WebCore/inspector/InspectorDatabaseResource.cpp   |   67 ++++
 WebCore/inspector/InspectorDatabaseResource.h     |   71 +++++
 WebCore/inspector/InspectorResource.cpp           |  178 +++++++++++
 WebCore/inspector/InspectorResource.h             |  110 +++++++
 16 files changed, 865 insertions(+), 337 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112346</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-04 21:55:07 -0800</bug_when>
    <thetext>I didn&apos;t do any prettying up. This is a straight split-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112355</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-03-05 04:18:19 -0800</bug_when>
    <thetext>Is there a reason you&apos;re using a different license header in the new files than what exists in InspectorController.cpp?  I&apos;m pretty sure you&apos;ll need to keep the existing license header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112386</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-05 09:03:14 -0800</bug_when>
    <thetext>Oh, good point. I will update the headers before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112388</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-05 09:15:11 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41449.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28297</attachid>
            <date>2009-03-04 21:54:32 -0800</date>
            <delta_ts>2009-03-04 23:07:02 -0800</delta_ts>
            <desc>Split up InspectorController, v1</desc>
            <filename>Split-up-InspectorController-v1.patch</filename>
            <type>text/plain</type>
            <size>54400</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">OGQzN2MxM2FjY2IxYzI4ZTI5NTk1OTU5MjdkNmRlMjY0YzJmMDE3ZApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2Y2MxMDE0Li4yMmUwOTMy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2IEBACisyMDA5LTAzLTA0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0Mzc2CisgICAg
ICAgIFNwbGl0IEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGZpbGUgaW50byBzZXBhcmF0ZSBjbGFz
c2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IE1vZGlmaWVkIHRvIGluY2x1ZGUgbmV3
IGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
LnNjb25zOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlU291cmNlcy5ia2w6IERpdHRvLgorICAgICAgICAqIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuaDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaDogQWRk
ZWQuCisKIDIwMDktMDMtMDQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDZmMWVmNzcuLmM3
Yzc4ZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMTAxNSw5ICsxMDE1LDE3IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9pY3UvdW5pY29kZS91dGZfb2xkLmggXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUv
dXR5cGVzLmggXAogCVdlYkNvcmUvaWN1L3VuaWNvZGUvdXZlcnNpb24uaCBcCisJV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9Db25zb2xl
TWVzc2FnZS5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwK
KwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKKwlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCisJV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRD
YWxsRnJhbWUuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnTGlzdGVuZXIu
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwppbmRleCA2MTg5OTEwLi5kYmJhNzIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJv
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTc3NCw3ICs3NzQsMTEgQEAgU09VUkNFUyAr
PSBcCiAgICAgaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBcCiAgICAgaHRtbC9JbWFn
ZURhdGEuY3BwIFwKICAgICBodG1sL1ByZWxvYWRTY2FubmVyLmNwcCBcCisgICAgaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKKyAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAgXAogICAgIGluc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5zY29ucyBiL1dlYkNvcmUvV2ViQ29yZS5zY29ucwppbmRleCA1NzcwNmZkLi40YjM5
YTA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuc2NvbnMKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnNjb25zCkBAIC0yOTEsNyArMjkxLDExIEBAIHNvdXJjZXNbJ2h0bWwnXSA9IFsKICAgICAn
aHRtbC9UaW1lUmFuZ2VzLmNwcCcKIF0KIHNvdXJjZXNbJ2luc3BlY3RvciddID0gWworICAgICdp
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwJywKKyAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuY3BwJywKKyAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZS5jcHAnLAogICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAnLAor
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKICAgICAnaW5zcGVjdG9yL0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwJywKICAgICAnaW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1Nl
cnZlci5jcHAnLAogICAgICdpbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRkNDAxMzEuLmU0MzkwNjcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMTYxNjIsNiArMTYxNjIsMzAgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXENvbnNvbGVNZXNzYWdlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2FnZS5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVj
dG9yXEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNv
bnRyb2xsZXIuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTE2MTc4
LDYgKzE2MjAyLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JSZXNvdXJjZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5z
cGVjdG9yUmVzb3VyY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCINCiAJCQkJ
Pg0KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGFjMDUzOWMuLjJjMGVmZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzcsNiArNjM3LDE0IEBACiAJCTQxQzc2MEIx
MEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlw
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLzsgfTsKIAkJNDFEMDE1Q0IwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi87IH07
CisJCTQxRjA2M0VDMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2
M0U2MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCAqLzsg
fTsKKwkJNDFGMDYzRUQwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2
M0U3MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggKi87IH07
CisJCTQxRjA2M0VFMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFG
MDYzRTgwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAg
Ki87IH07CisJCTQxRjA2M0VGMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxRjA2M0U5MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uu
aCAqLzsgfTsKKwkJNDFGMDYzRjAwRjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2
M0VBMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgKi87IH07CisJCTQx
RjA2M0YxMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMDYzRUIwRjVGOUEwMDAwQTA3
RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggKi87IH07CisJCTQxRjA2M0Y0MEY1RjlBMEQwMEEw
N0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MUYwNjNGMjBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1lc3Nh
Z2UuY3BwICovOyB9OworCQk0MUYwNjNGNTBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1lc3Nh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxRjA2
M0YzMEY1RjlBMEQwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5oICovOyB9OwogCQk0MUYxRDIx
RjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBEQTg3
NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZEZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MUYxRDIxRTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVE
YXRhLmNwcCAqLzsgfTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmgg
Ki87IH07CkBAIC01NTY5LDYgKzU1NzcsMTQgQEAKIAkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVG
IC8qIFNjcmlwdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlw
dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRDAxNUM4MEY0QjVDNzEw
MDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb250ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUQwMTVDOTBG
NEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29udGVudFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0MUYwNjNFNjBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFGMDYzRTcw
RjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjNFODBGNUY5QTAwMDBBMDdFQUMgLyogSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxRjA2M0U5MEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQx
RjA2M0VBMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JSZXNvdXJjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxRjA2M0VCMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUYwNjNGMjBGNUY5
QTBEMDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uc29sZU1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MUYwNjNGMzBGNUY5QTBEMDBBMDdFQUMgLyogQ29uc29sZU1lc3NhZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc29sZU1lc3NhZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMUQyMUQwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENh
Y2hlZEZyYW1lRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRD
YWNoZWRGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMUQyMUUw
RUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDYWNoZWRGcmFtZURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRN
TFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
VE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
Njk1LDEwICs5NzExLDE4IEBACiAJCTFDODFCOTREMEU5NzMyRDkwMDI2NkUwNyAvKiBpbnNwZWN0
b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQxRjA2
M0YyMEY1RjlBMEQwMEEwN0VBQyAvKiBDb25zb2xlTWVzc2FnZS5jcHAgKi8sCisJCQkJNDFGMDYz
RjMwRjVGOUEwRDAwQTA3RUFDIC8qIENvbnNvbGVNZXNzYWdlLmggKi8sCiAJCQkJMUM4MUI5NTkw
RTk3MzMwODAwMjY2RTA3IC8qIGZyb250LWVuZCAqLywKKwkJCQk0MUYwNjNFNjBGNUY5QTAwMDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgKi8sCisJCQkJNDFGMDYzRTcw
RjVGOUEwMDAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCAqLywKKwkJCQk0
MUYwNjNFODBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNw
cCAqLywKKwkJCQk0MUYwNjNFOTBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlLmggKi8sCiAJCQkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3Rv
ckNsaWVudC5oICovLAogCQkJCTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JD
b250cm9sbGVyLmNwcCAqLywKIAkJCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVj
dG9yQ29udHJvbGxlci5oICovLAorCQkJCTQxRjA2M0VBMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNw
ZWN0b3JSZXNvdXJjZS5jcHAgKi8sCisJCQkJNDFGMDYzRUIwRjVGOUEwMDAwQTA3RUFDIC8qIElu
c3BlY3RvclJlc291cmNlLmggKi8sCiAJCQkJMUM4MUJBMDMwRTk3MzQ4MzAwMjY2RTA3IC8qIEph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwICovLAogCQkJCTFDODFCQTA0MEU5NzM0ODMwMDI2NkUwNyAv
KiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8sCiAJCQkJMUM4MUJBMDUwRTk3MzQ4MzAwMjY2RTA3
IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaWRsICovLApAQCAtMTY4MDUsNiArMTY4MjksMTAgQEAK
IAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFNDk0QUIwRjRGNUU5RTAwODRFMzE5IC8qIEdlb2xvY2F0aW9u
U2VydmljZU1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDYzRUQwRjVGOUEwMDAwQTA3RUFD
IC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxRjA2
M0VGMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQxRjA2M0YxMEY1RjlBMDAwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFGMDYzRjUwRjVGOUEwRDAwQTA3RUFDIC8qIENv
bnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MjAwLDYgKzE3MjI4LDcgQEAKIAkJ
CQkzMTZGRTExNTBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RERDMDk5RTY0OTIwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBCMzZBNDBDRDNDNjdDMDBBQzdFQjUg
LyogQ29uc29sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUYwNjNGNDBGNUY5QTBEMDBBMDdF
QUMgLyogQ29uc29sZU1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxODcyMUYwOTc3
RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1
RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTE3NzE4LDcgKzE3NzQ3LDEwIEBACiAJCQkJOTMzMDlERUQwOTlFNjQ5MjAwNTZF
NTgxIC8qIEluc2VydE5vZGVCZWZvcmVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5REVGMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYxMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNl
cnRUZXh0Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MUYwNjNFQzBGNUY5QTAwMDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0MUYwNjNFRTBGNUY5QTAwMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxRjA2M0YwMEY1RjlBMDAw
MEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1
MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMjc1MzU3QzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCMjc1MzU3MzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wKaW5kZXggYWRlM2I5Ni4uM2MxNDJhYiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wK
QEAgLTYxNCw3ICs2MTQsMTEgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVz
IG5lZWRlZCB0byBidWlsZCBXZWJDb3JlLgogICAgIDwvc2V0PgogCiAgICAgPHNldCBhcHBlbmQ9
IjEiIHZhcj0iV0VCQ09SRV9TT1VSQ0VTX0lOU1BFQ1RPUiI+CisgICAgICAgIGluc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHAKKyAgICAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuY3BwCisgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uu
Y3BwCiAgICAgICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorICAgICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCiAgICAgICAgIGluc3BlY3Rvci9KYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcAogICAgICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVy
LmNwcAogICAgICAgICBpbnNwZWN0b3IvSmF2YVNjcmlwdFByb2ZpbGUuY3BwCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWU4ZDg1OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNz
YWdlLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29uc29sZU1lc3NhZ2UuaCIKKworI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBl
ci5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFj
ay5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFtZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQVBJQ2FzdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBsLCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxp
LCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpCisgICAgOiBzb3VyY2UocykKKyAgICAsIGxl
dmVsKGwpCisgICAgLCBtZXNzYWdlKG0pCisgICAgLCBsaW5lKGxpKQorICAgICwgdXJsKHUpCisg
ICAgLCBncm91cExldmVsKGcpCisgICAgLCByZXBlYXRDb3VudCgxKQoreworfQorCitDb25zb2xl
TWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzLCBNZXNzYWdlTGV2ZWwgbCwg
U2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2ssIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFjZSkK
KyAgICA6IHNvdXJjZShzKQorICAgICwgbGV2ZWwobCkKKyAgICAsIHdyYXBwZWRBcmd1bWVudHMo
Y2FsbFN0YWNrLT5hdCgwKS5hcmd1bWVudENvdW50KCkpCisgICAgLCBmcmFtZXMoc3RvcmVUcmFj
ZSA/IGNhbGxTdGFjay0+c2l6ZSgpIDogMCkKKyAgICAsIGdyb3VwTGV2ZWwoZykKKyAgICAsIHJl
cGVhdENvdW50KDEpCit7CisgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVyID0g
Y2FsbFN0YWNrLT5hdCgwKTsKKyAgICBsaW5lID0gbGFzdENhbGxlci5saW5lTnVtYmVyKCk7Cisg
ICAgdXJsID0gbGFzdENhbGxlci5zb3VyY2VVUkwoKS5zdHJpbmcoKTsKKworICAgIC8vIEZJWE1F
OiBGb3Igbm93LCBqdXN0IHN0b3JlIGZ1bmN0aW9uIG5hbWVzIGFzIHN0cmluZ3MuCisgICAgLy8g
QXMgU2NyaXB0Q2FsbFN0YWNrIHN0YXJ0IHN0b3JpbmcgbGluZSBudW1iZXIgYW5kIHNvdXJjZSBV
UkwgZm9yIGFsbAorICAgIC8vIGZyYW1lcywgcmVmYWN0b3IgdG8gdXNlIHRoYXQsIGFzIHdlbGwu
CisgICAgaWYgKHN0b3JlVHJhY2UpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gY2Fs
bFN0YWNrLT5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja1Np
emU7ICsraSkKKyAgICAgICAgICAgIGZyYW1lc1tpXSA9IGNhbGxTdGFjay0+YXQoaSkuZnVuY3Rp
b25OYW1lKCk7CisgICAgfQorCisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgIHdyYXBwZWRBcmd1bWVudHNbaV0gPSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAo
Y2FsbFN0YWNrLT5zdGF0ZSgpLCBsYXN0Q2FsbGVyLmFyZ3VtZW50QXQoaSkuanNWYWx1ZSgpKTsK
K30KKworYm9vbCBDb25zb2xlTWVzc2FnZTo6aXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIENvbnNv
bGVNZXNzYWdlKiBtc2cpIGNvbnN0Cit7CisgICAgaWYgKG1zZy0+d3JhcHBlZEFyZ3VtZW50cy5z
aXplKCkgIT0gdGhpcy0+d3JhcHBlZEFyZ3VtZW50cy5zaXplKCkgfHwKKyAgICAgICAgKCFleGVj
ICYmIG1zZy0+d3JhcHBlZEFyZ3VtZW50cy5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1zZy0+d3JhcHBlZEFyZ3VtZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBBU1NFUlRfQVJHKGV4ZWMsIGV4ZWMpOworICAgICAgICBpZiAo
IUpTVmFsdWVJc0VxdWFsKHRvUmVmKGV4ZWMpLCB0b1JlZihtc2ctPndyYXBwZWRBcmd1bWVudHNb
aV0uZ2V0KCkpLCB0b1JlZih0aGlzLT53cmFwcGVkQXJndW1lbnRzW2ldLmdldCgpKSwgMCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc2l6ZV90IGZyYW1lQ291bnQg
PSBtc2ctPmZyYW1lcy5zaXplKCk7CisgICAgaWYgKGZyYW1lQ291bnQgIT0gdGhpcy0+ZnJhbWVz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nJiBteUZy
YW1lRnVuY3Rpb25OYW1lID0gdGhpcy0+ZnJhbWVzW2ldOworICAgICAgICBpZiAobXlGcmFtZUZ1
bmN0aW9uTmFtZSAhPSBtc2ctPmZyYW1lc1tpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gbXNnLT5zb3VyY2UgPT0gdGhpcy0+c291cmNlCisgICAgJiYg
bXNnLT5sZXZlbCA9PSB0aGlzLT5sZXZlbAorICAgICYmIG1zZy0+bWVzc2FnZSA9PSB0aGlzLT5t
ZXNzYWdlCisgICAgJiYgbXNnLT5saW5lID09IHRoaXMtPmxpbmUKKyAgICAmJiBtc2ctPnVybCA9
PSB0aGlzLT51cmwKKyAgICAmJiBtc2ctPmdyb3VwTGV2ZWwgPT0gdGhpcy0+Z3JvdXBMZXZlbDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiN2JkZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKQEAgLTAsMCArMSw3MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRs
aWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENvbnNvbGVNZXNzYWdlX2gKKyNkZWZpbmUgQ29uc29sZU1lc3NhZ2VfaAor
CisjaW5jbHVkZSAiQ29uc29sZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvdGVj
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgY2xh
c3MgRXhlY1N0YXRlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTY3Jp
cHRDYWxsU3RhY2s7CisgICAgY2xhc3MgU2NyaXB0U3RyaW5nOworCisgICAgY2xhc3MgQ29uc29s
ZU1lc3NhZ2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBT
dHJpbmcmIHUsIHVuc2lnbmVkIGcpOyAgICAgICAgCisgICAgICAgIENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywg
Ym9vbCBzdG9yZVRyYWNlID0gZmFsc2UpOworCisgICAgICAgIGJvb2wgaXNFcXVhbChKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgQ29uc29sZU1lc3NhZ2UqIG1zZykgY29uc3Q7CisKKyAgICAgICAgTWVz
c2FnZVNvdXJjZSBzb3VyY2U7CisgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKKyAgICAgICAg
U3RyaW5nIG1lc3NhZ2U7CisgICAgICAgIFZlY3RvcjxKU0M6OlByb3RlY3RlZEpTVmFsdWVQdHI+
IHdyYXBwZWRBcmd1bWVudHM7CisgICAgICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+IGZyYW1lczsK
KyAgICAgICAgdW5zaWduZWQgbGluZTsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAgdW5z
aWduZWQgZ3JvdXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQ7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29uc29sZU1lc3NhZ2VfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBlNjRlMDM1Li5m
YTFhNWFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCkBAIC00OSw2ICs1MCw5IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIuaCIKQEAgLTE2NiwzNDMgKzE3MCw2IEBAIEpTVmFsdWVSZWYgSW5zcGVjdG9yQ29udHJvbGxl
cjo6Y2FsbEZ1bmN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gQ29uc29sZU1lc3NhZ2UgU3RydWN0Ci0KLXN0cnVjdCBD
b25zb2xlTWVzc2FnZSB7Ci0gICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzLCBNZXNz
YWdlTGV2ZWwgbCwgY29uc3QgU3RyaW5nJiBtLCB1bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1
LCB1bnNpZ25lZCBnKQotICAgICAgICA6IHNvdXJjZShzKQotICAgICAgICAsIGxldmVsKGwpCi0g
ICAgICAgICwgbWVzc2FnZShtKQotICAgICAgICAsIGxpbmUobGkpCi0gICAgICAgICwgdXJsKHUp
Ci0gICAgICAgICwgZ3JvdXBMZXZlbChnKQotICAgICAgICAsIHJlcGVhdENvdW50KDEpCi0gICAg
ewotICAgIH0KLQotICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZUxl
dmVsIGwsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrLCB1bnNpZ25lZCBnLCBib29sIHN0b3Jl
VHJhY2UgPSBmYWxzZSkKLSAgICAgICAgOiBzb3VyY2UocykKLSAgICAgICAgLCBsZXZlbChsKQot
ICAgICAgICAsIHdyYXBwZWRBcmd1bWVudHMoY2FsbFN0YWNrLT5hdCgwKS5hcmd1bWVudENvdW50
KCkpCi0gICAgICAgICwgZnJhbWVzKHN0b3JlVHJhY2UgPyBjYWxsU3RhY2stPnNpemUoKSA6IDAp
Ci0gICAgICAgICwgZ3JvdXBMZXZlbChnKQotICAgICAgICAsIHJlcGVhdENvdW50KDEpCi0gICAg
ewotICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3RhY2st
PmF0KDApOwotICAgICAgICBsaW5lID0gbGFzdENhbGxlci5saW5lTnVtYmVyKCk7Ci0gICAgICAg
IHVybCA9IGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3RyaW5nKCk7Ci0KLSAgICAgICAgLy8gRklY
TUU6IEZvciBub3csIGp1c3Qgc3RvcmUgZnVuY3Rpb24gbmFtZXMgYXMgc3RyaW5ncy4KLSAgICAg
ICAgLy8gQXMgU2NyaXB0Q2FsbFN0YWNrIHN0YXJ0IHN0b3JpbmcgbGluZSBudW1iZXIgYW5kIHNv
dXJjZSBVUkwgZm9yIGFsbAotICAgICAgICAvLyBmcmFtZXMsIHJlZmFjdG9yIHRvIHVzZSB0aGF0
LCBhcyB3ZWxsLgotICAgICAgICBpZiAoc3RvcmVUcmFjZSkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3RhY2tTaXplID0gY2FsbFN0YWNrLT5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhY2tTaXplOyArK2kpCi0gICAgICAgICAgICAgICAgZnJhbWVzW2ld
ID0gY2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEpTTG9jayBsb2NrKGZhbHNlKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGFzdENhbGxlci5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHdyYXBwZWRBcmd1
bWVudHNbaV0gPSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoY2FsbFN0YWNrLT5zdGF0
ZSgpLCBsYXN0Q2FsbGVyLmFyZ3VtZW50QXQoaSkuanNWYWx1ZSgpKTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBpc0VxdWFsKEV4ZWNTdGF0ZSogZXhlYywgQ29uc29sZU1lc3NhZ2UqIG1zZykgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChtc2ctPndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpICE9IHRo
aXMtPndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpIHx8Ci0gICAgICAgICAgICghZXhlYyAmJiBtc2ct
PndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1zZy0+d3JhcHBlZEFyZ3VtZW50cy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUX0FSRyhleGVjLCBleGVjKTsKLSAgICAgICAg
ICAgIGlmICghSlNWYWx1ZUlzRXF1YWwodG9SZWYoZXhlYyksIHRvUmVmKG1zZy0+d3JhcHBlZEFy
Z3VtZW50c1tpXS5nZXQoKSksIHRvUmVmKHRoaXMtPndyYXBwZWRBcmd1bWVudHNbaV0uZ2V0KCkp
LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBzaXplX3QgZnJhbWVDb3VudCA9IG1zZy0+ZnJhbWVzLnNpemUoKTsKLSAgICAgICAgaWYgKGZy
YW1lQ291bnQgIT0gdGhpcy0+ZnJhbWVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBTY3JpcHRTdHJpbmcmIG15RnJhbWVGdW5jdGlvbk5h
bWUgPSB0aGlzLT5mcmFtZXNbaV07Ci0gICAgICAgICAgICBpZiAobXlGcmFtZUZ1bmN0aW9uTmFt
ZSAhPSBtc2ctPmZyYW1lc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAKLSAgICAgICAgcmV0dXJuIG1zZy0+c291cmNlID09IHRoaXMtPnNvdXJjZQot
ICAgICAgICAgICAgJiYgbXNnLT5sZXZlbCA9PSB0aGlzLT5sZXZlbAotICAgICAgICAgICAgJiYg
bXNnLT5tZXNzYWdlID09IHRoaXMtPm1lc3NhZ2UKLSAgICAgICAgICAgICYmIG1zZy0+bGluZSA9
PSB0aGlzLT5saW5lCi0gICAgICAgICAgICAmJiBtc2ctPnVybCA9PSB0aGlzLT51cmwKLSAgICAg
ICAgICAgICYmIG1zZy0+Z3JvdXBMZXZlbCA9PSB0aGlzLT5ncm91cExldmVsOwotICAgIH0KLQot
ICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlOwotICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKLSAgICBT
dHJpbmcgbWVzc2FnZTsKLSAgICBWZWN0b3I8UHJvdGVjdGVkSlNWYWx1ZVB0cj4gd3JhcHBlZEFy
Z3VtZW50czsKLSAgICBWZWN0b3I8U2NyaXB0U3RyaW5nPiBmcmFtZXM7Ci0gICAgdW5zaWduZWQg
bGluZTsKLSAgICBTdHJpbmcgdXJsOwotICAgIHVuc2lnbmVkIGdyb3VwTGV2ZWw7Ci0gICAgdW5z
aWduZWQgcmVwZWF0Q291bnQ7Ci19OwotCi0vLyBYTUxIdHRwUmVxdWVzdFJlc291cmNlIENsYXNz
Ci0KLXN0cnVjdCBYTUxIdHRwUmVxdWVzdFJlc291cmNlIHsKLSAgICBYTUxIdHRwUmVxdWVzdFJl
c291cmNlKGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlU3RyaW5nKQotICAgIHsKLSAgICAgICAg
SlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIHRoaXMtPnNvdXJjZVN0cmluZyA9IHNv
dXJjZVN0cmluZy5yZXAoKTsKLSAgICB9Ci0KLSAgICB+WE1MSHR0cFJlcXVlc3RSZXNvdXJjZSgp
Ci0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgc291cmNl
U3RyaW5nLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEpTQzo6VVN0cmluZzo6UmVwPiBz
b3VyY2VTdHJpbmc7Ci19OwotCi0vLyBJbnNwZWN0b3JSZXNvdXJjZSBTdHJ1Y3QKLQotc3RydWN0
IEluc3BlY3RvclJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yUmVzb3VyY2U+
IHsKLSAgICAvLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZQotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIERvYywKLSAgICAgICAgU3R5bGVzaGVldCwK
LSAgICAgICAgSW1hZ2UsCi0gICAgICAgIEZvbnQsCi0gICAgICAgIFNjcmlwdCwKLSAgICAgICAg
WEhSLAotICAgICAgICBNZWRpYSwKLSAgICAgICAgT3RoZXIKLSAgICB9OwotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IGNyZWF0ZShsb25nIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBGcmFtZSogZnJhbWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclJlc291cmNlKGlkZW50aWZpZXIs
IGRvY3VtZW50TG9hZGVyLCBmcmFtZSkpOwotICAgIH0KLSAgICAKLSAgICB+SW5zcGVjdG9yUmVz
b3VyY2UoKQotICAgIHsKLSAgICAgICAgc2V0U2NyaXB0T2JqZWN0KDAsIDApOwotICAgIH0KLQot
ICAgIFR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RS
ZXNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybiBYSFI7Ci0KLSAgICAgICAgaWYgKHJlcXVlc3RV
UkwgPT0gbG9hZGVyLT5yZXF1ZXN0VVJMKCkpCi0gICAgICAgICAgICByZXR1cm4gRG9jOwotCi0g
ICAgICAgIGlmIChsb2FkZXItPmZyYW1lTG9hZGVyKCkgJiYgcmVxdWVzdFVSTCA9PSBsb2FkZXIt
PmZyYW1lTG9hZGVyKCktPmljb25VUkwoKSkKLSAgICAgICAgICAgIHJldHVybiBJbWFnZTsKLQot
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+ZG9jTG9hZGVyKCktPmNhY2hlZFJlc291cmNlKHJlcXVlc3RVUkwuc3RyaW5nKCkpOwotICAg
ICAgICBpZiAoIWNhY2hlZFJlc291cmNlKQotICAgICAgICAgICAgcmV0dXJuIE90aGVyOwotCi0g
ICAgICAgIHN3aXRjaCAoY2FjaGVkUmVzb3VyY2UtPnR5cGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
SW1hZ2U7Ci0gICAgICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEZvbnQ7Ci0gICAgICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0OgotI2lmIEVOQUJMRShYU0xUKQotICAgICAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKLSNlbmRpZgotICAgICAgICAgICAgICAgIHJl
dHVybiBTdHlsZXNoZWV0OwotICAgICAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
OgotICAgICAgICAgICAgICAgIHJldHVybiBTY3JpcHQ7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBPdGhlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZv
aWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdT
Y3JpcHRPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRP
YmplY3QpCi0gICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlw
dE9iamVjdCk7Ci0KLSAgICAgICAgc2NyaXB0T2JqZWN0ID0gbmV3U2NyaXB0T2JqZWN0OwotICAg
ICAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsKLQotICAgICAgICBBU1NFUlQoKGNvbnRleHQg
JiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRleHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOwot
ICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBKU1Zh
bHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3QpOwotICAgIH0KLQotICAgIHZvaWQg
c2V0WE1MSHR0cFJlcXVlc3RQcm9wZXJ0aWVzKGNvbnN0IEpTQzo6VVN0cmluZyYgZGF0YSkKLSAg
ICB7Ci0gICAgICAgIHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2Uuc2V0KG5ldyBYTUxIdHRwUmVxdWVz
dFJlc291cmNlKGRhdGEpKTsKLSAgICB9Ci0gICAgCi0gICAgU3RyaW5nIHNvdXJjZVN0cmluZygp
IGNvbnN0Ci0gICAgIHsKLSAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFJlc291cmNlKQotICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6VVN0cmluZyh4bWxIdHRwUmVxdWVzdFJlc291cmNlLT5zb3Vy
Y2VTdHJpbmcpOwotCi0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSAgICAg
ICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWU7Ci0KLSAgICAgICAgaWYgKHJlcXVlc3RVUkwgPT0g
bG9hZGVyLT5yZXF1ZXN0VVJMKCkpIHsKLSAgICAgICAgICAgIGJ1ZmZlciA9IGxvYWRlci0+bWFp
blJlc291cmNlRGF0YSgpOwotICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lLT5k
b2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9j
TG9hZGVyKCktPmNhY2hlZFJlc291cmNlKHJlcXVlc3RVUkwuc3RyaW5nKCkpOwotICAgICAgICAg
ICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICAgICAgICAgIGlmIChjYWNoZWRSZXNvdXJjZS0+aXNQdXJnZWFibGUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBwdXJnZWFibGUgdGhlbiBtYWtlIGl0
IHVucHVyZ2VhYmxlIHRvIGdldAotICAgICAgICAgICAgICAgIC8vIGdldCBpdHMgZGF0YS4gVGhp
cyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBhbgotICAgICAgICAgICAgICAg
IC8vIGVtcHR5IFN0cmluZy4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGRv
IHNvbWV0aGluZyBlbHNlIGluIHRoZSBjYXNlIG9mIGEgcHVyZ2VkCi0gICAgICAgICAgICAgICAg
Ly8gcmVzb3VyY2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIHdoeSB0aGVyZSBpcyBubyBkYXRhIGlu
IHRoZQotICAgICAgICAgICAgICAgIC8vIGluc3BlY3Rvcj8KLSAgICAgICAgICAgICAgICBpZiAo
IWNhY2hlZFJlc291cmNlLT5tYWtlUHVyZ2VhYmxlKGZhbHNlKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBidWZmZXIg
PSBjYWNoZWRSZXNvdXJjZS0+ZGF0YSgpOwotICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9
IGNhY2hlZFJlc291cmNlLT5lbmNvZGluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgVGV4dEVuY29k
aW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOwotICAgICAgICBpZiAoIWVuY29kaW5nLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xhdGluMUVuY29kaW5nKCk7
Ci0gICAgICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKTsKLSAgICAgfQotCi0gICAgbG9uZyBsb25nIGlkZW50aWZpZXI7Ci0gICAgUmVmUHRy
PERvY3VtZW50TG9hZGVyPiBsb2FkZXI7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZTsKLSAgICBP
d25QdHI8WE1MSHR0cFJlcXVlc3RSZXNvdXJjZT4geG1sSHR0cFJlcXVlc3RSZXNvdXJjZTsKLSAg
ICBLVVJMIHJlcXVlc3RVUkw7Ci0gICAgSFRUUEhlYWRlck1hcCByZXF1ZXN0SGVhZGVyRmllbGRz
OwotICAgIEhUVFBIZWFkZXJNYXAgcmVzcG9uc2VIZWFkZXJGaWVsZHM7Ci0gICAgU3RyaW5nIG1p
bWVUeXBlOwotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZTsKLSAgICBKU0NvbnRleHRSZWYg
c2NyaXB0Q29udGV4dDsKLSAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7Ci0gICAgbG9uZyBs
b25nIGV4cGVjdGVkQ29udGVudExlbmd0aDsKLSAgICBib29sIGNhY2hlZDsKLSAgICBib29sIGZp
bmlzaGVkOwotICAgIGJvb2wgZmFpbGVkOwotICAgIGludCBsZW5ndGg7Ci0gICAgaW50IHJlc3Bv
bnNlU3RhdHVzQ29kZTsKLSAgICBkb3VibGUgc3RhcnRUaW1lOwotICAgIGRvdWJsZSByZXNwb25z
ZVJlY2VpdmVkVGltZTsKLSAgICBkb3VibGUgZW5kVGltZTsKLQotcHJvdGVjdGVkOgotICAgIElu
c3BlY3RvclJlc291cmNlKGxvbmcgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIsIEZyYW1lKiBmcmFtZSkKLSAgICAgICAgOiBpZGVudGlmaWVyKGlkZW50aWZp
ZXIpCi0gICAgICAgICwgbG9hZGVyKGRvY3VtZW50TG9hZGVyKQotICAgICAgICAsIGZyYW1lKGZy
YW1lKQotICAgICAgICAsIHhtbEh0dHBSZXF1ZXN0UmVzb3VyY2UoMCkKLSAgICAgICAgLCBzY3Jp
cHRDb250ZXh0KDApCi0gICAgICAgICwgc2NyaXB0T2JqZWN0KDApCi0gICAgICAgICwgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoKDApCi0gICAgICAgICwgY2FjaGVkKGZhbHNlKQotICAgICAgICAsIGZp
bmlzaGVkKGZhbHNlKQotICAgICAgICAsIGZhaWxlZChmYWxzZSkKLSAgICAgICAgLCBsZW5ndGgo
MCkKLSAgICAgICAgLCByZXNwb25zZVN0YXR1c0NvZGUoMCkKLSAgICAgICAgLCBzdGFydFRpbWUo
LTEuMCkKLSAgICAgICAgLCByZXNwb25zZVJlY2VpdmVkVGltZSgtMS4wKQotICAgICAgICAsIGVu
ZFRpbWUoLTEuMCkKLSAgICB7Ci0gICAgfQotfTsKLQotLy8gSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZSBTdHJ1Y3QKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXN0cnVjdCBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZT4gewotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNy
ZWF0ZShEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShkYXRhYmFzZSwgZG9tYWluLCBu
YW1lLCB2ZXJzaW9uKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTY3JpcHRPYmplY3QoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGlmIChzY3JpcHRDb250ZXh0ICYmIHNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIEpTVmFs
dWVVbnByb3RlY3Qoc2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0KTsKLQotICAgICAgICBzY3Jp
cHRPYmplY3QgPSBuZXdTY3JpcHRPYmplY3Q7Ci0gICAgICAgIHNjcmlwdENvbnRleHQgPSBjb250
ZXh0OwotCi0gICAgICAgIEFTU0VSVCgoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpIHx8ICgh
Y29udGV4dCAmJiAhbmV3U2NyaXB0T2JqZWN0KSk7Ci0gICAgICAgIGlmIChjb250ZXh0ICYmIG5l
d1NjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG5ld1Nj
cmlwdE9iamVjdCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZTsKLSAg
ICBTdHJpbmcgZG9tYWluOwotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmluZyB2ZXJzaW9uOwot
ICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0OwotICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9i
amVjdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShEYXRh
YmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbikKLSAgICAgICAgOiBkYXRhYmFzZShkYXRhYmFzZSkKLSAg
ICAgICAgLCBkb21haW4oZG9tYWluKQotICAgICAgICAsIG5hbWUobmFtZSkKLSAgICAgICAgLCB2
ZXJzaW9uKHZlcnNpb24pCi0gICAgICAgICwgc2NyaXB0Q29udGV4dCgwKQotICAgICAgICAsIHNj
cmlwdE9iamVjdCgwKQotICAgIHsKLSAgICB9Ci19OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi1zdHJ1Y3QgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiB7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiBjcmVhdGUoU3RvcmFnZSogZG9tU3Rv
cmFnZSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UoZG9tU3RvcmFn
ZSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRTY3JpcHRP
YmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkK
LSAgICB7Ci0gICAgICAgIGlmIChzY3JpcHRDb250ZXh0ICYmIHNjcmlwdE9iamVjdCkKLSAgICAg
ICAgICAgIEpTVmFsdWVVbnByb3RlY3Qoc2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0KTsKLQot
ICAgICAgICBzY3JpcHRPYmplY3QgPSBuZXdTY3JpcHRPYmplY3Q7Ci0gICAgICAgIHNjcmlwdENv
bnRleHQgPSBjb250ZXh0OwotCi0gICAgICAgIEFTU0VSVCgoY29udGV4dCAmJiBuZXdTY3JpcHRP
YmplY3QpIHx8ICghY29udGV4dCAmJiAhbmV3U2NyaXB0T2JqZWN0KSk7Ci0gICAgICAgIGlmIChj
b250ZXh0ICYmIG5ld1NjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNv
bnRleHQsIG5ld1NjcmlwdE9iamVjdCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFN0b3JhZ2U+IGRv
bVN0b3JhZ2U7Ci0gICAgYm9vbCBpc0xvY2FsU3RvcmFnZTsKLSAgICBSZWZQdHI8RnJhbWU+IGZy
YW1lOwotICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0OwotICAgIEpTT2JqZWN0UmVmIHNj
cmlwdE9iamVjdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFt
ZSkKLSAgICAgICAgOiBkb21TdG9yYWdlKGRvbVN0b3JhZ2UpCi0gICAgICAgICwgaXNMb2NhbFN0
b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCi0gICAgICAgICwgZnJhbWUoZnJhbWUpCi0gICAgICAgICwg
c2NyaXB0Q29udGV4dCgwKQotICAgICAgICAsIHNjcmlwdE9iamVjdCgwKQotICAgIHsKLSAgICB9
Ci19OwotI2VuZGlmCi0KIC8vIEphdmFTY3JpcHQgQ2FsbGJhY2tzCiAKICNkZWZpbmUgU0lNUExF
X0lOU1BFQ1RPUl9DQUxMQkFDSyhqc0Z1bmN0aW9uLCBpbnNwZWN0b3JDb250cm9sbGVyTWV0aG9k
KSBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTM5MGEyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXR0
IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIK
KworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU3RvcmFnZS5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0luc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKFN0b3JhZ2UqIGRvbVN0b3JhZ2Us
IGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKKyAgICA6IGRvbVN0b3JhZ2UoZG9t
U3RvcmFnZSkKKyAgICAsIGlzTG9jYWxTdG9yYWdlKGlzTG9jYWxTdG9yYWdlKQorICAgICwgZnJh
bWUoZnJhbWUpCisgICAgLCBzY3JpcHRDb250ZXh0KDApCisgICAgLCBzY3JpcHRPYmplY3QoMCkK
K3sKK30KKwordm9pZCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OnNldFNjcmlwdE9iamVj
dChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgbmV3U2NyaXB0T2JqZWN0KQorewor
ICAgIGlmIChzY3JpcHRDb250ZXh0ICYmIHNjcmlwdE9iamVjdCkKKyAgICAgICAgSlNWYWx1ZVVu
cHJvdGVjdChzY3JpcHRDb250ZXh0LCBzY3JpcHRPYmplY3QpOworCisgICAgc2NyaXB0T2JqZWN0
ID0gbmV3U2NyaXB0T2JqZWN0OworICAgIHNjcmlwdENvbnRleHQgPSBjb250ZXh0OworCisgICAg
QVNTRVJUKChjb250ZXh0ICYmIG5ld1NjcmlwdE9iamVjdCkgfHwgKCFjb250ZXh0ICYmICFuZXdT
Y3JpcHRPYmplY3QpKTsKKyAgICBpZiAoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpCisgICAg
ICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG5ld1NjcmlwdE9iamVjdCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjEyOTU4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2UuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlX2gKKyNkZWZpbmUgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlX2gKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RvcmFnZTsKKyAgICBjbGFzcyBGcmFtZTsKKwor
ICAgIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiBjcmVhdGUoU3RvcmFn
ZSogZG9tU3RvcmFnZSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZShkb21TdG9yYWdlLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYp
OworCisgICAgICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlOworICAgICAgICBib29sIGlz
TG9jYWxTdG9yYWdlOworICAgICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lOworICAgICAgICBKU0Nv
bnRleHRSZWYgc2NyaXB0Q29udGV4dDsKKyAgICAgICAgSlNPYmplY3RSZWYgc2NyaXB0T2JqZWN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKFN0
b3JhZ2UqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSopOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWZhMmM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0
dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxF
KERBVEFCQVNFKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgorCisj
aW5jbHVkZSAiRGF0YWJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgSW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZTo6SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZShEYXRhYmFzZSog
ZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbikKKyAgICAgICAgOiBkYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAg
LCBkb21haW4oZG9tYWluKQorICAgICAgICAsIG5hbWUobmFtZSkKKyAgICAgICAgLCB2ZXJzaW9u
KHZlcnNpb24pCisgICAgICAgICwgc2NyaXB0Q29udGV4dCgwKQorICAgICAgICAsIHNjcmlwdE9i
amVjdCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U6OnNldFNjcmlwdE9iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgbmV3
U2NyaXB0T2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHNjcmlwdENvbnRleHQgJiYgc2NyaXB0
T2JqZWN0KQorICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChzY3JpcHRDb250ZXh0LCBzY3Jp
cHRPYmplY3QpOworCisgICAgICAgIHNjcmlwdE9iamVjdCA9IG5ld1NjcmlwdE9iamVjdDsKKyAg
ICAgICAgc2NyaXB0Q29udGV4dCA9IGNvbnRleHQ7CisKKyAgICAgICAgQVNTRVJUKChjb250ZXh0
ICYmIG5ld1NjcmlwdE9iamVjdCkgfHwgKCFjb250ZXh0ICYmICFuZXdTY3JpcHRPYmplY3QpKTsK
KyAgICAgICAgaWYgKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgSlNW
YWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2NyaXB0T2JqZWN0KTsKKyAgICB9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43NGE4YTk1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdlYmtpdEBtYXR0bGlsZWsuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlX2gKKyNkZWZpbmUgSW5zcGVjdG9yRGF0YWJh
c2VSZXNvdXJjZV9oCisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJEYXRhYmFz
ZS5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSW5z
cGVjdG9yRGF0YWJhc2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+IGNyZWF0ZShEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0
IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlKGRhdGFiYXNlLCBkb21haW4sIG5hbWUsIHZlcnNpb24pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYpOworCisgICAgICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2U7CisgICAgICAgIFN0
cmluZyBkb21haW47CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgdmVyc2lv
bjsKKyAgICAgICAgSlNDb250ZXh0UmVmIHNjcmlwdENvbnRleHQ7CisgICAgICAgIEpTT2JqZWN0
UmVmIHNjcmlwdE9iamVjdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIEluc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKworI2VuZGlmIC8vIEluc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzliZjgKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKQEAgLTAs
MCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdl
YmtpdEBtYXR0bGlsZWsuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJl
c291cmNlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gWE1MSHR0cFJlcXVlc3RSZXNvdXJjZSBDbGFz
cworCitzdHJ1Y3QgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZSB7CisgICAgWE1MSHR0cFJlcXVlc3RS
ZXNvdXJjZShjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZykKKyAgICB7CisgICAgICAg
IEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICB0aGlzLT5zb3VyY2VTdHJpbmcgPSBz
b3VyY2VTdHJpbmcucmVwKCk7CisgICAgfQorCisgICAgflhNTEh0dHBSZXF1ZXN0UmVzb3VyY2Uo
KQorICAgIHsKKyAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIHNvdXJj
ZVN0cmluZy5jbGVhcigpOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6OlVTdHJpbmc6OlJlcD4g
c291cmNlU3RyaW5nOworfTsKKworICAgIEluc3BlY3RvclJlc291cmNlOjpJbnNwZWN0b3JSZXNv
dXJjZShsb25nIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
LCBGcmFtZSogZnJhbWUpCisgICAgOiBpZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBsb2Fk
ZXIoZG9jdW1lbnRMb2FkZXIpCisgICAgLCBmcmFtZShmcmFtZSkKKyAgICAsIHNjcmlwdENvbnRl
eHQoMCkKKyAgICAsIHNjcmlwdE9iamVjdCgwKQorICAgICwgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KDApCisgICAgLCBjYWNoZWQoZmFsc2UpCisgICAgLCBmaW5pc2hlZChmYWxzZSkKKyAgICAsIGZh
aWxlZChmYWxzZSkKKyAgICAsIGxlbmd0aCgwKQorICAgICwgcmVzcG9uc2VTdGF0dXNDb2RlKDAp
CisgICAgLCBzdGFydFRpbWUoLTEuMCkKKyAgICAsIHJlc3BvbnNlUmVjZWl2ZWRUaW1lKC0xLjAp
CisgICAgLCBlbmRUaW1lKC0xLjApCisgICAgLCB4bWxIdHRwUmVxdWVzdFJlc291cmNlKDApCisg
ICAgeworICAgIH0KKworSW5zcGVjdG9yUmVzb3VyY2U6On5JbnNwZWN0b3JSZXNvdXJjZSgpCit7
CisgICAgc2V0U2NyaXB0T2JqZWN0KDAsIDApOworfQorCitJbnNwZWN0b3JSZXNvdXJjZTo6VHlw
ZSBJbnNwZWN0b3JSZXNvdXJjZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKHhtbEh0dHBSZXF1
ZXN0UmVzb3VyY2UpCisgICAgICAgIHJldHVybiBYSFI7CisKKyAgICBpZiAocmVxdWVzdFVSTCA9
PSBsb2FkZXItPnJlcXVlc3RVUkwoKSkKKyAgICAgICAgcmV0dXJuIERvYzsKKworICAgIGlmIChs
b2FkZXItPmZyYW1lTG9hZGVyKCkgJiYgcmVxdWVzdFVSTCA9PSBsb2FkZXItPmZyYW1lTG9hZGVy
KCktPmljb25VUkwoKSkKKyAgICAgICAgcmV0dXJuIEltYWdlOworCisgICAgQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5jYWNo
ZWRSZXNvdXJjZShyZXF1ZXN0VVJMLnN0cmluZygpKTsKKyAgICBpZiAoIWNhY2hlZFJlc291cmNl
KQorICAgICAgICByZXR1cm4gT3RoZXI7CisKKyAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAg
ICAgICAgICAgIHJldHVybiBJbWFnZTsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9u
dFJlc291cmNlOgorICAgICAgICAgICAgcmV0dXJuIEZvbnQ7CisgICAgICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisjaWYgRU5BQkxFKFhTTFQpCisgICAgICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVy
biBTdHlsZXNoZWV0OworICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAg
ICAgICAgICByZXR1cm4gU2NyaXB0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIE90aGVyOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6c2V0U2NyaXB0
T2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3Qp
Cit7CisgICAgaWYgKHNjcmlwdENvbnRleHQgJiYgc2NyaXB0T2JqZWN0KQorICAgICAgICBKU1Zh
bHVlVW5wcm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7CisKKyAgICBzY3JpcHRP
YmplY3QgPSBuZXdTY3JpcHRPYmplY3Q7CisgICAgc2NyaXB0Q29udGV4dCA9IGNvbnRleHQ7CisK
KyAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRleHQgJiYg
IW5ld1NjcmlwdE9iamVjdCkpOworICAgIGlmIChjb250ZXh0ICYmIG5ld1NjcmlwdE9iamVjdCkK
KyAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2NyaXB0T2JqZWN0KTsKK30KKwor
dm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6c2V0WE1MSHR0cFJlcXVlc3RQcm9wZXJ0aWVzKGNvbnN0
IEpTQzo6VVN0cmluZyYgZGF0YSkKK3sKKyAgICB4bWxIdHRwUmVxdWVzdFJlc291cmNlLnNldChu
ZXcgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShkYXRhKSk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JS
ZXNvdXJjZTo6c291cmNlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoeG1sSHR0cFJlcXVlc3RS
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIEpTQzo6VVN0cmluZyh4bWxIdHRwUmVxdWVzdFJlc291
cmNlLT5zb3VyY2VTdHJpbmcpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOwor
ICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOworCisgICAgaWYgKHJlcXVlc3RVUkwgPT0gbG9h
ZGVyLT5yZXF1ZXN0VVJMKCkpIHsKKyAgICAgICAgYnVmZmVyID0gbG9hZGVyLT5tYWluUmVzb3Vy
Y2VEYXRhKCk7CisgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
aW5wdXRFbmNvZGluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIENhY2hlZFJlc291cmNlKiBj
YWNoZWRSZXNvdXJjZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+Y2FjaGVkUmVz
b3VyY2UocmVxdWVzdFVSTC5zdHJpbmcoKSk7CisgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2Up
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlc291
cmNlLT5pc1B1cmdlYWJsZSgpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMg
cHVyZ2VhYmxlIHRoZW4gbWFrZSBpdCB1bnB1cmdlYWJsZSB0byBnZXQKKyAgICAgICAgICAgIC8v
IGdldCBpdHMgZGF0YS4gVGhpcyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIHdlIHJldHVybiBh
bgorICAgICAgICAgICAgLy8gZW1wdHkgU3RyaW5nLgorICAgICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCB3ZSBkbyBzb21ldGhpbmcgZWxzZSBpbiB0aGUgY2FzZSBvZiBhIHB1cmdlZAorICAgICAg
ICAgICAgLy8gcmVzb3VyY2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIHdoeSB0aGVyZSBpcyBubyBk
YXRhIGluIHRoZQorICAgICAgICAgICAgLy8gaW5zcGVjdG9yPworICAgICAgICAgICAgaWYgKCFj
YWNoZWRSZXNvdXJjZS0+bWFrZVB1cmdlYWJsZShmYWxzZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVzb3Vy
Y2UtPmRhdGEoKTsKKyAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlZFJlc291cmNlLT5l
bmNvZGluZygpOworICAgIH0KKworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcodGV4dEVuY29kaW5nTmFtZSk7Cisg
ICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpCisgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xh
dGluMUVuY29kaW5nKCk7CisgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShidWZmZXItPmRhdGEo
KSwgYnVmZmVyLT5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42MjQ0MjMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2UuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclJlc291
cmNlX2gKKyNkZWZpbmUgSW5zcGVjdG9yUmVzb3VyY2VfaAorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDb250ZXh0UmVmLmg+CisKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIGNsYXNzIFVTdHJpbmc7Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKKyAgICBjbGFzcyBG
cmFtZTsKKyAgICBzdHJ1Y3QgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZTsKKworICAgIGNsYXNzIElu
c3BlY3RvclJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yUmVzb3VyY2U+IHsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgLy8gS2VlcCB0aGVzZSBpbiBzeW5jIHdpdGggV2ViSW5z
cGVjdG9yLlJlc291cmNlLlR5cGUKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIERv
YywKKyAgICAgICAgICAgIFN0eWxlc2hlZXQsCisgICAgICAgICAgICBJbWFnZSwKKyAgICAgICAg
ICAgIEZvbnQsCisgICAgICAgICAgICBTY3JpcHQsCisgICAgICAgICAgICBYSFIsCisgICAgICAg
ICAgICBNZWRpYSwKKyAgICAgICAgICAgIE90aGVyCisgICAgICAgIH07CisKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IGNyZWF0ZShsb25nIGxvbmcgaWRlbnRp
ZmllciwgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBGcmFtZSogZnJhbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yUmVzb3VyY2Uo
aWRlbnRpZmllciwgZG9jdW1lbnRMb2FkZXIsIGZyYW1lKSk7CisgICAgICAgIH0KKworICAgICAg
ICB+SW5zcGVjdG9yUmVzb3VyY2UoKTsKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpOworICAg
ICAgICB2b2lkIHNldFhNTEh0dHBSZXF1ZXN0UHJvcGVydGllcyhjb25zdCBKU0M6OlVTdHJpbmcm
IGRhdGEpOworCisgICAgICAgIFN0cmluZyBzb3VyY2VTdHJpbmcoKSBjb25zdDsKKworICAgICAg
ICBsb25nIGxvbmcgaWRlbnRpZmllcjsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBs
b2FkZXI7CisgICAgICAgIFJlZlB0cjxGcmFtZT4gZnJhbWU7CisgICAgICAgIEtVUkwgcmVxdWVz
dFVSTDsKKyAgICAgICAgSFRUUEhlYWRlck1hcCByZXF1ZXN0SGVhZGVyRmllbGRzOworICAgICAg
ICBIVFRQSGVhZGVyTWFwIHJlc3BvbnNlSGVhZGVyRmllbGRzOworICAgICAgICBTdHJpbmcgbWlt
ZVR5cGU7CisgICAgICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZTsKKyAgICAgICAgSlNDb250
ZXh0UmVmIHNjcmlwdENvbnRleHQ7CisgICAgICAgIEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdDsK
KyAgICAgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aDsKKyAgICAgICAgYm9vbCBj
YWNoZWQ7CisgICAgICAgIGJvb2wgZmluaXNoZWQ7CisgICAgICAgIGJvb2wgZmFpbGVkOworICAg
ICAgICBpbnQgbGVuZ3RoOworICAgICAgICBpbnQgcmVzcG9uc2VTdGF0dXNDb2RlOworICAgICAg
ICBkb3VibGUgc3RhcnRUaW1lOworICAgICAgICBkb3VibGUgcmVzcG9uc2VSZWNlaXZlZFRpbWU7
CisgICAgICAgIGRvdWJsZSBlbmRUaW1lOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVj
dG9yUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgRnJhbWUq
KTsKKworICAgICAgICBPd25QdHI8WE1MSHR0cFJlcXVlc3RSZXNvdXJjZT4geG1sSHR0cFJlcXVl
c3RSZXNvdXJjZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBJbnNwZWN0b3JSZXNvdXJjZV9oCg==
</data>
<flag name="review"
          id="13847"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>