<?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>25063</bug_id>
          
          <creation_ts>2009-04-06 15:50:40 -0700</creation_ts>
          <short_desc>Refactor InspectorController to use ScriptState/Object</short_desc>
          <delta_ts>2009-04-07 15:57:22 -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>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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>24590</dependson>
    
    <dependson>24623</dependson>
    
    <dependson>24989</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116683</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-06 15:50:40 -0700</bug_when>
    <thetext>This is a continuation of the unfork-refactoring of Inspector effort, started in bug 24524.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116684</commentid>
    <comment_count>1</comment_count>
      <attachid>29291</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-06 15:58:12 -0700</bug_when>
    <thetext>Created attachment 29291
Refactor InspectorController to use ScriptObject/State, v1

 WebCore/ChangeLog                                  |   24 ++
 WebCore/GNUmakefile.am                             |    1 +
 WebCore/WebCore.pro                                |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 WebCore/WebCoreSources.bkl                         |    1 +
 .../bindings/js/JSInspectorControllerCustom.cpp    |    2 +-
 WebCore/bindings/js/ScriptObject.cpp               |   30 +++
 WebCore/bindings/js/ScriptObject.h                 |   10 +
 WebCore/bindings/js/ScriptState.cpp                |   44 ++++
 WebCore/bindings/js/ScriptState.h                  |    3 +
 WebCore/inspector/InspectorController.cpp          |  232 ++++++--------------
 WebCore/inspector/InspectorController.h            |   16 +-
 13 files changed, 197 insertions(+), 175 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116688</commentid>
    <comment_count>2</comment_count>
      <attachid>29291</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-04-06 16:23:59 -0700</bug_when>
    <thetext>Comment on attachment 29291
Refactor InspectorController to use ScriptObject/State, v1

It would be nice if !m_webInspector meant m_webInspector.hasNoValue(). It would make lines like the following more readable.

     if (m_scriptState &amp;&amp; !m_webInspector.hasNoValue())

What are we losing with the removal of handleException? Are exceptions that happen in the Inspector JavaScript code still reported in it&apos;s Console?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116690</commentid>
    <comment_count>3</comment_count>
      <attachid>29291</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-06 16:36:24 -0700</bug_when>
    <thetext>Comment on attachment 29291
Refactor InspectorController to use ScriptObject/State, v1

Good idea on hasNoValue -&gt; !value. As for handleException -- you have reminded me I need to be careful and get this straight. The idea was that any set/get/call failures in Script* world use reportException, but this obviously has some re-entrancy implications for ConsoleMessage::addToConsole. Updated patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116777</commentid>
    <comment_count>4</comment_count>
      <attachid>29314</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 11:25:57 -0700</bug_when>
    <thetext>Created attachment 29314
Refactor InspectorController to use ScriptObject/State, v2

 WebCore/ChangeLog                                  |   35 +++
 WebCore/GNUmakefile.am                             |    1 +
 WebCore/WebCore.pro                                |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 WebCore/WebCoreSources.bkl                         |    1 +
 .../bindings/js/JSInspectorControllerCustom.cpp    |    2 +-
 WebCore/bindings/js/ScriptFunctionCall.cpp         |   20 ++-
 WebCore/bindings/js/ScriptFunctionCall.h           |    5 +-
 WebCore/bindings/js/ScriptObject.cpp               |   53 ++++-
 WebCore/bindings/js/ScriptObject.h                 |   10 +
 WebCore/bindings/js/ScriptState.cpp                |   44 ++++
 WebCore/bindings/js/ScriptState.h                  |    3 +
 WebCore/inspector/ConsoleMessage.cpp               |    4 +-
 WebCore/inspector/InspectorController.cpp          |  235 ++++++--------------
 WebCore/inspector/InspectorController.h            |   17 +-
 16 files changed, 244 insertions(+), 195 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116778</commentid>
    <comment_count>5</comment_count>
      <attachid>29314</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 11:29:20 -0700</bug_when>
    <thetext>Comment on attachment 29314
Refactor InspectorController to use ScriptObject/State, v2

Oops. Never mind -- need to tweak this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116779</commentid>
    <comment_count>6</comment_count>
      <attachid>29315</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 11:35:07 -0700</bug_when>
    <thetext>Created attachment 29315
Refactor InspectorController to use ScriptObject/State, v2.1

 WebCore/ChangeLog                                  |   35 +++
 WebCore/GNUmakefile.am                             |    1 +
 WebCore/WebCore.pro                                |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj              |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 WebCore/WebCoreSources.bkl                         |    1 +
 .../bindings/js/JSInspectorControllerCustom.cpp    |    2 +-
 WebCore/bindings/js/ScriptFunctionCall.cpp         |   20 ++-
 WebCore/bindings/js/ScriptFunctionCall.h           |    5 +-
 WebCore/bindings/js/ScriptObject.cpp               |   53 ++++-
 WebCore/bindings/js/ScriptObject.h                 |   10 +
 WebCore/bindings/js/ScriptState.cpp                |   44 ++++
 WebCore/bindings/js/ScriptState.h                  |    3 +
 WebCore/inspector/ConsoleMessage.cpp               |    4 +-
 WebCore/inspector/InspectorController.cpp          |  231 ++++++--------------
 WebCore/inspector/InspectorController.h            |   17 +-
 16 files changed, 242 insertions(+), 193 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116780</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 11:37:15 -0700</bug_when>
    <thetext>Updated and improved:

 * I opted to add hasWebInspector() to simplify condition logic. I promise it wasn&apos;t because I was lazy to add the operators to ScriptValue :). I just thought it would be a bit more descriptive as to what is actually going on.

 * I made sure that exceptions are reported and any re-entrancy issues are addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116785</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 12:26:43 -0700</bug_when>
    <thetext>One thing to mention -- I consciously changed handling of exceptions a little bit. They are now routed to inspector of inspector. In other words, exceptions in the inspector JS will be seen in the console of its inspector -- to see them, you need to inspect the inspector! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116815</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-07 15:57:22 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/42295 and http://trac.webkit.org/changeset/42296.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29291</attachid>
            <date>2009-04-06 15:58:12 -0700</date>
            <delta_ts>2009-04-06 16:36:24 -0700</delta_ts>
            <desc>Refactor InspectorController to use ScriptObject/State, v1</desc>
            <filename>Refactor-InspectorController-to-use-ScriptObject-State-v1.patch</filename>
            <type>text/plain</type>
            <size>39799</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGJiMDFjOTkxZjY0MmE0ODFlZTg1MzE4MTkyYTk1OWU3MWJmMTY1MApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZjQwMTRmLi4yY2U3OTdk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI3IEBACisyMDA5LTA0LTA2ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDYzCisgICAg
ICAgIFJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gdXNlIFNjcmlwdE9iamVjdC9TdGF0
ZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBTY3JpcHRTdGF0ZS5jcHAuCisg
ICAgICAgICogV2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDogRGl0dG8uCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZSk6
IEZpeGVkIGFyZ3VtZW50IGluZGV4IHR5cG8uCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
T2JqZWN0LmNwcDogQWRkZWQgU2NyaXB0R2xvYmFsT2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0T2JqZWN0KTogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMv
U2NyaXB0T2JqZWN0Lmg6IEFkZGVkIFNjcmlwdEdsb2JhbE9iamVjdCBkZWNscy4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6U2NyaXB0R2xvYmFsT2JqZWN0KTogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oOiBBZGRlZCBzY3JpcHRTdGF0ZUZyb21QYWdlIGRl
Y2wuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOiBSZWZhY3Rv
cmVkIHRvIHVzZSBTY3JpcHRTdGF0ZS9PYmplY3QuCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaDogRGl0dG8uCisKIDIwMDktMDQtMDYgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY4NThmMjIuLjk5OTdmNzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtMzc5LDYgKzM3OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
U291cmNlQ29kZS5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFN0cmluZy5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCBmYTZlZmFmLi5mZjg2ZDEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQ5OCw2ICs0OTgsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBiaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIFwKICAgICBiaW5kaW5ncy9q
cy9TY3JpcHRPYmplY3QuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50
aW5lLmNwcCBcCisgICAgYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAgXAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCBhYWI2MGQyLi4xNTMyMjU3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTE3NDE5LDYgKzE3NDE5LDEwIEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xT
Y3JpcHRTdGF0ZS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0U3RhdGUuaCINCiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZjgzYzQ5My4uNWJhNDI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTYxOSw2ICs2MTksNyBAQAogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNw
b25zZS5tbSAqLzsgfTsKIAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0
aW9uQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9Owog
CQk0MTAwMkNDRTBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVE
RUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OworCQk0MTI3RDUzNzBG
OEFBQjFEMDBFNDI0RjUgLyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlw
dFN0YXRlLmNwcCAqLzsgfTsKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9i
amVjdFF1YXJhbnRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyQTY4NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuY3BwICovOyB9OwogCQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZF
NzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3
NUJGMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFE
IC8qIFNjcmlwdENhbGxTdGFjay5jcHAgKi87IH07CkBAIC01NTIxLDYgKzU1MjIsNyBAQAogCQkz
N0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdEZ1bmN0aW9uQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkND
QzBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRT
dGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMkE2ODQ2MEY2QjAzREQwMDBF
QTY2RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MzM1OSw2ICsxMzM2MSw3IEBACiAJCQkJNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlw
dE9iamVjdFF1YXJhbnRpbmUuaCAqLywKIAkJCQk5MzRDQzEwOTBFREIyMjM5MDBBNjU4RjIgLyog
U2NyaXB0U291cmNlQ29kZS5oICovLAogCQkJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBT
Y3JpcHRTdGF0ZS5oICovLAorCQkJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRT
dGF0ZS5jcHAgKi8sCiAJCQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmlu
Zy5oICovLAogCQkJCTkzNENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAg
Ki8sCiAJCQkJOTM0Q0MwRTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBA
IC0xODUzOSw2ICsxODU0Miw3IEBACiAJCQkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjZFNTBGNjRCQ0Y2
MDBBMDdFQUMgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMkE2ODQ3
MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQxMjdENTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9s
bFZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8q
IFNjcm9sbFZpZXdNYWMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggNmFjYWUy
Ny4uNDUyYjJmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIv
V2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKQEAgLTEyNiw2ICsxMjYsNyBAQCBUaGlzIGZpbGUg
Y29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAg
ICAgIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKICAgICAgICAgYmluZGluZ3Mv
anMvU2NyaXB0T2JqZWN0LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFy
YW50aW5lLmNwcAorICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKICAgICAgICAg
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1
Y3Rvci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250
cm9sbGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9s
bGVyQ3VzdG9tLmNwcAppbmRleCBkZTY1ZWU1Li4wNzAyMmMyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCkBAIC0xMzUsNyAr
MTM1LDcgQEAgSlNWYWx1ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJh
bWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXMKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIGpzQm9v
bGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9O
b2RlKGFyZ3MuYXQoZXhlYywgMSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFk
ZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhl
YywgMikpKSk7CiB9CiAKIEpTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNv
dXJjZURvY3VtZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKaW5kZXggNjAxOThlZi4uN2VjZWEzOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIlNjcmlwdE9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogCkBAIC0xMTEsNCArMTEyLDMzIEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQogICAgIHJldHVy
biAhc2NyaXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOwogfQogCitib29sIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKKyAgICByZXR1cm4gIXNjcmlw
dFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKK30KKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQoreworICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CisgICAgcmV0dXJuICFzY3Jp
cHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCk7Cit9CisKKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6
OmdldE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNj
cmlwdE9iamVjdCYgdmFsdWUpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTVmFs
dWVQdHIganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldChz
Y3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOworICAgIGlmICghanNW
YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gU2NyaXB0T2JqZWN0KGFz
T2JqZWN0KGpzVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKaW5kZXggNWQxNWZmMi4uZTViYmM5
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGlj
IFNjcmlwdFZhbHVlIHsKICAgICBwdWJsaWM6CkBAIC01NSw2ICs1NiwxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCk7CiAgICAgfTsKIAorICAgIGNsYXNzIFNjcmlwdEdsb2JhbE9iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNj
cmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQ29udHJvbGxlciopOworICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPYmplY3QoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBTY3JpcHRPYmplY3QmKTsKKyAgICBwcml2YXRlOgorICAgICAgICBTY3JpcHRHbG9iYWxPYmpl
Y3QoKSB7IH0KKyAgICB9OworCiB9CiAKICNlbmRpZiAvLyBTY3JpcHRPYmplY3RfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40YWU2YjRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
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
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0
YXRlLmgKaW5kZXggM2NjZTA5My4uMTk2MTVjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdGF0ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUu
aApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIFBhZ2U7CiAKICAgICAvLyBUaGUgaWRlYSBpcyB0byBleHBvc2UgInN0
YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlvbiwgYW5kIGFueSBvdGhlcgogICAgIC8vIG1l
dGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlwcyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6
RXhlY1N0YXRlIGFzIGEKQEAgLTQ0LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IC8vIEZvciBub3csIHRoZSBzZXBhcmF0aW9uIGlzIHB1cmVseSBieSBjb252ZW50aW9uLgogICAg
IHR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CiAKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGVGcm9tUGFnZShQYWdlKiBwYWdlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAppbmRleCBkMzg5NjcxLi5mYTNhNjA0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgIkNh
Y2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNvbnNvbGVN
ZXNzYWdlLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTUzLDEyICs1MSw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5k
b3cuaCIKLSNpbmNsdWRlICJKU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJK
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdG9yQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgIkpTUmFuZ2UuaCIKICNpbmNs
dWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJS
YW5nZS5oIgpAQCAtNzYsMTMgKzY4LDggQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHJv
ZmlsZXIvUHJvZmlsZS5oPgogI2luY2x1ZGUgPHByb2ZpbGVyL1Byb2ZpbGVyLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9Db2xsZWN0b3JIZWFwSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
TG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgpAQCAtOTEsMTMgKzc4LDExIEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAj
aW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKICNpbmNsdWRlICJTdG9yYWdlLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZUFyZWEuaCIKLSNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0xMTMsMjcgKzk4LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lID0gIm9yZy53ZWJraXQucHJvZmlsZXMudXNlci1pbml0aWF0ZWQiOwogCi1zdGF0aWMgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nUmVmKGNvbnN0IGNoYXIqIHN0cikKK3N0YXRp
YyB2b2lkIGNhbGxTaW1wbGVGdW5jdGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewot
ICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKHN0cikpOwotfQotCi1zdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc2NyaXB0
U3RyaW5nKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCBleGNlcHRp
b24pKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICByZXR1cm4gU3RyaW5nKEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzY3Jp
cHRTdHJpbmcuZ2V0KCkpLCBKU1N0cmluZ0dldExlbmd0aChzY3JpcHRTdHJpbmcuZ2V0KCkpKTsK
LX0KLQotI2RlZmluZSBIQU5ETEVfRVhDRVBUSU9OKGNvbnRleHQsIGV4Y2VwdGlvbikgaGFuZGxl
RXhjZXB0aW9uKChjb250ZXh0KSwgKGV4Y2VwdGlvbiksIF9fTElORV9fKQotCi1zdGF0aWMgdm9p
ZCBjYWxsU2ltcGxlRnVuY3Rpb24oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24odG9KUyhjb250ZXh0KSwgdG9KUyh0aGlzT2JqZWN0KSwgZnVuY3Rpb25O
YW1lKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oc2NyaXB0U3RhdGUsIHRoaXNP
YmplY3QsIGZ1bmN0aW9uTmFtZSk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCkBAIC0yMDMs
OSArMTcwLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdl
KiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVjdGVkUGFnZShw
YWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9wYWdlKDApCi0gICAgLCBtX3Nj
cmlwdE9iamVjdCgwKQotICAgICwgbV9jb250cm9sbGVyU2NyaXB0T2JqZWN0KDApCi0gICAgLCBt
X3NjcmlwdENvbnRleHQoMCkKKyAgICAsIG1fc2NyaXB0U3RhdGUoMCkKICAgICAsIG1fd2luZG93
VmlzaWJsZShmYWxzZSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICAsIG1f
ZGVidWdnZXJFbmFibGVkKGZhbHNlKQpAQCAtMjMxLDE4ICsxOTYsOCBAQCBJbnNwZWN0b3JDb250
cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgbV9jbGllbnQtPmluc3BlY3Rv
ckRlc3Ryb3llZCgpOwogCi0gICAgaWYgKG1fc2NyaXB0Q29udGV4dCkgewotICAgICAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICAgICAgSlNPYmplY3RSZWYgZ2xvYmFsID0gSlND
b250ZXh0R2V0R2xvYmFsT2JqZWN0KG1fc2NyaXB0Q29udGV4dCk7Ci0gICAgICAgIEpTVmFsdWVS
ZWYgY29udHJvbGxlclByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0eShtX3NjcmlwdENvbnRl
eHQsIGdsb2JhbCwganNTdHJpbmdSZWYoIkluc3BlY3RvckNvbnRyb2xsZXIiKS5nZXQoKSwgJmV4
Y2VwdGlvbik7Ci0gICAgICAgIGlmICghSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQs
IGV4Y2VwdGlvbikpIHsKLSAgICAgICAgICAgIGlmIChKU09iamVjdFJlZiBjb250cm9sbGVyID0g
SlNWYWx1ZVRvT2JqZWN0KG1fc2NyaXB0Q29udGV4dCwgY29udHJvbGxlclByb3BlcnR5LCAmZXhj
ZXB0aW9uKSkgewotICAgICAgICAgICAgICAgIGlmICghSEFORExFX0VYQ0VQVElPTihtX3Njcmlw
dENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJp
dmF0ZShjb250cm9sbGVyLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAg
ICBpZiAobV9zY3JpcHRTdGF0ZSkKKyAgICAgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9z
Y3JpcHRTdGF0ZSwgIkluc3BlY3RvckNvbnRyb2xsZXIiLCBTY3JpcHRPYmplY3QoKSk7CiAKICAg
ICBpZiAobV9wYWdlKQogICAgICAgICBtX3BhZ2UtPnNldFBhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXIoMCk7CkBAIC0zNTYsNyArMzExLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0KE5vZGUqIG5vZGUpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
bV9ub2RlVG9Gb2N1cyA9IG5vZGU7CiAKLSAgICBpZiAoIW1fc2NyaXB0T2JqZWN0KSB7CisgICAg
aWYgKG1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkgewogICAgICAgICBtX3Nob3dBZnRlclZp
c2libGUgPSBFbGVtZW50c1BhbmVsOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcwLDE1
ICszMjUsMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmb2N1c05vZGUoKQogICAgIGlm
ICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9zY3JpcHRDb250
ZXh0KTsKLSAgICBBU1NFUlQobV9zY3JpcHRPYmplY3QpOworICAgIEFTU0VSVChtX3NjcmlwdFN0
YXRlKTsKKyAgICBBU1NFUlQoIW1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSk7CiAgICAgQVNT
RVJUKG1fbm9kZVRvRm9jdXMpOwogCiAgICAgU2NyaXB0T2JqZWN0IHF1YXJhbnRpbmVkTm9kZTsK
ICAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KG1fbm9kZVRvRm9jdXMuZ2V0KCks
IHF1YXJhbnRpbmVkTm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmplY3Qp
LCAidXBkYXRlRm9jdXNlZE5vZGUiKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJ1cGRhdGVGb2N1c2VkTm9kZSIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkTm9kZSk7CiAKICAgICBtX25vZGVU
b0ZvY3VzID0gMDsKQEAgLTQxNSw3ICszNzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQogCiAgICAgbV93
aW5kb3dWaXNpYmxlID0gdmlzaWJsZTsKIAotICAgIGlmICghbV9zY3JpcHRDb250ZXh0IHx8ICFt
X3NjcmlwdE9iamVjdCkKKyAgICBpZiAoIW1fc2NyaXB0U3RhdGUgfHwgbV93ZWJJbnNwZWN0b3Iu
aGFzTm9WYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV93aW5kb3dWaXNpYmxl
KSB7CkBAIC00NTUsMTIgKzQxMCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1l
c3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbAogICAgIGFk
ZENvbnNvbGVNZXNzYWdlKDAsIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgbV9ncm91cExldmVsKSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6YWRkQ29uc29sZU1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBDb25z
b2xlTWVzc2FnZSogY29uc29sZU1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFk
ZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgQ29uc29sZU1lc3NhZ2Uq
IGNvbnNvbGVNZXNzYWdlKQogewogICAgIEFTU0VSVChlbmFibGVkKCkpOwogICAgIEFTU0VSVF9B
UkcoY29uc29sZU1lc3NhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKIAotICAgIGlmIChtX3ByZXZpb3Vz
TWVzc2FnZSAmJiBtX3ByZXZpb3VzTWVzc2FnZS0+aXNFcXVhbChleGVjLCBjb25zb2xlTWVzc2Fn
ZSkpIHsKKyAgICBpZiAobV9wcmV2aW91c01lc3NhZ2UgJiYgbV9wcmV2aW91c01lc3NhZ2UtPmlz
RXF1YWwoc2NyaXB0U3RhdGUsIGNvbnNvbGVNZXNzYWdlKSkgewogICAgICAgICBtX3ByZXZpb3Vz
TWVzc2FnZS0+aW5jcmVtZW50Q291bnQoKTsKICAgICAgICAgZGVsZXRlIGNvbnNvbGVNZXNzYWdl
OwogICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDI0LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRDb25zb2xlTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNzYWdlKiBj
b24KICAgICB9CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICBtX3ByZXZpb3Vz
TWVzc2FnZS0+YWRkVG9Db25zb2xlKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0
KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5hZGRU
b0NvbnNvbGUobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJDb25zb2xlTWVzc2FnZXMoKQpAQCAt
NDgyLDEwICs0MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhckNvbnNvbGVN
ZXNzYWdlcygpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlUmVjb3JkQnV0dG9u
KGJvb2wgaXNQcm9maWxpbmcpCiB7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQpCisgICAgaWYg
KCFtX3NjcmlwdFN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24odG9KUyhtX3NjcmlwdENvbnRleHQpLCB0b0pTKG1fc2NyaXB0T2JqZWN0KSwg
InNldFJlY29yZGluZ1Byb2ZpbGUiKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRSZWNvcmRpbmdQcm9maWxlIik7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwogICAgIGZ1bmN0aW9uLmNh
bGwoKTsKIH0KQEAgLTU0OSwxMCArNTA0LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGV0YWNoV2luZG93KCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdp
bmRvdyhib29sIGF0dGFjaGVkKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NjcmlwdENv
bnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3Njcmlw
dFN0YXRlIHx8IG1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwg
dG9KUyhtX3NjcmlwdE9iamVjdCksICJzZXRBdHRhY2hlZFdpbmRvdyIpOworICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInNldEF0
dGFjaGVkV2luZG93Iik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwog
ICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KQEAgLTYwMCwxNCArNTU1LDE0IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzc09uTm9kZShOb2RlKiBub2RlKQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQo
RnJhbWUqIGZyYW1lKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NjcmlwdENvbnRleHQg
fHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NjcmlwdFN0YXRl
IHx8IG1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U2NyaXB0T2JqZWN0IGRvbVdpbmRvdzsKICAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2Jq
ZWN0KGZyYW1lLT5kb21XaW5kb3coKSwgZG9tV2luZG93KSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9K
UyhtX3NjcmlwdE9iamVjdCksICJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVkIik7CisgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiaW5z
cGVjdGVkV2luZG93Q2xlYXJlZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRvbVdp
bmRvdyk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQpAQCAtNjIwLDQyICs1NzUsMTkgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKQogICAg
IC8vIEdyYW50IHRoZSBpbnNwZWN0b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0
ZWQgcGFnZS4KICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLT5ncmFudFVuaXZlcnNhbEFjY2VzcygpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGNsZWFuZWQgdXAuIEFQSSBNaXgtdXAuCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKTsK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBt
X3NjcmlwdENvbnRleHQgPSB0b1JlZihleGVjKTsKLSAgICBKU1ZhbHVlUHRyIGpzSW5zcGVjdG9y
ID0gdG9KUyhleGVjLCB0aGlzKTsKLSAgICBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3QgPSB0b1Jl
Zihhc09iamVjdChqc0luc3BlY3RvcikpOwotICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KElk
ZW50aWZpZXIoZXhlYywgIkluc3BlY3RvckNvbnRyb2xsZXIiKSwganNJbnNwZWN0b3IpOworICAg
IG1fc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1fcGFnZSk7CisgICAgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3RvckNvbnRyb2xsZXIiLCB0
aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgp
CiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRl
eHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbCA9IEpTQ29udGV4
dEdldEdsb2JhbE9iamVjdChtX3NjcmlwdENvbnRleHQpOwotICAgIEFTU0VSVChnbG9iYWwpOwot
Ci0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgSlNWYWx1ZVJlZiBpbnNwZWN0
b3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCBnbG9iYWwsIGpz
U3RyaW5nUmVmKCJXZWJJbnNwZWN0b3IiKS5nZXQoKSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhB
TkRMRV9FWENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQorICAgIEFTU0VSVCht
X3NjcmlwdFN0YXRlKTsKKyAgICBpZiAoIW1fc2NyaXB0U3RhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEFTU0VSVChpbnNwZWN0b3JWYWx1ZSk7Ci0gICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkK
KyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0T2JqZWN0KG1fc2NyaXB0U3RhdGUsICJX
ZWJJbnNwZWN0b3IiLCBtX3dlYkluc3BlY3RvcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
c2NyaXB0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fc2NyaXB0Q29udGV4dCwgaW5zcGVjdG9y
VmFsdWUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29u
dGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc2NyaXB0
T2JqZWN0KTsKLQotICAgIEpTVmFsdWVQcm90ZWN0KG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRP
YmplY3QpOwotCiAgICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhh
dCB0aGUgcGFnZSBsb2FkZWQKICAgICBzaG93V2luZG93KCk7CiB9CkBAIC02ODUsNyArNjE3LDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3BlY2lhbFBhbmVscyBwYW5l
bCkKIAogICAgIHNob3coKTsKIAotICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICBpZiAo
bV93ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJs
ZSA9IHBhbmVsOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzE5LDcgKzY1MSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMgcGFuZWwpCiAg
ICAgfQogCiAgICAgaWYgKHNob3dGdW5jdGlvbk5hbWUpCi0gICAgICAgIGNhbGxTaW1wbGVGdW5j
dGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCBzaG93RnVuY3Rpb25OYW1lKTsK
KyAgICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9y
LCBzaG93RnVuY3Rpb25OYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9z
ZSgpCkBAIC03MzMsMTEgKzY2NSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2Uo
KQogI2VuZGlmCiAgICAgY2xvc2VXaW5kb3coKTsKIAotICAgIGlmIChtX3NjcmlwdENvbnRleHQg
JiYgbV9zY3JpcHRPYmplY3QpCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9zY3JpcHRDb250
ZXh0LCBtX3NjcmlwdE9iamVjdCk7Ci0KLSAgICBtX3NjcmlwdE9iamVjdCA9IDA7Ci0gICAgbV9z
Y3JpcHRDb250ZXh0ID0gMDsKKyAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgpOwor
ICAgIG1fc2NyaXB0U3RhdGUgPSAwOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNo
b3dXaW5kb3coKQpAQCAtNzczLDggKzcwMiw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+CiAg
ICAgdGl0bGUgKz0gIi4iOwogICAgIHRpdGxlICs9IFVTdHJpbmc6OmZyb20obV9jdXJyZW50VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RP
TVdpbmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKS0+Z2xvYmFsRXhlYygpOwotICAg
IFByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAg
RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3Rh
cnRQcm9maWxpbmcoc2NyaXB0U3RhdGUsIHRpdGxlKTsKIAogICAgIHRvZ2dsZVJlY29yZEJ1dHRv
bih0cnVlKTsKIH0KQEAgLTc5MCw4ICs3MTksOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICB0aXRsZSArPSAiLiI7CiAgICAgdGl0
bGUgKz0gVVN0cmluZzo6ZnJvbShtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcik7
CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgUmVmUHRyPFByb2ZpbGU+IHByb2ZpbGUg
PSBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAg
RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBSZWZQdHI8UHJvZmlsZT4gcHJvZmlsZSA9
IFByb2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmlsaW5nKHNjcmlwdFN0YXRlLCB0aXRsZSk7
CiAgICAgaWYgKHByb2ZpbGUpCiAgICAgICAgIGFkZFByb2ZpbGUocHJvZmlsZSwgMCwgVVN0cmlu
ZygpKTsKIApAQCAtODA4LDggKzczNyw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlUHJvZmlsZXIoYm9vbCBza2lwUmVjb21waWxlKQogICAgIGlmICghc2tpcFJlY29tcGlsZSkK
ICAgICAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1
bmN0aW9uc1Nvb24oKTsKIAotICAgIGlmIChtX3NjcmlwdENvbnRleHQgJiYgbV9zY3JpcHRPYmpl
Y3QpCi0gICAgICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0
T2JqZWN0LCAicHJvZmlsZXJXYXNFbmFibGVkIik7CisgICAgaWYgKG1fc2NyaXB0U3RhdGUgJiYg
IW1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkKKyAgICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9u
KG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAicHJvZmlsZXJXYXNFbmFibGVkIik7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkKQEAgLTgyMSw1
NSArNzUwLDU1IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkK
IAogICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5j
dGlvbnNTb29uKCk7CiAKLSAgICBpZiAobV9zY3JpcHRDb250ZXh0ICYmIG1fc2NyaXB0T2JqZWN0
KQotICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9i
amVjdCwgInByb2ZpbGVyV2FzRGlzYWJsZWQiKTsKKyAgICBpZiAobV9zY3JpcHRTdGF0ZSAmJiAh
bV93ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKQorICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJwcm9maWxlcldhc0Rpc2FibGVkIik7CiB9
CiAKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQog
ewotICAgIEFTU0VSVChtX3NjcmlwdENvbnRleHQpOwotICAgIGlmICghbV9zY3JpcHRDb250ZXh0
KQorICAgIEFTU0VSVChtX3NjcmlwdFN0YXRlKTsKKyAgICBpZiAoIW1fc2NyaXB0U3RhdGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlc291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5k
ID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KQotICAgICAg
ICBpdC0+c2Vjb25kLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBT
Y3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgaXQtPnNlY29uZC0+
Y3JlYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYkluc3Bl
Y3RvcikpOwogCiAgICAgdW5zaWduZWQgbWVzc2FnZUNvdW50ID0gbV9jb25zb2xlTWVzc2FnZXMu
c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkK
LSAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvQ29uc29sZSh0b0pTKG1fc2NyaXB0
Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICBt
X2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRkVG9Db25zb2xlKG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9i
amVjdChtX3dlYkluc3BlY3RvcikpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFi
YXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0g
ICAgICAgICgqaXQpLT5iaW5kKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRv
SlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgICgqaXQpLT5iaW5kKG1fc2NyaXB0U3RhdGUs
IFNjcmlwdE9iamVjdChtX3dlYkluc3BlY3RvcikpOwogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VF
bmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChET01TdG9yYWdlUmVz
b3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YmluZCh0b0pTKG1fc2Ny
aXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAg
ICAoKml0KS0+YmluZChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3Ip
KTsKICNlbmRpZgogCi0gICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9z
Y3JpcHRPYmplY3QsICJwb3B1bGF0ZUludGVyZmFjZSIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlv
bihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInBvcHVsYXRlSW50ZXJmYWNlIik7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0UHJvZmlsZShQcm9maWxlKiBw
cm9maWxlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0
Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmplY3QpLCAiYWRkUHJvZmlsZSIpOworICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImFk
ZFByb2ZpbGUiKTsKICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodG9KUyh0b0pTKG1fc2NyaXB0Q29udGV4dCksIHByb2ZpbGUpKTsKKyAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCh0b0pTKG1fc2NyaXB0U3RhdGUsIHByb2ZpbGUpKTsKICAgICBm
dW5jdGlvbi5jYWxsKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzZXRTY3Jp
cHRPYmplY3RzKCkKIHsKLSAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmpl
Y3QpCisgICAgaWYgKCFtX3NjcmlwdFN0YXRlIHx8IG1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJj
ZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCi0g
ICAgICAgIGl0LT5zZWNvbmQtPnJlbGVhc2VTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRl
eHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpLCBmYWxzZSk7CisgICAgICAg
IGl0LT5zZWNvbmQtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2Jq
ZWN0KG1fd2ViSW5zcGVjdG9yKSwgZmFsc2UpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAg
IERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNl
UmVzb3VyY2VzLmVuZCgpOwpAQCAtODgyLDcgKzgxMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzZXRTY3JpcHRPYmplY3RzKCkKICAgICAgICAgKCppdCktPnVuYmluZCgpOwogI2Vu
ZGlmCiAKLSAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9i
amVjdCwgInJlc2V0Iik7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1f
d2ViSW5zcGVjdG9yLCAicmVzZXQiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpw
cnVuZVJlc291cmNlcyhSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFwLCBEb2N1bWVudExvYWRlciog
bG9hZGVyVG9LZWVwKQpAQCAtODk5LDcgKzgyOCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiByZXNvdXJjZU1hcCwgRG9jdW1lbnRMb2Fk
CiAgICAgICAgIGlmICghbG9hZGVyVG9LZWVwIHx8ICFyZXNvdXJjZS0+aXNTYW1lTG9hZGVyKGxv
YWRlclRvS2VlcCkpIHsKICAgICAgICAgICAgIHJlbW92ZVJlc291cmNlKHJlc291cmNlKTsKICAg
ICAgICAgICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Ut
PnJlbGVhc2VTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3Qo
dG9KUyhtX3NjcmlwdE9iamVjdCkpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXNvdXJjZS0+
cmVsZWFzZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNw
ZWN0b3IpLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTkzNSw3ICs4NjQsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBhZGQgdGhlIG1haW4gcmVzb3VyY2Ug
dW50aWwgaXRzIGxvYWQgaXMgY29tbWl0dGVkLiBUaGlzIGlzCiAgICAgICAgICAgICAgICAgLy8g
bmVlZGVkIHRvIGtlZXAgdGhlIGxvYWQgZm9yIGEgdXNlci1lbnRlcmVkIFVSTCBmcm9tIHNob3dp
bmcgdXAgaW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gbGlzdCBvZiByZXNvdXJjZXMgZm9yIHRo
ZSBwYWdlIHRoZXkgYXJlIG5hdmlnYXRpbmcgYXdheSBmcm9tLgotICAgICAgICAgICAgICAgIG1f
bWFpblJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBT
Y3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgICAgICAgICBtX21h
aW5SZXNvdXJjZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVj
dChtX3dlYkluc3BlY3RvcikpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBQYWdlcyBsb2FkZWQgZnJvbSB0aGUgcGFnZSBjYWNoZSBhcmUgY29tbWl0dGVkIGJlZm9y
ZQogICAgICAgICAgICAgICAgIC8vIG1fbWFpblJlc291cmNlIGlzIHRoZSByaWdodCByZXNvdXJj
ZSBmb3IgdGhpcyBsb2FkLCBzbyB3ZQpAQCAtMTAxNSw3ICs5NDQsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRl
ciogbG9hZGVyLAogICAgIGFkZFJlc291cmNlKHJlc291cmNlLmdldCgpKTsKIAogICAgIGlmICh3
aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QodG9K
UyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsK
KyAgICAgICAgcmVzb3VyY2UtPmNyZWF0ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCBTY3Jp
cHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBA
IC0xMDM3LDcgKzk2Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZv
ckluaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKICAgICBhZGRSZXNvdXJj
ZShyZXNvdXJjZS5nZXQoKSk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpICYmIGxvYWRlci0+
aXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2UoKSAmJiByZXNvdXJjZSA9PSBtX21haW5SZXNvdXJjZSkK
LSAgICAgICAgcmVzb3VyY2UtPmNyZWF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4
dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICByZXNvdXJj
ZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYklu
c3BlY3RvcikpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVxdWVz
dChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpA
QCAtMTA1Nyw3ICs5ODYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVx
dWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZgogICAgIH0KIAogICAg
IGlmIChyZXNvdXJjZSAhPSBtX21haW5SZXNvdXJjZSAmJiB3aW5kb3dWaXNpYmxlKCkpCi0gICAg
ICAgIHJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBT
Y3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgcmVzb3VyY2UtPmNy
ZWF0ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0
b3IpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTA3Myw3ICsxMDAyLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW4KICAgICByZXNvdXJjZS0+bWFya1Jlc3BvbnNlUmVjZWl2ZWRUaW1lKCk7CiAKICAg
ICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7CisgICAgICAgIHJlc291cmNlLT51cGRhdGVTY3Jp
cHRPYmplY3QobV9zY3JpcHRTdGF0ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTEwODgsNyArMTAxNyw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nCiAgICAgcmVzb3VyY2UtPmFkZExlbmd0aChsZW5ndGhSZWNlaXZl
ZCk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+dXBkYXRl
U2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7CisgICAgICAgIHJlc291cmNlLT51
cGRhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcikKQEAgLTExMDcsNyArMTAzNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
CiAgICAgYWRkUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCiAgICAgaWYgKHdpbmRvd1Zpc2li
bGUoKSkKLSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0
Q29udGV4dCkpOworICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0
U3RhdGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZhaWxMb2FkaW5nKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiAvKmVycm9yKi8pCkBAIC0xMTI3LDcgKzEwNTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaQogICAgIGFkZFJlc291cmNlKHJlc291cmNlLmdldCgpKTsKIAogICAgIGlmICh3aW5kb3dW
aXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QodG9KUyhtX3Nj
cmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX3Nj
cmlwdFN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJp
ZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3Jp
cHRTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTExNDIsNyArMTA3MSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpCiAgICAgcmVzb3VyY2UtPnNldFhNTEh0dHBSZXNwb25zZVRleHQoc291cmNl
U3RyaW5nKTsKIAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51
cGRhdGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3Vy
Y2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlU3RyaW5nKQpAQCAtMTE1OSw3ICsxMDg4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYKICAgICByZXNvdXJjZS0+c2V0WE1MSHR0cFJlc3BvbnNlVGV4dChTY3Jp
cHRTdHJpbmcoc291cmNlU3RyaW5nKSk7CiAgICAgCiAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkK
LSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4
dCkpOworICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUp
OwogfQogCiAKQEAgLTExNzQsNyArMTEwMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21hCiAg
ICAgbV9kYXRhYmFzZVJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogCiAgICAgaWYgKHdpbmRvd1Zp
c2libGUoKSkKLSAgICAgICAgcmVzb3VyY2UtPmJpbmQodG9KUyhtX3NjcmlwdENvbnRleHQpLCBT
Y3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgcmVzb3VyY2UtPmJp
bmQobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9CiAjZW5k
aWYKIApAQCAtMTE5NCw3ICsxMTIzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRV
c2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2EKIAogICAg
IG1fZG9tU3RvcmFnZVJlc291cmNlcy5hZGQocmVzb3VyY2UpOwogICAgIGlmICh3aW5kb3dWaXNp
YmxlKCkpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2Ny
aXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIHJlc291cmNlLT5iaW5k
KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYkluc3BlY3RvcikpOwogfQogI2VuZGlm
CiAKQEAgLTEyMTQsNyArMTE0Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
RGVidWdnZXIoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmplY3QpIHsKKyAgICBpZiAoIW1fc2Ny
aXB0U3RhdGUgfHwgbV93ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIG1fYXR0
YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTIyNyw3ICsxMTU2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dl
cigpCiAgICAgbV9kZWJ1Z2dlckVuYWJsZWQgPSB0cnVlOwogICAgIG1fYXR0YWNoRGVidWdnZXJX
aGVuU2hvd24gPSBmYWxzZTsKIAotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRl
eHQsIG1fc2NyaXB0T2JqZWN0LCAiZGVidWdnZXJXYXNFbmFibGVkIik7CisgICAgY2FsbFNpbXBs
ZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGVidWdnZXJXYXNFbmFi
bGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKCkK
QEAgLTEyNDIsOCArMTE3MSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURl
YnVnZ2VyKCkKICAgICBtX2RlYnVnZ2VyRW5hYmxlZCA9IGZhbHNlOwogICAgIG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd24gPSBmYWxzZTsKIAotICAgIGlmIChtX3NjcmlwdENvbnRleHQgJiYgbV9z
Y3JpcHRPYmplY3QpCi0gICAgICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQs
IG1fc2NyaXB0T2JqZWN0LCAiZGVidWdnZXJXYXNEaXNhYmxlZCIpOworICAgIGlmIChtX3Njcmlw
dFN0YXRlICYmICFtX3dlYkluc3BlY3Rvci5oYXNOb1ZhbHVlKCkpCisgICAgICAgIGNhbGxTaW1w
bGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRlYnVnZ2VyV2FzRGlz
YWJsZWQiKTsKIH0KIAogSmF2YVNjcmlwdENhbGxGcmFtZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y3VycmVudENhbGxGcmFtZSgpIGNvbnN0CkBAIC0xNDg1LDM4ICsxNDE0LDEzIEBAIGJvb2wgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUm
IGVsYXBzZWQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aGFuZGxlRXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAoIWV4Y2VwdGlvbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSB0b1N0cmluZyhjb250ZXh0LCBleGNlcHRp
b24sIDApOwotICAgIFN0cmluZyBmaWxlKF9fRklMRV9fKTsKLQotICAgIGlmIChKU09iamVjdFJl
ZiBleGNlcHRpb25PYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZXhjZXB0aW9uLCAw
KSkgewotICAgICAgICBKU1ZhbHVlUmVmIGxpbmVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgZXhjZXB0aW9uT2JqZWN0LCBqc1N0cmluZ1JlZigibGluZSIpLmdldCgpLCBOVUxM
KTsKLSAgICAgICAgaWYgKGxpbmVWYWx1ZSkKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxpbmVWYWx1ZSwgMCkp
OwotCi0gICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBleGNlcHRpb25PYmplY3QsIGpzU3RyaW5nUmVmKCJzb3VyY2VVUkwiKS5nZXQoKSwg
TlVMTCk7Ci0gICAgICAgIGlmIChmaWxlVmFsdWUpCi0gICAgICAgICAgICBmaWxlID0gdG9TdHJp
bmcoY29udGV4dCwgZmlsZVZhbHVlLCAwKTsKLSAgICB9Ci0KLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGZpbGUpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKIC8vIEphdmFT
Y3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKIHsK
LSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24odG9KUyhtX3NjcmlwdENvbnRleHQpLCB0
b0pTKG1fc2NyaXB0T2JqZWN0KSwgInBhcnNlZFNjcmlwdFNvdXJjZSIpOworICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInBhcnNl
ZFNjcmlwdFNvdXJjZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoc291cmNlLmRhdGEoKSk7CkBAIC0xNTI2LDcgKzE0MzAsNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNl
U291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGlu
ZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmplY3QpLCAi
ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImZhaWxlZFRvUGFyc2VTY3JpcHRT
b3VyY2UiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+
dXJsKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5kYXRhKCkpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExpbmUoKSk7CkBAIC0xNTM3LDcg
KzE0NDEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2Uo
RXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cgogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFBhdXNlKCkKIHsKLSAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250
ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBhdXNlZFNjcmlwdCIpOworICAgIGNhbGxTaW1wbGVGdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInBhdXNlZFNjcmlwdCIpOwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA2NTc1
NDMwLi5jODQ3ZThkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBA
IC0zMSw5ICszMSwxMSBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKwogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtMTkzLDkgKzE5NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIG1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdz
KTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCi0gICAgSlNDb250
ZXh0UmVmIHNjcmlwdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdENvbnRleHQ7IH07
Ci0gICAgdm9pZCBzZXRTY3JpcHRDb250ZXh0KEpTQ29udGV4dFJlZiBjb250ZXh0KSB7IG1fc2Ny
aXB0Q29udGV4dCA9IGNvbnRleHQ7IH07Ci0KICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1Njcmlw
dE9iamVjdENsZWFyZWQoRnJhbWUqKTsKICAgICB2b2lkIHdpbmRvd1NjcmlwdE9iamVjdEF2YWls
YWJsZSgpOwogCkBAIC0yNjcsNyArMjY2LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICB2b2lkIGZvY3VzTm9kZSgpOwog
Ci0gICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSosIENvbnNvbGVNZXNz
YWdlKik7CisgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSosIENvbnNvbGVN
ZXNzYWdlKik7CiAKICAgICB2b2lkIGFkZFJlc291cmNlKEluc3BlY3RvclJlc291cmNlKik7CiAg
ICAgdm9pZCByZW1vdmVSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSopOwpAQCAtMjc1LDggKzI3
NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVJlc291cmNlcyhSZXNvdXJjZXNNYXAqLCBE
b2N1bWVudExvYWRlciogbG9hZGVyVG9LZWVwID0gMCk7CiAgICAgdm9pZCByZW1vdmVBbGxSZXNv
dXJjZXMoUmVzb3VyY2VzTWFwKiBtYXApIHsgcHJ1bmVSZXNvdXJjZXMobWFwKTsgfQogCi0gICAg
Ym9vbCBoYW5kbGVFeGNlcHRpb24oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiwg
dW5zaWduZWQgbGluZU51bWJlcikgY29uc3Q7Ci0KICAgICB2b2lkIHNob3dXaW5kb3coKTsKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMzAzLDkgKzMwMCw4IEBAIHByaXZh
dGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQg
bV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2VuZGlmCi0gICAgSlNPYmplY3RSZWYgbV9zY3JpcHRP
YmplY3Q7Ci0gICAgSlNPYmplY3RSZWYgbV9jb250cm9sbGVyU2NyaXB0T2JqZWN0OwotICAgIEpT
Q29udGV4dFJlZiBtX3NjcmlwdENvbnRleHQ7CisgICAgU2NyaXB0T2JqZWN0IG1fd2ViSW5zcGVj
dG9yOworICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwogICAgIGJvb2wgbV93aW5kb3dW
aXNpYmxlOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wgbV9kZWJ1
Z2dlckVuYWJsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29314</attachid>
            <date>2009-04-07 11:25:57 -0700</date>
            <delta_ts>2009-04-07 11:29:20 -0700</delta_ts>
            <desc>Refactor InspectorController to use ScriptObject/State, v2</desc>
            <filename>Refactor-InspectorController-to-use-ScriptObject-State-v2.patch</filename>
            <type>text/plain</type>
            <size>47899</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">OTAxY2Q4NTU3ODUwODAxYmY2NTYzNzUxZTI3YTA2MGU1N2EwMTU3MApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmUyMDAwLi40ZjllNzNl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM4IEBACisyMDA5LTA0LTA3ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDYzCisgICAg
ICAgIFJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gdXNlIFNjcmlwdE9iamVjdC9TdGF0
ZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBTY3JpcHRTdGF0ZS5jcHAuCisg
ICAgICAgICogV2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDogRGl0dG8uCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZSk6
IEZpeGVkIGFyZ3VtZW50IGluZGV4IHR5cG8uCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6
Y2FsbCk6IEFkZGVkIHJlcG9ydEV4Y2VwdGlvbnMgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUV4Y2VwdGlvbik6
IEFkZGVkIGV4Y2VwdGlvbi1yZXBvcnRpbmcgaGVsb3Blci4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdE9iamVjdDo6c2V0KTogQ2hhbmdlZCB0byB1c2UgaGFuZGxlRXhjZXB0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOiBEaXR0bywKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwOiBBZGRlZCBTY3JpcHRHbG9iYWxPYmplY3QuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpnZXRPYmplY3QpOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDogQWRkZWQgU2NyaXB0R2xvYmFsT2JqZWN0
IGRlY2xzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpTY3JpcHRHbG9i
YWxPYmplY3QpOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHA6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFkZGVkIHNjcmlw
dFN0YXRlRnJvbVBhZ2UgZGVjbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZU1lc3NhZ2U6OmFkZFRvQ29uc29sZSk6IENo
YW5nZWQgdG8gbm90IHJlcG9ydCBleGNlcHRpb25zCisgICAgICAgICAgICB0byBhdm9pZCByZS1l
bnRyYW5jeS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJl
ZmFjdG9yZWQgdG8gdXNlIFNjcmlwdFN0YXRlL09iamVjdC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oOiBEaXR0by4KKwogMjAwOS0wNC0wNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGY4NThmMjIuLjk5OTdmNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMzc5LDYgKzM3
OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RR
dWFyYW50aW5lLmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oIFwK
KwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5o
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmYTZlZmFmLi5m
Zjg2ZDEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQ5OCw2ICs0OTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9q
cy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBcCisgICAg
YmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXAogICAgIGJyaWRn
ZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCBhYWI2MGQyLi4xNTMyMjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTE3NDE5LDYgKzE3NDE5LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdGF0ZS5jcHAi
DQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcU2NyaXB0U3RhdGUuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjgzYzQ5My4uNWJh
NDI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYx
OSw2ICs2MTksNyBAQAogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsK
IAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0IwRjY2RURF
RjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OwogCQk0MTAwMkNDRTBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBT
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OworCQk0MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUg
LyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsg
fTsKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyQTY4
NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwICovOyB9Owog
CQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCQzBFREY4RkQ3MDAz
NjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3NUJGMEVERjhGRDcwMDM2
MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxT
dGFjay5jcHAgKi87IH07CkBAIC01NTIxLDYgKzU1MjIsNyBAQAogCQkzN0Y4MThGQzBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25D
YWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2
MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMkE2ODQ2MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxT
dGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM1OSw2ICsxMzM2MSw3
IEBACiAJCQkJNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuaCAqLywKIAkJCQk5MzRDQzEwOTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29k
ZS5oICovLAogCQkJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICov
LAorCQkJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8sCiAJ
CQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkz
NENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0Mw
RTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBAIC0xODUzOSw2ICsxODU0
Miw3IEBACiAJCQkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMkE2ODQ3MEY2QjAzREQwMDBFQTY2
RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxMjdE
NTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
IGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggNmFjYWUyNy4uNDUyYjJmMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wKQEAgLTEyNiw2ICsxMjYsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxp
c3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGJpbmRpbmdzL2pz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcAorICAg
ICAgICBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApp
bmRleCBkZTY1ZWU1Li4wNzAyMmMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgSlNWYWx1
ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJhbWUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXMKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFk
ZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhl
YywgMSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJhbWUo
bWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMikpKSk7CiB9CiAK
IEpTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXggZGEzNDYxOS4uZjNmMzFjOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcApAQCAtMTAzLDcgKzEwMyw3
IEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChib29sIGFyZ3VtZW50
KQogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc0Jvb2xlYW4oYXJndW1lbnQpKTsKIH0KIAotU2Ny
aXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKK1Nj
cmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJv
b2wgcmVwb3J0RXhjZXB0aW9ucykKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhp
c09iamVjdC5qc09iamVjdCgpOwogCkBAIC0xMTEsNyArMTExLDkgQEAgU2NyaXB0VmFsdWUgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKIAogICAgIEpTVmFsdWVQ
dHIgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywg
bV9uYW1lKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgIGlmIChy
ZXBvcnRFeGNlcHRpb25zKQorICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9l
eGVjLT5leGNlcHRpb24oKSk7CisKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQpAQCAtMTIzLDcgKzEyNSw5IEBAIFNjcmlw
dFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCiAKICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y2FsbChtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzKTsKICAgICBpZiAobV9leGVjLT5o
YWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMt
PmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAg
ICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAg
ICBoYWRFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKICAg
ICB9CkBAIC0xMzcsNyArMTQxLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
YWxsKCkKICAgICByZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOwogfQogCi1TY3JpcHRPYmplY3Qg
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uKQorU2NyaXB0
T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwg
Ym9vbCByZXBvcnRFeGNlcHRpb25zKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90
aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKQEAgLTE0NSw3ICsxNDksOSBAQCBTY3JpcHRPYmplY3Qg
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uKQogCiAgICAg
SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmplY3QodGhpc09iamVjdC0+Z2V0KG1fZXhlYywg
SWRlbnRpZmllcihtX2V4ZWMsIG1fbmFtZSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlv
bigpKTsKKyAgICAgICAgaWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAgICByZXBvcnRF
eGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAgICBoYWRFeGNl
cHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiAgICAgfQpAQCAt
MTU3LDcgKzE2Myw5IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVj
dChib29sJiBoYWRFeGNlcHRpb24pCiAKICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y29u
c3RydWN0KG1fZXhlYywgY29uc3RydWN0b3IsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IG1fYXJndW1lbnRzKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAg
ICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
aWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVj
LCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOwog
ICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKaW5kZXggODFkMWY4ZS4uNmRmMjRjMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCkBAIC02MSwxNiArNjEsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCk7
CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoaW50KTsKICAgICAgICAgdm9pZCBhcHBlbmRB
cmd1bWVudChib29sKTsKLSAgICAgICAgU2NyaXB0VmFsdWUgY2FsbChib29sJiBoYWRFeGNlcHRp
b24pOworICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCBy
ZXBvcnRFeGNlcHRpb25zID0gdHJ1ZSk7CiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKLSAg
ICAgICAgU2NyaXB0T2JqZWN0IGNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pOworICAgICAg
ICBTY3JpcHRPYmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRF
eGNlcHRpb25zID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFNjcmlwdFN0YXRl
KiBtX2V4ZWM7CiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7CiAgICAgICAgIFN0
cmluZyBtX25hbWU7CiAgICAgICAgIEpTQzo6QXJnTGlzdCBtX2FyZ3VtZW50czsKLSAgICAgICAg
Ym9vbCBtX3F1YXJhbnRpbmVPYmplY3RzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAppbmRleCA2MDE5OGVmLi41YmM2YWY0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0luc3BlY3RvckNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CiAKQEAgLTU1LDEyICs1NiwyMSBAQCBTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiB9CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2Vw
dGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAgaWYgKCFzY3JpcHRTdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmVwb3J0RXhjZXB0
aW9uKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+ZXhjZXB0aW9uKCkpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAganNPYmplY3Qo
KS0+cHV0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwganNTdHJp
bmcoc2NyaXB0U3RhdGUsIHZhbHVlKSwgc2xvdCk7Ci0gICAgcmV0dXJuICFzY3JpcHRTdGF0ZS0+
aGFkRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CiB9CiAKIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQpAQCAtNjgsNyArNzgs
NyBAQCBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0TwogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUs
IElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpLCBzbG90KTsK
LSAgICByZXR1cm4gIXNjcmlwdFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gaGFu
ZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCkBAIC03Niw3ICs4Niw3IEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTdHJpbmcmCiAgICAgSlNM
b2NrIGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0
KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzU3Ry
aW5nKHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUt
PmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUp
OwogfQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQpAQCAtODQsNyArOTQsNyBAQCBib29sIFNj
cmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHZhbHVlKQogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpLCBqc051bWJlcihzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsK
LSAgICByZXR1cm4gIXNjcmlwdFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gaGFu
ZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGxvbmcgbG9uZyB2YWx1
ZSkKQEAgLTkyLDcgKzEwMiw3IEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBsb25nIGxvbmcgdmFsCiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0KCkt
PnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzTnVtYmVy
KHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhh
ZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwog
fQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQpAQCAtMTAwLDcgKzExMCw3IEBAIGJvb2wgU2NyaXB0
T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBp
bnQgdmFsdWUpCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90OwogICAgIGpzT2JqZWN0KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIGpzTnVtYmVyKHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJl
dHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKQEAgLTEwOCw3
ICsxMTgsMzYgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCiAgICAgSlNMb2NrIGxvY2soZmFsc2Up
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0KCktPnB1dChzY3JpcHRT
dGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzQm9vbGVhbih2YWx1ZSksIHNs
b3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVy
biBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOworfQorCitib29sIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKKyAgICByZXR1cm4gaGFuZGxl
RXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKK30KKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQoreworICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CisgICAgcmV0dXJuIGhhbmRs
ZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7Cit9CisKKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6
OmdldE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNj
cmlwdE9iamVjdCYgdmFsdWUpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTVmFs
dWVQdHIganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldChz
Y3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOworICAgIGlmICghanNW
YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gU2NyaXB0T2JqZWN0KGFz
T2JqZWN0KGpzVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKaW5kZXggNWQxNWZmMi4uZTViYmM5
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGlj
IFNjcmlwdFZhbHVlIHsKICAgICBwdWJsaWM6CkBAIC01NSw2ICs1NiwxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCk7CiAgICAgfTsKIAorICAgIGNsYXNzIFNjcmlwdEdsb2JhbE9iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNj
cmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQ29udHJvbGxlciopOworICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPYmplY3QoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBTY3JpcHRPYmplY3QmKTsKKyAgICBwcml2YXRlOgorICAgICAgICBTY3JpcHRHbG9iYWxPYmpl
Y3QoKSB7IH0KKyAgICB9OworCiB9CiAKICNlbmRpZiAvLyBTY3JpcHRPYmplY3RfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40YWU2YjRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
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
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0
YXRlLmgKaW5kZXggM2NjZTA5My4uMTk2MTVjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdGF0ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUu
aApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIFBhZ2U7CiAKICAgICAvLyBUaGUgaWRlYSBpcyB0byBleHBvc2UgInN0
YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlvbiwgYW5kIGFueSBvdGhlcgogICAgIC8vIG1l
dGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlwcyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6
RXhlY1N0YXRlIGFzIGEKQEAgLTQ0LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IC8vIEZvciBub3csIHRoZSBzZXBhcmF0aW9uIGlzIHB1cmVseSBieSBjb252ZW50aW9uLgogICAg
IHR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CiAKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGVGcm9tUGFnZShQYWdlKiBwYWdlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCmluZGV4IGIyYmYzOTAuLjQ4ZWUyMzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5jcHAKQEAgLTk1LDEzICs5NSwxMyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNv
bGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRPYmplY3QmCiAgICAgICAg
IG1lc3NhZ2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX21lc3NhZ2UpOwogCiAgICAgYm9v
bCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBTY3JpcHRPYmplY3QgbWVzc2FnZSA9IG1lc3Nh
Z2VDb25zdHJ1Y3Rvci5jb25zdHJ1Y3QoaGFkRXhjZXB0aW9uKTsKKyAgICBTY3JpcHRPYmplY3Qg
bWVzc2FnZSA9IG1lc3NhZ2VDb25zdHJ1Y3Rvci5jb25zdHJ1Y3QoaGFkRXhjZXB0aW9uLCBmYWxz
ZSk7CiAgICAgaWYgKGhhZEV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGFkZE1lc3NhZ2VUb0NvbnNvbGUoc2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rv
ciwgImFkZE1lc3NhZ2VUb0NvbnNvbGUiKTsKICAgICBhZGRNZXNzYWdlVG9Db25zb2xlLmFwcGVu
ZEFyZ3VtZW50KG1lc3NhZ2UpOwotICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUuY2FsbChoYWRFeGNl
cHRpb24pOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUuY2FsbChoYWRFeGNlcHRpb24sIGZhbHNl
KTsKIH0KIAogYm9vbCBDb25zb2xlTWVzc2FnZTo6aXNFcXVhbChTY3JpcHRTdGF0ZSogc3RhdGUs
IENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCmluZGV4IGQzODk2NzEuLjQzY2Y2NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1l
c3NhZ2UuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgpAQCAtNTMsMTIgKzUxLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgotI2luY2x1ZGUgIkpT
SW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCi0jaW5jbHVkZSAiSlNSYW5nZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCkBAIC03NiwxMyArNjgsOCBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxwcm9m
aWxlci9Qcm9maWxlLmg+CiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC05MSwxMyArNzgsMTEgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNp
bmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2UuaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKQEAgLTExMywyNyArOTgsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7CiAKLXN0YXRpYyBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmdSZWYoY29uc3QgY2hhciogc3RyKQorc3RhdGlj
IHZvaWQgY2FsbFNpbXBsZUZ1bmN0aW9uKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
U2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7Ci0g
ICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RyKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHRT
dHJpbmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlv
bikpOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBTdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHNjcmlw
dFN0cmluZy5nZXQoKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHNjcmlwdFN0cmluZy5nZXQoKSkpOwot
fQotCi0jZGVmaW5lIEhBTkRMRV9FWENFUFRJT04oY29udGV4dCwgZXhjZXB0aW9uKSBoYW5kbGVF
eGNlcHRpb24oKGNvbnRleHQpLCAoZXhjZXB0aW9uKSwgX19MSU5FX18pCi0KLXN0YXRpYyB2b2lk
IGNhbGxTaW1wbGVGdW5jdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih0b0pTKGNvbnRleHQpLCB0b0pTKHRoaXNPYmplY3QpLCBmdW5jdGlvbk5h
bWUpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgdGhpc09i
amVjdCwgZnVuY3Rpb25OYW1lKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKQEAgLTIwMyw5
ICsxNzAsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBh
Z2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3BhZ2UoMCkKLSAgICAsIG1fc2Ny
aXB0T2JqZWN0KDApCi0gICAgLCBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3QoMCkKLSAgICAsIG1f
c2NyaXB0Q29udGV4dCgwKQorICAgICwgbV9zY3JpcHRTdGF0ZSgwKQogICAgICwgbV93aW5kb3dW
aXNpYmxlKGZhbHNlKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9k
ZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCkBAIC0yMzEsMTggKzE5Niw4IEBAIEluc3BlY3RvckNvbnRy
b2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICBtX2NsaWVudC0+aW5zcGVjdG9y
RGVzdHJveWVkKCk7CiAKLSAgICBpZiAobV9zY3JpcHRDb250ZXh0KSB7Ci0gICAgICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLQotICAgICAgICBKU09iamVjdFJlZiBnbG9iYWwgPSBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QobV9zY3JpcHRDb250ZXh0KTsKLSAgICAgICAgSlNWYWx1ZVJl
ZiBjb250cm9sbGVyUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KG1fc2NyaXB0Q29udGV4
dCwgZ2xvYmFsLCBqc1N0cmluZ1JlZigiSW5zcGVjdG9yQ29udHJvbGxlciIpLmdldCgpLCAmZXhj
ZXB0aW9uKTsKLSAgICAgICAgaWYgKCFIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwg
ZXhjZXB0aW9uKSkgewotICAgICAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNvbnRyb2xsZXIgPSBK
U1ZhbHVlVG9PYmplY3QobV9zY3JpcHRDb250ZXh0LCBjb250cm9sbGVyUHJvcGVydHksICZleGNl
cHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0
Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcml2
YXRlKGNvbnRyb2xsZXIsIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAg
IGlmIChtX3NjcmlwdFN0YXRlKQorICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX3Nj
cmlwdFN0YXRlLCAiSW5zcGVjdG9yQ29udHJvbGxlciIsIFNjcmlwdE9iamVjdCgpKTsKIAogICAg
IGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxl
cigwKTsKQEAgLTM1Niw3ICszMTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3QoTm9kZSogbm9kZSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBt
X25vZGVUb0ZvY3VzID0gbm9kZTsKIAotICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICBp
ZiAobV93ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIG1fc2hvd0FmdGVyVmlz
aWJsZSA9IEVsZW1lbnRzUGFuZWw7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzAsMTUg
KzMyNSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZvY3VzTm9kZSgpCiAgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3NjcmlwdENvbnRl
eHQpOwotICAgIEFTU0VSVChtX3NjcmlwdE9iamVjdCk7CisgICAgQVNTRVJUKGhhc1dlYkluc3Bl
Y3RvcigpKTsKICAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7CiAKICAgICBTY3JpcHRPYmplY3Qg
cXVhcmFudGluZWROb2RlOwogICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QobV9u
b2RlVG9Gb2N1cy5nZXQoKSwgcXVhcmFudGluZWROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9K
UyhtX3NjcmlwdE9iamVjdCksICJ1cGRhdGVGb2N1c2VkTm9kZSIpOworICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInVwZGF0ZUZv
Y3VzZWROb2RlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocXVhcmFudGluZWROb2Rl
KTsKIAogICAgIG1fbm9kZVRvRm9jdXMgPSAwOwpAQCAtNDE1LDcgKzM2OSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0
YWNoZWQpCiAKICAgICBtX3dpbmRvd1Zpc2libGUgPSB2aXNpYmxlOwogCi0gICAgaWYgKCFtX3Nj
cmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghaGFzV2ViSW5zcGVjdG9y
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3dpbmRvd1Zpc2libGUpIHsKQEAgLTQ0
OSwxOCArNDAzLDE4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29u
c29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsCiAKIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVz
c2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKy8vICAgIGlmICghZW5hYmxlZCgpKQorLy8gICAgICAgIHJldHVybjsKIAog
ICAgIGFkZENvbnNvbGVNZXNzYWdlKDAsIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVs
LCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgbV9ncm91cExldmVsKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkQ29uc29sZU1lc3NhZ2UoRXhlY1N0YXRlKiBleGVj
LCBDb25zb2xlTWVzc2FnZSogY29uc29sZU1lc3NhZ2UpCit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgQ29uc29sZU1l
c3NhZ2UqIGNvbnNvbGVNZXNzYWdlKQogewogICAgIEFTU0VSVChlbmFibGVkKCkpOwogICAgIEFT
U0VSVF9BUkcoY29uc29sZU1lc3NhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKIAotICAgIGlmIChtX3By
ZXZpb3VzTWVzc2FnZSAmJiBtX3ByZXZpb3VzTWVzc2FnZS0+aXNFcXVhbChleGVjLCBjb25zb2xl
TWVzc2FnZSkpIHsKKyAgICBpZiAobV9wcmV2aW91c01lc3NhZ2UgJiYgbV9wcmV2aW91c01lc3Nh
Z2UtPmlzRXF1YWwoc2NyaXB0U3RhdGUsIGNvbnNvbGVNZXNzYWdlKSkgewogICAgICAgICBtX3By
ZXZpb3VzTWVzc2FnZS0+aW5jcmVtZW50Q291bnQoKTsKICAgICAgICAgZGVsZXRlIGNvbnNvbGVN
ZXNzYWdlOwogICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDIzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNz
YWdlKiBjb24KICAgICB9CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICBtX3By
ZXZpb3VzTWVzc2FnZS0+YWRkVG9Db25zb2xlKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0
T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIG1fcHJldmlvdXNNZXNzYWdl
LT5hZGRUb0NvbnNvbGUobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9y
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJDb25zb2xlTWVzc2FnZXMo
KQpAQCAtNDgyLDEwICs0MzYsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhckNv
bnNvbGVNZXNzYWdlcygpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dG9nZ2xlUmVjb3Jk
QnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpCiB7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQpCisg
ICAgaWYgKCFoYXNXZWJJbnNwZWN0b3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9KUyhtX3Njcmlw
dE9iamVjdCksICJzZXRSZWNvcmRpbmdQcm9maWxlIik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAic2V0UmVjb3JkaW5nUHJv
ZmlsZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGlzUHJvZmlsaW5nKTsKICAgICBm
dW5jdGlvbi5jYWxsKCk7CiB9CkBAIC01NDksMTAgKzUwMywxMCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRldGFjaFdpbmRvdygpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAh
bV9zY3JpcHRDb250ZXh0IHx8ICFtX3NjcmlwdE9iamVjdCkKKyAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhaGFzV2ViSW5zcGVjdG9yKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmpl
Y3QpLCAic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRBdHRhY2hlZFdpbmRvdyIpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGF0dGFjaGVkKTsKICAgICBmdW5jdGlvbi5jYWxs
KCk7CiB9CkBAIC02MDAsMTQgKzU1NCwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omhh
bmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSogbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9zY3JpcHRDb250ZXh0IHx8ICFtX3NjcmlwdE9iamVj
dCkKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhaGFzV2ViSW5zcGVjdG9yKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFNjcmlwdE9iamVjdCBkb21XaW5kb3c7CiAgICAgaWYgKCFnZXRRdWFyYW50
aW5lZFNjcmlwdE9iamVjdChmcmFtZS0+ZG9tV2luZG93KCksIGRvbVdpbmRvdykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0
Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmplY3QpLCAiaW5zcGVjdGVkV2luZG93Q2xlYXJlZCIp
OworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYklu
c3BlY3RvciwgImluc3BlY3RlZFdpbmRvd0NsZWFyZWQiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChkb21XaW5kb3cpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KQEAgLTYyMCw0MiAr
NTc0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0QXZh
aWxhYmxlKCkKICAgICAvLyBHcmFudCB0aGUgaW5zcGVjdG9yIHRoZSBhYmlsaXR5IHRvIHNjcmlw
dCB0aGUgaW5zcGVjdGVkIHBhZ2UuCiAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKIAotICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBjbGVhbmVkIHVwLiBBUEkgTWl4LXVwLgotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7Ci0gICAgbV9zY3JpcHRDb250ZXh0ID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNWYWx1ZVB0
ciBqc0luc3BlY3RvciA9IHRvSlMoZXhlYywgdGhpcyk7Ci0gICAgbV9jb250cm9sbGVyU2NyaXB0
T2JqZWN0ID0gdG9SZWYoYXNPYmplY3QoanNJbnNwZWN0b3IpKTsKLSAgICBnbG9iYWxPYmplY3Qt
PnB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJJbnNwZWN0b3JDb250cm9sbGVyIiksIGpzSW5z
cGVjdG9yKTsKKyAgICBtX3NjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShtX3BhZ2Up
OworICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fc2NyaXB0U3RhdGUsICJJbnNwZWN0b3JD
b250cm9sbGVyIiwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0
T2JqZWN0UmVhZHkoKQogewotICAgIEFTU0VSVChtX3NjcmlwdENvbnRleHQpOwotICAgIGlmICgh
bV9zY3JpcHRDb250ZXh0KQorICAgIEFTU0VSVChtX3NjcmlwdFN0YXRlKTsKKyAgICBpZiAoIW1f
c2NyaXB0U3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTT2JqZWN0UmVmIGdsb2JhbCA9
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChtX3NjcmlwdENvbnRleHQpOwotICAgIEFTU0VSVChn
bG9iYWwpOwotCi0gICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgSlNWYWx1ZVJl
ZiBpbnNwZWN0b3JWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCBn
bG9iYWwsIGpzU3RyaW5nUmVmKCJXZWJJbnNwZWN0b3IiKS5nZXQoKSwgJmV4Y2VwdGlvbik7Ci0g
ICAgaWYgKEhBTkRMRV9FWENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQorICAg
IGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXRPYmplY3QobV9zY3JpcHRTdGF0ZSwgIldlYklu
c3BlY3RvciIsIG1fd2ViSW5zcGVjdG9yKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJU
KGluc3BlY3RvclZhbHVlKTsKLSAgICBpZiAoIWluc3BlY3RvclZhbHVlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3NjcmlwdE9iamVjdCA9IEpTVmFsdWVUb09iamVjdChtX3NjcmlwdENvbnRl
eHQsIGluc3BlY3RvclZhbHVlLCAmZXhjZXB0aW9uKTsKLSAgICBpZiAoSEFORExFX0VYQ0VQVElP
TihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChtX3NjcmlwdE9iamVjdCk7Ci0KLSAgICBKU1ZhbHVlUHJvdGVjdChtX3NjcmlwdENvbnRl
eHQsIG1fc2NyaXB0T2JqZWN0KTsKLQogICAgIC8vIE1ha2Ugc3VyZSBvdXIgd2luZG93IGlzIHZp
c2libGUgbm93IHRoYXQgdGhlIHBhZ2UgbG9hZGVkCiAgICAgc2hvd1dpbmRvdygpOwogfQpAQCAt
Njg1LDcgKzYxNiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKFNwZWNp
YWxQYW5lbHMgcGFuZWwpCiAKICAgICBzaG93KCk7CiAKLSAgICBpZiAoIW1fc2NyaXB0T2JqZWN0
KSB7CisgICAgaWYgKG1fd2ViSW5zcGVjdG9yLmhhc05vVmFsdWUoKSkgewogICAgICAgICBtX3No
b3dBZnRlclZpc2libGUgPSBwYW5lbDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcxOSw3
ICs2NTAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChTcGVjaWFsUGFu
ZWxzIHBhbmVsKQogICAgIH0KIAogICAgIGlmIChzaG93RnVuY3Rpb25OYW1lKQotICAgICAgICBj
YWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgc2hvd0Z1
bmN0aW9uTmFtZSk7CisgICAgICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3Rvciwgc2hvd0Z1bmN0aW9uTmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Y2xvc2UoKQpAQCAtNzMzLDExICs2NjQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmNsb3NlKCkKICNlbmRpZgogICAgIGNsb3NlV2luZG93KCk7CiAKLSAgICBpZiAobV9z
Y3JpcHRDb250ZXh0ICYmIG1fc2NyaXB0T2JqZWN0KQotICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0
KG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QpOwotCi0gICAgbV9zY3JpcHRPYmplY3Qg
PSAwOwotICAgIG1fc2NyaXB0Q29udGV4dCA9IDA7CisgICAgbV93ZWJJbnNwZWN0b3IgPSBTY3Jp
cHRPYmplY3QoKTsKKyAgICBtX3NjcmlwdFN0YXRlID0gMDsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzaG93V2luZG93KCkKQEAgLTc3Myw4ICs3MDEsOCBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyhUaW1lcjxJbnNwZWN0b3JD
b250cm9sbGVyPgogICAgIHRpdGxlICs9ICIuIjsKICAgICB0aXRsZSArPSBVU3RyaW5nOjpmcm9t
KG1fY3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKTsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RhcnRQcm9maWxpbmcoZXhlYywg
dGl0bGUpOworICAgIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgUHJvZmlsZXI6OnBy
b2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKHNjcmlwdFN0YXRlLCB0aXRsZSk7CiAKICAgICB0b2dn
bGVSZWNvcmRCdXR0b24odHJ1ZSk7CiB9CkBAIC03OTAsOCArNzE4LDggQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpCiAgICAgdGl0bGUgKz0g
Ii4iOwogICAgIHRpdGxlICs9IFVTdHJpbmc6OmZyb20obV9jdXJyZW50VXNlckluaXRpYXRlZFBy
b2ZpbGVOdW1iZXIpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdpbmRvdyhtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKS0+Z2xvYmFsRXhlYygpOwotICAgIFJlZlB0cjxQcm9m
aWxlPiBwcm9maWxlID0gUHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0b3BQcm9maWxpbmcoZXhlYywg
dGl0bGUpOworICAgIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5z
cGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgUmVmUHRyPFByb2Zp
bGU+IHByb2ZpbGUgPSBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhzY3JpcHRT
dGF0ZSwgdGl0bGUpOwogICAgIGlmIChwcm9maWxlKQogICAgICAgICBhZGRQcm9maWxlKHByb2Zp
bGUsIDAsIFVTdHJpbmcoKSk7CiAKQEAgLTgwOCw4ICs3MzYsOCBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgc2tpcFJlY29tcGlsZSkKICAgICBpZiAoIXNr
aXBSZWNvbXBpbGUpCiAgICAgICAgIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVj
b21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CiAKLSAgICBpZiAobV9zY3JpcHRDb250ZXh0ICYm
IG1fc2NyaXB0T2JqZWN0KQotICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250
ZXh0LCBtX3NjcmlwdE9iamVjdCwgInByb2ZpbGVyV2FzRW5hYmxlZCIpOworICAgIGlmIChoYXNX
ZWJJbnNwZWN0b3IoKSkKKyAgICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUs
IG1fd2ViSW5zcGVjdG9yLCAicHJvZmlsZXJXYXNFbmFibGVkIik7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkKQEAgLTgyMSw1NSArNzQ5LDU1IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKCkKIAogICAgIEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVjb21waWxlQWxsSlNGdW5jdGlvbnNTb29uKCk7CiAK
LSAgICBpZiAobV9zY3JpcHRDb250ZXh0ICYmIG1fc2NyaXB0T2JqZWN0KQotICAgICAgICBjYWxs
U2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInByb2ZpbGVy
V2FzRGlzYWJsZWQiKTsKKyAgICBpZiAoaGFzV2ViSW5zcGVjdG9yKCkpCisgICAgICAgIGNhbGxT
aW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInByb2ZpbGVyV2Fz
RGlzYWJsZWQiKTsKIH0KIAogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cygpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7Ci0gICAgaWYgKCFt
X3NjcmlwdENvbnRleHQpCisgICAgQVNTRVJUKG1fc2NyaXB0U3RhdGUpOworICAgIGlmICghbV9z
Y3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKICAgICBmb3IgKFJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7
ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmNyZWF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2Ny
aXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAg
ICBpdC0+c2Vjb25kLT5jcmVhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2Jq
ZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiAKICAgICB1bnNpZ25lZCBtZXNzYWdlQ291bnQgPSBtX2Nv
bnNvbGVNZXNzYWdlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1lc3Nh
Z2VDb3VudDsgKytpKQotICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRkVG9Db25zb2xl
KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3Qp
KSk7CisgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0NvbnNvbGUobV9zY3JpcHRT
dGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc1NldDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
c0VuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmJpbmQodG9KUyhtX3NjcmlwdENvbnRleHQpLCBT
Y3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgKCppdCktPmJpbmQo
bV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0
b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQoKTsKICAgICBmb3Ig
KERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5i
aW5kKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmpl
Y3QpKSk7CisgICAgICAgICgqaXQpLT5iaW5kKG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdCht
X3dlYkluc3BlY3RvcikpOwogI2VuZGlmCiAKLSAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3Jp
cHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBvcHVsYXRlSW50ZXJmYWNlIik7CisgICAgY2Fs
bFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAicG9wdWxhdGVJ
bnRlcmZhY2UiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3JpcHRQcm9m
aWxlKFByb2ZpbGUqIHByb2ZpbGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9KUyhtX3NjcmlwdE9iamVjdCksICJhZGRQcm9maWxl
Iik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2Vi
SW5zcGVjdG9yLCAiYWRkUHJvZmlsZSIpOwogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCh0b0pTKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgcHJvZmls
ZSkpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHRvSlMobV9zY3JpcHRTdGF0ZSwgcHJv
ZmlsZSkpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpyZXNldFNjcmlwdE9iamVjdHMoKQogewotICAgIGlmICghbV9zY3JpcHRDb250ZXh0IHx8
ICFtX3NjcmlwdE9iamVjdCkKKyAgICBpZiAoIWhhc1dlYkluc3BlY3RvcigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9IG1fcmVz
b3VyY2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC0+cmVsZWFzZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9i
amVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSksIGZhbHNlKTsKKyAgICAgICAgaXQtPnNlY29uZC0+
cmVsZWFzZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNw
ZWN0b3IpLCBmYWxzZSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2VSZXNv
dXJjZXNTZXQ6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5k
KCk7CkBAIC04ODIsNyArODEwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNldFNj
cmlwdE9iamVjdHMoKQogICAgICAgICAoKml0KS0+dW5iaW5kKCk7CiAjZW5kaWYKIAotICAgIGNh
bGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAicmVzZXQi
KTsKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3Is
ICJyZXNldCIpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBydW5lUmVzb3VyY2Vz
KFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAsIERvY3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXAp
CkBAIC04OTksNyArODI3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcnVuZVJlc291
cmNlcyhSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFwLCBEb2N1bWVudExvYWQKICAgICAgICAgaWYg
KCFsb2FkZXJUb0tlZXAgfHwgIXJlc291cmNlLT5pc1NhbWVMb2FkZXIobG9hZGVyVG9LZWVwKSkg
ewogICAgICAgICAgICAgcmVtb3ZlUmVzb3VyY2UocmVzb3VyY2UpOwogICAgICAgICAgICAgaWYg
KHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVsZWFzZVNjcmlw
dE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0
T2JqZWN0KSksIHRydWUpOworICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZWxlYXNlU2NyaXB0
T2JqZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYkluc3BlY3RvciksIHRydWUp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtOTM1LDcgKzg2Myw3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgbWFpbiByZXNvdXJjZSB1bnRpbCBpdHMgbG9h
ZCBpcyBjb21taXR0ZWQuIFRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBuZWVkZWQgdG8ga2Vl
cCB0aGUgbG9hZCBmb3IgYSB1c2VyLWVudGVyZWQgVVJMIGZyb20gc2hvd2luZyB1cCBpbiB0aGUK
ICAgICAgICAgICAgICAgICAvLyBsaXN0IG9mIHJlc291cmNlcyBmb3IgdGhlIHBhZ2UgdGhleSBh
cmUgbmF2aWdhdGluZyBhd2F5IGZyb20uCi0gICAgICAgICAgICAgICAgbV9tYWluUmVzb3VyY2Ut
PmNyZWF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0
b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICAgICAgICAgIG1fbWFpblJlc291cmNlLT5j
cmVhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVj
dG9yKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFBhZ2VzIGxv
YWRlZCBmcm9tIHRoZSBwYWdlIGNhY2hlIGFyZSBjb21taXR0ZWQgYmVmb3JlCiAgICAgICAgICAg
ICAgICAgLy8gbV9tYWluUmVzb3VyY2UgaXMgdGhlIHJpZ2h0IHJlc291cmNlIGZvciB0aGlzIGxv
YWQsIHNvIHdlCkBAIC0xMDE1LDcgKzk0Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCiAg
ICAgYWRkUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCiAgICAgaWYgKHdpbmRvd1Zpc2libGUo
KSkKLSAgICAgICAgcmVzb3VyY2UtPmNyZWF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29u
dGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICByZXNv
dXJjZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dl
Ykluc3BlY3RvcikpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJG
b3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVy
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTEwMzcsNyArOTY1
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAogICAgIGFkZFJlc291cmNlKHJlc291cmNlLmdl
dCgpKTsKIAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkgJiYgbG9hZGVyLT5pc0xvYWRpbmdGcm9t
Q2FjaGVkUGFnZSgpICYmIHJlc291cmNlID09IG1fbWFpblJlc291cmNlKQotICAgICAgICByZXNv
dXJjZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3Jp
cHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCkBAIC0xMDU3LDcgKzk4
NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmCiAgICAgfQogCiAgICAgaWYgKHJlc291cmNl
ICE9IG1fbWFpblJlc291cmNlICYmIHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgcmVzb3VyY2Ut
PmNyZWF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0
b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICByZXNvdXJjZS0+Y3JlYXRlU2NyaXB0T2Jq
ZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYkluc3BlY3RvcikpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCkBAIC0xMDczLDcgKzEwMDEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbgogICAg
IHJlc291cmNlLT5tYXJrUmVzcG9uc2VSZWNlaXZlZFRpbWUoKTsKIAogICAgIGlmICh3aW5kb3dW
aXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QodG9KUyhtX3Nj
cmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdChtX3Nj
cmlwdFN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRSZWNlaXZlQ29u
dGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50
IGxlbmd0aFJlY2VpdmVkKQpAQCAtMTA4OCw3ICsxMDE2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcKICAgICByZXNvdXJjZS0+YWRkTGVuZ3RoKGxlbmd0aFJlY2VpdmVkKTsKIAogICAgIGlm
ICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3Qo
dG9KUyhtX3NjcmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9i
amVjdChtX3NjcmlwdFN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRG
aW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQpA
QCAtMTEwNyw3ICsxMDM1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGaW5pc2hM
b2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGkKICAgICBhZGRSZXNv
dXJjZShyZXNvdXJjZS5nZXQoKSk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAg
ICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7Cisg
ICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIC8qZXJyb3Iq
LykKQEAgLTExMjcsNyArMTA1NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFp
bExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpCiAgICAgYWRk
UmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCiAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKLSAg
ICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCkp
OworICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRw
UmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFNjcmlwdFN0cmluZyYgc291
cmNlU3RyaW5nKQpAQCAtMTE0Miw3ICsxMDcwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGkK
ICAgICByZXNvdXJjZS0+c2V0WE1MSHR0cFJlc3BvbnNlVGV4dChzb3VyY2VTdHJpbmcpOwogCiAg
ICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9i
amVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCkpOworICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2Ny
aXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VTdHJpbmcpCkBAIC0xMTU5LDcgKzEwODcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNjcmlwdEltcG9ydGVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JgogICAgIHJlc291cmNlLT5zZXRYTUxIdHRwUmVzcG9uc2VUZXh0KFNjcmlwdFN0cmluZyhzb3Vy
Y2VTdHJpbmcpKTsKICAgICAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNv
dXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7CisgICAgICAg
IHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSk7CiB9CiAKIApAQCAt
MTE3NCw3ICsxMTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRPcGVuRGF0YWJh
c2UoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWEKICAgICBtX2RhdGFiYXNl
UmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAg
ICAgICByZXNvdXJjZS0+YmluZCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0
b0pTKG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICByZXNvdXJjZS0+YmluZChtX3NjcmlwdFN0
YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKIH0KICNlbmRpZgogCkBAIC0xMTk0
LDcgKzExMjIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2Uo
U3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYQogCiAgICAgbV9kb21TdG9yYWdl
UmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CiAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKLSAgICAg
ICAgcmVzb3VyY2UtPmJpbmQodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9K
UyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgcmVzb3VyY2UtPmJpbmQobV9zY3JpcHRTdGF0
ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9CiAjZW5kaWYKIApAQCAtMTIxNCw3
ICsxMTQyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcigpCiAg
ICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9zY3JpcHRD
b250ZXh0IHx8ICFtX3NjcmlwdE9iamVjdCkgeworICAgIGlmICghbV9zY3JpcHRTdGF0ZSB8fCBt
X3dlYkluc3BlY3Rvci5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldo
ZW5TaG93biA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjI3LDcgKzExNTUs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyKCkKICAgICBtX2Rl
YnVnZ2VyRW5hYmxlZCA9IHRydWU7CiAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGZh
bHNlOwogCi0gICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRP
YmplY3QsICJkZWJ1Z2dlcldhc0VuYWJsZWQiKTsKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9z
Y3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkZWJ1Z2dlcldhc0VuYWJsZWQiKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoKQpAQCAtMTI0Miw4ICsx
MTcwLDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoKQogICAg
IG1fZGVidWdnZXJFbmFibGVkID0gZmFsc2U7CiAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
biA9IGZhbHNlOwogCi0gICAgaWYgKG1fc2NyaXB0Q29udGV4dCAmJiBtX3NjcmlwdE9iamVjdCkK
LSAgICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmpl
Y3QsICJkZWJ1Z2dlcldhc0Rpc2FibGVkIik7CisgICAgaWYgKGhhc1dlYkluc3BlY3RvcigpKQor
ICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3Is
ICJkZWJ1Z2dlcldhc0Rpc2FibGVkIik7CiB9CiAKIEphdmFTY3JpcHRDYWxsRnJhbWUqIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmN1cnJlbnRDYWxsRnJhbWUoKSBjb25zdApAQCAtMTQ4NSwzOCArMTQx
MywxMyBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5n
JiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElu
c3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZUV4Y2VwdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiBleGNlcHRpb24sIHVuc2lnbmVkIGxpbmVOdW1iZXIpIGNvbnN0Ci17Ci0gICAg
aWYgKCFleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gdG9TdHJpbmco
Y29udGV4dCwgZXhjZXB0aW9uLCAwKTsKLSAgICBTdHJpbmcgZmlsZShfX0ZJTEVfXyk7Ci0KLSAg
ICBpZiAoSlNPYmplY3RSZWYgZXhjZXB0aW9uT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGV4Y2VwdGlvbiwgMCkpIHsKLSAgICAgICAgSlNWYWx1ZVJlZiBsaW5lVmFsdWUgPSBKU09i
amVjdEdldFByb3BlcnR5KGNvbnRleHQsIGV4Y2VwdGlvbk9iamVjdCwganNTdHJpbmdSZWYoImxp
bmUiKS5nZXQoKSwgTlVMTCk7Ci0gICAgICAgIGlmIChsaW5lVmFsdWUpCi0gICAgICAgICAgICBs
aW5lTnVtYmVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBsaW5lVmFsdWUsIDApKTsKLQotICAgICAgICBKU1ZhbHVlUmVmIGZpbGVWYWx1ZSA9IEpTT2Jq
ZWN0R2V0UHJvcGVydHkoY29udGV4dCwgZXhjZXB0aW9uT2JqZWN0LCBqc1N0cmluZ1JlZigic291
cmNlVVJMIikuZ2V0KCksIE5VTEwpOwotICAgICAgICBpZiAoZmlsZVZhbHVlKQotICAgICAgICAg
ICAgZmlsZSA9IHRvU3RyaW5nKGNvbnRleHQsIGZpbGVWYWx1ZSwgMCk7Ci0gICAgfQotCi0gICAg
bV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShK
U01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBm
aWxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogCiAvLyBKYXZhU2NyaXB0RGVidWdMaXN0ZW5lciBmdW5jdGlvbnMKIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9z
Y3JpcHRDb250ZXh0KSwgdG9KUyhtX3NjcmlwdE9iamVjdCksICJwYXJzZWRTY3JpcHRTb3VyY2Ui
KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJ
bnNwZWN0b3IsICJwYXJzZWRTY3JpcHRTb3VyY2UiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudChzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCkpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5kYXRhKCkpOwpAQCAtMTUyNiw3ICsx
NDI5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXJzZVNvdXJjZShFeGVjU3Rh
dGUqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZmFpbGVkVG9QYXJzZVNvdXJjZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIGludCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24odG9KUyhtX3NjcmlwdENvbnRleHQpLCB0b0pTKG1f
c2NyaXB0T2JqZWN0KSwgImZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UiKTsKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJmYWls
ZWRUb1BhcnNlU2NyaXB0U291cmNlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291
cmNlLnByb3ZpZGVyKCktPnVybCgpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3Vy
Y2UuZGF0YSgpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UuZmlyc3RMaW5l
KCkpOwpAQCAtMTUzNyw3ICsxNDQwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWls
ZWRUb1BhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXIKIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgpCiB7Ci0gICAgY2FsbFNpbXBsZUZ1bmN0
aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJwYXVzZWRTY3JpcHQiKTsKKyAg
ICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJwYXVz
ZWRTY3JpcHQiKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKaW5kZXggNjU3NTQzMC4uYzFlN2NiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaApAQCAtMzEsOSArMzEsMTEgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgor
I2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTE5Myw5ICsxOTUsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWdu
ZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9pZCBoYW5kbGVNb3VzZVByZXNzT25Ob2RlKE5vZGUq
KTsKIAotICAgIEpTQ29udGV4dFJlZiBzY3JpcHRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JpcHRDb250ZXh0OyB9OwotICAgIHZvaWQgc2V0U2NyaXB0Q29udGV4dChKU0NvbnRleHRSZWYg
Y29udGV4dCkgeyBtX3NjcmlwdENvbnRleHQgPSBjb250ZXh0OyB9OwotCiAgICAgdm9pZCBpbnNw
ZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKik7CiAgICAgdm9pZCB3aW5kb3dT
Y3JpcHRPYmplY3RBdmFpbGFibGUoKTsKIApAQCAtMjY1LDkgKzI2NCwxMCBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50
Kik7CisgICAgYm9vbCBoYXNXZWJJbnNwZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdFN0
YXRlICYmICFtX3dlYkluc3BlY3Rvci5oYXNOb1ZhbHVlKCk7IH0KICAgICB2b2lkIGZvY3VzTm9k
ZSgpOwogCi0gICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSosIENvbnNv
bGVNZXNzYWdlKik7CisgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSosIENv
bnNvbGVNZXNzYWdlKik7CiAKICAgICB2b2lkIGFkZFJlc291cmNlKEluc3BlY3RvclJlc291cmNl
Kik7CiAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShJbnNwZWN0b3JSZXNvdXJjZSopOwpAQCAtMjc1
LDggKzI3NSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVJlc291cmNlcyhSZXNvdXJjZXNN
YXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVyVG9LZWVwID0gMCk7CiAgICAgdm9pZCByZW1vdmVB
bGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBtYXApIHsgcHJ1bmVSZXNvdXJjZXMobWFwKTsgfQog
Ci0gICAgYm9vbCBoYW5kbGVFeGNlcHRpb24oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3Q7Ci0KICAgICB2b2lkIHNob3dXaW5kb3co
KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpAQCAtMzAzLDkgKzMwMSw4IEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJj
ZXNTZXQgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2VuZGlmCi0gICAgSlNPYmplY3RSZWYgbV9z
Y3JpcHRPYmplY3Q7Ci0gICAgSlNPYmplY3RSZWYgbV9jb250cm9sbGVyU2NyaXB0T2JqZWN0Owot
ICAgIEpTQ29udGV4dFJlZiBtX3NjcmlwdENvbnRleHQ7CisgICAgU2NyaXB0T2JqZWN0IG1fd2Vi
SW5zcGVjdG9yOworICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwogICAgIGJvb2wgbV93
aW5kb3dWaXNpYmxlOwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGJvb2wg
bV9kZWJ1Z2dlckVuYWJsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29315</attachid>
            <date>2009-04-07 11:35:07 -0700</date>
            <delta_ts>2009-04-07 15:34:39 -0700</delta_ts>
            <desc>Refactor InspectorController to use ScriptObject/State, v2.1</desc>
            <filename>Refactor-InspectorController-to-use-ScriptObject-State-v2.1.patch</filename>
            <type>text/plain</type>
            <size>47655</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">MmQxYzgwZGU1MzFlOTA3NDExMjFkNWM1YjQ5M2MzYzkwZTQ3OTg3NgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmUyMDAwLi40ZjllNzNl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM4IEBACisyMDA5LTA0LTA3ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDYzCisgICAg
ICAgIFJlZmFjdG9yIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gdXNlIFNjcmlwdE9iamVjdC9TdGF0
ZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGRlZCBTY3JpcHRTdGF0ZS5jcHAuCisg
ICAgICAgICogV2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDogRGl0dG8uCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU291cmNlVG9GcmFtZSk6
IEZpeGVkIGFyZ3VtZW50IGluZGV4IHR5cG8uCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6
Y2FsbCk6IEFkZGVkIHJlcG9ydEV4Y2VwdGlvbnMgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mv
anMvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUV4Y2VwdGlvbik6
IEFkZGVkIGV4Y2VwdGlvbi1yZXBvcnRpbmcgaGVsb3Blci4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdE9iamVjdDo6c2V0KTogQ2hhbmdlZCB0byB1c2UgaGFuZGxlRXhjZXB0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOiBEaXR0bywKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwOiBBZGRlZCBTY3JpcHRHbG9iYWxPYmplY3QuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpnZXRPYmplY3QpOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaDogQWRkZWQgU2NyaXB0R2xvYmFsT2JqZWN0
IGRlY2xzLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpTY3JpcHRHbG9i
YWxPYmplY3QpOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHA6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFkZGVkIHNjcmlw
dFN0YXRlRnJvbVBhZ2UgZGVjbC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZU1lc3NhZ2U6OmFkZFRvQ29uc29sZSk6IENo
YW5nZWQgdG8gbm90IHJlcG9ydCBleGNlcHRpb25zCisgICAgICAgICAgICB0byBhdm9pZCByZS1l
bnRyYW5jeS4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJl
ZmFjdG9yZWQgdG8gdXNlIFNjcmlwdFN0YXRlL09iamVjdC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oOiBEaXR0by4KKwogMjAwOS0wNC0wNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGY4NThmMjIuLjk5OTdmNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMzc5LDYgKzM3
OSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RR
dWFyYW50aW5lLmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlQ29kZS5oIFwK
KwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdGF0ZS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5o
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmYTZlZmFmLi5m
Zjg2ZDEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQ5OCw2ICs0OTgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9q
cy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBcCisgICAg
YmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXAogICAgIGJyaWRn
ZS9JZGVudGlmaWVyUmVwLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCBhYWI2MGQyLi4xNTMyMjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTE3NDE5LDYgKzE3NDE5LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdGF0ZS5jcHAi
DQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcU2NyaXB0U3RhdGUuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjgzYzQ5My4uNWJh
NDI3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYx
OSw2ICs2MTksNyBAQAogCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsK
IAkJNDEwMDJDQ0QwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEwMDJDQ0IwRjY2RURF
RjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovOyB9OwogCQk0MTAwMkNDRTBGNjZF
REVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMDAyQ0NDMEY2NkVERUYwMDlFNjYwRCAvKiBT
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwICovOyB9OworCQk0MTI3RDUzNzBGOEFBQjFEMDBFNDI0RjUg
LyogU2NyaXB0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDEyN0Q1MzYwRjhBQUIxRDAwRTQyNEY1IC8qIFNjcmlwdFN0YXRlLmNwcCAqLzsg
fTsKIAkJNDEyQTY4NDcwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyQTY4
NDYwRjZCMDNERDAwMEVBNjZFIC8qIFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwICovOyB9Owog
CQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCQzBFREY4RkQ3MDAz
NjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi87IH07CiAJCTQxNkU3NUJGMEVERjhGRDcwMDM2
MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkQwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxT
dGFjay5jcHAgKi87IH07CkBAIC01NTIxLDYgKzU1MjIsNyBAQAogCQkzN0Y4MThGQzBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTAwMkNDQjBGNjZFREVGMDA5RTY2MEQgLyogU2NyaXB0RnVuY3Rpb25D
YWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTAwMkNDQzBGNjZFREVGMDA5RTY2
MEQgLyogU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGF0ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMkE2ODQ2MEY2QjAzREQwMDBFQTY2RSAvKiBTY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxT
dGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM1OSw2ICsxMzM2MSw3
IEBACiAJCQkJNDE5NTM2NTAwRjY4MjIyNDAwRDBDNjc5IC8qIFNjcmlwdE9iamVjdFF1YXJhbnRp
bmUuaCAqLywKIAkJCQk5MzRDQzEwOTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29k
ZS5oICovLAogCQkJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICov
LAorCQkJCTQxMjdENTM2MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgKi8sCiAJ
CQkJNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovLAogCQkJCTkz
NENDMERGMEVEMzlENkYwMEE2NThGMiAvKiBTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJOTM0Q0Mw
RTAwRUQzOUQ2RjAwQTY1OEYyIC8qIFNjcmlwdFZhbHVlLmggKi8sCkBAIC0xODUzOSw2ICsxODU0
Miw3IEBACiAJCQkJNDEwMDJDQ0UwRjY2RURFRjAwOUU2NjBEIC8qIFNjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjZFNTBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxMkE2ODQ3MEY2QjAzREQwMDBFQTY2
RSAvKiBTY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxMjdE
NTM3MEY4QUFCMUQwMEU0MjRGNSAvKiBTY3JpcHRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzRDQzBFMTBFRDM5RDZGMDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM1MzY3NkIwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdNYWMu
bW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmts
IGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKaW5kZXggNmFjYWUyNy4uNDUyYjJmMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
U291cmNlcy5ia2wKQEAgLTEyNiw2ICsxMjYsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxp
c3Qgb2YgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIGJpbmRpbmdzL2pz
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
LmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcAorICAg
ICAgICBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKICAg
ICAgICAgYmluZGluZ3MvanMvSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcApp
bmRleCBkZTY1ZWU1Li4wNzAyMmMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgSlNWYWx1
ZVB0ciBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJhbWUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXMKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFk
ZFNvdXJjZVRvRnJhbWUobWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhl
YywgMSkpKSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJhbWUo
bWltZVR5cGUsIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoZXhlYywgMikpKSk7CiB9CiAK
IEpTVmFsdWVQdHIgSlNJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRSZXNvdXJjZURvY3VtZW50Tm9k
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXggZGEzNDYxOS4uZjNmMzFjOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcApAQCAtMTAzLDcgKzEwMyw3
IEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChib29sIGFyZ3VtZW50
KQogICAgIG1fYXJndW1lbnRzLmFwcGVuZChqc0Jvb2xlYW4oYXJndW1lbnQpKTsKIH0KIAotU2Ny
aXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKK1Nj
cmlwdFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJv
b2wgcmVwb3J0RXhjZXB0aW9ucykKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhp
c09iamVjdC5qc09iamVjdCgpOwogCkBAIC0xMTEsNyArMTExLDkgQEAgU2NyaXB0VmFsdWUgU2Ny
aXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbikKIAogICAgIEpTVmFsdWVQ
dHIgZnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyKG1fZXhlYywg
bV9uYW1lKSk7CiAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKG1fZXhlYywgbV9leGVjLT5leGNlcHRpb24oKSk7CisgICAgICAgIGlmIChy
ZXBvcnRFeGNlcHRpb25zKQorICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKG1fZXhlYywgbV9l
eGVjLT5leGNlcHRpb24oKSk7CisKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAgICAgfQpAQCAtMTIzLDcgKzEyNSw5IEBAIFNjcmlw
dFZhbHVlIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoYWRFeGNlcHRpb24pCiAKICAg
ICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y2FsbChtX2V4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNPYmplY3QsIG1fYXJndW1lbnRzKTsKICAgICBpZiAobV9leGVjLT5o
YWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMt
PmV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAg
ICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAg
ICBoYWRFeGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKICAg
ICB9CkBAIC0xMzcsNyArMTQxLDcgQEAgU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpj
YWxsKCkKICAgICByZXR1cm4gY2FsbChoYWRFeGNlcHRpb24pOwogfQogCi1TY3JpcHRPYmplY3Qg
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uKQorU2NyaXB0
T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwg
Ym9vbCByZXBvcnRFeGNlcHRpb25zKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90
aGlzT2JqZWN0LmpzT2JqZWN0KCk7CiAKQEAgLTE0NSw3ICsxNDksOSBAQCBTY3JpcHRPYmplY3Qg
U2NyaXB0RnVuY3Rpb25DYWxsOjpjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uKQogCiAgICAg
SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gYXNPYmplY3QodGhpc09iamVjdC0+Z2V0KG1fZXhlYywg
SWRlbnRpZmllcihtX2V4ZWMsIG1fbmFtZSkpKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlv
bigpKTsKKyAgICAgICAgaWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAgICByZXBvcnRF
eGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAgICBoYWRFeGNl
cHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiAgICAgfQpAQCAt
MTU3LDcgKzE2Myw5IEBAIFNjcmlwdE9iamVjdCBTY3JpcHRGdW5jdGlvbkNhbGw6OmNvbnN0cnVj
dChib29sJiBoYWRFeGNlcHRpb24pCiAKICAgICBKU1ZhbHVlUHRyIHJlc3VsdCA9IEpTQzo6Y29u
c3RydWN0KG1fZXhlYywgY29uc3RydWN0b3IsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEs
IG1fYXJndW1lbnRzKTsKICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAg
ICByZXBvcnRFeGNlcHRpb24obV9leGVjLCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
aWYgKHJlcG9ydEV4Y2VwdGlvbnMpCisgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24obV9leGVj
LCBtX2V4ZWMtPmV4Y2VwdGlvbigpKTsKKwogICAgICAgICBoYWRFeGNlcHRpb24gPSB0cnVlOwog
ICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0RnVuY3Rpb25DYWxsLmgKaW5kZXggODFkMWY4ZS4uNmRmMjRjMyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCkBAIC02MSwxNiArNjEsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCk7
CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoaW50KTsKICAgICAgICAgdm9pZCBhcHBlbmRB
cmd1bWVudChib29sKTsKLSAgICAgICAgU2NyaXB0VmFsdWUgY2FsbChib29sJiBoYWRFeGNlcHRp
b24pOworICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCBy
ZXBvcnRFeGNlcHRpb25zID0gdHJ1ZSk7CiAgICAgICAgIFNjcmlwdFZhbHVlIGNhbGwoKTsKLSAg
ICAgICAgU2NyaXB0T2JqZWN0IGNvbnN0cnVjdChib29sJiBoYWRFeGNlcHRpb24pOworICAgICAg
ICBTY3JpcHRPYmplY3QgY29uc3RydWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRF
eGNlcHRpb25zID0gdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFNjcmlwdFN0YXRl
KiBtX2V4ZWM7CiAgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7CiAgICAgICAgIFN0
cmluZyBtX25hbWU7CiAgICAgICAgIEpTQzo6QXJnTGlzdCBtX2FyZ3VtZW50czsKLSAgICAgICAg
Ym9vbCBtX3F1YXJhbnRpbmVPYmplY3RzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcAppbmRleCA2MDE5OGVmLi41YmM2YWY0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0luc3BlY3RvckNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CiAKQEAgLTU1LDEyICs1NiwyMSBAQCBTY3JpcHRPYmplY3Q6OlNjcmlwdE9iamVjdChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiB9CiAKK3N0YXRpYyBib29sIGhhbmRsZUV4Y2Vw
dGlvbihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAgaWYgKCFzY3JpcHRTdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmVwb3J0RXhjZXB0
aW9uKHNjcmlwdFN0YXRlLCBzY3JpcHRTdGF0ZS0+ZXhjZXB0aW9uKCkpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBKU0xv
Y2sgbG9jayhmYWxzZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAganNPYmplY3Qo
KS0+cHV0KHNjcmlwdFN0YXRlLCBJZGVudGlmaWVyKHNjcmlwdFN0YXRlLCBuYW1lKSwganNTdHJp
bmcoc2NyaXB0U3RhdGUsIHZhbHVlKSwgc2xvdCk7Ci0gICAgcmV0dXJuICFzY3JpcHRTdGF0ZS0+
aGFkRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7
CiB9CiAKIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQpAQCAtNjgsNyArNzgs
NyBAQCBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0TwogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUs
IElkZW50aWZpZXIoc2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpLCBzbG90KTsK
LSAgICByZXR1cm4gIXNjcmlwdFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gaGFu
ZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCkBAIC03Niw3ICs4Niw3IEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTdHJpbmcmCiAgICAgSlNM
b2NrIGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0
KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzU3Ry
aW5nKHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUt
PmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUp
OwogfQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgY2hhciogbmFtZSwgZG91YmxlIHZhbHVlKQpAQCAtODQsNyArOTQsNyBAQCBib29sIFNj
cmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHZhbHVlKQogICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQoc2NyaXB0U3RhdGUsIElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpLCBqc051bWJlcihzY3JpcHRTdGF0ZSwgdmFsdWUpLCBzbG90KTsK
LSAgICByZXR1cm4gIXNjcmlwdFN0YXRlLT5oYWRFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gaGFu
ZGxlRXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKIH0KIAogYm9vbCBTY3JpcHRPYmplY3Q6OnNldChT
Y3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGxvbmcgbG9uZyB2YWx1
ZSkKQEAgLTkyLDcgKzEwMiw3IEBAIGJvb2wgU2NyaXB0T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBsb25nIGxvbmcgdmFsCiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0KCkt
PnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzTnVtYmVy
KHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhh
ZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOwog
fQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgY2hhciogbmFtZSwgaW50IHZhbHVlKQpAQCAtMTAwLDcgKzExMCw3IEBAIGJvb2wgU2NyaXB0
T2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBp
bnQgdmFsdWUpCiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90OwogICAgIGpzT2JqZWN0KCktPnB1dChzY3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIGpzTnVtYmVyKHNjcmlwdFN0YXRlLCB2YWx1ZSksIHNsb3QpOwotICAgIHJl
dHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVybiBoYW5kbGVFeGNl
cHRpb24oc2NyaXB0U3RhdGUpOwogfQogCiBib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKQEAgLTEwOCw3
ICsxMTgsMzYgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCiAgICAgSlNMb2NrIGxvY2soZmFsc2Up
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIGpzT2JqZWN0KCktPnB1dChzY3JpcHRT
dGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSksIGpzQm9vbGVhbih2YWx1ZSksIHNs
b3QpOwotICAgIHJldHVybiAhc2NyaXB0U3RhdGUtPmhhZEV4Y2VwdGlvbigpOworICAgIHJldHVy
biBoYW5kbGVFeGNlcHRpb24oc2NyaXB0U3RhdGUpOworfQorCitib29sIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29u
c3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAg
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHV0RGlyZWN0KElkZW50aWZpZXIo
c2NyaXB0U3RhdGUsIG5hbWUpLCB2YWx1ZS5qc09iamVjdCgpKTsKKyAgICByZXR1cm4gaGFuZGxl
RXhjZXB0aW9uKHNjcmlwdFN0YXRlKTsKK30KKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQoreworICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICBzY3JpcHRT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wdXREaXJlY3QoSWRlbnRpZmllcihzY3JpcHRT
dGF0ZSwgbmFtZSksIHRvSlMoc2NyaXB0U3RhdGUsIHZhbHVlKSk7CisgICAgcmV0dXJuIGhhbmRs
ZUV4Y2VwdGlvbihzY3JpcHRTdGF0ZSk7Cit9CisKKworYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6
OmdldE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIFNj
cmlwdE9iamVjdCYgdmFsdWUpCit7CisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAgIEpTVmFs
dWVQdHIganNWYWx1ZSA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmdldChz
Y3JpcHRTdGF0ZSwgSWRlbnRpZmllcihzY3JpcHRTdGF0ZSwgbmFtZSkpOworICAgIGlmICghanNW
YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gU2NyaXB0T2JqZWN0KGFz
T2JqZWN0KGpzVmFsdWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmgKaW5kZXggNWQxNWZmMi4uZTViYmM5
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5j
bHVkZSA8cnVudGltZS9Qcm90ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOwogCiAgICAgY2xhc3MgU2NyaXB0T2JqZWN0IDogcHVibGlj
IFNjcmlwdFZhbHVlIHsKICAgICBwdWJsaWM6CkBAIC01NSw2ICs1NiwxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFt
ZSwgYm9vbCk7CiAgICAgfTsKIAorICAgIGNsYXNzIFNjcmlwdEdsb2JhbE9iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNj
cmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQ29udHJvbGxlciopOworICAg
ICAgICBzdGF0aWMgYm9vbCBnZXRPYmplY3QoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1l
LCBTY3JpcHRPYmplY3QmKTsKKyAgICBwcml2YXRlOgorICAgICAgICBTY3JpcHRHbG9iYWxPYmpl
Y3QoKSB7IH0KKyAgICB9OworCiB9CiAKICNlbmRpZiAvLyBTY3JpcHRPYmplY3RfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40YWU2YjRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
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
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRTdGF0ZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbVBhZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0
YXRlLmgKaW5kZXggM2NjZTA5My4uMTk2MTVjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdGF0ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUu
aApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIFBhZ2U7CiAKICAgICAvLyBUaGUgaWRlYSBpcyB0byBleHBvc2UgInN0
YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlvbiwgYW5kIGFueSBvdGhlcgogICAgIC8vIG1l
dGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlwcyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6
RXhlY1N0YXRlIGFzIGEKQEAgLTQ0LDYgKzQ1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IC8vIEZvciBub3csIHRoZSBzZXBhcmF0aW9uIGlzIHB1cmVseSBieSBjb252ZW50aW9uLgogICAg
IHR5cGVkZWYgSlNDOjpFeGVjU3RhdGUgU2NyaXB0U3RhdGU7CiAKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGVGcm9tUGFnZShQYWdlKiBwYWdlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCmluZGV4IGIyYmYzOTAuLjQ4ZWUyMzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5jcHAKQEAgLTk1LDEzICs5NSwxMyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNv
bGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRPYmplY3QmCiAgICAgICAg
IG1lc3NhZ2VDb25zdHJ1Y3Rvci5hcHBlbmRBcmd1bWVudChtX21lc3NhZ2UpOwogCiAgICAgYm9v
bCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKLSAgICBTY3JpcHRPYmplY3QgbWVzc2FnZSA9IG1lc3Nh
Z2VDb25zdHJ1Y3Rvci5jb25zdHJ1Y3QoaGFkRXhjZXB0aW9uKTsKKyAgICBTY3JpcHRPYmplY3Qg
bWVzc2FnZSA9IG1lc3NhZ2VDb25zdHJ1Y3Rvci5jb25zdHJ1Y3QoaGFkRXhjZXB0aW9uLCBmYWxz
ZSk7CiAgICAgaWYgKGhhZEV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGFkZE1lc3NhZ2VUb0NvbnNvbGUoc2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rv
ciwgImFkZE1lc3NhZ2VUb0NvbnNvbGUiKTsKICAgICBhZGRNZXNzYWdlVG9Db25zb2xlLmFwcGVu
ZEFyZ3VtZW50KG1lc3NhZ2UpOwotICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUuY2FsbChoYWRFeGNl
cHRpb24pOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUuY2FsbChoYWRFeGNlcHRpb24sIGZhbHNl
KTsKIH0KIAogYm9vbCBDb25zb2xlTWVzc2FnZTo6aXNFcXVhbChTY3JpcHRTdGF0ZSogc3RhdGUs
IENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCmluZGV4IGQzODk2NzEuLjRmNmI3MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1l
c3NhZ2UuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgpAQCAtNTMsMTIgKzUxLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgotI2luY2x1ZGUgIkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oIgotI2luY2x1ZGUgIkpT
SW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNJbnNwZWN0b3JDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCi0jaW5jbHVkZSAiSlNSYW5nZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCkBAIC03NiwxMyArNjgsOCBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxwcm9m
aWxlci9Qcm9maWxlLmg+CiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNM
b2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC05MSwxMyArNzgsMTEgQEAKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICNp
bmNsdWRlICJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2UuaCIKICNpbmNsdWRlICJT
dG9yYWdlQXJlYS5oIgotI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKQEAgLTExMywyNyArOTgsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7CiAKLXN0YXRpYyBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmdSZWYoY29uc3QgY2hhciogc3RyKQorc3RhdGlj
IHZvaWQgY2FsbFNpbXBsZUZ1bmN0aW9uKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
U2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7Ci0g
ICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc3RyKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHRT
dHJpbmcoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlv
bikpOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBTdHJpbmcoSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHNjcmlw
dFN0cmluZy5nZXQoKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHNjcmlwdFN0cmluZy5nZXQoKSkpOwot
fQotCi0jZGVmaW5lIEhBTkRMRV9FWENFUFRJT04oY29udGV4dCwgZXhjZXB0aW9uKSBoYW5kbGVF
eGNlcHRpb24oKGNvbnRleHQpLCAoZXhjZXB0aW9uKSwgX19MSU5FX18pCi0KLXN0YXRpYyB2b2lk
IGNhbGxTaW1wbGVGdW5jdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhp
c09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih0b0pTKGNvbnRleHQpLCB0b0pTKHRoaXNPYmplY3QpLCBmdW5jdGlvbk5h
bWUpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgdGhpc09i
amVjdCwgZnVuY3Rpb25OYW1lKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKQEAgLTIwMyw5
ICsxNzAsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBh
Z2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3BhZ2UoMCkKLSAgICAsIG1fc2Ny
aXB0T2JqZWN0KDApCi0gICAgLCBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3QoMCkKLSAgICAsIG1f
c2NyaXB0Q29udGV4dCgwKQorICAgICwgbV9zY3JpcHRTdGF0ZSgwKQogICAgICwgbV93aW5kb3dW
aXNpYmxlKGZhbHNlKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9k
ZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCkBAIC0yMzEsMTggKzE5Niw4IEBAIEluc3BlY3RvckNvbnRy
b2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICBtX2NsaWVudC0+aW5zcGVjdG9y
RGVzdHJveWVkKCk7CiAKLSAgICBpZiAobV9zY3JpcHRDb250ZXh0KSB7Ci0gICAgICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLQotICAgICAgICBKU09iamVjdFJlZiBnbG9iYWwgPSBKU0Nv
bnRleHRHZXRHbG9iYWxPYmplY3QobV9zY3JpcHRDb250ZXh0KTsKLSAgICAgICAgSlNWYWx1ZVJl
ZiBjb250cm9sbGVyUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KG1fc2NyaXB0Q29udGV4
dCwgZ2xvYmFsLCBqc1N0cmluZ1JlZigiSW5zcGVjdG9yQ29udHJvbGxlciIpLmdldCgpLCAmZXhj
ZXB0aW9uKTsKLSAgICAgICAgaWYgKCFIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwg
ZXhjZXB0aW9uKSkgewotICAgICAgICAgICAgaWYgKEpTT2JqZWN0UmVmIGNvbnRyb2xsZXIgPSBK
U1ZhbHVlVG9PYmplY3QobV9zY3JpcHRDb250ZXh0LCBjb250cm9sbGVyUHJvcGVydHksICZleGNl
cHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0
Q29udGV4dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RTZXRQcml2
YXRlKGNvbnRyb2xsZXIsIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAg
IGlmIChtX3NjcmlwdFN0YXRlKQorICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX3Nj
cmlwdFN0YXRlLCAiSW5zcGVjdG9yQ29udHJvbGxlciIsIFNjcmlwdE9iamVjdCgpKTsKIAogICAg
IGlmIChtX3BhZ2UpCiAgICAgICAgIG1fcGFnZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxl
cigwKTsKQEAgLTM1Niw3ICszMTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3QoTm9kZSogbm9kZSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBt
X25vZGVUb0ZvY3VzID0gbm9kZTsKIAotICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICBp
ZiAobV93ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIG1fc2hvd0FmdGVyVmlz
aWJsZSA9IEVsZW1lbnRzUGFuZWw7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzAsMTUg
KzMyNSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZvY3VzTm9kZSgpCiAgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3NjcmlwdENvbnRl
eHQpOwotICAgIEFTU0VSVChtX3NjcmlwdE9iamVjdCk7CisgICAgQVNTRVJUKGhhc1dlYkluc3Bl
Y3RvcigpKTsKICAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7CiAKICAgICBTY3JpcHRPYmplY3Qg
cXVhcmFudGluZWROb2RlOwogICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QobV9u
b2RlVG9Gb2N1cy5nZXQoKSwgcXVhcmFudGluZWROb2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9K
UyhtX3NjcmlwdE9iamVjdCksICJ1cGRhdGVGb2N1c2VkTm9kZSIpOworICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInVwZGF0ZUZv
Y3VzZWROb2RlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocXVhcmFudGluZWROb2Rl
KTsKIAogICAgIG1fbm9kZVRvRm9jdXMgPSAwOwpAQCAtNDE1LDcgKzM2OSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0
YWNoZWQpCiAKICAgICBtX3dpbmRvd1Zpc2libGUgPSB2aXNpYmxlOwogCi0gICAgaWYgKCFtX3Nj
cmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghaGFzV2ViSW5zcGVjdG9y
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3dpbmRvd1Zpc2libGUpIHsKQEAgLTQ1
NSwxMiArNDA5LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29u
c29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsCiAgICAgYWRkQ29uc29sZU1l
c3NhZ2UoMCwgbmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHNvdXJjZUlELCBtX2dyb3VwTGV2ZWwpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZShFeGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNzYWdl
KiBjb25zb2xlTWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkQ29uc29sZU1l
c3NhZ2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBDb25zb2xlTWVzc2FnZSogY29uc29sZU1l
c3NhZ2UpCiB7CiAgICAgQVNTRVJUKGVuYWJsZWQoKSk7CiAgICAgQVNTRVJUX0FSRyhjb25zb2xl
TWVzc2FnZSwgY29uc29sZU1lc3NhZ2UpOwogCi0gICAgaWYgKG1fcHJldmlvdXNNZXNzYWdlICYm
IG1fcHJldmlvdXNNZXNzYWdlLT5pc0VxdWFsKGV4ZWMsIGNvbnNvbGVNZXNzYWdlKSkgeworICAg
IGlmIChtX3ByZXZpb3VzTWVzc2FnZSAmJiBtX3ByZXZpb3VzTWVzc2FnZS0+aXNFcXVhbChzY3Jp
cHRTdGF0ZSwgY29uc29sZU1lc3NhZ2UpKSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5p
bmNyZW1lbnRDb3VudCgpOwogICAgICAgICBkZWxldGUgY29uc29sZU1lc3NhZ2U7CiAgICAgfSBl
bHNlIHsKQEAgLTQ2OSw3ICs0MjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZENv
bnNvbGVNZXNzYWdlKEV4ZWNTdGF0ZSogZXhlYywgQ29uc29sZU1lc3NhZ2UqIGNvbgogICAgIH0K
IAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5h
ZGRUb0NvbnNvbGUodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3Nj
cmlwdE9iamVjdCkpKTsKKyAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvQ29uc29sZSht
X3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCkBAIC00ODIsMTAgKzQz
NiwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkK
IAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1By
b2ZpbGluZykKIHsKLSAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCkKKyAgICBpZiAoIWhhc1dlYklu
c3BlY3RvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24odG9KUyhtX3NjcmlwdENvbnRleHQpLCB0b0pTKG1fc2NyaXB0T2JqZWN0KSwgInNldFJl
Y29yZGluZ1Byb2ZpbGUiKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3Jp
cHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJzZXRSZWNvcmRpbmdQcm9maWxlIik7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsK
IH0KQEAgLTU0OSwxMCArNTAzLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNo
V2luZG93KCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvdyhi
b29sIGF0dGFjaGVkKQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX3NjcmlwdENvbnRleHQg
fHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghZW5hYmxlZCgpIHx8ICFoYXNXZWJJbnNwZWN0
b3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9KUyhtX3NjcmlwdE9iamVjdCksICJzZXRBdHRhY2hl
ZFdpbmRvdyIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRl
LCBtX3dlYkluc3BlY3RvciwgInNldEF0dGFjaGVkV2luZG93Iik7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoYXR0YWNoZWQpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KQEAgLTYwMCwx
NCArNTU0LDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzc09u
Tm9kZShOb2RlKiBub2RlKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdp
bmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghZW5hYmxl
ZCgpIHx8ICFtX3NjcmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQorICAgIGlmICghZW5h
YmxlZCgpIHx8ICFoYXNXZWJJbnNwZWN0b3IoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2Ny
aXB0T2JqZWN0IGRvbVdpbmRvdzsKICAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0
KGZyYW1lLT5kb21XaW5kb3coKSwgZG9tV2luZG93KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgdG9KUyht
X3NjcmlwdE9iamVjdCksICJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVkIik7CisgICAgU2NyaXB0RnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiaW5zcGVj
dGVkV2luZG93Q2xlYXJlZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRvbVdpbmRv
dyk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQpAQCAtNjIwLDQyICs1NzQsMTkgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKQogICAgIC8v
IEdyYW50IHRoZSBpbnNwZWN0b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQg
cGFnZS4KICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5ncmFudFVuaXZlcnNhbEFjY2VzcygpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGNsZWFuZWQgdXAuIEFQSSBNaXgtdXAuCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBtX3Nj
cmlwdENvbnRleHQgPSB0b1JlZihleGVjKTsKLSAgICBKU1ZhbHVlUHRyIGpzSW5zcGVjdG9yID0g
dG9KUyhleGVjLCB0aGlzKTsKLSAgICBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3QgPSB0b1JlZihh
c09iamVjdChqc0luc3BlY3RvcikpOwotICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KElkZW50
aWZpZXIoZXhlYywgIkluc3BlY3RvckNvbnRyb2xsZXIiKSwganNJbnNwZWN0b3IpOworICAgIG1f
c2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKG1fcGFnZSk7CisgICAgU2NyaXB0R2xv
YmFsT2JqZWN0OjpzZXQobV9zY3JpcHRTdGF0ZSwgIkluc3BlY3RvckNvbnRyb2xsZXIiLCB0aGlz
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCiB7
Ci0gICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0UmVmIGdsb2JhbCA9IEpTQ29udGV4dEdl
dEdsb2JhbE9iamVjdChtX3NjcmlwdENvbnRleHQpOwotICAgIEFTU0VSVChnbG9iYWwpOwotCi0g
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotCi0gICAgSlNWYWx1ZVJlZiBpbnNwZWN0b3JW
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkobV9zY3JpcHRDb250ZXh0LCBnbG9iYWwsIGpzU3Ry
aW5nUmVmKCJXZWJJbnNwZWN0b3IiKS5nZXQoKSwgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKEhBTkRM
RV9FWENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQorICAgIEFTU0VSVChtX3Nj
cmlwdFN0YXRlKTsKKyAgICBpZiAoIW1fc2NyaXB0U3RhdGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEFTU0VSVChpbnNwZWN0b3JWYWx1ZSk7Ci0gICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKKyAg
ICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0T2JqZWN0KG1fc2NyaXB0U3RhdGUsICJXZWJJ
bnNwZWN0b3IiLCBtX3dlYkluc3BlY3RvcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2Ny
aXB0T2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fc2NyaXB0Q29udGV4dCwgaW5zcGVjdG9yVmFs
dWUsICZleGNlcHRpb24pOwotICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4
dCwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc2NyaXB0T2Jq
ZWN0KTsKLQotICAgIEpTVmFsdWVQcm90ZWN0KG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmpl
Y3QpOwotCiAgICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0
aGUgcGFnZSBsb2FkZWQKICAgICBzaG93V2luZG93KCk7CiB9CkBAIC02ODUsNyArNjE2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3BlY2lhbFBhbmVscyBwYW5lbCkK
IAogICAgIHNob3coKTsKIAotICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKKyAgICBpZiAobV93
ZWJJbnNwZWN0b3IuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9
IHBhbmVsOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzE5LDcgKzY1MCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMgcGFuZWwpCiAgICAg
fQogCiAgICAgaWYgKHNob3dGdW5jdGlvbk5hbWUpCi0gICAgICAgIGNhbGxTaW1wbGVGdW5jdGlv
bihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCBzaG93RnVuY3Rpb25OYW1lKTsKKyAg
ICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCBz
aG93RnVuY3Rpb25OYW1lKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgp
CkBAIC03MzMsMTEgKzY2NCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQog
I2VuZGlmCiAgICAgY2xvc2VXaW5kb3coKTsKIAotICAgIGlmIChtX3NjcmlwdENvbnRleHQgJiYg
bV9zY3JpcHRPYmplY3QpCi0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QobV9zY3JpcHRDb250ZXh0
LCBtX3NjcmlwdE9iamVjdCk7Ci0KLSAgICBtX3NjcmlwdE9iamVjdCA9IDA7Ci0gICAgbV9zY3Jp
cHRDb250ZXh0ID0gMDsKKyAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgpOworICAg
IG1fc2NyaXB0U3RhdGUgPSAwOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dX
aW5kb3coKQpAQCAtNzczLDggKzcwMSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3Rh
cnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKFRpbWVyPEluc3BlY3RvckNvbnRyb2xsZXI+CiAgICAg
dGl0bGUgKz0gIi4iOwogICAgIHRpdGxlICs9IFVTdHJpbmc6OmZyb20obV9jdXJyZW50VXNlcklu
aXRpYXRlZFByb2ZpbGVOdW1iZXIpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdp
bmRvdyhtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKS0+Z2xvYmFsRXhlYygpOwotICAgIFBy
b2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAgRXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RhcnRQ
cm9maWxpbmcoc2NyaXB0U3RhdGUsIHRpdGxlKTsKIAogICAgIHRvZ2dsZVJlY29yZEJ1dHRvbih0
cnVlKTsKIH0KQEAgLTc5MCw4ICs3MTgsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICB0aXRsZSArPSAiLiI7CiAgICAgdGl0bGUg
Kz0gVVN0cmluZzo6ZnJvbShtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcik7CiAK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgUmVmUHRyPFByb2ZpbGU+IHByb2ZpbGUgPSBQ
cm9maWxlcjo6cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAgRXhl
Y1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBSZWZQdHI8UHJvZmlsZT4gcHJvZmlsZSA9IFBy
b2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmlsaW5nKHNjcmlwdFN0YXRlLCB0aXRsZSk7CiAg
ICAgaWYgKHByb2ZpbGUpCiAgICAgICAgIGFkZFByb2ZpbGUocHJvZmlsZSwgMCwgVVN0cmluZygp
KTsKIApAQCAtODA4LDggKzczNiw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxl
UHJvZmlsZXIoYm9vbCBza2lwUmVjb21waWxlKQogICAgIGlmICghc2tpcFJlY29tcGlsZSkKICAg
ICAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0
aW9uc1Nvb24oKTsKIAotICAgIGlmIChtX3NjcmlwdENvbnRleHQgJiYgbV9zY3JpcHRPYmplY3Qp
Ci0gICAgICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2Jq
ZWN0LCAicHJvZmlsZXJXYXNFbmFibGVkIik7CisgICAgaWYgKGhhc1dlYkluc3BlY3RvcigpKQor
ICAgICAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3Is
ICJwcm9maWxlcldhc0VuYWJsZWQiKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aXNhYmxlUHJvZmlsZXIoKQpAQCAtODIxLDU1ICs3NDksNTUgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoKQogCiAgICAgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpz
aGFyZWQoKS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9uc1Nvb24oKTsKIAotICAgIGlmIChtX3Njcmlw
dENvbnRleHQgJiYgbV9zY3JpcHRPYmplY3QpCi0gICAgICAgIGNhbGxTaW1wbGVGdW5jdGlvbiht
X3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCAicHJvZmlsZXJXYXNEaXNhYmxlZCIpOwor
ICAgIGlmIChoYXNXZWJJbnNwZWN0b3IoKSkKKyAgICAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1f
c2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAicHJvZmlsZXJXYXNEaXNhYmxlZCIpOwogfQog
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKIHsK
LSAgICBBU1NFUlQobV9zY3JpcHRDb250ZXh0KTsKLSAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCkK
KyAgICBBU1NFUlQobV9zY3JpcHRTdGF0ZSk7CisgICAgaWYgKCFtX3NjcmlwdFN0YXRlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9
IG1fcmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9
IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlc0VuZDsgKytpdCkKLSAgICAgICAg
aXQtPnNlY29uZC0+Y3JlYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2Ny
aXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIGl0LT5zZWNvbmQtPmNy
ZWF0ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0
b3IpKTsKIAogICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0g
ICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0NvbnNvbGUodG9KUyhtX3NjcmlwdENv
bnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAgbV9j
b25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvQ29uc29sZShtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmpl
Y3QobV93ZWJJbnNwZWN0b3IpKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFz
ZVJlc291cmNlc1NldDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNl
cy5lbmQoKTsKICAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAg
ICAgICAoKml0KS0+YmluZCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pT
KG1fc2NyaXB0T2JqZWN0KSkpOworICAgICAgICAoKml0KS0+YmluZChtX3NjcmlwdFN0YXRlLCBT
Y3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKICNlbmRpZgogI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5k
ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmJpbmQodG9KUyhtX3Njcmlw
dENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdE9iamVjdCkpKTsKKyAgICAgICAg
KCppdCktPmJpbmQobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7
CiAjZW5kaWYKIAotICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2Ny
aXB0T2JqZWN0LCAicG9wdWxhdGVJbnRlcmZhY2UiKTsKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJwb3B1bGF0ZUludGVyZmFjZSIpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNjcmlwdFByb2ZpbGUoUHJvZmlsZSogcHJv
ZmlsZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24odG9KUyhtX3NjcmlwdENv
bnRleHQpLCB0b0pTKG1fc2NyaXB0T2JqZWN0KSwgImFkZFByb2ZpbGUiKTsKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJhZGRQ
cm9maWxlIik7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KHRvSlModG9KUyhtX3NjcmlwdENvbnRleHQpLCBwcm9maWxlKSk7CisgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQodG9KUyhtX3NjcmlwdFN0YXRlLCBwcm9maWxlKSk7CiAgICAgZnVu
Y3Rpb24uY2FsbCgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0
T2JqZWN0cygpCiB7Ci0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0
KQorICAgIGlmICghaGFzV2ViSW5zcGVjdG9yKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
c291cmNlc01hcDo6aXRlcmF0b3IgcmVzb3VyY2VzRW5kID0gbV9yZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5yZWxlYXNlU2Ny
aXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3Jp
cHRPYmplY3QpKSwgZmFsc2UpOworICAgICAgICBpdC0+c2Vjb25kLT5yZWxlYXNlU2NyaXB0T2Jq
ZWN0KG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdChtX3dlYkluc3BlY3RvciksIGZhbHNlKTsK
IAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0
b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKQEAgLTg4Miw3ICs4
MTAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cygpCiAg
ICAgICAgICgqaXQpLT51bmJpbmQoKTsKICNlbmRpZgogCi0gICAgY2FsbFNpbXBsZUZ1bmN0aW9u
KG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJyZXNldCIpOworICAgIGNhbGxTaW1w
bGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInJlc2V0Iik7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBy
ZXNvdXJjZU1hcCwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCkKQEAgLTg5OSw3ICs4Mjcs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBydW5lUmVzb3VyY2VzKFJlc291cmNlc01h
cCogcmVzb3VyY2VNYXAsIERvY3VtZW50TG9hZAogICAgICAgICBpZiAoIWxvYWRlclRvS2VlcCB8
fCAhcmVzb3VyY2UtPmlzU2FtZUxvYWRlcihsb2FkZXJUb0tlZXApKSB7CiAgICAgICAgICAgICBy
ZW1vdmVSZXNvdXJjZShyZXNvdXJjZSk7CiAgICAgICAgICAgICBpZiAod2luZG93VmlzaWJsZSgp
KQotICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZWxlYXNlU2NyaXB0T2JqZWN0KHRvSlMobV9z
Y3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9zY3JpcHRT
dGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSwgdHJ1ZSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC05MzUsNyArODYzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3QgYWRkIHRoZSBtYWluIHJlc291cmNlIHVudGlsIGl0cyBsb2FkIGlzIGNvbW1pdHRlZC4g
VGhpcyBpcwogICAgICAgICAgICAgICAgIC8vIG5lZWRlZCB0byBrZWVwIHRoZSBsb2FkIGZvciBh
IHVzZXItZW50ZXJlZCBVUkwgZnJvbSBzaG93aW5nIHVwIGluIHRoZQogICAgICAgICAgICAgICAg
IC8vIGxpc3Qgb2YgcmVzb3VyY2VzIGZvciB0aGUgcGFnZSB0aGV5IGFyZSBuYXZpZ2F0aW5nIGF3
YXkgZnJvbS4KLSAgICAgICAgICAgICAgICBtX21haW5SZXNvdXJjZS0+Y3JlYXRlU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmpl
Y3QpKSk7CisgICAgICAgICAgICAgICAgbV9tYWluUmVzb3VyY2UtPmNyZWF0ZVNjcmlwdE9iamVj
dChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gUGFnZXMgbG9hZGVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUgYXJlIGNvbW1pdHRlZCBiZWZvcmUKICAgICAgICAgICAgICAgICAvLyBtX21haW5S
ZXNvdXJjZSBpcyB0aGUgcmlnaHQgcmVzb3VyY2UgZm9yIHRoaXMgbG9hZCwgc28gd2UKQEAgLTEw
MTUsNyArOTQzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRMb2FkUmVzb3VyY2VG
cm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKICAgICBhZGRSZXNvdXJjZShy
ZXNvdXJjZS5nZXQoKSk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNv
dXJjZS0+Y3JlYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRPYmplY3QpKSk7CisgICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3Jp
cHRPYmplY3QobV9zY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMTAzNyw3ICs5NjUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsCiAgICAgYWRkUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOwogCiAgICAgaWYg
KHdpbmRvd1Zpc2libGUoKSAmJiBsb2FkZXItPmlzTG9hZGluZ0Zyb21DYWNoZWRQYWdlKCkgJiYg
cmVzb3VyY2UgPT0gbV9tYWluUmVzb3VyY2UpCi0gICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3Jp
cHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpLCBTY3JpcHRPYmplY3QodG9KUyhtX3Njcmlw
dE9iamVjdCkpKTsKKyAgICAgICAgcmVzb3VyY2UtPmNyZWF0ZVNjcmlwdE9iamVjdChtX3Njcmlw
dFN0YXRlLCBTY3JpcHRPYmplY3QobV93ZWJJbnNwZWN0b3IpKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKQEAgLTEwNTcsNyArOTg1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWYKICAgICB9CiAKICAgICBpZiAocmVzb3VyY2UgIT0gbV9tYWluUmVzb3Vy
Y2UgJiYgd2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+Y3JlYXRlU2NyaXB0T2Jq
ZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmpl
Y3QpKSk7CisgICAgICAgIHJlc291cmNlLT5jcmVhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0
ZSwgU2NyaXB0T2JqZWN0KG1fd2ViSW5zcGVjdG9yKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTEwNzMs
NyArMTAwMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVuCiAgICAgcmVzb3VyY2UtPm1hcmtS
ZXNwb25zZVJlY2VpdmVkVGltZSgpOwogCiAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKLSAgICAg
ICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29udGV4dCkpOwor
ICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3RhdGUpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQp
CkBAIC0xMDg4LDcgKzEwMTYsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2Vp
dmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZwogICAgIHJlc291
cmNlLT5hZGRMZW5ndGgobGVuZ3RoUmVjZWl2ZWQpOwogCiAgICAgaWYgKHdpbmRvd1Zpc2libGUo
KSkKLSAgICAgICAgcmVzb3VyY2UtPnVwZGF0ZVNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0Q29u
dGV4dCkpOworICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KG1fc2NyaXB0U3Rh
dGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCkBAIC0xMTA3LDcgKzEwMzUs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIGFkZFJlc291cmNlKHJlc291cmNlLmdl
dCgpKTsKIAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51cGRh
dGVTY3JpcHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3VyY2Ut
PnVwZGF0ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgLyplcnJvciovKQpAQCAtMTEyNyw3ICsx
MDU1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGluZyhEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmkKICAgICBhZGRSZXNvdXJjZShyZXNvdXJj
ZS5nZXQoKSk7CiAKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+
dXBkYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRDb250ZXh0KSk7CisgICAgICAgIHJlc291
cmNlLT51cGRhdGVTY3JpcHRPYmplY3QobV9zY3JpcHRTdGF0ZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0U3RyaW5nJiBzb3VyY2VTdHJpbmcpCkBAIC0x
MTQyLDcgKzEwNzAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmll
dmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aQogICAgIHJlc291cmNlLT5z
ZXRYTUxIdHRwUmVzcG9uc2VUZXh0KHNvdXJjZVN0cmluZyk7CiAKICAgICBpZiAod2luZG93Vmlz
aWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+dXBkYXRlU2NyaXB0T2JqZWN0KHRvSlMobV9zY3Jp
cHRDb250ZXh0KSk7CisgICAgICAgIHJlc291cmNlLT51cGRhdGVTY3JpcHRPYmplY3QobV9zY3Jp
cHRTdGF0ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0ZWQo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAg
LTExNTksNyArMTA4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0SW1wb3J0
ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmCiAgICAgcmVzb3VyY2Ut
PnNldFhNTEh0dHBSZXNwb25zZVRleHQoU2NyaXB0U3RyaW5nKHNvdXJjZVN0cmluZykpOwogICAg
IAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT51cGRhdGVTY3Jp
cHRPYmplY3QodG9KUyhtX3NjcmlwdENvbnRleHQpKTsKKyAgICAgICAgcmVzb3VyY2UtPnVwZGF0
ZVNjcmlwdE9iamVjdChtX3NjcmlwdFN0YXRlKTsKIH0KIAogCkBAIC0xMTc0LDcgKzExMDIsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE9wZW5EYXRhYmFzZShEYXRhYmFzZSogZGF0
YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9tYQogICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuYWRkKHJl
c291cmNlKTsKIAogICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJlc291cmNlLT5i
aW5kKHRvSlMobV9zY3JpcHRDb250ZXh0KSwgU2NyaXB0T2JqZWN0KHRvSlMobV9zY3JpcHRPYmpl
Y3QpKSk7CisgICAgICAgIHJlc291cmNlLT5iaW5kKG1fc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVj
dChtX3dlYkluc3BlY3RvcikpOwogfQogI2VuZGlmCiAKQEAgLTExOTQsNyArMTEyMiw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3Rv
cmFnZUFyZWEsIGJvb2wgaXNMb2NhCiAKICAgICBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYWRkKHJl
c291cmNlKTsKICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXNvdXJjZS0+Ymlu
ZCh0b0pTKG1fc2NyaXB0Q29udGV4dCksIFNjcmlwdE9iamVjdCh0b0pTKG1fc2NyaXB0T2JqZWN0
KSkpOworICAgICAgICByZXNvdXJjZS0+YmluZChtX3NjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3Qo
bV93ZWJJbnNwZWN0b3IpKTsKIH0KICNlbmRpZgogCkBAIC0xMjE0LDcgKzExNDIsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyKCkKICAgICBpZiAoIWVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3NjcmlwdENvbnRleHQgfHwgIW1fc2Ny
aXB0T2JqZWN0KSB7CisgICAgaWYgKCFtX3NjcmlwdFN0YXRlIHx8IG1fd2ViSW5zcGVjdG9yLmhh
c05vVmFsdWUoKSkgewogICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMjcsNyArMTE1NSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXIoKQogICAgIG1fZGVidWdnZXJFbmFibGVkID0g
dHJ1ZTsKICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7CiAKLSAgICBjYWxs
U2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImRlYnVnZ2Vy
V2FzRW5hYmxlZCIpOworICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dl
Ykluc3BlY3RvciwgImRlYnVnZ2VyV2FzRW5hYmxlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcigpCkBAIC0xMjQyLDggKzExNzAsOCBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVEZWJ1Z2dlcigpCiAgICAgbV9kZWJ1Z2dlckVuYWJs
ZWQgPSBmYWxzZTsKICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7CiAKLSAg
ICBpZiAobV9zY3JpcHRDb250ZXh0ICYmIG1fc2NyaXB0T2JqZWN0KQotICAgICAgICBjYWxsU2lt
cGxlRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImRlYnVnZ2VyV2Fz
RGlzYWJsZWQiKTsKKyAgICBpZiAoaGFzV2ViSW5zcGVjdG9yKCkpCisgICAgICAgIGNhbGxTaW1w
bGVGdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRlYnVnZ2VyV2FzRGlz
YWJsZWQiKTsKIH0KIAogSmF2YVNjcmlwdENhbGxGcmFtZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y3VycmVudENhbGxGcmFtZSgpIGNvbnN0CkBAIC0xNDg1LDM4ICsxNDEzLDEzIEBAIGJvb2wgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUm
IGVsYXBzZWQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aGFuZGxlRXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGV4Y2Vw
dGlvbiwgdW5zaWduZWQgbGluZU51bWJlcikgY29uc3QKLXsKLSAgICBpZiAoIWV4Y2VwdGlvbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSB0b1N0cmluZyhjb250ZXh0LCBleGNlcHRp
b24sIDApOwotICAgIFN0cmluZyBmaWxlKF9fRklMRV9fKTsKLQotICAgIGlmIChKU09iamVjdFJl
ZiBleGNlcHRpb25PYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgZXhjZXB0aW9uLCAw
KSkgewotICAgICAgICBKU1ZhbHVlUmVmIGxpbmVWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgZXhjZXB0aW9uT2JqZWN0LCBqc1N0cmluZ1JlZigibGluZSIpLmdldCgpLCBOVUxM
KTsKLSAgICAgICAgaWYgKGxpbmVWYWx1ZSkKLSAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxpbmVWYWx1ZSwgMCkp
OwotCi0gICAgICAgIEpTVmFsdWVSZWYgZmlsZVZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShj
b250ZXh0LCBleGNlcHRpb25PYmplY3QsIGpzU3RyaW5nUmVmKCJzb3VyY2VVUkwiKS5nZXQoKSwg
TlVMTCk7Ci0gICAgICAgIGlmIChmaWxlVmFsdWUpCi0gICAgICAgICAgICBmaWxlID0gdG9TdHJp
bmcoY29udGV4dCwgZmlsZVZhbHVlLCAwKTsKLSAgICB9Ci0KLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGZpbGUpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAKIC8vIEphdmFT
Y3JpcHREZWJ1Z0xpc3RlbmVyIGZ1bmN0aW9ucwogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKIHsK
LSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24odG9KUyhtX3NjcmlwdENvbnRleHQpLCB0
b0pTKG1fc2NyaXB0T2JqZWN0KSwgInBhcnNlZFNjcmlwdFNvdXJjZSIpOworICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInBhcnNl
ZFNjcmlwdFNvdXJjZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKSkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoc291cmNlLmRhdGEoKSk7CkBAIC0xNTI2LDcgKzE0MjksNyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNl
U291cmNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50IGVycm9yTGlu
ZSwgY29uc3QgVVN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbih0b0pTKG1fc2NyaXB0Q29udGV4dCksIHRvSlMobV9zY3JpcHRPYmplY3QpLCAi
ZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImZhaWxlZFRvUGFyc2VTY3JpcHRT
b3VyY2UiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UucHJvdmlkZXIoKS0+
dXJsKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5kYXRhKCkpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5maXJzdExpbmUoKSk7CkBAIC0xNTM3LDcg
KzE0NDAsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZhaWxlZFRvUGFyc2VTb3VyY2Uo
RXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYgc291cgogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFBhdXNlKCkKIHsKLSAgICBjYWxsU2ltcGxlRnVuY3Rpb24obV9zY3JpcHRDb250
ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBhdXNlZFNjcmlwdCIpOworICAgIGNhbGxTaW1wbGVGdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgInBhdXNlZFNjcmlwdCIpOwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA2NTc1
NDMwLi5jMWU3Y2I5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBA
IC0zMSw5ICszMSwxMSBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKwogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtMTkzLDkgKzE5NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIG1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdz
KTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCi0gICAgSlNDb250
ZXh0UmVmIHNjcmlwdENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdENvbnRleHQ7IH07
Ci0gICAgdm9pZCBzZXRTY3JpcHRDb250ZXh0KEpTQ29udGV4dFJlZiBjb250ZXh0KSB7IG1fc2Ny
aXB0Q29udGV4dCA9IGNvbnRleHQ7IH07Ci0KICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1Njcmlw
dE9iamVjdENsZWFyZWQoRnJhbWUqKTsKICAgICB2b2lkIHdpbmRvd1NjcmlwdE9iamVjdEF2YWls
YWJsZSgpOwogCkBAIC0yNjUsOSArMjY0LDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKKyAgICBib29sIGhh
c1dlYkluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0U3RhdGUgJiYgIW1fd2ViSW5z
cGVjdG9yLmhhc05vVmFsdWUoKTsgfQogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKLSAgICB2b2lk
IGFkZENvbnNvbGVNZXNzYWdlKEpTQzo6RXhlY1N0YXRlKiwgQ29uc29sZU1lc3NhZ2UqKTsKKyAg
ICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiwgQ29uc29sZU1lc3NhZ2UqKTsK
IAogICAgIHZvaWQgYWRkUmVzb3VyY2UoSW5zcGVjdG9yUmVzb3VyY2UqKTsKICAgICB2b2lkIHJl
bW92ZVJlc291cmNlKEluc3BlY3RvclJlc291cmNlKik7CkBAIC0yNzUsOCArMjc1LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBydW5lUmVzb3VyY2VzKFJlc291cmNlc01hcCosIERvY3VtZW50TG9h
ZGVyKiBsb2FkZXJUb0tlZXAgPSAwKTsKICAgICB2b2lkIHJlbW92ZUFsbFJlc291cmNlcyhSZXNv
dXJjZXNNYXAqIG1hcCkgeyBwcnVuZVJlc291cmNlcyhtYXApOyB9CiAKLSAgICBib29sIGhhbmRs
ZUV4Y2VwdGlvbihKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYgZXhjZXB0aW9uLCB1bnNpZ25lZCBs
aW5lTnVtYmVyKSBjb25zdDsKLQogICAgIHZvaWQgc2hvd1dpbmRvdygpOwogCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBAIC0zMDMsOSArMzAxLDggQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc1NldCBtX2RvbVN0b3Jh
Z2VSZXNvdXJjZXM7CiAjZW5kaWYKLSAgICBKU09iamVjdFJlZiBtX3NjcmlwdE9iamVjdDsKLSAg
ICBKU09iamVjdFJlZiBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3Q7Ci0gICAgSlNDb250ZXh0UmVm
IG1fc2NyaXB0Q29udGV4dDsKKyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAg
U2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAgICAgYm9vbCBtX3dpbmRvd1Zpc2libGU7CiAj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2VyRW5hYmxl
ZDsK
</data>
<flag name="review"
          id="14561"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>