<?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>42164</bug_id>
          
          <creation_ts>2010-07-13 07:07:40 -0700</creation_ts>
          <short_desc>[v8] Web Inspector: remove debugger code that doesn&apos;t use ScriptDebugServer</short_desc>
          <delta_ts>2010-07-14 05:18:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250478</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-13 07:07:40 -0700</bug_when>
    <thetext>There is some v8-specific code that is obsoleted by implementation of ScriptDebugServer for v8. It should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251020</commentid>
    <comment_count>1</comment_count>
      <attachid>61482</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-14 01:26:05 -0700</bug_when>
    <thetext>Created attachment 61482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251076</commentid>
    <comment_count>2</comment_count>
      <attachid>61497</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-14 02:58:49 -0700</bug_when>
    <thetext>Created attachment 61497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251121</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-07-14 05:18:16 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	WebKit/chromium/src/js/DebuggerAgent.js
	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/ScriptDebugServer.cpp
	M	WebCore/bindings/v8/ScriptDebugServer.h
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/WebKit.gypi
	M	WebKit/chromium/src/DebuggerAgentManager.cpp
	M	WebKit/chromium/src/InspectorFrontendClientImpl.cpp
	M	WebKit/chromium/src/WebDevToolsAgentImpl.cpp
	M	WebKit/chromium/src/js/DevTools.js
	M	WebKit/chromium/src/js/DevToolsHostStub.js
	M	WebKit/chromium/src/js/InspectorControllerImpl.js
	M	WebKit/chromium/src/js/Tests.js
Committed r63311</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61482</attachid>
            <date>2010-07-14 01:26:05 -0700</date>
            <delta_ts>2010-07-14 02:58:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42164-20100714122602.patch</filename>
            <type>text/plain</type>
            <size>25242</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGVmZDgzYjlhMzA4YjY3NjY2NGY4MWE0ZjEwNWNkNjI4N2U4MGIxNC4uZjkxY2NjY2U5NGQ3MTRm
Y2U0Zjg0MmI2ODMzNmZlNjZkYTM2NzdkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0xNCAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgdjggZGVi
dWdnZXIgY29kZSB0aGF0IGRvZXNuJ3QgdXNlIFNjcmlwdERlYnVnU2VydmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjE2NAorCisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0
cmlldmVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2lu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpz
ZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpjb250aW51ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmhhbmRsZVY4RGVidWdFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKwogMjAxMC0wNy0xNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAxMzgyMzdiMDRjMjBhY2I2NzYy
NTM4Yzg2NzZkZTRhYjRmODBmODg1Li5kOTk1Y2MxNjk3NTliZjg5MmIxODkwMzEzMjM2MzI3MDYw
ODkzMjMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVy
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAt
NDQsNyArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoVjhfU0NS
SVBUX0RFQlVHX1NFUlZFUikKIHN0YXRpYyBGcmFtZSogcmV0cmlldmVGcmFtZSh2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0KQogewogICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKQEAg
LTYxLDcgKzYwLDYgQEAgc3RhdGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lKHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQpCiAKICAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVGcmFtZShj
b250ZXh0KTsKIH0KLSNlbmRpZgogCiBTY3JpcHREZWJ1Z1NlcnZlciYgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpCiB7CkBAIC04Myw3ICs4MSw2IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlKQogCiB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBs
aXN0ZW5lciwgUGFnZSogcGFnZSkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZF
UikKICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKQEAgLTEwOCw3ICsxMDUsNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjph
ZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnZSkKICAg
ICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6OkhhbmRsZTx2ODo6QXJy
YXk+OjpDYXN0KHZhbHVlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NyaXB0c0Fy
cmF5LT5MZW5ndGgoKTsgKytpKQogICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKGxpc3Rl
bmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJheS0+R2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaSkpKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2Up
CkBAIC0xMjgsNyArMTI0LDYgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UKIAogYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBh
Y3R1YWxMaW5lTnVtYmVyKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRl
YnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CiAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOwpAQCAtMTQ2LDE0ICsx
NDEsMTAgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGIKICAgICBBU1NFUlQocmVzdWx0LT5JbnQz
MlZhbHVlKCkgPj0gMCk7CiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSByZXN1bHQtPkludDMyVmFs
dWUoKTsKICAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKIHsKLSNpZiBFTkFCTEUoVjhfU0NS
SVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29u
dGV4dCgpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250
ZXh0KTsKQEAgLTE2NCwxMiArMTU1LDEwIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4
OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxs
KHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCiB7Ci0jaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCiAgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwogICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVn
Z2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CkBAIC0xNzcsMTIgKzE2
NiwxMCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKIAogICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjbGVhckJyZWFrcG9pbnRzID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6
Ok5ldygiY2xlYXJCcmVha3BvaW50cyIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxsKGNsZWFyQnJl
YWtwb2ludHMpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkKGJvb2wgZW5hYmxlZCkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RF
QlVHX1NFUlZFUikKICAgICBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CiAgICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJD
b250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKQEAgLTE5MiwxMiArMTc5LDEw
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wg
ZW5hYmxlZCkKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpC
b29sZWFuOjpOZXcoZW5hYmxlZCkpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRC
cmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVi
dWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkIikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQs
IGFyZ3MpOwotI2VuZGlmCiB9CiAKIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkKIHsKLSNp
ZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBlbnN1cmVEZWJ1Z2dlclNjcmlw
dENvbXBpbGVkKCk7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7CkBAIC0y
MDYsMTQgKzE5MSwxMCBAQCBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdAogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpIH07CiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3Jp
cHQuZ2V0KCksIDAsIGFyZ3YpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHREZWJ1Z1Nl
cnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZT4ocmVzdWx0LT5JbnQzMlZhbHVlKCkpOwotI2Vs
c2UKLSAgICByZXR1cm4gRG9udFBhdXNlT25FeGNlcHRpb25zOwotI2VuZGlmCiB9CiAKIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKQogewotI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQogICAgIGVuc3VyZURlYnVnZ2VyU2NyaXB0Q29tcGlsZWQoKTsKICAg
ICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRT
Y29wZSh2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpKTsKQEAgLTIyMSw1NCArMjAyLDQ0IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNl
dFBhdXNlT25FeGNlcHRpb25zRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlIikpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0g
eyB2ODo6SW50MzI6Ok5ldyhwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB9OwogICAgIHNldFBhdXNl
T25FeGNlcHRpb25zRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJn
dik7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFt
KCkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBpZiAobV9wYXVz
ZWRQYWdlKQogICAgICAgICBtX2NsaWVudE1lc3NhZ2VMb29wLT5xdWl0Tm93KCk7CiAgICAgZGlk
UmVzdW1lKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9T
dGF0ZW1lbnQoKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAgIEFT
U0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCkt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBJbnRvU3RhdGVtZW50IikpKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CiAgICAg
ZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CiAgICAgY29u
dGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3Rl
cE92ZXJTdGF0ZW1lbnQoKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBm
dW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQu
Z2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBPdmVyU3RhdGVtZW50IikpKTsKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07
CiAgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CiAg
ICAgY29udGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcE91dE9mRnVuY3Rpb24oKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VS
VkVSKQogICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJT
Y3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBPdXRPZkZ1bmN0aW9uIikpKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdl
dCgpIH07CiAgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJn
dik7CiAgICAgY29udGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogYm9vbCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBT
dHJpbmcmIG5ld0NvbnRlbnQsIFN0cmluZyYgbmV3U291cmNlT3JFcnJvck1lc3NhZ2UpCiB7Ci0j
aWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCiAgICAgZW5zdXJlRGVidWdnZXJTY3Jp
cHRDb21waWxlZCgpOwogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKIApAQCAtMjk1LDkgKzI2
Niw2IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmVkaXRTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuCiAgICAgaWYgKG1fY3VycmVudENhbGxGcmFt
ZSkKICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEphdmFT
Y3JpcHRDYWxsRnJhbWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKQEAg
LTMyMSw3ICsyODksNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjppc0RlYnVnZ2VyQWx3YXlz
RW5hYmxlZCgpCiAgICAgcmV0dXJuIG1fZW5hYmxlZDsKIH0KIAotI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6djhEZWJ1Z0V2ZW50Q2Fs
bGJhY2soY29uc3Qgdjg6OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscykKIHsKICAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0V2ZW50KGV2ZW50RGV0
YWlscyk7CkBAIC0zNzYsNyArMzQzLDYgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxl
VjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudEQKICAgICAg
ICAgfQogICAgIH0KIH0KLSNlbmRpZgogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhcnNlU291cmNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaAppbmRleCAyNmNhNzg1NjQ0Zjc5YmQyN2M3YmRlMmJjMjI1NmIzM2Y5MTY4OGY1Li5jZDY5
NWU5NjRmOGYyNWMyZTM5OTNkYjkzYmZlNzYwMWU3OWZmOGFjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0xMDEsMTAgKzEwMSw4IEBAIHByaXZhdGU6CiAgICAg
U2NyaXB0RGVidWdTZXJ2ZXIoKTsKICAgICB+U2NyaXB0RGVidWdTZXJ2ZXIoKSB7IH0KIAotI2lm
IEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAgIHN0YXRpYyB2b2lkIHY4RGVidWdF
dmVudENhbGxiYWNrKGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMp
OwogICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRh
aWxzJiBldmVudERldGFpbHMpOwotI2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VT
b3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gc291cmNlT2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzAzYzAyYmY2MTI2NzNkZDU4NGE4
ZmRlOTk2ZTZmYTZiMGI0NDNiZC4uOGQ0MGYzMmE3YTMzOTcwOWQzNmNmNTBjNmNlZGQwZDAwZmIz
MjMzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDctMTQgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIHY4IGRlYnVnZ2Vy
IGNvZGUgdGhhdCBkb2Vzbid0IHVzZSBTY3JpcHREZWJ1Z1NlcnZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIxNjQKKworICAgICAgICAqIHNyYy9E
ZWJ1Z2dlckFnZW50TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRN
YW5hZ2VyOjpkZWJ1Z0F0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpkZWJ1Z0RldGFjaCk6CisgICAgICAgICogc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6
d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29s
c0FnZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9y
RnJvbnRlbmRQcm94eSk6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpzOgorICAgICAgICAq
IHNyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qczoKKyAgICAgICAgKGRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBzcmMvanMvVGVzdHMuanM6CisgICAgICAg
ICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXhwYW5kU2NvcGUuZXhhbWluZVNjb3Blcyk6Cisg
ICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXhwYW5kU2NvcGUpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdERlYnVnSW50cmluc2ljUHJvcGVydGllcyk6CisKIDIw
MTAtMDctMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9E
ZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdl
bnRNYW5hZ2VyLmNwcAppbmRleCA5MzlmNGVkNWEyMWJiNDRjY2E0NzVhYzZiYjg1ZWFkMThlZDU5
OTRjLi4xY2M2NzQwYzU0YjYyMjM3OGNmYWVhOWFmMDRkZTQ5MjBiNTM1Njc2IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcApAQCAtMTE5LDEwICsxMTks
OCBAQCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6QXR0YWNoZWRBZ2VudHNNYXAqIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpzX2F0dGFjaGVkQWdlbnRzTQogCiB2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkKIHsKLSNpZiBF
TkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBpZiAoIXNfZXhwb3NlVjhEZWJ1Z2dl
clByb3RvY29sKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKICAgICBpZiAoIXNfYXR0YWNoZWRB
Z2VudHNNYXApIHsKICAgICAgICAgc19hdHRhY2hlZEFnZW50c01hcCA9IG5ldyBBdHRhY2hlZEFn
ZW50c01hcCgpOwogICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmRGVidWdn
ZXJBZ2VudE1hbmFnZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOwpAQCAtMTM1LDEwICsxMzMsOCBAQCB2
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaChEZWJ1Z2dlckFnZW50SW1wbCog
ZGVidWdnZXJBZ2VudCkKIAogdm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdEZXRhY2go
RGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQpCiB7Ci0jaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCiAgICAgaWYgKCFzX2V4cG9zZVY4RGVidWdnZXJQcm90b2NvbCkKICAg
ICAgICAgcmV0dXJuOwotI2VuZGlmCiAgICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKaW5kZXgg
ODNiOTI1YTU4ODdjYjc0ZWU1MDY1NGI3N2RhNTA5NjU1NTlhMGYwZi4uNzNjZWRmYTQ3ZTZjMjRh
ZGQwZDAxZTVkODYwYmJmOWZlNzQ5ZGY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsLmNwcApAQCAtNzEsOSArNzEsNiBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBmcmFtZUNvbnRleHQtPkdsb2JhbCgpOwog
CiAgICAgZ2xvYmFsLT5TZXQodjg6OlN0cmluZzo6TmV3KCJJbnNwZWN0b3JGcm9udGVuZEhvc3Qi
KSwgZnJvbnRlbmRIb3N0T2JqKTsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikK
LSAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5nOjpOZXcoInY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFi
bGVkIiksIHY4OjpUcnVlKCkpOwotI2VuZGlmCiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsOjpmcm9udGVuZExvYWRlZCgpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDQyMDVjNjJhZDg3ZWIxYjRkY2Q3MjllN2ExZjc1YjAx
ZTRmYTFjMzMuLjBkOGNiYWQ0MTUzYzM0Mjg0OTFiNzRiNWExMjBmYTZiMDMxOWYzMTUgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0yMzEsOSAr
MjMxLDcgQEAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OldlYkRldlRvb2xzQWdlbnRJbXBsKAogV2Vi
RGV2VG9vbHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCgpCiB7CiAgICAgRGVidWdn
ZXJBZ2VudE1hbmFnZXI6Om9uV2ViVmlld0Nsb3NlZChtX3dlYlZpZXdJbXBsKTsKLSNpZiBFTkFC
TEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6
Omluc3BlY3RlZFZpZXdDbG9zZWQobV93ZWJWaWV3SW1wbCk7Ci0jZW5kaWYKICAgICBkaXNwb3Nl
VXRpbGl0eUNvbnRleHQoKTsKIH0KIApAQCAtMjUwLDEwICsyNDgsOCBAQCB2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgIGlmIChtX2F0dGFjaGVkKQogICAgICAgICByZXR1
cm47CiAKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBpZiAoIW1fY2xp
ZW50LT5leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2woKSkKICAgICAgICAgQ2xpZW50TWVzc2FnZUxv
b3BBZGFwdGVyOjplbnN1cmVDbGllbnRNZXNzYWdlTG9vcENyZWF0ZWQobV9jbGllbnQpOwotI2Vu
ZGlmCiAKICAgICBtX2RlYnVnZ2VyQWdlbnRJbXBsLnNldCgKICAgICAgICAgbmV3IERlYnVnZ2Vy
QWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsCkBAIC0yOTQsOSArMjkwLDcgQEAgdm9pZCBXZWJEZXZU
b29sc0FnZW50SW1wbDo6ZGV0YWNoKCkKIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlk
TmF2aWdhdGUoKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAgIENs
aWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6ZGlkTmF2aWdhdGUoKTsKLSNlbmRpZgogICAgIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCk7CiB9CiAKQEAgLTQzMiwxMSArNDI2LDkgQEAg
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSgp
CiAgICAgbV91dGlsaXR5Q29udGV4dCA9IHY4OjpDb250ZXh0OjpOZXcoKTsKICAgICBjb21waWxl
VXRpbGl0eVNjcmlwdHMoKTsKICAgICBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKLSNpZiBFTkFC
TEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBXZWJDU3RyaW5nIGRlYnVnZ2VyU2NyaXB0
SnMgPSBtX2NsaWVudC0+ZGVidWdnZXJTY3JpcHRTb3VyY2UoKTsKICAgICBXZWJDb3JlOjpTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0RGVidWdnZXJTY3JpcHRTb3VyY2UoCiAgICAgICAg
IFdlYkNvcmU6OlN0cmluZyhkZWJ1Z2dlclNjcmlwdEpzLmRhdGEoKSwgZGVidWdnZXJTY3JpcHRK
cy5sZW5ndGgoKSkpOwotI2VuZGlmCiB9CiAKIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNl
dEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIoKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvRGV2VG9vbHMuanMKaW5kZXggODUxYzkzNGVhYjlkOWU1Mjc2YjY4MjViZWNiMDEzNTBh
ODJjMTc4My4uMzFjYzRiOTQ4MjA1YjgwMjAwZTlhNmFlN2FiY2EzYzdkMWRkN2FkYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcworKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC0xOTcsNzYgKzE5Nyw2IEBAIGRldnRvb2xzLmRv
bUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJE
T01Db250ZW50TG9hZGVkIiwgZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCwgZmFsc2UpOwogCiAK
LWlmICghd2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7Ci0KLShmdW5jdGlvbigp
Ci17Ci0gICAgdmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlw
ZS5zaG93OwotICAgIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnNob3cgPSAg
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2Vu
dCgpLmluaXRVSSgpOwotICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi52aXNpYmxlID0g
ZmFsc2U7Ci0gICAgICAgIG9sZFNob3cuY2FsbCh0aGlzKTsKLSAgICB9OwotfSkoKTsKLQotCi0o
ZnVuY3Rpb24gKCkgewotdmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUu
Z2V0UHJvcGVydGllczsKLUluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0
aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZp
YXRlLCBjYWxsYmFjaykKLXsKLSAgICBpZiAob2JqZWN0UHJveHkuaXNTY29wZSkKLSAgICAgICAg
ZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVTY29wZShvYmplY3RQcm94
eS5vYmplY3RJZCwgY2FsbGJhY2spOwotICAgIGVsc2UgaWYgKG9iamVjdFByb3h5LmlzVjhSZWYp
Ci0gICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ2hpbGRy
ZW4ob2JqZWN0UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBvcmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rp
b24oKQotewotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJh
bWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQot
ewotICAgIC8vVE9ETyhwZmVsZG1hbik6IHJlbW92ZSBvbmNlIDQ5MDg0IGlzIHJvbGxlZC4KLSAg
ICBpZiAoIWNhbGxiYWNrKQotICAgICAgICBjYWxsYmFjayA9IG9iamVjdEdyb3VwOwotICAgIGRl
dnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5ldmFsdWF0ZUluQ2FsbEZyYW1lKGNhbGxG
cmFtZUlkLCBjb2RlLCBjYWxsYmFjayk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQotewot
dmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7
Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlv
bihleHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxG
cmFtZUlkLCByZXBvcnRDb21wbGV0aW9ucykKLXsKLSAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlk
ID09PSAibnVtYmVyIikKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgp
LnJlc29sdmVDb21wbGV0aW9uc09uRnJhbWUoZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQs
IHJlcG9ydENvbXBsZXRpb25zKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcmlnLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotLy8gSGlnaGxpZ2h0IGV4dGVuc2lvbiBj
b250ZW50IHNjcmlwdHMgaW4gdGhlIHNjcmlwdHMgbGlzdC4KLShmdW5jdGlvbiAoKSB7Ci0gICAg
dmFyIG9yaWdpbmFsID0gV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2FkZFNj
cmlwdFRvRmlsZXNNZW51OwotICAgIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
Ll9hZGRTY3JpcHRUb0ZpbGVzTWVudSA9IGZ1bmN0aW9uKHNjcmlwdCkKLSAgICB7Ci0gICAgICAg
IHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB2
YXIgZGVidWdnZXJBZ2VudCA9IGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKTsKLSAg
ICAgICAgdmFyIHR5cGUgPSBkZWJ1Z2dlckFnZW50LmdldFNjcmlwdENvbnRleHRUeXBlKHNjcmlw
dC5zb3VyY2VJRCk7Ci0gICAgICAgIHZhciBvcHRpb24gPSBzY3JpcHQuZmlsZXNTZWxlY3RPcHRp
b247Ci0gICAgICAgIGlmICh0eXBlID09PSAiaW5qZWN0ZWQiICYmIG9wdGlvbikKLSAgICAgICAg
ICAgIG9wdGlvbi5hZGRTdHlsZUNsYXNzKCJpbmplY3RlZCIpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH07Ci19KSgpOwotCi19Ci0KLQogKGZ1bmN0aW9uIEludGVyY2VwdFByb2ZpbGVz
UGFuZWxFdmVudHMoKQogewogICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWwucHJvdG90eXBlLnNob3c7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pz
L0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNw
ZWN0b3JDb250cm9sbGVySW1wbC5qcwppbmRleCBjYmU2MDdkMjkwYTU0N2JlZmQ2NWYxZWUwMGQ1
NTVjZDFjODUzNjIyLi4yYTk2YmQ1NTg2YWY1Yzg5NjViNzM3MWVkYzMyODQ3MWNiZDE0ZDRmIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBs
LmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwu
anMKQEAgLTEwMiw3ICsxMDIsNiBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbCA9IGZ1
bmN0aW9uKCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJz
ZXRSdWxlU2VsZWN0b3IiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVs
ZWdhdGVfKCJhZGRSdWxlIik7CiAKLSAgICBpZiAod2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJF
bmFibGVkKSB7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygi
ZGlzYWJsZURlYnVnZ2VyIik7CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRl
bGVnYXRlXygiZWRpdFNjcmlwdFNvdXJjZSIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNv
bnRyb2xsZXJEZWxlZ2F0ZV8oImdldFNjcmlwdFNvdXJjZSIpOwpAQCAtMTE2LDEyNCArMTE1LDE1
IEBAIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInN0ZXBPdXRPZkZ1bmN0aW9uSW5E
ZWJ1Z2dlciIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8o
InN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciIpOwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3Rv
ckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUiKTsKLSAgICB9
CiB9OwogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGU7CiAKIAotaWYgKCF3
aW5kb3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsKLQotZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwucHJvdG90eXBlLnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwg
bGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQotewotICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChz
b3VyY2VJRCwgbGluZSk7Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmFk
ZEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci19OwotCi0K
LWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50
ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUpCi17Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVi
dWdnZXJBZ2VudCgpLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOwotfTsKLQotCi1k
ZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuZWRpdFNjcmlwdFNvdXJjZSA9
IGZ1bmN0aW9uKGNhbGxJRCwgc291cmNlSUQsIG5ld0NvbnRlbnQpCi17Ci0gICAgZGV2dG9vbHMu
dG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmVkaXRTY3JpcHRTb3VyY2Uoc291cmNlSUQsIG5ld0Nv
bnRlbnQsIGZ1bmN0aW9uKHN1Y2Nlc3MsIG5ld0JvZHlPckVycm9yTWVzc2FnZSwgY2FsbEZyYW1l
cykgewotICAgICAgICBXZWJJbnNwZWN0b3IuZGlkRWRpdFNjcmlwdFNvdXJjZShjYWxsSUQsIHN1
Y2Nlc3MsIG5ld0JvZHlPckVycm9yTWVzc2FnZSwgY2FsbEZyYW1lcyk7Ci0gICAgfSk7Ci19Owot
Ci0KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5nZXRTY3JpcHRTb3Vy
Y2UgPSBmdW5jdGlvbihjYWxsSUQsIHNvdXJjZUlEKQotewotICAgIGRldnRvb2xzLnRvb2xzLmdl
dERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlU2NyaXB0U291cmNlKAotICAgICAgICBzb3VyY2VJRCwK
LSAgICAgICAgZnVuY3Rpb24oc291cmNlKSB7Ci0gICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRp
ZEdldFNjcmlwdFNvdXJjZShjYWxsSUQsIHNvdXJjZSk7Ci0gICAgICAgIH0pOwotfTsKLQotCi1k
ZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuYWN0aXZhdGVCcmVha3BvaW50
cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCku
c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSk7Ci19OwotCi0KLWRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5kZWFjdGl2YXRlQnJlYWtwb2ludHMgPSBmdW5jdGlvbigp
Ci17Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKGZhbHNlKTsKLX07Ci0KLQotZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLnBhdXNlSW5EZWJ1Z2dlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29scy50
b29scy5nZXREZWJ1Z2dlckFnZW50KCkucGF1c2VFeGVjdXRpb24oKTsKLX07Ci0KLQotZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnJlc3VtZURlYnVnZ2VyID0gZnVuY3Rp
b24oKQotewotICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXN1bWVFeGVj
dXRpb24oKTsKLX07Ci0KLQotZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LnN0ZXBJbnRvU3RhdGVtZW50SW5EZWJ1Z2dlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29s
cy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuc3RlcEludG9TdGF0ZW1lbnQoKTsKLX07Ci0KLQot
ZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnN0ZXBPdXRPZkZ1bmN0aW9u
SW5EZWJ1Z2dlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dl
ckFnZW50KCkuc3RlcE91dE9mRnVuY3Rpb24oKTsKLX07Ci0KLQotZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwucHJvdG90eXBlLnN0ZXBPdmVyU3RhdGVtZW50SW5EZWJ1Z2dlciA9IGZ1bmN0
aW9uKCkKLXsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuc3RlcE92ZXJT
dGF0ZW1lbnQoKTsKLX07Ci0KLS8qKgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLkluc3Bl
Y3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlID0gZnVu
Y3Rpb24oc3RhdGUpCi17Ci0gICAgdGhpcy5fc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IHN0
YXRlOwotICAgIC8vIFRPRE8oeXVyeXMpOiBzdXBwb3J0IGFsbCB0aHJlZSBzdGF0ZXMuIFNlZSBo
dHRwOi8vY3JidWcuY29tLzMyODc3Ci0gICAgdmFyIGVuYWJsZWQgPSAoc3RhdGUgIT09IFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZS5Eb250UGF1c2VPbkV4
Y2VwdGlvbnMpOwotICAgIFdlYkluc3BlY3Rvci51cGRhdGVQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
KGVuYWJsZWQgPyBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLlBhdXNlT25FeGNlcHRpb25zU3Rh
dGUuUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucyA6IFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZS5Eb250UGF1c2VPbkV4Y2VwdGlvbnMpOwotICAgIGRldnRv
b2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zZXRQYXVzZU9uRXhjZXB0aW9ucyhlbmFibGVk
KTsKLX07Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMuSW5zcGVjdG9yQmFj
a2VuZEltcGwucHJvdG90eXBlLnBhdXNlT25FeGNlcHRpb25zID0gZnVuY3Rpb24oKQotewotICAg
IHJldHVybiBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucGF1c2VPbkV4Y2VwdGlv
bnMoKTsKLX07Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwucHJvdG90eXBlLnNldFBhdXNlT25FeGNlcHRpb25zID0gZnVuY3Rpb24odmFs
dWUpCi17Ci0gICAgcmV0dXJuIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zZXRQ
YXVzZU9uRXhjZXB0aW9ucyh2YWx1ZSk7Ci19OwotCi19IGVsc2UgewotCiBkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucGF1c2VJbkRlYnVnZ2VyID0gZnVuY3Rpb24oKQog
ewogICAgIFJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yLkRlYnVnZ2VyUGF1c2VTY3JpcHQo
KTsKIH07CiAKLX0KLQogCiAvKioKICAqIEBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9qcy9UZXN0cy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMuanMK
aW5kZXggODE0MzJlYmJhMDhlZjI5OTA4ZDcxZmM1YzBmYTFlYmVlYzgyMDcyNi4uMDBjMzc5NzI3
NzRhYmFiYzhhZDQxZmE0YzRkYTg1NTIzZjA2YTdlNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9UZXN0cy5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Rlc3RzLmpz
CkBAIC05OTYsOCArOTk2LDcgQEAgVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q29tcGxldGlvbk9u
UGF1c2UgPSBmdW5jdGlvbigpCiAgKi8KIFRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEF1dG9Db250
aW51ZU9uU3ludGF4RXJyb3IgPSBmdW5jdGlvbigpCiB7Ci0gICAgaWYgKHdpbmRvdy52OFNjcmlw
dERlYnVnU2VydmVyRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybjsKIAogICAg
IHRoaXMuc2hvd1BhbmVsKCJzY3JpcHRzIik7CiAgICAgdmFyIHRlc3QgPSB0aGlzOwpAQCAtMTUw
MCwxNCArMTQ5OSwxNCBAQCBUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RFeHBhbmRTY29wZSA9IGZ1
bmN0aW9uKCkKICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAgICAgICAg
ICAgIHg6IjIwMDkiLAogICAgICAgICAgICAgICAgICAgICBpbm5lckZ1bmN0aW9uTG9jYWxWYXI6
IjIwMTEiLAotICAgICAgICAgICAgICAgICAgICAidGhpcyI6ICh3aW5kb3cudjhTY3JpcHREZWJ1
Z1NlcnZlckVuYWJsZWQgPyAiRE9NV2luZG93IiA6ICJnbG9iYWwiKSwKKyAgICAgICAgICAgICAg
ICAgICAgInRoaXMiOiAiRE9NV2luZG93IiwKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRpdGxlOiAiQ2xvc3VyZSIsCiAg
ICAgICAgICAgICAgICAgcHJvcGVydGllczogewotICAgICAgICAgICAgICAgICAgICBuOiAod2lu
ZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkID8gJyJUZXh0UGFyYW0iJyA6ICJUZXh0UGFy
YW0iKSwKLSAgICAgICAgICAgICAgICAgICAgbWFrZUNsb3N1cmVMb2NhbFZhcjogKHdpbmRvdy52
OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCA/ICcibG9jYWwuVGV4dFBhcmFtIicgOiAibG9jYWwu
VGV4dFBhcmFtIiksCisgICAgICAgICAgICAgICAgICAgIG46ICciVGV4dFBhcmFtIicsCisgICAg
ICAgICAgICAgICAgICAgIG1ha2VDbG9zdXJlTG9jYWxWYXI6ICcibG9jYWwuVGV4dFBhcmFtIics
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKQEAgLTE2
MTEsNyArMTYxMCw2IEBAIFRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdERlYnVnSW50cmluc2ljUHJv
cGVydGllcyA9IGZ1bmN0aW9uKCkKICAgICB9CiAKICAgICBmdW5jdGlvbiBleGFtaW5lTG9jYWxT
Y29wZSgpIHsKLSAgICAgIGlmICh3aW5kb3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpIHsK
ICAgICAgIHZhciBzY29wZUV4cGVjdGF0aW9ucyA9IFsKICAgICAgICAgICAiYSIsICJDaGlsZCIs
IFsKICAgICAgICAgICAgICJfX3Byb3RvX18iLCAiQ2hpbGQiLCBbCkBAIC0xNjMzLDQ3ICsxNjMx
LDEyIEBAIFRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdERlYnVnSW50cmluc2ljUHJvcGVydGllcyA9
IGZ1bmN0aW9uKCkKICAgICAgICAgICAgICJjaGlsZEZpZWxkIiwgIjIwIiwgbnVsbCwKICAgICAg
ICAgICBdCiAgICAgICBdOwotICAgICAgfSBlbHNlIHsKLSAgICAgIHZhciBzY29wZUV4cGVjdGF0
aW9ucyA9IFsKLSAgICAgICAgICAiYSIsICJPYmplY3QiLCBbCi0gICAgICAgICAgICAgICJjb25z
dHJ1Y3RvciIsICJmdW5jdGlvbiBDaGlsZCgpIiwgWwotICAgICAgICAgICAgICAgICAgImNvbnN0
cnVjdG9yIiwgImZ1bmN0aW9uIEZ1bmN0aW9uKCkiLCBudWxsLAotICAgICAgICAgICAgICAgICAg
Im5hbWUiLCAiQ2hpbGQiLCBudWxsLAotICAgICAgICAgICAgICAgICAgInByb3RvdHlwZSIsICJP
YmplY3QiLCBbCi0gICAgICAgICAgICAgICAgICAgICAgImNoaWxkUHJvdG9GaWVsZCIsIDIxLCBu
dWxsCi0gICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgIF0sCi0KLSAgICAgICAgICAg
ICJfX3Byb3RvX18iLCAiT2JqZWN0IiwgWwotICAgICAgICAgICAgICAgICAgIl9fcHJvdG9fXyIs
ICJPYmplY3QiLCBbCi0gICAgICAgICAgICAgICAgICAgICAgIl9fcHJvdG9fXyIsICJPYmplY3Qi
LCBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJfX3Byb3RvX18iLCAibnVsbCIsIG51bGws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJjb25zdHJ1Y3RvciIsICJmdW5jdGlvbiBPYmpl
Y3QoKSIsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAg
ICAgImNvbnN0cnVjdG9yIiwgImZ1bmN0aW9uIFBhcmVudCgpIiwgWwotICAgICAgICAgICAgICAg
ICAgICAgICAgIm5hbWUiLCAiUGFyZW50IiwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICJwcm90b3R5cGUiLCAiT2JqZWN0IiwgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw
YXJlbnRQcm90b0ZpZWxkIiwgMTEsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBdCi0g
ICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICJwYXJlbnRQcm90b0Zp
ZWxkIiwgMTEsIG51bGwsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAiY29u
c3RydWN0b3IiLCAiZnVuY3Rpb24gQ2hpbGQoKSIsIG51bGwsCi0gICAgICAgICAgICAgICAgImNo
aWxkUHJvdG9GaWVsZCIsIDIxLCBudWxsLAotICAgICAgICAgICAgXSwKLQotICAgICAgICAgICAg
InBhcmVudEZpZWxkIiwgMTAsIG51bGwsCi0gICAgICAgICAgICAiY2hpbGRGaWVsZCIsIDIwLCBu
dWxsLAotICAgICAgICAgIF0KLSAgICAgIF07Ci0gICAgICB9Ci0KICAgICAgIGNoZWNrUHJvcGVy
dHkobG9jYWxTY29wZVNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lLCAiPExvY2FsIFNjb3Bl
PiIsIHNjb3BlRXhwZWN0YXRpb25zKTsKICAgICB9CiAKICAgICB2YXIgcHJvcFF1ZXVlID0gW107
CiAgICAgdmFyIGluZGV4ID0gMDsKLSAgICB2YXIgZXhwZWN0ZWRGaW5hbEluZGV4ID0gKHdpbmRv
dy52OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCA/IDUgOiA4KTsKKyAgICB2YXIgZXhwZWN0ZWRG
aW5hbEluZGV4ID0gNTsKIAogICAgIGZ1bmN0aW9uIGV4cGFuZEFuZENoZWNrTmV4dFByb3BlcnR5
KCkgewogICAgICAgICBpZiAoaW5kZXggPT09IHByb3BRdWV1ZS5sZW5ndGgpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61497</attachid>
            <date>2010-07-14 02:58:49 -0700</date>
            <delta_ts>2010-07-14 03:25:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42164-20100714135846.patch</filename>
            <type>text/plain</type>
            <size>81331</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGVmZDgzYjlhMzA4YjY3NjY2NGY4MWE0ZjEwNWNkNjI4N2U4MGIxNC4uZjkxY2NjY2U5NGQ3MTRm
