<?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>34171</bug_id>
          
          <creation_ts>2010-01-26 10:02:08 -0800</creation_ts>
          <short_desc>Web Inspector: migrate from SourceFrame to SourceFrame2.</short_desc>
          <delta_ts>2010-01-27 10:37:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184619</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-26 10:02:08 -0800</bug_when>
    <thetext>Patch that I will attach shortly has a number of limitations:
- poor performance on long lines
- search marks results with selection highlight
- HTML highlighter does not treat script tag well ( &lt; inside script starts a tag)

But I will polish it all :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184620</commentid>
    <comment_count>1</comment_count>
      <attachid>47419</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-26 10:03:31 -0800</bug_when>
    <thetext>Created attachment 47419
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185142</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-27 10:37:23 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	WebCore/inspector/front-end/SourceFrame2.js
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/bindings/js/JSInspectorFrontendHostCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorFrontendHostCustom.cpp
	M	WebCore/inspector/InspectorFrontendHost.cpp
	M	WebCore/inspector/InspectorFrontendHost.h
	M	WebCore/inspector/InspectorFrontendHost.idl
	M	WebCore/inspector/front-end/InspectorBackendStub.js
	M	WebCore/inspector/front-end/InspectorFrontendHostStub.js
	M	WebCore/inspector/front-end/ResourceView.js
	M	WebCore/inspector/front-end/ResourcesPanel.js
	M	WebCore/inspector/front-end/ScriptView.js
	M	WebCore/inspector/front-end/ScriptsPanel.js
	M	WebCore/inspector/front-end/SourceFrame.js
	M	WebCore/inspector/front-end/SourceView.js
	M	WebCore/inspector/front-end/TextEditor.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.html
	M	WebCore/inspector/front-end/textEditor.css
Committed r53941</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47419</attachid>
            <date>2010-01-26 10:03:31 -0800</date>
            <delta_ts>2010-01-26 13:32:16 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>source_frame_2</filename>
            <type>text/plain</type>
            <size>94632</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjA3NjdlZS4uNjI5OTU1ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4OSBAQAogMjAxMC0wMS0yNiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtaWdyYXRlIGZyb20gU291cmNlRnJh
