<?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>41094</bug_id>
          
          <creation_ts>2010-06-23 12:48:57 -0700</creation_ts>
          <short_desc>Web Inspector: Inspector cleanup + better DevTools alignment with Inspector.</short_desc>
          <delta_ts>2010-06-24 11:07:50 -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="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242029</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-23 12:48:57 -0700</bug_when>
    <thetext>WebCore:
- Removed a bunch of unused methods from all over the place
- Added client callbacks for states surviving navigation
- Implemented more user-friendly stub for InspectorFrontendHost.platform

WebKit/chromium
- Merged InspectorClient implementation into WebDevToolsAgent
- Changed the way WebDevToolsAgent is initialized (will break chromium bot, needs coordinated landing)
- Removed a lot of legacy code from WebDevToolsAgentImpl
- Removed a lot of overrides from DevTools.js
- Simplified devtools stubs
- Got rid of all logic from within InjectDispatch.js

We are now much cleaner and much more ready for remote debugging!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242032</commentid>
    <comment_count>1</comment_count>
      <attachid>59553</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-23 12:52:01 -0700</bug_when>
    <thetext>Created attachment 59553
[PATCH] Proposed change. I still need to test it, but 99.9% of changes are ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242034</commentid>
    <comment_count>2</comment_count>
      <attachid>59554</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-23 12:55:30 -0700</bug_when>
    <thetext>Created attachment 59554
[PATCH] Same with InspectorClientImpl files actually removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242374</commentid>
    <comment_count>3</comment_count>
      <attachid>59554</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-24 01:43:57 -0700</bug_when>
    <thetext>Comment on attachment 59554
[PATCH] Same with InspectorClientImpl files actually removed.

WebKit/chromium/src/WebDevToolsAgentImpl.cpp:486
 +      if (!agent-&gt;m_apuAgentEnabled)
At first check if there is ApuAgent and dispatch the message just to it.

WebKit/chromium/src/WebViewImpl.cpp: 
 +  void WebViewImpl::setDevToolsAgent(WebDevToolsAgent* devToolsAgent)
It is likely to break layout tests. Make sure they are fine.