Y2U0Zjg0MmI2ODMzNmZlNjZkYTM2NzdkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0xNCAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1vdmUgdjggZGVi
dWdnZXIgY29kZSB0aGF0IGRvZXNuJ3QgdXNlIFNjcmlwdERlYnVnU2VydmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjE2NAorCisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0
cmlldmVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OmNsZWFyQnJlYWtwb2lu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRz
QWN0aXZhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9u
RXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpz
ZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpjb250aW51ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVidWdT
ZXJ2ZXI6OnN0ZXBJbnRvU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdERlYnVn
U2VydmVyOjpzdGVwT3ZlclN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1
Z1NlcnZlcjo6c3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RGVi
dWdTZXJ2ZXI6OmhhbmRsZVY4RGVidWdFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2Ny
aXB0RGVidWdTZXJ2ZXIuaDoKKwogMjAxMC0wNy0xNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAxMzgyMzdiMDRjMjBhY2I2NzYy
NTM4Yzg2NzZkZTRhYjRmODBmODg1Li5kOTk1Y2MxNjk3NTliZjg5MmIxODkwMzEzMjM2MzI3MDYw
ODkzMjMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVy
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcApAQCAt
NDQsNyArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoVjhfU0NS
SVBUX0RFQlVHX1NFUlZFUikKIHN0YXRpYyBGcmFtZSogcmV0cmlldmVGcmFtZSh2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0KQogewogICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKQEAg
LTYxLDcgKzYwLDYgQEAgc3RhdGljIEZyYW1lKiByZXRyaWV2ZUZyYW1lKHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQpCiAKICAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVGcmFtZShj
b250ZXh0KTsKIH0KLSNlbmRpZgogCiBTY3JpcHREZWJ1Z1NlcnZlciYgU2NyaXB0RGVidWdTZXJ2
ZXI6OnNoYXJlZCgpCiB7CkBAIC04Myw3ICs4MSw2IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldERlYnVnZ2VyU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlKQogCiB2
b2lkIFNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBs
aXN0ZW5lciwgUGFnZSogcGFnZSkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZF
UikKICAgICBpZiAoIW1fZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGVT
Y29wZSBzY29wZTsKQEAgLTEwOCw3ICsxMDUsNiBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjph
ZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFnZSogcGFnZSkKICAg
ICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gc2NyaXB0c0FycmF5ID0gdjg6OkhhbmRsZTx2ODo6QXJy
YXk+OjpDYXN0KHZhbHVlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NyaXB0c0Fy
cmF5LT5MZW5ndGgoKTsgKytpKQogICAgICAgICBkaXNwYXRjaERpZFBhcnNlU291cmNlKGxpc3Rl
bmVyLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHNjcmlwdHNBcnJheS0+R2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaSkpKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2Up
CkBAIC0xMjgsNyArMTI0LDYgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6cmVtb3ZlTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UKIAogYm9vbCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBTY3Jp
cHRCcmVha3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBh
Y3R1YWxMaW5lTnVtYmVyKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRl
YnVnZ2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CiAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShkZWJ1Z2dlckNvbnRleHQpOwpAQCAtMTQ2LDE0ICsx
NDEsMTAgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBTY3JpcHRCcmVha3BvaW50IGIKICAgICBBU1NFUlQocmVzdWx0LT5JbnQz
MlZhbHVlKCkgPj0gMCk7CiAgICAgKmFjdHVhbExpbmVOdW1iZXIgPSByZXN1bHQtPkludDMyVmFs
dWUoKTsKICAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
CiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlcikKIHsKLSNpZiBFTkFCTEUoVjhfU0NS
SVBUX0RFQlVHX1NFUlZFUikKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBkZWJ1Z2dlckNvbnRleHQgPSB2ODo6RGVidWc6OkdldERlYnVnQ29u
dGV4dCgpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoZGVidWdnZXJDb250
ZXh0KTsKQEAgLTE2NCwxMiArMTU1LDEwIEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnJlbW92
ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gcmVtb3ZlQnJlYWtwb2ludEZ1bmN0aW9uID0gdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4
OjpTdHJpbmc6Ok5ldygicmVtb3ZlQnJlYWtwb2ludCIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxs
KHJlbW92ZUJyZWFrcG9pbnRGdW5jdGlvbiwgYXJncyk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3Jp
cHREZWJ1Z1NlcnZlcjo6Y2xlYXJCcmVha3BvaW50cygpCiB7Ci0jaWYgRU5BQkxFKFY4X1NDUklQ
VF9ERUJVR19TRVJWRVIpCiAgICAgZW5zdXJlRGVidWdnZXJTY3JpcHRDb21waWxlZCgpOwogICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGRlYnVn
Z2VyQ29udGV4dCA9IHY4OjpEZWJ1Zzo6R2V0RGVidWdDb250ZXh0KCk7CkBAIC0xNzcsMTIgKzE2
NiwxMCBAQCB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpjbGVhckJyZWFrcG9pbnRzKCkKIAogICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjbGVhckJyZWFrcG9pbnRzID0gdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46OkNhc3QobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKS0+R2V0KHY4OjpTdHJpbmc6
Ok5ldygiY2xlYXJCcmVha3BvaW50cyIpKSk7CiAgICAgdjg6OkRlYnVnOjpDYWxsKGNsZWFyQnJl
YWtwb2ludHMpOwotI2VuZGlmCiB9CiAKIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFr
cG9pbnRzQWN0aXZhdGVkKGJvb2wgZW5hYmxlZCkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RF
QlVHX1NFUlZFUikKICAgICBlbnN1cmVEZWJ1Z2dlclNjcmlwdENvbXBpbGVkKCk7CiAgICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJD
b250ZXh0ID0gdjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKQEAgLTE5MiwxMiArMTc5LDEw
IEBAIHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wg
ZW5hYmxlZCkKICAgICBhcmdzLT5TZXQodjg6OlN0cmluZzo6TmV3KCJlbmFibGVkIiksIHY4OjpC
b29sZWFuOjpOZXcoZW5hYmxlZCkpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBzZXRC
cmVha3BvaW50c0FjdGl2YXRlZCA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVi
dWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkIikpKTsKICAgICB2ODo6RGVidWc6OkNhbGwoc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQs
IGFyZ3MpOwotI2VuZGlmCiB9CiAKIFNjcmlwdERlYnVnU2VydmVyOjpQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlIFNjcmlwdERlYnVnU2VydmVyOjpwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKCkKIHsKLSNp
ZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBlbnN1cmVEZWJ1Z2dlclNjcmlw
dENvbXBpbGVkKCk7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjb250ZXh0U2NvcGUodjg6OkRlYnVnOjpHZXREZWJ1Z0NvbnRleHQoKSk7CkBAIC0y
MDYsMTQgKzE5MSwxMCBAQCBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSBTY3JpcHREZWJ1Z1NlcnZlcjo6cGF1c2VPbkV4Y2VwdGlvbnNTdAogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpIH07CiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGZ1bmN0aW9uLT5DYWxsKG1fZGVidWdnZXJTY3Jp
cHQuZ2V0KCksIDAsIGFyZ3YpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JpcHREZWJ1Z1Nl
cnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZT4ocmVzdWx0LT5JbnQzMlZhbHVlKCkpOwotI2Vs
c2UKLSAgICByZXR1cm4gRG9udFBhdXNlT25FeGNlcHRpb25zOwotI2VuZGlmCiB9CiAKIHZvaWQg
U2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VPbkV4Y2Vw
dGlvbnNTdGF0ZSBwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKQogewotI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQogICAgIGVuc3VyZURlYnVnZ2VyU2NyaXB0Q29tcGlsZWQoKTsKICAg
ICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRT
Y29wZSh2ODo6RGVidWc6OkdldERlYnVnQ29udGV4dCgpKTsKQEAgLTIyMSw1NCArMjAyLDQ0IEBA
IHZvaWQgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUoUGF1c2VP
bkV4Y2VwdGlvbnNTdGF0ZSBwYXVzZU9uCiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IHNl
dFBhdXNlT25FeGNlcHRpb25zRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJzZXRQYXVzZU9u
RXhjZXB0aW9uc1N0YXRlIikpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0g
eyB2ODo6SW50MzI6Ok5ldyhwYXVzZU9uRXhjZXB0aW9uc1N0YXRlKSB9OwogICAgIHNldFBhdXNl
T25FeGNlcHRpb25zRnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJn
dik7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6Y29udGludWVQcm9ncmFt
KCkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBpZiAobV9wYXVz
ZWRQYWdlKQogICAgICAgICBtX2NsaWVudE1lc3NhZ2VMb29wLT5xdWl0Tm93KCk7CiAgICAgZGlk
UmVzdW1lKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3RlcEludG9T
dGF0ZW1lbnQoKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAgIEFT
U0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlv
biA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCkt
PkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBJbnRvU3RhdGVtZW50IikpKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07CiAgICAg
ZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CiAgICAgY29u
dGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6c3Rl
cE92ZXJTdGF0ZW1lbnQoKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBm
dW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQu
Z2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBPdmVyU3RhdGVtZW50IikpKTsKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdldCgpIH07
CiAgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJndik7CiAg
ICAgY29udGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTY3JpcHREZWJ1Z1NlcnZl
cjo6c3RlcE91dE9mRnVuY3Rpb24oKQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VS
VkVSKQogICAgIEFTU0VSVChtX3BhdXNlZFBhZ2UpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uPiBmdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJT
Y3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoInN0ZXBPdXRPZkZ1bmN0aW9uIikpKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0geyBtX2V4ZWN1dGlvblN0YXRlLmdl
dCgpIH07CiAgICAgZnVuY3Rpb24tPkNhbGwobV9kZWJ1Z2dlclNjcmlwdC5nZXQoKSwgMSwgYXJn
dik7CiAgICAgY29udGludWVQcm9ncmFtKCk7Ci0jZW5kaWYKIH0KIAogYm9vbCBTY3JpcHREZWJ1
Z1NlcnZlcjo6ZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBT
dHJpbmcmIG5ld0NvbnRlbnQsIFN0cmluZyYgbmV3U291cmNlT3JFcnJvck1lc3NhZ2UpCiB7Ci0j
aWYgRU5BQkxFKFY4X1NDUklQVF9ERUJVR19TRVJWRVIpCiAgICAgZW5zdXJlRGVidWdnZXJTY3Jp
cHRDb21waWxlZCgpOwogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKIApAQCAtMjk1LDkgKzI2
Niw2IEBAIGJvb2wgU2NyaXB0RGVidWdTZXJ2ZXI6OmVkaXRTY3JpcHRTb3VyY2UoY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuCiAgICAgaWYgKG1fY3VycmVudENhbGxGcmFt
ZSkKICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLmNsZWFyKCk7CiAgICAgcmV0dXJuIHRydWU7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEphdmFT
Y3JpcHRDYWxsRnJhbWU+IFNjcmlwdERlYnVnU2VydmVyOjpjdXJyZW50Q2FsbEZyYW1lKCkKQEAg
LTMyMSw3ICsyODksNiBAQCBib29sIFNjcmlwdERlYnVnU2VydmVyOjppc0RlYnVnZ2VyQWx3YXlz
RW5hYmxlZCgpCiAgICAgcmV0dXJuIG1fZW5hYmxlZDsKIH0KIAotI2lmIEVOQUJMRShWOF9TQ1JJ
UFRfREVCVUdfU0VSVkVSKQogdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6djhEZWJ1Z0V2ZW50Q2Fs
bGJhY2soY29uc3Qgdjg6OkRlYnVnOjpFdmVudERldGFpbHMmIGV2ZW50RGV0YWlscykKIHsKICAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuaGFuZGxlVjhEZWJ1Z0V2ZW50KGV2ZW50RGV0
YWlscyk7CkBAIC0zNzYsNyArMzQzLDYgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFuZGxl
VjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudEQKICAgICAg
ICAgfQogICAgIH0KIH0KLSNlbmRpZgogCiB2b2lkIFNjcmlwdERlYnVnU2VydmVyOjpkaXNwYXRj
aERpZFBhcnNlU291cmNlKFNjcmlwdERlYnVnTGlzdGVuZXIqIGxpc3RlbmVyLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2
ZXIuaAppbmRleCAyNmNhNzg1NjQ0Zjc5YmQyN2M3YmRlMmJjMjI1NmIzM2Y5MTY4OGY1Li5jZDY5
NWU5NjRmOGYyNWMyZTM5OTNkYjkzYmZlNzYwMWU3OWZmOGFjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHREZWJ1Z1NlcnZlci5oCkBAIC0xMDEsMTAgKzEwMSw4IEBAIHByaXZhdGU6CiAgICAg
U2NyaXB0RGVidWdTZXJ2ZXIoKTsKICAgICB+U2NyaXB0RGVidWdTZXJ2ZXIoKSB7IH0KIAotI2lm
IEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAgIHN0YXRpYyB2b2lkIHY4RGVidWdF
dmVudENhbGxiYWNrKGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRhaWxzJiBldmVudERldGFpbHMp
OwogICAgIHZvaWQgaGFuZGxlVjhEZWJ1Z0V2ZW50KGNvbnN0IHY4OjpEZWJ1Zzo6RXZlbnREZXRh
aWxzJiBldmVudERldGFpbHMpOwotI2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNoRGlkUGFyc2VT
b3VyY2UoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gc291cmNlT2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzAzYzAyYmY2MTI2NzNkZDU4NGE4
ZmRlOTk2ZTZmYTZiMGI0NDNiZC4uZDZjYTk0NWQxMDNmNzc5NTgxMzQyNjg5MTc2M2EwNDg0ZDM4
YTI1NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDctMTQgIFl1cnkgU2Vt
aWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVtb3ZlIHY4IGRlYnVnZ2Vy
IGNvZGUgdGhhdCBkb2Vzbid0IHVzZSBTY3JpcHREZWJ1Z1NlcnZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIxNjQKKworICAgICAgICAqIFdlYktp
dC5neXBpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaCk6CisgICAgICAgIChX
ZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaCk6CisgICAgICAgICogc3Jj
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50SW1wbDo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgICog
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6On5XZWJEZXZUb29sc0FnZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29s
c0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSk6CisgICAgICAgICogc3JjL2pz
L0RlYnVnZ2VyQWdlbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpz
OgorICAgICAgICAoZGV2dG9vbHMuVG9vbHNBZ2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
bG9hZGVkKToKKyAgICAgICAgKiBzcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qczoKKyAgICAgICAg
KiBzcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanM6CisgICAgICAgIChkZXZ0b29scy5J
bnNwZWN0b3JCYWNrZW5kSW1wbCk6CisgICAgICAgICogc3JjL2pzL1Rlc3RzLmpzOgorICAgICAg
ICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEF1dG9Db250aW51ZU9uU3ludGF4RXJyb3IpOgor
ICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEV4cGFuZFNjb3BlLmV4YW1pbmVTY29w
ZXMpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEV4cGFuZFNjb3BlKToKKyAg
ICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3REZWJ1Z0ludHJpbnNpY1Byb3BlcnRpZXMp
OgorCiAyMDEwLTA3LTE0ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaSBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA2OWIxNDc5
ODcwMzNjYmY1NTI5OTk2NmUyN2Q3MzBjNjZkNmQ3Y2Y3Li43ZDdiMTljMDc2MjFiN2ViMDJiM2U0
Y2JkOTUwNzkxY2E0NjJlOTcxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0zNCw3ICszNCw2IEBACiAg
ICAgICAgICMgZm9yIGNvcHlpbmcgdGhlbSB0byByZXNvdXJjZSBkaXIsIGFuZCBmb3IgZ2VuZXJh
dGluZyAnZGV2dG9vbHMuaHRtbCcgZmlsZS4KICAgICAgICAgJ2RldnRvb2xzX2pzX2ZpbGVzJzog
WwogICAgICAgICAgICAgJ3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcycsCi0gICAg
ICAgICAgICAnc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9Q
cm9maWxlckFnZW50LmpzJywKICAgICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJQcm9jZXNzb3Iu
anMnLAogICAgICAgICAgICAgJ3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcycsCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuY3BwCmluZGV4IDkzOWY0ZWQ1YTIx
YmI0NGNjYTQ3NWFjNmJiODVlYWQxOGVkNTk5NGMuLjFjYzY3NDBjNTRiNjIyMzc4Y2ZhZWE5YWYw
NGRlNDkyMGI1MzU2NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJB
Z2VudE1hbmFnZXIuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1h
bmFnZXIuY3BwCkBAIC0xMTksMTAgKzExOSw4IEBAIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpBdHRh
Y2hlZEFnZW50c01hcCogRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfYXR0YWNoZWRBZ2VudHNNCiAK
IHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBs
KiBkZWJ1Z2dlckFnZW50KQogewotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQog
ICAgIGlmICghc19leHBvc2VWOERlYnVnZ2VyUHJvdG9jb2wpCiAgICAgICAgIHJldHVybjsKLSNl
bmRpZgogICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkgewogICAgICAgICBzX2F0dGFjaGVk
QWdlbnRzTWFwID0gbmV3IEF0dGFjaGVkQWdlbnRzTWFwKCk7CiAgICAgICAgIHY4OjpEZWJ1Zzo6
U2V0TWVzc2FnZUhhbmRsZXIyKCZEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVzc2Fn
ZSk7CkBAIC0xMzUsMTAgKzEzMyw4IEBAIHZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVn
QXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQogCiB2b2lkIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaChEZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2Vu
dCkKIHsKLSNpZiBFTkFCTEUoVjhfU0NSSVBUX0RFQlVHX1NFUlZFUikKICAgICBpZiAoIXNfZXhw
b3NlVjhEZWJ1Z2dlclByb3RvY29sKQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKICAgICBpZiAo
IXNfYXR0YWNoZWRBZ2VudHNNYXApIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRJbXBsLmNwcAppbmRleCA4M2I5MjVhNTg4N2NiNzRlZTUwNjU0Yjc3ZGE1MDk2
NTU1OWEwZjBmLi43M2NlZGZhNDdlNmMyNGFkZDBkMDFlNWQ4NjBiYmY5ZmU3NDlkZjcyIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5j
cHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwu
Y3BwCkBAIC03MSw5ICs3MSw2IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9
IGZyYW1lQ29udGV4dC0+R2xvYmFsKCk7CiAKICAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5nOjpO
ZXcoIkluc3BlY3RvckZyb250ZW5kSG9zdCIpLCBmcm9udGVuZEhvc3RPYmopOwotI2lmIEVOQUJM
RShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQotICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygidjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQiKSwgdjg6OlRydWUoKSk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGw6OmZyb250ZW5kTG9hZGVkKCkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggNDIwNWM2
MmFkODdlYjFiNGRjZDcyOWU3YTFmNzViMDFlNGZhMWMzMy4uMGQ4Y2JhZDQxNTNjMzQyODQ5MWI3
NGI1YTEyMGZhNmIwMzE5ZjMxNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29s
c0FnZW50SW1wbC5jcHAKQEAgLTIzMSw5ICsyMzEsNyBAQCBXZWJEZXZUb29sc0FnZW50SW1wbDo6
V2ViRGV2VG9vbHNBZ2VudEltcGwoCiBXZWJEZXZUb29sc0FnZW50SW1wbDo6fldlYkRldlRvb2xz
QWdlbnRJbXBsKCkKIHsKICAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25XZWJWaWV3Q2xvc2Vk
KG1fd2ViVmlld0ltcGwpOwotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAg
IENsaWVudE1lc3NhZ2VMb29wQWRhcHRlcjo6aW5zcGVjdGVkVmlld0Nsb3NlZChtX3dlYlZpZXdJ
bXBsKTsKLSNlbmRpZgogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogfQogCkBAIC0yNTAs
MTAgKzI0OCw4IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCgpCiAgICAgaWYg
KG1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVC
VUdfU0VSVkVSKQogICAgIGlmICghbV9jbGllbnQtPmV4cG9zZVY4RGVidWdnZXJQcm90b2NvbCgp
KQogICAgICAgICBDbGllbnRNZXNzYWdlTG9vcEFkYXB0ZXI6OmVuc3VyZUNsaWVudE1lc3NhZ2VM
b29wQ3JlYXRlZChtX2NsaWVudCk7Ci0jZW5kaWYKIAogICAgIG1fZGVidWdnZXJBZ2VudEltcGwu
c2V0KAogICAgICAgICBuZXcgRGVidWdnZXJBZ2VudEltcGwobV93ZWJWaWV3SW1wbCwKQEAgLTI5
NCw5ICsyOTAsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkZXRhY2goKQogCiB2b2lk
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWROYXZpZ2F0ZSgpCiB7Ci0jaWYgRU5BQkxFKFY4X1ND
UklQVF9ERUJVR19TRVJWRVIpCiAgICAgQ2xpZW50TWVzc2FnZUxvb3BBZGFwdGVyOjpkaWROYXZp
Z2F0ZSgpOwotI2VuZGlmCiAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uTmF2aWdhdGUoKTsK
IH0KIApAQCAtNDMyLDExICs0MjYsOSBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVh
dGVJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKICAgICBtX3V0aWxpdHlDb250ZXh0ID0gdjg6OkNv
bnRleHQ6Ok5ldygpOwogICAgIGNvbXBpbGVVdGlsaXR5U2NyaXB0cygpOwogICAgIGluaXREZXZU
b29sc0FnZW50SG9zdCgpOwotI2lmIEVOQUJMRShWOF9TQ1JJUFRfREVCVUdfU0VSVkVSKQogICAg
IFdlYkNTdHJpbmcgZGVidWdnZXJTY3JpcHRKcyA9IG1fY2xpZW50LT5kZWJ1Z2dlclNjcmlwdFNv
dXJjZSgpOwogICAgIFdlYkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXREZWJ1
Z2dlclNjcmlwdFNvdXJjZSgKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nKGRlYnVnZ2VyU2NyaXB0
SnMuZGF0YSgpLCBkZWJ1Z2dlclNjcmlwdEpzLmxlbmd0aCgpKSk7Ci0jZW5kaWYKIH0KIAogdm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVj
dG9yQ29udHJvbGxlcigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVn
Z2VyQWdlbnQuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZDc2MjdmYzJiMDFmYjMwMjkzNGJiNDdlMDEx
M2MyY2Q3Y2YxNzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMTYwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFByb3ZpZGVzIGNvbW11bmlj
YXRpb24gaW50ZXJmYWNlIHRvIHJlbW90ZSB2OCBkZWJ1Z2dlci4gU2VlCi0gKiBwcm90b2NvbCBk
ZWNyaXB0aW9uIGF0IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtpL0RlYnVnZ2VyUHJv
dG9jb2wKLSAqLwotCi0vKioKLSAqIEZJWE1FOiBjaGFuZ2UgZmllbGQgbmFtaW5nIHN0eWxlIHRv
IHVzZSB0cmFpbGluZyB1bmRlcnNjb3JlLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xz
LkRlYnVnZ2VyQWdlbnQgPSBmdW5jdGlvbigpCi17Ci0gICAgUmVtb3RlRGVidWdnZXJBZ2VudC5k
ZWJ1Z2dlck91dHB1dCA9IHRoaXMuaGFuZGxlRGVidWdnZXJPdXRwdXRfLmJpbmQodGhpcyk7Ci0g
ICAgUmVtb3RlRGVidWdnZXJBZ2VudC5zZXRDb250ZXh0SWQgPSB0aGlzLnNldENvbnRleHRJZF8u
YmluZCh0aGlzKTsKLQotICAgIC8qKgotICAgICAqIElkIG9mIHRoZSBpbnNwZWN0ZWQgcGFnZSBn
bG9iYWwgY29udGV4dC4gSXQgaXMgdXNlZCBmb3IgZmlsdGVyaW5nIHNjcmlwdHMuCi0gICAgICog
QHR5cGUge251bWJlcn0KLSAgICAgKi8KLSAgICB0aGlzLmNvbnRleHRJZF8gPSBudWxsOwotCi0g
ICAgLyoqCi0gICAgICogTWFwcGluZyBmcm9tIHNjcmlwdCBpZCB0byBzY3JpcHQgaW5mby4KLSAg
ICAgKiBAdHlwZSB7T2JqZWN0fQotICAgICAqLwotICAgIHRoaXMucGFyc2VkU2NyaXB0c18gPSBu
dWxsOwotCi0gICAgLyoqCi0gICAgICogTWFwcGluZyBmcm9tIHRoZSByZXF1ZXN0IGlkIHRvIHRo
ZSBkZXZ0b29scy5CcmVha3BvaW50SW5mbyBmb3IgdGhlCi0gICAgICogYnJlYWtwb2ludHMgd2hv
c2UgdjggaWRzIGFyZSBub3Qgc2V0IHlldC4gVGhlc2UgYnJlYWtwb2ludHMgYXJlIHdhaXRpbmcg
Zm9yCi0gICAgICogInNldGJyZWFrcG9pbnQiIHJlc3BvbnNlcyB0byBsZWFybiB0aGVpciBpZHMg
aW4gdGhlIHY4IGRlYnVnZ2VyLgotICAgICAqIEBzZWUgI2hhbmRsZVNldEJyZWFrcG9pbnRSZXNw
b25zZV8KLSAgICAgKiBAdHlwZSB7T2JqZWN0fQotICAgICAqLwotICAgIHRoaXMucmVxdWVzdE51
bWJlclRvQnJlYWtwb2ludEluZm9fID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIEluZm9ybWF0
aW9uIG9uIGN1cnJlbnQgc3RhY2sgZnJhbWVzLgotICAgICAqIEB0eXBlIHtBcnJheS48ZGV2dG9v
bHMuQ2FsbEZyYW1lPn0KLSAgICAgKi8KLSAgICB0aGlzLmNhbGxGcmFtZXNfID0gW107Ci0KLSAg
ICAvKioKLSAgICAgKiBXaGV0aGVyIHRvIHN0b3AgaW4gdGhlIGRlYnVnZ2VyIG9uIHRoZSBleGNl
cHRpb25zLgotICAgICAqIEB0eXBlIHtib29sZWFufQotICAgICAqLwotICAgIHRoaXMucGF1c2VP
bkV4Y2VwdGlvbnNfID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAgKiBNYXBwaW5nOiByZXF1ZXN0
IHNlcXVlbmNlIG51bWJlci0+Y2FsbGJhY2suCi0gICAgICogQHR5cGUge09iamVjdH0KLSAgICAg
Ki8KLSAgICB0aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrXyA9IG51bGw7Ci0KLSAgICAvKioKLSAg
ICAgKiBXaGV0aGVyIHRoZSBzY3JpcHRzIHBhbmVsIGhhcyBiZWVuIHNob3duIGFuZCBpbml0aWFs
aWx6ZWQuCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAgdGhpcy5zY3JpcHRz
UGFuZWxJbml0aWFsaXplZF8gPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAqIFdoZXRoZXIgdGhl
IHNjcmlwdHMgbGlzdCBzaG91bGQgYmUgcmVxdWVzdGVkIG5leHQgdGltZSB3aGVuIGNvbnRleHQg
aWQgaXMKLSAgICAgKiBzZXQuCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAg
dGhpcy5yZXF1ZXN0U2NyaXB0c1doZW5Db250ZXh0SWRTZXRfID0gZmFsc2U7Ci0KLSAgICAvKioK
LSAgICAgKiBXaGV0aGVyIHRoZSBhZ2VudCBpcyB3YWl0aW5nIGZvciBpbml0aWFsIHNjcmlwdHMg
cmVzcG9uc2UuCi0gICAgICogQHR5cGUge2Jvb2xlYW59Ci0gICAgICovCi0gICAgdGhpcy53YWl0
aW5nRm9ySW5pdGlhbFNjcmlwdHNSZXNwb25zZV8gPSBmYWxzZTsKLQotICAgIC8qKgotICAgICAq
IElmIGJhY2t0cmFjZSByZXNwb25zZSBpcyByZWNlaXZlZCB3aGVuIGluaXRpYWwgc2NyaXB0cyBy
ZXNwb25zZQotICAgICAqIGlzIG5vdCB5ZXQgcHJvY2Vzc2VkIHRoZSBiYWNrdHJhY2UgaGFuZGxp
bmcgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwKLSAgICAgKiBhZnRlciB0aGUgc2NyaXB0cyByZXNw
b25zZSBwcm9jZXNzaW5nLiBUaGUgaGFuZGxlciBib3VuZCB0byBpdHMgYXJndW1lbnRzCi0gICAg
ICogYW5kIHRoaXMgYWdlbnQgd2lsbCBiZSBzdG9yZWQgaW4gdGhpcyBmaWVsZCB0aGVuLgotICAg
ICAqIEB0eXBlIHs/ZnVuY3Rpb24oKX0KLSAgICAgKi8KLSAgICB0aGlzLnBlbmRpbmdCYWNrdHJh
Y2VSZXNwb25zZUhhbmRsZXJfID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIENvbnRhaW5lciBv
ZiBhbGwgYnJlYWtwb2ludHMgc2V0IHVzaW5nIHJlc291cmNlIFVSTC4gVGhlc2UgYnJlYWtwb2lu
dHMKLSAgICAgKiBzdXJ2aXZlIHBhZ2UgcmVsb2FkLiBCcmVha3BvaW50cyBzZXQgYnkgc2NyaXB0
IGlkKGZvciBzY3JpcHRzIHRoYXQgZG9uJ3QKLSAgICAgKiBoYXZlIFVSTHMpIGFyZSBzdG9yZWQg
aW4gU2NyaXB0SW5mbyBvYmplY3RzLgotICAgICAqIEB0eXBlIHtPYmplY3R9Ci0gICAgICovCi0g
ICAgdGhpcy51cmxUb0JyZWFrcG9pbnRzXyA9IHt9OwotCi0gICAgLyoqCi0gICAgICogRXhjZXB0
aW9uIG1lc3NhZ2UgdGhhdCBpcyBzaG93biB0byB1c2VyIHdoaWxlIG9uIGV4Y2VwdGlvbiBicmVh
ay4KLSAgICAgKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlfQotICAgICAqLwot
ICAgIHRoaXMuY3VycmVudEV4Y2VwdGlvbk1lc3NhZ2VfID0gbnVsbDsKLQotICAgIC8qKgotICAg
ICAqIFdoZXRoZXIgYnJlYWtwb2ludHMgc2hvdWxkIHN1c3BlbmQgZXhlY3V0aW9uLgotICAgICAq
IEB0eXBlIHtib29sZWFufQotICAgICAqLwotICAgIHRoaXMuYnJlYWtwb2ludHNBY3RpdmF0ZWRf
ID0gdHJ1ZTsKLX07Ci0KLQotLyoqCi0gKiBBIGNvcHkgb2YgdGhlIHNjb3BlIHR5cGVzIGZyb20g
djgvc3JjL21pcnJvci1kZWxheS5qcwotICogQGVudW0ge251bWJlcn0KLSAqLwotZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5TY29wZVR5cGUgPSB7Ci0gICAgR2xvYmFsOiAwLAotICAgIExvY2FsOiAx
LAotICAgIFdpdGg6IDIsCi0gICAgQ2xvc3VyZTogMywKLSAgICBDYXRjaDogNAotfTsKLQotCi0v
KioKLSAqIFJlc2V0cyBkZWJ1Z2dlciBhZ2VudCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4KLSAqLwot
ZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpCi17Ci0g
ICAgdGhpcy5jb250ZXh0SWRfID0gbnVsbDsKLSAgICAvLyBObyBuZWVkIHRvIHJlcXVlc3Qgc2Ny
aXB0cyBzaW5jZSB0aGV5IGFsbCB3aWxsIGJlIHB1c2hlZCBpbiBBZnRlckNvbXBpbGUKLSAgICAv
LyBldmVudHMuCi0gICAgdGhpcy5yZXF1ZXN0U2NyaXB0c1doZW5Db250ZXh0SWRTZXRfID0gZmFs
c2U7Ci0gICAgdGhpcy53YWl0aW5nRm9ySW5pdGlhbFNjcmlwdHNSZXNwb25zZV8gPSBmYWxzZTsK
LQotICAgIHRoaXMucGFyc2VkU2NyaXB0c18gPSB7fTsKLSAgICB0aGlzLnJlcXVlc3ROdW1iZXJU
b0JyZWFrcG9pbnRJbmZvXyA9IHt9OwotICAgIHRoaXMuY2FsbEZyYW1lc18gPSBbXTsKLSAgICB0
aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrXyA9IHt9OwotfTsKLQotCi0vKioKLSAqIEluaXRpYWxp
emVzIHNjcmlwdHMgVUkuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1lIFNjcmlwdHMg
cGFuZWwKLSAqIGlzIHNob3duLiBJdCB3aWxsIHNlbmQgcmVxdWVzdCBmb3IgY29udGV4dCBpZCBp
ZiBpdCdzIG5vdCBzZXQgeWV0LgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlw
ZS5pbml0VUkgPSBmdW5jdGlvbigpCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSBzY3JpcHRzIGNhY2hl
IHdoZW4gU2NyaXB0cyBwYW5lbCBpcyBzaG93biBmaXJzdCB0aW1lLgotICAgIGlmICh0aGlzLnNj
cmlwdHNQYW5lbEluaXRpYWxpemVkXykKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXMuc2NyaXB0
c1BhbmVsSW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgICBpZiAodGhpcy5jb250ZXh0SWRfKSB7Ci0g
ICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBjb250ZXh0IGlkLiBUaGlzIG1lYW5zIHRoYXQgd2Ug
YXJlIGhlcmUgZnJvbSB0aGUKLSAgICAgICAgLy8gdmVyeSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2Ug
bG9hZCBjeWNsZSBhbmQgaGVuY2Ugd2lsbCBnZXQgYWxsIHNjcmlwdHMKLSAgICAgICAgLy8gdmlh
IGFmdGVyLWNvbXBpbGUgZXZlbnRzLiBObyBuZWVkIHRvIHJlcXVlc3Qgc2NyaXB0cyBmb3IgdGhp
cyBzZXNzaW9uLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGVyZSBjYW4gYmUgYSBudW1iZXIg
b2Ygc2NyaXB0cyBmcm9tIGFmdGVyLWNvbXBpbGUgZXZlbnRzIHRoYXQgYXJlCi0gICAgICAgIC8v
IHBlbmRpbmcgYWRkaXRpb24gaW50byB0aGUgVUkuCi0gICAgICAgIGZvciAodmFyIHNjcmlwdElk
IGluIHRoaXMucGFyc2VkU2NyaXB0c18pIHsKLSAgICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5w
YXJzZWRTY3JpcHRzX1tzY3JpcHRJZF07Ci0gICAgICAgICAgV2ViSW5zcGVjdG9yLnBhcnNlZFNj
cmlwdFNvdXJjZShzY3JpcHRJZCwgc2NyaXB0LmdldFVybCgpLCB1bmRlZmluZWQgLyogc2NyaXB0
IHNvdXJjZSAqLywgc2NyaXB0LmdldExpbmVPZmZzZXQoKSArIDEsIHNjcmlwdC53b3JsZFR5cGUo
KSk7Ci0gICAgICAgICAgdGhpcy5yZXN0b3JlQnJlYWtwb2ludHNfKHNjcmlwdElkLCBzY3JpcHQu
Z2V0VXJsKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy53
YWl0aW5nRm9ySW5pdGlhbFNjcmlwdHNSZXNwb25zZV8gPSB0cnVlOwotICAgIC8vIFNjcmlwdCBs
aXN0IHNob3VsZCBiZSByZXF1ZXN0ZWQgb25seSB3aGVuIGN1cnJlbnQgY29udGV4dCBpZCBpcyBr
bm93bi4KLSAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LmdldENvbnRleHRJZCgpOwotICAgIHRoaXMu
cmVxdWVzdFNjcmlwdHNXaGVuQ29udGV4dElkU2V0XyA9IHRydWU7Ci19OwotCi0KLS8qKgotICog
QXN5bmNocm9ub3VzbHkgcmVxdWVzdHMgdGhlIGRlYnVnZ2VyIGZvciB0aGUgc2NyaXB0IHNvdXJj
ZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSBzY3JpcHRJZCBJZCBvZiB0aGUgc2NyaXB0IHdob3NlIHNv
dXJjZSBzaG91bGQgYmUgcmVzb2x2ZWQuCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKHNvdXJjZTo/c3Ry
aW5nKTp2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkCi0gKiAgICAg
d2hlbiB0aGUgc291cmNlIHJlc29sdXRpb24gaXMgY29tcGxldGVkLiAic291cmNlIiBwYXJhbWV0
ZXIgd2lsbCBiZSBudWxsCi0gKiAgICAgaWYgdGhlIHJlc29sdXRpb24gZmFpbHMuCi0gKi8KLWRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlc29sdmVTY3JpcHRTb3VyY2UgPSBmdW5j
dGlvbihzY3JpcHRJZCwgY2FsbGJhY2spCi17Ci0gICAgdmFyIHNjcmlwdCA9IHRoaXMucGFyc2Vk
U2NyaXB0c19bc2NyaXB0SWRdOwotICAgIGlmICghc2NyaXB0IHx8IHNjcmlwdC5pc1VucmVzb2x2
ZWQoKSkgewotICAgICAgICBjYWxsYmFjayhudWxsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJzY3JpcHRzIiwgewot
ICAgICAgICAiaWRzIjogW3NjcmlwdElkXSwKLSAgICAgICAgImluY2x1ZGVTb3VyY2UiOiB0cnVl
Ci0gICAgfSk7Ci0gICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsK
LSAgICAvLyBGb3JjZSB2OCBleGVjdXRpb24gc28gdGhhdCBpdCBnZXRzIHRvIHByb2Nlc3Npbmcg
dGhlIHJlcXVlc3RlZCBjb21tYW5kLgotICAgIFJlbW90ZURlYnVnZ2VyQWdlbnQucHJvY2Vzc0Rl
YnVnQ29tbWFuZHMoKTsKLQotICAgIHZhciBzZWxmID0gdGhpczsKLSAgICB0aGlzLnJlcXVlc3RT
ZXFUb0NhbGxiYWNrX1tjbWQuZ2V0U2VxdWVuY2VOdW1iZXIoKV0gPSBmdW5jdGlvbihtc2cpIHsK
LSAgICAgICAgaWYgKG1zZy5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgdmFyIHNjcmlwdEpz
b24gPSBtc2cuZ2V0Qm9keSgpWzBdOwotICAgICAgICAgICAgaWYgKHNjcmlwdEpzb24pIHsKLSAg
ICAgICAgICAgICAgICBzY3JpcHQuc291cmNlID0gc2NyaXB0SnNvbi5zb3VyY2U7Ci0gICAgICAg
ICAgICAgICAgY2FsbGJhY2soc2NyaXB0SnNvbi5zb3VyY2UpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgIH07Ci19OwotCi0KLS8qKgot
ICogVGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIHN0b3Agb24gYXMgc29vbiBhcyBwb3NzaWJsZS4K
LSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucGF1c2VFeGVjdXRpb24gPSBm
dW5jdGlvbigpCi17Ci0gICAgUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IuRGVidWdnZXJQ
YXVzZVNjcmlwdCgpOwotfTsKLQotCi0vKioKLSAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VJZCBJ
ZCBvZiB0aGUgc2NyaXB0IGZvdCB0aGUgYnJlYWtwb2ludC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lIE51bWJlciBvZiB0aGUgbGluZSBmb3IgdGhlIGJyZWFrcG9pbnQuCi0gKiBAcGFyYW0gez9z
dHJpbmd9IGNvbmRpdGlvbiBUaGUgYnJlYWtwb2ludCBjb25kaXRpb24uCi0gKi8KLWRldnRvb2xz
LkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJ
ZCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQotewotICAgIHZhciBzY3JpcHQgPSB0aGlzLnBh
cnNlZFNjcmlwdHNfW3NvdXJjZUlkXTsKLSAgICBpZiAoIXNjcmlwdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1i
ZXJfKGxpbmUpOwotCi0gICAgdmFyIGNvbW1hbmRBcmd1bWVudHM7Ci0gICAgaWYgKHNjcmlwdC5n
ZXRVcmwoKSkgewotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnVybFRvQnJlYWtwb2lu
dHNfW3NjcmlwdC5nZXRVcmwoKV07Ci0gICAgICAgIGlmIChicmVha3BvaW50cyAmJiBicmVha3Bv
aW50c1tsaW5lXSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFicmVha3BvaW50
cykgewotICAgICAgICAgICAgYnJlYWtwb2ludHMgPSB7fTsKLSAgICAgICAgICAgIHRoaXMudXJs
VG9CcmVha3BvaW50c19bc2NyaXB0LmdldFVybCgpXSA9IGJyZWFrcG9pbnRzOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJbmZvID0gbmV3IGRldnRvb2xzLkJyZWFrcG9pbnRJ
bmZvKGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Ci0gICAgICAgIGJyZWFrcG9pbnRzW2xpbmVd
ID0gYnJlYWtwb2ludEluZm87Ci0KLSAgICAgICAgY29tbWFuZEFyZ3VtZW50cyA9IHsKLSAgICAg
ICAgICAgICJncm91cElkIjogdGhpcy5jb250ZXh0SWRfLAotICAgICAgICAgICAgInR5cGUiOiAi
c2NyaXB0IiwKLSAgICAgICAgICAgICJ0YXJnZXQiOiBzY3JpcHQuZ2V0VXJsKCksCi0gICAgICAg
ICAgICAibGluZSI6IGxpbmUsCi0gICAgICAgICAgICAiY29uZGl0aW9uIjogY29uZGl0aW9uCi0g
ICAgICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJbmZvID0gc2Ny
aXB0LmdldEJyZWFrcG9pbnRJbmZvKGxpbmUpOwotICAgICAgICBpZiAoYnJlYWtwb2ludEluZm8p
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYnJlYWtwb2ludEluZm8gPSBuZXcgZGV2
dG9vbHMuQnJlYWtwb2ludEluZm8obGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICAgICAg
c2NyaXB0LmFkZEJyZWFrcG9pbnRJbmZvKGJyZWFrcG9pbnRJbmZvKTsKLQotICAgICAgICBjb21t
YW5kQXJndW1lbnRzID0gewotICAgICAgICAgICAgImdyb3VwSWQiOiB0aGlzLmNvbnRleHRJZF8s
Ci0gICAgICAgICAgICAidHlwZSI6ICJzY3JpcHRJZCIsCi0gICAgICAgICAgICAidGFyZ2V0Ijog
c291cmNlSWQsCi0gICAgICAgICAgICAibGluZSI6IGxpbmUsCi0gICAgICAgICAgICAiY29uZGl0
aW9uIjogY29uZGl0aW9uCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgaWYgKCFlbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFu
ZCgic2V0YnJlYWtwb2ludCIsIGNvbW1hbmRBcmd1bWVudHMpOwotCi0gICAgdGhpcy5yZXF1ZXN0
TnVtYmVyVG9CcmVha3BvaW50SW5mb19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCldID0gYnJlYWtw
b2ludEluZm87Ci0KLSAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21tYW5kXyhjbWQp
OwotICAgIC8vIEZvcmNlIHY4IGV4ZWN1dGlvbiBzbyB0aGF0IGl0IGdldHMgdG8gcHJvY2Vzc2lu
ZyB0aGUgcmVxdWVzdGVkIGNvbW1hbmQuCi0gICAgLy8gSXQgaXMgbmVjZXNzYXJ5IGZvciBiZWlu
ZyBhYmxlIHRvIGNoYW5nZSBhIGJyZWFrcG9pbnQganVzdCBhZnRlciBpdAotICAgIC8vIGhhcyBi
ZWVuIGNyZWF0ZWQgKHNpbmNlIHdlIG5lZWQgYW4gZXhpc3RpbmcgYnJlYWtwb2ludCBpZCBmb3Ig
dGhhdCkuCi0gICAgUmVtb3RlRGVidWdnZXJBZ2VudC5wcm9jZXNzRGVidWdDb21tYW5kcygpOwot
fTsKLQotCi0vKioKLSAqIENoYW5nZXMgZ2l2ZW4gbGluZSBvZiB0aGUgc2NyaXB0LgotICovCi1k
ZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5lZGl0U2NyaXB0U291cmNlID0gZnVuY3Rp
b24oc291cmNlSWQsIG5ld0NvbnRlbnQsIGNhbGxiYWNrKQotewotICAgIHZhciBjb21tYW5kQXJn
dW1lbnRzID0gewotICAgICAgICAic2NyaXB0X2lkIjogc291cmNlSWQsCi0gICAgICAgICJuZXdf
c291cmNlIjogbmV3Q29udGVudAotICAgIH07Ci0KLSAgICB2YXIgY21kID0gbmV3IGRldnRvb2xz
LkRlYnVnQ29tbWFuZCgiY2hhbmdlbGl2ZSIsIGNvbW1hbmRBcmd1bWVudHMpOwotICAgIGRldnRv
b2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7Ci0gICAgdGhpcy5yZXF1ZXN0U2Vx
VG9DYWxsYmFja19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCldID0gZnVuY3Rpb24obXNnKSB7Ci0g
ICAgICAgIGlmICghbXNnLmlzU3VjY2VzcygpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhmYWxz
ZSwgIlVuYWJsZSB0byBtb2RpZnkgc291cmNlIGNvZGUgd2l0aGluIGdpdmVuIHNjb3BlLiBPbmx5
IGZ1bmN0aW9uIGJvZGllcyBhcmUgZWRpdGFibGUgYXQgdGhlIG1vbWVudC4iLCBudWxsKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMucmVzb2x2ZVNjcmlw
dFNvdXJjZShzb3VyY2VJZCwgcmVxdWVzdEJhY2t0cmFjZS5iaW5kKHRoaXMpKTsKLSAgICB9LmJp
bmQodGhpcyk7Ci0KLQotICAgIGZ1bmN0aW9uIHJlcXVlc3RCYWNrdHJhY2UobmV3U2NyaXB0U291
cmNlKSB7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMucGF1c2VkKQot
ICAgICAgICAgICAgdGhpcy5yZXF1ZXN0QmFja3RyYWNlXyhoYW5kbGVCYWNrdHJhY2VSZXNwb25z
ZS5iaW5kKHRoaXMsIG5ld1NjcmlwdFNvdXJjZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXBvcnREaWRDb21taXRFZGl0aW5nKG5ld1NjcmlwdFNvdXJjZSk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gaGFuZGxlQmFja3RyYWNlUmVzcG9uc2UobmV3U2NyaXB0U291cmNlLCBtc2cpIHsK
LSAgICAgICAgdGhpcy51cGRhdGVDYWxsRnJhbWVzRnJvbUJhY2t0cmFjZVJlc3BvbnNlXyhtc2cp
OwotICAgICAgICByZXBvcnREaWRDb21taXRFZGl0aW5nKG5ld1NjcmlwdFNvdXJjZSwgdGhpcy5j
YWxsRnJhbWVzXyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVwb3J0RGlkQ29tbWl0RWRpdGlu
ZyhuZXdTY3JpcHRTb3VyY2UsIGNhbGxGcmFtZXMpIHsKLSAgICAgICAgY2FsbGJhY2sodHJ1ZSwg
bmV3U2NyaXB0U291cmNlLCBjYWxsRnJhbWVzKTsKLSAgICB9Ci0KLSAgICBSZW1vdGVEZWJ1Z2dl
ckFnZW50LnByb2Nlc3NEZWJ1Z0NvbW1hbmRzKCk7Ci19OwotCi0KLS8qKgotICogQHBhcmFtIHtu
dW1iZXJ9IHNvdXJjZUlkIElkIG9mIHRoZSBzY3JpcHQgZm9yIHRoZSBicmVha3BvaW50LgotICog
QHBhcmFtIHtudW1iZXJ9IGxpbmUgTnVtYmVyIG9mIHRoZSBsaW5lIGZvciB0aGUgYnJlYWtwb2lu
dC4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dCA9IGZ1bmN0aW9uKHNvdXJjZUlkLCBsaW5lKQotewotICAgIHZhciBzY3JpcHQgPSB0aGlzLnBh
cnNlZFNjcmlwdHNfW3NvdXJjZUlkXTsKLSAgICBpZiAoIXNjcmlwdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1i
ZXJfKGxpbmUpOwotCi0gICAgdmFyIGJyZWFrcG9pbnRJbmZvOwotICAgIGlmIChzY3JpcHQuZ2V0
VXJsKCkpIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy51cmxUb0JyZWFrcG9pbnRz
X1tzY3JpcHQuZ2V0VXJsKCldOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnRzKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBicmVha3BvaW50SW5mbyA9IGJyZWFrcG9pbnRzW2xpbmVdOwot
ICAgICAgICBkZWxldGUgYnJlYWtwb2ludHNbbGluZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YnJlYWtwb2ludEluZm8gPSBzY3JpcHQuZ2V0QnJlYWtwb2ludEluZm8obGluZSk7Ci0gICAgICAg
IGlmIChicmVha3BvaW50SW5mbykKLSAgICAgICAgICAgIHNjcmlwdC5yZW1vdmVCcmVha3BvaW50
SW5mbyhicmVha3BvaW50SW5mbyk7Ci0gICAgfQotCi0gICAgaWYgKCFicmVha3BvaW50SW5mbykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYnJlYWtwb2ludEluZm8ubWFya0FzUmVtb3ZlZCgpOwot
Ci0gICAgdmFyIGlkID0gYnJlYWtwb2ludEluZm8uZ2V0VjhJZCgpOwotCi0gICAgLy8gSWYgd2Ug
ZG9uJ3Qga25vdyBpZCBvZiB0aGlzIGJyZWFrcG9pbnQgaW4gdGhlIHY4IGRlYnVnZ2VyIHdlIGNh
bm5vdCBzZW5kCi0gICAgLy8gImNsZWFyYnJlYWtwb2ludCIgcmVxdWVzdC4gSW4gdGhhdCBjYXNl
IGl0IHdpbGwgYmUgcmVtb3ZlZCBpbgotICAgIC8vICJzZXRicmVha3BvaW50IiByZXNwb25zZSBo
YW5kbGVyIHdoZW4gd2UgbGVhcm4gdGhlIGlkLgotICAgIGlmIChpZCAhPT0gLTEpIHsKLSAgICAg
ICAgdGhpcy5yZXF1ZXN0Q2xlYXJCcmVha3BvaW50XyhpZCk7Ci0gICAgfQotfTsKLQotCi0vKioK
LSAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aXZhdGVkIFdoZXRoZXIgYnJlYWtwb2ludHMgc2hvdWxk
IGJlIGFjdGl2YXRlZC4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc2V0
QnJlYWtwb2ludHNBY3RpdmF0ZWQgPSBmdW5jdGlvbihhY3RpdmF0ZWQpCi17Ci0gICAgdGhpcy5i
cmVha3BvaW50c0FjdGl2YXRlZF8gPSBhY3RpdmF0ZWQ7Ci19OwotCi0KLS8qKgotICogVGVsbHMg
dGhlIHY4IGRlYnVnZ2VyIHRvIHN0ZXAgaW50byB0aGUgbmV4dCBzdGF0ZW1lbnQuCi0gKi8KLWRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnN0ZXBJbnRvU3RhdGVtZW50ID0gZnVuY3Rp
b24oKQotewotICAgIHRoaXMuc3RlcENvbW1hbmRfKCJpbiIpOwotfTsKLQotCi0vKioKLSAqIFRl
bGxzIHRoZSB2OCBkZWJ1Z2dlciB0byBzdGVwIG91dCBvZiBjdXJyZW50IGZ1bmN0aW9uLgotICov
Ci1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5zdGVwT3V0T2ZGdW5jdGlvbiA9IGZ1
bmN0aW9uKCkKLXsKLSAgICB0aGlzLnN0ZXBDb21tYW5kXygib3V0Iik7Ci19OwotCi0KLS8qKgot
ICogVGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIHN0ZXAgb3ZlciB0aGUgbmV4dCBzdGF0ZW1lbnQu
Ci0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnN0ZXBPdmVyU3RhdGVtZW50
ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuc3RlcENvbW1hbmRfKCJuZXh0Iik7Ci19OwotCi0K
LS8qKgotICogVGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBhZnRl
ciBpdCBoYXMgYmVlbiBzdG9wcGVkIG9uIGEKLSAqIGJyZWFrcG9pbnQgb3IgYW4gZXhjZXB0aW9u
LgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXN1bWVFeGVjdXRpb24g
PSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5jbGVhckV4Y2VwdGlvbk1lc3NhZ2VfKCk7Ci0gICAg
dmFyIGNtZCA9IG5ldyBkZXZ0b29scy5EZWJ1Z0NvbW1hbmQoImNvbnRpbnVlIik7Ci0gICAgZGV2
dG9vbHMuRGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKLX07Ci0KLQotLyoqCi0gKiBD
cmVhdGVzIGV4Y2VwdGlvbiBtZXNzYWdlIGFuZCBzY2hlZHVsZXMgaXQgZm9yIGFkZGl0aW9uIHRv
IHRoZSByZXNvdXJjZSB1cG9uCi0gKiBiYWNrdHJhY2UgYXZhaWxhYmlsaXR5LgotICogQHBhcmFt
IHtzdHJpbmd9IHVybCBSZXNvdXJjZSB1cmwuCi0gKiBAcGFyYW0ge251bWJlcn0gbGluZSBSZXNv
dXJjZSBsaW5lIG51bWJlci4KLSAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIEV4Y2VwdGlvbiB0
ZXh0LgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5jcmVhdGVFeGNlcHRp
b25NZXNzYWdlXyA9IGZ1bmN0aW9uKHVybCwgbGluZSwgbWVzc2FnZSkKLXsKLSAgICB0aGlzLmN1
cnJlbnRFeGNlcHRpb25NZXNzYWdlXyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uo
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLAot
ICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nLAotICAg
ICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yLAotICAg
ICAgICBsaW5lLAotICAgICAgICB1cmwsCi0gICAgICAgIDAgLyogZ3JvdXAgbGV2ZWwgKi8sCi0g
ICAgICAgIDEgLyogcmVwZWF0IGNvdW50ICovLAotICAgICAgICAiW0V4Y2VwdGlvbl0gIiArIG1l
c3NhZ2UpOwotfTsKLQotCi0vKioKLSAqIFNob3dzIHBlbmRpbmcgZXhjZXB0aW9uIG1lc3NhZ2Ug
dGhhdCBpcyBjcmVhdGVkIHdpdGggY3JlYXRlRXhjZXB0aW9uTWVzc2FnZV8KLSAqIGVhcmxpZXIu
Ci0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnNob3dQZW5kaW5nRXhjZXB0
aW9uTWVzc2FnZV8gPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRFeGNlcHRp
b25NZXNzYWdlXykKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBtc2cgPSB0aGlzLmN1cnJlbnRF
eGNlcHRpb25NZXNzYWdlXzsKLSAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VVUkxNYXBbbXNnLnVybF07Ci0gICAgaWYgKHJlc291cmNlKSB7Ci0gICAgICAgIG1zZy5yZXNv
dXJjZSA9IHJlc291cmNlOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5h
ZGRNZXNzYWdlVG9SZXNvdXJjZShyZXNvdXJjZSwgbXNnKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
dGhpcy5jdXJyZW50RXhjZXB0aW9uTWVzc2FnZV8gPSBudWxsOwotfTsKLQotCi0vKioKLSAqIENs
ZWFycyBleGNlcHRpb24gbWVzc2FnZSBmcm9tIHRoZSByZXNvdXJjZS4KLSAqLwotZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5wcm90b3R5cGUuY2xlYXJFeGNlcHRpb25NZXNzYWdlXyA9IGZ1bmN0aW9u
KCkKLXsKLSAgICBpZiAodGhpcy5jdXJyZW50RXhjZXB0aW9uTWVzc2FnZV8pIHsKLSAgICAgICAg
dmFyIG1lc3NhZ2VFbGVtZW50ID0gdGhpcy5jdXJyZW50RXhjZXB0aW9uTWVzc2FnZV8uX3Jlc291
cmNlTWVzc2FnZUxpbmVFbGVtZW50OwotICAgICAgICB2YXIgYnViYmxlID0gbWVzc2FnZUVsZW1l
bnQucGFyZW50RWxlbWVudDsKLSAgICAgICAgYnViYmxlLnJlbW92ZUNoaWxkKG1lc3NhZ2VFbGVt
ZW50KTsKLSAgICAgICAgaWYgKCFidWJibGUuZmlyc3RDaGlsZCkgewotICAgICAgICAgICAgLy8g
TGFzdCBtZXNzYWdlIGluIGJ1YmJsZSByZW1vdmVkLgotICAgICAgICAgICAgYnViYmxlLnBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQoYnViYmxlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmN1
cnJlbnRFeGNlcHRpb25NZXNzYWdlXyA9IG51bGw7Ci0gICAgfQotfTsKLQotCi0vKioKLSAqIEBy
ZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIHRoZSBkZWJ1Z2dlciB3aWxsIHBhdXNlIGV4ZWN1dGlv
biBvbiB0aGUKLSAqIGV4Y2VwdGlvbnMuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJv
dG90eXBlLnBhdXNlT25FeGNlcHRpb25zID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlz
LnBhdXNlT25FeGNlcHRpb25zXzsKLX07Ci0KLQotLyoqCi0gKiBUZWxscyB3aGV0aGVyIHRvIHBh
dXNlIGluIHRoZSBkZWJ1Z2dlciBvbiB0aGUgZXhjZXB0aW9ucyBvciBub3QuCi0gKiBAcGFyYW0g
e2Jvb2xlYW59IHZhbHVlIFRydWUgaWZmIGV4ZWN1dGlvbiBzaG91bGQgYmUgc3RvcHBlZCBpbiB0
aGUgZGVidWdnZXIKLSAqIG9uIHRoZSBleGNlcHRpb25zLgotICovCi1kZXZ0b29scy5EZWJ1Z2dl
ckFnZW50LnByb3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKQot
ewotICAgIHRoaXMucGF1c2VPbkV4Y2VwdGlvbnNfID0gdmFsdWU7Ci19OwotCi0KLS8qKgotICog
U2VuZHMgImV2YWx1YXRlIiByZXF1ZXN0IHRvIHRoZSBkZWJ1Z2dlci4KLSAqIEBwYXJhbSB7T2Jq
ZWN0fSBhcmd1bWVudHMgUmVxdWVzdCBhcmd1bWVudHMgbWFwLgotICogQHBhcmFtIHtmdW5jdGlv
bihkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UpfSBjYWxsYmFjayBDYWxsYmFjayB0byBiZSBjYWxs
ZWQKLSAqICAgICB3aGVuIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotICovCi1kZXZ0b29scy5EZWJ1
Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0RXZhbHVhdGUgPSBmdW5jdGlvbihhcmd1bWVudHMs
IGNhbGxiYWNrKQotewotICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJl
dmFsdWF0ZSIsIGFyZ3VtZW50cyk7Ci0gICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5zZW5kQ29t
bWFuZF8oY21kKTsKLSAgICB0aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrX1tjbWQuZ2V0U2VxdWVu
Y2VOdW1iZXIoKV0gPSBjYWxsYmFjazsKLX07Ci0KLQotLyoqCi0gKiBTZW5kcyAibG9va3VwIiBy
ZXF1ZXN0IGZvciBlYWNoIHVucmVzb2x2ZWQgcHJvcGVydHkgb2YgdGhlIG9iamVjdC4gV2hlbgot
ICogcmVzcG9uc2UgaXMgcmVjZWl2ZWQgdGhlIHByb3BlcnRpZXMgd2lsbCBiZSBjaGFuZ2VkIHdp
dGggdGhlaXIgcmVzb2x2ZWQKLSAqIHZhbHVlcy4KLSAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qg
T2JqZWN0IHdob3NlIHByb3BlcnRpZXMgc2hvdWxkIGJlIHJlc29sdmVkLgotICogQHBhcmFtIHtm
dW5jdGlvbihkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UpfSBDYWxsYmFjayB0byBiZSBjYWxsZWQg
d2hlbiBhbGwKLSAqICAgICBjaGlsZHJlbiBhcmUgcmVzb2x2ZWQuCi0gKiBAcGFyYW0ge2Jvb2xl
YW59IG5vSW50cmluc2ljIFdoZXRoZXIgaW50cmluc2ljIHByb3BlcnRpZXMgc2hvdWxkIGJlIGlu
Y2x1ZGVkLgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXNvbHZlQ2hp
bGRyZW4gPSBmdW5jdGlvbihvYmplY3QsIGNhbGxiYWNrLCBub0ludHJpbnNpYykKLXsKLSAgICBp
ZiAoImhhbmRsZSIgaW4gb2JqZWN0KSB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAg
ICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmplY3RQcm9wZXJ0aWVzXyhvYmplY3Qs
IHJlc3VsdCwgbm9JbnRyaW5zaWMpOwotICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHRoaXMucmVxdWVzdExvb2t1cF8oW29iamVjdC5yZWZdLCBmdW5jdGlv
bihtc2cpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgICAgIGlmICht
c2cuaXNTdWNjZXNzKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlVG9PYmplY3QgPSBt
c2cuZ2V0Qm9keSgpOwotICAgICAgICAgICAgICAgIHZhciByZXNvbHZlZCA9IGhhbmRsZVRvT2Jq
ZWN0W29iamVjdC5yZWZdOwotICAgICAgICAgICAgICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQu
Zm9ybWF0T2JqZWN0UHJvcGVydGllc18ocmVzb2x2ZWQsIHJlc3VsdCwgbm9JbnRyaW5zaWMpOwot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayhbXSk7Ci0gICAgICAgIH0pOwotICAgIH0KLX07Ci0KLQot
LyoqCi0gKiBTZW5kcyAic2NvcGUiIHJlcXVlc3QgZm9yIHRoZSBzY29wZSBvYmplY3QgdG8gcmVz
b2x2ZSBpdHMgdmFyaWFibGVzLgotICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFNjb3BlIHRvIGJl
IHJlc29sdmVkLgotICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnR5UHJveHk+KX0gY2FsbGJhY2sKLSAqICAgICBDYWxsYmFjayB0byBiZSBjYWxsZWQg
d2hlbiBhbGwgc2NvcGUgdmFyaWFibGVzIGFyZSByZXNvbHZlZC4KLSAqLwotZGV2dG9vbHMuRGVi
dWdnZXJBZ2VudC5wcm90b3R5cGUucmVzb2x2ZVNjb3BlID0gZnVuY3Rpb24oc2NvcGUsIGNhbGxi
YWNrKQotewotICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJzY29wZSIs
IHsKLSAgICAgICAgImZyYW1lTnVtYmVyIjogc2NvcGUuZnJhbWVOdW1iZXIsCi0gICAgICAgICJu
dW1iZXIiOiBzY29wZS5pbmRleCwKLSAgICAgICAgImNvbXBhY3RGb3JtYXQiOiB0cnVlCi0gICAg
fSk7Ci0gICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKLSAgICB0
aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrX1tjbWQuZ2V0U2VxdWVuY2VOdW1iZXIoKV0gPSBmdW5j
dGlvbihtc2cpIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBpZiAobXNnLmlz
U3VjY2VzcygpKSB7Ci0gICAgICAgICAgICB2YXIgc2NvcGVPYmplY3RKc29uID0gbXNnLmdldEJv
ZHkoKS5vYmplY3Q7Ci0gICAgICAgICAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9i
amVjdFByb3BlcnRpZXNfKHNjb3BlT2JqZWN0SnNvbiwgcmVzdWx0LCB0cnVlIC8qIG5vIGludHJp
bnNpYyAqLyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKLSAgICB9Owot
fTsKLQotCi0vKioKLSAqIFNlbmRzICJzY29wZXMiIHJlcXVlc3QgZm9yIHRoZSBmcmFtZSBvYmpl
Y3QgdG8gcmVzb2x2ZSBhbGwgdmFyaWFibGVzCi0gKiBhdmFpbGFibGUgaW4gdGhlIGZyYW1lLgot
ICogQHBhcmFtIHtudW1iZXJ9IGNhbGxGcmFtZUlkIElkIG9mIGNhbGwgZnJhbWUgd2hvc2UgdmFy
aWFibGVzIG5lZWQgdG8KLSAqICAgICBiZSByZXNvbHZlZC4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24o
T2JqZWN0KX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYWxsIGZyYW1lCi0g
KiAgICAgdmFyaWFibGVzIGFyZSByZXNvbHZlZC4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2Vu
dC5wcm90b3R5cGUucmVzb2x2ZUZyYW1lVmFyaWFibGVzXyA9IGZ1bmN0aW9uKGNhbGxGcmFtZUlk
LCBjYWxsYmFjaykKLXsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0KLSAgICB2YXIgZnJhbWUgPSB0
aGlzLmNhbGxGcmFtZXNfW2NhbGxGcmFtZUlkXTsKLSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgd2Fp
dGluZ1Jlc3BvbnNlcyA9IDA7Ci0gICAgZnVuY3Rpb24gc2NvcGVSZXNwb25zZUhhbmRsZXIobXNn
KSB7Ci0gICAgICAgIHdhaXRpbmdSZXNwb25zZXMtLTsKLQotICAgICAgICBpZiAobXNnLmlzU3Vj
Y2VzcygpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IG1zZy5nZXRCb2R5KCkub2Jq
ZWN0LnByb3BlcnRpZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BlcnRp
ZXMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnRpZXNbal0ubmFt
ZV0gPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBhbGwgc2NvcGVzIGFyZSBy
ZXNvbHZlZCBpbnZva2UgdGhlIGNhbGxiYWNrLgotICAgICAgICBpZiAod2FpdGluZ1Jlc3BvbnNl
cyA9PT0gMCkKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7Ci0gICAgfTsKLQotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZnJhbWUuc2NvcGVDaGFpbi5sZW5ndGg7IGkrKykgewotICAgICAg
ICB2YXIgc2NvcGUgPSBmcmFtZS5zY29wZUNoYWluW2ldLm9iamVjdElkOwotICAgICAgICBpZiAo
c2NvcGUudHlwZSA9PT0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5TY29wZVR5cGUuR2xvYmFsKSB7
Ci0gICAgICAgICAgICAvLyBEbyBub3QgcmVzb2x2ZSBnbG9iYWwgc2NvcGUgc2luY2UgaXQgdGFr
ZXMgZm9yIHRvbyBsb25nLgotICAgICAgICAgICAgLy8gVE9ETyh5dXJ5cyk6IGFsbG93IHRvIHNl
bmQgb25seSBwcm9wZXJ0eSBuYW1lcyBpbiB0aGUgcmVzcG9uc2UuCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29t
bWFuZCgic2NvcGUiLCB7Ci0gICAgICAgICAgICAiZnJhbWVOdW1iZXIiOiBzY29wZS5mcmFtZU51
bWJlciwKLSAgICAgICAgICAgICJudW1iZXIiOiBzY29wZS5pbmRleCwKLSAgICAgICAgICAgICJj
b21wYWN0Rm9ybWF0IjogdHJ1ZQotICAgICAgICB9KTsKLSAgICAgICAgZGV2dG9vbHMuRGVidWdn
ZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKLSAgICAgICAgdGhpcy5yZXF1ZXN0U2VxVG9DYWxs
YmFja19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCldID0gc2NvcGVSZXNwb25zZUhhbmRsZXI7Ci0g
ICAgICAgIHdhaXRpbmdSZXNwb25zZXMrKzsKLSAgICB9Ci19OwotCi0vKioKLSAqIEV2YWx1YXRl
cyB0aGUgZXhwcmVzc2lvblN0cmluZyB0byBhbiBvYmplY3QgaW4gdGhlIGNhbGwgZnJhbWUgYW5k
IHJlcG9ydHMKLSAqIGFsbCBpdHMgcHJvcGVydGllcy4KLSAqIEBwYXJhbXtzdHJpbmd9IGV4cHJl
c3Npb25TdHJpbmcgRXhwcmVzc2lvbiB3aG9zZSBwcm9wZXJ0aWVzIHNob3VsZCBiZQotICogICAg
IGNvbGxlY3RlZC4KLSAqIEBwYXJhbXtudW1iZXJ9IGNhbGxGcmFtZUlkIFRoZSBmcmFtZSBpZC4K
LSAqIEBwYXJhbXtmdW5jdGlvbihPYmplY3QgcmVzdWx0LGJvb2wgaXNFeGNlcHRpb24pfSByZXBv
cnRDb21wbGV0aW9ucyBDYWxsYmFjawotICogICAgIGZ1bmN0aW9uLgotICovCi1kZXZ0b29scy5E
ZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXNvbHZlQ29tcGxldGlvbnNPbkZyYW1lID0gZnVuY3Rp
b24oZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25zKQotewot
ICAgICAgaWYgKGV4cHJlc3Npb25TdHJpbmcpIHsKLSAgICAgICAgICBleHByZXNzaW9uU3RyaW5n
ID0gInZhciBvYmogPSAiICsgZXhwcmVzc2lvblN0cmluZyArCi0gICAgICAgICAgICAgICI7IHZh
ciBuYW1lcyA9IHt9OyBmb3IgKHZhciBuIGluIG9iaikgeyBuYW1lc1tuXSA9IHRydWU7IH07IiAr
Ci0gICAgICAgICAgICAgICJuYW1lczsiOwotICAgICAgICAgIHRoaXMuZXZhbHVhdGVJbkNhbGxG
cmFtZSgKLSAgICAgICAgICAgICAgY2FsbEZyYW1lSWQsCi0gICAgICAgICAgICAgIGV4cHJlc3Np
b25TdHJpbmcsCi0gICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICAgICAg
ICAgICAgdmFyIG5hbWVzID0ge307Ci0gICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0V4
Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IHJlc3VsdC52YWx1
ZS5vYmplY3RJZC5wcm9wZXJ0aWVzOwotICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dCBhbGwg
b2JqZWN0IHByb3BlcnRpZXMgaW50byB0aGUgbWFwLgotICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzW3Byb3BzW2ldLm5hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgIHJlcG9ydENvbXBsZXRpb25zKG5hbWVzLCByZXN1bHQuaXNFeGNl
cHRpb24pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhp
cy5yZXNvbHZlRnJhbWVWYXJpYWJsZXNfKGNhbGxGcmFtZUlkLAotICAgICAgICAgICAgICBmdW5j
dGlvbihyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgIHJlcG9ydENvbXBsZXRpb25zKHJlc3Vs
dCwgZmFsc2UgLyogaXNFeGNlcHRpb24gKi8pOwotICAgICAgICAgICAgICB9KTsKLSAgICAgIH0K
LX07Ci0KLQotLyoqCi0gKiBAcGFyYW17bnVtYmVyfSBzY3JpcHRJZAotICogQHJldHVybiB7c3Ry
aW5nfSBUeXBlIG9mIHRoZSBjb250ZXh0IG9mIHRoZSBzY3JpcHQgd2l0aCBzcGVjaWZpZWQgaWQu
Ci0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmdldFNjcmlwdENvbnRleHRU
eXBlID0gZnVuY3Rpb24oc2NyaXB0SWQpCi17Ci0gICAgcmV0dXJuIHRoaXMucGFyc2VkU2NyaXB0
c19bc2NyaXB0SWRdLmdldENvbnRleHRUeXBlKCk7Ci19OwotCi0KLS8qKgotICogUmVtb3ZlcyBz
cGVjaWZpZWQgYnJlYWtwb2ludCBmcm9tIHRoZSB2OCBkZWJ1Z2dlci4KLSAqIEBwYXJhbSB7bnVt
YmVyfSBicmVha3BvaW50SWQgSWQgb2YgdGhlIGJyZWFrcG9pbnQgaW4gdGhlIHY4IGRlYnVnZ2Vy
LgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0Q2xlYXJCcmVh
a3BvaW50XyA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKLXsKLSAgICB2YXIgY21kID0gbmV3IGRl
dnRvb2xzLkRlYnVnQ29tbWFuZCgiY2xlYXJicmVha3BvaW50IiwgewotICAgICAgICAiYnJlYWtw
b2ludCI6IGJyZWFrcG9pbnRJZAotICAgIH0pOwotICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQu
c2VuZENvbW1hbmRfKGNtZCk7Ci19OwotCi0KLS8qKgotICogU2VuZHMgImJhY2t0cmFjZSIgcmVx
dWVzdCB0byB2OC4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVxdWVz
dEJhY2t0cmFjZV8gPSBmdW5jdGlvbihvcHRfY3VzdG9tSGFuZGxlcikKLXsKLSAgICB2YXIgY21k
ID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgiYmFja3RyYWNlIiwgewotICAgICAgICAiY29t
cGFjdEZvcm1hdCI6dHJ1ZQotICAgIH0pOwotICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2Vu
ZENvbW1hbmRfKGNtZCk7Ci0gICAgdmFyIHJlc3BvbnNlSGFuZGxlciA9IG9wdF9jdXN0b21IYW5k
bGVyID8gb3B0X2N1c3RvbUhhbmRsZXIgOiB0aGlzLmhhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXy5i
aW5kKHRoaXMpOwotICAgIHRoaXMucmVxdWVzdFNlcVRvQ2FsbGJhY2tfW2NtZC5nZXRTZXF1ZW5j
ZU51bWJlcigpXSA9IHJlc3BvbnNlSGFuZGxlcjsKLX07Ci0KLQotLyoqCi0gKiBTZW5kcyBjb21t
YW5kIHRvIHY4IGRlYnVnZ2VyLgotICogQHBhcmFtIHtkZXZ0b29scy5EZWJ1Z0NvbW1hbmR9IGNt
ZCBDb21tYW5kIHRvIGV4ZWN1dGUuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENv
bW1hbmRfID0gZnVuY3Rpb24oY21kKQotewotICAgIFJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1
dG9yLkRlYnVnZ2VyQ29tbWFuZChjbWQudG9KU09OUHJvdG9jb2woKSk7Ci19OwotCi0KLS8qKgot
ICogVGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIG1ha2UgdGhlIG5leHQgZXhlY3V0aW9uIHN0ZXAu
Ci0gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uICJpbiIsICJvdXQiIG9yICJuZXh0IiBhY3Rpb24u
Ci0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnN0ZXBDb21tYW5kXyA9IGZ1
bmN0aW9uKGFjdGlvbikKLXsKLSAgICB0aGlzLmNsZWFyRXhjZXB0aW9uTWVzc2FnZV8oKTsKLSAg
ICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgiY29udGludWUiLCB7Ci0gICAg
ICAgICJzdGVwYWN0aW9uIjogYWN0aW9uLAotICAgICAgICAic3RlcGNvdW50IjogMQotICAgIH0p
OwotICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7Ci19OwotCi0K
LS8qKgotICogU2VuZHMgImxvb2t1cCIgcmVxdWVzdCB0byB2OC4KLSAqIEBwYXJhbSB7bnVtYmVy
fSBoYW5kbGUgSGFuZGxlIHRvIHRoZSBvYmplY3QgdG8gbG9va3VwLgotICovCi1kZXZ0b29scy5E
ZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0TG9va3VwXyA9IGZ1bmN0aW9uKGhhbmRsZXMs
IGNhbGxiYWNrKQotewotICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJs
b29rdXAiLCB7Ci0gICAgICAgICJjb21wYWN0Rm9ybWF0Ijp0cnVlLAotICAgICAgICAiaGFuZGxl
cyI6IGhhbmRsZXMKLSAgICB9KTsKLSAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21t
YW5kXyhjbWQpOwotICAgIHRoaXMucmVxdWVzdFNlcVRvQ2FsbGJhY2tfW2NtZC5nZXRTZXF1ZW5j
ZU51bWJlcigpXSA9IGNhbGxiYWNrOwotfTsKLQotCi0vKioKLSAqIFNldHMgZGVidWdnZXIgY29u
dGV4dCBpZCBmb3Igc2NyaXB0cyBmaWx0ZXJpbmcuCi0gKiBAcGFyYW0ge251bWJlcn0gY29udGV4
dElkIElkIG9mIHRoZSBpbnNwZWN0ZWQgcGFnZSBnbG9iYWwgY29udGV4dC4KLSAqLwotZGV2dG9v
bHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc2V0Q29udGV4dElkXyA9IGZ1bmN0aW9uKGNvbnRl
eHRJZCkKLXsKLSAgICB0aGlzLmNvbnRleHRJZF8gPSBjb250ZXh0SWQ7Ci0KLSAgICAvLyBJZiBp
dCdzIHRoZSBmaXJzdCB0aW1lIGNvbnRleHQgaWQgaXMgc2V0IHJlcXVlc3Qgc2NyaXB0cyBsaXN0
LgotICAgIGlmICh0aGlzLnJlcXVlc3RTY3JpcHRzV2hlbkNvbnRleHRJZFNldF8pIHsKLSAgICAg
ICAgdGhpcy5yZXF1ZXN0U2NyaXB0c1doZW5Db250ZXh0SWRTZXRfID0gZmFsc2U7Ci0gICAgICAg
IHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJzY3JpcHRzIiwgewotICAgICAg
ICAgICAgImluY2x1ZGVTb3VyY2UiOiBmYWxzZQotICAgICAgICB9KTsKLSAgICAgICAgZGV2dG9v
bHMuRGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKLSAgICAgICAgLy8gRm9yY2Ugdjgg
ZXhlY3V0aW9uIHNvIHRoYXQgaXQgZ2V0cyB0byBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0ZWQgY29t
bWFuZC4KLSAgICAgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5wcm9jZXNzRGVidWdDb21tYW5kcygp
OwotCi0gICAgICAgIHZhciBkZWJ1Z2dlckFnZW50ID0gdGhpczsKLSAgICAgICAgdGhpcy5yZXF1
ZXN0U2VxVG9DYWxsYmFja19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCldID0gZnVuY3Rpb24obXNn
KSB7Ci0gICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3BvbnNlIGlmZiB0aGUgY29udGV4dCBp
ZCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgcmVxdWVzdAotICAgICAgICAgICAgLy8gd2FzIGlz
c3VlZC4gT3RoZXJ3aXNlIGlmIHRoZSBjb250ZXh0IGlkIGRpZCBjaGFuZ2UgYWxsIHVwLXRvLWRh
dGUKLSAgICAgICAgICAgIC8vIHNjcmlwdHMgd2lsbCBiZSBwdXNoZWQgaW4gYWZ0ZXIgY29tcGls
ZSBldmVudHMgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8KLSAgICAgICAgICAgIC8vIGhhbmRsZSB0
aGUgcmVzcG9uc2UuCi0gICAgICAgICAgICBpZiAoY29udGV4dElkID09PSBkZWJ1Z2dlckFnZW50
LmNvbnRleHRJZF8pCi0gICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC5oYW5kbGVTY3JpcHRz
UmVzcG9uc2VfKG1zZyk7Ci0KLSAgICAgICAgICAgIC8vIFdlIHJlY2VpdmVkIGluaXRpYWwgc2Ny
aXB0cyByZXNwb25zZSBzbyBmbHVzaCB0aGUgZmxhZyBhbmQKLSAgICAgICAgICAgIC8vIHNlZSBp
ZiB0aGVyZSBpcyBhbiB1bmhhbmRsZWQgYmFja3RyYWNlIHJlc3BvbnNlLgotICAgICAgICAgICAg
ZGVidWdnZXJBZ2VudC53YWl0aW5nRm9ySW5pdGlhbFNjcmlwdHNSZXNwb25zZV8gPSBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChkZWJ1Z2dlckFnZW50LnBlbmRpbmdCYWNrdHJhY2VSZXNwb25zZUhh
bmRsZXJfKSB7Ci0gICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC5wZW5kaW5nQmFja3RyYWNl
UmVzcG9uc2VIYW5kbGVyXygpOwotICAgICAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQucGVuZGlu
Z0JhY2t0cmFjZVJlc3BvbnNlSGFuZGxlcl8gPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAg
ICB9OwotICAgIH0KLX07Ci0KLQotLyoqCi0gKiBIYW5kbGVzIG91dHB1dCBzZW50IGJ5IHY4IGRl
YnVnZ2VyLiBUaGUgb3V0cHV0IGlzIGVpdGhlciBhc3luY2hyb25vdXMgZXZlbnQKLSAqIG9yIHJl
c3BvbnNlIHRvIGEgcHJldmlvdXNseSBzZW50IHJlcXVlc3QuICBTZWUgcHJvdG9jb2wgZGVmaW5p
dGlvdW4gZm9yIG1vcmUKLSAqIGRldGFpbHMgb24gdGhlIG91dHB1dCBmb3JtYXQuCi0gKiBAcGFy
YW0ge3N0cmluZ30gb3V0cHV0Ci0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBl
LmhhbmRsZURlYnVnZ2VyT3V0cHV0XyA9IGZ1bmN0aW9uKG91dHB1dCkKLXsKLSAgICB2YXIgbXNn
OwotICAgIHRyeSB7Ci0gICAgICAgIG1zZyA9IG5ldyBkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2Uo
b3V0cHV0KTsKLSAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgZGVidWdQcmludCgiRmFpbGVkIHRv
IGhhbmRsZSBkZWJ1Z2dlciByZXNwb25zZTpcbiIgKyBlKTsKLSAgICAgICAgdGhyb3cgZTsKLSAg
ICB9Ci0KLSAgICBpZiAobXNnLmdldFR5cGUoKSA9PT0gImV2ZW50IikgewotICAgICAgICBpZiAo
bXNnLmdldEV2ZW50KCkgPT09ICJicmVhayIpCi0gICAgICAgICAgICB0aGlzLmhhbmRsZUJyZWFr
RXZlbnRfKG1zZyk7Ci0gICAgICAgIGVsc2UgaWYgKG1zZy5nZXRFdmVudCgpID09PSAiZXhjZXB0
aW9uIikKLSAgICAgICAgICAgIHRoaXMuaGFuZGxlRXhjZXB0aW9uRXZlbnRfKG1zZyk7Ci0gICAg
ICAgIGVsc2UgaWYgKG1zZy5nZXRFdmVudCgpID09PSAiYWZ0ZXJDb21waWxlIikKLSAgICAgICAg
ICAgIHRoaXMuaGFuZGxlQWZ0ZXJDb21waWxlRXZlbnRfKG1zZyk7Ci0gICAgfSBlbHNlIGlmICht
c2cuZ2V0VHlwZSgpID09PSAicmVzcG9uc2UiKSB7Ci0gICAgICAgIGlmIChtc2cuZ2V0Q29tbWFu
ZCgpID09PSAic2NyaXB0cyIpCi0gICAgICAgICAgICB0aGlzLmludm9rZUNhbGxiYWNrRm9yUmVz
cG9uc2VfKG1zZyk7Ci0gICAgICAgIGVsc2UgaWYgKG1zZy5nZXRDb21tYW5kKCkgPT09ICJzZXRi
cmVha3BvaW50IikKLSAgICAgICAgICAgIHRoaXMuaGFuZGxlU2V0QnJlYWtwb2ludFJlc3BvbnNl
Xyhtc2cpOwotICAgICAgICBlbHNlIGlmIChtc2cuZ2V0Q29tbWFuZCgpID09PSAiY2hhbmdlbGl2
ZSIpCi0gICAgICAgICAgICB0aGlzLmludm9rZUNhbGxiYWNrRm9yUmVzcG9uc2VfKG1zZyk7Ci0g
ICAgICAgIGVsc2UgaWYgKG1zZy5nZXRDb21tYW5kKCkgPT09ICJjbGVhcmJyZWFrcG9pbnQiKQot
ICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGVhckJyZWFrcG9pbnRSZXNwb25zZV8obXNnKTsKLSAg
ICAgICAgZWxzZSBpZiAobXNnLmdldENvbW1hbmQoKSA9PT0gImJhY2t0cmFjZSIpCi0gICAgICAg
ICAgICB0aGlzLmludm9rZUNhbGxiYWNrRm9yUmVzcG9uc2VfKG1zZyk7Ci0gICAgICAgIGVsc2Ug
aWYgKG1zZy5nZXRDb21tYW5kKCkgPT09ICJsb29rdXAiKQotICAgICAgICAgICAgdGhpcy5pbnZv
a2VDYWxsYmFja0ZvclJlc3BvbnNlXyhtc2cpOwotICAgICAgICBlbHNlIGlmIChtc2cuZ2V0Q29t
bWFuZCgpID09PSAiZXZhbHVhdGUiKQotICAgICAgICAgICAgdGhpcy5pbnZva2VDYWxsYmFja0Zv
clJlc3BvbnNlXyhtc2cpOwotICAgICAgICBlbHNlIGlmIChtc2cuZ2V0Q29tbWFuZCgpID09PSAi
c2NvcGUiKQotICAgICAgICAgICAgdGhpcy5pbnZva2VDYWxsYmFja0ZvclJlc3BvbnNlXyhtc2cp
OwotICAgIH0KLX07Ci0KLQotLyoqCi0gKiBAcGFyYW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2Fn
ZX0gbXNnCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmhhbmRsZUJyZWFr
RXZlbnRfID0gZnVuY3Rpb24obXNnKQotewotICAgIGlmICghdGhpcy5icmVha3BvaW50c0FjdGl2
YXRlZF8pIHsKLSAgICAgICAgdGhpcy5yZXN1bWVFeGVjdXRpb24oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEZvcmNlIHNjcmlwdHMgcGFuZWwgdG8gYmUgc2hvd24gZmlyc3Qu
Ci0gICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0czsKLQotICAgIHZhciBib2R5ID0gbXNnLmdldEJvZHkoKTsKLQotICAgIHZhciBsaW5lID0g
ZGV2dG9vbHMuRGVidWdnZXJBZ2VudC52OFRvV3dlYmtpdExpbmVOdW1iZXJfKGJvZHkuc291cmNl
TGluZSk7Ci0gICAgdGhpcy5yZXF1ZXN0QmFja3RyYWNlXygpOwotfTsKLQotCi0vKioKLSAqIEBw
YXJhbSB7ZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlfSBtc2cKLSAqLwotZGV2dG9vbHMuRGVidWdn
ZXJBZ2VudC5wcm90b3R5cGUuaGFuZGxlRXhjZXB0aW9uRXZlbnRfID0gZnVuY3Rpb24obXNnKQot
ewotICAgIHZhciBib2R5ID0gbXNnLmdldEJvZHkoKTsKLSAgICAvLyBObyBzY3JpcHQgZmllbGQg
aW4gdGhlIGJvZHkgbWVhbnMgdGhhdCB2OCBmYWlsZWQgdG8gcGFyc2UgdGhlIHNjcmlwdC4gV2UK
LSAgICAvLyByZXN1bWUgZXhlY3V0aW9uIG9uIHBhcnNlciBlcnJvcnMgYXV0b21hdGljYWxseS4K
LSAgICBpZiAodGhpcy5wYXVzZU9uRXhjZXB0aW9uc18gJiYgYm9keS5zY3JpcHQpIHsKLSAgICAg
ICAgdmFyIGxpbmUgPSBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnY4VG9Xd2Via2l0TGluZU51bWJl
cl8oYm9keS5zb3VyY2VMaW5lKTsKLSAgICAgICAgdGhpcy5jcmVhdGVFeGNlcHRpb25NZXNzYWdl
Xyhib2R5LnNjcmlwdC5uYW1lLCBsaW5lLCBib2R5LmV4Y2VwdGlvbi50ZXh0KTsKLSAgICAgICAg
dGhpcy5yZXF1ZXN0QmFja3RyYWNlXygpOwotCi0gICAgICAgIC8vIEZvcmNlIHNjcmlwdHMgcGFu
ZWwgdG8gYmUgc2hvd24uCi0gICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwgPSBXZWJJ
bnNwZWN0b3IucGFuZWxzLnNjcmlwdHM7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRoaXMucmVzdW1l
RXhlY3V0aW9uKCk7Ci19OwotCi0KLS8qKgotICogQHBhcmFtIHtkZXZ0b29scy5EZWJ1Z2dlck1l
c3NhZ2V9IG1zZwotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5oYW5kbGVT
Y3JpcHRzUmVzcG9uc2VfID0gZnVuY3Rpb24obXNnKQotewotICAgIHZhciBzY3JpcHRzID0gbXNn
LmdldEJvZHkoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNbaV07Ci0KLSAgICAgICAgLy8gU2tpcCBz
Y3JpcHRzIGZyb20gb3RoZXIgdGFicy4KLSAgICAgICAgaWYgKCF0aGlzLmlzU2NyaXB0RnJvbUlu
c3BlY3RlZENvbnRleHRfKHNjcmlwdCwgbXNnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIC8vIFdlIG1heSBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgdGhlIGluZm8gaW4gYW4gYWZ0
ZXJDb21waWxlIGV2ZW50LgotICAgICAgICBpZiAoc2NyaXB0LmlkIGluIHRoaXMucGFyc2VkU2Ny
aXB0c18pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdGhpcy5hZGRTY3JpcHRJbmZv
XyhzY3JpcHQsIG1zZyk7Ci0gICAgfQotfTsKLQotCi0vKioKLSAqIEBwYXJhbSB7T2JqZWN0fSBz
Y3JpcHQgSnNvbiBvYmplY3QgcmVwcmVzZW50aW5nIHNjcmlwdC4KLSAqIEBwYXJhbSB7ZGV2dG9v
bHMuRGVidWdnZXJNZXNzYWdlfSBtc2cgRGVidWdnZXIgcmVzcG9uc2UuCi0gKi8KLWRldnRvb2xz
LkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmlzU2NyaXB0RnJvbUluc3BlY3RlZENvbnRleHRfID0g
ZnVuY3Rpb24oc2NyaXB0LCBtc2cpCi17Ci0gICAgaWYgKCFzY3JpcHQuY29udGV4dCkgewotICAg
ICAgICAvLyBBbHdheXMgaWdub3JlIHNjcmlwdHMgZnJvbSB0aGUgdXRpbGl0eSBjb250ZXh0Lgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhciBjb250ZXh0ID0gbXNnLmxvb2t1
cChzY3JpcHQuY29udGV4dC5yZWYpOwotICAgIHZhciBzY3JpcHRDb250ZXh0SWQgPSBjb250ZXh0
LmRhdGE7Ci0gICAgaWYgKHR5cGVvZiBzY3JpcHRDb250ZXh0SWQgPT09ICJ1bmRlZmluZWQiKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFsd2F5cyBpZ25vcmUgc2NyaXB0cyBmcm9tIHRoZSB1
dGlsaXR5IGNvbnRleHQuCi0gICAgaWYgKHRoaXMuY29udGV4dElkXyA9PT0gbnVsbCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gRmluZCB0aGUgaWQgZnJvbSBjb250ZXh0IGRhdGEuIFRo
ZSBjb250ZXh0IGRhdGEgaGFzIHRoZSBmb3JtYXQgInR5cGUsaWQiLgotICAgIHZhciBjb21tYSA9
IGNvbnRleHQuZGF0YS5pbmRleE9mKCIsIik7Ci0gICAgaWYgKGNvbW1hIDwgMCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoY29udGV4dC5kYXRhLnN1YnN0cmluZyhjb21tYSAr
IDEpID09IHRoaXMuY29udGV4dElkXyk7Ci19OwotCi0KLS8qKgotICogQHBhcmFtIHtkZXZ0b29s
cy5EZWJ1Z2dlck1lc3NhZ2V9IG1zZwotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3Rv
dHlwZS5oYW5kbGVTZXRCcmVha3BvaW50UmVzcG9uc2VfID0gZnVuY3Rpb24obXNnKQotewotICAg
IHZhciByZXF1ZXN0U2VxID0gbXNnLmdldFJlcXVlc3RTZXEoKTsKLSAgICB2YXIgYnJlYWtwb2lu
dEluZm8gPSB0aGlzLnJlcXVlc3ROdW1iZXJUb0JyZWFrcG9pbnRJbmZvX1tyZXF1ZXN0U2VxXTsK
LSAgICBpZiAoIWJyZWFrcG9pbnRJbmZvKSB7Ci0gICAgICAgIC8vIFRPRE8oeXVyeXMpOiBoYW5k
bGUgdGhpcyBjYXNlCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVsZXRlIHRoaXMucmVx
dWVzdE51bWJlclRvQnJlYWtwb2ludEluZm9fW3JlcXVlc3RTZXFdOwotICAgIGlmICghbXNnLmlz
U3VjY2VzcygpKSB7Ci0gICAgICAgIC8vIFRPRE8oeXVyeXMpOiBoYW5kbGUgdGhpcyBjYXNlCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmFyIGlkSW5WOCA9IG1zZy5nZXRCb2R5KCkuYnJl
YWtwb2ludDsKLSAgICBicmVha3BvaW50SW5mby5zZXRWOElkKGlkSW5WOCk7Ci0KLSAgICBpZiAo
YnJlYWtwb2ludEluZm8uaXNSZW1vdmVkKCkpCi0gICAgICAgIHRoaXMucmVxdWVzdENsZWFyQnJl
YWtwb2ludF8oaWRJblY4KTsKLX07Ci0KLQotLyoqCi0gKiBAcGFyYW0ge2RldnRvb2xzLkRlYnVn
Z2VyTWVzc2FnZX0gbXNnCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmhh
bmRsZUFmdGVyQ29tcGlsZUV2ZW50XyA9IGZ1bmN0aW9uKG1zZykKLXsKLSAgICBpZiAoIXRoaXMu
Y29udGV4dElkXykgewotICAgICAgICAvLyBJZ25vcmUgc2NyaXB0cyBkZWx0YSBpZiBtYWluIHJl
cXVlc3QgaGFzIG5vdCBiZWVuIGlzc3VlZCB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgdmFyIHNjcmlwdCA9IG1zZy5nZXRCb2R5KCkuc2NyaXB0OwotCi0gICAgLy8gSWdub3JlIHNj
cmlwdHMgZnJvbSBvdGhlciB0YWJzLgotICAgIGlmICghdGhpcy5pc1NjcmlwdEZyb21JbnNwZWN0
ZWRDb250ZXh0XyhzY3JpcHQsIG1zZykpCi0gICAgICAgIHJldHVybjsKLSAgICB0aGlzLmFkZFNj
cmlwdEluZm9fKHNjcmlwdCwgbXNnKTsKLX07Ci0KLQotLyoqCi0gKiBBZGRzIHRoZSBzY3JpcHQg
aW5mbyB0byB0aGUgbG9jYWwgY2FjaGUuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgc2Ny
aXB0Ci0gKiBpcyBub3QgaW4gdGhlIGNhY2hlIHlldC4KLSAqIEBwYXJhbSB7T2JqZWN0fSBzY3Jp
cHQgU2NyaXB0IGpzb24gb2JqZWN0IGZyb20gdGhlIGRlYnVnZ2VyIG1lc3NhZ2UuCi0gKiBAcGFy
YW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnIERlYnVnZ2VyIG1lc3NhZ2UgY29udGFp
bmluZyB0aGUgc2NyaXB0Ci0gKiAgICAgZGF0YS4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2Vu
dC5wcm90b3R5cGUuYWRkU2NyaXB0SW5mb18gPSBmdW5jdGlvbihzY3JpcHQsIG1zZykKLXsKLSAg
ICB2YXIgY29udGV4dCA9IG1zZy5sb29rdXAoc2NyaXB0LmNvbnRleHQucmVmKTsKLSAgICAvLyBG
aW5kIHRoZSB0eXBlIGZyb20gY29udGV4dCBkYXRhLiBUaGUgY29udGV4dCBkYXRhIGhhcyB0aGUg
Zm9ybWF0Ci0gICAgLy8gInR5cGUsaWQiLgotICAgIHZhciBjb21tYSA9IGNvbnRleHQuZGF0YS5p
bmRleE9mKCIsIik7Ci0gICAgaWYgKGNvbW1hIDwgMCkKLSAgICAgICAgcmV0dXJuOwotICAgIHZh
ciBjb250ZXh0VHlwZSA9IGNvbnRleHQuZGF0YS5zdWJzdHJpbmcoMCwgY29tbWEpOwotICAgIHZh
ciBpbmZvID0gbmV3IGRldnRvb2xzLlNjcmlwdEluZm8oc2NyaXB0LmlkLCBzY3JpcHQubmFtZSwg
c2NyaXB0LmxpbmVPZmZzZXQsIGNvbnRleHRUeXBlKTsKLSAgICB0aGlzLnBhcnNlZFNjcmlwdHNf
W3NjcmlwdC5pZF0gPSBpbmZvOwotICAgIGlmICh0aGlzLnNjcmlwdHNQYW5lbEluaXRpYWxpemVk
XykgewotICAgICAgICAvLyBPbmx5IHJlcG9ydCBzY3JpcHQgYXMgcGFyc2VkIGFmdGVyIHNjcmlw
dHMgcGFuZWwgaGFzIGJlZW4gc2hvd24uCi0gICAgICAgIFdlYkluc3BlY3Rvci5wYXJzZWRTY3Jp
cHRTb3VyY2Uoc2NyaXB0LmlkLCBzY3JpcHQubmFtZSwgc2NyaXB0LnNvdXJjZSwgc2NyaXB0Lmxp
bmVPZmZzZXQgKyAxLCBpbmZvLndvcmxkVHlwZSgpKTsKLSAgICAgICAgdGhpcy5yZXN0b3JlQnJl
YWtwb2ludHNfKHNjcmlwdC5pZCwgc2NyaXB0Lm5hbWUpOwotICAgIH0KLX07Ci0KLQotLyoqCi0g
KiBAcGFyYW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnCi0gKi8KLWRldnRvb2xzLkRl
YnVnZ2VyQWdlbnQucHJvdG90eXBlLmhhbmRsZUNsZWFyQnJlYWtwb2ludFJlc3BvbnNlXyA9IGZ1
bmN0aW9uKG1zZykKLXsKLSAgICAvLyBEbyBub3RoaW5nLgotfTsKLQotCi0vKioKLSAqIEhhbmRs
ZXMgcmVzcG9uc2UgdG8gImJhY2t0cmFjZSIgY29tbWFuZC4KLSAqIEBwYXJhbSB7ZGV2dG9vbHMu
RGVidWdnZXJNZXNzYWdlfSBtc2cKLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5
cGUuaGFuZGxlQmFja3RyYWNlUmVzcG9uc2VfID0gZnVuY3Rpb24obXNnKQotewotICAgIGlmICh0
aGlzLndhaXRpbmdGb3JJbml0aWFsU2NyaXB0c1Jlc3BvbnNlXykKLSAgICAgICAgdGhpcy5wZW5k
aW5nQmFja3RyYWNlUmVzcG9uc2VIYW5kbGVyXyA9IHRoaXMuZG9IYW5kbGVCYWNrdHJhY2VSZXNw
b25zZV8uYmluZCh0aGlzLCBtc2cpOwotICAgIGVsc2UKLSAgICAgICAgdGhpcy5kb0hhbmRsZUJh
Y2t0cmFjZVJlc3BvbnNlXyhtc2cpOwotfTsKLQotCi0vKioKLSAqIEBwYXJhbSB7ZGV2dG9vbHMu
RGVidWdnZXJNZXNzYWdlfSBtc2cKLSAqLwotZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5
cGUuZG9IYW5kbGVCYWNrdHJhY2VSZXNwb25zZV8gPSBmdW5jdGlvbihtc2cpCi17Ci0gICAgdGhp
cy51cGRhdGVDYWxsRnJhbWVzRnJvbUJhY2t0cmFjZVJlc3BvbnNlXyhtc2cpOwotICAgIFdlYklu
c3BlY3Rvci5wYXVzZWRTY3JpcHQodGhpcy5jYWxsRnJhbWVzXyk7Ci0gICAgdGhpcy5zaG93UGVu
ZGluZ0V4Y2VwdGlvbk1lc3NhZ2VfKCk7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5n
VG9Gcm9udCgpOwotfTsKLQotCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS51cGRh
dGVDYWxsRnJhbWVzRnJvbUJhY2t0cmFjZVJlc3BvbnNlXyA9IGZ1bmN0aW9uKG1zZykKLXsKLSAg
ICB2YXIgZnJhbWVzID0gbXNnLmdldEJvZHkoKS5mcmFtZXM7Ci0gICAgdGhpcy5jYWxsRnJhbWVz
XyA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgIGZyYW1lcy5sZW5ndGg7ICsraSkKLSAg
ICAgICAgdGhpcy5jYWxsRnJhbWVzXy5wdXNoKHRoaXMuZm9ybWF0Q2FsbEZyYW1lXyhmcmFtZXNb
aV0pKTsKLSAgICByZXR1cm4gdGhpcy5jYWxsRnJhbWVzXzsKLX07Ci0KLQotLyoqCi0gKiBFdmFs
dWF0ZXMgY29kZSBvbiBnaXZlbiBjYWxsZnJhbWUuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdl
bnQucHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJhbWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwg
Y29kZSwgY2FsbGJhY2spCi17Ci0gICAgdmFyIGNhbGxGcmFtZSA9IHRoaXMuY2FsbEZyYW1lc19b
Y2FsbEZyYW1lSWRdOwotICAgIGNhbGxGcmFtZS5ldmFsdWF0ZV8oY29kZSwgY2FsbGJhY2spOwot
fTsKLQotCi0vKioKLSAqIEhhbmRsZXMgcmVzcG9uc2UgdG8gYSBjb21tYW5kIGJ5IGludm9raW5n
IGl0cyBjYWxsYmFjayAoaWYgYW55KS4KLSAqIEBwYXJhbSB7ZGV2dG9vbHMuRGVidWdnZXJNZXNz
YWdlfSBtc2cKLSAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgYSBjYWxsYmFjayBmb3IgdGhl
IGdpdmVuIG1lc3NhZ2Ugd2FzIGZvdW5kIGFuZAotICogICAgIGV4Y3V0ZWQuCi0gKi8KLWRldnRv
b2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmludm9rZUNhbGxiYWNrRm9yUmVzcG9uc2VfID0g
ZnVuY3Rpb24obXNnKQotewotICAgIHZhciBjYWxsYmFjayA9IHRoaXMucmVxdWVzdFNlcVRvQ2Fs
bGJhY2tfW21zZy5nZXRSZXF1ZXN0U2VxKCldOwotICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAg
ICAgLy8gSXQgbWF5IGhhcHBlbmQgaWYgcmVzZXQgd2FzIGNhbGxlZC4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBkZWxldGUgdGhpcy5yZXF1ZXN0U2VxVG9DYWxsYmFja19bbXNn
LmdldFJlcXVlc3RTZXEoKV07Ci0gICAgY2FsbGJhY2sobXNnKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX07Ci0KLQotLyoqCi0gKiBAcGFyYW0ge09iamVjdH0gc3RhY2tGcmFtZSBGcmFtZSBqc29uIG9i
amVjdCBmcm9tICJiYWNrdHJhY2UiIHJlc3BvbnNlLgotICogQHJldHVybiB7IWRldnRvb2xzLkNh
bGxGcmFtZX0gT2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUKLSAq
ICAgICBjYWxsIGZyYW1lIGluIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgU2NyaXB0c1BhbmVsIGFu
ZCBpdHMgcGFuZXMuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmZvcm1h
dENhbGxGcmFtZV8gPSBmdW5jdGlvbihzdGFja0ZyYW1lKQotewotICAgIHZhciBmdW5jID0gc3Rh
Y2tGcmFtZS5mdW5jOwotICAgIHZhciBzb3VyY2VJZCA9IGZ1bmMuc2NyaXB0SWQ7Ci0KLSAgICAv
LyBBZGQgc2VydmljZSBzY3JpcHQgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gICAgdmFyIGV4aXN0
aW5nU2NyaXB0ID0gdGhpcy5wYXJzZWRTY3JpcHRzX1tzb3VyY2VJZF07Ci0gICAgaWYgKCFleGlz
dGluZ1NjcmlwdCkgewotICAgICAgICB0aGlzLnBhcnNlZFNjcmlwdHNfW3NvdXJjZUlkXSA9IG5l
dyBkZXZ0b29scy5TY3JpcHRJbmZvKHNvdXJjZUlkLCBudWxsIC8qIG5hbWUgKi8sIDAgLyogbGlu
ZSAqLywgInVua25vd24iIC8qIHR5cGUgKi8sIHRydWUgLyogdW5yZXNvbHZlZCAqLyk7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5wYXJzZWRTY3JpcHRTb3VyY2Uoc291cmNlSWQsIG51bGwsIG51bGws
IDAsIFdlYkluc3BlY3Rvci5TY3JpcHQuV29ybGRUeXBlLk1BSU5fV09STEQpOwotICAgIH0KLQot
ICAgIHZhciBmdW5jTmFtZSA9IGZ1bmMubmFtZSB8fCBmdW5jLmluZmVycmVkTmFtZTsKLSAgICB2
YXIgbGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3ZWJraXRMaW5lTnVtYmVyXyhz
dGFja0ZyYW1lLmxpbmUpOwotCi0gICAgLy8gQWRkIGJhc2ljIHNjb3BlIGNoYWluIGluZm8gd2l0
aCBzY29wZSB2YXJpYWJsZXMuCi0gICAgdmFyIHNjb3BlQ2hhaW4gPSBbXTsKLSAgICB2YXIgU2Nv
cGVUeXBlID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5TY29wZVR5cGU7Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdGFja0ZyYW1lLnNjb3Blcy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIg
c2NvcGUgPSBzdGFja0ZyYW1lLnNjb3Blc1tpXTsKLSAgICAgICAgc2NvcGUuZnJhbWVOdW1iZXIg
PSBzdGFja0ZyYW1lLmluZGV4OwotICAgICAgICB2YXIgc2NvcGVPYmplY3RQcm94eSA9IG5ldyBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkoMCwgc2NvcGUsIFtdLCAiIiwgdHJ1ZSk7Ci0gICAgICAg
IHNjb3BlT2JqZWN0UHJveHkuaXNTY29wZSA9IHRydWU7Ci0gICAgICAgIHN3aXRjaChzY29wZS50
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5HbG9iYWw6Ci0gICAgICAgICAgICAg
ICAgc2NvcGVPYmplY3RQcm94eS5pc0RvY3VtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOgotICAgICAgICAgICAgICAg
IHNjb3BlT2JqZWN0UHJveHkuaXNMb2NhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2NvcGVP
YmplY3RQcm94eS50aGlzT2JqZWN0ID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmpl
Y3RQcm94eV8oc3RhY2tGcmFtZS5yZWNlaXZlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5XaXRoOgotICAgICAgICAgICAgLy8gQ2F0Y2ggc2Nv
cGUgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgd2l0aCBzY29wZSBieSBXZWJLaXQgc28gd2UKLSAg
ICAgICAgICAgIC8vIGFsc28gdHJlYXQgaXQgdGhpcyB3YXkuCi0gICAgICAgICAgICBjYXNlIFNj
b3BlVHlwZS5DYXRjaDoKLSAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzV2l0aEJs
b2NrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2Nv
cGVUeXBlLkNsb3N1cmU6Ci0gICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0Nsb3N1
cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNj
b3BlQ2hhaW4ucHVzaChzY29wZU9iamVjdFByb3h5KTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBk
ZXZ0b29scy5DYWxsRnJhbWUoc3RhY2tGcmFtZS5pbmRleCwgImZ1bmN0aW9uIiwgZnVuY05hbWUs
IHNvdXJjZUlkLCBsaW5lLCBzY29wZUNoYWluKTsKLX07Ci0KLQotLyoqCi0gKiBSZXN0b3JlcyBi
cmVha3BvaW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIFVSTCBvZiBhIG5ld2x5IHBhcnNlZCBzY3Jp
cHQuCi0gKiBAcGFyYW0ge251bWJlcn0gc291cmNlSUQgVGhlIGlkIG9mIHRoZSBzY3JpcHQuCi0g
KiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0VXJsIFVSTCBvZiB0aGUgc2NyaXB0LgotICovCi1kZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXN0b3JlQnJlYWtwb2ludHNfID0gZnVuY3Rp
b24oc291cmNlSUQsIHNjcmlwdFVybCkKLXsKLSAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnVy
bFRvQnJlYWtwb2ludHNfW3NjcmlwdFVybF07Ci0gICAgZm9yICh2YXIgbGluZSBpbiBicmVha3Bv
aW50cykgewotICAgICAgICBpZiAocGFyc2VJbnQobGluZSkgPT0gbGluZSkgewotICAgICAgICAg
ICAgdmFyIHY4TGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3ZWJraXRMaW5lTnVt
YmVyXyhwYXJzZUludChsaW5lKSk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucmVzdG9yZWRC
cmVha3BvaW50KHNvdXJjZUlELCBzY3JpcHRVcmwsIHY4TGluZSwgYnJlYWtwb2ludHNbbGluZV0u
ZW5hYmxlZCgpLCBicmVha3BvaW50c1tsaW5lXS5jb25kaXRpb24oKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19OwotCi0KLS8qKgotICogQ29sbGVjdHMgcHJvcGVydGllcyBmb3IgYW4gb2JqZWN0IGZy
b20gdGhlIGRlYnVnZ2VyIHJlc3BvbnNlLgotICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBBbiBv
YmplY3QgZnJvbSB0aGUgZGVidWdnZXIgcHJvdG9jb2wgcmVzcG9uc2UuCi0gKiBAcGFyYW0ge0Fy
cmF5LjxXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlQcm94eT59IHJlc3VsdCBBbiBhcnJheSB0
byBwdXQgdGhlCi0gKiAgICAgcHJvcGVydGllcyBpbnRvLgotICogQHBhcmFtIHtib29sZWFufSBu
b0ludHJpbnNpYyBXaGV0aGVyIGludHJpbnNpYyBwcm9wZXJ0aWVzIHNob3VsZCBiZQotICogICAg
IGluY2x1ZGVkLgotICovCi1kZXZ0b29scy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9iamVjdFByb3Bl
cnRpZXNfID0gZnVuY3Rpb24ob2JqZWN0LCByZXN1bHQsIG5vSW50cmluc2ljKQotewotICAgIGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvcGVydGllc1RvUHJveGllc18ob2JqZWN0LnByb3BlcnRp
ZXMsIHJlc3VsdCk7Ci0gICAgaWYgKG5vSW50cmluc2ljKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5UHJveHkoIl9fcHJv
dG9fXyIsIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuZm9ybWF0T2JqZWN0UHJveHlfKG9iamVjdC5w
cm90b09iamVjdCkpKTsKLSAgICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBy
b3BlcnR5UHJveHkoImNvbnN0cnVjdG9yIiwgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRP
YmplY3RQcm94eV8ob2JqZWN0LmNvbnN0cnVjdG9yRnVuY3Rpb24pKSk7Ci0gICAgLy8gRG9uJ3Qg
YWRkICdwcm90b3R5cGUnIHByb3BlcnR5IHNpbmNlIGl0IGlzIG9uZSBvZiB0aGUgcmVndWFsYXIg
cHJvcGVydGllcy4KLX07Ci0KLQotLyoqCi0gKiBGb3IgZWFjaCBwcm9wZXJ0eSBpbiAicHJvcGVy
dGllcyIgY3JlYXRlcyBpdHMgcHJveHkgcmVwcmVzZW50YXRpdmUuCi0gKiBAcGFyYW0ge0FycmF5
LjxPYmplY3Q+fSBwcm9wZXJ0aWVzIFJlY2VpdmVyIHByb3BlcnRpZXMgb3IgbG9jYWxzIGFycmF5
IGZyb20KLSAqICAgICAiYmFja3RyYWNlIiByZXNwb25zZS4KLSAqIEBwYXJhbSB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVByb3h5Pn0gUmVzdWx0cyBob2xkZXIuCi0gKi8KLWRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvcGVydGllc1RvUHJveGllc18gPSBmdW5jdGlvbihwcm9w
ZXJ0aWVzLCByZXN1bHQpCi17Ci0gICAgdmFyIG1hcCA9IHt9OwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgcHJvcGVydHkgPSBw
cm9wZXJ0aWVzW2ldOwotICAgICAgICB2YXIgbmFtZSA9IFN0cmluZyhwcm9wZXJ0eS5uYW1lKTsK
LSAgICAgICAgaWYgKG5hbWUgaW4gbWFwKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IG1hcFtuYW1lXSA9IHRydWU7Ci0gICAgICAgIHZhciB2YWx1ZSA9IGRldnRvb2xzLkRlYnVnZ2Vy
QWdlbnQuZm9ybWF0T2JqZWN0UHJveHlfKHByb3BlcnR5LnZhbHVlKTsKLSAgICAgICAgdmFyIHBy
b3BlcnR5UHJveHkgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5UHJveHkobmFtZSwg
dmFsdWUpOwotICAgICAgICByZXN1bHQucHVzaChwcm9wZXJ0eVByb3h5KTsKLSAgICB9Ci19Owot
Ci0KLS8qKgotICogQHBhcmFtIHtPYmplY3R9IHYgQW4gb2JqZWN0IHJlZmVyZW5jZSBmcm9tIHRo
ZSBkZWJ1Z2dlciByZXNwb25zZS4KLSAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSByZXByZXNlbnRh
dGlvbiBleHBlY3RlZCBieSBTY3JpcHRzUGFuZWwuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyQWdl
bnQuZm9ybWF0T2JqZWN0UHJveHlfID0gZnVuY3Rpb24odikKLXsKLSAgICB2YXIgZGVzY3JpcHRp
b247Ci0gICAgdmFyIGhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgaWYgKHYudHlwZSA9PT0gIm9i
amVjdCIpIHsKLSAgICAgICAgZGVzY3JpcHRpb24gPSB2LmNsYXNzTmFtZTsKLSAgICAgICAgaGFz
Q2hpbGRyZW4gPSB0cnVlOwotICAgIH0gZWxzZSBpZiAodi50eXBlID09PSAiZnVuY3Rpb24iKSB7
Ci0gICAgICAgIGlmICh2LnNvdXJjZSkKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdi5zb3Vy
Y2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gImZ1bmN0aW9uICIg
KyB2Lm5hbWUgKyAiKCkiOwotICAgICAgICBoYXNDaGlsZHJlbiA9IHRydWU7Ci0gICAgfSBlbHNl
IGlmICh2LnR5cGUgPT09ICJ1bmRlZmluZWQiKQotICAgICAgICBkZXNjcmlwdGlvbiA9ICJ1bmRl
ZmluZWQiOwotICAgIGVsc2UgaWYgKHYudHlwZSA9PT0gIm51bGwiKQotICAgICAgICBkZXNjcmlw
dGlvbiA9ICJudWxsIjsKLSAgICBlbHNlIGlmICh0eXBlb2Ygdi52YWx1ZSAhPT0gInVuZGVmaW5l
ZCIpIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCB0eXBlcyBiZWZv
cmUgY2hlY2tpbmcgdGhlIHZhbHVlLCBvdGhlcndpc2UKLSAgICAgICAgLy8gbnVsbC91bmRlZmlu
ZWQgbWF5IGhhdmUgYmxhbmsgdmFsdWUuCi0gICAgICAgIGRlc2NyaXB0aW9uID0gdi52YWx1ZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgZGVzY3JpcHRpb24gPSAiPHVucmVzb2x2ZWQgcmVmOiAiICsg
di5yZWYgKyAiLCB0eXBlOiAiICsgdi50eXBlICsgIj4iOwotCi0gICAgdmFyIHByb3h5ID0gbmV3
IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eSgwLCB2LCBbXSwgZGVzY3JpcHRpb24sIGhhc0NoaWxk
cmVuKTsKLSAgICBwcm94eS50eXBlID0gdi50eXBlOwotICAgIHByb3h5LmlzVjhSZWYgPSB0cnVl
OwotICAgIHJldHVybiBwcm94eTsKLX07Ci0KLQotLyoqCi0gKiBDb252ZXJ0cyBsaW5lIG51bWJl
ciBmcm9tIFdlYiBJbnNwZWN0b3IgVUkoMS1iYXNlZCkgdG8gdjgoMC1iYXNlZCkuCi0gKiBAcGFy
YW0ge251bWJlcn0gbGluZSBSZXNvdXJjZSBsaW5lIG51bWJlciBpbiBXZWIgSW5zcGVjdG9yIFVJ
LgotICogQHJldHVybiB7bnVtYmVyfSBUaGUgbGluZSBudW1iZXIgaW4gdjguCi0gKi8KLWRldnRv
b2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1iZXJfID0gZnVuY3Rpb24obGluZSkK
LXsKLSAgICByZXR1cm4gbGluZSAtIDE7Ci19OwotCi0KLS8qKgotICogQ29udmVydHMgbGluZSBu
dW1iZXIgZnJvbSB2OCgwLWJhc2VkKSB0byBXZWIgSW5zcGVjdG9yIFVJKDEtYmFzZWQpLgotICog
QHBhcmFtIHtudW1iZXJ9IGxpbmUgUmVzb3VyY2UgbGluZSBudW1iZXIgaW4gdjguCi0gKiBAcmV0
dXJuIHtudW1iZXJ9IFRoZSBsaW5lIG51bWJlciBpbiBXZWIgSW5zcGVjdG9yLgotICovCi1kZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnY4VG9Xd2Via2l0TGluZU51bWJlcl8gPSBmdW5jdGlvbihsaW5l
KQotewotICAgIHJldHVybiBsaW5lICsgMTsKLX07Ci0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJl
cn0gc2NyaXB0SWQgSWQgb2YgdGhlIHNjcmlwdC4KLSAqIEBwYXJhbSB7P3N0cmluZ30gdXJsIFNj
cmlwdCByZXNvdXJjZSBVUkwgaWYgYW55LgotICogQHBhcmFtIHtudW1iZXJ9IGxpbmVPZmZzZXQg
Rmlyc3QgbGluZSAwLWJhc2VkIG9mZnNldCBpbiB0aGUgY29udGFpbmluZwotICogICAgIGRvY3Vt
ZW50LgotICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHRUeXBlIFR5cGUgb2YgdGhlIHNjcmlwdCdz
IGNvbnRleHQ6Ci0gKiAgICAgInBhZ2UiIC0gcmVndWxhciBzY3JpcHQgZnJvbSBodG1sIHBhZ2UK
LSAqICAgICAiaW5qZWN0ZWQiIC0gZXh0ZW5zaW9uIGNvbnRlbnQgc2NyaXB0Ci0gKiBAcGFyYW0g
e2Jvb2x9IG9wdF9pc1VucmVzb2x2ZWQgSWYgdHJ1ZSwgc2NyaXB0IHdpbGwgbm90IGJlIHJlc29s
dmVkLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xzLlNjcmlwdEluZm8gPSBmdW5jdGlv
bihzY3JpcHRJZCwgdXJsLCBsaW5lT2Zmc2V0LCBjb250ZXh0VHlwZSwgb3B0X2lzVW5yZXNvbHZl
ZCkKLXsKLSAgICB0aGlzLnNjcmlwdElkXyA9IHNjcmlwdElkOwotICAgIHRoaXMubGluZU9mZnNl
dF8gPSBsaW5lT2Zmc2V0OwotICAgIHRoaXMuY29udGV4dFR5cGVfID0gY29udGV4dFR5cGU7Ci0g
ICAgdGhpcy51cmxfID0gdXJsOwotICAgIHRoaXMuaXNVbnJlc29sdmVkXyA9IG9wdF9pc1VucmVz
b2x2ZWQ7Ci0KLSAgICB0aGlzLmxpbmVUb0JyZWFrcG9pbnRJbmZvXyA9IHt9OwotfTsKLQotCi0v
KioKLSAqIEByZXR1cm4ge251bWJlcn0KLSAqLwotZGV2dG9vbHMuU2NyaXB0SW5mby5wcm90b3R5
cGUuZ2V0TGluZU9mZnNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy5saW5lT2Zm
c2V0XzsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtzdHJpbmd9Ci0gKi8KLWRldnRvb2xzLlNj
cmlwdEluZm8ucHJvdG90eXBlLmdldENvbnRleHRUeXBlID0gZnVuY3Rpb24oKQotewotICAgIHJl
dHVybiB0aGlzLmNvbnRleHRUeXBlXzsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHs/c3RyaW5n
fQotICovCi1kZXZ0b29scy5TY3JpcHRJbmZvLnByb3RvdHlwZS5nZXRVcmwgPSBmdW5jdGlvbigp
Ci17Ci0gICAgcmV0dXJuIHRoaXMudXJsXzsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHs/Ym9v
bH0KLSAqLwotZGV2dG9vbHMuU2NyaXB0SW5mby5wcm90b3R5cGUuaXNVbnJlc29sdmVkID0gZnVu
Y3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLmlzVW5yZXNvbHZlZF87Ci19OwotCi0KLWRldnRv
b2xzLlNjcmlwdEluZm8ucHJvdG90eXBlLndvcmxkVHlwZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBp
ZiAodGhpcy5jb250ZXh0VHlwZV8gPT09ICJpbmplY3RlZCIpCi0gICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuU2NyaXB0LldvcmxkVHlwZS5FWFRFTlNJT05TX1dPUkxEOwotICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuU2NyaXB0LldvcmxkVHlwZS5NQUlOX1dPUkxEOwotfTsKLQotCi0vKioKLSAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lIDAtYmFzZWQgbGluZSBudW1iZXIgaW4gdGhlIHNjcmlwdC4K
LSAqIEByZXR1cm4gez9kZXZ0b29scy5CcmVha3BvaW50SW5mb30gSW5mb3JtYXRpb24gb24gYSBi
cmVha3BvaW50IGF0IHRoZQotICogICAgIHNwZWNpZmllZCBsaW5lIGluIHRoZSBzY3JpcHQgb3Ig
dW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIGJyZWFrcG9pbnQgYXQKLSAqICAgICB0aGF0IGxpbmUu
Ci0gKi8KLWRldnRvb2xzLlNjcmlwdEluZm8ucHJvdG90eXBlLmdldEJyZWFrcG9pbnRJbmZvID0g
ZnVuY3Rpb24obGluZSkKLXsKLSAgICByZXR1cm4gdGhpcy5saW5lVG9CcmVha3BvaW50SW5mb19b
bGluZV07Ci19OwotCi0KLS8qKgotICogQWRkcyBicmVha3BvaW50IGluZm8gdG8gdGhlIHNjcmlw
dC4KLSAqIEBwYXJhbSB7ZGV2dG9vbHMuQnJlYWtwb2ludEluZm99IGJyZWFrcG9pbnQKLSAqLwot
ZGV2dG9vbHMuU2NyaXB0SW5mby5wcm90b3R5cGUuYWRkQnJlYWtwb2ludEluZm8gPSBmdW5jdGlv
bihicmVha3BvaW50KQotewotICAgIHRoaXMubGluZVRvQnJlYWtwb2ludEluZm9fW2JyZWFrcG9p
bnQuZ2V0TGluZSgpXSA9IGJyZWFrcG9pbnQ7Ci19OwotCi0KLS8qKgotICogQHBhcmFtIHtkZXZ0
b29scy5CcmVha3BvaW50SW5mb30gYnJlYWtwb2ludCBCcmVha3BvaW50IGluZm8gdG8gYmUgcmVt
b3ZlZC4KLSAqLwotZGV2dG9vbHMuU2NyaXB0SW5mby5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2lu
dEluZm8gPSBmdW5jdGlvbihicmVha3BvaW50KQotewotICAgIHZhciBsaW5lID0gYnJlYWtwb2lu
dC5nZXRMaW5lKCk7Ci0gICAgZGVsZXRlIHRoaXMubGluZVRvQnJlYWtwb2ludEluZm9fW2xpbmVd
OwotfTsKLQotCi0KLS8qKgotICogQHBhcmFtIHtudW1iZXJ9IGxpbmUgQnJlYWtwb2ludCAwLWJh
c2VkIGxpbmUgbnVtYmVyIGluIHRoZSBjb250YWluaW5nIHNjcmlwdC4KLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1kZXZ0b29scy5CcmVha3BvaW50SW5mbyA9IGZ1bmN0aW9uKGxpbmUsIGVuYWJsZWQs
IGNvbmRpdGlvbikKLXsKLSAgICB0aGlzLmxpbmVfID0gbGluZTsKLSAgICB0aGlzLmVuYWJsZWRf
ID0gZW5hYmxlZDsKLSAgICB0aGlzLmNvbmRpdGlvbl8gPSBjb25kaXRpb247Ci0gICAgdGhpcy52
OGlkXyA9IC0xOwotICAgIHRoaXMucmVtb3ZlZF8gPSBmYWxzZTsKLX07Ci0KLQotLyoqCi0gKiBA
cmV0dXJuIHtudW1iZXJ9Ci0gKi8KLWRldnRvb2xzLkJyZWFrcG9pbnRJbmZvLnByb3RvdHlwZS5n
ZXRMaW5lID0gZnVuY3Rpb24obikKLXsKLSAgICByZXR1cm4gdGhpcy5saW5lXzsKLX07Ci0KLQot
LyoqCi0gKiBAcmV0dXJuIHtudW1iZXJ9IFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoaXMgYnJlYWtw
b2ludCBpbiB0aGUgdjggZGVidWdnZXIuCi0gKi8KLWRldnRvb2xzLkJyZWFrcG9pbnRJbmZvLnBy
b3RvdHlwZS5nZXRWOElkID0gZnVuY3Rpb24obikKLXsKLSAgICByZXR1cm4gdGhpcy52OGlkXzsK
LX07Ci0KLQotLyoqCi0gKiBTZXRzIGlkIG9mIHRoaXMgYnJlYWtwb2ludCBpbiB0aGUgdjggZGVi
dWdnZXIuCi0gKiBAcGFyYW0ge251bWJlcn0gaWQKLSAqLwotZGV2dG9vbHMuQnJlYWtwb2ludElu
Zm8ucHJvdG90eXBlLnNldFY4SWQgPSBmdW5jdGlvbihpZCkKLXsKLSAgICB0aGlzLnY4aWRfID0g
aWQ7Ci19OwotCi0KLS8qKgotICogTWFya3MgdGhpcyBicmVha3BvaW50IGFzIHJlbW92ZWQgZnJv
bSB0aGUgZnJvbnQtZW5kLgotICovCi1kZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUu
bWFya0FzUmVtb3ZlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLnJlbW92ZWRfID0gdHJ1ZTsK
LX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoaXMgYnJlYWtwb2lu
dCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlCi0gKiAgICAgZnJvbnQtZW5kLgotICovCi1kZXZ0
b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUuaXNSZW1vdmVkID0gZnVuY3Rpb24oKQotewot
ICAgIHJldHVybiB0aGlzLnJlbW92ZWRfOwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge2Jvb2xl
YW59IFdoZXRoZXIgdGhpcyBicmVha3BvaW50IGlzIGVuYWJsZWQuCi0gKi8KLWRldnRvb2xzLkJy
ZWFrcG9pbnRJbmZvLnByb3RvdHlwZS5lbmFibGVkID0gZnVuY3Rpb24oKQotewotICAgIHJldHVy
biB0aGlzLmVuYWJsZWRfOwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4gez9zdHJpbmd9IEJyZWFr
cG9pbnQgY29uZGl0aW9uLgotICovCi1kZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUu
Y29uZGl0aW9uID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbl87Ci19
OwotCi0KLS8qKgotICogQ2FsbCBzdGFjayBmcmFtZSBkYXRhLgotICogQHBhcmFtIHtzdHJpbmd9
IGlkIENhbGxGcmFtZSBpZC4KLSAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIENhbGxGcmFtZSB0eXBl
LgotICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSBDYWxsRnJhbWUgdHlwZS4KLSAqIEBw
YXJhbSB7c3RyaW5nfSBzb3VyY2VJRCBTb3VyY2UgaWQuCi0gKiBAcGFyYW0ge251bWJlcn0gbGlu
ZSBTb3VyY2UgbGluZS4KLSAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHNjb3BlQ2hhaW4gQXJy
YXkgb2Ygc2NvcGVkIG9iamVjdHMuCi0gKiBAY29uc3RydW5jdG9yCi0gKi8KLWRldnRvb2xzLkNh
bGxGcmFtZSA9IGZ1bmN0aW9uKGlkLCB0eXBlLCBmdW5jdGlvbk5hbWUsIHNvdXJjZUlELCBsaW5l
LCBzY29wZUNoYWluKQotewotICAgIHRoaXMuaWQgPSBpZDsKLSAgICB0aGlzLnR5cGUgPSB0eXBl
OwotICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lOwotICAgIHRoaXMuc291cmNl
SUQgPSBzb3VyY2VJRDsKLSAgICB0aGlzLmxpbmUgPSBsaW5lOwotICAgIHRoaXMuc2NvcGVDaGFp
biA9IHNjb3BlQ2hhaW47Ci19OwotCi0KLS8qKgotICogVGhpcyBtZXRob2QgaXNzdWVzIGFzeW5j
aHJvbm91cyBldmFsdWF0ZSByZXF1ZXN0LCByZXBvcnRzIHJlc3VsdCB0byB0aGUKLSAqIGNhbGxi
YWNrLgotICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gQW4gZXhwcmVzc2lvbiB0byBiZSBl
dmFsdWF0ZWQgaW4gdGhlIGNvbnRleHQgb2YKLSAqICAgICB0aGlzIGNhbGwgZnJhbWUuCi0gKiBA
cGFyYW0ge2Z1bmN0aW9uKE9iamVjdCk6dW5kZWZpbmVkfSBjYWxsYmFjayBDYWxsYmFjayB0byBy
ZXBvcnQgcmVzdWx0IHRvLgotICovCi1kZXZ0b29scy5DYWxsRnJhbWUucHJvdG90eXBlLmV2YWx1
YXRlXyA9IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNhbGxiYWNrKQotewotICAgIGRldnRvb2xzLnRv
b2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXF1ZXN0RXZhbHVhdGUoewotICAgICAgICAgICAgImV4
cHJlc3Npb24iOiBleHByZXNzaW9uLAotICAgICAgICAgICAgImZyYW1lIjogdGhpcy5pZCwKLSAg
ICAgICAgICAgICJnbG9iYWwiOiBmYWxzZSwKLSAgICAgICAgICAgICJkaXNhYmxlX2JyZWFrIjog
ZmFsc2UsCi0gICAgICAgICAgICAiY29tcGFjdEZvcm1hdCI6IHRydWUsCi0gICAgICAgICAgICAi
bWF4U3RyaW5nTGVuZ3RoIjogLTEKLSAgICAgICAgfSwKLSAgICAgICAgZnVuY3Rpb24ocmVzcG9u
c2UpIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICAgICAgICAgIGlmIChyZXNw
b25zZS5pc1N1Y2Nlc3MoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSBkZXZ0b29s
cy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9iamVjdFByb3h5XyhyZXNwb25zZS5nZXRCb2R5KCkpOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gcmVzcG9u
c2UuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5pc0V4Y2VwdGlvbiA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwotICAgICAg
ICB9KTsKLX07Ci0KLQotLyoqCi0gKiBKU09OIGJhc2VkIGNvbW1hbmRzIHNlbnQgdG8gdjggZGVi
dWdnZXIuCi0gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCBOYW1lIG9mIHRoZSBjb21tYW5kIHRv
IGV4ZWN1dGUuCi0gKiBAcGFyYW0ge09iamVjdH0gb3B0X2FyZ3VtZW50cyBDb21tYW5kLXNwZWNp
ZmljIGFyZ3VtZW50cyBtYXAuCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMuRGVidWdD
b21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgb3B0X2FyZ3VtZW50cykKLXsKLSAgICB0aGlzLmNv
bW1hbmRfID0gY29tbWFuZDsKLSAgICB0aGlzLnR5cGVfID0gInJlcXVlc3QiOwotICAgIHRoaXMu
c2VxXyA9ICsrZGV2dG9vbHMuRGVidWdDb21tYW5kLm5leHRTZXFfOwotICAgIGlmIChvcHRfYXJn
dW1lbnRzKQotICAgICAgICB0aGlzLmFyZ3VtZW50c18gPSBvcHRfYXJndW1lbnRzOwotfTsKLQot
Ci0vKioKLSAqIE5leHQgdW5pcXVlIG51bWJlciB0byBiZSB1c2VkIGFzIGRlYnVnZ2VyIHJlcXVl
c3Qgc2VxdWVuY2UgbnVtYmVyLgotICogQHR5cGUge251bWJlcn0KLSAqLwotZGV2dG9vbHMuRGVi
dWdDb21tYW5kLm5leHRTZXFfID0gMTsKLQotCi0vKioKLSAqIEByZXR1cm4ge251bWJlcn0KLSAq
LwotZGV2dG9vbHMuRGVidWdDb21tYW5kLnByb3RvdHlwZS5nZXRTZXF1ZW5jZU51bWJlciA9IGZ1
bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gdGhpcy5zZXFfOwotfTsKLQotCi0vKioKLSAqIEByZXR1
cm4ge3N0cmluZ30KLSAqLwotZGV2dG9vbHMuRGVidWdDb21tYW5kLnByb3RvdHlwZS50b0pTT05Q
cm90b2NvbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIganNvbiA9IHsKLSAgICAgICAgInNlcSI6
IHRoaXMuc2VxXywKLSAgICAgICAgInR5cGUiOiB0aGlzLnR5cGVfLAotICAgICAgICAiY29tbWFu
ZCI6IHRoaXMuY29tbWFuZF8KLSAgICB9Ci0gICAgaWYgKHRoaXMuYXJndW1lbnRzXykKLSAgICAg
ICAganNvbi5hcmd1bWVudHMgPSB0aGlzLmFyZ3VtZW50c187Ci0gICAgcmV0dXJuIEpTT04uc3Ry
aW5naWZ5KGpzb24pOwotfTsKLQotCi0vKioKLSAqIEpTT04gbWVzc2FnZXMgc2VudCBmcm9tIHY4
IGRlYnVnZ2VyLiBTZWUgcHJvdG9jb2wgZGVmaW5pdGlvbiBmb3IgbW9yZQotICogZGV0YWlsczog
aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L3dpa2kvRGVidWdnZXJQcm90b2NvbAotICogQHBh
cmFtIHtzdHJpbmd9IG1zZyBSYXcgcHJvdG9jb2wgcGFja2V0IGFzIEpTT04gc3RyaW5nLgotICog
QGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZSA9IGZ1bmN0aW9uKG1z
ZykKLXsKLSAgICB0aGlzLnBhY2tldF8gPSBKU09OLnBhcnNlKG1zZyk7Ci0gICAgdGhpcy5yZWZz
XyA9IFtdOwotICAgIGlmICh0aGlzLnBhY2tldF8ucmVmcykgewotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMucGFja2V0Xy5yZWZzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgdGhp
cy5yZWZzX1t0aGlzLnBhY2tldF8ucmVmc1tpXS5oYW5kbGVdID0gdGhpcy5wYWNrZXRfLnJlZnNb
aV07Ci0gICAgfQotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhY2tldCB0
eXBlLgotICovCi1kZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UucHJvdG90eXBlLmdldFR5cGUgPSBm
dW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIHRoaXMucGFja2V0Xy50eXBlOwotfTsKLQotCi0vKioK
LSAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBwYWNrZXQgZXZlbnQgaWYgdGhlIG1lc3NhZ2UgaXMg
YW4gZXZlbnQuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuZ2V0RXZl
bnQgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIHRoaXMucGFja2V0Xy5ldmVudDsKLX07Ci0K
LQotLyoqCi0gKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgcGFja2V0IGNvbW1hbmQgaWYgdGhlIG1l
c3NhZ2UgaXMgYSByZXNwb25zZSB0byBhCi0gKiAgICAgY29tbWFuZC4KLSAqLwotZGV2dG9vbHMu
RGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRDb21tYW5kID0gZnVuY3Rpb24oKQotewotICAg
IHJldHVybiB0aGlzLnBhY2tldF8uY29tbWFuZDsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtu
dW1iZXJ9IFRoZSBwYWNrZXQgcmVxdWVzdCBzZXF1ZW5jZS4KLSAqLwotZGV2dG9vbHMuRGVidWdn
ZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRSZXF1ZXN0U2VxID0gZnVuY3Rpb24oKQotewotICAgIHJl
dHVybiB0aGlzLnBhY2tldF8ucmVxdWVzdF9zZXE7Ci19OwotCi0KLS8qKgotICogQHJldHVybiB7
bnVtYmVyfSBXaGV0aGVyIHRoZSB2OCBpcyBydW5uaW5nIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHJl
cXVlc3QuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuaXNSdW5uaW5n
ID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLnBhY2tldF8ucnVubmluZyA/IHRydWUg
OiBmYWxzZTsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRlZC4KLSAqLwotZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlw
ZS5pc1N1Y2Nlc3MgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIHRoaXMucGFja2V0Xy5zdWNj
ZXNzID8gdHJ1ZSA6IGZhbHNlOwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge3N0cmluZ30KLSAq
LwotZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRNZXNzYWdlID0gZnVuY3Rp
b24oKQotewotICAgIHJldHVybiB0aGlzLnBhY2tldF8ubWVzc2FnZTsKLX07Ci0KLQotLyoqCi0g
KiBAcmV0dXJuIHtPYmplY3R9IFBhcnNlZCBtZXNzYWdlIGJvZHkganNvbi4KLSAqLwotZGV2dG9v
bHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRCb2R5ID0gZnVuY3Rpb24oKQotewotICAg
IHJldHVybiB0aGlzLnBhY2tldF8uYm9keTsKLX07Ci0KLQotLyoqCi0gKiBAcGFyYW0ge251bWJl
cn0gaGFuZGxlIE9iamVjdCBoYW5kbGUuCi0gKiBAcmV0dXJuIHs/T2JqZWN0fSBSZXR1cm5zIHRo
ZSBvYmplY3Qgd2l0aCB0aGUgaGFuZGxlIGlmIGl0IHdhcyBzZW50IGluIHRoaXMKLSAqICAgIG1l
c3NhZ2Uoc29tZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgaGFuZGxlcyBtYXkgYmUgbWlzc2luZyBp
biB0aGUgbWVzc2FnZSkuCi0gKi8KLWRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUu
bG9va3VwID0gZnVuY3Rpb24oaGFuZGxlKQotewotICAgIHJldHVybiB0aGlzLnJlZnNfW2hhbmRs
ZV07Ci19OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKaW5kZXggODUxYzkzNGVhYjlkOWU1
Mjc2YjY4MjViZWNiMDEzNTBhODJjMTc4My4uMDIyOWQyMjU1OTZlYTExNDM5YzdiOTJlMDk0MmJj
YTJmM2VmZDBjNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5q
cworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC02MiwyMSArNjIs
MTEgQEAgZGV2dG9vbHMuVG9vbHNBZ2VudCA9IGZ1bmN0aW9uKCkKIHsKICAgICBSZW1vdGVUb29s
c0FnZW50LmRpZERpc3BhdGNoT24gPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxi
YWNrOwogICAgIFJlbW90ZVRvb2xzQWdlbnQuZGlzcGF0Y2hPbkNsaWVudCA9IHRoaXMuZGlzcGF0
Y2hPbkNsaWVudF8uYmluZCh0aGlzKTsKLSAgICB0aGlzLmRlYnVnZ2VyQWdlbnRfID0gbmV3IGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQoKTsKICAgICB0aGlzLnByb2ZpbGVyQWdlbnRfID0gbmV3IGRl
dnRvb2xzLlByb2ZpbGVyQWdlbnQoKTsKIH07CiAKIAogLyoqCi0gKiBSZXNldHMgdG9vbHMgYWdl
bnQgdG8gaXRzIGluaXRpYWwgc3RhdGUuCi0gKi8KLWRldnRvb2xzLlRvb2xzQWdlbnQucHJvdG90
eXBlLnJlc2V0ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMuZGVidWdnZXJBZ2VudF8ucmVzZXQo
KTsKLX07Ci0KLQotLyoqCiAgKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IFNjcmlwdCBleHJlc3Np
b24gdG8gYmUgZXZhbHVhdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZQogICogICAgIGluc3BlY3Rl
ZCBwYWdlLgogICogQHBhcmFtIHtmdW5jdGlvbihPYmplY3R8c3RyaW5nLCBib29sZWFuKTp1bmRl
ZmluZWR9IG9wdF9jYWxsYmFjayBGdW5jdGlvbiB0bwpAQCAtODksMTUgKzc5LDYgQEAgZGV2dG9v
bHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZXZhbHVhdGVKYXZhU2NyaXB0ID0gZnVuY3Rpb24oc2Ny
aXB0LCBvcHRfY2FsbGJhY2sKIAogCiAvKioKLSAqIEByZXR1cm4ge2RldnRvb2xzLkRlYnVnZ2Vy
QWdlbnR9IERlYnVnZ2VyIGFnZW50IGluc3RhbmNlLgotICovCi1kZXZ0b29scy5Ub29sc0FnZW50
LnByb3RvdHlwZS5nZXREZWJ1Z2dlckFnZW50ID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0
aGlzLmRlYnVnZ2VyQWdlbnRfOwotfTsKLQotCi0vKioKICAqIEByZXR1cm4ge2RldnRvb2xzLlBy
b2ZpbGVyQWdlbnR9IFByb2ZpbGVyIGFnZW50IGluc3RhbmNlLgogICovCiBkZXZ0b29scy5Ub29s
c0FnZW50LnByb3RvdHlwZS5nZXRQcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQpAQCAtMTA2LDE2
ICs4Nyw2IEBAIGRldnRvb2xzLlRvb2xzQWdlbnQucHJvdG90eXBlLmdldFByb2ZpbGVyQWdlbnQg
PSBmdW5jdGlvbigpCiB9OwogCiAKLShmdW5jdGlvbiAoKSB7Ci12YXIgb3JpZyA9IFdlYkluc3Bl
Y3Rvci5yZXNldDsKLVdlYkluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0
b29scy50b29scy5yZXNldCgpOwotICAgIG9yaWcuY2FsbCh0aGlzKTsKLX07Ci19KSgpOwotCi0K
IC8qKgogICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgU2VyaWFsaXplZCBjYWxsIHRvIGJlIGRp
c3BhdGNoZWQgb24gV2ViSW5zcGVjdG9yLgogICogQHByaXZhdGUKQEAgLTE2NSw3ICsxMzYsNiBA
QCB2YXIgb2xkTG9hZGVkID0gV2ViSW5zcGVjdG9yLmxvYWRlZDsKIFdlYkluc3BlY3Rvci5sb2Fk
ZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgZGV2dG9vbHMudG9vbHMgPSBuZXcgZGV2dG9vbHMuVG9v
bHNBZ2VudCgpOwotICAgIGRldnRvb2xzLnRvb2xzLnJlc2V0KCk7CiAKICAgICBQcmVmZXJlbmNl
cy5pZ25vcmVXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgUHJlZmVyZW5jZXMuc2FtcGxpbmdDUFVQ
cm9maWxlciA9IHRydWU7CkBAIC0xOTcsNzYgKzE2Nyw2IEBAIGRldnRvb2xzLmRvbUNvbnRlbnRM
b2FkZWQgPSBmdW5jdGlvbigpCiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50
TG9hZGVkIiwgZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCwgZmFsc2UpOwogCiAKLWlmICghd2lu
ZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7Ci0KLShmdW5jdGlvbigpCi17Ci0gICAg
dmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5zaG93Owot
ICAgIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnNob3cgPSAgZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLmluaXRV
SSgpOwotICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi52aXNpYmxlID0gZmFsc2U7Ci0g
ICAgICAgIG9sZFNob3cuY2FsbCh0aGlzKTsKLSAgICB9OwotfSkoKTsKLQotCi0oZnVuY3Rpb24g
KCkgewotdmFyIG9yaWcgPSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVy
dGllczsKLUluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5nZXRQcm9wZXJ0aWVzID0gZnVu
Y3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZXZpYXRlLCBjYWxs
YmFjaykKLXsKLSAgICBpZiAob2JqZWN0UHJveHkuaXNTY29wZSkKLSAgICAgICAgZGV2dG9vbHMu
dG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVTY29wZShvYmplY3RQcm94eS5vYmplY3RJ
ZCwgY2FsbGJhY2spOwotICAgIGVsc2UgaWYgKG9iamVjdFByb3h5LmlzVjhSZWYpCi0gICAgICAg
IGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlQ2hpbGRyZW4ob2JqZWN0
UHJveHkub2JqZWN0SWQsIGNhbGxiYWNrLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBvcmln
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQotewot
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmV2YWx1YXRlSW5DYWxsRnJhbWUgPSBmdW5j
dGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3JvdXAsIGNhbGxiYWNrKQotewotICAgIC8v
VE9ETyhwZmVsZG1hbik6IHJlbW92ZSBvbmNlIDQ5MDg0IGlzIHJvbGxlZC4KLSAgICBpZiAoIWNh
bGxiYWNrKQotICAgICAgICBjYWxsYmFjayA9IG9iamVjdEdyb3VwOwotICAgIGRldnRvb2xzLnRv
b2xzLmdldERlYnVnZ2VyQWdlbnQoKS5ldmFsdWF0ZUluQ2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBj
b2RlLCBjYWxsYmFjayk7Ci19OwotfSkoKTsKLQotCi0oZnVuY3Rpb24oKQotewotdmFyIG9yaWcg
PSBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7Ci1JbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihleHByZXNz
aW9uU3RyaW5nLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFtZUlkLCBy
ZXBvcnRDb21wbGV0aW9ucykKLXsKLSAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09PSAibnVt
YmVyIikKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVD
b21wbGV0aW9uc09uRnJhbWUoZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJlcG9ydENv
bXBsZXRpb25zKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcmlnLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7Ci19OwotfSkoKTsKLQotLy8gSGlnaGxpZ2h0IGV4dGVuc2lvbiBjb250ZW50IHNj
cmlwdHMgaW4gdGhlIHNjcmlwdHMgbGlzdC4KLShmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIG9yaWdp
bmFsID0gV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2FkZFNjcmlwdFRvRmls
ZXNNZW51OwotICAgIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9hZGRTY3Jp
cHRUb0ZpbGVzTWVudSA9IGZ1bmN0aW9uKHNjcmlwdCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1
bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB2YXIgZGVidWdn
ZXJBZ2VudCA9IGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKTsKLSAgICAgICAgdmFy
IHR5cGUgPSBkZWJ1Z2dlckFnZW50LmdldFNjcmlwdENvbnRleHRUeXBlKHNjcmlwdC5zb3VyY2VJ
RCk7Ci0gICAgICAgIHZhciBvcHRpb24gPSBzY3JpcHQuZmlsZXNTZWxlY3RPcHRpb247Ci0gICAg
ICAgIGlmICh0eXBlID09PSAiaW5qZWN0ZWQiICYmIG9wdGlvbikKLSAgICAgICAgICAgIG9wdGlv
bi5hZGRTdHlsZUNsYXNzKCJpbmplY3RlZCIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH07Ci19KSgpOwotCi19Ci0KLQogKGZ1bmN0aW9uIEludGVyY2VwdFByb2ZpbGVzUGFuZWxFdmVu
dHMoKQogewogICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlLnNob3c7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xz
SG9zdFN0dWIuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMK
aW5kZXggYmFiNzNhOTJhMjQ5NDBhZTc4OTFhNjliMjMyOWIyOTgyY2YxYTZkMS4uYTJmMzU2ZjNh
OGU2Y2RkYTYyYjQyMmQ5NWJkMDNmYTBmMGU0YWI1MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvRGV2VG9vbHNIb3N0U3R1Yi5qcwpAQCAtMzMsOCArMzMsNyBAQAogICogRGV2VG9vbHMgZnJv
bnRlbmQgdG8gZnVuY3Rpb24gYXMgYSBzdGFuZGFsb25lIHdlYiBhcHAuCiAgKi8KIAotaWYgKCF3
aW5kb3dbIlJlbW90ZURlYnVnZ2VyQWdlbnQiXSkgewotICAgIHdpbmRvd1siUmVtb3RlRGVidWdn
ZXJBZ2VudCJdID0geyBzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZTogZnVuY3Rpb24oKSB7fSB9Owor
aWYgKCF3aW5kb3dbIlJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yIl0pIHsKICAgICB3aW5k
b3dbIlJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yIl0gPSB7fTsKICAgICB3aW5kb3dbIlJl
bW90ZVByb2ZpbGVyQWdlbnQiXSA9IHt9OwogICAgIHdpbmRvd1siUmVtb3RlVG9vbHNBZ2VudCJd
ID0gewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9s
bGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlcklt
cGwuanMKaW5kZXggY2JlNjA3ZDI5MGE1NDdiZWZkNjVmMWVlMDBkNTU1Y2QxYzg1MzYyMi4uMmE5
NmJkNTU4NmFmNWM4OTY1YjczNzFlZGMzMjg0NzFjYmQxNGQ0ZiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCkBAIC0xMDIsNyArMTAy
LDYgQEAgZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiAgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic2V0UnVsZVNlbGVjdG9yIik7
CiAgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiYWRkUnVsZSIp
OwogCi0gICAgaWYgKHdpbmRvdy52OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCkgewogICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImRpc2FibGVEZWJ1Z2dlciIp
OwogICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImVkaXRTY3Jp
cHRTb3VyY2UiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVf
KCJnZXRTY3JpcHRTb3VyY2UiKTsKQEAgLTExNiwxMjQgKzExNSwxNSBAQCBkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JD
b250cm9sbGVyRGVsZWdhdGVfKCJzdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIiKTsKICAgICB0
aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzdGVwT3ZlclN0YXRlbWVu
dEluRGVidWdnZXIiKTsKICAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlIik7Ci0gICAgfQogfTsKIGRldnRvb2xzLklu
c3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSW5z
cGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlOwogCiAKLWlmICghd2luZG93LnY4U2NyaXB0RGVi
dWdTZXJ2ZXJFbmFibGVkKSB7Ci0KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5zZXRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbikKLXsKLSAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUpOwot
ICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5hZGRCcmVha3BvaW50KHNvdXJj
ZUlELCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwotfTsKLQotCi1kZXZ0b29scy5JbnNwZWN0
b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJj
ZUlELCBsaW5lKQotewotICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZW1v
dmVCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lKTsKLX07Ci0KLQotZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihjYWxsSUQs
IHNvdXJjZUlELCBuZXdDb250ZW50KQotewotICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2Vy
QWdlbnQoKS5lZGl0U2NyaXB0U291cmNlKHNvdXJjZUlELCBuZXdDb250ZW50LCBmdW5jdGlvbihz
dWNjZXNzLCBuZXdCb2R5T3JFcnJvck1lc3NhZ2UsIGNhbGxGcmFtZXMpIHsKLSAgICAgICAgV2Vi
SW5zcGVjdG9yLmRpZEVkaXRTY3JpcHRTb3VyY2UoY2FsbElELCBzdWNjZXNzLCBuZXdCb2R5T3JF
cnJvck1lc3NhZ2UsIGNhbGxGcmFtZXMpOwotICAgIH0pOwotfTsKLQotCi1kZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuZ2V0U2NyaXB0U291cmNlID0gZnVuY3Rpb24oY2Fs
bElELCBzb3VyY2VJRCkKLXsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCku
cmVzb2x2ZVNjcmlwdFNvdXJjZSgKLSAgICAgICAgc291cmNlSUQsCi0gICAgICAgIGZ1bmN0aW9u
KHNvdXJjZSkgewotICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kaWRHZXRTY3JpcHRTb3VyY2Uo
Y2FsbElELCBzb3VyY2UpOwotICAgICAgICB9KTsKLX07Ci0KLQotZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwucHJvdG90eXBlLmFjdGl2YXRlQnJlYWtwb2ludHMgPSBmdW5jdGlvbigpCi17
Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnNldEJyZWFrcG9pbnRzQWN0
aXZhdGVkKHRydWUpOwotfTsKLQotCi1kZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90
b3R5cGUuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24oKQotewotICAgIGRldnRvb2xz
LnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zZXRCcmVha3BvaW50c0FjdGl2YXRlZChmYWxzZSk7
Ci19OwotCi0KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZUlu
RGVidWdnZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJB
Z2VudCgpLnBhdXNlRXhlY3V0aW9uKCk7Ci19OwotCi0KLWRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsLnByb3RvdHlwZS5yZXN1bWVEZWJ1Z2dlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0
b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzdW1lRXhlY3V0aW9uKCk7Ci19OwotCi0K
LWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwSW50b1N0YXRlbWVu
dEluRGVidWdnZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdn
ZXJBZ2VudCgpLnN0ZXBJbnRvU3RhdGVtZW50KCk7Ci19OwotCi0KLWRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwT3V0T2ZGdW5jdGlvbkluRGVidWdnZXIgPSBmdW5j
dGlvbigpCi17Ci0gICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnN0ZXBPdXRP
ZkZ1bmN0aW9uKCk7Ci19OwotCi0KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5zdGVwT3ZlclN0YXRlbWVudEluRGVidWdnZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2
dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnN0ZXBPdmVyU3RhdGVtZW50KCk7Ci19Owot
Ci0vKioKLSAqIEBvdmVycmlkZQotICovCi1kZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5w
cm90b3R5cGUuc2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSA9IGZ1bmN0aW9uKHN0YXRlKQotewot
ICAgIHRoaXMuX3NldFBhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBzdGF0ZTsKLSAgICAvLyBUT0RP
KHl1cnlzKTogc3VwcG9ydCBhbGwgdGhyZWUgc3RhdGVzLiBTZWUgaHR0cDovL2NyYnVnLmNvbS8z
Mjg3NwotICAgIHZhciBlbmFibGVkID0gKHN0YXRlICE9PSBXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLlBhdXNlT25FeGNlcHRpb25zU3RhdGUuRG9udFBhdXNlT25FeGNlcHRpb25zKTsKLSAgICBX
ZWJJbnNwZWN0b3IudXBkYXRlUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShlbmFibGVkID8gV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5QYXVzZU9uRXhjZXB0aW9uc1N0YXRlLlBhdXNlT25VbmNhdWdo
dEV4Y2VwdGlvbnMgOiBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLlBhdXNlT25FeGNlcHRpb25z
U3RhdGUuRG9udFBhdXNlT25FeGNlcHRpb25zKTsKLSAgICBkZXZ0b29scy50b29scy5nZXREZWJ1
Z2dlckFnZW50KCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMoZW5hYmxlZCk7Ci19OwotCi0KLS8qKgot
ICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlw
ZS5wYXVzZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gZGV2dG9vbHMu
dG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnBhdXNlT25FeGNlcHRpb25zKCk7Ci19OwotCi0KLS8q
KgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKQotewotICAgIHJldHVy
biBkZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnMo
dmFsdWUpOwotfTsKLQotfSBlbHNlIHsKLQogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwu
cHJvdG90eXBlLnBhdXNlSW5EZWJ1Z2dlciA9IGZ1bmN0aW9uKCkKIHsKICAgICBSZW1vdGVEZWJ1
Z2dlckNvbW1hbmRFeGVjdXRvci5EZWJ1Z2dlclBhdXNlU2NyaXB0KCk7CiB9OwogCi19Ci0KIAog
LyoqCiAgKiBAb3ZlcnJpZGUKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVz
dHMuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Rlc3RzLmpzCmluZGV4IDgxNDMyZWJiYTA4
ZWYyOTkwOGQ3MWZjNWMwZmExZWJlZWM4MjA3MjYuLmUyYWIzYjNlM2NjODg0NjMyZWFmOWFkOWVj
N2U0Y2YwM2IwMmE4YzMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMu
anMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcwpAQCAtODYzLDI5ICs4NjMs
NiBAQCBUZXN0U3VpdGUucHJvdG90eXBlLmV2YWx1YXRlSW5Db25zb2xlXyA9IGZ1bmN0aW9uKGNv
ZGUsIGNhbGxiYWNrKQogfTsKIAogCi0vKgotICogV2FpdHMgZm9yICJzZXRicmVha3BvaW50IiBy
ZXNwb25zZSwgY2hlY2tzIHRoYXQgY29ycmVzcG9uZGluZyBicmVha3BvaW50Ci0gKiB3YXMgc3Vj
Y2Vzc2Z1bGx5IHNldCBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgaWYgaXQgd2FzLgotICogQHBh
cmFtIHtzdHJpbmd9IHNjcmlwdFVybAotICogQHBhcmFtIHtudW1iZXJ9IGJyZWFrcG9pbnRMaW5l
Ci0gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrCi0gKi8KLVRlc3RTdWl0ZS5wcm90b3R5
cGUud2FpdEZvclNldEJyZWFrcG9pbnRSZXNwb25zZV8gPSBmdW5jdGlvbihzY3JpcHRVcmwsIGJy
ZWFrcG9pbnRMaW5lLCBjYWxsYmFjaykKLXsKLSAgICB2YXIgdGVzdCA9IHRoaXM7Ci0gICAgdGVz
dC5hZGRTbmlmZmVyKAotICAgICAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZSwK
LSAgICAgICAgImhhbmRsZVNldEJyZWFrcG9pbnRSZXNwb25zZV8iLAotICAgICAgICBmdW5jdGlv
bihtc2cpIHsKLSAgICAgICAgICAgIHZhciBicHMgPSB0aGlzLnVybFRvQnJlYWtwb2ludHNfW3Nj
cmlwdFVybF07Ci0gICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoISFicHMsICJObyBicmVha3Bv
aW50cyBmb3IgbGluZSAiICsgYnJlYWtwb2ludExpbmUpOwotICAgICAgICAgICAgdmFyIGxpbmUg
PSBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LndlYmtpdFRvVjhMaW5lTnVtYmVyXyhicmVha3BvaW50
TGluZSk7Ci0gICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoISFicHNbbGluZV0uZ2V0VjhJZCgp
LCAiQnJlYWtwb2ludCBpZCB3YXMgbm90IGFzc2lnbmVkLiIpOwotICAgICAgICAgICAgY2FsbGJh
Y2soKTsKLSAgICAgICAgfSk7Ci19OwotCi0KIC8qKgogICogVGVzdHMgZXZhbCBvbiBjYWxsIGZy
YW1lLgogICovCkBAIC05OTYsNjAgKzk3Myw3IEBAIFRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdENv
bXBsZXRpb25PblBhdXNlID0gZnVuY3Rpb24oKQogICovCiBUZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RBdXRvQ29udGludWVPblN5bnRheEVycm9yID0gZnVuY3Rpb24oKQogewotICAgIGlmICh3aW5k
b3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRo
aXMuc2hvd1BhbmVsKCJzY3JpcHRzIik7Ci0gICAgdmFyIHRlc3QgPSB0aGlzOwotCi0gICAgZnVu
Y3Rpb24gY2hlY2tTY3JpcHRzTGlzdCgpIHsKLSAgICAgICAgdmFyIHNjcmlwdFNlbGVjdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHRzLWZpbGVzIik7Ci0gICAgICAgIHZhciBvcHRp
b25zID0gc2NyaXB0U2VsZWN0Lm9wdGlvbnM7Ci0gICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSBv
bmx5IGNvbnNvbGUgQVBJIHNvdXJjZSAoc2VlCi0gICAgICAgIC8vIEluamVjdGVkU2NyaXB0Ll9l
bnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCkgc2luY2UgdGhlIHBhZ2Ugc2NyaXB0Ci0gICAg
ICAgIC8vIGNvbnRhaW5zIGEgc3ludGF4IGVycm9yLgotICAgICAgICBmb3IgKHZhciBpID0gMCA7
IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAob3B0aW9uc1tpXS50
ZXh0LnNlYXJjaCgic2NyaXB0X3N5bnRheF9lcnJvci5odG1sIikgIT09IC0xKQotICAgICAgICAg
ICAgICAgIHRlc3QuZmFpbCgiU2NyaXB0IHdpdGggc3ludGF4IGVycm9yIHNob3VsZCBub3QgYmUg
aW4gdGhlIGxpc3Qgb2YgcGFyc2VkIHNjcmlwdHMuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQot
ICAgIHRoaXMuYWRkU25pZmZlcihkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZSwgImhh
bmRsZVNjcmlwdHNSZXNwb25zZV8iLAotICAgICAgICBmdW5jdGlvbihtc2cpIHsKLSAgICAgICAg
ICAgIGNoZWNrU2NyaXB0c0xpc3QoKTsKLQotICAgICAgICAgICAgLy8gUmVsb2FkIGluc3BlY3Rl
ZCBwYWdlLgotICAgICAgICAgICAgdGVzdC5ldmFsdWF0ZUluQ29uc29sZV8oCi0gICAgICAgICAg
ICAgICAgIndpbmRvdy5sb2NhdGlvbi5yZWxvYWQodHJ1ZSk7IiwKLSAgICAgICAgICAgICAgICBm
dW5jdGlvbihyZXN1bHRUZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3QuYXNzZXJ0RXF1
YWxzKCJ1bmRlZmluZWQiLCByZXN1bHRUZXh0LCAiVW5leHBlY3RlZCByZXN1bHQgb2YgcmVsb2Fk
KCkuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdhaXRGb3JFeGNlcHRpb25FdmVudCgpOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgIGZ1bmN0aW9uIHdhaXRGb3JFeGNl
cHRpb25FdmVudCgpIHsKLSAgICAgIHZhciBleGNlcHRpb25Db3VudCA9IDA7Ci0gICAgICB0ZXN0
LmFkZFNuaWZmZXIoCi0gICAgICAgICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUs
Ci0gICAgICAgICAgImhhbmRsZUV4Y2VwdGlvbkV2ZW50XyIsCi0gICAgICAgICAgZnVuY3Rpb24o
bXNnKSB7Ci0gICAgICAgICAgICAgIGV4Y2VwdGlvbkNvdW50Kys7Ci0gICAgICAgICAgICAgIHRl
c3QuYXNzZXJ0RXF1YWxzKDEsIGV4Y2VwdGlvbkNvdW50LCAiVG9vIG1hbnkgZXhjZXB0aW9ucy4i
KTsKLSAgICAgICAgICAgICAgdGVzdC5hc3NlcnRFcXVhbHModW5kZWZpbmVkLCBtc2cuZ2V0Qm9k
eSgpLnNjcmlwdCwgIlVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgSlNPTi5zdHJpbmdpZnkobXNn
KSk7Ci0gICAgICAgICAgICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsKLSAgICAgICAgICB9KTsK
LQotICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgc2NyaXB0IGlzIG5vdCBwYXVzZWQgb24gcGFyc2Ug
ZXJyb3IuCi0gICAgICB0ZXN0LmFkZFNuaWZmZXIoCi0gICAgICAgICAgV2ViSW5zcGVjdG9yLAot
ICAgICAgICAgICJwYXVzZWRTY3JpcHQiLAotICAgICAgICAgIGZ1bmN0aW9uKGNhbGxGcmFtZXMp
IHsKLSAgICAgICAgICAgICAgdGVzdC5mYWlsKCJTY3JpcHQgZXhlY3V0aW9uIHNob3VsZCBub3Qg
cGF1c2Ugb24gc3ludGF4IGVycm9yLiIpOwotICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHRo
aXMudGFrZUNvbnRyb2woKTsKKyAgICAvLyBUT0RPKHl1cnlzKTogcHJvdmlkZSBhbiBpbXBsZW1l
bnRhdGlvbiB0aGF0IHdvcmtzIHdpdGggU2NyaXB0RGVidWdTZXJ2ZXIuCiB9OwogCiAKQEAgLTE1
MDAsMTQgKzE0MjQsMTQgQEAgVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXhwYW5kU2NvcGUgPSBm
dW5jdGlvbigpCiAgICAgICAgICAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgICAgICAg
ICAgICB4OiIyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgaW5uZXJGdW5jdGlvbkxvY2FsVmFy
OiIyMDExIiwKLSAgICAgICAgICAgICAgICAgICAgInRoaXMiOiAod2luZG93LnY4U2NyaXB0RGVi
dWdTZXJ2ZXJFbmFibGVkID8gIkRPTVdpbmRvdyIgOiAiZ2xvYmFsIiksCisgICAgICAgICAgICAg
ICAgICAgICJ0aGlzIjogIkRPTVdpbmRvdyIsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aXRsZTogIkNsb3N1cmUiLAog
ICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsKLSAgICAgICAgICAgICAgICAgICAgbjogKHdp
bmRvdy52OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCA/ICciVGV4dFBhcmFtIicgOiAiVGV4dFBh
cmFtIiksCi0gICAgICAgICAgICAgICAgICAgIG1ha2VDbG9zdXJlTG9jYWxWYXI6ICh3aW5kb3cu
djhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQgPyAnImxvY2FsLlRleHRQYXJhbSInIDogImxvY2Fs
LlRleHRQYXJhbSIpLAorICAgICAgICAgICAgICAgICAgICBuOiAnIlRleHRQYXJhbSInLAorICAg
ICAgICAgICAgICAgICAgICBtYWtlQ2xvc3VyZUxvY2FsVmFyOiAnImxvY2FsLlRleHRQYXJhbSIn
LAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CkBAIC0x
NjExLDcgKzE1MzUsNiBAQCBUZXN0U3VpdGUucHJvdG90eXBlLnRlc3REZWJ1Z0ludHJpbnNpY1By
b3BlcnRpZXMgPSBmdW5jdGlvbigpCiAgICAgfQogCiAgICAgZnVuY3Rpb24gZXhhbWluZUxvY2Fs
U2NvcGUoKSB7Ci0gICAgICBpZiAod2luZG93LnY4U2NyaXB0RGVidWdTZXJ2ZXJFbmFibGVkKSB7
CiAgICAgICB2YXIgc2NvcGVFeHBlY3RhdGlvbnMgPSBbCiAgICAgICAgICAgImEiLCAiQ2hpbGQi
LCBbCiAgICAgICAgICAgICAiX19wcm90b19fIiwgIkNoaWxkIiwgWwpAQCAtMTYzMyw0NyArMTU1
NiwxMiBAQCBUZXN0U3VpdGUucHJvdG90eXBlLnRlc3REZWJ1Z0ludHJpbnNpY1Byb3BlcnRpZXMg
PSBmdW5jdGlvbigpCiAgICAgICAgICAgICAiY2hpbGRGaWVsZCIsICIyMCIsIG51bGwsCiAgICAg
ICAgICAgXQogICAgICAgXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgc2NvcGVFeHBlY3Rh
dGlvbnMgPSBbCi0gICAgICAgICAgImEiLCAiT2JqZWN0IiwgWwotICAgICAgICAgICAgICAiY29u
c3RydWN0b3IiLCAiZnVuY3Rpb24gQ2hpbGQoKSIsIFsKLSAgICAgICAgICAgICAgICAgICJjb25z
dHJ1Y3RvciIsICJmdW5jdGlvbiBGdW5jdGlvbigpIiwgbnVsbCwKLSAgICAgICAgICAgICAgICAg
ICJuYW1lIiwgIkNoaWxkIiwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICJwcm90b3R5cGUiLCAi
T2JqZWN0IiwgWwotICAgICAgICAgICAgICAgICAgICAgICJjaGlsZFByb3RvRmllbGQiLCAyMSwg
bnVsbAotICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICBdLAotCi0gICAgICAgICAg
ICAiX19wcm90b19fIiwgIk9iamVjdCIsIFsKLSAgICAgICAgICAgICAgICAgICJfX3Byb3RvX18i
LCAiT2JqZWN0IiwgWwotICAgICAgICAgICAgICAgICAgICAgICJfX3Byb3RvX18iLCAiT2JqZWN0
IiwgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAiX19wcm90b19fIiwgIm51bGwiLCBudWxs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RydWN0b3IiLCAiZnVuY3Rpb24gT2Jq
ZWN0KCkiLCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAg
ICAgICJjb25zdHJ1Y3RvciIsICJmdW5jdGlvbiBQYXJlbnQoKSIsIFsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICJuYW1lIiwgIlBhcmVudCIsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAicHJvdG90eXBlIiwgIk9iamVjdCIsIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyZW50UHJvdG9GaWVsZCIsIDExLCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgXQot
ICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAicGFyZW50UHJvdG9G
aWVsZCIsIDExLCBudWxsLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgImNv
bnN0cnVjdG9yIiwgImZ1bmN0aW9uIENoaWxkKCkiLCBudWxsLAotICAgICAgICAgICAgICAgICJj
aGlsZFByb3RvRmllbGQiLCAyMSwgbnVsbCwKLSAgICAgICAgICAgIF0sCi0KLSAgICAgICAgICAg
ICJwYXJlbnRGaWVsZCIsIDEwLCBudWxsLAotICAgICAgICAgICAgImNoaWxkRmllbGQiLCAyMCwg
bnVsbCwKLSAgICAgICAgICBdCi0gICAgICBdOwotICAgICAgfQotCiAgICAgICBjaGVja1Byb3Bl
cnR5KGxvY2FsU2NvcGVTZWN0aW9uLnByb3BlcnRpZXNUcmVlT3V0bGluZSwgIjxMb2NhbCBTY29w
ZT4iLCBzY29wZUV4cGVjdGF0aW9ucyk7CiAgICAgfQogCiAgICAgdmFyIHByb3BRdWV1ZSA9IFtd
OwogICAgIHZhciBpbmRleCA9IDA7Ci0gICAgdmFyIGV4cGVjdGVkRmluYWxJbmRleCA9ICh3aW5k
b3cudjhTY3JpcHREZWJ1Z1NlcnZlckVuYWJsZWQgPyA1IDogOCk7CisgICAgdmFyIGV4cGVjdGVk
RmluYWxJbmRleCA9IDU7CiAKICAgICBmdW5jdGlvbiBleHBhbmRBbmRDaGVja05leHRQcm9wZXJ0
eSgpIHsKICAgICAgICAgaWYgKGluZGV4ID09PSBwcm9wUXVldWUubGVuZ3RoKSB7Cg==
</data>
<flag name="review"
          id="49533"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>