bWUgdG8gU291cmNlRnJhbWUyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDE3MQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tl
bmRTdHViLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVmll
dy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucHJvdG90eXBlLl9pbm5l
clNlbGVjdENvbnRlbnRUYWIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3Vy
Y2VzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZ2V0UmVzb3VyY2VDb250ZW50KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmll
dy5wcm90b3R5cGUuc2V0dXBTb3VyY2VGcmFtZUlmTmVlZGVkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRzUGFuZWwucHJvdG90eXBlLl9zaWRlYmFyUmVzaXplRHJhZyk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnNl
dCBleGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuYWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlLmNsZWFyTWVzc2FnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zaXplVG9GaXRDb250ZW50SGVpZ2h0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2V0Q29udGVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmZpbmRTZWFyY2hNYXRjaGVzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NvbGxlY3RSZWdl
eE1hdGNoZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5z
ZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5faW5jcmVtZW50TWVzc2FnZVJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRNZXNzYWdlVG9Tb3Vy
Y2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYWRkRXhp
c3RpbmdCcmVha3BvaW50c1RvU291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9yZW1vdmVCcmVha3BvaW50RnJvbVNvdXJjZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jb250ZXh0TWVu
dS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fdG9nZ2xlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5jb21t
aXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZWRp
dEJyZWFrcG9pbnRDb25kaXRpb24uZGlzbWlzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3Nob3dCcmVha3BvaW50Q29uZGl0
aW9uUG9wdXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
Y3JlYXRlQ29uZGl0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9rZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX2V2YWxTZWxlY3Rpb25JbkNhbGxGcmFtZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9icmVha3BvaW50Q2hhbmdlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRMaW5lTnVtYmVyRGVjb3JhdG9yLnByb3RvdHlwZS5kZWNvcmF0
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3Iu
cHJvdG90eXBlLl9wYWludEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRMaW5lTnVtYmVyRGVjb3JhdG9yLnByb3RvdHlwZS5fcGFpbnRQcm9ncmFtQ291bnRlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IucHJv
dG90eXBlLm1vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVO
dW1iZXJEZWNvcmF0b3IucHJvdG90eXBlLmNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5FeGVjdXRpb25MaW5lRGVjb3JhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeGVj
dXRpb25MaW5lRGVjb3JhdG9yLnByb3RvdHlwZS5kZWNvcmF0ZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZTIuanM6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnNob3cp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnJlc2l6ZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuc2V0dXBTb3VyY2VGcmFt
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5f
Y29udGVudExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5
cGUucGVyZm9ybVNlYXJjaC5maW5kU2VhcmNoTWF0Y2hlcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlVmlldy5wcm90b3R5cGUucGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2p1bXBUb1NlYXJjaFJlc3VsdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX3NvdXJjZUZyYW1lU2V0dXBGaW5p
c2hlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9tb3VzZURvd24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jb3B5LmRlbGF5Q29weSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvcHkpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl9jdXQpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sOgorCisyMDEwLTAxLTI2ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hl
ci4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgc3VwcG9ydCBmb3IgYnJlYWtwb2ludHMs
IG1lc3NhZ2VzIGFuZCBzZWFyY2ggaW50byB0aGUgU291cmNlRnJhbWUyLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYTFjM2Fj
Li44ZGI3YzE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzczNSw3ICszNzM1LDYgQEAKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMnLAotICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcycsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VTeW50YXhIaWdobGlnaHRlci5qcycsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAzNmNjNWI3Li44NDJkZmVhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQzMDMyLDEwICs0MzAzMiw2IEBACiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXFNvdXJjZUZyYW1lMi5qcyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJ
CQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJj
ZUhUTUxUb2tlbml6ZXIuanMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCmluZGV4
IGZmMjNlODQuLjdiMDZiYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCkBAIC0zNiwxOCArMzYsMTAgQEAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnQuaCIKLSNpbmNsdWRlICJKU05vZGUuaCIKLSNpbmNsdWRlICJKU1Jhbmdl
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVBv
c2l0aW9uLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CkBAIC01Nyw0MiArNDks
NiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFs
dWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNlYXJjaChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBOb2RlKiBub2RlID0gdG9Ob2RlKGFyZ3MuYXQoMCkp
OwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBT
dHJpbmcgdGFyZ2V0ID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgcmVzdWx0OwotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2Uo
cmFuZ2VPZkNvbnRlbnRzKG5vZGUpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGRvIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1
bHRSYW5nZS0+Y29sbGFwc2VkKGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8v
IEEgbm9uLWNvbGxhcHNlZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFj
ZSBjYXNlcyBzdGlsbCBub3QKLSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBw
b3NpdGlvbiAoNDUwOTMyOCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAg
IFZpc2libGVQb3NpdGlvbiBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5n
ZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2li
bGVQb3NpdGlvbihzZWFyY2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICByZXN1bHQuYXBwZW5kKHRvSlMoZXhlYywgcmVzdWx0UmFuZ2UuZ2V0
KCkpKTsKLQotICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgbmV3U3RhcnQpOwot
ICAgIH0gd2hpbGUgKHRydWUpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHJl
c3VsdCk7Ci19Ci0KIEpTVmFsdWUgSlNJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0
TWVudShFeGVjU3RhdGUqIGV4ZWNTdGF0ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBp
ZiAoYXJncy5zaXplKCkgPCAyKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCmluZGV4IGFlNWI4Mjgu
LmRmNjNiZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVj
dG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEluc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKQEAgLTMxLDYxICszMSwxNSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmgi
CiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgotI2luY2x1ZGUgIk5v
ZGUuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKIAogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4
Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNlYXJjaENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgSU5DX1NUQVRTKCJJbnNwZWN0
b3JGcm9udGVuZEhvc3Quc2VhcmNoKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIE5vZGUqIG5vZGUgPSBWOE5v
ZGU6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIFN0cmlu
ZyB0YXJnZXQgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMV0pOwotICAgIGlm
ICh0YXJnZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0g
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcoKTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhub2RlKSk7Ci0KLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGRvIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdl
dCgpLCB0YXJnZXQsIHRydWUsIGZhbHNlKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29s
bGFwc2VkKGVjKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEEgbm9uLWNvbGxh
cHNlZCByZXN1bHQgcmFuZ2UgY2FuIGluIHNvbWUgZnVua3kgd2hpdGVzcGFjZSBjYXNlcyBzdGls
bCBub3QKLSAgICAgICAgLy8gYWR2YW5jZSB0aGUgcmFuZ2UncyBzdGFydCBwb3NpdGlvbiAoNDUw
OTMyOCkuIEJyZWFrIHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCi0gICAgICAgIFZpc2libGVQb3Np
dGlvbiBuZXdTdGFydCA9IGVuZFZpc2libGVQb3NpdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9X
TlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTdGFydCA9PSBzdGFydFZpc2libGVQb3NpdGlvbihz
ZWFyY2hSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICByZXN1bHQtPlNldCh2ODo6TnVtYmVyOjpOZXcoaW5kZXgrKyksIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVzdWx0UmFuZ2UucmVsZWFz
ZSgpKSk7Ci0KLSAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIG5ld1N0YXJ0KTsK
LSAgICB9IHdoaWxlICh0cnVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51Q2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5k
ZXggNmNmYWY1ZC4uZTMzODEzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY3BwCkBAIC0xNDksNTYgKzE0OSw2IEBAIGNvbnN0IFN0cmluZyYgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Ojpwb3J0KCkgY29uc3QKICAgICByZXR1cm4gcG9ydDsKIH0KIAotLy8gRklY
TUU6IFJlbW92ZSB0aGlzIG9uY2UgbWlncmF0ZWQgdG8gU291cmNlRnJhbWUyLgotdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmFkZFJlc291cmNlU291cmNlVG9GcmFtZShsb25nIGlkZW50aWZp
ZXIsIE5vZGUqIGZyYW1lKQotewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0KGlkZW50aWZpZXIpOwotICAgIGlm
IChyZXNvdXJjZSkgewotICAgICAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3VyY2UtPnNv
dXJjZVN0cmluZygpOwotICAgICAgICBpZiAoIXNvdXJjZVN0cmluZy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBhZGRTb3VyY2VUb0ZyYW1lKHJlc291cmNlLT5taW1lVHlwZSgpLCBzb3VyY2VTdHJp
bmcsIGZyYW1lKTsKLSAgICB9Ci19Ci0KLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIG1pZ3Jh
dGVkIHRvIFNvdXJjZUZyYW1lMi4KLWJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjphZGRTb3Vy
Y2VUb0ZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBO
b2RlKiBmcmFtZU5vZGUpCi17Ci0gICAgQVNTRVJUX0FSRyhmcmFtZU5vZGUsIGZyYW1lTm9kZSk7
Ci0KLSAgICBpZiAoIWZyYW1lTm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFmcmFtZU5vZGUtPmF0dGFjaGVkKCkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZnJhbWVOb2RlLT5p
c0VsZW1lbnROb2RlKCkpOwotICAgIGlmICghZnJhbWVOb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oZnJhbWVOb2RlKTsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNGcmFtZU93bmVy
RWxlbWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93
bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAg
QVNTRVJUKGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lT3duZXIt
PmNvbnRlbnRGcmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZUxvYWRl
ciogbG9hZGVyID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCktPmxvYWRlcigpOwotCi0gICAg
bG9hZGVyLT5zZXRSZXNwb25zZU1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBsb2FkZXItPmJlZ2lu
KCk7Ci0gICAgbG9hZGVyLT53cml0ZShzb3VyY2UpOwotICAgIGxvYWRlci0+ZW5kKCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250
ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRl
bXMpCiB7CiAgICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5oCmluZGV4IGE5NWVjY2YuLjQwODczNGQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCkBAIC03MywxMCArNzMsNiBAQCBw
dWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBwbGF0Zm9ybSgpIGNvbnN0OwogICAgIGNvbnN0IFN0
cmluZyYgcG9ydCgpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBvbmNlIG1p
Z3JhdGVkIHRvIFNvdXJjZUZyYW1lMi4KLSAgICB2b2lkIGFkZFJlc291cmNlU291cmNlVG9GcmFt
ZShsb25nIGlkZW50aWZpZXIsIE5vZGUqIGZyYW1lKTsKLSAgICBib29sIGFkZFNvdXJjZVRvRnJh
bWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIE5vZGUqIGZy
YW1lKTsKLQogICAgIC8vIENhbGxlZCBmcm9tIFtDdXN0b21dIGltcGxlbWVudGF0aW9ucy4KICAg
ICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYgaXRlbXMpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmlkbAppbmRleCA3ZTdhNjJkLi45YWQwZmU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5pZGwKQEAgLTQ2LDExICs0Niw2IEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgRE9NU3RyaW5nIHBsYXRmb3JtKCk7CiAgICAgICAgIERPTVN0cmluZyBwb3J0KCk7CiAK
LSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBvbmNlIG1pZ3JhdGVkIHRvIFNvdXJjZUZy
YW1lMi4KLSAgICAgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoaW4gbG9uZyBpZGVu
dGlmaWVyLCBpbiBOb2RlIGZyYW1lKTsKLSAgICAgICAgYm9vbGVhbiBhZGRTb3VyY2VUb0ZyYW1l
KGluIERPTVN0cmluZyBtaW1lVHlwZSwgaW4gRE9NU3RyaW5nIHNvdXJjZVZhbHVlLCBpbiBOb2Rl
IGZyYW1lKTsKLQotICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlYXJjaChpbiBOb2RlIG5vZGUsIGlu
IERPTVN0cmluZyBxdWVyeSk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgc2hvd0NvbnRleHRNZW51
KGluIE1vdXNlRXZlbnQgZXZlbnQsIGluIERPTU9iamVjdCBpdGVtcyk7CiAgICAgfTsKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1
Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5q
cwppbmRleCAwMWFmZGZhLi4wYjQ1NWNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0xMDAsMjcgKzEwMCwxMSBAQCBX
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0gewogICAgIHsKICAg
ICB9LAogCi0gICAgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lOiBmdW5jdGlvbihpZGVudGlmaWVy
LCBlbGVtZW50KQotICAgIHsKLSAgICB9LAotCi0gICAgYWRkU291cmNlVG9GcmFtZTogZnVuY3Rp
b24obWltZVR5cGUsIHNvdXJjZSwgZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9LAotCi0gICAgLy8gRklYTUU6IHJlbW92ZSBvbmNlIG1pZ3JhdGVkIHRvIFNvdXJj
ZUZyYW1lMi4KICAgICBnZXRSZXNvdXJjZUNvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxJZCwgaWRlbnRp
ZmllcikKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kaWRHZXRSZXNvdXJjZUNvbnRlbnQo
Y2FsbElkLCAiIik7CiAgICAgfSwKIAotICAgIC8vIEZJWE1FOiByZW1vdmUgb25jZSBtaWdyYXRl
ZCB0byBTb3VyY2VGcmFtZTIuCi0gICAgZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGU6IGZ1bmN0aW9u
KGlkZW50aWZpZXIpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgIH0sCi0K
ICAgICBoaWdobGlnaHRET01Ob2RlOiBmdW5jdGlvbihub2RlKQogICAgIHsKICAgICB9LApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5qcwppbmRleCA1MzI4MDI5Li41MGU2MGRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpAQCAt
NzEsMTcgKzcxLDYgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJv
dG90eXBlID0gewogICAgIHsKICAgICB9LAogCi0gICAgLy8gRklYTUU6IHJlbW92ZSBvbmNlIG1p
Z3JhdGVkIHRvIFNvdXJjZUZyYW1lMi4KLSAgICBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWU6IGZ1
bmN0aW9uKGlkZW50aWZpZXIsIGVsZW1lbnQpCi0gICAgewotICAgIH0sCi0KLSAgICAvLyBGSVhN
RTogcmVtb3ZlIG9uY2UgbWlncmF0ZWQgdG8gU291cmNlRnJhbWUyLgotICAgIGFkZFNvdXJjZVRv
RnJhbWU6IGZ1bmN0aW9uKG1pbWVUeXBlLCBzb3VyY2UsIGVsZW1lbnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQogICAgIGxvYWRlZDogZnVuY3Rpb24oKQogICAgIHsK
ICAgICB9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
Vmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVZpZXcuanMKaW5k
ZXggYmFmNWQ3OS4uZWMxMTZmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2VWaWV3LmpzCkBAIC0xNzQsNiArMTc0LDggQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuaGVhZGVyc1RhYkVsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcygic2VsZWN0ZWQiKTsKICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVT
dHlsZUNsYXNzKCJoaWRkZW4iKTsKICAgICAgICAgdGhpcy5oZWFkZXJzRWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJoaWRkZW4iKTsKKyAgICAgICAgaWYgKCJyZXNpemUiIGluIHRoaXMpCisgICAgICAg
ICAgICB0aGlzLnJlc2l6ZSgpOwogICAgIH0sCiAKICAgICBfcmVmcmVzaFVSTDogZnVuY3Rpb24o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVs
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4
IDU1OGEwMTQuLmUwYzU1MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2VzUGFuZWwuanMKQEAgLTcxMCw2ICs3MTAsMTMgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3Rv
dHlwZTsKIAorV2ViSW5zcGVjdG9yLmdldFJlc291cmNlQ29udGVudCA9IGZ1bmN0aW9uKGlkZW50
aWZpZXIsIGNhbGxiYWNrKQoreworICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UmVzb3VyY2VDb250
ZW50KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgaWRlbnRpZmllcik7Cit9
CisKK1dlYkluc3BlY3Rvci5kaWRHZXRSZXNvdXJjZUNvbnRlbnQgPSBXZWJJbnNwZWN0b3IuQ2Fs
bGJhY2sucHJvY2Vzc0NhbGxiYWNrOworCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lQ2FsY3Vs
YXRvciA9IGZ1bmN0aW9uKHN0YXJ0QXRaZXJvKQogewogICAgIFdlYkluc3BlY3Rvci5BYnN0cmFj
dFRpbWVsaW5lQ2FsY3VsYXRvci5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0Vmlldy5qcwppbmRleCAzODE1N2FjLi4zMDMxMWY1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwpAQCAtMzMsMjUgKzMzLDEyIEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0KQogCiAgICAgdGhpcy5fZnJhbWVOZWVk
c1NldHVwID0gdHJ1ZTsKICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwID0gZmFsc2U7Ci0KLSAg
ICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZShudWxsLCB0
aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgIHRoaXMuc291cmNlRnJhbWUgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuX2FkZEJyZWFrcG9pbnQuYmluZCh0aGlz
KSk7CiAKICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zb3VyY2VGcmFtZS5lbGVt
ZW50KTsKIH0KIAogV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewotICAgIHNo
b3c6IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMsIHBhcmVudEVsZW1lbnQpOwotICAgICAgICB0
aGlzLnNldHVwU291cmNlRnJhbWVJZk5lZWRlZCgpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuaGlkZS5j
YWxsKHRoaXMpOwotICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsK
LSAgICB9LAotCiAgICAgc2V0dXBTb3VyY2VGcmFtZUlmTmVlZGVkOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lTmVlZHNTZXR1cCkKQEAgLTU5LDEzICs0Niw5IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmF0
dGFjaCgpOwogCi0gICAgICAgIGlmICghSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFkZFNvdXJjZVRv
RnJhbWUoInRleHQvamF2YXNjcmlwdCIsIHRoaXMuc2NyaXB0LnNvdXJjZSwgdGhpcy5zb3VyY2VG
cmFtZS5lbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5zb3VyY2VG
cmFtZS5zZXRDb250ZW50KCJ0ZXh0L2phdmFzY3JpcHQiLCB0aGlzLnNjcmlwdC5zb3VyY2UpOwog
CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU5lZWRzU2V0dXA7Ci0KLSAgICAgICAgdGhpcy5z
b3VyY2VGcmFtZS5hZGRFdmVudExpc3RlbmVyKCJzeW50YXggaGlnaGxpZ2h0aW5nIGNvbXBsZXRl
IiwgdGhpcy5fc3ludGF4SGlnaGxpZ2h0aW5nQ29tcGxldGUsIHRoaXMpOwotICAgICAgICB0aGlz
LnNvdXJjZUZyYW1lLnN5bnRheEhpZ2hsaWdodEphdmFzY3JpcHQoKTsKICAgICB9LAogCiAgICAg
YXR0YWNoOiBmdW5jdGlvbigpCkBAIC04Myw2ICs2Niw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAvLyBUaGUgZm9sbG93IG1ldGhvZHMgYXJlIHB1bGxlZCBm
cm9tIFNvdXJjZVZpZXcsIHNpbmNlIHRoZXkgYXJlCiAgICAgLy8gZ2VuZXJpYyBhbmQgd29yayB3
aXRoIFNjcmlwdFZpZXcganVzdCBmaW5lLgogCisgICAgc2hvdzogV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlLnNob3csCisgICAgaGlkZTogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcu
cHJvdG90eXBlLmhpZGUsCiAgICAgcmV2ZWFsTGluZTogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcu
cHJvdG90eXBlLnJldmVhbExpbmUsCiAgICAgaGlnaGxpZ2h0TGluZTogV2ViSW5zcGVjdG9yLlNv
dXJjZVZpZXcucHJvdG90eXBlLmhpZ2hsaWdodExpbmUsCiAgICAgYWRkTWVzc2FnZTogV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLmFkZE1lc3NhZ2UsCkBAIC05Nyw3ICs4Miw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAgICBzaG93aW5nTGFzdFNl
YXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnNob3dpbmdMYXN0
U2VhcmNoUmVzdWx0LAogICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAogICAgIF9zb3VyY2VGcmFtZVNl
dHVwRmluaXNoZWQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fc291cmNlRnJh
bWVTZXR1cEZpbmlzaGVkLAotICAgIF9zeW50YXhIaWdobGlnaHRpbmdDb21wbGV0ZTogV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9zeW50YXhIaWdobGlnaHRpbmdDb21wbGV0ZQor
ICAgIHJlc2l6ZTogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnJlc2l6ZQogfQog
CiBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLlZpZXcucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRz
UGFuZWwuanMKaW5kZXggNzVmNWM5Yy4uZGEyNGVkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBAIC03OTksNiArNzk5LDcgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2lkZWJhclJlc2l6ZVdp
ZGdldEVsZW1lbnQuc3R5bGUucmlnaHQgPSBuZXdXaWR0aCArICJweCI7CiAgICAgICAgIHRoaXMu
c2lkZWJhclJlc2l6ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAobmV3V2lkdGggLSAzKSArICJweCI7
CiAKKyAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKICAgICB9LAogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzCmluZGV4IGRlYjE0OTQuLmQwNWMxOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKQEAgLTEsNDUgKzEsNTQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEpvc2VwaCBQZWNvcmFybworICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgYWRkQnJlYWtwb2ludERl
bGVnYXRlKQorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24oYWRkQnJlYWtwb2lu
dERlbGVnYXRlKQogewotICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKKyAgICB0aGlzLl9lZGl0b3Ig
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IoV2ViSW5zcGVjdG9yLnBsYXRmb3JtKTsKKyAg
ICB0aGlzLl90ZXh0TW9kZWwgPSB0aGlzLl9lZGl0b3IudGV4dE1vZGVsOworICAgIHRoaXMuX2Vk
aXRvci5saW5lTnVtYmVyRGVjb3JhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TGlu
ZU51bWJlckRlY29yYXRvcih0aGlzKTsKKyAgICB0aGlzLl9lZGl0b3IubGluZURlY29yYXRvciA9
IG5ldyBXZWJJbnNwZWN0b3IuRXhlY3V0aW9uTGluZURlY29yYXRvcih0aGlzKTsKKyAgICB0aGlz
Ll9lZGl0b3IucmVhZE9ubHkgPSB0cnVlOworICAgIHRoaXMuX21lc3NhZ2VzID0gW107CisgICAg
dGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKKyAgICB0aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9Owog
ICAgIHRoaXMuYnJlYWtwb2ludHMgPSBbXTsKICAgICB0aGlzLl9zaG9ydGN1dHMgPSB7fTsKKyAg
ICB0aGlzLmVsZW1lbnQgPSB0aGlzLl9lZGl0b3IuZWxlbWVudDsKKyAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2tleURvd24uYmluZCh0aGlzKSwgdHJ1
ZSk7CisgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7CiAKICAgICB0aGlzLmFkZEJyZWFrcG9pbnRE
ZWxlZ2F0ZSA9IGFkZEJyZWFrcG9pbnREZWxlZ2F0ZTsKLQotICAgIHRoaXMuZWxlbWVudCA9IGVs
ZW1lbnQgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Ci0gICAgdGhpcy5lbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS12aWV3LWZyYW1lIik7Ci0gICAgdGhpcy5lbGVtZW50
LnNldEF0dHJpYnV0ZSgidmlld3NvdXJjZSIsICJ0cnVlIik7Ci0KLSAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHRoaXMuX2xvYWRlZC5iaW5kKHRoaXMpLCBmYWxzZSk7
CiB9CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CisKICAgICBnZXQg
ZXhlY3V0aW9uTGluZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uTGlu
ZTsKQEAgLTQ5LDU5ICs1OCwyNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUgPT09IHgpCiAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHByZXZpb3VzTGluZSA9IHRoaXMuX2V4ZWN1
dGlvbkxpbmU7CiAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkxpbmUgPSB4OwotCi0gICAgICAgIHRo
aXMuX3VwZGF0ZUV4ZWN1dGlvbkxpbmUocHJldmlvdXNMaW5lKTsKLSAgICB9LAotCi0gICAgc291
cmNlUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKCFsaW5lTnVt
YmVyIHx8ICF0aGlzLmVsZW1lbnQuY29udGVudERvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHZhciB0YWJsZSA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF07Ci0gICAgICAgIGlmICghdGFibGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOwotCi0gICAg
ICAgIC8vIExpbmUgbnVtYmVycyBhcmUgYSAxLWJhc2VkIGluZGV4LCBidXQgdGhlIHJvd3MgY29s
bGVjdGlvbiBpcyAwLWJhc2VkLgotICAgICAgICAtLWxpbmVOdW1iZXI7Ci0KLSAgICAgICAgcmV0
dXJuIHJvd3NbbGluZU51bWJlcl07Ci0gICAgfSwKLQotICAgIGxpbmVOdW1iZXJGb3JTb3VyY2VS
b3c6IGZ1bmN0aW9uKHNvdXJjZVJvdykKLSAgICB7Ci0gICAgICAgIC8vIExpbmUgbnVtYmVycyBh
cmUgYSAxLWJhc2VkIGluZGV4LCBidXQgdGhlIHJvd3MgY29sbGVjdGlvbiBpcyAwLWJhc2VkLgot
ICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7Ci0gICAgICAgIHdoaWxlIChzb3VyY2VSb3cpIHsK
LSAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgIHNvdXJjZVJvdyA9IHNvdXJj
ZVJvdy5wcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbGluZU51
bWJlcjsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnJlcGFpbnRBbGwoKTsKICAgICB9LAogCiAgICAg
cmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5faXNDb250ZW50TG9hZGVkKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWQpCiAgICAg
ICAgICAgICB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWwgPSBsaW5lTnVtYmVyOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJvdyA9IHRoaXMuc291cmNlUm93
KGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAocm93KQotICAgICAgICAgICAgcm93LnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQodHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2Vk
aXRvci5yZXZlYWwobGluZU51bWJlciAtIDEsIDApOwogICAgIH0sCiAKICAgICBhZGRCcmVha3Bv
aW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAgICAgdGhpcy5icmVha3BvaW50
cy5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIo
ImVuYWJsZWQiLCB0aGlzLl9icmVha3BvaW50RW5hYmxlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgICAg
IGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQiLCB0aGlzLl9icmVha3BvaW50
RW5hYmxlQ2hhbmdlZCwgdGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5l
cigiZW5hYmxlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgYnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJkaXNhYmxlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFu
Z2VkLCB0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJjb25kaXRp
b24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKICAgICAgICAgdGhp
cy5fYWRkQnJlYWtwb2ludFRvU291cmNlKGJyZWFrcG9pbnQpOwogICAgIH0sCiAKQEAgLTExMCw2
ICs4NCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwogICAgICAgICBicmVha3BvaW50
LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCBudWxsLCB0aGlzKTsKICAgICAgICAgYnJl
YWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNhYmxlZCIsIG51bGwsIHRoaXMpOworICAg
ICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwg
bnVsbCwgdGhpcyk7CiAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNlKGJy
ZWFrcG9pbnQpOwogICAgIH0sCiAKQEAgLTExOCwyMzAgKzkzLDI1MyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAvLyBEb24ndCBhZGQgdGhlIG1lc3Nh
Z2UgaWYgdGhlcmUgaXMgbm8gbWVzc2FnZSBvciB2YWxpZCBsaW5lIG9yIGlmIHRoZSBtc2cgaXNu
J3QgYW4gZXJyb3Igb3Igd2FybmluZy4KICAgICAgICAgaWYgKCFtc2cubWVzc2FnZSB8fCBtc2cu
bGluZSA8PSAwIHx8ICFtc2cuaXNFcnJvck9yV2FybmluZygpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnKTsKKyAgICAgICAgdGhpcy5fbWVzc2Fn
ZXMucHVzaChtc2cpOwogICAgICAgICB0aGlzLl9hZGRNZXNzYWdlVG9Tb3VyY2UobXNnKTsKICAg
ICB9LAogCiAgICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhp
cy5tZXNzYWdlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBsaW5lIGluIHRoaXMuX21lc3NhZ2VC
dWJibGVzKSB7CisgICAgICAgICAgICB2YXIgYnViYmxlID0gdGhpcy5fbWVzc2FnZUJ1YmJsZXNb
bGluZV07CisgICAgICAgICAgICBidWJibGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChidWJibGUp
OworICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuY29udGVudERvY3VtZW50
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOworICAg
ICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OworICAgICAgICB0aGlzLl9tZXNzYWdlQnViYmxl
cyA9IHt9OworICAgICAgICB0aGlzLl9lZGl0b3IucGFja0FuZFJlcGFpbnRBbGwoKTsKKyAgICB9
LAogCi0gICAgICAgIHZhciBidWJibGVzID0gdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKCIud2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUiKTsKLSAgICAgICAg
aWYgKCFidWJibGVzKQotICAgICAgICAgICAgcmV0dXJuOworICAgIHNpemVUb0ZpdENvbnRlbnRI
ZWlnaHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2VkaXRvci5wYWNrQW5kUmVw
YWludEFsbCgpOworICAgIH0sCiAKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWJibGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgYnViYmxlID0gYnViYmxlc1tpXTsKLSAg
ICAgICAgICAgIGJ1YmJsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGJ1YmJsZSk7CisgICAgc2V0
Q29udGVudDogZnVuY3Rpb24obWltZVR5cGUsIGNvbnRlbnQpCisgICAgeworICAgICAgICB0aGlz
Ll9sb2FkZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9lZGl0b3IubWltZVR5cGUgPSBtaW1lVHlw
ZTsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnRleHQgPSBjb250ZW50OworCisgICAgICAgIHRoaXMu
X2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSgpOworICAgICAgICB0aGlzLl9hZGRFeGlzdGlu
Z0JyZWFrcG9pbnRzVG9Tb3VyY2UoKTsKKyAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxpbmUp
CisgICAgICAgICAgICB0aGlzLnJldmVhbExpbmUodGhpcy5fZXhlY3V0aW9uTGluZSk7CisKKyAg
ICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJUb1JldmVhbCkgeworICAgICAgICAgICAgdGhpcy5y
ZXZlYWxMaW5lKHRoaXMuX2xpbmVOdW1iZXJUb1JldmVhbCk7CisgICAgICAgICAgICBkZWxldGUg
dGhpcy5fbGluZU51bWJlclRvUmV2ZWFsOwogICAgICAgICB9CisgICAgICAgIHRoaXMuX2VkaXRv
ci5zZXRDb2FsZXNjaW5nVXBkYXRlKHRydWUpOworICAgICAgICB0aGlzLl9lZGl0b3IudXBkYXRl
Q2FudmFzU2l6ZSgpOworICAgICAgICB0aGlzLl9lZGl0b3IucGFja0FuZFJlcGFpbnRBbGwoKTsK
KyAgICAgICAgdGhpcy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUoZmFsc2UpOwogICAgIH0s
CiAKLSAgICBzaXplVG9GaXRDb250ZW50SGVpZ2h0OiBmdW5jdGlvbigpCisgICAgZmluZFNlYXJj
aE1hdGNoZXM6IGZ1bmN0aW9uKHF1ZXJ5KQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuZWxlbWVu
dC5jb250ZW50RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQ
cm9wZXJ0eSgiaGVpZ2h0IiwgdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5ib2R5Lm9mZnNl
dEhlaWdodCArICJweCIpOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVu
dC5ib2R5LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1oZWlnaHQtc2l6ZWQtdG8tZml0Iik7CisgICAg
ICAgIHZhciByYW5nZXMgPSBbXTsKKworICAgICAgICAvLyBGaXJzdCBkbyBjYXNlLWluc2Vuc2l0
aXZlIHNlYXJjaC4KKyAgICAgICAgdmFyIHJlZ2V4ID0gIiI7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcXVlcnkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaGFyID0gcXVl
cnkuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGNoYXIgPT09ICJdIikKKyAgICAgICAgICAg
ICAgICBjaGFyID0gIlxcXSI7CisgICAgICAgICAgICByZWdleCArPSAiWyIgKyBjaGFyICsgIl0i
OwogICAgICAgICB9CisgICAgICAgIHZhciByZWdleE9iamVjdCA9IG5ldyBSZWdFeHAocmVnZXgs
ICJpIik7CisgICAgICAgIHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMocmVnZXhPYmplY3QsIHJh
bmdlcyk7CisKKyAgICAgICAgLy8gVGhlbiB0cnkgcmVnZXggc2VhcmNoIGlmIHVzZXIga25vd3Mg
dGhlIC8gLyBoaW50LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKC9eXC8uKlwvJC8u
dGVzdChxdWVyeSkpCisgICAgICAgICAgICAgICAgdGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhu
ZXcgUmVnRXhwKHF1ZXJ5LnN1YnN0cmluZygxLCBxdWVyeS5sZW5ndGggLSAxKSksIHJhbmdlcyk7
CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIFNpbGVudCBjYXRjaC4KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2VzOworICAgIH0sCisKKyAgICBfY29sbGVjdFJl
Z2V4TWF0Y2hlczogZnVuY3Rpb24ocmVnZXhPYmplY3QsIHJhbmdlcykKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKKyAgICAgICAg
ICAgIHZhciBvZmZzZXQgPSAwOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHZh
ciBtYXRjaCA9IHJlZ2V4T2JqZWN0LmV4ZWMobGluZSk7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlKGksIG9mZnNldCArIG1hdGNoLmluZGV4LCBpLCBvZmZzZXQgKyBtYXRjaC5pbmRl
eCArIG1hdGNoWzBdLmxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWF0
Y2guaW5kZXggKyAxOworICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmco
bWF0Y2guaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxl
IChtYXRjaCkKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0sCiAKLSAg
ICBfaGlnaGxpZ2h0TGluZUVuZHM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHNldFNlbGVjdGlvbjog
ZnVuY3Rpb24ocmFuZ2UpCiAgICAgewotICAgICAgICBldmVudC50YXJnZXQucGFyZW50Tm9kZS5y
ZW1vdmVTdHlsZUNsYXNzKCJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOworICAgICAgICB0aGlz
Ll9lZGl0b3Iuc2V0U2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4s
IHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CiAgICAgfSwKIAotICAgIGhpZ2hsaWdo
dExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgX2luY3JlbWVudE1lc3NhZ2VSZXBlYXRD
b3VudDogZnVuY3Rpb24obXNnLCByZXBlYXREZWx0YSkKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5faXNDb250ZW50TG9hZGVkKCkpIHsKLSAgICAgICAgICAgIHRoaXMuX2xpbmVOdW1iZXJUb0hp
Z2hsaWdodCA9IGxpbmVOdW1iZXI7CisgICAgICAgIGlmICghbXNnLl9yZXNvdXJjZU1lc3NhZ2VM
aW5lRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1zZy5fcmVz
b3VyY2VNZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50KSB7CisgICAgICAgICAgICB2YXIgcmVwZWF0
ZWRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAg
bXNnLl9yZXNvdXJjZU1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGlsZChyZXBlYXRlZEVsZW1l
bnQpOworICAgICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQg
PSByZXBlYXRlZEVsZW1lbnQ7CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc291cmNlUm93ID0g
dGhpcy5zb3VyY2VSb3cobGluZU51bWJlcik7Ci0gICAgICAgIGlmICghc291cmNlUm93KQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgbGluZSA9IHNvdXJjZVJvdy5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCd3ZWJraXQtbGluZS1jb250ZW50JylbMF07Ci0gICAgICAgIC8vIFRyaWNr
IHRvIHJlc2V0IHRoZSBhbmltYXRpb24gaWYgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBzYW1lIGxp
bmsKLSAgICAgICAgLy8gVXNpbmcgYSB0aW1lb3V0IHRvIGF2b2lkIGNvYWxlc2NlZCBzdHlsZSB1
cGRhdGVzCi0gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoIi13ZWJraXQtYW5pbWF0aW9u
LW5hbWUiLCAibm9uZSIpOwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIGxpbmUuc3R5bGUucmVtb3ZlUHJvcGVydHkoIi13ZWJraXQtYW5pbWF0aW9uLW5hbWUi
KTsKLSAgICAgICAgICAgIHNvdXJjZVJvdy5hZGRTdHlsZUNsYXNzKCJ3ZWJraXQtaGlnaGxpZ2h0
ZWQtbGluZSIpOwotICAgICAgICB9LCAwKTsKKyAgICAgICAgbXNnLnJlcGVhdENvdW50ICs9IHJl
cGVhdERlbHRhOworICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZVJlcGVhdENvdW50RWxlbWVu
dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiIChyZXBlYXRlZCAlZCB0aW1l
cykiLCBtc2cucmVwZWF0Q291bnQpOwogICAgIH0sCiAKLSAgICBfbG9hZGVkOiBmdW5jdGlvbigp
CisgICAgX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZTogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmFkZE1haW5FdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQuY29u
dGVudERvY3VtZW50KTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2RvY3VtZW50Q29udGV4dE1lbnUuYmlu
ZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fZG9jdW1lbnRNb3VzZURvd24uYmluZCh0
aGlzKSwgdHJ1ZSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2RvY3VtZW50S2V5RG93bi5iaW5kKHRoaXMpLCB0
cnVlKTsKLSAgICAgICAgdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJ3ZWJraXRBbmltYXRpb25FbmQiLCB0aGlzLl9oaWdobGlnaHRMaW5lRW5kcy5iaW5kKHRo
aXMpLCBmYWxzZSk7CisgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLl9tZXNzYWdlcy5sZW5ndGg7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0
aGlzLl9hZGRNZXNzYWdlVG9Tb3VyY2UodGhpcy5fbWVzc2FnZXNbaV0pOworICAgIH0sCiAKLSAg
ICAgICAgLy8gUmVnaXN0ZXIgJ2V2YWwnIHNob3J0Y3V0LgotICAgICAgICB2YXIgcGxhdGZvcm1T
cGVjaWZpY01vZGlmaWVyID0gV2ViSW5zcGVjdG9yLmlzTWFjKCkgPyBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuTWV0YSA6IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lk1vZGlmaWVycy5DdHJsOwotICAgICAgICB2YXIgc2hvcnRjdXQgPSBXZWJJbnNwZWN0b3Iu
S2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5KDY5IC8qICdFJyAqLywgcGxhdGZvcm1TcGVjaWZpY01v
ZGlmaWVyIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXJzLlNoaWZ0KTsK
LSAgICAgICAgdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0XSA9IHRoaXMuX2V2YWxTZWxlY3Rpb25J
bkNhbGxGcmFtZS5iaW5kKHRoaXMpOworICAgIF9hZGRNZXNzYWdlVG9Tb3VyY2U6IGZ1bmN0aW9u
KG1zZykKKyAgICB7CisgICAgICAgIGlmIChtc2cubGluZSA+PSB0aGlzLl90ZXh0TW9kZWwubGlu
ZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgaGVhZEVsZW1lbnQg
PSB0aGlzLmVsZW1lbnQuY29udGVudERvY3VtZW50LmhlYWQ7Ci0gICAgICAgIGlmICghaGVhZEVs
ZW1lbnQpIHsKLSAgICAgICAgICAgIGhlYWRFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNvbnRlbnRE
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJoZWFkIik7Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQu
Y29udGVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoaGVhZEVsZW1lbnQs
IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQp
OworICAgICAgICB2YXIgbWVzc2FnZUJ1YmJsZUVsZW1lbnQgPSB0aGlzLl9tZXNzYWdlQnViYmxl
c1ttc2cubGluZV07CisgICAgICAgIGlmICghbWVzc2FnZUJ1YmJsZUVsZW1lbnQgfHwgbWVzc2Fn
ZUJ1YmJsZUVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8ICFtZXNzYWdl
QnViYmxlRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJ3ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSIp
KSB7CisgICAgICAgICAgICBtZXNzYWdlQnViYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQuY2xhc3NOYW1l
ID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtYnViYmxlIjsKKyAgICAgICAgICAgIHRoaXMuX21lc3Nh
Z2VCdWJibGVzW21zZy5saW5lXSA9IG1lc3NhZ2VCdWJibGVFbGVtZW50OworICAgICAgICAgICAg
dGhpcy5fZWRpdG9yLnNldERpdkRlY29yYXRpb24obXNnLmxpbmUgLSAxLCBtZXNzYWdlQnViYmxl
RWxlbWVudCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZhciBsaW5rRWxlbWVudCA9
IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwotICAg
ICAgICBsaW5rRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKLSAgICAgICAgbGlua0VsZW1lbnQu
cmVsID0gInN0eWxlc2hlZXQiOwotICAgICAgICBsaW5rRWxlbWVudC5ocmVmID0gImluc3BlY3Rv
clN5bnRheEhpZ2hsaWdodC5jc3MiOwotICAgICAgICBoZWFkRWxlbWVudC5hcHBlbmRDaGlsZChs
aW5rRWxlbWVudCk7Ci0KLSAgICAgICAgdmFyIHN0eWxlRWxlbWVudCA9IHRoaXMuZWxlbWVudC5j
b250ZW50RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKLSAgICAgICAgaGVhZEVsZW1l
bnQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKLQotICAgICAgICAvLyBBZGQgdGhlc2Ugc3R5
bGUgcnVsZXMgaGVyZSBzaW5jZSB0aGV5IGFyZSBzcGVjaWZpYyB0byB0aGUgSW5zcGVjdG9yLiBU
aGV5IGFsc28gYmVoYXZlIG9kZGx5IGFuZCBub3QKLSAgICAgICAgLy8gYWxsIHByb3BlcnRpZXMg
YXBwbHkgaWYgYWRkZWQgdG8gdmlldy1zb3VyY2UuY3NzIChiZWNhdXNlIGl0IGlzIGEgdXNlciBh
Z2VudCBzaGVldC4pCi0gICAgICAgIHZhciBzdHlsZVRleHQgPSAiLndlYmtpdC1saW5lLW51bWJl
ciB7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IHJp
Z2h0IDFweDsgfVxuIjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWV4ZWN1dGlvbi1s
aW5lIC53ZWJraXQtbGluZS1udW1iZXIgeyBjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQt
aW1hZ2U6IC13ZWJraXQtY2FudmFzKHByb2dyYW0tY291bnRlcik7IH1cbiI7Ci0KLSAgICAgICAg
c3R5bGVUZXh0ICs9ICIud2Via2l0LWJyZWFrcG9pbnQgLndlYmtpdC1saW5lLW51bWJlciB7IGNv
bG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludCk7
IH1cbiI7Ci0gICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1icmVha3BvaW50LWRpc2FibGVk
IC53ZWJraXQtbGluZS1udW1iZXIgeyBjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtaW1hZ2U6IC13
ZWJraXQtY2FudmFzKGJyZWFrcG9pbnQtZGlzYWJsZWQpOyB9XG4iOwotICAgICAgICBzdHlsZVRl
eHQgKz0gIi53ZWJraXQtYnJlYWtwb2ludC53ZWJraXQtZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1s
aW5lLW51bWJlciB7IGNvbG9yOiB0cmFuc3BhcmVudDsgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtp
dC1jYW52YXMoYnJlYWtwb2ludC1wcm9ncmFtLWNvdW50ZXIpOyB9XG4iOwotICAgICAgICBzdHls
ZVRleHQgKz0gIi53ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZC53ZWJraXQtZXhlY3V0aW9uLWxp
bmUgLndlYmtpdC1saW5lLW51bWJlciB7IGNvbG9yOiB0cmFuc3BhcmVudDsgYmFja2dyb3VuZC1p
bWFnZTogLXdlYmtpdC1jYW52YXMoYnJlYWtwb2ludC1kaXNhYmxlZC1wcm9ncmFtLWNvdW50ZXIp
OyB9XG4iOwotCi0gICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1icmVha3BvaW50LndlYmtp
dC1icmVha3BvaW50LWNvbmRpdGlvbmFsIC53ZWJraXQtbGluZS1udW1iZXIgeyBjb2xvcjogd2hp
dGU7IGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGJyZWFrcG9pbnQtY29uZGl0aW9u
YWwpOyB9XG4iOwotICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtYnJlYWtwb2ludC1kaXNh
YmxlZC53ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCAud2Via2l0LWxpbmUtbnVtYmVyIHsg
Y29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWNhbnZhcyhicmVha3BvaW50
LWRpc2FibGVkLWNvbmRpdGlvbmFsKTsgfVxuIjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Vi
a2l0LWJyZWFrcG9pbnQud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwud2Via2l0LWV4ZWN1
dGlvbi1saW5lIC53ZWJraXQtbGluZS1udW1iZXIgeyBjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tn
cm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGJyZWFrcG9pbnQtY29uZGl0aW9uYWwtcHJvZ3Jh
bS1jb3VudGVyKTsgfVxuIjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWJyZWFrcG9p
bnQtZGlzYWJsZWQud2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwud2Via2l0LWV4ZWN1dGlv
bi1saW5lIC53ZWJraXQtbGluZS1udW1iZXIgeyBjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91
bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGJyZWFrcG9pbnQtZGlzYWJsZWQtY29uZGl0aW9uYWwt
cHJvZ3JhbS1jb3VudGVyKTsgfVxuIjsKLQotICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQt
ZXhlY3V0aW9uLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeyBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMTcxLCAxOTEsIDI1NCk7IG91dGxpbmU6IDFweCBzb2xpZCByZ2IoNjQsIDExNSwgMjQ0KTsg
fVxuIjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWhlaWdodC1zaXplZC10by1maXQg
eyBvdmVyZmxvdy15OiBoaWRkZW4gfVxuIjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0
LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9XG4iOwotICAgICAgICBz
dHlsZVRleHQgKz0gIkAtd2Via2l0LWtleWZyYW1lcyBmYWRlb3V0IHtmcm9tIHtiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7fSB0byB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRl
O319XG4iOwotICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSAu
d2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTIw
KTsgLXdlYmtpdC1hbmltYXRpb246ICdmYWRlb3V0JyAycyA1MDBtc31cbiI7Ci0KLSAgICAgICAg
Ly8gVE9ETzogTW92ZSB0aGVzZSBzdHlsZXMgaW50byBpbnNwZWN0b3IuY3NzIG9uY2UgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4OTEzIGlzIGZpeGVkIGFuZCBwb3B1
cCBtb3ZlZCBpbnRvIHRoZSB0b3AgZnJhbWUuCi0gICAgICAgIHN0eWxlVGV4dCArPSAiLnBvcHVw
LWNvbnRlbnQgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDEwMDAwOyBwYWRkaW5nOiA0
cHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDMsIDIyNiwgMjU1KTsgLXdlYmtpdC1ib3JkZXIt
cmFkaXVzOiA3cHg7IGJvcmRlcjogMnB4IHNvbGlkIHJnYigxNjksIDE3MiwgMjAzKTsgfSI7Ci0g
ICAgICAgIHN0eWxlVGV4dCArPSAiLnBvcHVwLWdsYXNzcGFuZSB7IHBvc2l0aW9uOiBhYnNvbHV0
ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvcGFjaXR5OiAw
OyB6LWluZGV4OiA5OTAwOyB9IjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIucG9wdXAtbWVzc2Fn
ZSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBmb250LWZhbWlseTogTHVjaWRhIEdy
YW5kZSwgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgZm9udC1zaXplOiAxMXB4OyB0
ZXh0LWFsaWduOiBsZWZ0OyB0ZXh0LXNoYWRvdzogbm9uZTsgY29sb3I6IHJnYig4NSwgODUsIDg1
KTsgY3Vyc29yOiBkZWZhdWx0OyBtYXJnaW46IDAgMCAycHggMDsgfSI7Ci0gICAgICAgIHN0eWxl
VGV4dCArPSAiLnBvcHVwLWNvbnRlbnQuYnJlYWtwb2ludC1jb25kaXRpb24geyB3aWR0aDogOTAl
OyB9IjsKLSAgICAgICAgc3R5bGVUZXh0ICs9ICIucG9wdXAtY29udGVudCBpbnB1dCNicC1jb25k
aXRpb24geyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBtYXJnaW46IDA7IGJvcmRlcjogMXB4IGlu
c2V0IHJnYigxOTAsIDE5MCwgMTkwKSAhaW1wb3J0YW50OyB3aWR0aDogMTAwJTsgYm94LXNoYWRv
dzogbm9uZSAhaW1wb3J0YW50OyBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7IC13ZWJraXQtdXNl
ci1tb2RpZnk6IHJlYWQtd3JpdGU7IH0iOwotICAgICAgICAvLyBUaGlzIGNsYXNzIGlzIGFscmVh
ZHkgaW4gaW5zcGVjdG9yLmNzcwotICAgICAgICBzdHlsZVRleHQgKz0gIi5oaWRkZW4geyBkaXNw
bGF5OiBub25lICFpbXBvcnRhbnQ7IH0iOwotCi0gICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29u
dGVudCA9IHN0eWxlVGV4dDsKLQotICAgICAgICB0aGlzLl9uZWVkc1Byb2dyYW1Db3VudGVySW1h
Z2UgPSB0cnVlOwotICAgICAgICB0aGlzLl9uZWVkc0JyZWFrcG9pbnRJbWFnZXMgPSB0cnVlOwot
Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250ZW50V2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFk
ZFN0eWxlQ2xhc3MgPSBFbGVtZW50LnByb3RvdHlwZS5hZGRTdHlsZUNsYXNzOwotICAgICAgICB0
aGlzLmVsZW1lbnQuY29udGVudFdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVTdHlsZUNs
YXNzID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlU3R5bGVDbGFzczsKLSAgICAgICAgdGhpcy5l
bGVtZW50LmNvbnRlbnRXaW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPSBF
bGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbjsKLSAgICAgICAgdGhpcy5lbGVtZW50LmNv
bnRlbnRXaW5kb3cuRWxlbWVudC5wcm90b3R5cGUucG9zaXRpb25BdCA9IEVsZW1lbnQucHJvdG90
eXBlLnBvc2l0aW9uQXQ7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250ZW50V2luZG93LkVsZW1l
bnQucHJvdG90eXBlLnJlbW92ZU1hdGNoaW5nU3R5bGVDbGFzc2VzID0gRWxlbWVudC5wcm90b3R5
cGUucmVtb3ZlTWF0Y2hpbmdTdHlsZUNsYXNzZXM7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250
ZW50V2luZG93LkVsZW1lbnQucHJvdG90eXBlLmhhc1N0eWxlQ2xhc3MgPSBFbGVtZW50LnByb3Rv
dHlwZS5oYXNTdHlsZUNsYXNzOwotICAgICAgICB0aGlzLmVsZW1lbnQuY29udGVudFdpbmRvdy5F
bGVtZW50LnByb3RvdHlwZS5wYWdlT2Zmc2V0UmVsYXRpdmVUb1dpbmRvdyA9IEVsZW1lbnQucHJv
dG90eXBlLnBhZ2VPZmZzZXRSZWxhdGl2ZVRvV2luZG93OwotICAgICAgICB0aGlzLmVsZW1lbnQu
Y29udGVudFdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJ0b3RhbE9m
ZnNldExlZnQiLCBFbGVtZW50LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKCJ0b3RhbE9mZnNl
dExlZnQiKSk7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5jb250ZW50V2luZG93LkVsZW1lbnQucHJv
dG90eXBlLl9fZGVmaW5lR2V0dGVyX18oInRvdGFsT2Zmc2V0VG9wIiwgRWxlbWVudC5wcm90b3R5
cGUuX19sb29rdXBHZXR0ZXJfXygidG90YWxPZmZzZXRUb3AiKSk7Ci0gICAgICAgIHRoaXMuZWxl
bWVudC5jb250ZW50V2luZG93Lk5vZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVPclNlbGZXaXRo
Tm9kZU5hbWUgPSBOb2RlLnByb3RvdHlwZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1l
OwotICAgICAgICB0aGlzLmVsZW1lbnQuY29udGVudFdpbmRvdy5Ob2RlLnByb3RvdHlwZS5lbmNs
b3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lSW5BcnJheSA9IE5vZGUucHJvdG90eXBlLmVuY2xv
c2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWVJbkFycmF5OwogCi0gICAgICAgIHRoaXMuX2FkZEV4
aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSgpOwotICAgICAgICB0aGlzLl9hZGRFeGlzdGluZ0JyZWFr
cG9pbnRzVG9Tb3VyY2UoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlRXhlY3V0aW9uTGluZSgpOwot
ICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uTGluZSkKLSAgICAgICAgICAgIHRoaXMucmV2ZWFs
TGluZSh0aGlzLl9leGVjdXRpb25MaW5lKTsKKyAgICAgICAgdmFyIHJvd01lc3NhZ2VzID0gdGhp
cy5fcm93TWVzc2FnZXNbbXNnLmxpbmVdOworICAgICAgICBpZiAoIXJvd01lc3NhZ2VzKSB7Cisg
ICAgICAgICAgICByb3dNZXNzYWdlcyA9IFtdOworICAgICAgICAgICAgdGhpcy5fcm93TWVzc2Fn
ZXNbbXNnLmxpbmVdID0gcm93TWVzc2FnZXM7CisgICAgICAgIH0KIAotICAgICAgICBpZiAodGhp
cy5fbGluZU51bWJlclRvUmV2ZWFsKSB7Ci0gICAgICAgICAgICB0aGlzLnJldmVhbExpbmUodGhp
cy5fbGluZU51bWJlclRvUmV2ZWFsKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lTnVt
YmVyVG9SZXZlYWw7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93TWVzc2FnZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChyb3dNZXNzYWdlc1tpXS5pc0VxdWFsKG1zZywg
dHJ1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRNZXNzYWdlUmVwZWF0Q291
bnQocm93TWVzc2FnZXNbaV0sIG1zZy5yZXBlYXREZWx0YSk7CisgICAgICAgICAgICAgICAgdGhp
cy5fZWRpdG9yLnBhY2tBbmRSZXBhaW50QWxsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJU
b0hpZ2hsaWdodCkgewotICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRMaW5lKHRoaXMuX2xpbmVO
dW1iZXJUb0hpZ2hsaWdodCk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGluZU51bWJlclRv
SGlnaGxpZ2h0OworICAgICAgICByb3dNZXNzYWdlcy5wdXNoKG1zZyk7CisKKyAgICAgICAgdmFy
IGltYWdlVVJMOworICAgICAgICBzd2l0Y2ggKG1zZy5sZXZlbCkgeworICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAg
ICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1odG1s
LWVycm9yLW1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICBpbWFnZVVSTCA9ICJJbWFnZXMvZXJy
b3JJY29uLnBuZyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKKyAgICAgICAg
ICAgICAgICBtZXNzYWdlQnViYmxlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJ3ZWJraXQtaHRtbC13
YXJuaW5nLW1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICBpbWFnZVVSTCA9ICJJbWFnZXMvd2Fy
bmluZ0ljb24ucG5nIjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJjb250ZW50IGxvYWRlZCIpOworICAg
ICAgICB2YXIgbWVzc2FnZUxpbmVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIG1lc3NhZ2VMaW5lRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwt
bWVzc2FnZS1saW5lIjsKKyAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQuYXBwZW5kQ2hpbGQo
bWVzc2FnZUxpbmVFbGVtZW50KTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGVsZW1l
bnQgaW4gdGhlIEluc3BlY3RvcidzIGRvY3VtZW50IHNvIHdlIGNhbiB1c2UgcmVsYXRpdmUgaW1h
Z2UgVVJMcy4KKyAgICAgICAgdmFyIGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1n
Iik7CisgICAgICAgIGltYWdlLnNyYyA9IGltYWdlVVJMOworICAgICAgICBpbWFnZS5jbGFzc05h
bWUgPSAid2Via2l0LWh0bWwtbWVzc2FnZS1pY29uIjsKKyAgICAgICAgbWVzc2FnZUxpbmVFbGVt
ZW50LmFwcGVuZENoaWxkKGltYWdlKTsKKyAgICAgICAgbWVzc2FnZUxpbmVFbGVtZW50LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZy5tZXNzYWdlKSk7CisKKyAgICAgICAg
bXNnLl9yZXNvdXJjZU1lc3NhZ2VMaW5lRWxlbWVudCA9IG1lc3NhZ2VMaW5lRWxlbWVudDsKKwor
ICAgICAgICB0aGlzLl9lZGl0b3IucGFja0FuZFJlcGFpbnRBbGwoKTsKICAgICB9LAogCi0gICAg
X2lzQ29udGVudExvYWRlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBkb2MgPSB0aGlzLmVs
ZW1lbnQuY29udGVudERvY3VtZW50OwotICAgICAgICByZXR1cm4gZG9jICYmIGRvYy5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgidGFibGUiKVswXTsKKyAgICBfYWRkRXhpc3RpbmdCcmVha3BvaW50c1Rv
U291cmNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5icmVh
a3BvaW50cy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9Tb3VyY2UodGhpcy5icmVha3BvaW50
c1tpXSk7CiAgICAgfSwKIAotICAgIF9kb2N1bWVudENvbnRleHRNZW51OiBmdW5jdGlvbihldmVu
dCkKKyAgICBfYWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQorICAg
IHsKKyAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShicmVha3BvaW50LmxpbmUg
LSAxLCAiYnJlYWtwb2ludCIsIGJyZWFrcG9pbnQpOworICAgICAgICB0aGlzLl9lZGl0b3IucGFp
bnRMaW5lTnVtYmVycygpOworICAgIH0sCisKKyAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21Tb3Vy
Y2U6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICB0aGlzLl90ZXh0TW9kZWwu
cmVtb3ZlQXR0cmlidXRlKGJyZWFrcG9pbnQubGluZSAtIDEsICJicmVha3BvaW50Iik7CisgICAg
ICAgIHRoaXMuX2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CisgICAgfSwKKworICAgIF9jb250
ZXh0TWVudTogZnVuY3Rpb24obGluZU51bWJlciwgZXZlbnQpCiAgICAgewotICAgICAgICBpZiAo
IWV2ZW50LnRhcmdldC5oYXNTdHlsZUNsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKSkKLSAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCF0aGlzLmFkZEJyZWFrcG9pbnREZWxlZ2F0ZSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgc291cmNlUm93ID0gZXZlbnQudGFy
Z2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRyIik7CiAgICAgICAgIHZhciBj
b250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghc291cmNlUm93Ll9icmVha3BvaW50T2JqZWN0ICYmIHRoaXMuYWRkQnJlYWtw
b2ludERlbGVnYXRlKSB7Ci0gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMubGluZU51
bWJlckZvclNvdXJjZVJvdyhzb3VyY2VSb3cpOworCisgICAgICAgIHZhciBicmVha3BvaW50ID0g
dGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwor
ICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNu
J3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQg
QWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5hZGRCcmVh
a3BvaW50RGVsZWdhdGUuYmluZCh0aGlzLCBsaW5lTnVtYmVyKSk7CisgICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIEJyZWFrcG9pbnQi
KSwgdGhpcy5hZGRCcmVha3BvaW50RGVsZWdhdGUuYmluZCh0aGlzLCBsaW5lTnVtYmVyICsgMSkp
OwogCiAgICAgICAgICAgICBmdW5jdGlvbiBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKSAKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnREZWxlZ2F0ZShs
aW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHNvdXJjZVJvdy5f
YnJlYWtwb2ludE9iamVjdDsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEJyZWFrcG9pbnREZWxl
Z2F0ZShsaW5lTnVtYmVyICsgMSk7CisgICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0
aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7CiAg
ICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMu
X2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGV2ZW50LnRhcmdldCwgc291cmNlUm93LCBicmVha3Bv
aW50KTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24o
YnJlYWtwb2ludCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnRleHRNZW51LmFw
cGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2lu
dC4uLiIpLCBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc291cmNlUm93Ll9icmVha3BvaW50T2JqZWN0KSB7CisgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNo
b3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFi
bGUuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0
cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJl
bW92ZUJyZWFrcG9pbnQuYmluZChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMsIHNvdXJjZVJv
dy5fYnJlYWtwb2ludE9iamVjdCkpOwotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVkaXQgQnJlYWtwb2ludC4uLiIpLCB0aGlzLl9lZGl0
QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMsIGV2ZW50LnRhcmdldCwgc291cmNlUm93LCBz
b3VyY2VSb3cuX2JyZWFrcG9pbnRPYmplY3QpKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2VSb3cu
X2JyZWFrcG9pbnRPYmplY3QuZW5hYmxlZCkKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBCcmVha3BvaW50IiksIGZ1
bmN0aW9uKCkgeyBzb3VyY2VSb3cuX2JyZWFrcG9pbnRPYmplY3QuZW5hYmxlZCA9IGZhbHNlOyB9
KTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJSZW1vdmUgQnJlYWtwb2ludCIpLCBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMucmVt
b3ZlQnJlYWtwb2ludC5iaW5kKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cywgYnJlYWtwb2lu
dCkpOworICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkVkaXQgQnJlYWtwb2ludC4uLiIpLCB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlv
bi5iaW5kKHRoaXMsIGJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVu
YWJsZWQpCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJlYWtwb2ludCIpLCBmdW5jdGlvbigpIHsgYnJlYWtwb2lu
dC5lbmFibGVkID0gZmFsc2U7IH0pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFbmFibGUgQnJl
YWtwb2ludCIpLCBmdW5jdGlvbigpIHsgc291cmNlUm93Ll9icmVha3BvaW50T2JqZWN0LmVuYWJs
ZWQgPSB0cnVlOyB9KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRW5hYmxlIEJyZWFrcG9pbnQiKSwgZnVuY3Rpb24oKSB7IGJy
ZWFrcG9pbnQuZW5hYmxlZCA9IHRydWU7IH0pOwogICAgICAgICB9Ci0gICAgICAgIAogICAgICAg
ICBjb250ZXh0TWVudS5zaG93KGV2ZW50KTsKICAgICB9LAogCi0gICAgX2RvY3VtZW50TW91c2VE
b3duOiBmdW5jdGlvbihldmVudCkKKyAgICBfdG9nZ2xlQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlciwgZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5oYXNTdHls
ZUNsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKGV2ZW50LmJ1dHRvbiAhPSAwIHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5
IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHZhciBzb3VyY2VSb3cgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhOb2RlTmFtZSgidHIiKTsKLSAgICAgICAgaWYgKHNvdXJjZVJvdy5fYnJlYWtwb2ludE9i
amVjdCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVh
a3BvaW50KHNvdXJjZVJvdy5fYnJlYWtwb2ludE9iamVjdCk7CisgICAgICAgIHZhciBicmVha3Bv
aW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2lu
dCIpOworICAgICAgICBpZiAoYnJlYWtwb2ludCkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cy5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgICAgICBlbHNl
IGlmICh0aGlzLmFkZEJyZWFrcG9pbnREZWxlZ2F0ZSkKLSAgICAgICAgICAgIHRoaXMuYWRkQnJl
YWtwb2ludERlbGVnYXRlKHRoaXMubGluZU51bWJlckZvclNvdXJjZVJvdyhzb3VyY2VSb3cpKTsK
LQorICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50RGVsZWdhdGUobGluZU51bWJlciArIDEp
OwogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgIH0sCiAKLSAgICBfZWRpdEJy
ZWFrcG9pbnRDb25kaXRpb246IGZ1bmN0aW9uKGV2ZW50VGFyZ2V0LCBzb3VyY2VSb3csIGJyZWFr
cG9pbnQpCisgICAgX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uOiBmdW5jdGlvbihicmVha3BvaW50
KQogICAgIHsKLSAgICAgICAgLy8gVE9ETzogTWlncmF0ZSB0aGUgcG9wdXAgdG8gdGhlIHRvcC1s
ZXZlbCBkb2N1bWVudCBhbmQgcmVtb3ZlIHRoZSBibHVyIGxpc3RlbmVyIGZyb20gY29uZGl0aW9u
RWxlbWVudCBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkx
MyBpcyBmaXhlZC4KLSAgICAgICAgdmFyIHBvcHVwRG9jdW1lbnQgPSB0aGlzLmVsZW1lbnQuY29u
dGVudERvY3VtZW50OwotICAgICAgICB0aGlzLl9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVw
KGV2ZW50VGFyZ2V0LCBicmVha3BvaW50LmxpbmUsIHBvcHVwRG9jdW1lbnQpOworICAgICAgICB0
aGlzLl9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVwKGJyZWFrcG9pbnQubGluZSk7CiAKICAg
ICAgICAgZnVuY3Rpb24gY29tbWl0dGVkKGVsZW1lbnQsIG5ld1RleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gbmV3VGV4dDsKLSAgICAgICAgICAgIGlm
IChicmVha3BvaW50LmNvbmRpdGlvbikKLSAgICAgICAgICAgICAgICBzb3VyY2VSb3cuYWRkU3R5
bGVDbGFzcygid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBzb3VyY2VSb3cucmVtb3ZlU3R5bGVDbGFzcygid2Via2l0LWJy
ZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKKyAgICAgICAgICAgIHRoaXMuX2VkaXRvci5wYWludExp
bmVOdW1iZXJzKCk7CiAgICAgICAgICAgICBkaXNtaXNzZWQuY2FsbCh0aGlzKTsKICAgICAgICAg
fQogCiAgICAgICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHRoaXMuX3BvcHVwLmhpZGUoKTsKKyAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNv
cmF0aW9uKGJyZWFrcG9pbnQubGluZSAtIDEsIG51bGwpOwogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQ7CiAgICAgICAgIH0KIApAQCAtMzUzLDQyICszNTEs
MzMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudC5zZWxlY3QoKTsKICAgICB9LAogCi0gICAgX3Nob3dC
cmVha3BvaW50Q29uZGl0aW9uUG9wdXA6IGZ1bmN0aW9uKGNsaWNrZWRFbGVtZW50LCBsaW5lTnVt
YmVyLCBwb3B1cERvY3VtZW50KQorICAgIF9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVwOiBm
dW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIHBvcHVwQ29udGVudEVsZW1l
bnQgPSB0aGlzLl9jcmVhdGVQb3B1cEVsZW1lbnQobGluZU51bWJlciwgcG9wdXBEb2N1bWVudCk7
Ci0gICAgICAgIHZhciBsaW5lRWxlbWVudCA9IGNsaWNrZWRFbGVtZW50LmVuY2xvc2luZ05vZGVP
clNlbGZXaXRoTm9kZU5hbWUoInRkIikubmV4dFNpYmxpbmc7Ci0gICAgICAgIGlmICh0aGlzLl9w
b3B1cCkgewotICAgICAgICAgICAgdGhpcy5fcG9wdXAuaGlkZSgpOwotICAgICAgICAgICAgdGhp
cy5fcG9wdXAuZWxlbWVudCA9IHBvcHVwQ29udGVudEVsZW1lbnQ7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9wdXAocG9wdXBD
b250ZW50RWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9wb3B1cC5hdXRvSGlkZSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fcG9wdXAuYW5jaG9yID0gbGluZUVsZW1lbnQ7Ci0g
ICAgICAgIHRoaXMuX3BvcHVwLnNob3coKTsKKyAgICAgICAgdmFyIGNvbmRpdGlvbkVsZW1lbnQg
PSB0aGlzLl9jcmVhdGVDb25kaXRpb25FbGVtZW50KGxpbmVOdW1iZXIpOworICAgICAgICB0aGlz
Ll9lZGl0b3Iuc2V0RGl2RGVjb3JhdGlvbihsaW5lTnVtYmVyIC0gMSwgY29uZGl0aW9uRWxlbWVu
dCk7CiAgICAgfSwKIAotICAgIF9jcmVhdGVQb3B1cEVsZW1lbnQ6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIHBvcHVwRG9jdW1lbnQpCisgICAgX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgcG9wdXBDb250ZW50RWxlbWVudCA9IHBv
cHVwRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHBvcHVwQ29udGVudEVs
ZW1lbnQuY2xhc3NOYW1lID0gInBvcHVwLWNvbnRlbnQgYnJlYWtwb2ludC1jb25kaXRpb24iOwor
ICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICBjb25kaXRpb25FbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtYnJlYWtw
b2ludC1jb25kaXRpb24iOwogCiAgICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJsYWJlbCIpOwotICAgICAgICBsYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0g
InBvcHVwLW1lc3NhZ2UiOwotICAgICAgICBsYWJlbEVsZW1lbnQuaHRtbEZvciA9ICJicC1jb25k
aXRpb24iOworICAgICAgICBsYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1icmVha3Bv
aW50LW1lc3NhZ2UiOworICAgICAgICBsYWJlbEVsZW1lbnQuaHRtbEZvciA9ICJzb3VyY2UtYnJl
YWtwb2ludC1jb25kaXRpb24iOwogICAgICAgICBsYWJlbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGUgYnJlYWtwb2lu
dCBvbiBsaW5lICVkIHdpbGwgc3RvcCBvbmx5IGlmIHRoaXMgZXhwcmVzc2lvbiBpcyB0cnVlOiIs
IGxpbmVOdW1iZXIpKSk7Ci0gICAgICAgIHBvcHVwQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQo
bGFiZWxFbGVtZW50KTsKKyAgICAgICAgY29uZGl0aW9uRWxlbWVudC5hcHBlbmRDaGlsZChsYWJl
bEVsZW1lbnQpOwogCiAgICAgICAgIHZhciBlZGl0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgZWRpdG9yRWxlbWVudC5pZCA9ICJicC1jb25kaXRp
b24iOworICAgICAgICBlZGl0b3JFbGVtZW50LmlkID0gInNvdXJjZS1icmVha3BvaW50LWNvbmRp
dGlvbiI7CiAgICAgICAgIGVkaXRvckVsZW1lbnQudHlwZSA9ICJ0ZXh0IgotICAgICAgICBwb3B1
cENvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKGVkaXRvckVsZW1lbnQpOworICAgICAgICBjb25k
aXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGVkaXRvckVsZW1lbnQpOwogICAgICAgICB0aGlzLl9j
b25kaXRpb25FZGl0b3JFbGVtZW50ID0gZWRpdG9yRWxlbWVudDsKIAotICAgICAgICByZXR1cm4g
cG9wdXBDb250ZW50RWxlbWVudDsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbkVsZW1lbnQ7CiAg
ICAgfSwKIAotICAgIF9kb2N1bWVudEtleURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9rZXlE
b3duOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHZhciBzaG9ydGN1dCA9IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZXZlbnQpOwogICAgICAg
ICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF07CkBAIC00MDksNyArMzk4
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYg
KCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2
YXIgZXhwcmVzc2lvbiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLnRvU3RyaW5nKCkudHJpbSgp
OworICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLnRvU3Ry
aW5nKCkudHJpbVdoaXRlc3BhY2UoKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3Jp
cHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNzaW9uLCBmYWxzZSwgImNvbnNv
bGUiLCBmdW5jdGlvbihyZXN1bHQsIGV4Y2VwdGlvbikgewogICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnNob3dDb25zb2xlKCk7CiAgICAgICAgICAgICB2YXIgY29tbWFuZE1lc3NhZ2UgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kKGV4cHJlc3Npb24pOwpAQCAtNDE4LDMwNSArNDA3
LDE0NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB9
KTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRFbmFibGVDaGFuZ2VkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAg
ICB2YXIgc291cmNlUm93ID0gdGhpcy5zb3VyY2VSb3coYnJlYWtwb2ludC5saW5lKTsKLSAgICAg
ICAgaWYgKCFzb3VyY2VSb3cpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc291cmNl
Um93LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1icmVha3BvaW50Iik7Ci0KLSAgICAgICAgaWYgKGJy
ZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAgICAgIHNvdXJjZVJvdy5yZW1vdmVTdHlsZUNsYXNz
KCJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzb3VyY2VSb3cuYWRkU3R5bGVDbGFzcygid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsK
LSAgICB9LAotCi0gICAgX3VwZGF0ZUV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKHByZXZpb3VzTGlu
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHsKLSAgICAgICAgICAgIHZhciBz
b3VyY2VSb3cgPSB0aGlzLnNvdXJjZVJvdyhwcmV2aW91c0xpbmUpOwotICAgICAgICAgICAgaWYg
KHNvdXJjZVJvdykKLSAgICAgICAgICAgICAgICBzb3VyY2VSb3cucmVtb3ZlU3R5bGVDbGFzcygi
d2Via2l0LWV4ZWN1dGlvbi1saW5lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRoaXMu
X2V4ZWN1dGlvbkxpbmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZHJh
d1Byb2dyYW1Db3VudGVySW1hZ2VJZk5lZWRlZCgpOwotCi0gICAgICAgIHZhciBzb3VyY2VSb3cg
PSB0aGlzLnNvdXJjZVJvdyh0aGlzLl9leGVjdXRpb25MaW5lKTsKLSAgICAgICAgaWYgKHNvdXJj
ZVJvdykKLSAgICAgICAgICAgIHNvdXJjZVJvdy5hZGRTdHlsZUNsYXNzKCJ3ZWJraXQtZXhlY3V0
aW9uLWxpbmUiKTsKLSAgICB9LAotCi0gICAgX2FkZEV4aXN0aW5nQnJlYWtwb2ludHNUb1NvdXJj
ZTogZnVuY3Rpb24oKQorICAgIF9icmVha3BvaW50Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewotICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5icmVha3BvaW50cy5sZW5ndGg7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9h
ZGRCcmVha3BvaW50VG9Tb3VyY2UodGhpcy5icmVha3BvaW50c1tpXSk7CisgICAgICAgIHRoaXMu
X2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7CiAgICAgfSwKIAotICAgIF9hZGRCcmVha3BvaW50
VG9Tb3VyY2U6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgcmVzaXplOiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICB2YXIgc291cmNlUm93ID0gdGhpcy5zb3VyY2VSb3coYnJlYWtwb2ludC5s
aW5lKTsKLSAgICAgICAgaWYgKCFzb3VyY2VSb3cpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgYnJlYWtwb2ludC5zb3VyY2VUZXh0ID0gc291cmNlUm93LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoJ3dlYmtpdC1saW5lLWNvbnRlbnQnKVswXS50ZXh0Q29udGVudDsKLQotICAgICAgICB0
aGlzLl9kcmF3QnJlYWtwb2ludEltYWdlc0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgc291cmNlUm93
Ll9icmVha3BvaW50T2JqZWN0ID0gYnJlYWtwb2ludDsKLQotICAgICAgICBzb3VyY2VSb3cuYWRk
U3R5bGVDbGFzcygid2Via2l0LWJyZWFrcG9pbnQiKTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50
LmVuYWJsZWQpCi0gICAgICAgICAgICBzb3VyY2VSb3cuYWRkU3R5bGVDbGFzcygid2Via2l0LWJy
ZWFrcG9pbnQtZGlzYWJsZWQiKTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuY29uZGl0aW9uKQot
ICAgICAgICAgICAgc291cmNlUm93LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1icmVha3BvaW50LWNv
bmRpdGlvbmFsIik7Ci0gICAgfSwKLQotICAgIF9yZW1vdmVCcmVha3BvaW50RnJvbVNvdXJjZTog
ZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VSb3cgPSB0aGlz
LnNvdXJjZVJvdyhicmVha3BvaW50LmxpbmUpOwotICAgICAgICBpZiAoIXNvdXJjZVJvdykKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fZWRpdG9yLnVwZGF0ZUNhbnZhc1NpemUo
KTsKKyAgICB9Cit9CiAKLSAgICAgICAgZGVsZXRlIHNvdXJjZVJvdy5fYnJlYWtwb2ludE9iamVj
dDsKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CiAKLSAgICAgICAgc291cmNlUm93LnJlbW92ZVN0eWxl
Q2xhc3MoIndlYmtpdC1icmVha3BvaW50Iik7Ci0gICAgICAgIHNvdXJjZVJvdy5yZW1vdmVTdHls
ZUNsYXNzKCJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICBzb3VyY2VSb3cu
cmVtb3ZlU3R5bGVDbGFzcygid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKLSAgICB9
LAorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRMaW5lTnVtYmVyRGVjb3JhdG9yID0gZnVuY3Rpb24o
c291cmNlRnJhbWUpCit7CisgICAgdGhpcy5fc291cmNlRnJhbWUgPSBzb3VyY2VGcmFtZTsKKyAg
ICB0aGlzLl90ZXh0TW9kZWwgPSBzb3VyY2VGcmFtZS5fZWRpdG9yLnRleHRNb2RlbDsKK30KIAot
ICAgIF9pbmNyZW1lbnRNZXNzYWdlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKG1zZywgcmVwZWF0RGVs
dGEpCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IucHJvdG90eXBl
ID0geworICAgIGRlY29yYXRlOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjdHgsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGxpbmVIZWlnaHQpCiAgICAgewotICAgICAgICBpZiAoIW1zZy5fcmVzb3VyY2VN
ZXNzYWdlTGluZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBicmVh
a3BvaW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtw
b2ludCIpOworICAgICAgICB2YXIgaXNFeGVjdXRpb25MaW5lID0gbGluZU51bWJlciArIDEgPT09
IHRoaXMuX3NvdXJjZUZyYW1lLl9leGVjdXRpb25MaW5lOworICAgICAgICBpZiAoYnJlYWtwb2lu
dCB8fCBpc0V4ZWN1dGlvbkxpbmUpIHsKKyAgICAgICAgICAgIGN0eC5zYXZlKCk7CisgICAgICAg
ICAgICBjdHgudHJhbnNsYXRlKHggKyA0LCB5ICsgMik7CisgICAgICAgICAgICB2YXIgYnJlYWtw
b2ludFdpZHRoID0gd2lkdGggLSA2OworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRIZWlnaHQg
PSBsaW5lSGVpZ2h0IC0gNDsKKyAgICAKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50KQorICAg
ICAgICAgICAgICAgIHRoaXMuX3BhaW50QnJlYWtwb2ludChjdHgsIGJyZWFrcG9pbnRXaWR0aCwg
YnJlYWtwb2ludEhlaWdodCwgYnJlYWtwb2ludCk7CisgICAgCisgICAgICAgICAgICBpZiAoaXNF
eGVjdXRpb25MaW5lKQorICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50UHJvZ3JhbUNvdW50ZXIo
Y3R4LCBicmVha3BvaW50V2lkdGgsIGJyZWFrcG9pbnRIZWlnaHQsIGZhbHNlKTsKIAotICAgICAg
ICBpZiAoIW1zZy5fcmVzb3VyY2VNZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50KSB7Ci0gICAgICAg
ICAgICB2YXIgcmVwZWF0ZWRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotICAgICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGls
ZChyZXBlYXRlZEVsZW1lbnQpOwotICAgICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VSZXBl
YXRDb3VudEVsZW1lbnQgPSByZXBlYXRlZEVsZW1lbnQ7CisgICAgICAgICAgICBjdHgucmVzdG9y
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgbXNnLnJlcGVhdENvdW50ICs9IHJlcGVhdERlbHRh
OwotICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZVJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29u
dGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiIChyZXBlYXRlZCAlZCB0aW1lcykiLCBtc2cu
cmVwZWF0Q291bnQpOwotICAgIH0sCisgICAgICAgIGlmIChpc0V4ZWN1dGlvbkxpbmUpIHsKKyAg
ICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubWVzc2FnZXMubGVu
Z3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgdGhpcy5fYWRkTWVzc2FnZVRvU291cmNlKHRoaXMubWVzc2FnZXNbaV0pOworICAgICAgICBj
dHguZmlsbFN0eWxlID0gYnJlYWtwb2ludCA/ICJyZ2IoMjU1LDI1NSwyNTUpIiA6ICJyZ2IoMTU1
LDE1NSwxNTUpIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCiAKLSAgICBfYWRkTWVz
c2FnZVRvU291cmNlOiBmdW5jdGlvbihtc2cpCisgICAgX3BhaW50QnJlYWtwb2ludDogZnVuY3Rp
b24oY3R4LCB3aWR0aCwgaGVpZ2h0LCBicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgdmFyIHJv
dyA9IHRoaXMuc291cmNlUm93KG1zZy5saW5lKTsKLSAgICAgICAgaWYgKCFyb3cpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSByb3cuY2VsbHNbMV07Ci0gICAgICAg
IGlmICghY2VsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgbWVzc2FnZUJ1
YmJsZUVsZW1lbnQgPSBjZWxsLmxhc3RDaGlsZDsKLSAgICAgICAgaWYgKCFtZXNzYWdlQnViYmxl
RWxlbWVudCB8fCBtZXNzYWdlQnViYmxlRWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5U
X05PREUgfHwgIW1lc3NhZ2VCdWJibGVFbGVtZW50Lmhhc1N0eWxlQ2xhc3MoIndlYmtpdC1odG1s
LW1lc3NhZ2UtYnViYmxlIikpIHsKLSAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50ID0g
dGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAg
ICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1tZXNz
YWdlLWJ1YmJsZSI7Ci0gICAgICAgICAgICBjZWxsLmFwcGVuZENoaWxkKG1lc3NhZ2VCdWJibGVF
bGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcm93Lm1lc3NhZ2VzKQotICAgICAg
ICAgICAgcm93Lm1lc3NhZ2VzID0gW107Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
b3cubWVzc2FnZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChyb3cubWVzc2FnZXNb
aV0uaXNFcXVhbChtc2csIHRydWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50
TWVzc2FnZVJlcGVhdENvdW50KHJvdy5tZXNzYWdlc1tpXSwgbXNnLnJlcGVhdERlbHRhKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
Y3R4LmJlZ2luUGF0aCgpOworICAgICAgICBjdHgubW92ZVRvKDAsIDIpOworICAgICAgICBjdHgu
bGluZVRvKDIsIDApOworICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gNSwgMCk7CisgICAgICAg
IGN0eC5saW5lVG8od2lkdGgsIGhlaWdodCAvIDIpOworICAgICAgICBjdHgubGluZVRvKHdpZHRo
IC0gNSwgaGVpZ2h0KTsKKyAgICAgICAgY3R4LmxpbmVUbygyLCBoZWlnaHQpOworICAgICAgICBj
dHgubGluZVRvKDAsIGhlaWdodCAtIDIpOworICAgICAgICBjdHguY2xvc2VQYXRoKCk7CisgICAg
ICAgIGN0eC5maWxsU3R5bGUgPSBicmVha3BvaW50LmNvbmRpdGlvbiA/ICJyZ2IoMjE3LCAxNDIs
IDEpIiA6ICJyZ2IoMSwgMTQyLCAyMTcpIjsKKyAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gYnJl
YWtwb2ludC5jb25kaXRpb24gPyAicmdiKDIwNSwgMTAzLCAwKSIgOiAicmdiKDAsIDEwMywgMjA1
KSI7CisgICAgICAgIGN0eC5saW5lV2lkdGggPSAzOworICAgICAgICBjdHguZmlsbCgpOwogCi0g
ICAgICAgIHJvdy5tZXNzYWdlcy5wdXNoKG1zZyk7CisgICAgICAgIGN0eC5zYXZlKCk7CisgICAg
ICAgIGN0eC5jbGlwKCk7CisgICAgICAgIGN0eC5zdHJva2UoKTsKKyAgICAgICAgY3R4LnJlc3Rv
cmUoKTsKIAotICAgICAgICB2YXIgaW1hZ2VVUkw7Ci0gICAgICAgIHN3aXRjaCAobXNnLmxldmVs
KSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
TGV2ZWwuRXJyb3I6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQuYWRkU3R5
bGVDbGFzcygid2Via2l0LWh0bWwtZXJyb3ItbWVzc2FnZSIpOwotICAgICAgICAgICAgICAgIGlt
YWdlVVJMID0gIkltYWdlcy9lcnJvckljb24ucG5nIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZl
bC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmFkZFN0eWxl
Q2xhc3MoIndlYmtpdC1odG1sLXdhcm5pbmctbWVzc2FnZSIpOwotICAgICAgICAgICAgICAgIGlt
YWdlVVJMID0gIkltYWdlcy93YXJuaW5nSWNvbi5wbmciOwotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoIWJyZWFrcG9pbnQuZW5hYmxlZCkgeworICAgICAgICAgICAgY3R4LnNh
dmUoKTsKKyAgICAgICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAiZGVzdGlu
YXRpb24tb3V0IjsKKyAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgwLCAwLCAwLCAw
LjUpIjsKKyAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgICAgIGN0eC5yZXN0b3JlKCk7CiAgICAgICAgIH0KLQotICAgICAgICB2YXIgbWVzc2Fn
ZUxpbmVFbGVtZW50ID0gdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgbWVzc2FnZUxpbmVFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQt
aHRtbC1tZXNzYWdlLWxpbmUiOwotICAgICAgICBtZXNzYWdlQnViYmxlRWxlbWVudC5hcHBlbmRD
aGlsZChtZXNzYWdlTGluZUVsZW1lbnQpOwotCi0gICAgICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2Ug
ZWxlbWVudCBpbiB0aGUgSW5zcGVjdG9yJ3MgZG9jdW1lbnQgc28gd2UgY2FuIHVzZSByZWxhdGl2
ZSBpbWFnZSBVUkxzLgotICAgICAgICB2YXIgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJpbWciKTsKLSAgICAgICAgaW1hZ2Uuc3JjID0gaW1hZ2VVUkw7Ci0gICAgICAgIGltYWdlLmNs
YXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1tZXNzYWdlLWljb24iOwotCi0gICAgICAgIC8vIEFkb3B0
IHRoZSBpbWFnZSBlbGVtZW50IHNpbmNlIGl0IHdhc24ndCBjcmVhdGVkIGluIGVsZW1lbnQncyBj
b250ZW50RG9jdW1lbnQuCi0gICAgICAgIGltYWdlID0gdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1
bWVudC5hZG9wdE5vZGUoaW1hZ2UpOwotICAgICAgICBtZXNzYWdlTGluZUVsZW1lbnQuYXBwZW5k
Q2hpbGQoaW1hZ2UpOwotICAgICAgICBtZXNzYWdlTGluZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cubWVzc2FnZSkpOwot
Ci0gICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQgPSBtZXNzYWdlTGluZUVs
ZW1lbnQ7CiAgICAgfSwKIAotICAgIF9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQ6IGZ1bmN0
aW9uKGN0eCwgZ2xvdykKKyAgICBfcGFpbnRQcm9ncmFtQ291bnRlcjogZnVuY3Rpb24oY3R4LCB3
aWR0aCwgaGVpZ2h0KQogICAgIHsKLSAgICAgICAgaWYgKGdsb3cpCi0gICAgICAgICAgICBjdHgu
c2F2ZSgpOworICAgICAgICBjdHguc2F2ZSgpOwogCiAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsK
LSAgICAgICAgY3R4Lm1vdmVUbygxNywgMik7Ci0gICAgICAgIGN0eC5saW5lVG8oMTksIDIpOwot
ICAgICAgICBjdHgubGluZVRvKDE5LCAwKTsKLSAgICAgICAgY3R4LmxpbmVUbygyMSwgMCk7Ci0g
ICAgICAgIGN0eC5saW5lVG8oMjYsIDUuNSk7Ci0gICAgICAgIGN0eC5saW5lVG8oMjEsIDExKTsK
LSAgICAgICAgY3R4LmxpbmVUbygxOSwgMTEpOwotICAgICAgICBjdHgubGluZVRvKDE5LCA5KTsK
LSAgICAgICAgY3R4LmxpbmVUbygxNywgOSk7CisgICAgICAgIGN0eC5tb3ZlVG8od2lkdGggLSA5
LCAyKTsKKyAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIDIpOworICAgICAgICBjdHgubGlu
ZVRvKHdpZHRoIC0gNywgMCk7CisgICAgICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCAwKTsKKyAg
ICAgICAgY3R4LmxpbmVUbyh3aWR0aCwgaGVpZ2h0IC8gMik7CisgICAgICAgIGN0eC5saW5lVG8o
d2lkdGggLSA1LCBoZWlnaHQpOworICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gNywgaGVpZ2h0
KTsKKyAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAtIDcsIGhlaWdodCAtIDIpOworICAgICAgICBj
dHgubGluZVRvKHdpZHRoIC0gOSwgaGVpZ2h0IC0gMik7CiAgICAgICAgIGN0eC5jbG9zZVBhdGgo
KTsKICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTQyLCA1LCA0KSI7CiAKLSAgICAgICAg
aWYgKGdsb3cpIHsKLSAgICAgICAgICAgIGN0eC5zaGFkb3dCbHVyID0gNDsKLSAgICAgICAgICAg
IGN0eC5zaGFkb3dDb2xvciA9ICJyZ2IoMjU1LCAyNTUsIDI1NSkiOwotICAgICAgICAgICAgY3R4
LnNoYWRvd09mZnNldFggPSAtMTsKLSAgICAgICAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDsK
LSAgICAgICAgfQorICAgICAgICBjdHguc2hhZG93Qmx1ciA9IDQ7CisgICAgICAgIGN0eC5zaGFk
b3dDb2xvciA9ICJyZ2IoMjU1LCAyNTUsIDI1NSkiOworICAgICAgICBjdHguc2hhZG93T2Zmc2V0
WCA9IC0xOworICAgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7CiAKICAgICAgICAgY3R4LmZp
bGwoKTsKICAgICAgICAgY3R4LmZpbGwoKTsgLy8gRmlsbCB0d2ljZSB0byBnZXQgYSBnb29kIHNo
YWRvdyBhbmQgZGFya2VyIGFudGktYWxpYXNlZCBwaXhlbHMuCiAKLSAgICAgICAgaWYgKGdsb3cp
Ci0gICAgICAgICAgICBjdHgucmVzdG9yZSgpOworICAgICAgICBjdHgucmVzdG9yZSgpOwogICAg
IH0sCiAKLSAgICBfZHJhd1Byb2dyYW1Db3VudGVySW1hZ2VJZk5lZWRlZDogZnVuY3Rpb24oKQor
ICAgIG1vdXNlRG93bjogZnVuY3Rpb24obGluZU51bWJlciwgZSkKICAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5fbmVlZHNQcm9ncmFtQ291bnRlckltYWdlIHx8ICF0aGlzLmVsZW1lbnQuY29udGVu
dERvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjdHggPSB0aGlz
LmVsZW1lbnQuY29udGVudERvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgInByb2dy
YW0tY291bnRlciIsIDI2LCAxMSk7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgMjYsIDEx
KTsKLSAgICAgICAgdGhpcy5fZHJhd1Byb2dyYW1Db3VudGVySW5Db250ZXh0KGN0eCwgdHJ1ZSk7
Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX25lZWRzUHJvZ3JhbUNvdW50ZXJJbWFnZTsKKyAgICAg
ICAgdGhpcy5fc291cmNlRnJhbWUuX3RvZ2dsZUJyZWFrcG9pbnQobGluZU51bWJlciwgZSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKLSAgICBfZHJhd0JyZWFrcG9pbnRJbWFnZXNJ
Zk5lZWRlZDogZnVuY3Rpb24oY29uZGl0aW9uYWwpCisgICAgY29udGV4dE1lbnU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGUpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX25lZWRzQnJlYWtwb2lu
dEltYWdlcyB8fCAhdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBmdW5jdGlvbiBkcmF3QnJlYWtwb2ludChjdHgsIGRpc2FibGVkLCBj
b25kaXRpb25hbCkKLSAgICAgICAgewotICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAg
ICAgICAgICAgY3R4Lm1vdmVUbygwLCAyKTsKLSAgICAgICAgICAgIGN0eC5saW5lVG8oMiwgMCk7
Ci0gICAgICAgICAgICBjdHgubGluZVRvKDIxLCAwKTsKLSAgICAgICAgICAgIGN0eC5saW5lVG8o
MjYsIDUuNSk7Ci0gICAgICAgICAgICBjdHgubGluZVRvKDIxLCAxMSk7Ci0gICAgICAgICAgICBj
dHgubGluZVRvKDIsIDExKTsKLSAgICAgICAgICAgIGN0eC5saW5lVG8oMCwgOSk7Ci0gICAgICAg
ICAgICBjdHguY2xvc2VQYXRoKCk7Ci0gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gY29uZGl0
aW9uYWwgPyAicmdiKDIxNywgMTQyLCAxKSIgOiAicmdiKDEsIDE0MiwgMjE3KSI7Ci0gICAgICAg
ICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb25kaXRpb25hbCA/ICJyZ2IoMjA1LCAxMDMsIDApIiA6
ICJyZ2IoMCwgMTAzLCAyMDUpIjsKLSAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAzOwotICAg
ICAgICAgICAgY3R4LmZpbGwoKTsKLSAgICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgICAg
ICBjdHguY2xpcCgpOwotICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICAgICAgY3R4
LnJlc3RvcmUoKTsKLQotICAgICAgICAgICAgaWYgKCFkaXNhYmxlZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgICAgICBjdHguZ2xv
YmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gImRlc3RpbmF0aW9uLW91dCI7Ci0gICAgICAgICAgICBj
dHguZmlsbFN0eWxlID0gInJnYmEoMCwgMCwgMCwgMC41KSI7Ci0gICAgICAgICAgICBjdHguZmls
bFJlY3QoMCwgMCwgMjYsIDExKTsKLSAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7Ci0gICAgICAg
IH0KLQotCi0gICAgICAgIC8vIFVuY29uZGl0aW9uYWwgYnJlYWtwb2ludHMuCi0KLSAgICAgICAg
dmFyIGN0eCA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4
dCgiMmQiLCAiYnJlYWtwb2ludCIsIDI2LCAxMSk7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMCwg
MCwgMjYsIDExKTsKLSAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4KTsKLQotICAgICAgICB2YXIg
Y3R4ID0gdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5nZXRDU1NDYW52YXNDb250ZXh0KCIy
ZCIsICJicmVha3BvaW50LXByb2dyYW0tY291bnRlciIsIDI2LCAxMSk7Ci0gICAgICAgIGN0eC5j
bGVhclJlY3QoMCwgMCwgMjYsIDExKTsKLSAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4KTsKLSAg
ICAgICAgY3R4LmNsZWFyUmVjdCgyMCwgMCwgNiwgMTEpOwotICAgICAgICB0aGlzLl9kcmF3UHJv
Z3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4LCB0cnVlKTsKLQotICAgICAgICB2YXIgY3R4ID0gdGhp
cy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5nZXRDU1NDYW52YXNDb250ZXh0KCIyZCIsICJicmVh
a3BvaW50LWRpc2FibGVkIiwgMjYsIDExKTsKLSAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAy
NiwgMTEpOwotICAgICAgICBkcmF3QnJlYWtwb2ludChjdHgsIHRydWUpOwotCi0gICAgICAgIHZh
ciBjdHggPSB0aGlzLmVsZW1lbnQuY29udGVudERvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQo
IjJkIiwgImJyZWFrcG9pbnQtZGlzYWJsZWQtcHJvZ3JhbS1jb3VudGVyIiwgMjYsIDExKTsKLSAg
ICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCAyNiwgMTEpOwotICAgICAgICBkcmF3QnJlYWtwb2lu
dChjdHgsIHRydWUpOwotICAgICAgICBjdHguY2xlYXJSZWN0KDIwLCAwLCA2LCAxMSk7Ci0gICAg
ICAgIHRoaXMuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwotCi0KLSAg
ICAgICAgLy8gQ29uZGl0aW9uYWwgYnJlYWtwb2ludHMuCi0KLSAgICAgICAgdmFyIGN0eCA9IHRo
aXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAiYnJl
YWtwb2ludC1jb25kaXRpb25hbCIsIDI2LCAxMSk7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMCwg
MCwgMjYsIDExKTsKLSAgICAgICAgZHJhd0JyZWFrcG9pbnQoY3R4LCBmYWxzZSwgdHJ1ZSk7Ci0K
LSAgICAgICAgdmFyIGN0eCA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0Q1NTQ2Fu
dmFzQ29udGV4dCgiMmQiLCAiYnJlYWtwb2ludC1jb25kaXRpb25hbC1wcm9ncmFtLWNvdW50ZXIi
LCAyNiwgMTEpOwotICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7Ci0gICAgICAg
IGRyYXdCcmVha3BvaW50KGN0eCwgZmFsc2UsIHRydWUpOwotICAgICAgICBjdHguY2xlYXJSZWN0
KDIwLCAwLCA2LCAxMSk7Ci0gICAgICAgIHRoaXMuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4
dChjdHgsIHRydWUpOwotCi0gICAgICAgIHZhciBjdHggPSB0aGlzLmVsZW1lbnQuY29udGVudERv
Y3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQoIjJkIiwgImJyZWFrcG9pbnQtZGlzYWJsZWQtY29u
ZGl0aW9uYWwiLCAyNiwgMTEpOwotICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7
Ci0gICAgICAgIGRyYXdCcmVha3BvaW50KGN0eCwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgdmFy
IGN0eCA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgi
MmQiLCAiYnJlYWtwb2ludC1kaXNhYmxlZC1jb25kaXRpb25hbC1wcm9ncmFtLWNvdW50ZXIiLCAy
NiwgMTEpOwotICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIDI2LCAxMSk7Ci0gICAgICAgIGRy
YXdCcmVha3BvaW50KGN0eCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMjAs
IDAsIDYsIDExKTsKLSAgICAgICAgdGhpcy5fZHJhd1Byb2dyYW1Db3VudGVySW5Db250ZXh0KGN0
eCwgdHJ1ZSk7Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlczsK
LSAgICB9LAotCi0gICAgc3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlwdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXTsKLSAgICAgICAgaWYgKCF0YWJsZSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fc291cmNlRnJhbWUuX2NvbnRleHRNZW51KGxp
bmVOdW1iZXIsIGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CiAKLSAgICAgICAg
dmFyIGpzU3ludGF4SGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VTeW50YXhIaWdobGlnaHRlcih0YWJsZSwgdGhpcyk7Ci0gICAgICAgIGpzU3ludGF4SGlnaGxp
Z2h0ZXIucHJvY2VzcygpOwotICAgIH0sCitXZWJJbnNwZWN0b3IuRXhlY3V0aW9uTGluZURlY29y
YXRvciA9IGZ1bmN0aW9uKHNvdXJjZUZyYW1lKQoreworICAgIHRoaXMuX3NvdXJjZUZyYW1lID0g
c291cmNlRnJhbWU7Cit9CiAKLSAgICBzeW50YXhIaWdobGlnaHRDU1M6IGZ1bmN0aW9uKCkKK1dl
Ykluc3BlY3Rvci5FeGVjdXRpb25MaW5lRGVjb3JhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBkZWNv
cmF0ZTogZnVuY3Rpb24obGluZU51bWJlciwgY3R4LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBsaW5l
SGVpZ2h0KQogICAgIHsKLSAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5lbGVtZW50LmNvbnRlbnRE
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGFibGUiKVswXTsKLSAgICAgICAgaWYgKCF0
YWJsZSkKKyAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUZyYW1lLl9leGVjdXRpb25MaW5lICE9PSBs
aW5lTnVtYmVyICsgMSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY3R4LnNhdmUoKTsK
KyAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMTcxLCAxOTEsIDI1NCkiOworICAgICAgICBj
dHguZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIAorICAgICAgICBjdHgu
YmVnaW5QYXRoKCk7CisgICAgICAgIGN0eC5yZWN0KHggLSAxLCB5LCB3aWR0aCArIDIsIGhlaWdo
dCk7CisgICAgICAgIGN0eC5jbGlwKCk7CisgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2Io
NjQsIDExNSwgMjQ0KSI7CisgICAgICAgIGN0eC5zdHJva2UoKTsKIAotICAgICAgICB2YXIgY3Nz
U3ludGF4SGlnaGxpZ2h0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1NvdXJjZVN5bnRheEhpZ2hs
aWdodGVyKHRhYmxlLCB0aGlzKTsKLSAgICAgICAgY3NzU3ludGF4SGlnaGxpZ2h0ZXIucHJvY2Vz
cygpOworICAgICAgICBjdHgucmVzdG9yZSgpOwogICAgIH0KIH0KLQotV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFt
ZTIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUyLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWJmOThlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZTIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1
MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZTIgPSBmdW5jdGlvbihhZGRCcmVha3Bv
aW50RGVsZWdhdGUpCi17Ci0gICAgdGhpcy5fZWRpdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yKFdlYkluc3BlY3Rvci5wbGF0Zm9ybSk7Ci0gICAgdGhpcy5fdGV4dE1vZGVsID0gdGhp
cy5fZWRpdG9yLnRleHRNb2RlbDsKLSAgICB0aGlzLl9lZGl0b3IubGluZU51bWJlckRlY29yYXRv
ciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IodGhpcyk7
Ci0gICAgdGhpcy5fZWRpdG9yLmxpbmVEZWNvcmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1
dGlvbkxpbmVEZWNvcmF0b3IodGhpcyk7Ci0gICAgdGhpcy5fZWRpdG9yLnJlYWRPbmx5ID0gdHJ1
ZTsKLSAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwotICAgIHRoaXMuX3Jvd01lc3NhZ2VzID0ge307
Ci0gICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXMgPSB7fTsKLSAgICB0aGlzLmJyZWFrcG9pbnRzID0g
W107Ci0gICAgdGhpcy5fc2hvcnRjdXRzID0ge307Ci0gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5f
ZWRpdG9yLmVsZW1lbnQ7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRv
d24iLCB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuX2xvYWRlZCA9
IGZhbHNlOwotCi0gICAgdGhpcy5hZGRCcmVha3BvaW50RGVsZWdhdGUgPSBhZGRCcmVha3BvaW50
RGVsZWdhdGU7Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZTIucHJvdG90eXBlID0gewot
Ci0gICAgZ2V0IGV4ZWN1dGlvbkxpbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4
ZWN1dGlvbkxpbmU7Ci0gICAgfSwKLQotICAgIHNldCBleGVjdXRpb25MaW5lKHgpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uTGluZSA9PT0geCkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uTGluZSA9IHg7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5yZXBhaW50QWxsKCk7Ci0gICAgfSwKLQotICAgIHJldmVhbExpbmU6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkKLSAgICAgICAgICAgIHRo
aXMuX2xpbmVOdW1iZXJUb1JldmVhbCA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRoaXMuX2VkaXRvci5yZXZlYWwobGluZU51bWJlciAtIDEsIDApOwotICAgIH0sCi0K
LSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAgICAg
dGhpcy5icmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAgICAgICBicmVha3BvaW50LmFk
ZEV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7
Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZGlzYWJsZWQiLCB0aGlzLl9i
cmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7
Ci0gICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZShicmVha3BvaW50KTsKLSAgICB9
LAotCi0gICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBicmVh
a3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJsZWQiLCBudWxsLCB0aGlzKTsKLSAgICAg
ICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNhYmxlZCIsIG51bGwsIHRoaXMp
OwotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFu
Z2VkIiwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291
cmNlKGJyZWFrcG9pbnQpOwotICAgIH0sCi0KLSAgICBhZGRNZXNzYWdlOiBmdW5jdGlvbihtc2cp
Ci0gICAgewotICAgICAgICAvLyBEb24ndCBhZGQgdGhlIG1lc3NhZ2UgaWYgdGhlcmUgaXMgbm8g
bWVzc2FnZSBvciB2YWxpZCBsaW5lIG9yIGlmIHRoZSBtc2cgaXNuJ3QgYW4gZXJyb3Igb3Igd2Fy
bmluZy4KLSAgICAgICAgaWYgKCFtc2cubWVzc2FnZSB8fCBtc2cubGluZSA8PSAwIHx8ICFtc2cu
aXNFcnJvck9yV2FybmluZygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9t
ZXNzYWdlcy5wdXNoKG1zZyk7Ci0gICAgICAgIHRoaXMuX2FkZE1lc3NhZ2VUb1NvdXJjZShtc2cp
OwotICAgIH0sCi0KLSAgICBjbGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBmb3IgKHZhciBsaW5lIGluIHRoaXMuX21lc3NhZ2VCdWJibGVzKSB7Ci0gICAgICAgICAgICB2
YXIgYnViYmxlID0gdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbGluZV07Ci0gICAgICAgICAgICBidWJi
bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChidWJibGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dGhpcy5fbWVzc2FnZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKLSAg
ICAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXMgPSB7fTsKLSAgICAgICAgdGhpcy5fZWRpdG9yLnBh
Y2tBbmRSZXBhaW50QWxsKCk7Ci0gICAgfSwKLQotICAgIHNpemVUb0ZpdENvbnRlbnRIZWlnaHQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFs
bCgpOwotICAgIH0sCi0KLSAgICBzZXRDb250ZW50OiBmdW5jdGlvbihtaW1lVHlwZSwgY29udGVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2Vk
aXRvci5taW1lVHlwZSA9IG1pbWVUeXBlOwotICAgICAgICB0aGlzLl9lZGl0b3IudGV4dCA9IGNv
bnRlbnQ7Ci0KLSAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdNZXNzYWdlc1RvU291cmNlKCk7Ci0g
ICAgICAgIHRoaXMuX2FkZEV4aXN0aW5nQnJlYWtwb2ludHNUb1NvdXJjZSgpOwotICAgICAgICBp
ZiAodGhpcy5fZXhlY3V0aW9uTGluZSkKLSAgICAgICAgICAgIHRoaXMucmV2ZWFsTGluZSh0aGlz
Ll9leGVjdXRpb25MaW5lKTsKLQotICAgICAgICBpZiAodGhpcy5fbGluZU51bWJlclRvUmV2ZWFs
KSB7Ci0gICAgICAgICAgICB0aGlzLnJldmVhbExpbmUodGhpcy5fbGluZU51bWJlclRvUmV2ZWFs
KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWw7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAg
ICAgIHRoaXMuX2VkaXRvci51cGRhdGVDYW52YXNTaXplKCk7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5wYWNrQW5kUmVwYWludEFsbCgpOwotICAgICAgICB0aGlzLl9lZGl0b3Iuc2V0Q29hbGVzY2lu
Z1VwZGF0ZShmYWxzZSk7Ci0gICAgfSwKLQotICAgIGZpbmRTZWFyY2hNYXRjaGVzOiBmdW5jdGlv
bihxdWVyeSkKLSAgICB7Ci0gICAgICAgIHZhciByYW5nZXMgPSBbXTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpOwotICAgICAgICAgICAgdmFy
IGNvbHVtbiA9IGxpbmUuaW5kZXhPZihxdWVyeSk7Ci0gICAgICAgICAgICBpZiAoY29sdW1uID09
PSAtMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXNo
KG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKGksIGNvbHVtbiwgaSwgY29sdW1uICsgcXVlcnku
bGVuZ3RoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJhbmdlczsKLSAgICB9LAotCi0g
ICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbihyYW5nZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Vk
aXRvci5zZXRTZWxlY3Rpb24ocmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbHVtbiwgcmFu
Z2UuZW5kTGluZSwgcmFuZ2UuZW5kQ29sdW1uKTsKLSAgICB9LAotCi0gICAgX2luY3JlbWVudE1l
c3NhZ2VSZXBlYXRDb3VudDogZnVuY3Rpb24obXNnLCByZXBlYXREZWx0YSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbXNnLl9yZXNvdXJjZU1lc3NhZ2VMaW5lRWxlbWVudCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIW1zZy5fcmVzb3VyY2VNZXNzYWdlUmVwZWF0Q291bnRFbGVt
ZW50KSB7Ci0gICAgICAgICAgICB2YXIgcmVwZWF0ZWRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VMaW5lRWxl
bWVudC5hcHBlbmRDaGlsZChyZXBlYXRlZEVsZW1lbnQpOwotICAgICAgICAgICAgbXNnLl9yZXNv
dXJjZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQgPSByZXBlYXRlZEVsZW1lbnQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBtc2cucmVwZWF0Q291bnQgKz0gcmVwZWF0RGVsdGE7Ci0gICAgICAgIG1z
Zy5fcmVzb3VyY2VNZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIgKHJlcGVhdGVkICVkIHRpbWVzKSIsIG1zZy5yZXBlYXRDb3VudCk7
Ci0gICAgfSwKLQotICAgIF9hZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLl9tZXNzYWdlcy5sZW5ndGg7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9h
ZGRNZXNzYWdlVG9Tb3VyY2UodGhpcy5fbWVzc2FnZXNbaV0pOwotICAgIH0sCi0KLSAgICBfYWRk
TWVzc2FnZVRvU291cmNlOiBmdW5jdGlvbihtc2cpCi0gICAgewotICAgICAgICBpZiAobXNnLmxp
bmUgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgdmFyIG1lc3NhZ2VCdWJibGVFbGVtZW50ID0gdGhpcy5fbWVzc2FnZUJ1YmJsZXNb
bXNnLmxpbmVdOwotICAgICAgICBpZiAoIW1lc3NhZ2VCdWJibGVFbGVtZW50IHx8IG1lc3NhZ2VC
dWJibGVFbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhbWVzc2FnZUJ1
YmJsZUVsZW1lbnQuaGFzU3R5bGVDbGFzcygid2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUiKSkg
ewotICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmNsYXNzTmFtZSA9
ICJ3ZWJraXQtaHRtbC1tZXNzYWdlLWJ1YmJsZSI7Ci0gICAgICAgICAgICB0aGlzLl9tZXNzYWdl
QnViYmxlc1ttc2cubGluZV0gPSBtZXNzYWdlQnViYmxlRWxlbWVudDsKLSAgICAgICAgICAgIHRo
aXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKG1zZy5saW5lIC0gMSwgbWVzc2FnZUJ1YmJsZUVs
ZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHJvd01lc3NhZ2VzID0gdGhpcy5fcm93
TWVzc2FnZXNbbXNnLmxpbmVdOwotICAgICAgICBpZiAoIXJvd01lc3NhZ2VzKSB7Ci0gICAgICAg
ICAgICByb3dNZXNzYWdlcyA9IFtdOwotICAgICAgICAgICAgdGhpcy5fcm93TWVzc2FnZXNbbXNn
LmxpbmVdID0gcm93TWVzc2FnZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHJvd01lc3NhZ2VzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAocm93TWVz
c2FnZXNbaV0uaXNFcXVhbChtc2csIHRydWUpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5j
cmVtZW50TWVzc2FnZVJlcGVhdENvdW50KHJvd01lc3NhZ2VzW2ldLCBtc2cucmVwZWF0RGVsdGEp
OwotICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFsbCgpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHJvd01lc3NhZ2VzLnB1c2gobXNnKTsKLQotICAgICAgICB2YXIgaW1hZ2VVUkw7Ci0gICAgICAg
IHN3aXRjaCAobXNnLmxldmVsKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZUJ1
YmJsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygid2Via2l0LWh0bWwtZXJyb3ItbWVzc2FnZSIpOwot
ICAgICAgICAgICAgICAgIGltYWdlVVJMID0gIkltYWdlcy9lcnJvckljb24ucG5nIjsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIG1lc3NhZ2VCdWJi
bGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoIndlYmtpdC1odG1sLXdhcm5pbmctbWVzc2FnZSIpOwot
ICAgICAgICAgICAgICAgIGltYWdlVVJMID0gIkltYWdlcy93YXJuaW5nSWNvbi5wbmciOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VMaW5l
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBtZXNzYWdl
TGluZUVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtbGluZSI7Ci0gICAg
ICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmFwcGVuZENoaWxkKG1lc3NhZ2VMaW5lRWxlbWVudCk7
Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSBlbGVtZW50IGluIHRoZSBJbnNwZWN0b3In
cyBkb2N1bWVudCBzbyB3ZSBjYW4gdXNlIHJlbGF0aXZlIGltYWdlIFVSTHMuCi0gICAgICAgIHZh
ciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwotICAgICAgICBpbWFnZS5z
cmMgPSBpbWFnZVVSTDsKLSAgICAgICAgaW1hZ2UuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLW1l
c3NhZ2UtaWNvbiI7Ci0gICAgICAgIG1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGlsZChpbWFn
ZSk7Ci0gICAgICAgIG1lc3NhZ2VMaW5lRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtc2cubWVzc2FnZSkpOwotCi0gICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdl
TGluZUVsZW1lbnQgPSBtZXNzYWdlTGluZUVsZW1lbnQ7Ci0KLSAgICAgICAgdGhpcy5fZWRpdG9y
LnBhY2tBbmRSZXBhaW50QWxsKCk7Ci0gICAgfSwKLQotICAgIF9hZGRFeGlzdGluZ0JyZWFrcG9p
bnRzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBsZW5ndGggPSB0aGlz
LmJyZWFrcG9pbnRzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZSh0aGlzLmJyZWFr
cG9pbnRzW2ldKTsKLSAgICB9LAotCi0gICAgX2FkZEJyZWFrcG9pbnRUb1NvdXJjZTogZnVuY3Rp
b24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1
dGUoYnJlYWtwb2ludC5saW5lIC0gMSwgImJyZWFrcG9pbnQiLCBicmVha3BvaW50KTsKLSAgICAg
ICAgdGhpcy5fZWRpdG9yLnBhaW50TGluZU51bWJlcnMoKTsKLSAgICB9LAotCi0gICAgX3JlbW92
ZUJyZWFrcG9pbnRGcm9tU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAg
ICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShicmVha3BvaW50LmxpbmUgLSAxLCAi
YnJlYWtwb2ludCIpOwotICAgICAgICB0aGlzLl9lZGl0b3IucGFpbnRMaW5lTnVtYmVycygpOwot
ICAgIH0sCi0KLSAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGV2ZW50KQot
ICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmFkZEJyZWFrcG9pbnREZWxlZ2F0ZSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9y
LkNvbnRleHRNZW51KCk7Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl90ZXh0TW9k
ZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7Ci0gICAgICAgIGlmICgh
YnJlYWtwb2ludCkgewotICAgICAgICAgICAgLy8gVGhpcyByb3cgZG9lc24ndCBoYXZlIGEgYnJl
YWtwb2ludDogV2Ugd2FudCB0byBzaG93IEFkZCBCcmVha3BvaW50IGFuZCBBZGQgYW5kIEVkaXQg
QnJlYWtwb2ludC4KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLmFkZEJyZWFrcG9pbnREZWxlZ2F0
ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGFk
ZENvbmRpdGlvbmFsQnJlYWtwb2ludCgpIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRoaXMuYWRkQnJlYWtwb2ludERlbGVnYXRlKGxpbmVOdW1iZXIgKyAxKTsKLSAgICAgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51
bWJlciwgImJyZWFrcG9pbnQiKTsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludCkKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24oYnJlYWtwb2lu
dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2ludC4uLiIpLCBh
ZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cg
ZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUu
Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92
ZUJyZWFrcG9pbnQuYmluZChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMsIGJyZWFrcG9pbnQp
KTsKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJFZGl0IEJyZWFrcG9pbnQuLi4iKSwgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24u
YmluZCh0aGlzLCBicmVha3BvaW50KSk7Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFi
bGVkKQotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJEaXNhYmxlIEJyZWFrcG9pbnQiKSwgZnVuY3Rpb24oKSB7IGJyZWFrcG9pbnQu
ZW5hYmxlZCA9IGZhbHNlOyB9KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRW5hYmxlIEJyZWFr
cG9pbnQiKSwgZnVuY3Rpb24oKSB7IGJyZWFrcG9pbnQuZW5hYmxlZCA9IHRydWU7IH0pOwotICAg
ICAgICB9Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coZXZlbnQpOwotICAgIH0sCi0KLSAgICBf
dG9nZ2xlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgZXZlbnQpCi0gICAgewotICAg
ICAgICBpZiAoZXZlbnQuYnV0dG9uICE9IDAgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxL
ZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRl
KGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7Ci0gICAgICAgIGlmIChicmVha3BvaW50KQotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnJlbW92ZUJyZWFrcG9pbnQoYnJl
YWtwb2ludCk7Ci0gICAgICAgIGVsc2UgaWYgKHRoaXMuYWRkQnJlYWtwb2ludERlbGVnYXRlKQot
ICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50RGVsZWdhdGUobGluZU51bWJlciArIDEpOwot
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfZWRpdEJyZWFr
cG9pbnRDb25kaXRpb246IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICB0aGlz
Ll9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVwKGJyZWFrcG9pbnQubGluZSk7Ci0KLSAgICAg
ICAgZnVuY3Rpb24gY29tbWl0dGVkKGVsZW1lbnQsIG5ld1RleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gbmV3VGV4dDsKLSAgICAgICAgICAgIHRoaXMu
X2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7Ci0gICAgICAgICAgICBkaXNtaXNzZWQuY2FsbCh0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNvcmF0aW9uKGJyZWFrcG9pbnQu
bGluZSAtIDEsIG51bGwpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVkaXRv
ckVsZW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGlzbWlzc2VkSGFuZGxlciA9IGRp
c21pc3NlZC5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBkaXNtaXNzZWRIYW5kbGVyLCBmYWxzZSk7Ci0KLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVt
ZW50LCBjb21taXR0ZWQuYmluZCh0aGlzKSwgZGlzbWlzc2VkSGFuZGxlcik7Ci0gICAgICAgIHRo
aXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQudmFsdWUgPSBicmVha3BvaW50LmNvbmRpdGlvbjsK
LSAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudC5zZWxlY3QoKTsKLSAgICB9LAot
Ci0gICAgX3Nob3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXA6IGZ1bmN0aW9uKGxpbmVOdW1iZXIp
Ci0gICAgewotICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUNvbmRp
dGlvbkVsZW1lbnQobGluZU51bWJlcik7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5zZXREaXZEZWNv
cmF0aW9uKGxpbmVOdW1iZXIgLSAxLCBjb25kaXRpb25FbGVtZW50KTsKLSAgICB9LAotCi0gICAg
X2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewotICAg
ICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICBjb25kaXRpb25FbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtYnJlYWtwb2lu
dC1jb25kaXRpb24iOwotCi0gICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJsYWJlbCIpOwotICAgICAgICBsYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gInNv
dXJjZS1icmVha3BvaW50LW1lc3NhZ2UiOwotICAgICAgICBsYWJlbEVsZW1lbnQuaHRtbEZvciA9
ICJzb3VyY2UtYnJlYWtwb2ludC1jb25kaXRpb24iOwotICAgICAgICBsYWJlbEVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJU
aGUgYnJlYWtwb2ludCBvbiBsaW5lICVkIHdpbGwgc3RvcCBvbmx5IGlmIHRoaXMgZXhwcmVzc2lv
biBpcyB0cnVlOiIsIGxpbmVOdW1iZXIpKSk7Ci0gICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBw
ZW5kQ2hpbGQobGFiZWxFbGVtZW50KTsKLQotICAgICAgICB2YXIgZWRpdG9yRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Ci0gICAgICAgIGVkaXRvckVsZW1lbnQuaWQg
PSAic291cmNlLWJyZWFrcG9pbnQtY29uZGl0aW9uIjsKLSAgICAgICAgZWRpdG9yRWxlbWVudC50
eXBlID0gInRleHQiCi0gICAgICAgIGNvbmRpdGlvbkVsZW1lbnQuYXBwZW5kQ2hpbGQoZWRpdG9y
RWxlbWVudCk7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQgPSBlZGl0b3JF
bGVtZW50OwotCi0gICAgICAgIHJldHVybiBjb25kaXRpb25FbGVtZW50OwotICAgIH0sCi0KLSAg
ICBfa2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc2hvcnRjdXQg
PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5tYWtlS2V5RnJvbUV2ZW50KGV2ZW50KTsK
LSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9zaG9ydGN1dHNbc2hvcnRjdXRdOwotICAgICAg
ICBpZiAoaGFuZGxlcikgewotICAgICAgICAgICAgaGFuZGxlcihldmVudCk7Ci0gICAgICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmRvY3VtZW50S2V5RG93bihldmVudCk7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgX2V2YWxTZWxlY3Rpb25JbkNhbGxGcmFtZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyB8fCAhV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzLnBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgc2VsZWN0aW9uID0gdGhpcy5lbGVtZW50LmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7
Ci0gICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS50b1N0
cmluZygpLnRyaW1XaGl0ZXNwYWNlKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2UsICJjb25z
b2xlIiwgZnVuY3Rpb24ocmVzdWx0LCBleGNlcHRpb24pIHsKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zaG93Q29uc29sZSgpOwotICAgICAgICAgICAgdmFyIGNvbW1hbmRNZXNzYWdlID0gbmV3
IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZChleHByZXNzaW9uKTsKLSAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jb25zb2xlLmFkZE1lc3NhZ2UoY29tbWFuZE1lc3NhZ2UpOwotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNv
bGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgZXhjZXB0aW9uLCBjb21tYW5kTWVzc2FnZSkpOwotICAg
ICAgICB9KTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRDaGFuZ2VkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2VkaXRvci5wYWludExpbmVOdW1iZXJzKCk7Ci0gICAg
fSwKLQotICAgIHJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZWRpdG9y
LnVwZGF0ZUNhbnZhc1NpemUoKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZTIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwot
Ci1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IgPSBmdW5jdGlvbihz
b3VyY2VGcmFtZSkKLXsKLSAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOwotICAg
IHRoaXMuX3RleHRNb2RlbCA9IHNvdXJjZUZyYW1lLl9lZGl0b3IudGV4dE1vZGVsOwotfQotCi1X
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludExpbmVOdW1iZXJEZWNvcmF0b3IucHJvdG90eXBlID0gewot
ICAgIGRlY29yYXRlOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjdHgsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGxpbmVIZWlnaHQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQiKTsKLSAgICAgICAg
dmFyIGlzRXhlY3V0aW9uTGluZSA9IGxpbmVOdW1iZXIgKyAxID09PSB0aGlzLl9zb3VyY2VGcmFt
ZS5fZXhlY3V0aW9uTGluZTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQgfHwgaXNFeGVjdXRpb25M
aW5lKSB7Ci0gICAgICAgICAgICBjdHguc2F2ZSgpOwotICAgICAgICAgICAgY3R4LnRyYW5zbGF0
ZSh4ICsgNCwgeSArIDIpOwotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRXaWR0aCA9IHdpZHRo
IC0gNjsKLSAgICAgICAgICAgIHZhciBicmVha3BvaW50SGVpZ2h0ID0gbGluZUhlaWdodCAtIDQ7
Ci0gICAgCi0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludCkKLSAgICAgICAgICAgICAgICB0aGlz
Ll9wYWludEJyZWFrcG9pbnQoY3R4LCBicmVha3BvaW50V2lkdGgsIGJyZWFrcG9pbnRIZWlnaHQs
IGJyZWFrcG9pbnQpOwotICAgIAotICAgICAgICAgICAgaWYgKGlzRXhlY3V0aW9uTGluZSkKLSAg
ICAgICAgICAgICAgICB0aGlzLl9wYWludFByb2dyYW1Db3VudGVyKGN0eCwgYnJlYWtwb2ludFdp
ZHRoLCBicmVha3BvaW50SGVpZ2h0LCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGN0eC5yZXN0b3Jl
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNFeGVjdXRpb25MaW5lKSB7Ci0gICAgICAg
ICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IGJlaGF2aW9yLgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjdHguZmlsbFN0eWxlID0gYnJlYWtwb2ludCA/ICJy
Z2IoMjU1LDI1NSwyNTUpIiA6ICJyZ2IoMTU1LDE1NSwxNTUpIjsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0sCi0KLSAgICBfcGFpbnRCcmVha3BvaW50OiBmdW5jdGlvbihjdHgsIHdpZHRo
LCBoZWlnaHQsIGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0g
ICAgICAgIGN0eC5tb3ZlVG8oMCwgMik7Ci0gICAgICAgIGN0eC5saW5lVG8oMiwgMCk7Ci0gICAg
ICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCAwKTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCwg
aGVpZ2h0IC8gMik7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCBoZWlnaHQpOwotICAg
ICAgICBjdHgubGluZVRvKDIsIGhlaWdodCk7Ci0gICAgICAgIGN0eC5saW5lVG8oMCwgaGVpZ2h0
IC0gMik7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKLSAgICAgICAgY3R4LmZpbGxTdHlsZSA9
IGJyZWFrcG9pbnQuY29uZGl0aW9uID8gInJnYigyMTcsIDE0MiwgMSkiIDogInJnYigxLCAxNDIs
IDIxNykiOwotICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBicmVha3BvaW50LmNvbmRpdGlvbiA/
ICJyZ2IoMjA1LCAxMDMsIDApIiA6ICJyZ2IoMCwgMTAzLCAyMDUpIjsKLSAgICAgICAgY3R4Lmxp
bmVXaWR0aCA9IDM7Ci0gICAgICAgIGN0eC5maWxsKCk7Ci0KLSAgICAgICAgY3R4LnNhdmUoKTsK
LSAgICAgICAgY3R4LmNsaXAoKTsKLSAgICAgICAgY3R4LnN0cm9rZSgpOwotICAgICAgICBjdHgu
cmVzdG9yZSgpOwotCi0gICAgICAgIGlmICghYnJlYWtwb2ludC5lbmFibGVkKSB7Ci0gICAgICAg
ICAgICBjdHguc2F2ZSgpOwotICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlv
biA9ICJkZXN0aW5hdGlvbi1vdXQiOwotICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2Jh
KDAsIDAsIDAsIDAuNSkiOwotICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwotICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICBfcGFpbnRQcm9ncmFtQ291bnRlcjogZnVuY3Rpb24oY3R4LCB3aWR0aCwgaGVpZ2h0KQot
ICAgIHsKLSAgICAgICAgY3R4LnNhdmUoKTsKLQotICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0g
ICAgICAgIGN0eC5tb3ZlVG8od2lkdGggLSA5LCAyKTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0
aCAtIDcsIDIpOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gNywgMCk7Ci0gICAgICAgIGN0
eC5saW5lVG8od2lkdGggLSA1LCAwKTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCwgaGVpZ2h0
IC8gMik7Ci0gICAgICAgIGN0eC5saW5lVG8od2lkdGggLSA1LCBoZWlnaHQpOwotICAgICAgICBj
dHgubGluZVRvKHdpZHRoIC0gNywgaGVpZ2h0KTsKLSAgICAgICAgY3R4LmxpbmVUbyh3aWR0aCAt
IDcsIGhlaWdodCAtIDIpOwotICAgICAgICBjdHgubGluZVRvKHdpZHRoIC0gOSwgaGVpZ2h0IC0g
Mik7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKLSAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJy
Z2IoMTQyLCA1LCA0KSI7Ci0KLSAgICAgICAgY3R4LnNoYWRvd0JsdXIgPSA0OwotICAgICAgICBj
dHguc2hhZG93Q29sb3IgPSAicmdiKDI1NSwgMjU1LCAyNTUpIjsKLSAgICAgICAgY3R4LnNoYWRv
d09mZnNldFggPSAtMTsKLSAgICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwOwotCi0gICAgICAg
IGN0eC5maWxsKCk7Ci0gICAgICAgIGN0eC5maWxsKCk7IC8vIEZpbGwgdHdpY2UgdG8gZ2V0IGEg
Z29vZCBzaGFkb3cgYW5kIGRhcmtlciBhbnRpLWFsaWFzZWQgcGl4ZWxzLgotCi0gICAgICAgIGN0
eC5yZXN0b3JlKCk7Ci0gICAgfSwKLQotICAgIG1vdXNlRG93bjogZnVuY3Rpb24obGluZU51bWJl
ciwgZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NvdXJjZUZyYW1lLl90b2dnbGVCcmVha3BvaW50
KGxpbmVOdW1iZXIsIGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgY29u
dGV4dE1lbnU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGUpCi0gICAgewotICAgICAgICB0aGlzLl9z
b3VyY2VGcmFtZS5fY29udGV4dE1lbnUobGluZU51bWJlciwgZSk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkxpbmVEZWNvcmF0b3IgPSBm
dW5jdGlvbihzb3VyY2VGcmFtZSkKLXsKLSAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZy
YW1lOwotfQotCi1XZWJJbnNwZWN0b3IuRXhlY3V0aW9uTGluZURlY29yYXRvci5wcm90b3R5cGUg
PSB7Ci0gICAgZGVjb3JhdGU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGN0eCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgbGluZUhlaWdodCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zb3VyY2VGcmFt
ZS5fZXhlY3V0aW9uTGluZSAhPT0gbGluZU51bWJlciArIDEpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGN0eC5zYXZlKCk7Ci0gICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiKDE3MSwg
MTkxLCAyNTQpIjsKLSAgICAgICAgY3R4LmZpbGxSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICAKLSAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICBjdHgucmVjdCh4IC0g
MSwgeSwgd2lkdGggKyAyLCBoZWlnaHQpOwotICAgICAgICBjdHguY2xpcCgpOwotICAgICAgICBj
dHguc3Ryb2tlU3R5bGUgPSAicmdiKDY0LCAxMTUsIDI0NCkiOwotICAgICAgICBjdHguc3Ryb2tl
KCk7Ci0KLSAgICAgICAgY3R4LnJlc3RvcmUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCmluZGV4IGNkZmRiZGMuLmRjNGJiYjggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0zMCw3ICszMCw3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCiB7CiAgICAgV2ViSW5z
cGVjdG9yLlJlc291cmNlVmlldy5jYWxsKHRoaXMsIHJlc291cmNlKTsKIAotICAgIHRoaXMuc291
cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKG51bGwsIHRoaXMuX2FkZEJy
ZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUodGhpcy5fYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKIAogICAg
IHJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaGVkIiwgdGhpcy5fcmVzb3VyY2VMb2Fk
aW5nRmluaXNoZWQsIHRoaXMpOwogCkBAIC00OCw4ICs0OCw5IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90
b3R5cGUgPSB7CiAgICAgc2hvdzogZnVuY3Rpb24ocGFyZW50RWxlbWVudCkKICAgICB7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzLCBw
YXJlbnRFbGVtZW50KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlLnNob3cu
Y2FsbCh0aGlzLCBwYXJlbnRFbGVtZW50KTsKICAgICAgICAgdGhpcy5zZXR1cFNvdXJjZUZyYW1l
SWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICB9LAogCiAgICAgaGlkZTog
ZnVuY3Rpb24oKQpAQCAtNTgsNiArNTksMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsK
ICAgICB9LAogCisgICAgcmVzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fc291cmNlRnJhbWVTZXR1cCkKKyAgICAgICAgICAgIHRoaXMuc291cmNlRnJhbWUucmVzaXpl
KCk7CisgICAgfSwKKwogICAgIGRldGFjaDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLlJlc291cmNlVmlldy5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyk7CkBAIC03
NiwyOCArODMsMTMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLmF0dGFjaCgpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU5lZWRzU2V0
dXA7Ci0gICAgICAgIHRoaXMuc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGVudCBs
b2FkZWQiLCB0aGlzLl9jb250ZW50TG9hZGVkLCB0aGlzKTsKLSAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmFkZFJlc291cmNlU291cmNlVG9GcmFtZSh0aGlzLnJlc291cmNlLmlkZW50aWZp
ZXIsIHRoaXMuc291cmNlRnJhbWUuZWxlbWVudCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5nZXRS
ZXNvdXJjZUNvbnRlbnQodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLl9jb250ZW50TG9h
ZGVkLmJpbmQodGhpcykpOwogICAgIH0sCiAgICAgCi0gICAgX2NvbnRlbnRMb2FkZWQ6IGZ1bmN0
aW9uKCkKKyAgICBfY29udGVudExvYWRlZDogZnVuY3Rpb24oY29udGVudCkKICAgICB7Ci0gICAg
ICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU5lZWRzU2V0dXA7Ci0gICAgICAgIHRoaXMuc291cmNlRnJh
bWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGVudCBsb2FkZWQiLCB0aGlzLl9jb250ZW50TG9h
ZGVkLCB0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0aGlzLnJlc291cmNlLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdAotICAgICAgICAgICAgfHwgdGhpcy5y
ZXNvdXJjZS5taW1lVHlwZSA9PT0gImFwcGxpY2F0aW9uL2pzb24iCi0gICAgICAgICAgICB8fCB0
aGlzLnJlc291cmNlLm1pbWVUeXBlID09PSAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIKLSAgICAg
ICAgICAgIHx8IC9cLmpzKG9uKT8kLy50ZXN0KHRoaXMucmVzb3VyY2UubGFzdFBhdGhDb21wb25l
bnQpICkgewotICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5hZGRFdmVudExpc3RlbmVyKCJz
eW50YXggaGlnaGxpZ2h0aW5nIGNvbXBsZXRlIiwgdGhpcy5fc3ludGF4SGlnaGxpZ2h0aW5nQ29t
cGxldGUsIHRoaXMpOwotICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zeW50YXhIaWdobGln
aHRKYXZhc2NyaXB0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TdHlsZXNoZWV0Ci0gICAgICAgICAgICB8fCB0
aGlzLnJlc291cmNlLm1pbWVUeXBlID09PSAidGV4dC9jc3MiCi0gICAgICAgICAgICB8fCAvXC5j
c3MkLy50ZXN0KHRoaXMucmVzb3VyY2UubGFzdFBhdGhDb21wb25lbnQpICkgewotICAgICAgICAg
ICAgdGhpcy5zb3VyY2VGcmFtZS5hZGRFdmVudExpc3RlbmVyKCJzeW50YXggaGlnaGxpZ2h0aW5n
IGNvbXBsZXRlIiwgdGhpcy5fc3ludGF4SGlnaGxpZ2h0aW5nQ29tcGxldGUsIHRoaXMpOwotICAg
ICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zeW50YXhIaWdobGlnaHRDU1MoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwRmluaXNoZWQoKTsKKyAg
ICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zZXRDb250ZW50KHRoaXMucmVzb3VyY2UubWltZVR5cGUs
IGNvbnRlbnQpOworICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwRmluaXNoZWQoKTsKICAg
ICB9LAogCiAgICAgX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkOiBmdW5jdGlvbihldmVudCkKQEAg
LTE0Myw0NCArMTM1LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgLy8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxsIHJlc2V0IGV2ZXJ5
dGhpbmcgd2UgbmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgogICAgICAgICB0aGlzLnNl
YXJjaENhbmNlbGVkKCk7CiAKLSAgICAgICAgdmFyIGxpbmVRdWVyeVJlZ2V4ID0gLyhefFxzKSg/
OiN8bGluZTpccyopKFxkKykoXHN8JCkvaTsKLSAgICAgICAgdmFyIGxpbmVRdWVyeU1hdGNoID0g
cXVlcnkubWF0Y2gobGluZVF1ZXJ5UmVnZXgpOwotICAgICAgICBpZiAobGluZVF1ZXJ5TWF0Y2gp
IHsKLSAgICAgICAgICAgIHZhciBsaW5lVG9TZWFyY2ggPSBwYXJzZUludChsaW5lUXVlcnlNYXRj
aFsyXSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIHNwYWNlIGJlZm9yZSBhbmQg
YWZ0ZXIgdGhlIGxpbmUgcXVlcnkgcGFydCwgcmVwbGFjZSB3aXRoIGEgc3BhY2UuCi0gICAgICAg
ICAgICAvLyBPdGhlcndpc2UgcmVwbGFjZSB3aXRoIGFuIGVtcHR5IHN0cmluZyB0byBlYXQgdGhl
IHByZWZpeCBvciBwb3N0Zml4IHNwYWNlLgotICAgICAgICAgICAgdmFyIGxpbmVRdWVyeVJlcGxh
Y2VtZW50ID0gKGxpbmVRdWVyeU1hdGNoWzFdICYmIGxpbmVRdWVyeU1hdGNoWzNdID8gIiAiIDog
IiIpOwotICAgICAgICAgICAgdmFyIGZpbHRlcmxlc3NRdWVyeSA9IHF1ZXJ5LnJlcGxhY2UobGlu
ZVF1ZXJ5UmVnZXgsIGxpbmVRdWVyeVJlcGxhY2VtZW50KTsKLSAgICAgICAgfQotCiAgICAgICAg
IHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgPSBmaW5pc2hlZENhbGxiYWNrOwogCiAgICAg
ICAgIGZ1bmN0aW9uIGZpbmRTZWFyY2hNYXRjaGVzKHF1ZXJ5LCBmaW5pc2hlZENhbGxiYWNrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNOYU4obGluZVRvU2VhcmNoKSkgewotICAgICAg
ICAgICAgICAgIC8vIFNlYXJjaCB0aGUgd2hvbGUgZG9jdW1lbnQgc2luY2UgdGhlcmUgd2FzIG5v
IGxpbmUgdG8gc2VhcmNoLgotICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSAo
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlYXJjaCh0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQuY29u
dGVudERvY3VtZW50LCBxdWVyeSkgfHwgW10pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB2YXIgc291cmNlUm93ID0gdGhpcy5zb3VyY2VGcmFtZS5zb3VyY2VSb3cobGlu
ZVRvU2VhcmNoKTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlUm93KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChmaWx0ZXJsZXNzUXVlcnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGlzIHN0aWxsIGEgcXVlcnkgc3RyaW5nLCBzbyBzZWFyY2ggZm9yIHRoYXQgc3Ry
aW5nIGluIHRoZSBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVz
dWx0cyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VhcmNoKHNvdXJjZVJvdywgZmlsdGVybGVz
c1F1ZXJ5KSB8fCBbXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBNYXRjaCB0aGUgd2hvbGUgbGluZSwgc2luY2UgdGhlcmUgd2FzIG5v
IHJlbWFpbmluZyBxdWVyeSBzdHJpbmcgdG8gbWF0Y2guCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgcm93UmFuZ2UgPSB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQuY29udGVudERvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dSYW5nZS5zZWxlY3RO
b2RlQ29udGVudHMoc291cmNlUm93KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nl
YXJjaFJlc3VsdHMgPSBbcm93UmFuZ2VdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzZWFyY2ggZm9yIHRo
ZSB3aG9sZSBxdWVyeSwganVzdCBpbmNhc2UgaXQgbWF0Y2hlcyBhIGNvbG9yIGxpa2UgIiMzMzMi
LgotICAgICAgICAgICAgICAgIHZhciB3aG9sZVF1ZXJ5TWF0Y2hlcyA9IEluc3BlY3RvckZyb250
ZW5kSG9zdC5zZWFyY2godGhpcy5zb3VyY2VGcmFtZS5lbGVtZW50LmNvbnRlbnREb2N1bWVudCwg
cXVlcnkpOwotICAgICAgICAgICAgICAgIGlmICh3aG9sZVF1ZXJ5TWF0Y2hlcykKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IHRoaXMuX3NlYXJjaFJlc3VsdHMuY29u
Y2F0KHdob2xlUXVlcnlNYXRjaGVzKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgdGhp
cy5fc2VhcmNoUmVzdWx0cyA9IHRoaXMuc291cmNlRnJhbWUuZmluZFNlYXJjaE1hdGNoZXMocXVl
cnkpOwogICAgICAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFJlc3VsdHMpCiAgICAgICAgICAgICAg
ICAgZmluaXNoZWRDYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7CiAg
ICAgICAgIH0KQEAgLTI2NywyOSArMjI2LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFmb3VuZFJhbmdlKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQuY29u
dGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJh
bmdlcygpOwotICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZm91bmRSYW5nZSk7Ci0KLSAgICAg
ICAgaWYgKGZvdW5kUmFuZ2Uuc3RhcnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCkK
LSAgICAgICAgICAgIGZvdW5kUmFuZ2Uuc3RhcnRDb250YWluZXIuc2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCh0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAoZm91bmRSYW5nZS5zdGFydENvbnRhaW5lci5w
YXJlbnROb2RlKQotICAgICAgICAgICAgZm91bmRSYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnRO
b2RlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7CisgICAgICAgIHRoaXMuc291cmNlRnJh
bWUuc2V0U2VsZWN0aW9uKGZvdW5kUmFuZ2UpOwogICAgIH0sCiAKICAgICBfc291cmNlRnJhbWVT
ZXR1cEZpbmlzaGVkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9zb3VyY2VGcmFt
ZVNldHVwID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICAgICAgaWYgKHRoaXMu
X2RlbGF5ZWRGaW5kU2VhcmNoTWF0Y2hlcykgewogICAgICAgICAgICAgdGhpcy5fZGVsYXllZEZp
bmRTZWFyY2hNYXRjaGVzKCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZGVsYXllZEZpbmRT
ZWFyY2hNYXRjaGVzOwogICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9zeW50YXhIaWdobGlnaHRp
bmdDb21wbGV0ZTogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLl9zb3VyY2VG
cmFtZVNldHVwRmluaXNoZWQoKTsKLSAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5yZW1vdmVFdmVu
dExpc3RlbmVyKCJzeW50YXggaGlnaGxpZ2h0aW5nIGNvbXBsZXRlIiwgbnVsbCwgdGhpcyk7CiAg
ICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVk
aXRvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzCmluZGV4
IDQ2ZjBkNTUuLjNkODllZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0RWRpdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRp
dG9yLmpzCkBAIC01MzMsMTEgKzUzMywyMiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90
b3R5cGUgPSB7CiAKICAgICBfbW91c2VEb3duOiBmdW5jdGlvbihlKQogICAgIHsKKyAgICAgICAg
aWYgKGUuYnV0dG9uID09PSAyIHx8ICh0aGlzLl9pc01hYyAmJiBlLmN0cmxLZXkpKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2NhcmV0Rm9yTW91
c2VFdmVudChlKTsKIAogICAgICAgICBpZiAoZS5vZmZzZXRYIDwgdGhpcy5fbGluZU51bWJlcldp
ZHRoICYmIHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IpIHsKICAgICAgICAgICAgIGlmICh0aGlz
Ll9saW5lTnVtYmVyRGVjb3JhdG9yLm1vdXNlRG93bihsb2NhdGlvbi5saW5lLCBlKSkgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9zZWxlY3Rpb24ucmFuZ2UoKTsKKyAgICAgICAgICAgIGlm
ICghcmFuZ2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRleHQgPSB0aGlzLl90
ZXh0TW9kZWwuY29weVJhbmdlKHJhbmdlKTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dE1l
bnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7CisgICAgICAgICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkiKSwgdGhpcy5f
Y29weS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5zaG93KGV2ZW50
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChlLnNoaWZ0S2V5KQpA
QCAtODQ3LDggKzg1OCwxNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3NlbGVjdGlvbi5yYW5nZSgpOwogICAgICAgICB2
YXIgdGV4dCA9IHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UocmFuZ2UpOwogCi0gICAgICAgIHRo
aXMuX2NsaXBib2FyZC52YWx1ZSA9IHRleHQ7Ci0gICAgICAgIHRoaXMuX2NsaXBib2FyZC5zZWxl
Y3QoKTsKKyAgICAgICAgZnVuY3Rpb24gZGVsYXlDb3B5KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdGhpcy5fY2xpcGJvYXJkLnZhbHVlID0gdGV4dDsKKyAgICAgICAgICAgIHRoaXMuX2NsaXBi
b2FyZC5zZWxlY3QoKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJDb3B5Iik7
CisgICAgICAgICAgICB0aGlzLl9jbGlwYm9hcmQudmFsdWUgPSAiIjsKKyAgICAgICAgfQorCisg
ICAgICAgIHNldFRpbWVvdXQoZGVsYXlDb3B5LmJpbmQodGhpcykpOworICAgICAgICBpZiAoZSkK
KyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICB9LAogCiAgICAgX2JlZm9yZUN1
dDogZnVuY3Rpb24oZSkKQEAgLTg1OSw2ICs4NzksMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3IucHJvdG90eXBlID0gewogCiAgICAgX2N1dDogZnVuY3Rpb24oZSkKICAgICB7CisgICAgICAg
IGlmICh0aGlzLl9yZWFkT25seSkgeworICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdGhpcy5fdGV4dE1vZGVs
Lm1hcmtVbmRvYWJsZVN0YXRlKCk7CiAgICAgICAgIHRoaXMuX2NvcHkoZSk7CiAgICAgICAgIHRo
aXMuX3JlcGxhY2VTZWxlY3Rpb25XaXRoKCIiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMKaW5kZXggZDZkOWE1ZC4uMzYzYmI5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKQEAgLTY0LDcgKzY0LDYgQEAKICAgICA8ZmlsZT5TaWRlYmFyVHJlZUVs
ZW1lbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlQ1NTVG9rZW5pemVyLmpzPC9maWxlPgog
ICAgIDxmaWxlPlNvdXJjZUZyYW1lLmpzPC9maWxlPgotICAgIDxmaWxlPlNvdXJjZUZyYW1lMi5q
czwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VIVE1MVG9rZW5pemVyLmpzPC9maWxlPgogICAgIDxm
aWxlPlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNl
U3ludGF4SGlnaGxpZ2h0ZXIuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmh0bWwKaW5kZXggY2UxM2MwYS4uYTg2NjAwMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtOTMsNyArOTMsNiBAQCBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkF1ZGl0TGF1bmNoZXJWaWV3
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJS
ZXNvdXJjZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZTIuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZVN5bnRheEhpZ2hsaWdodGVyLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDU1NT
b3VyY2VTeW50YXhIaWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iSmF2YVNjcmlwdFNvdXJjZVN5bnRheEhpZ2hsaWdodGVyLmpz
Ij48L3NjcmlwdD4K
</data>
<flag name="review"
          id="29851"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>