WebKit/chromium/src/js/InjectDispatch.js: 
 +  function close() {
Pleas make sure tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242450</commentid>
    <comment_count>4</comment_count>
      <attachid>59641</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-24 04:51:25 -0700</bug_when>
    <thetext>Created attachment 59641
[PATCH] Review comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242452</commentid>
    <comment_count>5</comment_count>
      <attachid>59641</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-24 04:58:33 -0700</bug_when>
    <thetext>Comment on attachment 59641
[PATCH] Review comments addressed.

WebKit/chromium/src/WebDevToolsAgentImpl.cpp:491
 +      if (method.isEmpty() || exceptionCatcher.HasCaught())
do you need to check for jsDispatchOnClient.HasCaught here and above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242453</commentid>
    <comment_count>6</comment_count>
      <attachid>59641</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-24 05:04:20 -0700</bug_when>
    <thetext>Comment on attachment 59641
[PATCH] Review comments addressed.

r+ given interactive and layout tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242540</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-24 09:10:33 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61766 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242594</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-24 11:07:50 -0700</bug_when>
    <thetext>Landed as r61772</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59553</attachid>
            <date>2010-06-23 12:52:01 -0700</date>
            <delta_ts>2010-06-23 12:55:30 -0700</delta_ts>
            <desc>[PATCH] Proposed change. I still need to test it, but 99.9% of changes are ready for review.</desc>
            <filename>cleanup</filename>
            <type>text/plain</type>
            <size>48874</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjliYjU3YS4uNzlmNTlkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJl
dHRlciBEZXZUb29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAg
ICAtIFJlbW92ZWQgYSBidW5jaCBvZiB1bnVzZWQgbWV0aG9kcyBmcm9tIGFsbCBvdmVyIHRoZSBw
bGFjZQorICAgICAgICAtIEFkZGVkIGNsaWVudCBjYWxsYmFja3MgZm9yIHN0YXRlcyBzdXJ2aXZp
bmcgbmF2aWdhdGlvbgorICAgICAgICAtIEltcGxlbWVudGVkIG1vcmUgdXNlci1mcmllbmRseSBz
dHViIGZvciBJbnNwZWN0b3JGcm9udGVuZEhvc3QucGxhdGZvcm0KKworICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2xpZW50OjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVSZXNvdXJjZVRyYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRp
bmdzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qczoK
KyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5
cGUucGxhdGZvcm0pOgorCiAyMDEwLTA2LTIyICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCmluZGV4IDJjZTNhMDkuLjYxOTAwYmIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKworICAgIC8vIE5hdmlnYXRpb24gY2FuIGNhdXNl
IHNvbWUgV2ViS2l0IGltcGxlbWVudGF0aW9ucyB0byBjaGFuZ2UgdGhlIHZpZXcgLyBwYWdlIC8g
aW5zcGVjdG9yIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgICAgLy8gSG93ZXZlciwgdGhlcmUgYXJl
IHNvbWUgaW5zcGVjdG9yIGNvbnRyb2xsZXIgc3RhdGVzIHRoYXQgc2hvdWxkIHN1cnZpdmUgbmF2
aWdhdGlvbiAoc3VjaCBhcyB0cmFja2luZyByZXNvdXJjZXMKKyAgICAvLyBvciByZWNvcmRpbmcg
dGltZWxpbmUpLiBGb2xsb3dpbmcgY2FsbGJhY2tzIGFsbG93IGVtYmVkZGVycyB0byB0cmFjayB0
aGVzZSBzdGF0ZXMuCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVk
KCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKSB7
IH07CisgICAgdmlydHVhbCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCkgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCB0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpIHsgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1ZWFjOTM2Li5j
MGRiZTk3Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMTAxLDYg
KzExMDEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVJlc291cmNlVHJhY2tp
bmcoYm9vbCBhbHdheXMsIGJvb2wgcmVsb2FkKQogICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQgPSB0cnVlOwogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT5yZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNraW5n
V2FzRW5hYmxlZCgpOwogCiAgICAgaWYgKHJlbG9hZCkKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHRydWUp
OwpAQCAtMTExOCw2ICsxMTE5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxl
UmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKICAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkID0gZmFsc2U7CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnJl
c291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNr
aW5nV2FzRGlzYWJsZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVT
ZXR0aW5nc0xvYWRlZCgpCkBAIC0xMTI5LDYgKzExMzEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICBTdHJpbmcgcmVzb3VyY2VUcmFja2lu
ZyA9IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYg
KHJlc291cmNlVHJhY2tpbmcgPT0gInRydWUiKQogICAgICAgICBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQo
KTsKIAogICAgIFN0cmluZyBtb25pdG9yaW5nWEhSID0gc2V0dGluZyhtb25pdG9yaW5nWEhSU2V0
dGluZ05hbWUpOwogICAgIGlmIChtb25pdG9yaW5nWEhSID09ICJ0cnVlIikKQEAgLTExNDYsNiAr
MTE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVy
KCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChtX2Zy
b250ZW5kLmdldCgpKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKKyAgICBtX2NsaWVudC0+dGltZWxpbmVQcm9m
aWxlcldhc1N0YXJ0ZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGlt
ZWxpbmVQcm9maWxlcigpCkBAIC0xMTU5LDYgKzExNjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSAwOwog
ICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVy
V2FzU3RvcHBlZCgpOworICAgIG1fY2xpZW50LT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgp
OwogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKaW5kZXggMjg3ZTY3Zi4uNTZlZDFlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcApAQCAtMTg0LDE0ICsxODQsNiBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZShsb25nIG5vZGVJZCkKICAgICBmdW5jdGlvbi5jYWxsKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0
YWNoZWQpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVk
V2luZG93Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwotICAgIGZ1
bmN0aW9uLmNhbGwoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2hvd1BhbmVsKGlu
dCBwYW5lbCkKIHsKICAgICBjb25zdCBjaGFyKiBzaG93RnVuY3Rpb25OYW1lOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggZDMwZTIzYy4uNjIwNDg3MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC03Nyw3ICs3Nyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRHZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVGb2N1c2VkTm9k
ZShsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRh
Y2hlZCk7CiAgICAgICAgIHZvaWQgc2hvd1BhbmVsKGludCBwYW5lbCk7CiAgICAgICAgIHZvaWQg
cG9wdWxhdGVJbnRlcmZhY2UoKTsKICAgICAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDAx
NmQ3NDguLjFhZTMyYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5zcGVjdG9yQmFja2VuZFN0dWIuanMKQEAgLTc5LDEwICs3OSw2IEBAIFdlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgewogICAgIH0sCiAKLSAgICBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodDogZnVuY3Rpb24oaGVpZ2h0KQotICAgIHsKLSAgICB9LAot
CiAgICAgbW92ZUJ5VW5yZXN0cmljdGVkOiBmdW5jdGlvbih4LCB5KQogICAgIHsKICAgICB9LApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qcwppbmRleCA1NDU2MDY5Li4zOWJiZTAyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpA
QCAtNDAsNyArNDAsMTMgQEAgV2ViSW5zcGVjdG9yLl9wbGF0Zm9ybUZsYXZvciA9IFdlYkluc3Bl
Y3Rvci5QbGF0Zm9ybUZsYXZvci5NYWNMZW9wYXJkOwogV2ViSW5zcGVjdG9yLkluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogICAgIHBsYXRmb3JtOiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICByZXR1cm4gIm1hYyI7CisgICAgICAgIHZhciBtYXRjaCA9IG5hdmlnYXRv
ci51c2VyQWdlbnQubWF0Y2goL1dpbmRvd3MgTlQvKTsKKyAgICAgICAgaWYgKG1hdGNoKQorICAg
ICAgICAgICAgcmV0dXJuICJ3aW5kb3dzIjsKKyAgICAgICAgbWF0Y2ggPSBuYXZpZ2F0b3IudXNl
ckFnZW50Lm1hdGNoKC9NYWMgT1MgWC8pOworICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gIm1hYyI7CisgICAgICAgIHJldHVybiAibGludXgiOwogICAgIH0sCiAKICAgICBw
b3J0OiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5OGYxMTMxLi5lYzYxYmUxIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJldHRlciBEZXZU
b29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAgICAtIE1lcmdl
ZCBJbnNwZWN0b3JDbGllbnQgaW1wbGVtZW50YXRpb24gaW50byBXZWJEZXZUb29sc0FnZW50Cisg
ICAgICAgIC0gQ2hhbmdlZCB0aGUgd2F5IFdlYkRldlRvb2xzQWdlbnQgaXMgaW5pdGlhbGl6ZWQg
KHdpbGwgYnJlYWsgY2hyb21pdW0gYm90LCBuZWVkcyBjb29yZGluYXRlZCBsYW5kaW5nKQorICAg
ICAgICAtIFJlbW92ZWQgYSBsb3Qgb2YgbGVnYWN5IGNvZGUgZnJvbSBXZWJEZXZUb29sc0FnZW50
SW1wbAorICAgICAgICAtIFJlbW92ZWQgYSBsb3Qgb2Ygb3ZlcnJpZGVzIGZyb20gRGV2VG9vbHMu
anMKKyAgICAgICAgLSBTaW1wbGlmaWVkIGRldnRvb2xzIHN0dWJzCisgICAgICAgIC0gR290IHJp
ZCBvZiBhbGwgbG9naWMgZnJvbSB3aXRoaW4gSW5qZWN0RGlzcGF0Y2guanMKKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNo
RGlkQ29tbWl0TG9hZCk6CisgICAgICAgICogc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogc3JjL1Rvb2xzQWdlbnQuaDoKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjopOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNo
T25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVj
dG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpw
b3B1bGF0ZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzQWdlbnRJbXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAg
ICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmg6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjppbml0aWFsaXplTG9hZGVyKToKKyAgICAgICAgKiBzcmMvanMv
RGV2VG9vbHMuanM6CisgICAgICAgIChkZXZ0b29scy5Ub29sc0FnZW50KToKKyAgICAgICAgKCk6
CisgICAgICAgIChkZXZ0b29scyk6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIu
anM6CisgICAgICAgICgud2luZG93LnNldERlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAg
KC53aW5kb3cuZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBzcmMvanMvSW5q
ZWN0RGlzcGF0Y2guanM6CisgICAgICAgIChkaXNwYXRjaCk6CisgICAgICAgICogc3JjL2pzL0lu
c3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorCiAyMDEwLTA2LTIyICBNaWtoYWlsIE5hZ2Fub3Yg
IDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggYTUzZGQyOC4uZWE1ZTNiZCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTI4Myw4ICsyODMsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvSURCT2JqZWN0U3RvcmVQ
cm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5oJywKLSAgICAgICAg
ICAgICAgICAnc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL0luc3BlY3RvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0
b3JGcm9udGVuZENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZv
bnRSZW5kZXJpbmcuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDkwNTRkOGMuLjczNGEzZDUK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsK
IGNsYXNzIFdlYkRyYWdEYXRhOworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNz
IFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVDbGllbnQ7CiBjbGFzcyBXZWJOb2RlOwpAQCAtNTUs
OCArNTYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGVzIGEgV2ViVmlldyB0aGF0IGlzIE5P
VCB5ZXQgaW5pdGlhbGl6ZWQuICBZb3Ugd2lsbCBuZWVkIHRvCiAgICAgLy8gY2FsbCBpbml0aWFs
aXplTWFpbkZyYW1lIHRvIGZpbmlzaCB0aGUgaW5pdGlhbGl6YXRpb24uICBJdCBpcyB2YWxpZAot
ICAgIC8vIHRvIHBhc3MgYSBudWxsIFdlYlZpZXdDbGllbnQgcG9pbnRlci4KLSAgICBXRUJLSVRf
QVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCopOworICAgIC8vIHRvIHBh
c3MgYSBudWxsIFdlYlZpZXdDbGllbnQgYW5kIFdlYkRldlRvb2xzQ2xpZW50IHBvaW50ZXJzLiAK
KyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCosIFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqKTsKIAogICAgIC8vIEFmdGVyIGNyZWF0aW5nIGEgV2ViVmll
dywgeW91IHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIHRoaXMgbWV0aG9kLgogICAgIC8vIFlvdSBj
YW4gb3B0aW9uYWxseSBtb2RpZnkgdGhlIHNldHRpbmdzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0
aG9kLgpAQCAtMjIzLDcgKzIyNCw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZW1iZWRkZXIgbWF5
IG9wdGlvbmFsbHkgZW5nYWdlIGEgV2ViRGV2VG9vbHNBZ2VudC4gIFRoaXMgbWF5IG9ubHkKICAg
ICAvLyBiZSBzZXQgb25jZSBwZXIgV2ViVmlldy4KICAgICB2aXJ0dWFsIFdlYkRldlRvb2xzQWdl
bnQqIGRldlRvb2xzQWdlbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERldlRvb2xzQWdl
bnQoV2ViRGV2VG9vbHNBZ2VudCopID0gMDsKIAogCiAgICAgLy8gQWNjZXNzaWJpbGl0eSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2OTRkN2MyLi5kYWU5MzQ4Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKQEAgLTczNSw5ICs3MzUsNiBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIGlm
IChtX3dlYkZyYW1lLT5jbGllbnQoKSkKICAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRp
ZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZyYW1lLCBpc05ld05hdmlnYXRpb24pOwotCi0g
ICAgaWYgKHdlYnZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCi0gICAgICAgIHdlYnZpZXct
PmRldlRvb2xzQWdlbnRQcml2YXRlKCktPmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZy
YW1lLCBpc05ld05hdmlnYXRpb24pOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggNmY3ZWQ5NS4uODNiOTI1YQotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBs
LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xMjAsOSArMTIyLDkgQEAgdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudEltcGw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQogICAg
IC8vIERvIG5vdGhpbmc7CiB9CiAgICAgCi12b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1w
bDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudEltcGw6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7
Ci0gICAgLy8gRG8gbm90aGluZzsKKyAgICBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCktPnNldFRpdGxlKCJEZXZlbG9wZXIgVG9vbHMgLSAiICsgdXJsKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1Rvb2xz
QWdlbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5oCm9sZCBtb2RlIDEwMDY0
NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYWI0ODE1My4uYzc0OGM4YQotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1Rvb2xzQWdlbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Rvb2xzQWdl
bnQuaApAQCAtNTAsOSArNTAsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIERFRklORV9SUENfQ0xB
U1MoVG9vbHNBZ2VudCwgVE9PTFNfQUdFTlRfU1RSVUNUKQogCiAjZGVmaW5lIFRPT0xTX0FHRU5U
X0RFTEVHQVRFX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBNRVRIT0QzLCBNRVRI
T0Q0LCBNRVRIT0Q1KSBcCi0gICAgLyogVXBkYXRlcyBmb2N1c2VkIG5vZGUgb24gdGhlIGNsaWVu
dC4gKi8gXAotICAgIE1FVEhPRDEoZnJhbWVOYXZpZ2F0ZSwgU3RyaW5nIC8qIHVybCAqLykgXAot
ICAgIFwKICAgICAvKiBSZXNwb25zZSB0byB0aGUgRGlzcGF0Y2hPbiouICovIFwKICAgICBNRVRI
T0QzKGRpZERpc3BhdGNoT24sIGludCAvKiBjYWxsX2lkICovLCBTdHJpbmcgLyogcmVzdWx0ICov
LCBTdHJpbmcgLyogZXhjZXB0aW9uICovKSBcCiAgICAgXApkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1
CmluZGV4IDJhODMwYTAuLjlhYTdkZTIKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHAKQEAgLTYyLDExICs2MiwxMyBAQAogI2luY2x1ZGUgIldlYkRldlRvb2xzTWVz
c2FnZURhdGEuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc01lc3NhZ2VUcmFuc3BvcnQuaCIKICNp
bmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJSZWN0LmgiCiAjaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMRXJyb3Iu
aCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC0xMDQsMjMgKzEwNiw5IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZFdlYWtSZWZlcmVuY2VDYWxs
YmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pCiAgICAgb2JqZWN0LkRp
c3Bvc2UoKTsKIH0KIAotdm9pZCBTZXRBcHVBZ2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIGJvb2wgZW5hYmxlZCkKLXsKLSAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRT
Y29wZShjb250ZXh0KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoZXIgPSB2
ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoCi0gICAgICAgIGNvbnRleHQtPkdsb2JhbCgpLT5H
ZXQodjg6OlN0cmluZzo6TmV3KCJBcHVBZ2VudERpc3BhdGNoZXIiKSkpOwotICAgIGlmIChkaXNw
YXRjaGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRpc3BhdGNoZXItPlNldCh2
ODo6U3RyaW5nOjpOZXcoImVuYWJsZWQiKSwgdjg6OkJvb2xlYW46Ok5ldyhlbmFibGVkKSk7Ci19
Ci0KLS8vIFRPRE8ocGZlbGRtYW4pOiBNYWtlIHRoaXMgcHVibGljIGluIFdlYkRldlRvb2xzQWdl
bnQgQVBJLgotc3RhdGljIGNvbnN0IGNoYXIga0FwdUFnZW50RmVhdHVyZU5hbWVbXSA9ICJhcHUt
YWdlbnQiOwotCi0vLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCB0aGUgb25lcyBpbiBpbmplY3Rf
ZGlzcGF0Y2guanMuCi1zdGF0aWMgY29uc3QgY2hhciBrVGltZWxpbmVGZWF0dXJlTmFtZVtdID0g
InRpbWVsaW5lLXByb2ZpbGVyIjsKIHN0YXRpYyBjb25zdCBjaGFyIGtSZXNvdXJjZVRyYWNraW5n
RmVhdHVyZU5hbWVbXSA9ICJyZXNvdXJjZS10cmFja2luZyI7CitzdGF0aWMgY29uc3QgY2hhciBr
VGltZWxpbmVGZWF0dXJlTmFtZVtdID0gInRpbWVsaW5lLXByb2ZpbGVyIjsKK3N0YXRpYyBjb25z
dCBjaGFyIGtBcHVBZ2VudEZlYXR1cmVOYW1lW10gPSAiYXB1LWFnZW50IjsKIAogY2xhc3MgSU9S
UENEZWxlZ2F0ZSA6IHB1YmxpYyBEZXZUb29sc1JQQzo6RGVsZWdhdGUsIHB1YmxpYyBOb25jb3B5
YWJsZSB7CiBwdWJsaWM6CkBAIC0zMTIsMjEgKzMwMCw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpZE5hdmlnYXRlKCkKICAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25OYXZpZ2F0
ZSgpOwogfQogCi12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25h
bExvYWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgYm9vbCBpc05ld05hdmlnYXRpb24pCi17Ci0g
ICAgaWYgKCFtX2F0dGFjaGVkKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViRGF0YVNvdXJjZSog
ZHMgPSB3ZWJmcmFtZS0+ZGF0YVNvdXJjZSgpOwotICAgIGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJl
cXVlc3QgPSBkcy0+cmVxdWVzdCgpOwotICAgIFdlYlVSTCB1cmwgPSBkcy0+aGFzVW5yZWFjaGFi
bGVVUkwoKSA/Ci0gICAgICAgIGRzLT51bnJlYWNoYWJsZVVSTCgpIDoKLSAgICAgICAgcmVxdWVz
dC51cmwoKTsKLSAgICBpZiAoIXdlYmZyYW1lLT5wYXJlbnQoKSkgewotICAgICAgICBtX3Rvb2xz
QWdlbnREZWxlZ2F0ZVN0dWItPmZyYW1lTmF2aWdhdGUoV2ViQ29yZTo6S1VSTCh1cmwpLnN0cmlu
ZygpKTsKLSAgICAgICAgU2V0QXB1QWdlbnRFbmFibGVkSW5VdGlsaXR5Q29udGV4dChtX3V0aWxp
dHlDb250ZXh0LCBtX2FwdUFnZW50RW5hYmxlZCk7Ci0gICAgfQotfQotCiB2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZUltcGwqIHdlYmZyYW1l
KQogewogICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRIb3N0SWQod2ViZnJhbWUsIG1faG9z
dElkKTsKQEAgLTQxOCwxNSArMzkxLDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5p
dERldlRvb2xzQWdlbnRIb3N0KCkKICAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0
aW9uKAogICAgICAgICAiZGlzcGF0Y2giLAogICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbDo6
anNEaXNwYXRjaE9uQ2xpZW50KTsKLSAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0
aW9uKAotICAgICAgICAiZGlzcGF0Y2hUb0FwdSIsCi0gICAgICAgIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpqc0Rpc3BhdGNoVG9BcHUpOwotICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVu
Y3Rpb24oCi0gICAgICAgICJldmFsdWF0ZU9uU2VsZiIsCi0gICAgICAgIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpqc0V2YWx1YXRlT25TZWxmKTsKLSAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAotICAgICAgICAicnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQiLAotICAgICAg
ICBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNPblJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKTsK
ICAgICBkZXZ0b29sc0FnZW50SG9zdC5idWlsZCgpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOwpAQCAtNDg3LDcgKzQ1MSw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldElu
c3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIoKQogdm9pZCBXZWJEZXZU
b29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBt
X2FwdUFnZW50RW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgU2V0QXB1QWdlbnRFbmFibGVkSW5VdGls
aXR5Q29udGV4dChtX3V0aWxpdHlDb250ZXh0LCBlbmFibGVkKTsKICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpYyA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
OwogICAgIGlmIChlbmFibGVkKSB7CiAgICAgICAgIG1fcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJs
ZWQgPSBpYy0+cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKQEAgLTUxNiw1NSArNDc5LDI0IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNwYXRjaE9u
Q2xpZW50KGNvbnN0IHY4OjpBcmd1bWVuCiAgICAgU3RyaW5nIG1lc3NhZ2UgPSBXZWJDb3JlOjp0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwogICAgIGlmIChtZXNzYWdlLmlz
RW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQogICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworCiAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gc3Rh
dGljX2Nhc3Q8V2ViRGV2VG9vbHNBZ2VudEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3Mu
RGF0YSgpKS0+VmFsdWUoKSk7CiAgICAgYWdlbnQtPm1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+
ZGlzcGF0Y2hPbkNsaWVudChtZXNzYWdlKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
fQogCi0vLyBzdGF0aWMKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0FnZW50SW1w
bDo6anNEaXNwYXRjaFRvQXB1KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgdjg6
OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBXZWJDb3Jl
Ojp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgIGlmIChtZXNzYWdl
LmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQorICAgIGlmICghYWdl
bnQtPm1fYXB1QWdlbnRFbmFibGVkKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
ICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBhZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xz
QWdlbnRJbXBsKj4oCi0gICAgICAgIHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5W
YWx1ZSgpKTsKLSAgICBhZ2VudC0+bV9hcHVBZ2VudERlbGVnYXRlU3R1Yi0+ZGlzcGF0Y2hUb0Fw
dShtZXNzYWdlKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQogCi0vLyBzdGF0aWMK
LXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNFdmFsdWF0ZU9u
U2VsZihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQotewotICAgIFN0cmluZyBjb2RlOwotICAg
IHsKLSAgICAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7Ci0gICAgICAgIGNvZGUg
PSBXZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwotICAgICAg
ICBpZiAoY29kZS5pc0VtcHR5KCkgfHwgZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIFdlYkRldlRvb2xz
QWdlbnRJbXBsKiBhZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4odjg6
OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotICAgIHY4OjpDb250ZXh0
OjpTY29wZShhZ2VudC0+bV91dGlsaXR5Q29udGV4dCk7Ci0gICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShhZ2VudC0+bV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5tYWluRnJhbWUo
KSk7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0gcHJveHktPnJ1blNjcmlwdCh2
ODo6U2NyaXB0OjpDb21waWxlKHY4OjpTdHJpbmc6Ok5ldyhjb2RlLnV0ZjgoKS5kYXRhKCkpKSwg
dHJ1ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKyAgICBTdHJpbmcgbWV0aG9kID0gV2ViQ29y
ZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKTsKKyAgICBpZiAobWV0aG9k
LmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0vLyBzdGF0aWMKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBX
ZWJEZXZUb29sc0FnZW50SW1wbDo6anNPblJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNo
ZXI7Ci0gICAgU3RyaW5nIGZlYXR1cmUgPSBXZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKGFyZ3NbMF0pOwotICAgIGJvb2wgZW5hYmxlZCA9IGFyZ3NbMV0tPlRvQm9vbGVhbigp
LT5WYWx1ZSgpOwotICAgIGlmIChmZWF0dXJlLmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVy
Lkhhc0NhdWdodCgpKQorICAgIGlmIChtZXRob2QgIT0gImFkZFJlY29yZFRvVGltZWxpbmUiICYm
IG1ldGhvZCAhPSAidXBkYXRlUmVzb3VyY2UiICYmIG1ldGhvZCAhPSAiYWRkUmVzb3VyY2UiKQ0K
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBXZWJEZXZUb29sc0FnZW50SW1w
bCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+KHY4OjpFeHRlcm5h
bDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKLSAgICBhZ2VudC0+bV9jbGllbnQtPnJ1
bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGZlYXR1cmUsIGVuYWJsZWQpOworCisgICAgYWdlbnQt
Pm1fYXB1QWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoVG9BcHUobWVzc2FnZSk7CiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAotCiBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
KiBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCkpCkBAIC02MTgsNiArNTUwLDgzIEBA
IHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
cmVzb3VyY2VJZCwgY29uc3QgV2ViVVJMCiAgICAgICAgIGljLT5kaWRGYWlsTG9hZGluZyhyZXNv
dXJjZUlkLCByZXNvdXJjZUVycm9yKTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6
aW5zcGVjdG9yRGVzdHJveWVkKCkNCit7DQorICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0
byB0aGUgV2ViVmlld0ltcGwuDQorfQ0KKw0KK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikNCit7DQorfQorCit2b2lk
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICAvLyBJ
bnNwZWN0b3JDb250cm9sbGVyIGRvZXMgdGhlIGFjdHVhbGwgdHJhY2tpbmcgb2YgdGhlIGhpZ2hs
aWdodGVkIG5vZGUKKyAgICAvLyBhbmQgdGhlIGRyYXdpbmcgb2YgdGhlIGhpZ2hsaWdodC4gSGVy
ZSB3ZSBqdXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlCisgICAgLy8gdGhlIHJlY3RzIG9mIHRo
ZSBvbGQgYW5kIG5ldyBub2Rlcy4KKyAgICBoaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmhpZGVIaWdobGlnaHQoKQoreworICAgIC8vIEZJWE1FOiBhYmxl
IHRvIGludmFsaWRhdGUgYSBzbWFsbGVyIHJlY3QuCisgICAgLy8gRklYTUU6IElzIGl0IGltcG9y
dGFudCB0byBqdXN0IGludmFsaWRhdGUgdGhlIHJlY3Qgb2YgdGhlIG5vZGUgcmVnaW9uCisgICAg
Ly8gZ2l2ZW4gdGhhdCB0aGlzIGlzIG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyAgSW4gb3Jk
ZXIgdG8gZG8gc28sIHdlJ2QKKyAgICAvLyBoYXZlIHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNj
b3VudC4KKyAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOwor
ICAgIFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwor
ICAgIGlmIChtX3dlYlZpZXdJbXBsLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3SW1wbC0+
Y2xpZW50KCktPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KKwordm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJp
bmcqIHZhbHVlKQoreworICAgIFdlYlN0cmluZyBzdHJpbmc7CisgICAgbV93ZWJWaWV3SW1wbC0+
aW5zcGVjdG9yU2V0dGluZyhrZXksICZzdHJpbmcpOworICAgICp2YWx1ZSA9IHN0cmluZzsKK30K
Kwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fd2ViVmlld0ltcGwtPnNldEluc3Bl
Y3RvclNldHRpbmcoa2V5LCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIGRldlRvb2xzQWdlbnQgPSBzdGF0aWNfY2FzdDxX
ZWJEZXZUb29sc0FnZW50SW1wbCo+KG1fd2ViVmlld0ltcGwtPmRldlRvb2xzQWdlbnQoKSk7Cisg
ICAgaWYgKCFkZXZUb29sc0FnZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiBhcmd1bWVudHMoc2l6ZV90KDEpKTsKKyAgICBhcmd1bWVudHNbMF0g
PSBtZXNzYWdlOworICAgIFdlYkRldlRvb2xzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmNs
YXNzTmFtZSA9ICJUb29sc0FnZW50RGVsZWdhdGUiOworICAgIGRhdGEubWV0aG9kTmFtZSA9ICJk
aXNwYXRjaE9uQ2xpZW50IjsKKyAgICBkYXRhLmFyZ3VtZW50cy5zd2FwKGFyZ3VtZW50cyk7Cisg
ICAgZGV2VG9vbHNBZ2VudC0+c2VuZFJwY01lc3NhZ2UoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc291cmNlVHJhY2tpbmdXYXNFbmFi
bGVkKCkKK3sKKyAgICBtX2NsaWVudC0+cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoa1Jlc291
cmNlVHJhY2tpbmdGZWF0dXJlTmFtZSwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OnJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpCit7CisgICAgbV9jbGllbnQtPnJ1
bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGtSZXNvdXJjZVRyYWNraW5nRmVhdHVyZU5hbWUsIGZh
bHNlKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldh
c1N0YXJ0ZWQoKQoreworICAgIG1fY2xpZW50LT5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChr
VGltZWxpbmVGZWF0dXJlTmFtZSwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudElt
cGw6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCkKK3sKKyAgICBtX2NsaWVudC0+cnVudGlt
ZUZlYXR1cmVTdGF0ZUNoYW5nZWQoa1RpbWVsaW5lRmVhdHVyZU5hbWUsIGZhbHNlKTsKK30KKwog
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNh
bGxJZCwgY29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0
NTVkY2VmLi5jOTdiMjFmCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgK
QEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgV2ViRGV2VG9vbHNBZ2VudEltcGxfaAogI2RlZmlu
ZSBXZWJEZXZUb29sc0FnZW50SW1wbF9oCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIK
KwogI2luY2x1ZGUgIkFQVUFnZW50RGVsZWdhdGUuaCIKICNpbmNsdWRlICJEZXZUb29sc1JQQy5o
IgogI2luY2x1ZGUgIlRvb2xzQWdlbnQuaCIKQEAgLTQxLDYgKzQzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFN0cmluZzsKQEAgLTYy
LDcgKzY1LDggQEAgc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CiAKIGNsYXNzIFdlYkRl
dlRvb2xzQWdlbnRJbXBsIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgVG9vbHNBZ2VudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIERldlRvb2xzUlBDOjpEZWxlZ2F0ZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBEZXZUb29sc1JQQzo6RGVsZWdhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQgewog
cHVibGljOgogICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1w
bCwgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJEZXZU
b29sc0FnZW50SW1wbCgpOwpAQCAtNzMsNyArNzcsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKiBmcmFtZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIGZyYW1lLCBib29sIGlzTmV3
TmF2aWdhdGlvbik7CiAKICAgICAvLyBXZWJEZXZUb29sc0FnZW50IGltcGxlbWVudGF0aW9uLgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKQEAgLTkyLDYgKzk1LDE5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZywgY29uc3QgV2ViVVJMRXJyb3Im
KTsKIAorICAgIC8vIEluc3BlY3RvckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0
b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB2
b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdo
bGlnaHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJs
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CisgICAgdmlydHVh
bCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7CisgICAgdmlydHVhbCBib29sIHNl
bmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKwogICAgIC8vIERl
dlRvb2xzUlBDOjpEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgc2Vu
ZFJwY01lc3NhZ2UoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSk7CiAKQEAgLTEw
MSw5ICsxMTcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBqc0Rpc3BhdGNoT25DbGllbnQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7
Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0Rpc3BhdGNoVG9BcHUoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0V2YWx1YXRlT25TZWxmKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNPblJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogCiAgICAgdm9pZCBkaXNwb3NlVXRpbGl0eUNvbnRleHQo
KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJp
dmF0ZS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCm9s
ZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNDQ2ZjY0Ny4uNzAzOGE1ZQotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCkBAIC00MywxMSArNDMs
NiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHdpbmRvdyBvYmplY3QgZm9yIHRoZSBmcmFtZSBoYXMg
YmVlbiBjbGVhcmVkIG9mIGFueSBleHRyYSBwcm9wZXJ0aWVzCiAgICAgLy8gdGhhdCBtYXkgaGF2
ZSBiZWVuIHNldCBieSBzY3JpcHQgZnJvbSB0aGUgcHJldmlvdXNseSBsb2FkZWQgZG9jdW1lbnQu
CiAgICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCopID0g
MDsKLQotICAgIC8vIFRoZSBwcm92aXNpb25hbCBkYXRhc291cmNlIGlzIG5vdyBjb21taXR0ZWQu
ICBUaGUgZmlyc3QgcGFydCBvZiB0aGUKLSAgICAvLyByZXNwb25zZSBib2R5IGhhcyBiZWVuIHJl
Y2VpdmVkLCBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSByZXNwb25zZSBib2R5Ci0gICAgLy8gaXMg
a25vd24uCi0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFt
ZUltcGwqLCBib29sIGlzTmV3TmF2aWdhdGlvbikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggMzJjYTIzZi4uZDgwMGMwZAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmNwcApAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHlw
aW5nQ29tbWFuZC5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNs
dWRlICJXZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2Vu
dFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIldlYkZyYW1l
SW1wbC5oIgpAQCAtMTAyLDYgKzEwMyw3IEBACiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5j
bHVkZSAiV2ViVmlld0NsaWVudC5oIgogCisKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgIlJl
bmRlclRoZW1lQ2hyb21pdW1XaW4uaCIKICNlbHNlCkBAIC0xNjMsOSArMTY1LDkgQEAgc3RhdGlj
IGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3Mgc3VnZ2VzdGlvbnNQb3B1cFNldHRpbmdzID0g
ewogCiAvLyBXZWJWaWV3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2ViVmlldyogV2ViVmlldzo6Y3JlYXRlKFdlYlZp
ZXdDbGllbnQqIGNsaWVudCkKK1dlYlZpZXcqIFdlYlZpZXc6OmNyZWF0ZShXZWJWaWV3Q2xpZW50
KiBjbGllbnQsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGRldlRvb2xzQ2xpZW50KQogewotICAg
IHJldHVybiBuZXcgV2ViVmlld0ltcGwoY2xpZW50KTsKKyAgICByZXR1cm4gbmV3IFdlYlZpZXdJ
bXBsKGNsaWVudCwgZGV2VG9vbHNDbGllbnQpOwogfQogCiB2b2lkIFdlYlZpZXc6OnVwZGF0ZVZp
c2l0ZWRMaW5rU3RhdGUodW5zaWduZWQgbG9uZyBsb25nIGxpbmtIYXNoKQpAQCAtMjEyLDE0ICsy
MTQsMTMgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aW5pdGlhbGl6ZU1haW5GcmFtZShXZWJGcmFtZUNs
aWVudCogZnJhbWVDbGllbnQpCiAgICAgU2VjdXJpdHlPcmlnaW46OnNldExvY2FsTG9hZFBvbGlj
eShTZWN1cml0eU9yaWdpbjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5KTsKIH0KIAotV2Vi
Vmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKK1dlYlZpZXdJbXBs
OjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQsIFdlYkRldlRvb2xzQWdlbnRDbGll
bnQqIGRldlRvb2xzQ2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9iYWNr
Rm9yd2FyZExpc3RDbGllbnRJbXBsKHRoaXMpCiAgICAgLCBtX2Nocm9tZUNsaWVudEltcGwodGhp
cykKICAgICAsIG1fY29udGV4dE1lbnVDbGllbnRJbXBsKHRoaXMpCiAgICAgLCBtX2RyYWdDbGll
bnRJbXBsKHRoaXMpCiAgICAgLCBtX2VkaXRvckNsaWVudEltcGwodGhpcykKLSAgICAsIG1faW5z
cGVjdG9yQ2xpZW50SW1wbCh0aGlzKQogICAgICwgbV9vYnNlcnZlZE5ld05hdmlnYXRpb24oZmFs
c2UpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9uZXdOYXZpZ2F0aW9uTG9hZGVyKDApCkBAIC0y
NTYsOCArMjU3LDExIEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBj
bGllbnQpCiAgICAgLy8gc2V0IHRvIGltcG9zc2libGUgcG9pbnQgc28gd2UgYWx3YXlzIGdldCB0
aGUgZmlyc3QgbW91c2UgcG9zCiAgICAgbV9sYXN0TW91c2VQb3NpdGlvbiA9IFdlYlBvaW50KC0x
LCAtMSk7CiAKKyAgICBpZiAoZGV2VG9vbHNDbGllbnQpCisgICAgICAgIG1fZGV2VG9vbHNBZ2Vu
dCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4oV2ViRGV2VG9vbHNBZ2VudDo6
Y3JlYXRlKHRoaXMsIGRldlRvb2xzQ2xpZW50KSk7CisKICAgICAvLyB0aGUgcGFnZSB3aWxsIHRh
a2Ugb3duZXJzaGlwIG9mIHRoZSB2YXJpb3VzIGNsaWVudHMKLSAgICBtX3BhZ2Uuc2V0KG5ldyBQ
YWdlKCZtX2Nocm9tZUNsaWVudEltcGwsICZtX2NvbnRleHRNZW51Q2xpZW50SW1wbCwgJm1fZWRp
dG9yQ2xpZW50SW1wbCwgJm1fZHJhZ0NsaWVudEltcGwsICZtX2luc3BlY3RvckNsaWVudEltcGws
IDAsIDAsIDApKTsKKyAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKCZtX2Nocm9tZUNsaWVudEltcGws
ICZtX2NvbnRleHRNZW51Q2xpZW50SW1wbCwgJm1fZWRpdG9yQ2xpZW50SW1wbCwgJm1fZHJhZ0Ns
aWVudEltcGwsIG1fZGV2VG9vbHNBZ2VudC5nZXQoKSwgMCwgMCwgMCkpOwogCiAgICAgbV9wYWdl
LT5iYWNrRm9yd2FyZExpc3QoKS0+c2V0Q2xpZW50KCZtX2JhY2tGb3J3YXJkTGlzdENsaWVudElt
cGwpOwogICAgIG1fcGFnZS0+c2V0R3JvdXBOYW1lKHBhZ2VHcm91cE5hbWUpOwpAQCAtMTgyNCwx
MiArMTgyOCw2IEBAIFdlYkRldlRvb2xzQWdlbnQqIFdlYlZpZXdJbXBsOjpkZXZUb29sc0FnZW50
KCkKICAgICByZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOwogfQogCi12b2lkIFdlYlZpZXdJ
bXBsOjpzZXREZXZUb29sc0FnZW50KFdlYkRldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdlbnQpCi17
Ci0gICAgQVNTRVJUKCFtX2RldlRvb2xzQWdlbnQuZ2V0KCkpOyAvLyBNYXkgb25seSBzZXQgb25j
ZSEKLSAgICBtX2RldlRvb2xzQWdlbnQuc2V0KHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRQ
cml2YXRlKj4oZGV2VG9vbHNBZ2VudCkpOwotfQotCiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdl
YlZpZXdJbXBsOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkKIHsKICAgICBpZiAoIW1haW5GcmFtZUlt
cGwoKSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUg
MTAwNzU1CmluZGV4IDJlZDA1NTcuLjE5NzgyOTAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAt
MzEsNiArMzEsNyBAQAogI2lmbmRlZiBXZWJWaWV3SW1wbF9oCiAjZGVmaW5lIFdlYlZpZXdJbXBs
X2gKIAorI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViTmF2
aWdhdGlvblBvbGljeS5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAjaW5jbHVkZSAiV2ViU2l6
ZS5oIgpAQCAtNDAsMTAgKzQxLDEwIEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2xpZW50
SW1wbC5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJDb250ZXh0
TWVudUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IkRyYWdDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50SW1wbC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCiAj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9u
UHJlc2VudGVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTcxLDcgKzcyLDcg
QEAgY2xhc3MgQ29udGV4dE1lbnVDbGllbnRJbXBsOwogY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwog
Y2xhc3MgU3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0OwotY2xhc3MgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGU7CitjbGFzcyBXZWJEZXZUb29s
c0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2ViSW1hZ2U7CiBjbGFz
cyBXZWJLZXlib2FyZEV2ZW50OwpAQCAtMTcyLDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5zcGVjdG9yU2V0dGluZyhjb25zdCBXZWJTdHJpbmcmIGtleSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKTsK
ICAgICB2aXJ0dWFsIFdlYkRldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdlbnQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0RGV2VG9vbHNBZ2VudChXZWJEZXZUb29sc0FnZW50Kik7CiAgICAgdmlydHVh
bCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlPYmplY3QoKTsKICAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKAogICAgICAgICBjb25zdCBXZWJOb2Rl
JiwKQEAgLTM0Myw3ICszNDMsNyBAQCBwcml2YXRlOgogICAgICAgRHJhZ092ZXIKICAgICB9Owog
Ci0gICAgV2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KTsKKyAgICBXZWJWaWV3SW1w
bChXZWJWaWV3Q2xpZW50KiBjbGllbnQsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGRldlRvb2xz
Q2xpZW50KTsKICAgICB+V2ViVmlld0ltcGwoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZXZlbnQgd2FzIGFjdHVhbGx5IHByb2Nlc3NlZC4KQEAgLTM4OCwxMSArMzg4LDEzIEBAIHBy
aXZhdGU6CiAgICAgQ29udGV4dE1lbnVDbGllbnRJbXBsIG1fY29udGV4dE1lbnVDbGllbnRJbXBs
OwogICAgIERyYWdDbGllbnRJbXBsIG1fZHJhZ0NsaWVudEltcGw7CiAgICAgRWRpdG9yQ2xpZW50
SW1wbCBtX2VkaXRvckNsaWVudEltcGw7Ci0gICAgSW5zcGVjdG9yQ2xpZW50SW1wbCBtX2luc3Bl
Y3RvckNsaWVudEltcGw7CiAKICAgICBXZWJTaXplIG1fc2l6ZTsKIAogICAgIFdlYlBvaW50IG1f
bGFzdE1vdXNlUG9zaXRpb247CisKKyAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudEltcGw+IG1f
ZGV2VG9vbHNBZ2VudDsKKwogICAgIE93blB0cjxXZWJDb3JlOjpQYWdlPiBtX3BhZ2U7CiAKICAg
ICAvLyBUaGlzIGZsYWcgaXMgc2V0IHdoZW4gYSBuZXcgbmF2aWdhdGlvbiBpcyBkZXRlY3RlZC4g
SXQgaXMgdXNlZCB0byBzYXRpc2Z5CkBAIC00OTMsOCArNDk1LDYgQEAgcHJpdmF0ZToKICAgICAv
LyBUaGUgQXV0b0NvbXBsZXRlIHN1Z2dlc3Rpb25zIHBvcHVwLgogICAgIFJlZlB0cjxXZWJDb3Jl
OjpQb3B1cENvbnRhaW5lcj4gbV9hdXRvY29tcGxldGVQb3B1cDsKIAotICAgIE93blB0cjxXZWJE
ZXZUb29sc0FnZW50UHJpdmF0ZT4gbV9kZXZUb29sc0FnZW50OwotCiAgICAgLy8gV2hldGhlciB0
aGUgd2VidmlldyBpcyByZW5kZXJpbmcgdHJhbnNwYXJlbnRseS4KICAgICBib29sIG1faXNUcmFu
c3BhcmVudDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNl
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyNDRjY2ViLi4wYWQwY2NkCi0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJXb3JrZXJCYXNlLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgV2ViV29ya2VyQmFzZTo6
aW5pdGlhbGl6ZUxvYWRlcihjb25zdCBXZWJVUkwmIHVybCkKICAgICAvLyBsb2FkaW5nIHJlcXVl
c3RzIGZyb20gdGhlIHdvcmtlciBjb250ZXh0IHRvIHRoZSByZXN0IG9mIFdlYktpdCBhbmQgQ2hy
b21pdW0KICAgICAvLyBpbmZyYXN0cnVjdHVyZS4KICAgICBBU1NFUlQoIW1fd2ViVmlldyk7Ci0g
ICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOworICAgIG1fd2ViVmlldyA9IFdlYlZp
ZXc6OmNyZWF0ZSgwLCAwKTsKICAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldE9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChXZWJSdW50aW1lRmVhdHVyZXM6OmlzQXBwbGljYXRp
b25DYWNoZUVuYWJsZWQoKSk7CiAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKHRo
aXMpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwppbmRleCAzOThkMzU4Li44NTFjOTM0
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTYxLDcgKzYxLDYgQEAgZGV2dG9v
bHMkJGRpc3BhdGNoID0gZnVuY3Rpb24ocmVtb3RlTmFtZSwgbWV0aG9kTmFtZSwgcGFyYW0xLCBw
YXJhbTIsIHBhcmFtMykKIGRldnRvb2xzLlRvb2xzQWdlbnQgPSBmdW5jdGlvbigpCiB7CiAgICAg
UmVtb3RlVG9vbHNBZ2VudC5kaWREaXNwYXRjaE9uID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnBy
b2Nlc3NDYWxsYmFjazsKLSAgICBSZW1vdGVUb29sc0FnZW50LmZyYW1lTmF2aWdhdGUgPSB0aGlz
LmZyYW1lTmF2aWdhdGVfLmJpbmQodGhpcyk7CiAgICAgUmVtb3RlVG9vbHNBZ2VudC5kaXNwYXRj
aE9uQ2xpZW50ID0gdGhpcy5kaXNwYXRjaE9uQ2xpZW50Xy5iaW5kKHRoaXMpOwogICAgIHRoaXMu
ZGVidWdnZXJBZ2VudF8gPSBuZXcgZGV2dG9vbHMuRGVidWdnZXJBZ2VudCgpOwogICAgIHRoaXMu
cHJvZmlsZXJBZ2VudF8gPSBuZXcgZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCgpOwpAQCAtMTA3LDI0
ICsxMDYsMTQgQEAgZGV2dG9vbHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZ2V0UHJvZmlsZXJBZ2Vu
dCA9IGZ1bmN0aW9uKCkKIH07CiAKIAotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVybCBm
cmFtZSBuYXZpZ2F0ZWQgdG8uCi0gKiBAc2VlIHRvb2xzX2FnZW50LmgKLSAqIEBwcml2YXRlCi0g
Ki8KLWRldnRvb2xzLlRvb2xzQWdlbnQucHJvdG90eXBlLmZyYW1lTmF2aWdhdGVfID0gZnVuY3Rp
b24odXJsKQorKGZ1bmN0aW9uICgpIHsKK3ZhciBvcmlnID0gV2ViSW5zcGVjdG9yLnJlc2V0Owor
V2ViSW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogewotICAgIHRoaXMucmVzZXQoKTsKLSAg
ICAvLyBEbyBub3QgcmVzZXQgUHJvZmlsZXMgcGFuZWwuCi0gICAgdmFyIHByb2ZpbGVzID0gbnVs
bDsKLSAgICBpZiAoInByb2ZpbGVzIiBpbiBXZWJJbnNwZWN0b3IucGFuZWxzKSB7Ci0gICAgICAg
IHByb2ZpbGVzID0gV2ViSW5zcGVjdG9yLnBhbmVsc1sicHJvZmlsZXMiXTsKLSAgICAgICAgZGVs
ZXRlIFdlYkluc3BlY3Rvci5wYW5lbHNbInByb2ZpbGVzIl07Ci0gICAgfQotICAgIFdlYkluc3Bl
Y3Rvci5yZXNldCgpOwotICAgIGlmIChwcm9maWxlcyAhPT0gbnVsbCkKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVsc1sicHJvZmlsZXMiXSA9IHByb2ZpbGVzOworICAgIGRldnRvb2xzLnRvb2xz
LnJlc2V0KCk7CisgICAgb3JpZy5jYWxsKHRoaXMpOwogfTsKK30pKCk7CiAKIAogLyoqCkBAIC0z
MDIsMzEgKzI5MSw2IEBAIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykK
ICAgICByZXR1cm4gU3RyaW5nLnZzcHJpbnRmKHN0cmluZywgQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAxKSk7CiB9OwogCi0vLyBBY3RpdmF0ZSB3aW5kb3cgdXBvbiBub2Rl
IHNlYXJjaCBjb21wbGV0ZS4gVGhpcyB3aWxsIGdvIGF3YXkgb25jZSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCBpcyBsYW5kZWQuCi0oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9yaWdpbmFsID0gV2Vi
SW5zcGVjdG9yLnNlYXJjaGluZ0Zvck5vZGVXYXNEaXNhYmxlZDsKLSAgICBXZWJJbnNwZWN0b3Iu
c2VhcmNoaW5nRm9yTm9kZVdhc0Rpc2FibGVkID0gZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMucGFuZWxzLmVsZW1lbnRzLl9ub2RlU2VhcmNoQnV0dG9uLnRvZ2dsZWQpCi0gICAg
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIG9y
aWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfQotfSkoKTsKLQotCi0vLyBUaGVy
ZSBpcyBubyBjbGVhciB3YXkgb2Ygc2V0dGluZyBmcmFtZSB0aXRsZSB5ZXQuIFNvIHNuaWZmaW5n
IG1haW4gcmVzb3VyY2UKLS8vIGxvYWQuCi0oZnVuY3Rpb24gT3ZlcnJpZGVVcGRhdGVSZXNvdXJj
ZSgpIHsKLSAgICB2YXIgb3JpZ2luYWxVcGRhdGVSZXNvdXJjZSA9IFdlYkluc3BlY3Rvci51cGRh
dGVSZXNvdXJjZTsKLSAgICBXZWJJbnNwZWN0b3IudXBkYXRlUmVzb3VyY2UgPSBmdW5jdGlvbihp
ZGVudGlmaWVyLCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgb3JpZ2luYWxVcGRhdGVSZXNvdXJj
ZS5jYWxsKHRoaXMsIGlkZW50aWZpZXIsIHBheWxvYWQpOwotICAgICAgICB2YXIgcmVzb3VyY2Ug
PSB0aGlzLnJlc291cmNlc1tpZGVudGlmaWVyXTsKLSAgICAgICAgaWYgKHJlc291cmNlICYmIHJl
c291cmNlLm1haW5SZXNvdXJjZSAmJiByZXNvdXJjZS5maW5pc2hlZCkKLSAgICAgICAgICAgIGRv
Y3VtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZXZlbG9wZXIgVG9vbHMgLSAl
cyIsIHJlc291cmNlLnVybCk7Ci0gICAgfTsKLX0pKCk7Ci0KIAogLyoqIFBlbmRpbmcgV2ViS2l0
IHVwc3RyZWFtIGJ5IGFwYXZsb3YpLiBGaXhlcyBpZnJhbWUgdnMgZHJhZyBwcm9ibGVtLiAqLwog
KGZ1bmN0aW9uKCkKQEAgLTM1Niw5ICszMjAsMTAgQEAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nID0g
ZnVuY3Rpb24oc3RyaW5nKQogfSkoKTsKIAogCi0vLyBXZSBuZWVkIHRvIGhhdmUgYSBwbGFjZSBm
b3IgcG9zdHBvbmVkIHRhc2tzCi0vLyB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiBhbGwg
dGhlIG1lc3NhZ2VzIGJldHdlZW4gYWdlbnQgYW5kIGZyb250ZW5kCi0vLyBhcmUgcHJvY2Vzc2Vk
LgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaHJv
bWl1bSBsYXlvdXQgdGVzdCBoYXJuZXNzIHN1cHBvcnQuIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIFdlYkluc3BlY3Rvci5ydW5BZnRlclBlbmRpbmdE
aXNwYXRjaGVzUXVldWUgPSBbXTsKIApAQCAtMzc1LDE5ICszNDAsMTEgQEAgV2ViSW5zcGVjdG9y
LnF1ZXVlc0FyZUVtcHR5ID0gZnVuY3Rpb24oKQogICAgICAgICBjb3B5W2ldLmNhbGwodGhpcyk7
CiB9OwogCi0oZnVuY3Rpb24oKQotewotdmFyIG9yaWdpbmFsQWRkVG9GcmFtZSA9IEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWU7Ci1JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lID0gZnVuY3Rpb24oaWRlbnRpZmllciwgZWxl
bWVudCkKLXsKLSAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VzW2lkZW50
aWZpZXJdOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBvcmlnaW5h
bEFkZFRvRnJhbWUuY2FsbCh0aGlzLCBpZGVudGlmaWVyLCByZXNvdXJjZS5taW1lVHlwZSwgZWxl
bWVudCk7Ci19OwotfSkoKTsKIAotLy8gQ2hyb21pdW0gdGhlbWUgc3VwcG9ydC4KKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaHJvbWl1bSB0aGVtZSBzdXBwb3J0LiAvLworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwogV2ViSW5zcGVjdG9yLnNldFRvb2xiYXJDb2xv
cnMgPSBmdW5jdGlvbihiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yKQogewogICAgIGlmICghV2ViSW5z
cGVjdG9yLl90aGVtZVN0eWxlRWxlbWVudCkgewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZU
b29sc0hvc3RTdHViLmpzCmluZGV4IGRhNTkyOWEuLjgwNmJmNmEgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcworKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMKQEAgLTM0LDI3NyArMzQsOCBAQAogICovCiAK
IGlmICghd2luZG93WyJSZW1vdGVEZWJ1Z2dlckFnZW50Il0pIHsKLQotLyoqCi0gKiBGSVhNRTog
Y2hhbmdlIGZpZWxkIG5hbWluZyBzdHlsZSB0byB1c2UgdHJhaWxpbmcgdW5kZXJzY29yZS4KLSAq
IEBjb25zdHJ1Y3RvcgotICovCi1SZW1vdGVEZWJ1Z2dlckFnZW50U3R1YiA9IGZ1bmN0aW9uKCkK
LXsKLX07Ci0KLQotUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIucHJvdG90eXBlLmdldENvbnRleHRJ
ZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LnNldENvbnRleHRJZCgz
KTsKLX07Ci0KLQotUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIucHJvdG90eXBlLnByb2Nlc3NEZWJ1
Z0NvbW1hbmRzID0gZnVuY3Rpb24oKQotewotfTsKLQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKi8KLVJlbW90ZVByb2ZpbGVyQWdlbnRTdHViID0gZnVuY3Rpb24oKQotewotfTsKLQotCi1S
ZW1vdGVQcm9maWxlckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVz
ID0gZnVuY3Rpb24oKQotewotICAgIFByb2ZpbGVyU3R1YkhlbHBlci5HZXRJbnN0YW5jZSgpLmdl
dEFjdGl2ZVByb2ZpbGVyTW9kdWxlcygpOwotfTsKLQotCi1SZW1vdGVQcm9maWxlckFnZW50U3R1
Yi5wcm90b3R5cGUuZ2V0TG9nTGluZXMgPSBmdW5jdGlvbihwb3MpCi17Ci0gICAgUHJvZmlsZXJT
dHViSGVscGVyLkdldEluc3RhbmNlKCkuZ2V0TG9nTGluZXMocG9zKTsKLX07Ci0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqLwotUmVtb3RlVG9vbHNBZ2VudFN0dWIgPSBmdW5jdGlvbigpCi17
Ci19OwotCi0KLVJlbW90ZVRvb2xzQWdlbnRTdHViLnByb3RvdHlwZS5kaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQgPSBmdW5jdGlvbigpCi17Ci19OwotCi0KLVJlbW90ZVRvb2xzQWdlbnRTdHViLnBy
b3RvdHlwZS5kaXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlciA9IGZ1bmN0aW9uKCkKLXsKLX07
Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotUHJvZmlsZXJTdHViSGVscGVyID0gZnVu
Y3Rpb24oKQotewotICAgIHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyA9IGRldnRvb2xzLlBy
b2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9OT05FOwotICAgIHRo
aXMuaGVhcFByb2ZTYW1wbGVfID0gMDsKLSAgICB0aGlzLmxvZ18gPSAnJzsKLX07Ci0KLQotUHJv
ZmlsZXJTdHViSGVscGVyLkdldEluc3RhbmNlID0gZnVuY3Rpb24oKQotewotICAgIGlmICghUHJv
ZmlsZXJTdHViSGVscGVyLmluc3RhbmNlXykKLSAgICAgICAgUHJvZmlsZXJTdHViSGVscGVyLmlu
c3RhbmNlXyA9IG5ldyBQcm9maWxlclN0dWJIZWxwZXIoKTsKLSAgICByZXR1cm4gUHJvZmlsZXJT
dHViSGVscGVyLmluc3RhbmNlXzsKLX07Ci0KLQotUHJvZmlsZXJTdHViSGVscGVyLnByb3RvdHlw
ZS5TdG9wUHJvZmlsaW5nID0gZnVuY3Rpb24obW9kdWxlcykKLXsKLSAgICB0aGlzLmFjdGl2ZVBy
b2ZpbGVyTW9kdWxlc18gJj0gfm1vZHVsZXM7Ci19OwotCi0KLVByb2ZpbGVyU3R1YkhlbHBlci5w
cm90b3R5cGUuU3RhcnRQcm9maWxpbmcgPSBmdW5jdGlvbihtb2R1bGVzKQotewotICAgIHZhciBw
cm9mTW9kdWxlcyA9IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzOwotICAg
IGlmIChtb2R1bGVzICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1Qp
IHsKLSAgICAgICAgaWYgKG1vZHVsZXMgJiBwcm9mTW9kdWxlcy5QUk9GSUxFUl9NT0RVTEVfSEVB
UF9TVEFUUykgewotICAgICAgICAgICAgdGhpcy5sb2dfICs9Ci0gICAgICAgICAgICAgICAgJ2hl
YXAtc2FtcGxlLWJlZ2luLCJIZWFwIiwiYWxsb2NhdGVkIiwnICsKLSAgICAgICAgICAgICAgICAg
ICAgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSArICdcbicgKwotICAgICAgICAgICAgICAgICdoZWFw
LXNhbXBsZS1zdGF0cywiSGVhcCIsImFsbG9jYXRlZCIsMTAwMDAsMTAwMFxuJzsKLSAgICAgICAg
ICAgIHRoaXMubG9nXyArPQotICAgICAgICAgICAgICAgICdoZWFwLXNhbXBsZS1pdGVtLFNUUklO
R19UWVBFLDEwMCwxMDAwXG4nICsKLSAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxD
T0RFX1RZUEUsMTAsMjAwXG4nICsKLSAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxN
QVBfVFlQRSwyMCwzNTBcbic7Ci0gICAgICAgICAgICB0aGlzLmxvZ18gKz0gUHJvZmlsZXJTdHVi
SGVscGVyLkhlYXBTYW1wbGVzW3RoaXMuaGVhcFByb2ZTYW1wbGVfKytdOwotICAgICAgICAgICAg
dGhpcy5oZWFwUHJvZlNhbXBsZV8gJT0gUHJvZmlsZXJTdHViSGVscGVyLkhlYXBTYW1wbGVzLmxl
bmd0aDsKLSAgICAgICAgICAgIHRoaXMubG9nXyArPSAnaGVhcC1zYW1wbGUtZW5kLCJIZWFwIiwi
YWxsb2NhdGVkIlxuJzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtb2R1
bGVzICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0NQVSkKLSAgICAgICAgICAgIHRoaXMu
bG9nXyArPSBQcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXI7Ci0gICAgICAgIHRo
aXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyB8PSBtb2R1bGVzOwotICAgIH0KLX07Ci0KLQotUHJv
ZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5nZXRBY3RpdmVQcm9maWxlck1vZHVsZXMgPSBmdW5j
dGlvbigpCi17Ci0gICAgdmFyIHNlbGYgPSB0aGlzOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7Ci0gICAgICAgIFJlbW90ZVByb2ZpbGVyQWdlbnQuZGlkR2V0QWN0aXZlUHJvZmlsZXJNb2R1
bGVzKHNlbGYuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyk7Ci0gICAgfSwgMTAwKTsKLX07Ci0KLQot
UHJvZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5nZXRMb2dMaW5lcyA9IGZ1bmN0aW9uKHBvcykK
LXsKLSAgICB2YXIgcHJvZk1vZHVsZXMgPSBkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVy
TW9kdWxlczsKLSAgICB2YXIgbG9nTGluZXMgPSB0aGlzLmxvZ18uc3Vic3RyKHBvcyk7Ci0gICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgUmVtb3RlUHJvZmlsZXJBZ2VudC5kaWRH
ZXRMb2dMaW5lcyhwb3MgKyBsb2dMaW5lcy5sZW5ndGgsIGxvZ0xpbmVzKTsKLSAgICB9LCAxMDAp
OwotfTsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXIgPQotICAgICdw
cm9maWxlcixiZWdpbiwxXG4nICsKLSAgICAncHJvZmlsZXIscmVzdW1lXG4nICsKLSAgICAnY29k
ZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDEwMDAsMjU2LCJ0ZXN0MSBodHRwOi8vYWFhLmpzOjEi
XG4nICsKLSAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDIwMDAsMjU2LCJ0ZXN0MiBo
dHRwOi8vYmJiLmpzOjIiXG4nICsKLSAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDMw
MDAsMjU2LCJ0ZXN0MyBodHRwOi8vY2NjLmpzOjMiXG4nICsKLSAgICAndGljaywweDEwMTAsMHgw
LDNcbicgKwotICAgICd0aWNrLDB4MjAyMCwweDAsMywweDEwMTBcbicgKwotICAgICd0aWNrLDB4
MjAyMCwweDAsMywweDEwMTBcbicgKwotICAgICd0aWNrLDB4MzAxMCwweDAsMywweDIwMjAsIDB4
MTAxMFxuJyArCi0gICAgJ3RpY2ssMHgyMDIwLDB4MCwzLDB4MTAxMFxuJyArCi0gICAgJ3RpY2ss
MHgyMDMwLDB4MCwzLDB4MjAyMCwgMHgxMDEwXG4nICsKLSAgICAndGljaywweDIwMjAsMHgwLDMs
MHgxMDEwXG4nICsKLSAgICAndGljaywweDEwMTAsMHgwLDNcbicgKwotICAgICdwcm9maWxlcixw
YXVzZVxuJzsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIuSGVhcFNhbXBsZXMgPSBbCi0gICAgJ2hl
YXAtanMtY29ucy1pdGVtLGZvbywxLDEwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLGJh
ciwyMCwyMDAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sT2JqZWN0LDUsMTAwXG4nICsK
LSAgICAnaGVhcC1qcy1yZXQtaXRlbSxmb28sYmFyOzNcbicgKwotICAgICdoZWFwLWpzLXJldC1p
dGVtLGJhcixmb287NVxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2JqZWN0OjB4MTIzNCwo
cm9vdHMpOzFcbicsCi0KLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sZm9vLDIwMDAsMjAwMDAwXG4n
ICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDEwLDEwMDBcbicgKwotICAgICdoZWFwLWpz
LWNvbnMtaXRlbSxPYmplY3QsNiwxMjBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxi
YXI7NyxPYmplY3Q6MHgxMjM0OzEwXG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9v
OzEwLE9iamVjdDoweDEyMzQ7MTBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDow
eDEyMzQsKHJvb3RzKTsxXG4nLAotCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLGZvbywxNSwxNTAw
XG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDE1LDE1MDBcbicgKwotICAgICdoZWFw
LWpzLWNvbnMtaXRlbSxPYmplY3QsNSwxMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxB
cnJheSwzLDEwMDBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxiYXI7MyxBcnJheTow
eDU2Nzg7MVxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGZvbzs1LE9iamVjdDoweDEy
MzQ7OCxPYmplY3Q6MHg1Njc4OzJcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDow
eDEyMzQsKHJvb3RzKTsxLE9iamVjdDoweDU2Nzg7MlxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0
ZW0sT2JqZWN0OjB4NTY3OCwoZ2xvYmFsIHByb3BlcnR5KTszLE9iamVjdDoweDEyMzQ7NVxuJyAr
Ci0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sQXJyYXk6MHg1Njc4LChnbG9iYWwgcHJvcGVydHkpOzMs
QXJyYXk6MHg1Njc4OzJcbicsCi0KLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBc
bicgKwotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxPYmplY3QsNiwxMjBcbicgKwotICAgICdoZWFw
LWpzLXJldC1pdGVtLGJhcixmb287NSxPYmplY3Q6MHgxMjM0OzEsT2JqZWN0OjB4MTIzNTszXG4n
ICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxPYmplY3Q6MHgxMjM0LChnbG9iYWwgcHJvcGVydHkp
OzNcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEyMzUsKGdsb2JhbCBwcm9w
ZXJ0eSk7NVxuJywKLQotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxmb28sMTUsMTUwMFxuJyArCi0g
ICAgJ2hlYXAtanMtY29ucy1pdGVtLGJhciwxNSwxNTAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25z
LWl0ZW0sQXJyYXksMTAsMTAwMFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sZm9vLGJhcjsx
LEFycmF5OjB4NTY3ODsxXG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9vOzVcbicg
KwotICAgICdoZWFwLWpzLXJldC1pdGVtLEFycmF5OjB4NTY3OCwocm9vdHMpOzNcbicsCi0KLSAg
ICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMt
aXRlbSxiYXosMTUsMTUwMFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGJhejszXG4n
ICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXosYmFyOzNcbicKLV07Ci0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqLwotUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3JTdHViID0gZnVu
Y3Rpb24oKQotewotfTsKLQotCi1SZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIucHJv
dG90eXBlLkRlYnVnZ2VyQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZCkKLXsKLSAgICBpZiAoJ3sic2Vx
IjoyLCJ0eXBlIjoicmVxdWVzdCIsImNvbW1hbmQiOiJzY3JpcHRzIiwiYXJndW1lbnRzIjp7Imlu
Y2x1ZGVTb3VyY2UiOmZhbHNlfX0nID09PSBjbWQpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlMSA9
Ci0gICAgICAgICAgICAneyJzZXEiOjUsInJlcXVlc3Rfc2VxIjoyLCJ0eXBlIjoicmVzcG9uc2Ui
LCJjb21tYW5kIjoic2NyaXB0cyIsIicgKwotICAgICAgICAgICAgJ3N1Y2Nlc3MiOnRydWUsImJv
ZHkiOlt7ImhhbmRsZSI6NjEsInR5cGUiOiJzY3JpcHQiLCJuYW1lIjoiJyArCi0gICAgICAgICAg
ICAnaHR0cDovL3d3dy9+dGVzdC90LmpzIiwiaWQiOjU5LCJsaW5lT2Zmc2V0IjowLCJjb2x1bW5P
ZmZzZXQiOjAsJyArCi0gICAgICAgICAgICAnImxpbmVDb3VudCI6MSwic291cmNlU3RhcnQiOiJm
dW5jdGlvbiBmaWIobikgeyIsInNvdXJjZUxlbmd0aCI6MzAwLCcgKwotICAgICAgICAgICAgJyJz
Y3JpcHRUeXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsicmVmIjo2MH19XSwi
cmVmcyI6W3snICsKLSAgICAgICAgICAgICciaGFuZGxlIjo2MCwidHlwZSI6ImNvbnRleHQiLCJk
YXRhIjoicGFnZSwzIn1dLCJydW5uaW5nIjpmYWxzZX0nOwotICAgICAgICB0aGlzLnNlbmRSZXNw
b25zZV8ocmVzcG9uc2UxKTsKLSAgICB9IGVsc2UgaWYgKCd7InNlcSI6MywidHlwZSI6InJlcXVl
c3QiLCJjb21tYW5kIjoic2NyaXB0cyIsImFyZ3VtZW50cyI6eyJpZHMiOls1OV0sImluY2x1ZGVT
b3VyY2UiOnRydWV9fScgPT09IGNtZCkgewotICAgICAgICB0aGlzLnNlbmRSZXNwb25zZV8oCi0g
ICAgICAgICAgICAneyJzZXEiOjgsInJlcXVlc3Rfc2VxIjozLCJ0eXBlIjoicmVzcG9uc2UiLCJj
b21tYW5kIjoic2NyaXB0cyIsJyArCi0gICAgICAgICAgICAnInN1Y2Nlc3MiOnRydWUsImJvZHki
Olt7ImhhbmRsZSI6MSwidHlwZSI6InNjcmlwdCIsIm5hbWUiOicgKwotICAgICAgICAgICAgJyJo
dHRwOi8vd3d3L350ZXN0L3QuanMiLCJpZCI6NTksImxpbmVPZmZzZXQiOjAsImNvbHVtbk9mZnNl
dCI6MCwnICsKLSAgICAgICAgICAgICcibGluZUNvdW50IjoxLCJzb3VyY2UiOiJmdW5jdGlvbiBm
aWIobikge3JldHVybiBuKzE7fSIsJyArCi0gICAgICAgICAgICAnInNvdXJjZUxlbmd0aCI6MjQ0
LCJzY3JpcHRUeXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsnICsKLSAgICAg
ICAgICAgICcicmVmIjowfX1dLCJyZWZzIjpbeyJoYW5kbGUiOjAsInR5cGUiOiJjb250ZXh0Iiwi
ZGF0YSI6InBhZ2UsM31dLCInICsKLSAgICAgICAgICAgICcicnVubmluZyI6ZmFsc2V9Jyk7Ci0g
ICAgfSBlbHNlIGlmIChjbWQuaW5kZXhPZignImNvbW1hbmQiOiJwcm9maWxlIicpICE9PSAtMSkg
ewotICAgICAgICB2YXIgY21kT2JqID0gSlNPTi5wYXJzZShjbWQpOwotICAgICAgICBpZiAoY21k
T2JqLmFyZ3VtZW50cy5jb21tYW5kID09PSAicmVzdW1lIikKLSAgICAgICAgICAgIFByb2ZpbGVy
U3R1YkhlbHBlci5HZXRJbnN0YW5jZSgpLlN0YXJ0UHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5h
cmd1bWVudHMubW9kdWxlcykpOwotICAgICAgICBlbHNlIGlmIChjbWRPYmouYXJndW1lbnRzLmNv
bW1hbmQgPT09ICJwYXVzZSIpCi0gICAgICAgICAgICBQcm9maWxlclN0dWJIZWxwZXIuR2V0SW5z
dGFuY2UoKS5TdG9wUHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5hcmd1bWVudHMubW9kdWxlcykp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWJ1Z1ByaW50KCJVbmV4cGVjdGVkIHByb2Zp
bGUgY29tbWFuZDogIiArIGNtZE9iai5hcmd1bWVudHMuY29tbWFuZCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGRlYnVnUHJpbnQoIlVuZXhwZWN0ZWQgY29tbWFuZDogIiArIGNtZCk7Ci19OwotCi0K
LVJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1Yi5wcm90b3R5cGUuRGVidWdnZXJQYXVz
ZVNjcmlwdCA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotUmVtb3RlRGVidWdnZXJDb21tYW5kRXhl
Y3V0b3JTdHViLnByb3RvdHlwZS5zZW5kUmVzcG9uc2VfID0gZnVuY3Rpb24ocmVzcG9uc2UpCi17
Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgUmVtb3RlRGVidWdnZXJBZ2Vu
dC5kZWJ1Z2dlck91dHB1dChyZXNwb25zZSk7Ci0gICAgfSwgMCk7Ci19OwotCi0KLURldlRvb2xz
SG9zdFN0dWIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5pc1N0dWIgPSB0cnVlOwotfTsKLURl
dlRvb2xzSG9zdFN0dWIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0
b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZTsKLQotCi1EZXZUb29sc0hvc3RTdHViLnByb3Rv
dHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotRGV2VG9vbHNIb3N0U3R1Yi5wcm90
b3R5cGUuc2V0dGluZyA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotRGV2VG9vbHNIb3N0U3R1Yi5w
cm90b3R5cGUuc2V0U2V0dGluZyA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotd2luZG93WyJSZW1v
dGVEZWJ1Z2dlckFnZW50Il0gPSBuZXcgUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIoKTsKLXdpbmRv
d1siUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IiXSA9IG5ldyBSZW1vdGVEZWJ1Z2dlckNv
bW1hbmRFeGVjdXRvclN0dWIoKTsKLXdpbmRvd1siUmVtb3RlUHJvZmlsZXJBZ2VudCJdID0gbmV3
IFJlbW90ZVByb2ZpbGVyQWdlbnRTdHViKCk7Ci13aW5kb3dbIlJlbW90ZVRvb2xzQWdlbnQiXSA9
IG5ldyBSZW1vdGVUb29sc0FnZW50U3R1YigpOwotSW5zcGVjdG9yRnJvbnRlbmRIb3N0ID0gbmV3
IERldlRvb2xzSG9zdFN0dWIoKTsKLQorICAgIHdpbmRvd1siUmVtb3RlRGVidWdnZXJBZ2VudCJd
ID0geyBzZXREZWJ1Z2dlclNjcmlwdFNvdXJjZTogZnVuY3Rpb24oKSB7fSB9OworICAgIHdpbmRv
d1siUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IiXSA9IHt9OworICAgIHdpbmRvd1siUmVt
b3RlUHJvZmlsZXJBZ2VudCJdID0ge307CisgICAgd2luZG93WyJSZW1vdGVUb29sc0FnZW50Il0g
PSB7IGRpc3BhdGNoT25JbmplY3RlZFNjcmlwdDogZnVuY3Rpb24oKSB7fSB9OwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKaW5kZXggMzBjYWFmMi4uYmM2ZGM4NyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcworKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCkBAIC00OSw2NSArNDks
MTIgQEAgSW5zcGVjdG9yQ29udHJvbGxlckRpc3BhdGNoZXIuZGlzcGF0Y2ggPSBmdW5jdGlvbihm
dW5jdGlvbk5hbWUsIGpzb25fYXJncykKIH07CiAKIC8qKgotICogU3BlY2lhbCBjb250cm9sbGVy
IG9iamVjdCBmb3IgQVBVIHJlbGF0ZWQgbWVzc2FnZXMuIE91dGdvaW5nIG1lc3NhZ2VzCi0gKiBh
cmUgc2VudCB0byB0aGlzIG9iamVjdCBpZiB0aGUgQXB1QWdlbnREaXNwYXRjaGVyIGlzIGVuYWJs
ZWQuCi0gKiovCi12YXIgQXB1QWdlbnREaXNwYXRjaGVyID0geyBlbmFibGVkIDogZmFsc2UgfTsK
LQotLyoqCi0gKiBEaXNwYXRjaGVzIG1lc3NhZ2VzIHRvIEFQVS4gVGhpcyBmaWx0ZXJzIGFuZCB0
cmFuc2Zvcm1zCi0gKiBvdXRnb2luZyBtZXNzYWdlcyB0aGF0IGFyZSB1c2VkIGJ5IEFQVS4KLSAq
IEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgbmFtZSBvZiB0aGUgZGlzcGF0Y2ggbWV0aG9kLgotICoq
LwotQXB1QWdlbnREaXNwYXRjaGVyLmRpc3BhdGNoVG9BcHUgPSBmdW5jdGlvbihtZXRob2QsIGFy
Z3MpCi17Ci0gICAgaWYgKG1ldGhvZCAhPT0gImFkZFJlY29yZFRvVGltZWxpbmUiICYmIG1ldGhv
ZCAhPT0gInVwZGF0ZVJlc291cmNlIiAmJiBtZXRob2QgIT09ICJhZGRSZXNvdXJjZSIpCi0gICAg
ICAgIHJldHVybjsKLSAgICAvLyBUT0RPKGtub3J0b24pOiBUcmFuc2Zvcm0gYXJncyBzbyB0aGV5
IGNhbiBiZSB1c2VkCi0gICAgLy8gYnkgQVBVLgotICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3Bh
dGNoVG9BcHUoSlNPTi5zdHJpbmdpZnkoYXJncykpOwotfTsKLQotLyoqCiAgKiBUaGlzIGlzIGNh
bGxlZCBieSB0aGUgSW5zcGVjdG9yRnJvbnRlbmQgZm9yIHNlcmlhbGl6YXRpb24uCiAgKiBXZSBz
ZXJpYWxpemUgdGhlIGNhbGwgYW5kIHNlbmQgaXQgdG8gdGhlIGNsaWVudCBvdmVyIHRoZSBJUEMK
ICAqIHVzaW5nIGRpc3BhdGNoT3V0IGJvdW5kIG1ldGhvZC4KICAqLwogZnVuY3Rpb24gZGlzcGF0
Y2gobWV0aG9kLCB2YXJfYXJncykgewotICAgIC8vIEhhbmRsZSBhbGwgbWVzc2FnZXMgd2l0aCBu
b24tcHJpbWl0aWV2ZSBhcmd1bWVudHMgaGVyZS4KICAgICB2YXIgYXJncyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0KLSAgICBpZiAobWV0aG9kID09PSAiaW5zcGVj
dGVkV2luZG93Q2xlYXJlZCIgfHwgbWV0aG9kID09PSAicmVzZXQiIHx8IG1ldGhvZCA9PT0gInNl
dEF0dGFjaGVkV2luZG93IikgewotICAgICAgICAvLyBGaWx0ZXIgb3V0IG1lc3NhZ2VzIHdlIGRv
bid0IG5lZWQgaGVyZS4KLSAgICAgICAgLy8gV2UgZG8gaXQgb24gdGhlIHNlbmRlciBzaWRlIHNp
bmNlIHRoZXkgbWF5IGhhdmUgbm9uLXNlcmlhbGl6YWJsZQotICAgICAgICAvLyBwYXJhbWV0ZXJz
LgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU25pZmYgc29tZSBpbnNwZWN0b3Ig
Y29udHJvbGxlciBzdGF0ZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHN1cHBvcnQKLSAgICAvLyBjcm9z
cy1uYXZpZ2F0aW9uIGluc3RydW1lbnRhdGlvbi4gS2VlcCBuYW1lcyBpbiBzeW5jIHdpdGgKLSAg
ICAvLyB3ZWJkZXZ0b29sc2FnZW50X2ltcGwuCi0gICAgaWYgKG1ldGhvZCA9PT0gInRpbWVsaW5l
UHJvZmlsZXJXYXNTdGFydGVkIikKLSAgICAgICAgRGV2VG9vbHNBZ2VudEhvc3QucnVudGltZUZl
YXR1cmVTdGF0ZUNoYW5nZWQoInRpbWVsaW5lLXByb2ZpbGVyIiwgdHJ1ZSk7Ci0gICAgZWxzZSBp
ZiAobWV0aG9kID09PSAidGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQiKQotICAgICAgICBEZXZU
b29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgidGltZWxpbmUtcHJvZmls
ZXIiLCBmYWxzZSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09PSAicmVzb3VyY2VUcmFja2luZ1dh
c0VuYWJsZWQiKQotICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRl
Q2hhbmdlZCgicmVzb3VyY2UtdHJhY2tpbmciLCB0cnVlKTsKLSAgICBlbHNlIGlmIChtZXRob2Qg
PT09ICJyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQiKQotICAgICAgICBEZXZUb29sc0FnZW50
SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgicmVzb3VyY2UtdHJhY2tpbmciLCBmYWxz
ZSk7Ci0KLSAgICBpZiAoQXB1QWdlbnREaXNwYXRjaGVyLmVuYWJsZWQpIHsKLSAgICAgICAgQXB1
QWdlbnREaXNwYXRjaGVyLmRpc3BhdGNoVG9BcHUobWV0aG9kLCBhcmdzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIHZhciBjYWxsID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7Ci0gICAg
RGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0Y2goY2FsbCk7CisgICAgRGV2VG9vbHNBZ2VudEhvc3Qu
ZGlzcGF0Y2goY2FsbCwgbWV0aG9kLCBhcmdzKTsKIH07Ci0KLWZ1bmN0aW9uIGNsb3NlKCkgewot
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIEluc3BlY3RvckZyb250ZW5kIGNsb3Nl
cyBpbiBsYXlvdXQgdGVzdHMuCi19Ci0KLWZ1bmN0aW9uIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQo
KSB7Ci19CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRy
b2xsZXJJbXBsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVy
SW1wbC5qcwppbmRleCAwZjI4MjMxLi43YjliNWE1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAgLTEyMCwyNCArMTIwLDYgQEAg
ZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCiBkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckJhY2tlbmRTdHViLnByb3RvdHlwZTsKIAogCi0vKioKLSAqIEBvdmVycmlkZQotICovCi1k
ZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuZGVidWdnZXJFbmFibGVkID0g
ZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0cnVlOwotfTsKLQotCi0vKioKLSAqIEBvdmVycmlk
ZQotICovCi1kZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucHJvZmlsZXJF
bmFibGVkID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0cnVlOwotfTsKLQotCiBpZiAoIXdp
bmRvdy52OFNjcmlwdERlYnVnU2VydmVyRW5hYmxlZCkgewogCiBkZXZ0b29scy5JbnNwZWN0b3JC
YWNrZW5kSW1wbC5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBs
aW5lLCBlbmFibGVkLCBjb25kaXRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59554</attachid>
            <date>2010-06-23 12:55:30 -0700</date>
            <delta_ts>2010-06-24 04:51:25 -0700</delta_ts>
            <desc>[PATCH] Same with InspectorClientImpl files actually removed.</desc>
            <filename>cleanup</filename>
            <type>text/plain</type>
            <size>56148</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjliYjU3YS4uNzlmNTlkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJl
dHRlciBEZXZUb29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAg
ICAtIFJlbW92ZWQgYSBidW5jaCBvZiB1bnVzZWQgbWV0aG9kcyBmcm9tIGFsbCBvdmVyIHRoZSBw
bGFjZQorICAgICAgICAtIEFkZGVkIGNsaWVudCBjYWxsYmFja3MgZm9yIHN0YXRlcyBzdXJ2aXZp
bmcgbmF2aWdhdGlvbgorICAgICAgICAtIEltcGxlbWVudGVkIG1vcmUgdXNlci1mcmllbmRseSBz
dHViIGZvciBJbnNwZWN0b3JGcm9udGVuZEhvc3QucGxhdGZvcm0KKworICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2xpZW50OjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVSZXNvdXJjZVRyYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRp
bmdzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qczoK
KyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5
cGUucGxhdGZvcm0pOgorCiAyMDEwLTA2LTIyICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCmluZGV4IDJjZTNhMDkuLjYxOTAwYmIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKworICAgIC8vIE5hdmlnYXRpb24gY2FuIGNhdXNl
IHNvbWUgV2ViS2l0IGltcGxlbWVudGF0aW9ucyB0byBjaGFuZ2UgdGhlIHZpZXcgLyBwYWdlIC8g
aW5zcGVjdG9yIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgICAgLy8gSG93ZXZlciwgdGhlcmUgYXJl
IHNvbWUgaW5zcGVjdG9yIGNvbnRyb2xsZXIgc3RhdGVzIHRoYXQgc2hvdWxkIHN1cnZpdmUgbmF2
aWdhdGlvbiAoc3VjaCBhcyB0cmFja2luZyByZXNvdXJjZXMKKyAgICAvLyBvciByZWNvcmRpbmcg
dGltZWxpbmUpLiBGb2xsb3dpbmcgY2FsbGJhY2tzIGFsbG93IGVtYmVkZGVycyB0byB0cmFjayB0
aGVzZSBzdGF0ZXMuCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVk
KCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKSB7
IH07CisgICAgdmlydHVhbCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCkgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCB0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpIHsgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1ZWFjOTM2Li5j
MGRiZTk3Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMTAxLDYg
KzExMDEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVJlc291cmNlVHJhY2tp
bmcoYm9vbCBhbHdheXMsIGJvb2wgcmVsb2FkKQogICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQgPSB0cnVlOwogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT5yZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNraW5n
V2FzRW5hYmxlZCgpOwogCiAgICAgaWYgKHJlbG9hZCkKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHRydWUp
OwpAQCAtMTExOCw2ICsxMTE5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxl
UmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKICAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkID0gZmFsc2U7CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnJl
c291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNr
aW5nV2FzRGlzYWJsZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVT
ZXR0aW5nc0xvYWRlZCgpCkBAIC0xMTI5LDYgKzExMzEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICBTdHJpbmcgcmVzb3VyY2VUcmFja2lu
ZyA9IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYg
KHJlc291cmNlVHJhY2tpbmcgPT0gInRydWUiKQogICAgICAgICBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQo
KTsKIAogICAgIFN0cmluZyBtb25pdG9yaW5nWEhSID0gc2V0dGluZyhtb25pdG9yaW5nWEhSU2V0
dGluZ05hbWUpOwogICAgIGlmIChtb25pdG9yaW5nWEhSID09ICJ0cnVlIikKQEAgLTExNDYsNiAr
MTE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVy
KCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChtX2Zy
b250ZW5kLmdldCgpKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKKyAgICBtX2NsaWVudC0+dGltZWxpbmVQcm9m
aWxlcldhc1N0YXJ0ZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGlt
ZWxpbmVQcm9maWxlcigpCkBAIC0xMTU5LDYgKzExNjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSAwOwog
ICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVy
V2FzU3RvcHBlZCgpOworICAgIG1fY2xpZW50LT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgp
OwogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKaW5kZXggMjg3ZTY3Zi4uNTZlZDFlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcApAQCAtMTg0LDE0ICsxODQsNiBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZShsb25nIG5vZGVJZCkKICAgICBmdW5jdGlvbi5jYWxsKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0
YWNoZWQpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVk
V2luZG93Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwotICAgIGZ1
bmN0aW9uLmNhbGwoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2hvd1BhbmVsKGlu
dCBwYW5lbCkKIHsKICAgICBjb25zdCBjaGFyKiBzaG93RnVuY3Rpb25OYW1lOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggZDMwZTIzYy4uNjIwNDg3MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC03Nyw3ICs3Nyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRHZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVGb2N1c2VkTm9k
ZShsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRh
Y2hlZCk7CiAgICAgICAgIHZvaWQgc2hvd1BhbmVsKGludCBwYW5lbCk7CiAgICAgICAgIHZvaWQg
cG9wdWxhdGVJbnRlcmZhY2UoKTsKICAgICAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDAx
NmQ3NDguLjFhZTMyYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5zcGVjdG9yQmFja2VuZFN0dWIuanMKQEAgLTc5LDEwICs3OSw2IEBAIFdlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgewogICAgIH0sCiAKLSAgICBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodDogZnVuY3Rpb24oaGVpZ2h0KQotICAgIHsKLSAgICB9LAot
CiAgICAgbW92ZUJ5VW5yZXN0cmljdGVkOiBmdW5jdGlvbih4LCB5KQogICAgIHsKICAgICB9LApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qcwppbmRleCA1NDU2MDY5Li4zOWJiZTAyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpA
QCAtNDAsNyArNDAsMTMgQEAgV2ViSW5zcGVjdG9yLl9wbGF0Zm9ybUZsYXZvciA9IFdlYkluc3Bl
Y3Rvci5QbGF0Zm9ybUZsYXZvci5NYWNMZW9wYXJkOwogV2ViSW5zcGVjdG9yLkluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogICAgIHBsYXRmb3JtOiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICByZXR1cm4gIm1hYyI7CisgICAgICAgIHZhciBtYXRjaCA9IG5hdmlnYXRv
ci51c2VyQWdlbnQubWF0Y2goL1dpbmRvd3MgTlQvKTsKKyAgICAgICAgaWYgKG1hdGNoKQorICAg
ICAgICAgICAgcmV0dXJuICJ3aW5kb3dzIjsKKyAgICAgICAgbWF0Y2ggPSBuYXZpZ2F0b3IudXNl
ckFnZW50Lm1hdGNoKC9NYWMgT1MgWC8pOworICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gIm1hYyI7CisgICAgICAgIHJldHVybiAibGludXgiOwogICAgIH0sCiAKICAgICBw
b3J0OiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5OGYxMTMxLi5lYzYxYmUxIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJldHRlciBEZXZU
b29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAgICAtIE1lcmdl
ZCBJbnNwZWN0b3JDbGllbnQgaW1wbGVtZW50YXRpb24gaW50byBXZWJEZXZUb29sc0FnZW50Cisg
ICAgICAgIC0gQ2hhbmdlZCB0aGUgd2F5IFdlYkRldlRvb2xzQWdlbnQgaXMgaW5pdGlhbGl6ZWQg
KHdpbGwgYnJlYWsgY2hyb21pdW0gYm90LCBuZWVkcyBjb29yZGluYXRlZCBsYW5kaW5nKQorICAg
ICAgICAtIFJlbW92ZWQgYSBsb3Qgb2YgbGVnYWN5IGNvZGUgZnJvbSBXZWJEZXZUb29sc0FnZW50
SW1wbAorICAgICAgICAtIFJlbW92ZWQgYSBsb3Qgb2Ygb3ZlcnJpZGVzIGZyb20gRGV2VG9vbHMu
anMKKyAgICAgICAgLSBTaW1wbGlmaWVkIGRldnRvb2xzIHN0dWJzCisgICAgICAgIC0gR290IHJp
ZCBvZiBhbGwgbG9naWMgZnJvbSB3aXRoaW4gSW5qZWN0RGlzcGF0Y2guanMKKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNo
RGlkQ29tbWl0TG9hZCk6CisgICAgICAgICogc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogc3JjL1Rvb2xzQWdlbnQuaDoKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjopOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNo
T25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVj
dG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpw
b3B1bGF0ZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzQWdlbnRJbXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAg
ICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmg6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjppbml0aWFsaXplTG9hZGVyKToKKyAgICAgICAgKiBzcmMvanMv
RGV2VG9vbHMuanM6CisgICAgICAgIChkZXZ0b29scy5Ub29sc0FnZW50KToKKyAgICAgICAgKCk6
CisgICAgICAgIChkZXZ0b29scyk6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIu
anM6CisgICAgICAgICgud2luZG93LnNldERlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAg
KC53aW5kb3cuZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBzcmMvanMvSW5q
ZWN0RGlzcGF0Y2guanM6CisgICAgICAgIChkaXNwYXRjaCk6CisgICAgICAgICogc3JjL2pzL0lu
c3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorCiAyMDEwLTA2LTIyICBNaWtoYWlsIE5hZ2Fub3Yg
IDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggYTUzZGQyOC4uZWE1ZTNiZCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTI4Myw4ICsyODMsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvSURCT2JqZWN0U3RvcmVQ
cm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5oJywKLSAgICAgICAg
ICAgICAgICAnc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL0luc3BlY3RvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0
b3JGcm9udGVuZENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZv
bnRSZW5kZXJpbmcuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDkwNTRkOGMuLjczNGEzZDUK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsK
IGNsYXNzIFdlYkRyYWdEYXRhOworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNz
IFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVDbGllbnQ7CiBjbGFzcyBXZWJOb2RlOwpAQCAtNTUs
OCArNTYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGVzIGEgV2ViVmlldyB0aGF0IGlzIE5P
VCB5ZXQgaW5pdGlhbGl6ZWQuICBZb3Ugd2lsbCBuZWVkIHRvCiAgICAgLy8gY2FsbCBpbml0aWFs
aXplTWFpbkZyYW1lIHRvIGZpbmlzaCB0aGUgaW5pdGlhbGl6YXRpb24uICBJdCBpcyB2YWxpZAot
ICAgIC8vIHRvIHBhc3MgYSBudWxsIFdlYlZpZXdDbGllbnQgcG9pbnRlci4KLSAgICBXRUJLSVRf
QVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCopOworICAgIC8vIHRvIHBh
c3MgYSBudWxsIFdlYlZpZXdDbGllbnQgYW5kIFdlYkRldlRvb2xzQ2xpZW50IHBvaW50ZXJzLiAK
KyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCosIFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqKTsKIAogICAgIC8vIEFmdGVyIGNyZWF0aW5nIGEgV2ViVmll
dywgeW91IHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIHRoaXMgbWV0aG9kLgogICAgIC8vIFlvdSBj
YW4gb3B0aW9uYWxseSBtb2RpZnkgdGhlIHNldHRpbmdzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0
aG9kLgpAQCAtMjIzLDcgKzIyNCw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZW1iZWRkZXIgbWF5
IG9wdGlvbmFsbHkgZW5nYWdlIGEgV2ViRGV2VG9vbHNBZ2VudC4gIFRoaXMgbWF5IG9ubHkKICAg
ICAvLyBiZSBzZXQgb25jZSBwZXIgV2ViVmlldy4KICAgICB2aXJ0dWFsIFdlYkRldlRvb2xzQWdl
bnQqIGRldlRvb2xzQWdlbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERldlRvb2xzQWdl
bnQoV2ViRGV2VG9vbHNBZ2VudCopID0gMDsKIAogCiAgICAgLy8gQWNjZXNzaWJpbGl0eSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2OTRkN2MyLi5kYWU5MzQ4Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKQEAgLTczNSw5ICs3MzUsNiBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIGlm
IChtX3dlYkZyYW1lLT5jbGllbnQoKSkKICAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRp
ZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZyYW1lLCBpc05ld05hdmlnYXRpb24pOwotCi0g
ICAgaWYgKHdlYnZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCi0gICAgICAgIHdlYnZpZXct
PmRldlRvb2xzQWdlbnRQcml2YXRlKCktPmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZy
YW1lLCBpc05ld05hdmlnYXRpb24pOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDEw
ZDUuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCi0jaW5j
bHVkZSAiV2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgotI2luY2x1ZGUgIldlYlJlY3QuaCIKLSNp
bmNsdWRlICJXZWJVUkwuaCIKLSNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAi
V2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLUluc3BlY3RvckNsaWVudEltcGw6Okluc3BlY3RvckNsaWVudEltcGwoV2ViVmlld0lt
cGwqIHdlYlZpZXcpCi0gICAgOiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLXsKLSAgICBB
U1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKLX0KLQotSW5zcGVjdG9yQ2xpZW50SW1wbDo6fklu
c3BlY3RvckNsaWVudEltcGwoKQotewotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCi17Ci0gICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRo
ZSBXZWJWaWV3SW1wbC4KLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVj
dG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQotewotICAgIC8v
IEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8ganVzdCBpbnZhbGlkYXRlIHRoZSByZWN0IG9mIHRo
ZSBub2RlIHJlZ2lvbgotICAgIC8vIGdpdmVuIHRoYXQgdGhpcyBpcyBub3Qgb24gYSBjcml0aWNh
bCBjb2RlcGF0aD8gIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCi0gICAgLy8gaGF2ZSB0byB0YWtl
IHNjcm9sbGluZyBpbnRvIGFjY291bnQuCi0gICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9IHdlYlZp
ZXctPnNpemUoKTsKLSAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNp
emUuaGVpZ2h0KTsKLSAgICBpZiAod2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIHdlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgLy8gSW5zcGVj
dG9yQ29udHJvbGxlciBkb2VzIHRoZSBhY3R1YWxseSB0cmFja2luZyBvZiB0aGUgaGlnaGxpZ2h0
ZWQgbm9kZQotICAgIC8vIGFuZCB0aGUgZHJhd2luZyBvZiB0aGUgaGlnaGxpZ2h0LiBIZXJlIHdl
IGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUKLSAgICAvLyB0aGUgcmVjdHMgb2YgdGhlIG9s
ZCBhbmQgbmV3IG5vZGVzLgotICAgIGhpZGVIaWdobGlnaHQoKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICAvLyBGSVhNRTogYWJsZSB0byBp
bnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgotICAgIGludmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0
KG1faW5zcGVjdGVkV2ViVmlldyk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6cG9w
dWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQotewotICAgIFdl
YlN0cmluZyBzdHJpbmc7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5pbnNwZWN0b3JTZXR0aW5n
KGtleSwgJnN0cmluZyk7Ci0gICAgKnZhbHVlID0gc3RyaW5nOwotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudEltcGw6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnNldEluc3BlY3RvclNldHRpbmco
a2V5LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJEZXZU
b29sc0FnZW50SW1wbCogZGV2VG9vbHNBZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdl
bnRJbXBsKj4obV9pbnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50KCkpOwotICAgIGlmICgh
ZGV2VG9vbHNBZ2VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViVmVjdG9yPFdl
YlN0cmluZz4gYXJndW1lbnRzKHNpemVfdCgxKSk7Ci0gICAgYXJndW1lbnRzWzBdID0gbWVzc2Fn
ZTsKLSAgICBXZWJEZXZUb29sc01lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5jbGFzc05hbWUg
PSAiVG9vbHNBZ2VudERlbGVnYXRlIjsKLSAgICBkYXRhLm1ldGhvZE5hbWUgPSAiZGlzcGF0Y2hP
bkNsaWVudCI7Ci0gICAgZGF0YS5hcmd1bWVudHMuc3dhcChhcmd1bWVudHMpOwotICAgIGRldlRv
b2xzQWdlbnQtPnNlbmRScGNNZXNzYWdlKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTk0ZTMuLjAwMDAwMDAKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
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
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbnNwZWN0b3JDbGllbnRJbXBsX2gKLSNkZWZpbmUg
SW5zcGVjdG9yQ2xpZW50SW1wbF9oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKLWNs
YXNzIFdlYlZpZXdJbXBsOwotCi1jbGFzcyBJbnNwZWN0b3JDbGllbnRJbXBsIDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ2xpZW50SW1w
bChXZWJWaWV3SW1wbCopOwotICAgIH5JbnNwZWN0b3JDbGllbnRJbXBsKCk7Ci0KLSAgICAvLyBJ
bnNwZWN0b3JDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJv
eWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNv
cmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotCi0gICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2Vi
Q29yZTo6U3RyaW5nKiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOwotcHJpdmF0ZToKLQotICAgIC8vIFRoZSBXZWJWaWV3SW1wbCBvZiB0aGUgcGFnZSBi
ZWluZyBpbnNwZWN0ZWQ7IGdldHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvcgotICAgIFdlYlZp
ZXdJbXBsKiBtX2luc3BlY3RlZFdlYlZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2Zjdl
ZDk1Li44M2I5MjVhCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuaCIKIAorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhv
c3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTEyMCw5ICsxMjIsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6Y2hhbmdl
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCiAgICAgLy8gRG8gbm90aGluZzsKIH0KICAg
ICAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBEbyBub3RoaW5nOwor
ICAgIG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2V0VGl0bGUoIkRl
dmVsb3BlciBUb29scyAtICIgKyB1cmwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Ub29sc0FnZW50LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCBhYjQ4MTUzLi5jNzQ4YzhhCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5oCkBAIC01MCw5ICs1MCw2IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogREVGSU5FX1JQQ19DTEFTUyhUb29sc0FnZW50LCBUT09MU19B
R0VOVF9TVFJVQ1QpCiAKICNkZWZpbmUgVE9PTFNfQUdFTlRfREVMRUdBVEVfU1RSVUNUKE1FVEhP
RDAsIE1FVEhPRDEsIE1FVEhPRDIsIE1FVEhPRDMsIE1FVEhPRDQsIE1FVEhPRDUpIFwKLSAgICAv
KiBVcGRhdGVzIGZvY3VzZWQgbm9kZSBvbiB0aGUgY2xpZW50LiAqLyBcCi0gICAgTUVUSE9EMShm
cmFtZU5hdmlnYXRlLCBTdHJpbmcgLyogdXJsICovKSBcCi0gICAgXAogICAgIC8qIFJlc3BvbnNl
IHRvIHRoZSBEaXNwYXRjaE9uKi4gKi8gXAogICAgIE1FVEhPRDMoZGlkRGlzcGF0Y2hPbiwgaW50
IC8qIGNhbGxfaWQgKi8sIFN0cmluZyAvKiByZXN1bHQgKi8sIFN0cmluZyAvKiBleGNlcHRpb24g
Ki8pIFwKICAgICBcCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmE4MzBhMC4uOWFhN2Rl
MgotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtNjIsMTEg
KzYyLDEzIEBACiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgogI2luY2x1ZGUg
IldlYkRldlRvb2xzTWVzc2FnZVRyYW5zcG9ydC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRl
ICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3QuaCIKICNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTEwNCwyMyArMTA2LDkgQEAgdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kV2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gb2JqZWN0LCB2b2kKICAgICBvYmplY3QuRGlzcG9zZSgpOwogfQogCi12b2lkIFNl
dEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y29udGV4dCwgYm9vbCBlbmFibGVkKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwotICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hlciA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6
Q2FzdCgKLSAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoIkFw
dUFnZW50RGlzcGF0Y2hlciIpKSk7Ci0gICAgaWYgKGRpc3BhdGNoZXIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgZGlzcGF0Y2hlci0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxl
ZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGVuYWJsZWQpKTsKLX0KLQotLy8gVE9ETyhwZmVsZG1hbik6
IE1ha2UgdGhpcyBwdWJsaWMgaW4gV2ViRGV2VG9vbHNBZ2VudCBBUEkuCi1zdGF0aWMgY29uc3Qg
Y2hhciBrQXB1QWdlbnRGZWF0dXJlTmFtZVtdID0gImFwdS1hZ2VudCI7Ci0KLS8vIEtlZXAgdGhl
c2UgaW4gc3luYyB3aXRoIHRoZSBvbmVzIGluIGluamVjdF9kaXNwYXRjaC5qcy4KLXN0YXRpYyBj
b25zdCBjaGFyIGtUaW1lbGluZUZlYXR1cmVOYW1lW10gPSAidGltZWxpbmUtcHJvZmlsZXIiOwog
c3RhdGljIGNvbnN0IGNoYXIga1Jlc291cmNlVHJhY2tpbmdGZWF0dXJlTmFtZVtdID0gInJlc291
cmNlLXRyYWNraW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIGtUaW1lbGluZUZlYXR1cmVOYW1lW10g
PSAidGltZWxpbmUtcHJvZmlsZXIiOworc3RhdGljIGNvbnN0IGNoYXIga0FwdUFnZW50RmVhdHVy
ZU5hbWVbXSA9ICJhcHUtYWdlbnQiOwogCiBjbGFzcyBJT1JQQ0RlbGVnYXRlIDogcHVibGljIERl
dlRvb2xzUlBDOjpEZWxlZ2F0ZSwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKQEAgLTMx
MiwyMSArMzAwLDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUoKQog
ICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCk7CiB9CiAKLXZvaWQgV2ViRGV2
VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIHdl
YmZyYW1lLCBib29sIGlzTmV3TmF2aWdhdGlvbikKLXsKLSAgICBpZiAoIW1fYXR0YWNoZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJEYXRhU291cmNlKiBkcyA9IHdlYmZyYW1lLT5kYXRhU291
cmNlKCk7Ci0gICAgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCA9IGRzLT5yZXF1ZXN0KCk7
Ci0gICAgV2ViVVJMIHVybCA9IGRzLT5oYXNVbnJlYWNoYWJsZVVSTCgpID8KLSAgICAgICAgZHMt
PnVucmVhY2hhYmxlVVJMKCkgOgotICAgICAgICByZXF1ZXN0LnVybCgpOwotICAgIGlmICghd2Vi
ZnJhbWUtPnBhcmVudCgpKSB7Ci0gICAgICAgIG1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZnJh
bWVOYXZpZ2F0ZShXZWJDb3JlOjpLVVJMKHVybCkuc3RyaW5nKCkpOwotICAgICAgICBTZXRBcHVB
Z2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1fdXRpbGl0eUNvbnRleHQsIG1fYXB1QWdlbnRF
bmFibGVkKTsKLSAgICB9Ci19Ci0KIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFy
V2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogd2ViZnJhbWUpCiB7CiAgICAgRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNldEhvc3RJZCh3ZWJmcmFtZSwgbV9ob3N0SWQpOwpAQCAtNDE4LDE1ICszOTEs
NiBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbml0RGV2VG9vbHNBZ2VudEhvc3QoKQog
ICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCiAgICAgICAgICJkaXNwYXRj
aCIsCiAgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoT25DbGllbnQpOwot
ICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJkaXNwYXRj
aFRvQXB1IiwKLSAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRGlzcGF0Y2hUb0FwdSk7
Ci0gICAgZGV2dG9vbHNBZ2VudEhvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgImV2YWx1
YXRlT25TZWxmIiwKLSAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZhbHVhdGVPblNl
bGYpOwotICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJy
dW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCIsCi0gICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBs
Ojpqc09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQpOwogICAgIGRldnRvb2xzQWdlbnRIb3N0
LmJ1aWxkKCk7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC00ODcsNyArNDUxLDYg
QEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRBcHVB
Z2VudEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXB1QWdlbnRFbmFibGVkID0gZW5h
YmxlZDsKLSAgICBTZXRBcHVBZ2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1fdXRpbGl0eUNv
bnRleHQsIGVuYWJsZWQpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gbV93ZWJWaWV3
SW1wbC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaWYgKGVuYWJsZWQpIHsK
ICAgICAgICAgbV9yZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCA9IGljLT5yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCgpOwpAQCAtNTE2LDU1ICs0NzksMjQgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoT25DbGllbnQoY29uc3Qgdjg6OkFyZ3Vt
ZW4KICAgICBTdHJpbmcgbWVzc2FnZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
Q2hlY2soYXJnc1swXSk7CiAgICAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNh
dGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKICAg
ICBXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Fn
ZW50SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKICAg
ICBhZ2VudC0+bV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5kaXNwYXRjaE9uQ2xpZW50KG1lc3Nh
Z2UpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19CiAKLS8vIHN0YXRpYwotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoVG9BcHUoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0
Y2hlcjsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpIHx8IGV4Y2VwdGlv
bkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgaWYgKCFhZ2VudC0+bV9hcHVBZ2VudEVuYWJsZWQp
CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgV2ViRGV2VG9vbHNBZ2VudElt
cGwqIGFnZW50ID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNBZ2VudEltcGwqPigKLSAgICAgICAg
djg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOwotICAgIGFnZW50LT5t
X2FwdUFnZW50RGVsZWdhdGVTdHViLT5kaXNwYXRjaFRvQXB1KG1lc3NhZ2UpOwotICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci19CiAKLS8vIHN0YXRpYwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0V2YWx1YXRlT25TZWxmKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCi17Ci0gICAgU3RyaW5nIGNvZGU7Ci0gICAgewotICAgICAgICB2ODo6VHJ5Q2F0
Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKLSAgICAgICAgY29kZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0
cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgICAgIGlmIChjb2RlLmlzRW1wdHkoKSB8
fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKLSAgICB9Ci0gICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gc3Rh
dGljX2Nhc3Q8V2ViRGV2VG9vbHNBZ2VudEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3Mu
RGF0YSgpKS0+VmFsdWUoKSk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlKGFnZW50LT5tX3V0aWxp
dHlDb250ZXh0KTsKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGFnZW50
LT5tX3dlYlZpZXdJbXBsLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKLSAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiByZXN1bHQgPSBwcm94eS0+cnVuU2NyaXB0KHY4OjpTY3JpcHQ6OkNvbXBpbGUodjg6
OlN0cmluZzo6TmV3KGNvZGUudXRmOCgpLmRhdGEoKSkpLCB0cnVlKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQorICAgIFN0cmluZyBtZXRob2QgPSBXZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRo
TnVsbENoZWNrKGFyZ3NbMV0pOworICAgIGlmIChtZXRob2QuaXNFbXB0eSgpIHx8IGV4Y2VwdGlv
bkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
LS8vIHN0YXRpYwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpq
c09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
LXsKLSAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKLSAgICBTdHJpbmcgZmVhdHVy
ZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAg
Ym9vbCBlbmFibGVkID0gYXJnc1sxXS0+VG9Cb29sZWFuKCktPlZhbHVlKCk7Ci0gICAgaWYgKGZl
YXR1cmUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgaWYg
KG1ldGhvZCAhPSAiYWRkUmVjb3JkVG9UaW1lbGluZSIgJiYgbWV0aG9kICE9ICJ1cGRhdGVSZXNv
dXJjZSIgJiYgbWV0aG9kICE9ICJhZGRSZXNvdXJjZSIpDQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBhZ2VudCA9IHN0YXRpY19jYXN0
PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSkt
PlZhbHVlKCkpOwotICAgIGFnZW50LT5tX2NsaWVudC0+cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5n
ZWQoZmVhdHVyZSwgZW5hYmxlZCk7CisKKyAgICBhZ2VudC0+bV9hcHVBZ2VudERlbGVnYXRlU3R1
Yi0+ZGlzcGF0Y2hUb0FwdShtZXNzYWdlKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCi0KIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjppbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmll
d0ltcGwtPnBhZ2UoKSkKQEAgLTYxOCw2ICs1NTAsODMgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50
SW1wbDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyByZXNvdXJjZUlkLCBjb25zdCBXZWJV
UkwKICAgICAgICAgaWMtPmRpZEZhaWxMb2FkaW5nKHJlc291cmNlSWQsIHJlc291cmNlRXJyb3Ip
OwogfQogCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0b3JEZXN0cm95ZWQoKQ0K
K3sNCisgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3SW1wbC4NCit9
DQorDQordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6b3Blbkluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckNvbnRyb2xsZXIqKQ0KK3sNCit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXIgZG9l
cyB0aGUgYWN0dWFsbCB0cmFja2luZyBvZiB0aGUgaGlnaGxpZ2h0ZWQgbm9kZQorICAgIC8vIGFu
ZCB0aGUgZHJhd2luZyBvZiB0aGUgaGlnaGxpZ2h0LiBIZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHRv
IGludmFsaWRhdGUKKyAgICAvLyB0aGUgcmVjdHMgb2YgdGhlIG9sZCBhbmQgbmV3IG5vZGVzLgor
ICAgIGhpZGVIaWdobGlnaHQoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aGlk
ZUhpZ2hsaWdodCgpCit7CisgICAgLy8gRklYTUU6IGFibGUgdG8gaW52YWxpZGF0ZSBhIHNtYWxs
ZXIgcmVjdC4KKyAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IHRvIGp1c3QgaW52YWxpZGF0
ZSB0aGUgcmVjdCBvZiB0aGUgbm9kZSByZWdpb24KKyAgICAvLyBnaXZlbiB0aGF0IHRoaXMgaXMg
bm90IG9uIGEgY3JpdGljYWwgY29kZXBhdGg/ICBJbiBvcmRlciB0byBkbyBzbywgd2UnZAorICAg
IC8vIGhhdmUgdG8gdGFrZSBzY3JvbGxpbmcgaW50byBhY2NvdW50LgorICAgIGNvbnN0IFdlYlNp
emUmIHNpemUgPSBtX3dlYlZpZXdJbXBsLT5zaXplKCk7CisgICAgV2ViUmVjdCBkYW1hZ2VkUmVj
dCgwLCAwLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CisgICAgaWYgKG1fd2ViVmlld0ltcGwt
PmNsaWVudCgpKQorICAgICAgICBtX3dlYlZpZXdJbXBsLT5jbGllbnQoKS0+ZGlkSW52YWxpZGF0
ZVJlY3QoZGFtYWdlZFJlY3QpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpwb3B1
bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCit7CisgICAgV2Vi
U3RyaW5nIHN0cmluZzsKKyAgICBtX3dlYlZpZXdJbXBsLT5pbnNwZWN0b3JTZXR0aW5nKGtleSwg
JnN0cmluZyk7CisgICAgKnZhbHVlID0gc3RyaW5nOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgbV93ZWJWaWV3SW1wbC0+c2V0SW5zcGVjdG9yU2V0dGluZyhrZXksIHZhbHVl
KTsKK30KKworYm9vbCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50
SW1wbCogZGV2VG9vbHNBZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4o
bV93ZWJWaWV3SW1wbC0+ZGV2VG9vbHNBZ2VudCgpKTsKKyAgICBpZiAoIWRldlRvb2xzQWdlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGFyZ3Vt
ZW50cyhzaXplX3QoMSkpOworICAgIGFyZ3VtZW50c1swXSA9IG1lc3NhZ2U7CisgICAgV2ViRGV2
VG9vbHNNZXNzYWdlRGF0YSBkYXRhOworICAgIGRhdGEuY2xhc3NOYW1lID0gIlRvb2xzQWdlbnRE
ZWxlZ2F0ZSI7CisgICAgZGF0YS5tZXRob2ROYW1lID0gImRpc3BhdGNoT25DbGllbnQiOworICAg
IGRhdGEuYXJndW1lbnRzLnN3YXAoYXJndW1lbnRzKTsKKyAgICBkZXZUb29sc0FnZW50LT5zZW5k
UnBjTWVzc2FnZShkYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQoreworICAgIG1fY2xpZW50
LT5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChrUmVzb3VyY2VUcmFja2luZ0ZlYXR1cmVOYW1l
LCB0cnVlKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzb3VyY2VUcmFja2lu
Z1dhc0Rpc2FibGVkKCkKK3sKKyAgICBtX2NsaWVudC0+cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5n
ZWQoa1Jlc291cmNlVHJhY2tpbmdGZWF0dXJlTmFtZSwgZmFsc2UpOworfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjp0aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpCit7CisgICAgbV9j
bGllbnQtPnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGtUaW1lbGluZUZlYXR1cmVOYW1lLCB0
cnVlKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldh
c1N0b3BwZWQoKQoreworICAgIG1fY2xpZW50LT5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChr
VGltZWxpbmVGZWF0dXJlTmFtZSwgZmFsc2UpOworfQorCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBjb25zdCBXZWJTdHJpbmcm
IHNjcmlwdCkKIHsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRy
b2xsZXIoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApvbGQg
bW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDQ1NWRjZWYuLmM5N2IyMWYKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApAQCAtMzEsNiArMzEsOCBAQAogI2lm
bmRlZiBXZWJEZXZUb29sc0FnZW50SW1wbF9oCiAjZGVmaW5lIFdlYkRldlRvb2xzQWdlbnRJbXBs
X2gKIAorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorCiAjaW5jbHVkZSAiQVBVQWdlbnRE
ZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIkRldlRvb2xzUlBDLmgiCiAjaW5jbHVkZSAiVG9vbHNBZ2Vu
dC5oIgpAQCAtNDEsNiArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
CiBjbGFzcyBOb2RlOwogY2xhc3MgU3RyaW5nOwpAQCAtNjIsNyArNjUsOCBAQCBzdHJ1Y3QgV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YTsKIAogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudEltcGwgOiBwdWJs
aWMgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBUb29sc0FnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
RGV2VG9vbHNSUEM6OkRlbGVnYXRlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIERldlRvb2xzUlBDOjpEZWxlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViRGV2VG9v
bHNBZ2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29sc0FnZW50Q2xp
ZW50KiBjbGllbnQpOwogICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBsKCk7CkBAIC03
Myw3ICs3Nyw2IEBAIHB1YmxpYzoKIAogICAgIC8vIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlIGlt
cGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdChXZWJG
cmFtZUltcGwqIGZyYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxM
b2FkKFdlYkZyYW1lSW1wbCogZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0aW9uKTsKIAogICAgIC8v
IFdlYkRldlRvb2xzQWdlbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwpAQCAtOTIsNiArOTUsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJVUkxFcnJvciYpOwogCisgICAgLy8gSW5zcGVjdG9y
Q2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6
Ok5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZpcnR1YWwg
dm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6
OlN0cmluZyogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOworICAgIHZp
cnR1YWwgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZWxp
bmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOworCiAgICAgLy8gRGV2VG9vbHNSUEM6OkRlbGVnYXRlIGlt
cGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBzZW5kUnBjTWVzc2FnZShjb25zdCBXZWJE
ZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKTsKIApAQCAtMTAxLDkgKzExNyw2IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRGlzcGF0Y2hP
bkNsaWVudChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzRGlzcGF0Y2hUb0FwdShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsK
LSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZhbHVhdGVPblNlbGYoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7
CiAKICAgICB2b2lkIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2Rl
IDEwMDc1NQppbmRleCA0NDZmNjQ3Li43MDM4YTVlCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzQWdlbnRQcml2YXRlLmgKQEAgLTQzLDExICs0Myw2IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgd2luZG93IG9iamVjdCBmb3IgdGhlIGZyYW1lIGhhcyBiZWVuIGNsZWFyZWQgb2YgYW55IGV4
dHJhIHByb3BlcnRpZXMKICAgICAvLyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IHNjcmlwdCBm
cm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBkb2N1bWVudC4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2xlYXJXaW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKikgPSAwOwotCi0gICAgLy8gVGhlIHByb3Zp
c2lvbmFsIGRhdGFzb3VyY2UgaXMgbm93IGNvbW1pdHRlZC4gIFRoZSBmaXJzdCBwYXJ0IG9mIHRo
ZQotICAgIC8vIHJlc3BvbnNlIGJvZHkgaGFzIGJlZW4gcmVjZWl2ZWQsIGFuZCB0aGUgZW5jb2Rp
bmcgb2YgdGhlIHJlc3BvbnNlIGJvZHkKLSAgICAvLyBpcyBrbm93bi4KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdlYkZyYW1lSW1wbCosIGJvb2wgaXNOZXdOYXZp
Z2F0aW9uKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzMmNh
MjNmLi5kODAwYzBkCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC04Niw2ICs4Niw3IEBA
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCiAjaW5jbHVk
ZSAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCkBAIC0xMDIsNiArMTAz
LDcgQEAKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xpZW50Lmgi
CiAKKwogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5o
IgogI2Vsc2UKQEAgLTE2Myw5ICsxNjUsOSBAQCBzdGF0aWMgY29uc3QgUG9wdXBDb250YWluZXJT
ZXR0aW5ncyBzdWdnZXN0aW9uc1BvcHVwU2V0dGluZ3MgPSB7CiAKIC8vIFdlYlZpZXcgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1XZWJWaWV3KiBXZWJWaWV3OjpjcmVhdGUoV2ViVmlld0NsaWVudCogY2xpZW50KQorV2Vi
VmlldyogV2ViVmlldzo6Y3JlYXRlKFdlYlZpZXdDbGllbnQqIGNsaWVudCwgV2ViRGV2VG9vbHNB
Z2VudENsaWVudCogZGV2VG9vbHNDbGllbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBXZWJWaWV3SW1w
bChjbGllbnQpOworICAgIHJldHVybiBuZXcgV2ViVmlld0ltcGwoY2xpZW50LCBkZXZUb29sc0Ns
aWVudCk7CiB9CiAKIHZvaWQgV2ViVmlldzo6dXBkYXRlVmlzaXRlZExpbmtTdGF0ZSh1bnNpZ25l
ZCBsb25nIGxvbmcgbGlua0hhc2gpCkBAIC0yMTIsMTQgKzIxNCwxMyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjppbml0aWFsaXplTWFpbkZyYW1lKFdlYkZyYW1lQ2xpZW50KiBmcmFtZUNsaWVudCkKICAg
ICBTZWN1cml0eU9yaWdpbjo6c2V0TG9jYWxMb2FkUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpBbGxv
d0xvY2FsTG9hZHNGb3JMb2NhbE9ubHkpOwogfQogCi1XZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwo
V2ViVmlld0NsaWVudCogY2xpZW50KQorV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdD
bGllbnQqIGNsaWVudCwgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogZGV2VG9vbHNDbGllbnQpCiAg
ICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwo
dGhpcykKICAgICAsIG1fY2hyb21lQ2xpZW50SW1wbCh0aGlzKQogICAgICwgbV9jb250ZXh0TWVu
dUNsaWVudEltcGwodGhpcykKICAgICAsIG1fZHJhZ0NsaWVudEltcGwodGhpcykKICAgICAsIG1f
ZWRpdG9yQ2xpZW50SW1wbCh0aGlzKQotICAgICwgbV9pbnNwZWN0b3JDbGllbnRJbXBsKHRoaXMp
CiAgICAgLCBtX29ic2VydmVkTmV3TmF2aWdhdGlvbihmYWxzZSkKICNpZm5kZWYgTkRFQlVHCiAg
ICAgLCBtX25ld05hdmlnYXRpb25Mb2FkZXIoMCkKQEAgLTI1Niw4ICsyNTcsMTEgQEAgV2ViVmll
d0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAvLyBzZXQgdG8g
aW1wb3NzaWJsZSBwb2ludCBzbyB3ZSBhbHdheXMgZ2V0IHRoZSBmaXJzdCBtb3VzZSBwb3MKICAg
ICBtX2xhc3RNb3VzZVBvc2l0aW9uID0gV2ViUG9pbnQoLTEsIC0xKTsKIAorICAgIGlmIChkZXZU
b29sc0NsaWVudCkKKyAgICAgICAgbV9kZXZUb29sc0FnZW50ID0gc3RhdGljX2Nhc3Q8V2ViRGV2
VG9vbHNBZ2VudEltcGwqPihXZWJEZXZUb29sc0FnZW50OjpjcmVhdGUodGhpcywgZGV2VG9vbHND
bGllbnQpKTsKKwogICAgIC8vIHRoZSBwYWdlIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHZh
cmlvdXMgY2xpZW50cwotICAgIG1fcGFnZS5zZXQobmV3IFBhZ2UoJm1fY2hyb21lQ2xpZW50SW1w
bCwgJm1fY29udGV4dE1lbnVDbGllbnRJbXBsLCAmbV9lZGl0b3JDbGllbnRJbXBsLCAmbV9kcmFn
Q2xpZW50SW1wbCwgJm1faW5zcGVjdG9yQ2xpZW50SW1wbCwgMCwgMCwgMCkpOworICAgIG1fcGFn
ZS5zZXQobmV3IFBhZ2UoJm1fY2hyb21lQ2xpZW50SW1wbCwgJm1fY29udGV4dE1lbnVDbGllbnRJ
bXBsLCAmbV9lZGl0b3JDbGllbnRJbXBsLCAmbV9kcmFnQ2xpZW50SW1wbCwgbV9kZXZUb29sc0Fn
ZW50LmdldCgpLCAwLCAwLCAwKSk7CiAKICAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5z
ZXRDbGllbnQoJm1fYmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbCk7CiAgICAgbV9wYWdlLT5zZXRH
cm91cE5hbWUocGFnZUdyb3VwTmFtZSk7CkBAIC0xODI0LDEyICsxODI4LDYgQEAgV2ViRGV2VG9v
bHNBZ2VudCogV2ViVmlld0ltcGw6OmRldlRvb2xzQWdlbnQoKQogICAgIHJldHVybiBtX2RldlRv
b2xzQWdlbnQuZ2V0KCk7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNldERldlRvb2xzQWdlbnQo
V2ViRGV2VG9vbHNBZ2VudCogZGV2VG9vbHNBZ2VudCkKLXsKLSAgICBBU1NFUlQoIW1fZGV2VG9v
bHNBZ2VudC5nZXQoKSk7IC8vIE1heSBvbmx5IHNldCBvbmNlIQotICAgIG1fZGV2VG9vbHNBZ2Vu
dC5zZXQoc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNBZ2VudFByaXZhdGUqPihkZXZUb29sc0FnZW50
KSk7Ci19Ci0KIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgV2ViVmlld0ltcGw6OmFjY2Vzc2liaWxp
dHlPYmplY3QoKQogewogICAgIGlmICghbWFpbkZyYW1lSW1wbCgpKQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmVkMDU1Ny4u
MTk3ODI5MAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVm
IFdlYlZpZXdJbXBsX2gKICNkZWZpbmUgV2ViVmlld0ltcGxfaAogCisjaW5jbHVkZSAiV2ViRGV2
VG9vbHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uUG9saWN5LmgiCiAjaW5j
bHVkZSAiV2ViUG9pbnQuaCIKICNpbmNsdWRlICJXZWJTaXplLmgiCkBAIC00MCwxMCArNDEsMTAg
QEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50SW1wbC5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudEltcGwuaCIKICNp
bmNsdWRlICJFZGl0b3JDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgpAQCAtNzEsNyArNzIsNyBAQCBjbGFzcyBDb250ZXh0TWVudUNs
aWVudEltcGw7CiBjbGFzcyBEcmFnU2Nyb2xsVGltZXI7CiBjbGFzcyBTdWdnZXN0aW9uc1BvcHVw
TWVudUNsaWVudDsKIGNsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7Ci1jbGFzcyBXZWJEZXZU
b29sc0FnZW50UHJpdmF0ZTsKK2NsYXNzIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBX
ZWJGcmFtZUltcGw7CiBjbGFzcyBXZWJJbWFnZTsKIGNsYXNzIFdlYktleWJvYXJkRXZlbnQ7CkBA
IC0xNzIsNyArMTczLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNwZWN0b3JT
ZXR0aW5nKGNvbnN0IFdlYlN0cmluZyYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwogICAgIHZpcnR1YWwgV2ViRGV2VG9v
bHNBZ2VudCogZGV2VG9vbHNBZ2VudCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREZXZUb29sc0Fn
ZW50KFdlYkRldlRvb2xzQWdlbnQqKTsKICAgICB2aXJ0dWFsIFdlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QgYWNjZXNzaWJpbGl0eU9iamVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9GaWxs
U3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLApAQCAtMzQzLDcgKzM0Myw3IEBA
IHByaXZhdGU6CiAgICAgICBEcmFnT3ZlcgogICAgIH07CiAKLSAgICBXZWJWaWV3SW1wbChXZWJW
aWV3Q2xpZW50KiBjbGllbnQpOworICAgIFdlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVu
dCwgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogZGV2VG9vbHNDbGllbnQpOwogICAgIH5XZWJWaWV3
SW1wbCgpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCB3YXMgYWN0dWFsbHkg
cHJvY2Vzc2VkLgpAQCAtMzg4LDExICszODgsMTMgQEAgcHJpdmF0ZToKICAgICBDb250ZXh0TWVu
dUNsaWVudEltcGwgbV9jb250ZXh0TWVudUNsaWVudEltcGw7CiAgICAgRHJhZ0NsaWVudEltcGwg
bV9kcmFnQ2xpZW50SW1wbDsKICAgICBFZGl0b3JDbGllbnRJbXBsIG1fZWRpdG9yQ2xpZW50SW1w
bDsKLSAgICBJbnNwZWN0b3JDbGllbnRJbXBsIG1faW5zcGVjdG9yQ2xpZW50SW1wbDsKIAogICAg
IFdlYlNpemUgbV9zaXplOwogCiAgICAgV2ViUG9pbnQgbV9sYXN0TW91c2VQb3NpdGlvbjsKKwor
ICAgIE93blB0cjxXZWJEZXZUb29sc0FnZW50SW1wbD4gbV9kZXZUb29sc0FnZW50OworCiAgICAg
T3duUHRyPFdlYkNvcmU6OlBhZ2U+IG1fcGFnZTsKIAogICAgIC8vIFRoaXMgZmxhZyBpcyBzZXQg
d2hlbiBhIG5ldyBuYXZpZ2F0aW9uIGlzIGRldGVjdGVkLiBJdCBpcyB1c2VkIHRvIHNhdGlzZnkK
QEAgLTQ5Myw4ICs0OTUsNiBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBBdXRvQ29tcGxldGUgc3Vn
Z2VzdGlvbnMgcG9wdXAuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyPiBtX2F1
dG9jb21wbGV0ZVBvcHVwOwogCi0gICAgT3duUHRyPFdlYkRldlRvb2xzQWdlbnRQcml2YXRlPiBt
X2RldlRvb2xzQWdlbnQ7Ci0KICAgICAvLyBXaGV0aGVyIHRoZSB3ZWJ2aWV3IGlzIHJlbmRlcmlu
ZyB0cmFuc3BhcmVudGx5LgogICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OwogCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJXb3JrZXJCYXNlLmNwcApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1Cmlu
ZGV4IDI0NGNjZWIuLjBhZDBjY2QKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJC
YXNlLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBXZWJXb3JrZXJCYXNlOjppbml0aWFsaXplTG9hZGVyKGNvbnN0
IFdlYlVSTCYgdXJsKQogICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNv
bnRleHQgdG8gdGhlIHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQogICAgIC8vIGluZnJhc3Ry
dWN0dXJlLgogICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3
OjpjcmVhdGUoMCk7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDAsIDApOwogICAg
IG1fd2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKTsKICAg
ICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pz
L0RldlRvb2xzLmpzCmluZGV4IDM5OGQzNTguLjg1MWM5MzQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9E
ZXZUb29scy5qcwpAQCAtNjEsNyArNjEsNiBAQCBkZXZ0b29scyQkZGlzcGF0Y2ggPSBmdW5jdGlv
bihyZW1vdGVOYW1lLCBtZXRob2ROYW1lLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKQogZGV2dG9v
bHMuVG9vbHNBZ2VudCA9IGZ1bmN0aW9uKCkKIHsKICAgICBSZW1vdGVUb29sc0FnZW50LmRpZERp
c3BhdGNoT24gPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwotICAgIFJl
bW90ZVRvb2xzQWdlbnQuZnJhbWVOYXZpZ2F0ZSA9IHRoaXMuZnJhbWVOYXZpZ2F0ZV8uYmluZCh0
aGlzKTsKICAgICBSZW1vdGVUb29sc0FnZW50LmRpc3BhdGNoT25DbGllbnQgPSB0aGlzLmRpc3Bh
dGNoT25DbGllbnRfLmJpbmQodGhpcyk7CiAgICAgdGhpcy5kZWJ1Z2dlckFnZW50XyA9IG5ldyBk
ZXZ0b29scy5EZWJ1Z2dlckFnZW50KCk7CiAgICAgdGhpcy5wcm9maWxlckFnZW50XyA9IG5ldyBk
ZXZ0b29scy5Qcm9maWxlckFnZW50KCk7CkBAIC0xMDcsMjQgKzEwNiwxNCBAQCBkZXZ0b29scy5U
b29sc0FnZW50LnByb3RvdHlwZS5nZXRQcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQogfTsKIAog
Ci0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVXJsIGZyYW1lIG5hdmlnYXRlZCB0by4KLSAq
IEBzZWUgdG9vbHNfYWdlbnQuaAotICogQHByaXZhdGUKLSAqLwotZGV2dG9vbHMuVG9vbHNBZ2Vu
dC5wcm90b3R5cGUuZnJhbWVOYXZpZ2F0ZV8gPSBmdW5jdGlvbih1cmwpCisoZnVuY3Rpb24gKCkg
ewordmFyIG9yaWcgPSBXZWJJbnNwZWN0b3IucmVzZXQ7CitXZWJJbnNwZWN0b3IucmVzZXQgPSBm
dW5jdGlvbigpCiB7Ci0gICAgdGhpcy5yZXNldCgpOwotICAgIC8vIERvIG5vdCByZXNldCBQcm9m
aWxlcyBwYW5lbC4KLSAgICB2YXIgcHJvZmlsZXMgPSBudWxsOwotICAgIGlmICgicHJvZmlsZXMi
IGluIFdlYkluc3BlY3Rvci5wYW5lbHMpIHsKLSAgICAgICAgcHJvZmlsZXMgPSBXZWJJbnNwZWN0
b3IucGFuZWxzWyJwcm9maWxlcyJdOwotICAgICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLnBhbmVs
c1sicHJvZmlsZXMiXTsKLSAgICB9Ci0gICAgV2ViSW5zcGVjdG9yLnJlc2V0KCk7Ci0gICAgaWYg
KHByb2ZpbGVzICE9PSBudWxsKQotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzWyJwcm9maWxl
cyJdID0gcHJvZmlsZXM7CisgICAgZGV2dG9vbHMudG9vbHMucmVzZXQoKTsKKyAgICBvcmlnLmNh
bGwodGhpcyk7CiB9OworfSkoKTsKIAogCiAvKioKQEAgLTMwMiwzMSArMjkxLDYgQEAgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rpb24oc3RyaW5nKQogICAgIHJldHVybiBTdHJpbmcudnNw
cmludGYoc3RyaW5nLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsK
IH07CiAKLS8vIEFjdGl2YXRlIHdpbmRvdyB1cG9uIG5vZGUgc2VhcmNoIGNvbXBsZXRlLiBUaGlz
IHdpbGwgZ28gYXdheSBvbmNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IGlzIGxhbmRlZC4KLShm
dW5jdGlvbigpIHsKLSAgICB2YXIgb3JpZ2luYWwgPSBXZWJJbnNwZWN0b3Iuc2VhcmNoaW5nRm9y
Tm9kZVdhc0Rpc2FibGVkOwotICAgIFdlYkluc3BlY3Rvci5zZWFyY2hpbmdGb3JOb2RlV2FzRGlz
YWJsZWQgPSBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5wYW5lbHMuZWxlbWVu
dHMuX25vZGVTZWFyY2hCdXR0b24udG9nZ2xlZCkKLSAgICAgICAgICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKLSAgICAgICAgb3JpZ2luYWwuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgICB9Ci19KSgpOwotCi0KLS8vIFRoZXJlIGlzIG5vIGNsZWFyIHdheSBvZiBz
ZXR0aW5nIGZyYW1lIHRpdGxlIHlldC4gU28gc25pZmZpbmcgbWFpbiByZXNvdXJjZQotLy8gbG9h
ZC4KLShmdW5jdGlvbiBPdmVycmlkZVVwZGF0ZVJlc291cmNlKCkgewotICAgIHZhciBvcmlnaW5h
bFVwZGF0ZVJlc291cmNlID0gV2ViSW5zcGVjdG9yLnVwZGF0ZVJlc291cmNlOwotICAgIFdlYklu
c3BlY3Rvci51cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCi0g
ICAgewotICAgICAgICBvcmlnaW5hbFVwZGF0ZVJlc291cmNlLmNhbGwodGhpcywgaWRlbnRpZmll
ciwgcGF5bG9hZCk7Ci0gICAgICAgIHZhciByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW2lkZW50
aWZpZXJdOwotICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVzb3VyY2UubWFpblJlc291cmNlICYm
IHJlc291cmNlLmZpbmlzaGVkKQotICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkRldmVsb3BlciBUb29scyAtICVzIiwgcmVzb3VyY2UudXJsKTsKLSAg
ICB9OwotfSkoKTsKLQogCiAvKiogUGVuZGluZyBXZWJLaXQgdXBzdHJlYW0gYnkgYXBhdmxvdiku
IEZpeGVzIGlmcmFtZSB2cyBkcmFnIHByb2JsZW0uICovCiAoZnVuY3Rpb24oKQpAQCAtMzU2LDkg
KzMyMCwxMCBAQCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcpCiB9KSgp
OwogCiAKLS8vIFdlIG5lZWQgdG8gaGF2ZSBhIHBsYWNlIGZvciBwb3N0cG9uZWQgdGFza3MKLS8v
IHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIGFsbCB0aGUgbWVzc2FnZXMgYmV0d2VlbiBh
Z2VudCBhbmQgZnJvbnRlbmQKLS8vIGFyZSBwcm9jZXNzZWQuCisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENocm9taXVtIGxheW91dCB0ZXN0IGhhcm5l
c3Mgc3VwcG9ydC4gLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KIAogV2ViSW5zcGVjdG9yLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXNRdWV1ZSA9IFtdOwog
CkBAIC0zNzUsMTkgKzM0MCwxMSBAQCBXZWJJbnNwZWN0b3IucXVldWVzQXJlRW1wdHkgPSBmdW5j
dGlvbigpCiAgICAgICAgIGNvcHlbaV0uY2FsbCh0aGlzKTsKIH07CiAKLShmdW5jdGlvbigpCi17
Ci12YXIgb3JpZ2luYWxBZGRUb0ZyYW1lID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFkZFJlc291
cmNlU291cmNlVG9GcmFtZTsKLUluc3BlY3RvckZyb250ZW5kSG9zdC5hZGRSZXNvdXJjZVNvdXJj
ZVRvRnJhbWUgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBlbGVtZW50KQotewotICAgIHZhciByZXNv
dXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZXNbaWRlbnRpZmllcl07Ci0gICAgaWYgKCFyZXNv
dXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG9yaWdpbmFsQWRkVG9GcmFtZS5jYWxsKHRoaXMs
IGlkZW50aWZpZXIsIHJlc291cmNlLm1pbWVUeXBlLCBlbGVtZW50KTsKLX07Ci19KSgpOwogCi0v
LyBDaHJvbWl1bSB0aGVtZSBzdXBwb3J0LgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ky8vIENocm9taXVtIHRoZW1lIHN1cHBvcnQuIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCiBXZWJJbnNwZWN0b3Iuc2V0VG9vbGJhckNvbG9ycyA9IGZ1bmN0aW9uKGJhY2tncm91
bmRDb2xvciwgY29sb3IpCiB7CiAgICAgaWYgKCFXZWJJbnNwZWN0b3IuX3RoZW1lU3R5bGVFbGVt
ZW50KSB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0
dWIuanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMKaW5kZXgg
ZGE1OTI5YS4uODA2YmY2YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZU
b29sc0hvc3RTdHViLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0
U3R1Yi5qcwpAQCAtMzQsMjc3ICszNCw4IEBACiAgKi8KIAogaWYgKCF3aW5kb3dbIlJlbW90ZURl
YnVnZ2VyQWdlbnQiXSkgewotCi0vKioKLSAqIEZJWE1FOiBjaGFuZ2UgZmllbGQgbmFtaW5nIHN0
eWxlIHRvIHVzZSB0cmFpbGluZyB1bmRlcnNjb3JlLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLVJl
bW90ZURlYnVnZ2VyQWdlbnRTdHViID0gZnVuY3Rpb24oKQotewotfTsKLQotCi1SZW1vdGVEZWJ1
Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0Q29udGV4dElkID0gZnVuY3Rpb24oKQotewotICAg
IFJlbW90ZURlYnVnZ2VyQWdlbnQuc2V0Q29udGV4dElkKDMpOwotfTsKLQotCi1SZW1vdGVEZWJ1
Z2dlckFnZW50U3R1Yi5wcm90b3R5cGUucHJvY2Vzc0RlYnVnQ29tbWFuZHMgPSBmdW5jdGlvbigp
Ci17Ci19OwotCi0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotUmVtb3RlUHJvZmlsZXJB
Z2VudFN0dWIgPSBmdW5jdGlvbigpCi17Ci19OwotCi0KLVJlbW90ZVByb2ZpbGVyQWdlbnRTdHVi
LnByb3RvdHlwZS5nZXRBY3RpdmVQcm9maWxlck1vZHVsZXMgPSBmdW5jdGlvbigpCi17Ci0gICAg
UHJvZmlsZXJTdHViSGVscGVyLkdldEluc3RhbmNlKCkuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVz
KCk7Ci19OwotCi0KLVJlbW90ZVByb2ZpbGVyQWdlbnRTdHViLnByb3RvdHlwZS5nZXRMb2dMaW5l
cyA9IGZ1bmN0aW9uKHBvcykKLXsKLSAgICBQcm9maWxlclN0dWJIZWxwZXIuR2V0SW5zdGFuY2Uo
KS5nZXRMb2dMaW5lcyhwb3MpOwotfTsKLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1S
ZW1vdGVUb29sc0FnZW50U3R1YiA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotUmVtb3RlVG9vbHNB
Z2VudFN0dWIucHJvdG90eXBlLmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkK
LXsKLX07Ci0KLQotUmVtb3RlVG9vbHNBZ2VudFN0dWIucHJvdG90eXBlLmRpc3BhdGNoT25JbnNw
ZWN0b3JDb250cm9sbGVyID0gZnVuY3Rpb24oKQotewotfTsKLQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICovCi1Qcm9maWxlclN0dWJIZWxwZXIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5h
Y3RpdmVQcm9maWxlck1vZHVsZXNfID0gZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9maWxlck1v
ZHVsZXMuUFJPRklMRVJfTU9EVUxFX05PTkU7Ci0gICAgdGhpcy5oZWFwUHJvZlNhbXBsZV8gPSAw
OwotICAgIHRoaXMubG9nXyA9ICcnOwotfTsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIuR2V0SW5z
dGFuY2UgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKCFQcm9maWxlclN0dWJIZWxwZXIuaW5zdGFu
Y2VfKQotICAgICAgICBQcm9maWxlclN0dWJIZWxwZXIuaW5zdGFuY2VfID0gbmV3IFByb2ZpbGVy
U3R1YkhlbHBlcigpOwotICAgIHJldHVybiBQcm9maWxlclN0dWJIZWxwZXIuaW5zdGFuY2VfOwot
fTsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIucHJvdG90eXBlLlN0b3BQcm9maWxpbmcgPSBmdW5j
dGlvbihtb2R1bGVzKQotewotICAgIHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyAmPSB+bW9k
dWxlczsKLX07Ci0KLQotUHJvZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5TdGFydFByb2ZpbGlu
ZyA9IGZ1bmN0aW9uKG1vZHVsZXMpCi17Ci0gICAgdmFyIHByb2ZNb2R1bGVzID0gZGV2dG9vbHMu
UHJvZmlsZXJBZ2VudC5Qcm9maWxlck1vZHVsZXM7Ci0gICAgaWYgKG1vZHVsZXMgJiBwcm9mTW9k
dWxlcy5QUk9GSUxFUl9NT0RVTEVfSEVBUF9TTkFQU0hPVCkgewotICAgICAgICBpZiAobW9kdWxl
cyAmIHByb2ZNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9IRUFQX1NUQVRTKSB7Ci0gICAgICAgICAg
ICB0aGlzLmxvZ18gKz0KLSAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtYmVnaW4sIkhlYXAi
LCJhbGxvY2F0ZWQiLCcgKwotICAgICAgICAgICAgICAgICAgICAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpICsgJ1xuJyArCi0gICAgICAgICAgICAgICAgJ2hlYXAtc2FtcGxlLXN0YXRzLCJIZWFwIiwi
YWxsb2NhdGVkIiwxMDAwMCwxMDAwXG4nOwotICAgICAgICAgICAgdGhpcy5sb2dfICs9Ci0gICAg
ICAgICAgICAgICAgJ2hlYXAtc2FtcGxlLWl0ZW0sU1RSSU5HX1RZUEUsMTAwLDEwMDBcbicgKwot
ICAgICAgICAgICAgICAgICdoZWFwLXNhbXBsZS1pdGVtLENPREVfVFlQRSwxMCwyMDBcbicgKwot
ICAgICAgICAgICAgICAgICdoZWFwLXNhbXBsZS1pdGVtLE1BUF9UWVBFLDIwLDM1MFxuJzsKLSAg
ICAgICAgICAgIHRoaXMubG9nXyArPSBQcm9maWxlclN0dWJIZWxwZXIuSGVhcFNhbXBsZXNbdGhp
cy5oZWFwUHJvZlNhbXBsZV8rK107Ci0gICAgICAgICAgICB0aGlzLmhlYXBQcm9mU2FtcGxlXyAl
PSBQcm9maWxlclN0dWJIZWxwZXIuSGVhcFNhbXBsZXMubGVuZ3RoOwotICAgICAgICAgICAgdGhp
cy5sb2dfICs9ICdoZWFwLXNhbXBsZS1lbmQsIkhlYXAiLCJhbGxvY2F0ZWQiXG4nOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1vZHVsZXMgJiBwcm9mTW9kdWxlcy5QUk9G
SUxFUl9NT0RVTEVfQ1BVKQotICAgICAgICAgICAgdGhpcy5sb2dfICs9IFByb2ZpbGVyU3R1Ykhl
bHBlci5Qcm9maWxlckxvZ0J1ZmZlcjsKLSAgICAgICAgdGhpcy5hY3RpdmVQcm9maWxlck1vZHVs
ZXNfIHw9IG1vZHVsZXM7Ci0gICAgfQotfTsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIucHJvdG90
eXBlLmdldEFjdGl2ZVByb2ZpbGVyTW9kdWxlcyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgc2Vs
ZiA9IHRoaXM7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgUmVtb3RlUHJv
ZmlsZXJBZ2VudC5kaWRHZXRBY3RpdmVQcm9maWxlck1vZHVsZXMoc2VsZi5hY3RpdmVQcm9maWxl
ck1vZHVsZXNfKTsKLSAgICB9LCAxMDApOwotfTsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIucHJv
dG90eXBlLmdldExvZ0xpbmVzID0gZnVuY3Rpb24ocG9zKQotewotICAgIHZhciBwcm9mTW9kdWxl
cyA9IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzOwotICAgIHZhciBsb2dM
aW5lcyA9IHRoaXMubG9nXy5zdWJzdHIocG9zKTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewotICAgICAgICBSZW1vdGVQcm9maWxlckFnZW50LmRpZEdldExvZ0xpbmVzKHBvcyArIGxvZ0xp
bmVzLmxlbmd0aCwgbG9nTGluZXMpOwotICAgIH0sIDEwMCk7Ci19OwotCi0KLVByb2ZpbGVyU3R1
YkhlbHBlci5Qcm9maWxlckxvZ0J1ZmZlciA9Ci0gICAgJ3Byb2ZpbGVyLGJlZ2luLDFcbicgKwot
ICAgICdwcm9maWxlcixyZXN1bWVcbicgKwotICAgICdjb2RlLWNyZWF0aW9uLExhenlDb21waWxl
LDB4MTAwMCwyNTYsInRlc3QxIGh0dHA6Ly9hYWEuanM6MSJcbicgKwotICAgICdjb2RlLWNyZWF0
aW9uLExhenlDb21waWxlLDB4MjAwMCwyNTYsInRlc3QyIGh0dHA6Ly9iYmIuanM6MiJcbicgKwot
ICAgICdjb2RlLWNyZWF0aW9uLExhenlDb21waWxlLDB4MzAwMCwyNTYsInRlc3QzIGh0dHA6Ly9j
Y2MuanM6MyJcbicgKwotICAgICd0aWNrLDB4MTAxMCwweDAsM1xuJyArCi0gICAgJ3RpY2ssMHgy
MDIwLDB4MCwzLDB4MTAxMFxuJyArCi0gICAgJ3RpY2ssMHgyMDIwLDB4MCwzLDB4MTAxMFxuJyAr
Ci0gICAgJ3RpY2ssMHgzMDEwLDB4MCwzLDB4MjAyMCwgMHgxMDEwXG4nICsKLSAgICAndGljayww
eDIwMjAsMHgwLDMsMHgxMDEwXG4nICsKLSAgICAndGljaywweDIwMzAsMHgwLDMsMHgyMDIwLCAw
eDEwMTBcbicgKwotICAgICd0aWNrLDB4MjAyMCwweDAsMywweDEwMTBcbicgKwotICAgICd0aWNr
LDB4MTAxMCwweDAsM1xuJyArCi0gICAgJ3Byb2ZpbGVyLHBhdXNlXG4nOwotCi0KLVByb2ZpbGVy
U3R1YkhlbHBlci5IZWFwU2FtcGxlcyA9IFsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sZm9vLDEs
MTAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicgKwotICAgICdo
ZWFwLWpzLWNvbnMtaXRlbSxPYmplY3QsNSwxMDBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVt
LGZvbyxiYXI7M1xuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGZvbzs1XG4nICsKLSAg
ICAnaGVhcC1qcy1yZXQtaXRlbSxPYmplY3Q6MHgxMjM0LChyb290cyk7MVxuJywKLQotICAgICdo
ZWFwLWpzLWNvbnMtaXRlbSxmb28sMjAwMCwyMDAwMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMt
aXRlbSxiYXIsMTAsMTAwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLE9iamVjdCw2LDEy
MFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sZm9vLGJhcjs3LE9iamVjdDoweDEyMzQ7MTBc
bicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGJhcixmb287MTAsT2JqZWN0OjB4MTIzNDsxMFxu
JyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2JqZWN0OjB4MTIzNCwocm9vdHMpOzFcbicsCi0K
LSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sZm9vLDE1LDE1MDBcbicgKwotICAgICdoZWFwLWpzLWNv
bnMtaXRlbSxiYXIsMTUsMTUwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLE9iamVjdCw1
LDEwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLEFycmF5LDMsMTAwMFxuJyArCi0gICAg
J2hlYXAtanMtcmV0LWl0ZW0sZm9vLGJhcjszLEFycmF5OjB4NTY3ODsxXG4nICsKLSAgICAnaGVh
cC1qcy1yZXQtaXRlbSxiYXIsZm9vOzUsT2JqZWN0OjB4MTIzNDs4LE9iamVjdDoweDU2Nzg7Mlxu
JyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2JqZWN0OjB4MTIzNCwocm9vdHMpOzEsT2JqZWN0
OjB4NTY3ODsyXG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxPYmplY3Q6MHg1Njc4LChnbG9i
YWwgcHJvcGVydHkpOzMsT2JqZWN0OjB4MTIzNDs1XG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRl
bSxBcnJheToweDU2NzgsKGdsb2JhbCBwcm9wZXJ0eSk7MyxBcnJheToweDU2Nzg7MlxuJywKLQot
ICAgICdoZWFwLWpzLWNvbnMtaXRlbSxiYXIsMjAsMjAwMFxuJyArCi0gICAgJ2hlYXAtanMtY29u
cy1pdGVtLE9iamVjdCw2LDEyMFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGZvbzs1
LE9iamVjdDoweDEyMzQ7MSxPYmplY3Q6MHgxMjM1OzNcbicgKwotICAgICdoZWFwLWpzLXJldC1p
dGVtLE9iamVjdDoweDEyMzQsKGdsb2JhbCBwcm9wZXJ0eSk7M1xuJyArCi0gICAgJ2hlYXAtanMt
cmV0LWl0ZW0sT2JqZWN0OjB4MTIzNSwoZ2xvYmFsIHByb3BlcnR5KTs1XG4nLAotCi0gICAgJ2hl
YXAtanMtY29ucy1pdGVtLGZvbywxNSwxNTAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0s
YmFyLDE1LDE1MDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxBcnJheSwxMCwxMDAwXG4n
ICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxmb28sYmFyOzEsQXJyYXk6MHg1Njc4OzFcbicgKwot
ICAgICdoZWFwLWpzLXJldC1pdGVtLGJhcixmb287NVxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0
ZW0sQXJyYXk6MHg1Njc4LChyb290cyk7M1xuJywKLQotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxi
YXIsMjAsMjAwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLGJheiwxNSwxNTAwXG4nICsK
LSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsYmF6OzNcbicgKwotICAgICdoZWFwLWpzLXJldC1p
dGVtLGJheixiYXI7M1xuJwotXTsKLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1SZW1v
dGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIgPSBmdW5jdGlvbigpCi17Ci19OwotCi0KLVJl
bW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1Yi5wcm90b3R5cGUuRGVidWdnZXJDb21tYW5k
ID0gZnVuY3Rpb24oY21kKQotewotICAgIGlmICgneyJzZXEiOjIsInR5cGUiOiJyZXF1ZXN0Iiwi
Y29tbWFuZCI6InNjcmlwdHMiLCJhcmd1bWVudHMiOnsiaW5jbHVkZVNvdXJjZSI6ZmFsc2V9fScg
PT09IGNtZCkgewotICAgICAgICB2YXIgcmVzcG9uc2UxID0KLSAgICAgICAgICAgICd7InNlcSI6
NSwicmVxdWVzdF9zZXEiOjIsInR5cGUiOiJyZXNwb25zZSIsImNvbW1hbmQiOiJzY3JpcHRzIiwi
JyArCi0gICAgICAgICAgICAnc3VjY2VzcyI6dHJ1ZSwiYm9keSI6W3siaGFuZGxlIjo2MSwidHlw
ZSI6InNjcmlwdCIsIm5hbWUiOiInICsKLSAgICAgICAgICAgICdodHRwOi8vd3d3L350ZXN0L3Qu
anMiLCJpZCI6NTksImxpbmVPZmZzZXQiOjAsImNvbHVtbk9mZnNldCI6MCwnICsKLSAgICAgICAg
ICAgICcibGluZUNvdW50IjoxLCJzb3VyY2VTdGFydCI6ImZ1bmN0aW9uIGZpYihuKSB7Iiwic291
cmNlTGVuZ3RoIjozMDAsJyArCi0gICAgICAgICAgICAnInNjcmlwdFR5cGUiOjIsImNvbXBpbGF0
aW9uVHlwZSI6MCwiY29udGV4dCI6eyJyZWYiOjYwfX1dLCJyZWZzIjpbeycgKwotICAgICAgICAg
ICAgJyJoYW5kbGUiOjYwLCJ0eXBlIjoiY29udGV4dCIsImRhdGEiOiJwYWdlLDMifV0sInJ1bm5p
bmciOmZhbHNlfSc7Ci0gICAgICAgIHRoaXMuc2VuZFJlc3BvbnNlXyhyZXNwb25zZTEpOwotICAg
IH0gZWxzZSBpZiAoJ3sic2VxIjozLCJ0eXBlIjoicmVxdWVzdCIsImNvbW1hbmQiOiJzY3JpcHRz
IiwiYXJndW1lbnRzIjp7ImlkcyI6WzU5XSwiaW5jbHVkZVNvdXJjZSI6dHJ1ZX19JyA9PT0gY21k
KSB7Ci0gICAgICAgIHRoaXMuc2VuZFJlc3BvbnNlXygKLSAgICAgICAgICAgICd7InNlcSI6OCwi
cmVxdWVzdF9zZXEiOjMsInR5cGUiOiJyZXNwb25zZSIsImNvbW1hbmQiOiJzY3JpcHRzIiwnICsK
LSAgICAgICAgICAgICcic3VjY2VzcyI6dHJ1ZSwiYm9keSI6W3siaGFuZGxlIjoxLCJ0eXBlIjoi
c2NyaXB0IiwibmFtZSI6JyArCi0gICAgICAgICAgICAnImh0dHA6Ly93d3cvfnRlc3QvdC5qcyIs
ImlkIjo1OSwibGluZU9mZnNldCI6MCwiY29sdW1uT2Zmc2V0IjowLCcgKwotICAgICAgICAgICAg
JyJsaW5lQ291bnQiOjEsInNvdXJjZSI6ImZ1bmN0aW9uIGZpYihuKSB7cmV0dXJuIG4rMTt9Iiwn
ICsKLSAgICAgICAgICAgICcic291cmNlTGVuZ3RoIjoyNDQsInNjcmlwdFR5cGUiOjIsImNvbXBp
bGF0aW9uVHlwZSI6MCwiY29udGV4dCI6eycgKwotICAgICAgICAgICAgJyJyZWYiOjB9fV0sInJl
ZnMiOlt7ImhhbmRsZSI6MCwidHlwZSI6ImNvbnRleHQiLCJkYXRhIjoicGFnZSwzfV0sIicgKwot
ICAgICAgICAgICAgJyJydW5uaW5nIjpmYWxzZX0nKTsKLSAgICB9IGVsc2UgaWYgKGNtZC5pbmRl
eE9mKCciY29tbWFuZCI6InByb2ZpbGUiJykgIT09IC0xKSB7Ci0gICAgICAgIHZhciBjbWRPYmog
PSBKU09OLnBhcnNlKGNtZCk7Ci0gICAgICAgIGlmIChjbWRPYmouYXJndW1lbnRzLmNvbW1hbmQg
PT09ICJyZXN1bWUiKQotICAgICAgICAgICAgUHJvZmlsZXJTdHViSGVscGVyLkdldEluc3RhbmNl
KCkuU3RhcnRQcm9maWxpbmcocGFyc2VJbnQoY21kT2JqLmFyZ3VtZW50cy5tb2R1bGVzKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGNtZE9iai5hcmd1bWVudHMuY29tbWFuZCA9PT0gInBhdXNlIikKLSAg
ICAgICAgICAgIFByb2ZpbGVyU3R1YkhlbHBlci5HZXRJbnN0YW5jZSgpLlN0b3BQcm9maWxpbmco
cGFyc2VJbnQoY21kT2JqLmFyZ3VtZW50cy5tb2R1bGVzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRlYnVnUHJpbnQoIlVuZXhwZWN0ZWQgcHJvZmlsZSBjb21tYW5kOiAiICsgY21kT2Jq
LmFyZ3VtZW50cy5jb21tYW5kKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVidWdQcmludCgiVW5l
eHBlY3RlZCBjb21tYW5kOiAiICsgY21kKTsKLX07Ci0KLQotUmVtb3RlRGVidWdnZXJDb21tYW5k
RXhlY3V0b3JTdHViLnByb3RvdHlwZS5EZWJ1Z2dlclBhdXNlU2NyaXB0ID0gZnVuY3Rpb24oKQot
ewotfTsKLQotCi1SZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIucHJvdG90eXBlLnNl
bmRSZXNwb25zZV8gPSBmdW5jdGlvbihyZXNwb25zZSkKLXsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgewotICAgICAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LmRlYnVnZ2VyT3V0cHV0KHJlc3Bv
bnNlKTsKLSAgICB9LCAwKTsKLX07Ci0KLQotRGV2VG9vbHNIb3N0U3R1YiA9IGZ1bmN0aW9uKCkK
LXsKLSAgICB0aGlzLmlzU3R1YiA9IHRydWU7Ci19OwotRGV2VG9vbHNIb3N0U3R1Yi5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJv
dG90eXBlOwotCi0KLURldlRvb2xzSG9zdFN0dWIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24o
KQotewotfTsKLQotCi1EZXZUb29sc0hvc3RTdHViLnByb3RvdHlwZS5zZXR0aW5nID0gZnVuY3Rp
b24oKQotewotfTsKLQotCi1EZXZUb29sc0hvc3RTdHViLnByb3RvdHlwZS5zZXRTZXR0aW5nID0g
ZnVuY3Rpb24oKQotewotfTsKLQotCi13aW5kb3dbIlJlbW90ZURlYnVnZ2VyQWdlbnQiXSA9IG5l
dyBSZW1vdGVEZWJ1Z2dlckFnZW50U3R1YigpOwotd2luZG93WyJSZW1vdGVEZWJ1Z2dlckNvbW1h
bmRFeGVjdXRvciJdID0gbmV3IFJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1YigpOwot
d2luZG93WyJSZW1vdGVQcm9maWxlckFnZW50Il0gPSBuZXcgUmVtb3RlUHJvZmlsZXJBZ2VudFN0
dWIoKTsKLXdpbmRvd1siUmVtb3RlVG9vbHNBZ2VudCJdID0gbmV3IFJlbW90ZVRvb2xzQWdlbnRT
dHViKCk7Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3QgPSBuZXcgRGV2VG9vbHNIb3N0U3R1YigpOwot
CisgICAgd2luZG93WyJSZW1vdGVEZWJ1Z2dlckFnZW50Il0gPSB7IHNldERlYnVnZ2VyU2NyaXB0
U291cmNlOiBmdW5jdGlvbigpIHt9IH07CisgICAgd2luZG93WyJSZW1vdGVEZWJ1Z2dlckNvbW1h
bmRFeGVjdXRvciJdID0ge307CisgICAgd2luZG93WyJSZW1vdGVQcm9maWxlckFnZW50Il0gPSB7
fTsKKyAgICB3aW5kb3dbIlJlbW90ZVRvb2xzQWdlbnQiXSA9IHsgZGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0OiBmdW5jdGlvbigpIHt9IH07CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL0luamVjdERpc3BhdGNoLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3RE
aXNwYXRjaC5qcwppbmRleCAzMGNhYWYyLi5iYzZkYzg3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvSW5qZWN0RGlzcGF0Y2guanMKQEAgLTQ5LDY1ICs0OSwxMiBAQCBJbnNwZWN0b3JDb250cm9s
bGVyRGlzcGF0Y2hlci5kaXNwYXRjaCA9IGZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSwganNvbl9hcmdz
KQogfTsKIAogLyoqCi0gKiBTcGVjaWFsIGNvbnRyb2xsZXIgb2JqZWN0IGZvciBBUFUgcmVsYXRl
ZCBtZXNzYWdlcy4gT3V0Z29pbmcgbWVzc2FnZXMKLSAqIGFyZSBzZW50IHRvIHRoaXMgb2JqZWN0
IGlmIHRoZSBBcHVBZ2VudERpc3BhdGNoZXIgaXMgZW5hYmxlZC4KLSAqKi8KLXZhciBBcHVBZ2Vu
dERpc3BhdGNoZXIgPSB7IGVuYWJsZWQgOiBmYWxzZSB9OwotCi0vKioKLSAqIERpc3BhdGNoZXMg
bWVzc2FnZXMgdG8gQVBVLiBUaGlzIGZpbHRlcnMgYW5kIHRyYW5zZm9ybXMKLSAqIG91dGdvaW5n
IG1lc3NhZ2VzIHRoYXQgYXJlIHVzZWQgYnkgQVBVLgotICogQHBhcmFtIHtzdHJpbmd9IG1ldGhv
ZCBuYW1lIG9mIHRoZSBkaXNwYXRjaCBtZXRob2QuCi0gKiovCi1BcHVBZ2VudERpc3BhdGNoZXIu
ZGlzcGF0Y2hUb0FwdSA9IGZ1bmN0aW9uKG1ldGhvZCwgYXJncykKLXsKLSAgICBpZiAobWV0aG9k
ICE9PSAiYWRkUmVjb3JkVG9UaW1lbGluZSIgJiYgbWV0aG9kICE9PSAidXBkYXRlUmVzb3VyY2Ui
ICYmIG1ldGhvZCAhPT0gImFkZFJlc291cmNlIikKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRP
RE8oa25vcnRvbik6IFRyYW5zZm9ybSBhcmdzIHNvIHRoZXkgY2FuIGJlIHVzZWQKLSAgICAvLyBi
eSBBUFUuCi0gICAgRGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0Y2hUb0FwdShKU09OLnN0cmluZ2lm
eShhcmdzKSk7Ci19OwotCi0vKioKICAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBJbnNwZWN0b3JG
cm9udGVuZCBmb3Igc2VyaWFsaXphdGlvbi4KICAqIFdlIHNlcmlhbGl6ZSB0aGUgY2FsbCBhbmQg
c2VuZCBpdCB0byB0aGUgY2xpZW50IG92ZXIgdGhlIElQQwogICogdXNpbmcgZGlzcGF0Y2hPdXQg
Ym91bmQgbWV0aG9kLgogICovCiBmdW5jdGlvbiBkaXNwYXRjaChtZXRob2QsIHZhcl9hcmdzKSB7
Ci0gICAgLy8gSGFuZGxlIGFsbCBtZXNzYWdlcyB3aXRoIG5vbi1wcmltaXRpZXZlIGFyZ3VtZW50
cyBoZXJlLgogICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1l
bnRzKTsKLQotICAgIGlmIChtZXRob2QgPT09ICJpbnNwZWN0ZWRXaW5kb3dDbGVhcmVkIiB8fCBt
ZXRob2QgPT09ICJyZXNldCIgfHwgbWV0aG9kID09PSAic2V0QXR0YWNoZWRXaW5kb3ciKSB7Ci0g
ICAgICAgIC8vIEZpbHRlciBvdXQgbWVzc2FnZXMgd2UgZG9uJ3QgbmVlZCBoZXJlLgotICAgICAg
ICAvLyBXZSBkbyBpdCBvbiB0aGUgc2VuZGVyIHNpZGUgc2luY2UgdGhleSBtYXkgaGF2ZSBub24t
c2VyaWFsaXphYmxlCi0gICAgICAgIC8vIHBhcmFtZXRlcnMuCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBTbmlmZiBzb21lIGluc3BlY3RvciBjb250cm9sbGVyIHN0YXRlIGNoYW5n
ZXMgaW4gb3JkZXIgdG8gc3VwcG9ydAotICAgIC8vIGNyb3NzLW5hdmlnYXRpb24gaW5zdHJ1bWVu
dGF0aW9uLiBLZWVwIG5hbWVzIGluIHN5bmMgd2l0aAotICAgIC8vIHdlYmRldnRvb2xzYWdlbnRf
aW1wbC4KLSAgICBpZiAobWV0aG9kID09PSAidGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQiKQot
ICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgidGlt
ZWxpbmUtcHJvZmlsZXIiLCB0cnVlKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT09ICJ0aW1lbGlu
ZVByb2ZpbGVyV2FzU3RvcHBlZCIpCi0gICAgICAgIERldlRvb2xzQWdlbnRIb3N0LnJ1bnRpbWVG
ZWF0dXJlU3RhdGVDaGFuZ2VkKCJ0aW1lbGluZS1wcm9maWxlciIsIGZhbHNlKTsKLSAgICBlbHNl
IGlmIChtZXRob2QgPT09ICJyZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCIpCi0gICAgICAgIERl
dlRvb2xzQWdlbnRIb3N0LnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKCJyZXNvdXJjZS10cmFj
a2luZyIsIHRydWUpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PT0gInJlc291cmNlVHJhY2tpbmdX
YXNEaXNhYmxlZCIpCi0gICAgICAgIERldlRvb2xzQWdlbnRIb3N0LnJ1bnRpbWVGZWF0dXJlU3Rh
dGVDaGFuZ2VkKCJyZXNvdXJjZS10cmFja2luZyIsIGZhbHNlKTsKLQotICAgIGlmIChBcHVBZ2Vu
dERpc3BhdGNoZXIuZW5hYmxlZCkgewotICAgICAgICBBcHVBZ2VudERpc3BhdGNoZXIuZGlzcGF0
Y2hUb0FwdShtZXRob2QsIGFyZ3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdmFy
IGNhbGwgPSBKU09OLnN0cmluZ2lmeShhcmdzKTsKLSAgICBEZXZUb29sc0FnZW50SG9zdC5kaXNw
YXRjaChjYWxsKTsKKyAgICBEZXZUb29sc0FnZW50SG9zdC5kaXNwYXRjaChjYWxsLCBtZXRob2Qs
IGFyZ3MpOwogfTsKLQotZnVuY3Rpb24gY2xvc2UoKSB7Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxheW91dCB0ZXN0cy4KLX0K
LQotZnVuY3Rpb24gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpIHsKLX0KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzCmluZGV4IDBmMjgyMzEu
LjdiOWI1YTUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29u
dHJvbGxlckltcGwuanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250
cm9sbGVySW1wbC5qcwpAQCAtMTIwLDI0ICsxMjAsNiBAQCBkZXZ0b29scy5JbnNwZWN0b3JCYWNr
ZW5kSW1wbCA9IGZ1bmN0aW9uKCkKIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90
eXBlOwogCiAKLS8qKgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsLnByb3RvdHlwZS5kZWJ1Z2dlckVuYWJsZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgcmV0
dXJuIHRydWU7Ci19OwotCi0KLS8qKgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLkluc3Bl
Y3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wcm9maWxlckVuYWJsZWQgPSBmdW5jdGlvbigpCi17
Ci0gICAgcmV0dXJuIHRydWU7Ci19OwotCi0KIGlmICghd2luZG93LnY4U2NyaXB0RGVidWdTZXJ2
ZXJFbmFibGVkKSB7CiAKIGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5z
ZXRCcmVha3BvaW50ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
bikK
</data>
<flag name="review"
          id="46479"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59641</attachid>
            <date>2010-06-24 04:51:25 -0700</date>
            <delta_ts>2010-06-24 05:04:19 -0700</delta_ts>
            <desc>[PATCH] Review comments addressed.</desc>
            <filename>cleanup</filename>
            <type>text/plain</type>
            <size>56093</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YjliYjU3YS4uNzlmNTlkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJl
dHRlciBEZXZUb29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAg
ICAtIFJlbW92ZWQgYSBidW5jaCBvZiB1bnVzZWQgbWV0aG9kcyBmcm9tIGFsbCBvdmVyIHRoZSBw
bGFjZQorICAgICAgICAtIEFkZGVkIGNsaWVudCBjYWxsYmFja3MgZm9yIHN0YXRlcyBzdXJ2aXZp
bmcgbmF2aWdhdGlvbgorICAgICAgICAtIEltcGxlbWVudGVkIG1vcmUgdXNlci1mcmllbmRseSBz
dHViIGZvciBJbnNwZWN0b3JGcm9udGVuZEhvc3QucGxhdGZvcm0KKworICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2xpZW50OjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2xpZW50Ojp0aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQ6OnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVSZXNvdXJjZVRyYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVSZXNvdXJjZVRyYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuc3VyZVNldHRp
bmdzTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzdG9wVGltZWxpbmVQcm9maWxlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qczoK
KyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5
cGUucGxhdGZvcm0pOgorCiAyMDEwLTA2LTIyICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCmluZGV4IDJjZTNhMDkuLjYxOTAwYmIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC01MCw2ICs1MCwxNCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHNlbmRNZXNzYWdlVG9Gcm9udGVuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKworICAgIC8vIE5hdmlnYXRpb24gY2FuIGNhdXNl
IHNvbWUgV2ViS2l0IGltcGxlbWVudGF0aW9ucyB0byBjaGFuZ2UgdGhlIHZpZXcgLyBwYWdlIC8g
aW5zcGVjdG9yIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgICAgLy8gSG93ZXZlciwgdGhlcmUgYXJl
IHNvbWUgaW5zcGVjdG9yIGNvbnRyb2xsZXIgc3RhdGVzIHRoYXQgc2hvdWxkIHN1cnZpdmUgbmF2
aWdhdGlvbiAoc3VjaCBhcyB0cmFja2luZyByZXNvdXJjZXMKKyAgICAvLyBvciByZWNvcmRpbmcg
dGltZWxpbmUpLiBGb2xsb3dpbmcgY2FsbGJhY2tzIGFsbG93IGVtYmVkZGVycyB0byB0cmFjayB0
aGVzZSBzdGF0ZXMuCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVk
KCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKSB7
IH07CisgICAgdmlydHVhbCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCkgeyB9Owor
ICAgIHZpcnR1YWwgdm9pZCB0aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpIHsgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1ZWFjOTM2Li5j
MGRiZTk3Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMTAxLDYg
KzExMDEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVJlc291cmNlVHJhY2tp
bmcoYm9vbCBhbHdheXMsIGJvb2wgcmVsb2FkKQogICAgIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQgPSB0cnVlOwogICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT5yZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNraW5n
V2FzRW5hYmxlZCgpOwogCiAgICAgaWYgKHJlbG9hZCkKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKHRydWUp
OwpAQCAtMTExOCw2ICsxMTE5LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxl
UmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKICAgICBtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkID0gZmFsc2U7CiAgICAgaWYgKG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnJl
c291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOworICAgIG1fY2xpZW50LT5yZXNvdXJjZVRyYWNr
aW5nV2FzRGlzYWJsZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVT
ZXR0aW5nc0xvYWRlZCgpCkBAIC0xMTI5LDYgKzExMzEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICBTdHJpbmcgcmVzb3VyY2VUcmFja2lu
ZyA9IHNldHRpbmcocmVzb3VyY2VUcmFja2luZ0VuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYg
KHJlc291cmNlVHJhY2tpbmcgPT0gInRydWUiKQogICAgICAgICBtX3Jlc291cmNlVHJhY2tpbmdF
bmFibGVkID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQo
KTsKIAogICAgIFN0cmluZyBtb25pdG9yaW5nWEhSID0gc2V0dGluZyhtb25pdG9yaW5nWEhSU2V0
dGluZ05hbWUpOwogICAgIGlmIChtb25pdG9yaW5nWEhSID09ICJ0cnVlIikKQEAgLTExNDYsNiAr
MTE0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1lbGluZVByb2ZpbGVy
KCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChtX2Zy
b250ZW5kLmdldCgpKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKKyAgICBtX2NsaWVudC0+dGltZWxpbmVQcm9m
aWxlcldhc1N0YXJ0ZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGlt
ZWxpbmVQcm9maWxlcigpCkBAIC0xMTU5LDYgKzExNjMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKICAgICBtX3RpbWVsaW5lQWdlbnQgPSAwOwog
ICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVy
V2FzU3RvcHBlZCgpOworICAgIG1fY2xpZW50LT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgp
OwogfQogCiAjaWYgRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKaW5kZXggMjg3ZTY3Zi4uNTZlZDFlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcApAQCAtMTg0LDE0ICsxODQsNiBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZShsb25nIG5vZGVJZCkKICAgICBmdW5jdGlvbi5jYWxsKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0
YWNoZWQpCi17Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCi0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVk
V2luZG93Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOwotICAgIGZ1
bmN0aW9uLmNhbGwoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2hvd1BhbmVsKGlu
dCBwYW5lbCkKIHsKICAgICBjb25zdCBjaGFyKiBzaG93RnVuY3Rpb25OYW1lOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggZDMwZTIzYy4uNjIwNDg3MSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC03Nyw3ICs3Nyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaWRHZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVGb2N1c2VkTm9k
ZShsb25nIG5vZGVJZCk7Ci0gICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRh
Y2hlZCk7CiAgICAgICAgIHZvaWQgc2hvd1BhbmVsKGludCBwYW5lbCk7CiAgICAgICAgIHZvaWQg
cG9wdWxhdGVJbnRlcmZhY2UoKTsKICAgICAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCmluZGV4IDAx
NmQ3NDguLjFhZTMyYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5zcGVjdG9yQmFja2VuZFN0dWIuanMKQEAgLTc5LDEwICs3OSw2IEBAIFdlYkluc3BlY3Rvci5J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgewogICAgIH0sCiAKLSAgICBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodDogZnVuY3Rpb24oaGVpZ2h0KQotICAgIHsKLSAgICB9LAot
CiAgICAgbW92ZUJ5VW5yZXN0cmljdGVkOiBmdW5jdGlvbih4LCB5KQogICAgIHsKICAgICB9LApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qcwppbmRleCA1NDU2MDY5Li4zOWJiZTAyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpA
QCAtNDAsNyArNDAsMTMgQEAgV2ViSW5zcGVjdG9yLl9wbGF0Zm9ybUZsYXZvciA9IFdlYkluc3Bl
Y3Rvci5QbGF0Zm9ybUZsYXZvci5NYWNMZW9wYXJkOwogV2ViSW5zcGVjdG9yLkluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogICAgIHBsYXRmb3JtOiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICByZXR1cm4gIm1hYyI7CisgICAgICAgIHZhciBtYXRjaCA9IG5hdmlnYXRv
ci51c2VyQWdlbnQubWF0Y2goL1dpbmRvd3MgTlQvKTsKKyAgICAgICAgaWYgKG1hdGNoKQorICAg
ICAgICAgICAgcmV0dXJuICJ3aW5kb3dzIjsKKyAgICAgICAgbWF0Y2ggPSBuYXZpZ2F0b3IudXNl
ckFnZW50Lm1hdGNoKC9NYWMgT1MgWC8pOworICAgICAgICBpZiAobWF0Y2gpCisgICAgICAgICAg
ICByZXR1cm4gIm1hYyI7CisgICAgICAgIHJldHVybiAibGludXgiOwogICAgIH0sCiAKICAgICBw
b3J0OiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5OGYxMTMxLi5lYzYxYmUxIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2MSBAQAorMjAxMC0wNi0yMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3IgY2xlYW51cCArIGJldHRlciBEZXZU
b29scyBhbGlnbm1lbnQgd2l0aCBJbnNwZWN0b3IuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEwOTQKKworICAgICAgICAtIE1lcmdl
ZCBJbnNwZWN0b3JDbGllbnQgaW1wbGVtZW50YXRpb24gaW50byBXZWJEZXZUb29sc0FnZW50Cisg
ICAgICAgIC0gQ2hhbmdlZCB0aGUgd2F5IFdlYkRldlRvb2xzQWdlbnQgaXMgaW5pdGlhbGl6ZWQg
KHdpbGwgYnJlYWsgY2hyb21pdW0gYm90LCBuZWVkcyBjb29yZGluYXRlZCBsYW5kaW5nKQorICAg
ICAgICAtIFJlbW92ZWQgYSBsb3Qgb2YgbGVnYWN5IGNvZGUgZnJvbSBXZWJEZXZUb29sc0FnZW50
SW1wbAorICAgICAgICAtIFJlbW92ZWQgYSBsb3Qgb2Ygb3ZlcnJpZGVzIGZyb20gRGV2VG9vbHMu
anMKKyAgICAgICAgLSBTaW1wbGlmaWVkIGRldnRvb2xzIHN0dWJzCisgICAgICAgIC0gR290IHJp
ZCBvZiBhbGwgbG9naWMgZnJvbSB3aXRoaW4gSW5qZWN0RGlzcGF0Y2guanMKKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnQuaDoKKyAgICAg
ICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNo
RGlkQ29tbWl0TG9hZCk6CisgICAgICAgICogc3JjL0luc3BlY3RvckZyb250ZW5kQ2xpZW50SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogc3JjL1Rvb2xzQWdlbnQuaDoKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjopOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNo
T25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVj
dG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpw
b3B1bGF0ZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6
c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNl
bmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzQWdlbnRJbXBsOjpyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAg
ICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oOgorICAgICAgICAqIHNyYy9XZWJW
aWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgICogc3JjL1dlYlZp
ZXdJbXBsLmg6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJXb3JrZXJCYXNlOjppbml0aWFsaXplTG9hZGVyKToKKyAgICAgICAgKiBzcmMvanMv
RGV2VG9vbHMuanM6CisgICAgICAgIChkZXZ0b29scy5Ub29sc0FnZW50KToKKyAgICAgICAgKCk6
CisgICAgICAgIChkZXZ0b29scyk6CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIu
anM6CisgICAgICAgICgud2luZG93LnNldERlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAg
KC53aW5kb3cuZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBzcmMvanMvSW5q
ZWN0RGlzcGF0Y2guanM6CisgICAgICAgIChkaXNwYXRjaCk6CisgICAgICAgICogc3JjL2pzL0lu
c3BlY3RvckNvbnRyb2xsZXJJbXBsLmpzOgorCiAyMDEwLTA2LTIyICBNaWtoYWlsIE5hZ2Fub3Yg
IDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggYTUzZGQyOC4uZWE1ZTNiZCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTI4Myw4ICsyODMsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvSURCT2JqZWN0U3RvcmVQ
cm94eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL0luZGV4ZWREYXRhYmFzZVByb3h5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9JbmRleGVkRGF0YWJhc2VQcm94eS5oJywKLSAgICAgICAg
ICAgICAgICAnc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL0luc3BlY3RvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9JbnNwZWN0
b3JGcm9udGVuZENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZv
bnRSZW5kZXJpbmcuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50
LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcu
aApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDkwNTRkOGMuLjczNGEzZDUK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsK
IGNsYXNzIFdlYkRyYWdEYXRhOworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKIGNsYXNz
IFdlYkZyYW1lOwogY2xhc3MgV2ViRnJhbWVDbGllbnQ7CiBjbGFzcyBXZWJOb2RlOwpAQCAtNTUs
OCArNTYsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBDcmVhdGVzIGEgV2ViVmlldyB0aGF0IGlzIE5P
VCB5ZXQgaW5pdGlhbGl6ZWQuICBZb3Ugd2lsbCBuZWVkIHRvCiAgICAgLy8gY2FsbCBpbml0aWFs
aXplTWFpbkZyYW1lIHRvIGZpbmlzaCB0aGUgaW5pdGlhbGl6YXRpb24uICBJdCBpcyB2YWxpZAot
ICAgIC8vIHRvIHBhc3MgYSBudWxsIFdlYlZpZXdDbGllbnQgcG9pbnRlci4KLSAgICBXRUJLSVRf
QVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCopOworICAgIC8vIHRvIHBh
c3MgYSBudWxsIFdlYlZpZXdDbGllbnQgYW5kIFdlYkRldlRvb2xzQ2xpZW50IHBvaW50ZXJzLiAK
KyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGUoV2ViVmlld0NsaWVudCosIFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqKTsKIAogICAgIC8vIEFmdGVyIGNyZWF0aW5nIGEgV2ViVmll
dywgeW91IHNob3VsZCBpbW1lZGlhdGVseSBjYWxsIHRoaXMgbWV0aG9kLgogICAgIC8vIFlvdSBj
YW4gb3B0aW9uYWxseSBtb2RpZnkgdGhlIHNldHRpbmdzIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0
aG9kLgpAQCAtMjIzLDcgKzIyNCw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZW1iZWRkZXIgbWF5
IG9wdGlvbmFsbHkgZW5nYWdlIGEgV2ViRGV2VG9vbHNBZ2VudC4gIFRoaXMgbWF5IG9ubHkKICAg
ICAvLyBiZSBzZXQgb25jZSBwZXIgV2ViVmlldy4KICAgICB2aXJ0dWFsIFdlYkRldlRvb2xzQWdl
bnQqIGRldlRvb2xzQWdlbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERldlRvb2xzQWdl
bnQoV2ViRGV2VG9vbHNBZ2VudCopID0gMDsKIAogCiAgICAgLy8gQWNjZXNzaWJpbGl0eSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKb2xkIG1vZGUgMTAw
NjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2OTRkN2MyLi5kYWU5MzQ4Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKQEAgLTczNSw5ICs3MzUsNiBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIGlm
IChtX3dlYkZyYW1lLT5jbGllbnQoKSkKICAgICAgICAgbV93ZWJGcmFtZS0+Y2xpZW50KCktPmRp
ZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZyYW1lLCBpc05ld05hdmlnYXRpb24pOwotCi0g
ICAgaWYgKHdlYnZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpCi0gICAgICAgIHdlYnZpZXct
PmRldlRvb2xzQWdlbnRQcml2YXRlKCktPmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChtX3dlYkZy
YW1lLCBpc05ld05hdmlnYXRpb24pOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6
ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDEw
ZDUuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCi0jaW5j
bHVkZSAiV2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgotI2luY2x1ZGUgIldlYlJlY3QuaCIKLSNp
bmNsdWRlICJXZWJVUkwuaCIKLSNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAi
V2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLUluc3BlY3RvckNsaWVudEltcGw6Okluc3BlY3RvckNsaWVudEltcGwoV2ViVmlld0lt
cGwqIHdlYlZpZXcpCi0gICAgOiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLXsKLSAgICBB
U1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKLX0KLQotSW5zcGVjdG9yQ2xpZW50SW1wbDo6fklu
c3BlY3RvckNsaWVudEltcGwoKQotewotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCi17Ci0gICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRo
ZSBXZWJWaWV3SW1wbC4KLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVj
dG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQotewotICAgIC8v
IEZJWE1FOiBJcyBpdCBpbXBvcnRhbnQgdG8ganVzdCBpbnZhbGlkYXRlIHRoZSByZWN0IG9mIHRo
ZSBub2RlIHJlZ2lvbgotICAgIC8vIGdpdmVuIHRoYXQgdGhpcyBpcyBub3Qgb24gYSBjcml0aWNh
bCBjb2RlcGF0aD8gIEluIG9yZGVyIHRvIGRvIHNvLCB3ZSdkCi0gICAgLy8gaGF2ZSB0byB0YWtl
IHNjcm9sbGluZyBpbnRvIGFjY291bnQuCi0gICAgY29uc3QgV2ViU2l6ZSYgc2l6ZSA9IHdlYlZp
ZXctPnNpemUoKTsKLSAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIHNpemUud2lkdGgsIHNp
emUuaGVpZ2h0KTsKLSAgICBpZiAod2ViVmlldy0+Y2xpZW50KCkpCi0gICAgICAgIHdlYlZpZXct
PmNsaWVudCgpLT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgLy8gSW5zcGVj
dG9yQ29udHJvbGxlciBkb2VzIHRoZSBhY3R1YWxseSB0cmFja2luZyBvZiB0aGUgaGlnaGxpZ2h0
ZWQgbm9kZQotICAgIC8vIGFuZCB0aGUgZHJhd2luZyBvZiB0aGUgaGlnaGxpZ2h0LiBIZXJlIHdl
IGp1c3QgbWFrZSBzdXJlIHRvIGludmFsaWRhdGUKLSAgICAvLyB0aGUgcmVjdHMgb2YgdGhlIG9s
ZCBhbmQgbmV3IG5vZGVzLgotICAgIGhpZGVIaWdobGlnaHQoKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICAvLyBGSVhNRTogYWJsZSB0byBp
bnZhbGlkYXRlIGEgc21hbGxlciByZWN0LgotICAgIGludmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0
KG1faW5zcGVjdGVkV2ViVmlldyk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6cG9w
dWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQotewotICAgIFdl
YlN0cmluZyBzdHJpbmc7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5pbnNwZWN0b3JTZXR0aW5n
KGtleSwgJnN0cmluZyk7Ci0gICAgKnZhbHVlID0gc3RyaW5nOwotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudEltcGw6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLXsKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnNldEluc3BlY3RvclNldHRpbmco
a2V5LCB2YWx1ZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBXZWJEZXZU
b29sc0FnZW50SW1wbCogZGV2VG9vbHNBZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdl
bnRJbXBsKj4obV9pbnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50KCkpOwotICAgIGlmICgh
ZGV2VG9vbHNBZ2VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViVmVjdG9yPFdl
YlN0cmluZz4gYXJndW1lbnRzKHNpemVfdCgxKSk7Ci0gICAgYXJndW1lbnRzWzBdID0gbWVzc2Fn
ZTsKLSAgICBXZWJEZXZUb29sc01lc3NhZ2VEYXRhIGRhdGE7Ci0gICAgZGF0YS5jbGFzc05hbWUg
PSAiVG9vbHNBZ2VudERlbGVnYXRlIjsKLSAgICBkYXRhLm1ldGhvZE5hbWUgPSAiZGlzcGF0Y2hP
bkNsaWVudCI7Ci0gICAgZGF0YS5hcmd1bWVudHMuc3dhcChhcmd1bWVudHMpOwotICAgIGRldlRv
b2xzQWdlbnQtPnNlbmRScGNNZXNzYWdlKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5z
cGVjdG9yQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTk0ZTMuLjAwMDAwMDAKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
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
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbnNwZWN0b3JDbGllbnRJbXBsX2gKLSNkZWZpbmUg
SW5zcGVjdG9yQ2xpZW50SW1wbF9oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKLWNs
YXNzIFdlYlZpZXdJbXBsOwotCi1jbGFzcyBJbnNwZWN0b3JDbGllbnRJbXBsIDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ2xpZW50SW1w
bChXZWJWaWV3SW1wbCopOwotICAgIH5JbnNwZWN0b3JDbGllbnRJbXBsKCk7Ci0KLSAgICAvLyBJ
bnNwZWN0b3JDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJv
eWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNv
cmU6Ok5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotCi0gICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2Vi
Q29yZTo6U3RyaW5nKiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYpOwotcHJpdmF0ZToKLQotICAgIC8vIFRoZSBXZWJWaWV3SW1wbCBvZiB0aGUgcGFnZSBi
ZWluZyBpbnNwZWN0ZWQ7IGdldHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvcgotICAgIFdlYlZp
ZXdJbXBsKiBtX2luc3BlY3RlZFdlYlZpZXc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2Zjdl
ZDk1Li44M2I5MjVhCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50SW1wbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudEltcGwuaCIKIAorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhv
c3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTEyMCw5ICsxMjIsOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6Y2hhbmdl
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCiAgICAgLy8gRG8gbm90aGluZzsKIH0KICAg
ICAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50SW1wbDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICAvLyBEbyBub3RoaW5nOwor
ICAgIG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2V0VGl0bGUoIkRl
dmVsb3BlciBUb29scyAtICIgKyB1cmwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Ub29sc0FnZW50LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCBhYjQ4MTUzLi5jNzQ4YzhhCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvVG9vbHNBZ2VudC5oCkBAIC01MCw5ICs1MCw2IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogREVGSU5FX1JQQ19DTEFTUyhUb29sc0FnZW50LCBUT09MU19B
R0VOVF9TVFJVQ1QpCiAKICNkZWZpbmUgVE9PTFNfQUdFTlRfREVMRUdBVEVfU1RSVUNUKE1FVEhP
RDAsIE1FVEhPRDEsIE1FVEhPRDIsIE1FVEhPRDMsIE1FVEhPRDQsIE1FVEhPRDUpIFwKLSAgICAv
KiBVcGRhdGVzIGZvY3VzZWQgbm9kZSBvbiB0aGUgY2xpZW50LiAqLyBcCi0gICAgTUVUSE9EMShm
cmFtZU5hdmlnYXRlLCBTdHJpbmcgLyogdXJsICovKSBcCi0gICAgXAogICAgIC8qIFJlc3BvbnNl
IHRvIHRoZSBEaXNwYXRjaE9uKi4gKi8gXAogICAgIE1FVEhPRDMoZGlkRGlzcGF0Y2hPbiwgaW50
IC8qIGNhbGxfaWQgKi8sIFN0cmluZyAvKiByZXN1bHQgKi8sIFN0cmluZyAvKiBleGNlcHRpb24g
Ki8pIFwKICAgICBcCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMmE4MzBhMC4uZWQ2ODZl
OAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtNjIsMTEg
KzYyLDEzIEBACiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgogI2luY2x1ZGUg
IldlYkRldlRvb2xzTWVzc2FnZVRyYW5zcG9ydC5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgorI2luY2x1ZGUgIldlYlJlY3QuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRl
ICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgogI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3QuaCIKICNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXdD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTEwNCwyMyArMTA2LDkgQEAgdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kV2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gb2JqZWN0LCB2b2kKICAgICBvYmplY3QuRGlzcG9zZSgpOwogfQogCi12b2lkIFNl
dEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y29udGV4dCwgYm9vbCBlbmFibGVkKQotewotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwotICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hlciA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6
Q2FzdCgKLSAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpOZXcoIkFw
dUFnZW50RGlzcGF0Y2hlciIpKSk7Ci0gICAgaWYgKGRpc3BhdGNoZXIuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgZGlzcGF0Y2hlci0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxl
ZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGVuYWJsZWQpKTsKLX0KLQotLy8gVE9ETyhwZmVsZG1hbik6
IE1ha2UgdGhpcyBwdWJsaWMgaW4gV2ViRGV2VG9vbHNBZ2VudCBBUEkuCi1zdGF0aWMgY29uc3Qg
Y2hhciBrQXB1QWdlbnRGZWF0dXJlTmFtZVtdID0gImFwdS1hZ2VudCI7Ci0KLS8vIEtlZXAgdGhl
c2UgaW4gc3luYyB3aXRoIHRoZSBvbmVzIGluIGluamVjdF9kaXNwYXRjaC5qcy4KLXN0YXRpYyBj
b25zdCBjaGFyIGtUaW1lbGluZUZlYXR1cmVOYW1lW10gPSAidGltZWxpbmUtcHJvZmlsZXIiOwog
c3RhdGljIGNvbnN0IGNoYXIga1Jlc291cmNlVHJhY2tpbmdGZWF0dXJlTmFtZVtdID0gInJlc291
cmNlLXRyYWNraW5nIjsKK3N0YXRpYyBjb25zdCBjaGFyIGtUaW1lbGluZUZlYXR1cmVOYW1lW10g
PSAidGltZWxpbmUtcHJvZmlsZXIiOworc3RhdGljIGNvbnN0IGNoYXIga0FwdUFnZW50RmVhdHVy
ZU5hbWVbXSA9ICJhcHUtYWdlbnQiOwogCiBjbGFzcyBJT1JQQ0RlbGVnYXRlIDogcHVibGljIERl
dlRvb2xzUlBDOjpEZWxlZ2F0ZSwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKQEAgLTMx
MiwyMSArMzAwLDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUoKQog
ICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCk7CiB9CiAKLXZvaWQgV2ViRGV2
VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIHdl
YmZyYW1lLCBib29sIGlzTmV3TmF2aWdhdGlvbikKLXsKLSAgICBpZiAoIW1fYXR0YWNoZWQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJEYXRhU291cmNlKiBkcyA9IHdlYmZyYW1lLT5kYXRhU291
cmNlKCk7Ci0gICAgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCA9IGRzLT5yZXF1ZXN0KCk7
Ci0gICAgV2ViVVJMIHVybCA9IGRzLT5oYXNVbnJlYWNoYWJsZVVSTCgpID8KLSAgICAgICAgZHMt
PnVucmVhY2hhYmxlVVJMKCkgOgotICAgICAgICByZXF1ZXN0LnVybCgpOwotICAgIGlmICghd2Vi
ZnJhbWUtPnBhcmVudCgpKSB7Ci0gICAgICAgIG1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZnJh
bWVOYXZpZ2F0ZShXZWJDb3JlOjpLVVJMKHVybCkuc3RyaW5nKCkpOwotICAgICAgICBTZXRBcHVB
Z2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1fdXRpbGl0eUNvbnRleHQsIG1fYXB1QWdlbnRF
bmFibGVkKTsKLSAgICB9Ci19Ci0KIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFy
V2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogd2ViZnJhbWUpCiB7CiAgICAgRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNldEhvc3RJZCh3ZWJmcmFtZSwgbV9ob3N0SWQpOwpAQCAtNDE4LDE1ICszOTEs
NiBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbml0RGV2VG9vbHNBZ2VudEhvc3QoKQog
ICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCiAgICAgICAgICJkaXNwYXRj
aCIsCiAgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoT25DbGllbnQpOwot
ICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJkaXNwYXRj
aFRvQXB1IiwKLSAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRGlzcGF0Y2hUb0FwdSk7
Ci0gICAgZGV2dG9vbHNBZ2VudEhvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgImV2YWx1
YXRlT25TZWxmIiwKLSAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZhbHVhdGVPblNl
bGYpOwotICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJy
dW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCIsCi0gICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBs
Ojpqc09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQpOwogICAgIGRldnRvb2xzQWdlbnRIb3N0
LmJ1aWxkKCk7CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CkBAIC00ODcsNyArNDUxLDYg
QEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpCiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRBcHVB
Z2VudEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXB1QWdlbnRFbmFibGVkID0gZW5h
YmxlZDsKLSAgICBTZXRBcHVBZ2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1fdXRpbGl0eUNv
bnRleHQsIGVuYWJsZWQpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gbV93ZWJWaWV3
SW1wbC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaWYgKGVuYWJsZWQpIHsK
ICAgICAgICAgbV9yZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCA9IGljLT5yZXNvdXJjZVRyYWNr
aW5nRW5hYmxlZCgpOwpAQCAtNTE2LDU1ICs0NzksMjUgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoT25DbGllbnQoY29uc3Qgdjg6OkFyZ3Vt
ZW4KICAgICBTdHJpbmcgbWVzc2FnZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
Q2hlY2soYXJnc1swXSk7CiAgICAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNh
dGNoZXIuSGFzQ2F1Z2h0KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKICAg
ICBXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Fn
ZW50SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKLSAg
ICBhZ2VudC0+bV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5kaXNwYXRjaE9uQ2xpZW50KG1lc3Nh
Z2UpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19CiAKLS8vIHN0YXRpYwotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoVG9BcHUoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0
Y2hlcjsKLSAgICBTdHJpbmcgbWVzc2FnZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgaWYgKG1lc3NhZ2UuaXNFbXB0eSgpIHx8IGV4Y2VwdGlv
bkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgaWYgKCFhZ2VudC0+bV9hcHVBZ2VudEVuYWJsZWQp
IHsKKyAgICAgICAgYWdlbnQtPm1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZGlzcGF0Y2hPbkNs
aWVudChtZXNzYWdlKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBXZWJE
ZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1w
bCo+KAotICAgICAgICB2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7
Ci0gICAgYWdlbnQtPm1fYXB1QWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoVG9BcHUobWVzc2Fn
ZSk7Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotLy8gc3RhdGljCi12ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZhbHVhdGVPblNlbGYoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBTdHJpbmcgY29kZTsKLSAgICB7Ci0gICAg
ICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotICAgICAgICBjb2RlID0gV2ViQ29y
ZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKLSAgICAgICAgaWYgKGNv
ZGUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KLSAgICBXZWJEZXZUb29sc0FnZW50SW1w
bCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+KHY4OjpFeHRlcm5h
bDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUo
YWdlbnQtPm1fdXRpbGl0eUNvbnRleHQpOwotICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6
cmV0cmlldmUoYWdlbnQtPm1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5LT5ydW5TY3JpcHQodjg6OlNjcmlw
dDo6Q29tcGlsZSh2ODo6U3RyaW5nOjpOZXcoY29kZS51dGY4KCkuZGF0YSgpKSksIHRydWUpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19CiAKLS8vIHN0YXRpYwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0
Y2hlcjsKLSAgICBTdHJpbmcgZmVhdHVyZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgYm9vbCBlbmFibGVkID0gYXJnc1sxXS0+VG9Cb29sZWFu
KCktPlZhbHVlKCk7Ci0gICAgaWYgKGZlYXR1cmUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNo
ZXIuSGFzQ2F1Z2h0KCkpCisgICAgU3RyaW5nIG1ldGhvZCA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0
cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSk7CisgICAgaWYgKG1ldGhvZC5pc0VtcHR5KCkgfHwg
ZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLSAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJE
ZXZUb29sc0FnZW50SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1
ZSgpKTsKLSAgICBhZ2VudC0+bV9jbGllbnQtPnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGZl
YXR1cmUsIGVuYWJsZWQpOworCisgICAgaWYgKG1ldGhvZCAhPSAiYWRkUmVjb3JkVG9UaW1lbGlu
ZSIgJiYgbWV0aG9kICE9ICJ1cGRhdGVSZXNvdXJjZSIgJiYgbWV0aG9kICE9ICJhZGRSZXNvdXJj
ZSIpDQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgYWdlbnQtPm1fYXB1
QWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoVG9BcHUobWVzc2FnZSk7CiAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKIH0KIAotCiBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6aW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCkpCkBAIC02MTgsNiArNTUxLDgzIEBAIHZvaWQg
V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgcmVzb3Vy
Y2VJZCwgY29uc3QgV2ViVVJMCiAgICAgICAgIGljLT5kaWRGYWlsTG9hZGluZyhyZXNvdXJjZUlk
LCByZXNvdXJjZUVycm9yKTsKIH0KIAordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVj
dG9yRGVzdHJveWVkKCkNCit7DQorICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0byB0aGUg
V2ViVmlld0ltcGwuDQorfQ0KKw0KK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6Om9wZW5JbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikNCit7DQorfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICAvLyBJbnNwZWN0
b3JDb250cm9sbGVyIGRvZXMgdGhlIGFjdHVhbGwgdHJhY2tpbmcgb2YgdGhlIGhpZ2hsaWdodGVk
IG5vZGUKKyAgICAvLyBhbmQgdGhlIGRyYXdpbmcgb2YgdGhlIGhpZ2hsaWdodC4gSGVyZSB3ZSBq
dXN0IG1ha2Ugc3VyZSB0byBpbnZhbGlkYXRlCisgICAgLy8gdGhlIHJlY3RzIG9mIHRoZSBvbGQg
YW5kIG5ldyBub2Rlcy4KKyAgICBoaWRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmhpZGVIaWdobGlnaHQoKQoreworICAgIC8vIEZJWE1FOiBhYmxlIHRvIGlu
dmFsaWRhdGUgYSBzbWFsbGVyIHJlY3QuCisgICAgLy8gRklYTUU6IElzIGl0IGltcG9ydGFudCB0
byBqdXN0IGludmFsaWRhdGUgdGhlIHJlY3Qgb2YgdGhlIG5vZGUgcmVnaW9uCisgICAgLy8gZ2l2
ZW4gdGhhdCB0aGlzIGlzIG5vdCBvbiBhIGNyaXRpY2FsIGNvZGVwYXRoPyAgSW4gb3JkZXIgdG8g
ZG8gc28sIHdlJ2QKKyAgICAvLyBoYXZlIHRvIHRha2Ugc2Nyb2xsaW5nIGludG8gYWNjb3VudC4K
KyAgICBjb25zdCBXZWJTaXplJiBzaXplID0gbV93ZWJWaWV3SW1wbC0+c2l6ZSgpOworICAgIFdl
YlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOworICAgIGlm
IChtX3dlYlZpZXdJbXBsLT5jbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3SW1wbC0+Y2xpZW50
KCktPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKK30KKwordm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZh
bHVlKQoreworICAgIFdlYlN0cmluZyBzdHJpbmc7CisgICAgbV93ZWJWaWV3SW1wbC0+aW5zcGVj
dG9yU2V0dGluZyhrZXksICZzdHJpbmcpOworICAgICp2YWx1ZSA9IHN0cmluZzsKK30KKwordm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fd2ViVmlld0ltcGwtPnNldEluc3BlY3RvclNl
dHRpbmcoa2V5LCB2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
V2ViRGV2VG9vbHNBZ2VudEltcGwqIGRldlRvb2xzQWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZU
b29sc0FnZW50SW1wbCo+KG1fd2ViVmlld0ltcGwtPmRldlRvb2xzQWdlbnQoKSk7CisgICAgaWYg
KCFkZXZUb29sc0FnZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJWZWN0b3I8
V2ViU3RyaW5nPiBhcmd1bWVudHMoc2l6ZV90KDEpKTsKKyAgICBhcmd1bWVudHNbMF0gPSBtZXNz
YWdlOworICAgIFdlYkRldlRvb2xzTWVzc2FnZURhdGEgZGF0YTsKKyAgICBkYXRhLmNsYXNzTmFt
ZSA9ICJUb29sc0FnZW50RGVsZWdhdGUiOworICAgIGRhdGEubWV0aG9kTmFtZSA9ICJkaXNwYXRj
aE9uQ2xpZW50IjsKKyAgICBkYXRhLmFyZ3VtZW50cy5zd2FwKGFyZ3VtZW50cyk7CisgICAgZGV2
VG9vbHNBZ2VudC0+c2VuZFJwY01lc3NhZ2UoZGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCkK
K3sKKyAgICBtX2NsaWVudC0+cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoa1Jlc291cmNlVHJh
Y2tpbmdGZWF0dXJlTmFtZSwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6
OnJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpCit7CisgICAgbV9jbGllbnQtPnJ1bnRpbWVG
ZWF0dXJlU3RhdGVDaGFuZ2VkKGtSZXNvdXJjZVRyYWNraW5nRmVhdHVyZU5hbWUsIGZhbHNlKTsK
K30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0
ZWQoKQoreworICAgIG1fY2xpZW50LT5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChrVGltZWxp
bmVGZWF0dXJlTmFtZSwgdHJ1ZSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnRp
bWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCkKK3sKKyAgICBtX2NsaWVudC0+cnVudGltZUZlYXR1
cmVTdGF0ZUNoYW5nZWQoa1RpbWVsaW5lRmVhdHVyZU5hbWUsIGZhbHNlKTsKK30KKwogdm9pZCBX
ZWJEZXZUb29sc0FnZW50SW1wbDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwg
Y29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbnNwZWN0b3JDb250cm9sbGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA0NTVkY2Vm
Li5jOTdiMjFmCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKQEAgLTMx
LDYgKzMxLDggQEAKICNpZm5kZWYgV2ViRGV2VG9vbHNBZ2VudEltcGxfaAogI2RlZmluZSBXZWJE
ZXZUb29sc0FnZW50SW1wbF9oCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKwogI2lu
Y2x1ZGUgIkFQVUFnZW50RGVsZWdhdGUuaCIKICNpbmNsdWRlICJEZXZUb29sc1JQQy5oIgogI2lu
Y2x1ZGUgIlRvb2xzQWdlbnQuaCIKQEAgLTQxLDYgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFN0cmluZzsKQEAgLTYyLDcgKzY1
LDggQEAgc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CiAKIGNsYXNzIFdlYkRldlRvb2xz
QWdlbnRJbXBsIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgVG9vbHNBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIERldlRvb2xzUlBDOjpEZWxlZ2F0ZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBEZXZUb29sc1JQQzo6RGVsZWdhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQgewogcHVibGlj
OgogICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3SW1wbCwgV2Vi
RGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50KTsKICAgICB2aXJ0dWFsIH5XZWJEZXZUb29sc0Fn
ZW50SW1wbCgpOwpAQCAtNzMsNyArNzcsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJEZXZUb29s
c0FnZW50UHJpdmF0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJX
aW5kb3dPYmplY3QoV2ViRnJhbWVJbXBsKiBmcmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIGZyYW1lLCBib29sIGlzTmV3TmF2aWdh
dGlvbik7CiAKICAgICAvLyBXZWJEZXZUb29sc0FnZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKQEAgLTkyLDYgKzk1LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZywgY29uc3QgV2ViVVJMRXJyb3ImKTsKIAor
ICAgIC8vIEluc3BlY3RvckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yRGVzdHJveWVkKCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGhp
Z2hsaWdodChXZWJDb3JlOjpOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmVT
ZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVkKCk7CisgICAgdmly
dHVhbCB2b2lkIHRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CisgICAgdmlydHVhbCB2b2lk
IHRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7CisgICAgdmlydHVhbCBib29sIHNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKwogICAgIC8vIERldlRvb2xz
UlBDOjpEZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgc2VuZFJwY01l
c3NhZ2UoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSk7CiAKQEAgLTEwMSw5ICsx
MTcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0Rpc3BhdGNoT25DbGllbnQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0Rpc3BhdGNoVG9BcHUoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncyk7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2YWx1
YXRlT25TZWxmKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNPblJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpOwogCiAgICAgdm9pZCBkaXNwb3NlVXRpbGl0eUNvbnRleHQoKTsKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCm9sZCBtb2Rl
IDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNDQ2ZjY0Ny4uNzAzOGE1ZQotLS0gYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oCkBAIC00MywxMSArNDMsNiBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIHdpbmRvdyBvYmplY3QgZm9yIHRoZSBmcmFtZSBoYXMgYmVlbiBj
bGVhcmVkIG9mIGFueSBleHRyYSBwcm9wZXJ0aWVzCiAgICAgLy8gdGhhdCBtYXkgaGF2ZSBiZWVu
IHNldCBieSBzY3JpcHQgZnJvbSB0aGUgcHJldmlvdXNseSBsb2FkZWQgZG9jdW1lbnQuCiAgICAg
dmlydHVhbCB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCopID0gMDsKLQot
ICAgIC8vIFRoZSBwcm92aXNpb25hbCBkYXRhc291cmNlIGlzIG5vdyBjb21taXR0ZWQuICBUaGUg
Zmlyc3QgcGFydCBvZiB0aGUKLSAgICAvLyByZXNwb25zZSBib2R5IGhhcyBiZWVuIHJlY2VpdmVk
LCBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSByZXNwb25zZSBib2R5Ci0gICAgLy8gaXMga25vd24u
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwq
LCBib29sIGlzTmV3TmF2aWdhdGlvbikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAx
MDA3NTUKaW5kZXggMzJjYTIzZi4uZDgwMGMwZAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApA
QCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29t
bWFuZC5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgpAQCAtMTAyLDYgKzEwMyw3IEBACiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAi
V2ViVmlld0NsaWVudC5oIgogCisKICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lQ2hyb21pdW1XaW4uaCIKICNlbHNlCkBAIC0xNjMsOSArMTY1LDkgQEAgc3RhdGljIGNvbnN0
IFBvcHVwQ29udGFpbmVyU2V0dGluZ3Mgc3VnZ2VzdGlvbnNQb3B1cFNldHRpbmdzID0gewogCiAv
LyBXZWJWaWV3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotV2ViVmlldyogV2ViVmlldzo6Y3JlYXRlKFdlYlZpZXdDbGll
bnQqIGNsaWVudCkKK1dlYlZpZXcqIFdlYlZpZXc6OmNyZWF0ZShXZWJWaWV3Q2xpZW50KiBjbGll
bnQsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGRldlRvb2xzQ2xpZW50KQogewotICAgIHJldHVy
biBuZXcgV2ViVmlld0ltcGwoY2xpZW50KTsKKyAgICByZXR1cm4gbmV3IFdlYlZpZXdJbXBsKGNs
aWVudCwgZGV2VG9vbHNDbGllbnQpOwogfQogCiB2b2lkIFdlYlZpZXc6OnVwZGF0ZVZpc2l0ZWRM
aW5rU3RhdGUodW5zaWduZWQgbG9uZyBsb25nIGxpbmtIYXNoKQpAQCAtMjEyLDE0ICsyMTQsMTMg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6aW5pdGlhbGl6ZU1haW5GcmFtZShXZWJGcmFtZUNsaWVudCog
ZnJhbWVDbGllbnQpCiAgICAgU2VjdXJpdHlPcmlnaW46OnNldExvY2FsTG9hZFBvbGljeShTZWN1
cml0eU9yaWdpbjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5KTsKIH0KIAotV2ViVmlld0lt
cGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKK1dlYlZpZXdJbXBsOjpXZWJW
aWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGRl
dlRvb2xzQ2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9iYWNrRm9yd2Fy
ZExpc3RDbGllbnRJbXBsKHRoaXMpCiAgICAgLCBtX2Nocm9tZUNsaWVudEltcGwodGhpcykKICAg
ICAsIG1fY29udGV4dE1lbnVDbGllbnRJbXBsKHRoaXMpCiAgICAgLCBtX2RyYWdDbGllbnRJbXBs
KHRoaXMpCiAgICAgLCBtX2VkaXRvckNsaWVudEltcGwodGhpcykKLSAgICAsIG1faW5zcGVjdG9y
Q2xpZW50SW1wbCh0aGlzKQogICAgICwgbV9vYnNlcnZlZE5ld05hdmlnYXRpb24oZmFsc2UpCiAj
aWZuZGVmIE5ERUJVRwogICAgICwgbV9uZXdOYXZpZ2F0aW9uTG9hZGVyKDApCkBAIC0yNTYsOCAr
MjU3LDExIEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChXZWJWaWV3Q2xpZW50KiBjbGllbnQp
CiAgICAgLy8gc2V0IHRvIGltcG9zc2libGUgcG9pbnQgc28gd2UgYWx3YXlzIGdldCB0aGUgZmly
c3QgbW91c2UgcG9zCiAgICAgbV9sYXN0TW91c2VQb3NpdGlvbiA9IFdlYlBvaW50KC0xLCAtMSk7
CiAKKyAgICBpZiAoZGV2VG9vbHNDbGllbnQpCisgICAgICAgIG1fZGV2VG9vbHNBZ2VudCA9IHN0
YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4oV2ViRGV2VG9vbHNBZ2VudDo6Y3JlYXRl
KHRoaXMsIGRldlRvb2xzQ2xpZW50KSk7CisKICAgICAvLyB0aGUgcGFnZSB3aWxsIHRha2Ugb3du
ZXJzaGlwIG9mIHRoZSB2YXJpb3VzIGNsaWVudHMKLSAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKCZt
X2Nocm9tZUNsaWVudEltcGwsICZtX2NvbnRleHRNZW51Q2xpZW50SW1wbCwgJm1fZWRpdG9yQ2xp
ZW50SW1wbCwgJm1fZHJhZ0NsaWVudEltcGwsICZtX2luc3BlY3RvckNsaWVudEltcGwsIDAsIDAs
IDApKTsKKyAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKCZtX2Nocm9tZUNsaWVudEltcGwsICZtX2Nv
bnRleHRNZW51Q2xpZW50SW1wbCwgJm1fZWRpdG9yQ2xpZW50SW1wbCwgJm1fZHJhZ0NsaWVudElt
cGwsIG1fZGV2VG9vbHNBZ2VudC5nZXQoKSwgMCwgMCwgMCkpOwogCiAgICAgbV9wYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKS0+c2V0Q2xpZW50KCZtX2JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwpOwog
ICAgIG1fcGFnZS0+c2V0R3JvdXBOYW1lKHBhZ2VHcm91cE5hbWUpOwpAQCAtMTgyNCwxMiArMTgy
OCw2IEBAIFdlYkRldlRvb2xzQWdlbnQqIFdlYlZpZXdJbXBsOjpkZXZUb29sc0FnZW50KCkKICAg
ICByZXR1cm4gbV9kZXZUb29sc0FnZW50LmdldCgpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpz
ZXREZXZUb29sc0FnZW50KFdlYkRldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdlbnQpCi17Ci0gICAg
QVNTRVJUKCFtX2RldlRvb2xzQWdlbnQuZ2V0KCkpOyAvLyBNYXkgb25seSBzZXQgb25jZSEKLSAg
ICBtX2RldlRvb2xzQWdlbnQuc2V0KHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRQcml2YXRl
Kj4oZGV2VG9vbHNBZ2VudCkpOwotfQotCiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYlZpZXdJ
bXBsOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkKIHsKICAgICBpZiAoIW1haW5GcmFtZUltcGwoKSkK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1
CmluZGV4IDJlZDA1NTcuLjE5NzgyOTAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzEsNiAr
MzEsNyBAQAogI2lmbmRlZiBXZWJWaWV3SW1wbF9oCiAjZGVmaW5lIFdlYlZpZXdJbXBsX2gKIAor
I2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlv
blBvbGljeS5oIgogI2luY2x1ZGUgIldlYlBvaW50LmgiCiAjaW5jbHVkZSAiV2ViU2l6ZS5oIgpA
QCAtNDAsMTAgKzQxLDEwIEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2xpZW50SW1wbC5o
IgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNs
aWVudEltcGwuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkRyYWdD
bGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50SW1wbC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTcxLDcgKzcyLDcgQEAgY2xh
c3MgQ29udGV4dE1lbnVDbGllbnRJbXBsOwogY2xhc3MgRHJhZ1Njcm9sbFRpbWVyOwogY2xhc3Mg
U3VnZ2VzdGlvbnNQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OwotY2xhc3MgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGU7CitjbGFzcyBXZWJEZXZUb29sc0FnZW50
Q2xpZW50OwogY2xhc3MgV2ViRnJhbWVJbXBsOwogY2xhc3MgV2ViSW1hZ2U7CiBjbGFzcyBXZWJL
ZXlib2FyZEV2ZW50OwpAQCAtMTcyLDcgKzE3Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5zcGVjdG9yU2V0dGluZyhjb25zdCBXZWJTdHJpbmcmIGtleSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKTsKICAgICB2
aXJ0dWFsIFdlYkRldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdlbnQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2VG9vbHNBZ2VudChXZWJEZXZUb29sc0FnZW50Kik7CiAgICAgdmlydHVhbCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlPYmplY3QoKTsKICAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKAogICAgICAgICBjb25zdCBXZWJOb2RlJiwKQEAg
LTM0Myw3ICszNDMsNyBAQCBwcml2YXRlOgogICAgICAgRHJhZ092ZXIKICAgICB9OwogCi0gICAg
V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KTsKKyAgICBXZWJWaWV3SW1wbChXZWJW
aWV3Q2xpZW50KiBjbGllbnQsIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGRldlRvb2xzQ2xpZW50
KTsKICAgICB+V2ViVmlld0ltcGwoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZl
bnQgd2FzIGFjdHVhbGx5IHByb2Nlc3NlZC4KQEAgLTM4OCwxMSArMzg4LDEzIEBAIHByaXZhdGU6
CiAgICAgQ29udGV4dE1lbnVDbGllbnRJbXBsIG1fY29udGV4dE1lbnVDbGllbnRJbXBsOwogICAg
IERyYWdDbGllbnRJbXBsIG1fZHJhZ0NsaWVudEltcGw7CiAgICAgRWRpdG9yQ2xpZW50SW1wbCBt
X2VkaXRvckNsaWVudEltcGw7Ci0gICAgSW5zcGVjdG9yQ2xpZW50SW1wbCBtX2luc3BlY3RvckNs
aWVudEltcGw7CiAKICAgICBXZWJTaXplIG1fc2l6ZTsKIAogICAgIFdlYlBvaW50IG1fbGFzdE1v
dXNlUG9zaXRpb247CisKKyAgICBPd25QdHI8V2ViRGV2VG9vbHNBZ2VudEltcGw+IG1fZGV2VG9v
bHNBZ2VudDsKKwogICAgIE93blB0cjxXZWJDb3JlOjpQYWdlPiBtX3BhZ2U7CiAKICAgICAvLyBU
aGlzIGZsYWcgaXMgc2V0IHdoZW4gYSBuZXcgbmF2aWdhdGlvbiBpcyBkZXRlY3RlZC4gSXQgaXMg
dXNlZCB0byBzYXRpc2Z5CkBAIC00OTMsOCArNDk1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUg
QXV0b0NvbXBsZXRlIHN1Z2dlc3Rpb25zIHBvcHVwLgogICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1
cENvbnRhaW5lcj4gbV9hdXRvY29tcGxldGVQb3B1cDsKIAotICAgIE93blB0cjxXZWJEZXZUb29s
c0FnZW50UHJpdmF0ZT4gbV9kZXZUb29sc0FnZW50OwotCiAgICAgLy8gV2hldGhlciB0aGUgd2Vi
dmlldyBpcyByZW5kZXJpbmcgdHJhbnNwYXJlbnRseS4KICAgICBib29sIG1faXNUcmFuc3BhcmVu
dDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5l
dyBtb2RlIDEwMDc1NQppbmRleCAyNDRjY2ViLi4wYWQwY2NkCi0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3Jr
ZXJCYXNlLmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgV2ViV29ya2VyQmFzZTo6aW5pdGlh
bGl6ZUxvYWRlcihjb25zdCBXZWJVUkwmIHVybCkKICAgICAvLyBsb2FkaW5nIHJlcXVlc3RzIGZy
b20gdGhlIHdvcmtlciBjb250ZXh0IHRvIHRoZSByZXN0IG9mIFdlYktpdCBhbmQgQ2hyb21pdW0K
ICAgICAvLyBpbmZyYXN0cnVjdHVyZS4KICAgICBBU1NFUlQoIW1fd2ViVmlldyk7Ci0gICAgbV93
ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOworICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNy
ZWF0ZSgwLCAwKTsKICAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldE9mZmxpbmVXZWJBcHBs
aWNhdGlvbkNhY2hlRW5hYmxlZChXZWJSdW50aW1lRmVhdHVyZXM6OmlzQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQoKSk7CiAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKHRoaXMpOwog
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwppbmRleCAzOThkMzU4Li44NTFjOTM0IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTYxLDcgKzYxLDYgQEAgZGV2dG9vbHMkJGRp
c3BhdGNoID0gZnVuY3Rpb24ocmVtb3RlTmFtZSwgbWV0aG9kTmFtZSwgcGFyYW0xLCBwYXJhbTIs
IHBhcmFtMykKIGRldnRvb2xzLlRvb2xzQWdlbnQgPSBmdW5jdGlvbigpCiB7CiAgICAgUmVtb3Rl
VG9vbHNBZ2VudC5kaWREaXNwYXRjaE9uID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3ND
YWxsYmFjazsKLSAgICBSZW1vdGVUb29sc0FnZW50LmZyYW1lTmF2aWdhdGUgPSB0aGlzLmZyYW1l
TmF2aWdhdGVfLmJpbmQodGhpcyk7CiAgICAgUmVtb3RlVG9vbHNBZ2VudC5kaXNwYXRjaE9uQ2xp
ZW50ID0gdGhpcy5kaXNwYXRjaE9uQ2xpZW50Xy5iaW5kKHRoaXMpOwogICAgIHRoaXMuZGVidWdn
ZXJBZ2VudF8gPSBuZXcgZGV2dG9vbHMuRGVidWdnZXJBZ2VudCgpOwogICAgIHRoaXMucHJvZmls
ZXJBZ2VudF8gPSBuZXcgZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCgpOwpAQCAtMTA3LDI0ICsxMDYs
MTQgQEAgZGV2dG9vbHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZ2V0UHJvZmlsZXJBZ2VudCA9IGZ1
bmN0aW9uKCkKIH07CiAKIAotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVybCBmcmFtZSBu
YXZpZ2F0ZWQgdG8uCi0gKiBAc2VlIHRvb2xzX2FnZW50LmgKLSAqIEBwcml2YXRlCi0gKi8KLWRl
dnRvb2xzLlRvb2xzQWdlbnQucHJvdG90eXBlLmZyYW1lTmF2aWdhdGVfID0gZnVuY3Rpb24odXJs
KQorKGZ1bmN0aW9uICgpIHsKK3ZhciBvcmlnID0gV2ViSW5zcGVjdG9yLnJlc2V0OworV2ViSW5z
cGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogewotICAgIHRoaXMucmVzZXQoKTsKLSAgICAvLyBE
byBub3QgcmVzZXQgUHJvZmlsZXMgcGFuZWwuCi0gICAgdmFyIHByb2ZpbGVzID0gbnVsbDsKLSAg
ICBpZiAoInByb2ZpbGVzIiBpbiBXZWJJbnNwZWN0b3IucGFuZWxzKSB7Ci0gICAgICAgIHByb2Zp
bGVzID0gV2ViSW5zcGVjdG9yLnBhbmVsc1sicHJvZmlsZXMiXTsKLSAgICAgICAgZGVsZXRlIFdl
Ykluc3BlY3Rvci5wYW5lbHNbInByb2ZpbGVzIl07Ci0gICAgfQotICAgIFdlYkluc3BlY3Rvci5y
ZXNldCgpOwotICAgIGlmIChwcm9maWxlcyAhPT0gbnVsbCkKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnBhbmVsc1sicHJvZmlsZXMiXSA9IHByb2ZpbGVzOworICAgIGRldnRvb2xzLnRvb2xzLnJlc2V0
KCk7CisgICAgb3JpZy5jYWxsKHRoaXMpOwogfTsKK30pKCk7CiAKIAogLyoqCkBAIC0zMDIsMzEg
KzI5MSw2IEBAIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykKICAgICBy
ZXR1cm4gU3RyaW5nLnZzcHJpbnRmKHN0cmluZywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
YXJndW1lbnRzLCAxKSk7CiB9OwogCi0vLyBBY3RpdmF0ZSB3aW5kb3cgdXBvbiBub2RlIHNlYXJj
aCBjb21wbGV0ZS4gVGhpcyB3aWxsIGdvIGF3YXkgb25jZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCBpcyBsYW5kZWQuCi0oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9yaWdpbmFsID0gV2ViSW5zcGVj
dG9yLnNlYXJjaGluZ0Zvck5vZGVXYXNEaXNhYmxlZDsKLSAgICBXZWJJbnNwZWN0b3Iuc2VhcmNo
aW5nRm9yTm9kZVdhc0Rpc2FibGVkID0gZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMucGFuZWxzLmVsZW1lbnRzLl9ub2RlU2VhcmNoQnV0dG9uLnRvZ2dsZWQpCi0gICAgICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7Ci0gICAgICAgIG9yaWdpbmFs
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfQotfSkoKTsKLQotCi0vLyBUaGVyZSBpcyBu
byBjbGVhciB3YXkgb2Ygc2V0dGluZyBmcmFtZSB0aXRsZSB5ZXQuIFNvIHNuaWZmaW5nIG1haW4g
cmVzb3VyY2UKLS8vIGxvYWQuCi0oZnVuY3Rpb24gT3ZlcnJpZGVVcGRhdGVSZXNvdXJjZSgpIHsK
LSAgICB2YXIgb3JpZ2luYWxVcGRhdGVSZXNvdXJjZSA9IFdlYkluc3BlY3Rvci51cGRhdGVSZXNv
dXJjZTsKLSAgICBXZWJJbnNwZWN0b3IudXBkYXRlUmVzb3VyY2UgPSBmdW5jdGlvbihpZGVudGlm
aWVyLCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgb3JpZ2luYWxVcGRhdGVSZXNvdXJjZS5jYWxs
KHRoaXMsIGlkZW50aWZpZXIsIHBheWxvYWQpOwotICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlz
LnJlc291cmNlc1tpZGVudGlmaWVyXTsKLSAgICAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNl
Lm1haW5SZXNvdXJjZSAmJiByZXNvdXJjZS5maW5pc2hlZCkKLSAgICAgICAgICAgIGRvY3VtZW50
LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZXZlbG9wZXIgVG9vbHMgLSAlcyIsIHJl
c291cmNlLnVybCk7Ci0gICAgfTsKLX0pKCk7Ci0KIAogLyoqIFBlbmRpbmcgV2ViS2l0IHVwc3Ry
ZWFtIGJ5IGFwYXZsb3YpLiBGaXhlcyBpZnJhbWUgdnMgZHJhZyBwcm9ibGVtLiAqLwogKGZ1bmN0
aW9uKCkKQEAgLTM1Niw5ICszMjAsMTAgQEAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nID0gZnVuY3Rp
b24oc3RyaW5nKQogfSkoKTsKIAogCi0vLyBXZSBuZWVkIHRvIGhhdmUgYSBwbGFjZSBmb3IgcG9z
dHBvbmVkIHRhc2tzCi0vLyB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiBhbGwgdGhlIG1l
c3NhZ2VzIGJldHdlZW4gYWdlbnQgYW5kIGZyb250ZW5kCi0vLyBhcmUgcHJvY2Vzc2VkLgorCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaHJvbWl1bSBs
YXlvdXQgdGVzdCBoYXJuZXNzIHN1cHBvcnQuIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCiAKIFdlYkluc3BlY3Rvci5ydW5BZnRlclBlbmRpbmdEaXNwYXRj
aGVzUXVldWUgPSBbXTsKIApAQCAtMzc1LDE5ICszNDAsMTEgQEAgV2ViSW5zcGVjdG9yLnF1ZXVl
c0FyZUVtcHR5ID0gZnVuY3Rpb24oKQogICAgICAgICBjb3B5W2ldLmNhbGwodGhpcyk7CiB9Owog
Ci0oZnVuY3Rpb24oKQotewotdmFyIG9yaWdpbmFsQWRkVG9GcmFtZSA9IEluc3BlY3RvckZyb250
ZW5kSG9zdC5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWU7Ci1JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lID0gZnVuY3Rpb24oaWRlbnRpZmllciwgZWxlbWVudCkK
LXsKLSAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VzW2lkZW50aWZpZXJd
OwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBvcmlnaW5hbEFkZFRv
RnJhbWUuY2FsbCh0aGlzLCBpZGVudGlmaWVyLCByZXNvdXJjZS5taW1lVHlwZSwgZWxlbWVudCk7
Ci19OwotfSkoKTsKIAotLy8gQ2hyb21pdW0gdGhlbWUgc3VwcG9ydC4KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisvLyBDaHJvbWl1bSB0aGVtZSBzdXBwb3J0LiAvLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKwogV2ViSW5zcGVjdG9yLnNldFRvb2xiYXJDb2xvcnMgPSBm
dW5jdGlvbihiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yKQogewogICAgIGlmICghV2ViSW5zcGVjdG9y
Ll90aGVtZVN0eWxlRWxlbWVudCkgewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9EZXZUb29sc0hvc3RTdHViLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29sc0hv
c3RTdHViLmpzCmluZGV4IGRhNTkyOWEuLjgwNmJmNmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0RldlRvb2xzSG9zdFN0dWIuanMKQEAgLTM0LDI3NyArMzQsOCBAQAogICovCiAKIGlmICgh
d2luZG93WyJSZW1vdGVEZWJ1Z2dlckFnZW50Il0pIHsKLQotLyoqCi0gKiBGSVhNRTogY2hhbmdl
IGZpZWxkIG5hbWluZyBzdHlsZSB0byB1c2UgdHJhaWxpbmcgdW5kZXJzY29yZS4KLSAqIEBjb25z
dHJ1Y3RvcgotICovCi1SZW1vdGVEZWJ1Z2dlckFnZW50U3R1YiA9IGZ1bmN0aW9uKCkKLXsKLX07
Ci0KLQotUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIucHJvdG90eXBlLmdldENvbnRleHRJZCA9IGZ1
bmN0aW9uKCkKLXsKLSAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LnNldENvbnRleHRJZCgzKTsKLX07
Ci0KLQotUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIucHJvdG90eXBlLnByb2Nlc3NEZWJ1Z0NvbW1h
bmRzID0gZnVuY3Rpb24oKQotewotfTsKLQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8K
LVJlbW90ZVByb2ZpbGVyQWdlbnRTdHViID0gZnVuY3Rpb24oKQotewotfTsKLQotCi1SZW1vdGVQ
cm9maWxlckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzID0gZnVu
Y3Rpb24oKQotewotICAgIFByb2ZpbGVyU3R1YkhlbHBlci5HZXRJbnN0YW5jZSgpLmdldEFjdGl2
ZVByb2ZpbGVyTW9kdWxlcygpOwotfTsKLQotCi1SZW1vdGVQcm9maWxlckFnZW50U3R1Yi5wcm90
b3R5cGUuZ2V0TG9nTGluZXMgPSBmdW5jdGlvbihwb3MpCi17Ci0gICAgUHJvZmlsZXJTdHViSGVs
cGVyLkdldEluc3RhbmNlKCkuZ2V0TG9nTGluZXMocG9zKTsKLX07Ci0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqLwotUmVtb3RlVG9vbHNBZ2VudFN0dWIgPSBmdW5jdGlvbigpCi17Ci19Owot
Ci0KLVJlbW90ZVRvb2xzQWdlbnRTdHViLnByb3RvdHlwZS5kaXNwYXRjaE9uSW5qZWN0ZWRTY3Jp
cHQgPSBmdW5jdGlvbigpCi17Ci19OwotCi0KLVJlbW90ZVRvb2xzQWdlbnRTdHViLnByb3RvdHlw
ZS5kaXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlciA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQot
LyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotUHJvZmlsZXJTdHViSGVscGVyID0gZnVuY3Rpb24o
KQotewotICAgIHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyA9IGRldnRvb2xzLlByb2ZpbGVy
QWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9OT05FOwotICAgIHRoaXMuaGVh
cFByb2ZTYW1wbGVfID0gMDsKLSAgICB0aGlzLmxvZ18gPSAnJzsKLX07Ci0KLQotUHJvZmlsZXJT
dHViSGVscGVyLkdldEluc3RhbmNlID0gZnVuY3Rpb24oKQotewotICAgIGlmICghUHJvZmlsZXJT
dHViSGVscGVyLmluc3RhbmNlXykKLSAgICAgICAgUHJvZmlsZXJTdHViSGVscGVyLmluc3RhbmNl
XyA9IG5ldyBQcm9maWxlclN0dWJIZWxwZXIoKTsKLSAgICByZXR1cm4gUHJvZmlsZXJTdHViSGVs
cGVyLmluc3RhbmNlXzsKLX07Ci0KLQotUHJvZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5TdG9w
UHJvZmlsaW5nID0gZnVuY3Rpb24obW9kdWxlcykKLXsKLSAgICB0aGlzLmFjdGl2ZVByb2ZpbGVy
TW9kdWxlc18gJj0gfm1vZHVsZXM7Ci19OwotCi0KLVByb2ZpbGVyU3R1YkhlbHBlci5wcm90b3R5
cGUuU3RhcnRQcm9maWxpbmcgPSBmdW5jdGlvbihtb2R1bGVzKQotewotICAgIHZhciBwcm9mTW9k
dWxlcyA9IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzOwotICAgIGlmICht
b2R1bGVzICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1QpIHsKLSAg
ICAgICAgaWYgKG1vZHVsZXMgJiBwcm9mTW9kdWxlcy5QUk9GSUxFUl9NT0RVTEVfSEVBUF9TVEFU
UykgewotICAgICAgICAgICAgdGhpcy5sb2dfICs9Ci0gICAgICAgICAgICAgICAgJ2hlYXAtc2Ft
cGxlLWJlZ2luLCJIZWFwIiwiYWxsb2NhdGVkIiwnICsKLSAgICAgICAgICAgICAgICAgICAgKG5l
dyBEYXRlKCkpLmdldFRpbWUoKSArICdcbicgKwotICAgICAgICAgICAgICAgICdoZWFwLXNhbXBs
ZS1zdGF0cywiSGVhcCIsImFsbG9jYXRlZCIsMTAwMDAsMTAwMFxuJzsKLSAgICAgICAgICAgIHRo
aXMubG9nXyArPQotICAgICAgICAgICAgICAgICdoZWFwLXNhbXBsZS1pdGVtLFNUUklOR19UWVBF
LDEwMCwxMDAwXG4nICsKLSAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxDT0RFX1RZ
UEUsMTAsMjAwXG4nICsKLSAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxNQVBfVFlQ
RSwyMCwzNTBcbic7Ci0gICAgICAgICAgICB0aGlzLmxvZ18gKz0gUHJvZmlsZXJTdHViSGVscGVy
LkhlYXBTYW1wbGVzW3RoaXMuaGVhcFByb2ZTYW1wbGVfKytdOwotICAgICAgICAgICAgdGhpcy5o
ZWFwUHJvZlNhbXBsZV8gJT0gUHJvZmlsZXJTdHViSGVscGVyLkhlYXBTYW1wbGVzLmxlbmd0aDsK
LSAgICAgICAgICAgIHRoaXMubG9nXyArPSAnaGVhcC1zYW1wbGUtZW5kLCJIZWFwIiwiYWxsb2Nh
dGVkIlxuJzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtb2R1bGVzICYg
cHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0NQVSkKLSAgICAgICAgICAgIHRoaXMubG9nXyAr
PSBQcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXI7Ci0gICAgICAgIHRoaXMuYWN0
aXZlUHJvZmlsZXJNb2R1bGVzXyB8PSBtb2R1bGVzOwotICAgIH0KLX07Ci0KLQotUHJvZmlsZXJT
dHViSGVscGVyLnByb3RvdHlwZS5nZXRBY3RpdmVQcm9maWxlck1vZHVsZXMgPSBmdW5jdGlvbigp
Ci17Ci0gICAgdmFyIHNlbGYgPSB0aGlzOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIFJlbW90ZVByb2ZpbGVyQWdlbnQuZGlkR2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKHNl
bGYuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyk7Ci0gICAgfSwgMTAwKTsKLX07Ci0KLQotUHJvZmls
ZXJTdHViSGVscGVyLnByb3RvdHlwZS5nZXRMb2dMaW5lcyA9IGZ1bmN0aW9uKHBvcykKLXsKLSAg
ICB2YXIgcHJvZk1vZHVsZXMgPSBkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9kdWxl
czsKLSAgICB2YXIgbG9nTGluZXMgPSB0aGlzLmxvZ18uc3Vic3RyKHBvcyk7Ci0gICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgUmVtb3RlUHJvZmlsZXJBZ2VudC5kaWRHZXRMb2dM
aW5lcyhwb3MgKyBsb2dMaW5lcy5sZW5ndGgsIGxvZ0xpbmVzKTsKLSAgICB9LCAxMDApOwotfTsK
LQotCi1Qcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXIgPQotICAgICdwcm9maWxl
cixiZWdpbiwxXG4nICsKLSAgICAncHJvZmlsZXIscmVzdW1lXG4nICsKLSAgICAnY29kZS1jcmVh
dGlvbixMYXp5Q29tcGlsZSwweDEwMDAsMjU2LCJ0ZXN0MSBodHRwOi8vYWFhLmpzOjEiXG4nICsK
LSAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDIwMDAsMjU2LCJ0ZXN0MiBodHRwOi8v
YmJiLmpzOjIiXG4nICsKLSAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDMwMDAsMjU2
LCJ0ZXN0MyBodHRwOi8vY2NjLmpzOjMiXG4nICsKLSAgICAndGljaywweDEwMTAsMHgwLDNcbicg
KwotICAgICd0aWNrLDB4MjAyMCwweDAsMywweDEwMTBcbicgKwotICAgICd0aWNrLDB4MjAyMCww
eDAsMywweDEwMTBcbicgKwotICAgICd0aWNrLDB4MzAxMCwweDAsMywweDIwMjAsIDB4MTAxMFxu
JyArCi0gICAgJ3RpY2ssMHgyMDIwLDB4MCwzLDB4MTAxMFxuJyArCi0gICAgJ3RpY2ssMHgyMDMw
LDB4MCwzLDB4MjAyMCwgMHgxMDEwXG4nICsKLSAgICAndGljaywweDIwMjAsMHgwLDMsMHgxMDEw
XG4nICsKLSAgICAndGljaywweDEwMTAsMHgwLDNcbicgKwotICAgICdwcm9maWxlcixwYXVzZVxu
JzsKLQotCi1Qcm9maWxlclN0dWJIZWxwZXIuSGVhcFNhbXBsZXMgPSBbCi0gICAgJ2hlYXAtanMt
Y29ucy1pdGVtLGZvbywxLDEwMFxuJyArCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLGJhciwyMCwy
MDAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sT2JqZWN0LDUsMTAwXG4nICsKLSAgICAn
aGVhcC1qcy1yZXQtaXRlbSxmb28sYmFyOzNcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGJh
cixmb287NVxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2JqZWN0OjB4MTIzNCwocm9vdHMp
OzFcbicsCi0KLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sZm9vLDIwMDAsMjAwMDAwXG4nICsKLSAg
ICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDEwLDEwMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMt
aXRlbSxPYmplY3QsNiwxMjBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxiYXI7NyxP
YmplY3Q6MHgxMjM0OzEwXG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9vOzEwLE9i
amVjdDoweDEyMzQ7MTBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEyMzQs
KHJvb3RzKTsxXG4nLAotCi0gICAgJ2hlYXAtanMtY29ucy1pdGVtLGZvbywxNSwxNTAwXG4nICsK
LSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDE1LDE1MDBcbicgKwotICAgICdoZWFwLWpzLWNv
bnMtaXRlbSxPYmplY3QsNSwxMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxBcnJheSwz
LDEwMDBcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxiYXI7MyxBcnJheToweDU2Nzg7
MVxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGZvbzs1LE9iamVjdDoweDEyMzQ7OCxP
YmplY3Q6MHg1Njc4OzJcbicgKwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEyMzQs
KHJvb3RzKTsxLE9iamVjdDoweDU2Nzg7MlxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2Jq
ZWN0OjB4NTY3OCwoZ2xvYmFsIHByb3BlcnR5KTszLE9iamVjdDoweDEyMzQ7NVxuJyArCi0gICAg
J2hlYXAtanMtcmV0LWl0ZW0sQXJyYXk6MHg1Njc4LChnbG9iYWwgcHJvcGVydHkpOzMsQXJyYXk6
MHg1Njc4OzJcbicsCi0KLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicgKwot
ICAgICdoZWFwLWpzLWNvbnMtaXRlbSxPYmplY3QsNiwxMjBcbicgKwotICAgICdoZWFwLWpzLXJl
dC1pdGVtLGJhcixmb287NSxPYmplY3Q6MHgxMjM0OzEsT2JqZWN0OjB4MTIzNTszXG4nICsKLSAg
ICAnaGVhcC1qcy1yZXQtaXRlbSxPYmplY3Q6MHgxMjM0LChnbG9iYWwgcHJvcGVydHkpOzNcbicg
KwotICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEyMzUsKGdsb2JhbCBwcm9wZXJ0eSk7
NVxuJywKLQotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxmb28sMTUsMTUwMFxuJyArCi0gICAgJ2hl
YXAtanMtY29ucy1pdGVtLGJhciwxNSwxNTAwXG4nICsKLSAgICAnaGVhcC1qcy1jb25zLWl0ZW0s
QXJyYXksMTAsMTAwMFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sZm9vLGJhcjsxLEFycmF5
OjB4NTY3ODsxXG4nICsKLSAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9vOzVcbicgKwotICAg
ICdoZWFwLWpzLXJldC1pdGVtLEFycmF5OjB4NTY3OCwocm9vdHMpOzNcbicsCi0KLSAgICAnaGVh
cC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicgKwotICAgICdoZWFwLWpzLWNvbnMtaXRlbSxi
YXosMTUsMTUwMFxuJyArCi0gICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGJhejszXG4nICsKLSAg
ICAnaGVhcC1qcy1yZXQtaXRlbSxiYXosYmFyOzNcbicKLV07Ci0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqLwotUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3JTdHViID0gZnVuY3Rpb24o
KQotewotfTsKLQotCi1SZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIucHJvdG90eXBl
LkRlYnVnZ2VyQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZCkKLXsKLSAgICBpZiAoJ3sic2VxIjoyLCJ0
eXBlIjoicmVxdWVzdCIsImNvbW1hbmQiOiJzY3JpcHRzIiwiYXJndW1lbnRzIjp7ImluY2x1ZGVT
b3VyY2UiOmZhbHNlfX0nID09PSBjbWQpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlMSA9Ci0gICAg
ICAgICAgICAneyJzZXEiOjUsInJlcXVlc3Rfc2VxIjoyLCJ0eXBlIjoicmVzcG9uc2UiLCJjb21t
YW5kIjoic2NyaXB0cyIsIicgKwotICAgICAgICAgICAgJ3N1Y2Nlc3MiOnRydWUsImJvZHkiOlt7
ImhhbmRsZSI6NjEsInR5cGUiOiJzY3JpcHQiLCJuYW1lIjoiJyArCi0gICAgICAgICAgICAnaHR0
cDovL3d3dy9+dGVzdC90LmpzIiwiaWQiOjU5LCJsaW5lT2Zmc2V0IjowLCJjb2x1bW5PZmZzZXQi
OjAsJyArCi0gICAgICAgICAgICAnImxpbmVDb3VudCI6MSwic291cmNlU3RhcnQiOiJmdW5jdGlv
biBmaWIobikgeyIsInNvdXJjZUxlbmd0aCI6MzAwLCcgKwotICAgICAgICAgICAgJyJzY3JpcHRU
eXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsicmVmIjo2MH19XSwicmVmcyI6
W3snICsKLSAgICAgICAgICAgICciaGFuZGxlIjo2MCwidHlwZSI6ImNvbnRleHQiLCJkYXRhIjoi
cGFnZSwzIn1dLCJydW5uaW5nIjpmYWxzZX0nOwotICAgICAgICB0aGlzLnNlbmRSZXNwb25zZV8o
cmVzcG9uc2UxKTsKLSAgICB9IGVsc2UgaWYgKCd7InNlcSI6MywidHlwZSI6InJlcXVlc3QiLCJj
b21tYW5kIjoic2NyaXB0cyIsImFyZ3VtZW50cyI6eyJpZHMiOls1OV0sImluY2x1ZGVTb3VyY2Ui
OnRydWV9fScgPT09IGNtZCkgewotICAgICAgICB0aGlzLnNlbmRSZXNwb25zZV8oCi0gICAgICAg
ICAgICAneyJzZXEiOjgsInJlcXVlc3Rfc2VxIjozLCJ0eXBlIjoicmVzcG9uc2UiLCJjb21tYW5k
Ijoic2NyaXB0cyIsJyArCi0gICAgICAgICAgICAnInN1Y2Nlc3MiOnRydWUsImJvZHkiOlt7Imhh
bmRsZSI6MSwidHlwZSI6InNjcmlwdCIsIm5hbWUiOicgKwotICAgICAgICAgICAgJyJodHRwOi8v
d3d3L350ZXN0L3QuanMiLCJpZCI6NTksImxpbmVPZmZzZXQiOjAsImNvbHVtbk9mZnNldCI6MCwn
ICsKLSAgICAgICAgICAgICcibGluZUNvdW50IjoxLCJzb3VyY2UiOiJmdW5jdGlvbiBmaWIobikg
e3JldHVybiBuKzE7fSIsJyArCi0gICAgICAgICAgICAnInNvdXJjZUxlbmd0aCI6MjQ0LCJzY3Jp
cHRUeXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsnICsKLSAgICAgICAgICAg
ICcicmVmIjowfX1dLCJyZWZzIjpbeyJoYW5kbGUiOjAsInR5cGUiOiJjb250ZXh0IiwiZGF0YSI6
InBhZ2UsM31dLCInICsKLSAgICAgICAgICAgICcicnVubmluZyI6ZmFsc2V9Jyk7Ci0gICAgfSBl
bHNlIGlmIChjbWQuaW5kZXhPZignImNvbW1hbmQiOiJwcm9maWxlIicpICE9PSAtMSkgewotICAg
ICAgICB2YXIgY21kT2JqID0gSlNPTi5wYXJzZShjbWQpOwotICAgICAgICBpZiAoY21kT2JqLmFy
Z3VtZW50cy5jb21tYW5kID09PSAicmVzdW1lIikKLSAgICAgICAgICAgIFByb2ZpbGVyU3R1Ykhl
bHBlci5HZXRJbnN0YW5jZSgpLlN0YXJ0UHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5hcmd1bWVu
dHMubW9kdWxlcykpOwotICAgICAgICBlbHNlIGlmIChjbWRPYmouYXJndW1lbnRzLmNvbW1hbmQg
PT09ICJwYXVzZSIpCi0gICAgICAgICAgICBQcm9maWxlclN0dWJIZWxwZXIuR2V0SW5zdGFuY2Uo
KS5TdG9wUHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5hcmd1bWVudHMubW9kdWxlcykpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkZWJ1Z1ByaW50KCJVbmV4cGVjdGVkIHByb2ZpbGUgY29t
bWFuZDogIiArIGNtZE9iai5hcmd1bWVudHMuY29tbWFuZCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGRlYnVnUHJpbnQoIlVuZXhwZWN0ZWQgY29tbWFuZDogIiArIGNtZCk7Ci19OwotCi0KLVJlbW90
ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1Yi5wcm90b3R5cGUuRGVidWdnZXJQYXVzZVNjcmlw
dCA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3JT
dHViLnByb3RvdHlwZS5zZW5kUmVzcG9uc2VfID0gZnVuY3Rpb24ocmVzcG9uc2UpCi17Ci0gICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5kZWJ1
Z2dlck91dHB1dChyZXNwb25zZSk7Ci0gICAgfSwgMCk7Ci19OwotCi0KLURldlRvb2xzSG9zdFN0
dWIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5pc1N0dWIgPSB0cnVlOwotfTsKLURldlRvb2xz
SG9zdFN0dWIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9u
dGVuZEhvc3RTdHViLnByb3RvdHlwZTsKLQotCi1EZXZUb29sc0hvc3RTdHViLnByb3RvdHlwZS5y
ZXNldCA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotRGV2VG9vbHNIb3N0U3R1Yi5wcm90b3R5cGUu
c2V0dGluZyA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotRGV2VG9vbHNIb3N0U3R1Yi5wcm90b3R5
cGUuc2V0U2V0dGluZyA9IGZ1bmN0aW9uKCkKLXsKLX07Ci0KLQotd2luZG93WyJSZW1vdGVEZWJ1
Z2dlckFnZW50Il0gPSBuZXcgUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIoKTsKLXdpbmRvd1siUmVt
b3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IiXSA9IG5ldyBSZW1vdGVEZWJ1Z2dlckNvbW1hbmRF
eGVjdXRvclN0dWIoKTsKLXdpbmRvd1siUmVtb3RlUHJvZmlsZXJBZ2VudCJdID0gbmV3IFJlbW90
ZVByb2ZpbGVyQWdlbnRTdHViKCk7Ci13aW5kb3dbIlJlbW90ZVRvb2xzQWdlbnQiXSA9IG5ldyBS
ZW1vdGVUb29sc0FnZW50U3R1YigpOwotSW5zcGVjdG9yRnJvbnRlbmRIb3N0ID0gbmV3IERldlRv
b2xzSG9zdFN0dWIoKTsKLQorICAgIHdpbmRvd1siUmVtb3RlRGVidWdnZXJBZ2VudCJdID0geyBz
ZXREZWJ1Z2dlclNjcmlwdFNvdXJjZTogZnVuY3Rpb24oKSB7fSB9OworICAgIHdpbmRvd1siUmVt
b3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IiXSA9IHt9OworICAgIHdpbmRvd1siUmVtb3RlUHJv
ZmlsZXJBZ2VudCJdID0ge307CisgICAgd2luZG93WyJSZW1vdGVUb29sc0FnZW50Il0gPSB7IGRp
c3BhdGNoT25JbmplY3RlZFNjcmlwdDogZnVuY3Rpb24oKSB7fSB9OwogfQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKaW5kZXggMzBjYWFmMi4uY2RhODRlNSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcworKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCkBAIC00OSw2MCArNDksMTQgQEAg
SW5zcGVjdG9yQ29udHJvbGxlckRpc3BhdGNoZXIuZGlzcGF0Y2ggPSBmdW5jdGlvbihmdW5jdGlv
bk5hbWUsIGpzb25fYXJncykKIH07CiAKIC8qKgotICogU3BlY2lhbCBjb250cm9sbGVyIG9iamVj
dCBmb3IgQVBVIHJlbGF0ZWQgbWVzc2FnZXMuIE91dGdvaW5nIG1lc3NhZ2VzCi0gKiBhcmUgc2Vu
dCB0byB0aGlzIG9iamVjdCBpZiB0aGUgQXB1QWdlbnREaXNwYXRjaGVyIGlzIGVuYWJsZWQuCi0g
KiovCi12YXIgQXB1QWdlbnREaXNwYXRjaGVyID0geyBlbmFibGVkIDogZmFsc2UgfTsKLQotLyoq
Ci0gKiBEaXNwYXRjaGVzIG1lc3NhZ2VzIHRvIEFQVS4gVGhpcyBmaWx0ZXJzIGFuZCB0cmFuc2Zv
cm1zCi0gKiBvdXRnb2luZyBtZXNzYWdlcyB0aGF0IGFyZSB1c2VkIGJ5IEFQVS4KLSAqIEBwYXJh
bSB7c3RyaW5nfSBtZXRob2QgbmFtZSBvZiB0aGUgZGlzcGF0Y2ggbWV0aG9kLgotICoqLwotQXB1
QWdlbnREaXNwYXRjaGVyLmRpc3BhdGNoVG9BcHUgPSBmdW5jdGlvbihtZXRob2QsIGFyZ3MpCi17
Ci0gICAgaWYgKG1ldGhvZCAhPT0gImFkZFJlY29yZFRvVGltZWxpbmUiICYmIG1ldGhvZCAhPT0g
InVwZGF0ZVJlc291cmNlIiAmJiBtZXRob2QgIT09ICJhZGRSZXNvdXJjZSIpCi0gICAgICAgIHJl
dHVybjsKLSAgICAvLyBUT0RPKGtub3J0b24pOiBUcmFuc2Zvcm0gYXJncyBzbyB0aGV5IGNhbiBi
ZSB1c2VkCi0gICAgLy8gYnkgQVBVLgotICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoVG9B
cHUoSlNPTi5zdHJpbmdpZnkoYXJncykpOwotfTsKLQotLyoqCiAgKiBUaGlzIGlzIGNhbGxlZCBi
eSB0aGUgSW5zcGVjdG9yRnJvbnRlbmQgZm9yIHNlcmlhbGl6YXRpb24uCiAgKiBXZSBzZXJpYWxp
emUgdGhlIGNhbGwgYW5kIHNlbmQgaXQgdG8gdGhlIGNsaWVudCBvdmVyIHRoZSBJUEMKICAqIHVz
aW5nIGRpc3BhdGNoT3V0IGJvdW5kIG1ldGhvZC4KICAqLwogZnVuY3Rpb24gZGlzcGF0Y2gobWV0
aG9kLCB2YXJfYXJncykgewotICAgIC8vIEhhbmRsZSBhbGwgbWVzc2FnZXMgd2l0aCBub24tcHJp
bWl0aWV2ZSBhcmd1bWVudHMgaGVyZS4KICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0KLSAgICBpZiAobWV0aG9kID09PSAiaW5zcGVjdGVkV2lu
ZG93Q2xlYXJlZCIgfHwgbWV0aG9kID09PSAicmVzZXQiIHx8IG1ldGhvZCA9PT0gInNldEF0dGFj
aGVkV2luZG93IikgewotICAgICAgICAvLyBGaWx0ZXIgb3V0IG1lc3NhZ2VzIHdlIGRvbid0IG5l
ZWQgaGVyZS4KLSAgICAgICAgLy8gV2UgZG8gaXQgb24gdGhlIHNlbmRlciBzaWRlIHNpbmNlIHRo
ZXkgbWF5IGhhdmUgbm9uLXNlcmlhbGl6YWJsZQotICAgICAgICAvLyBwYXJhbWV0ZXJzLgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU25pZmYgc29tZSBpbnNwZWN0b3IgY29udHJv
bGxlciBzdGF0ZSBjaGFuZ2VzIGluIG9yZGVyIHRvIHN1cHBvcnQKLSAgICAvLyBjcm9zcy1uYXZp
Z2F0aW9uIGluc3RydW1lbnRhdGlvbi4gS2VlcCBuYW1lcyBpbiBzeW5jIHdpdGgKLSAgICAvLyB3
ZWJkZXZ0b29sc2FnZW50X2ltcGwuCi0gICAgaWYgKG1ldGhvZCA9PT0gInRpbWVsaW5lUHJvZmls
ZXJXYXNTdGFydGVkIikKLSAgICAgICAgRGV2VG9vbHNBZ2VudEhvc3QucnVudGltZUZlYXR1cmVT
dGF0ZUNoYW5nZWQoInRpbWVsaW5lLXByb2ZpbGVyIiwgdHJ1ZSk7Ci0gICAgZWxzZSBpZiAobWV0
aG9kID09PSAidGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQiKQotICAgICAgICBEZXZUb29sc0Fn
ZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgidGltZWxpbmUtcHJvZmlsZXIiLCBm
YWxzZSk7Ci0gICAgZWxzZSBpZiAobWV0aG9kID09PSAicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJs
ZWQiKQotICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdl
ZCgicmVzb3VyY2UtdHJhY2tpbmciLCB0cnVlKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT09ICJy
ZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQiKQotICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5y
dW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgicmVzb3VyY2UtdHJhY2tpbmciLCBmYWxzZSk7Ci0K
LSAgICBpZiAoQXB1QWdlbnREaXNwYXRjaGVyLmVuYWJsZWQpIHsKLSAgICAgICAgQXB1QWdlbnRE
aXNwYXRjaGVyLmRpc3BhdGNoVG9BcHUobWV0aG9kLCBhcmdzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIHZhciBjYWxsID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7Ci0gICAgRGV2VG9v
bHNBZ2VudEhvc3QuZGlzcGF0Y2goY2FsbCk7CisgICAgRGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0
Y2goY2FsbCwgbWV0aG9kKTsKIH07CiAKIGZ1bmN0aW9uIGNsb3NlKCkgewpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvSW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKaW5kZXggMGYyODIz
MS4uN2I5YjVhNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbnNwZWN0b3JD
b250cm9sbGVySW1wbC5qcworKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luc3BlY3RvckNv
bnRyb2xsZXJJbXBsLmpzCkBAIC0xMjAsMjQgKzEyMCw2IEBAIGRldnRvb2xzLkluc3BlY3RvckJh
Y2tlbmRJbXBsID0gZnVuY3Rpb24oKQogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGU7CiAKIAotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMuSW5zcGVjdG9yQmFj
a2VuZEltcGwucHJvdG90eXBlLmRlYnVnZ2VyRW5hYmxlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX07Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMuSW5z
cGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnByb2ZpbGVyRW5hYmxlZCA9IGZ1bmN0aW9uKCkK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX07Ci0KLQogaWYgKCF3aW5kb3cudjhTY3JpcHREZWJ1Z1Nl
cnZlckVuYWJsZWQpIHsKIAogZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LnNldEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0
aW9uKQo=
</data>
<flag name="review"
          id="46615"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>