<?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>27939</bug_id>
          
          <creation_ts>2009-08-03 07:05:45 -0700</creation_ts>
          <short_desc>WebInspector: Extract style editing into a separate file that is going to be loaded in page context.</short_desc>
          <delta_ts>2009-08-07 01:29:42 -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>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>joepeck</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136624</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-03 07:05:45 -0700</bug_when>
    <thetext>WebInspector: Extract style editing into a separate file that is going to be loaded in page context.

How this new file should be called? It is going to live along with the InspectorController, will belong to the page context and will operate raw (non-quarantined) JS objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136625</commentid>
    <comment_count>1</comment_count>
      <attachid>33973</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-03 07:07:07 -0700</bug_when>
    <thetext>Created attachment 33973
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136636</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-03 08:35:00 -0700</bug_when>
    <thetext>But it isn&apos;t injected yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136646</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-03 08:56:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; But it isn&apos;t injected yet?

No, and that is something I need help with. What I need is to open this js file (and only this js file) in a page&apos;s context in a way that its objects are not visible to the page&apos;s object. It is very similar to the way frontend is being opened today. Any hints / pointers?

The plan is to come up with that context, get rid of wrappers for all calls to this injected script and when all the code that needs to be injected is migrated, remove universal access from the frontend. That is a long road. Makes sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136649</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-03 09:00:31 -0700</bug_when>
    <thetext>Sam might have some thoughts on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136657</commentid>
    <comment_count>5</comment_count>
      <attachid>33973</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-03 09:29:57 -0700</bug_when>
    <thetext>Comment on attachment 33973
patch

are we going to have different rules for the InjectedScript.js file?  Will that be the only way to get script into the page&apos;s context?  I think it&apos;s good to divide things out like this so that it&apos;s easier to make sure the Inspector is &quot;secure&quot; long term.  My line of questioning mostly leads to the question of if this is going to be the only injected script file, and if InjectedScript.js is the right name if it&apos;s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136675</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-03 10:02:57 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 33973 [details])
&gt; are we going to have different rules for the InjectedScript.js file?  Will that
&gt; be the only way to get script into the page&apos;s context?  I think it&apos;s good to
&gt; divide things out like this so that it&apos;s easier to make sure the Inspector is
&gt; &quot;secure&quot; long term.  My line of questioning mostly leads to the question of if
&gt; this is going to be the only injected script file, and if InjectedScript.js is
&gt; the right name if it&apos;s not.

InjectedScript is going to be the only file containing the code that has access to the running page. All data is going to be serialized on the way to/from this injected script. It should not be too large (~1.5KLOC). I am not sure if that is a good name for it anyway, so I am open to suggestions.

While I am looking for the advice on how to organize this new context:
a) Continue extracting properties and search-related requests there
b) Create a separate html file referencing this script only and open it similarly to the front-end itself
c) Wait and see what Sam suggests
d) Something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136793</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-03 14:56:23 -0700</bug_when>
    <thetext>Just a heads up, due to bug 27928 landing this will need a small merge in order to apply to ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137303</commentid>
    <comment_count>8</comment_count>
      <attachid>34134</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-05 07:02:08 -0700</bug_when>
    <thetext>Created attachment 34134
patch

I updated the change to do all the edits for styles and metrics in a serialized way. I&apos;ve also merged with the changes panel. I&apos;d like to submit it if possible in order to avoid painful merging. I will not close the bug though unless this new file runs in a separate context. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137308</commentid>
    <comment_count>9</comment_count>
      <attachid>34136</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-05 08:35:01 -0700</bug_when>
    <thetext>Created attachment 34136
Same, but access to injected script is done via InspectorController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137315</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-05 09:17:19 -0700</bug_when>
    <thetext>Thanks for review!

Please do not land this since I would like to synchronize this with the Chromium build cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137364</commentid>
    <comment_count>11</comment_count>
      <attachid>34136</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-05 12:00:41 -0700</bug_when>
    <thetext>Comment on attachment 34136
Same, but access to injected script is done via InspectorController

Marking to avoid landing because of comment #11.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137365</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-05 12:01:11 -0700</bug_when>
    <thetext>Or rather Commit #10...  (Silly self-referential bug comments.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137555</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-06 02:54:30 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/DOMAgent.js
	A	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/MetricsSidebarPane.js
	M	WebCore/inspector/front-end/StylesSidebarPane.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.html
Committed r46841

Please do not close this bug - pending more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137573</commentid>
    <comment_count>14</comment_count>
      <attachid>34210</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-06 08:09:15 -0700</bug_when>
    <thetext>Created attachment 34210
move style-related utilities into InjectedScript</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137590</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-06 09:40:07 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/front-end/DOMAgent.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/StylesSidebarPane.js
	M	WebCore/inspector/front-end/utilities.js
Committed r46848

Please do not close this bug - pending more patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137820</commentid>
    <comment_count>16</comment_count>
      <attachid>34210</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-07 01:04:59 -0700</bug_when>
    <thetext>Comment on attachment 34210
move style-related utilities into InjectedScript

Please either close the bug or clear the review flag when you land a patch.  Otherwise, it show up in the query for things in need of a commit.  Our standard process is to use one bug per patch.  Bug numbers are cheap.  Don&apos;t be afraid of making a new one!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33973</attachid>
            <date>2009-08-03 07:07:07 -0700</date>
            <delta_ts>2009-08-05 07:02:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style_edit.txt</filename>
            <type>text/plain</type>
            <size>19570</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGNkNDkwYi4uNDAyZDg4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wOC0wMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJJbnNwZWN0b3I6IEV4dHJhY3Qgc3R5bGUgZWRpdGluZyBp
bnRvIGEgc2VwYXJhdGUgZmlsZSB0aGF0IGlzCisgICAgICAgIGdvaW5nIHRvIGJlIGxvYWRlZCBp
biBwYWdlIGNvbnRleHQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3OTM5CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVUZXh0
KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnNldFN0eWxlVGV4dCk6CisgICAgICAgIChJbmpl
Y3RlZFNjcmlwdC50b2dnbGVTdHlsZUVuYWJsZWQpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQu
c2V0U3R5bGVSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24u
cHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5jYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVj
dG9yQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisK
IDIwMDktMDgtMDIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bmplY3RlZFNjcmlwdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmI3
NmVmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVj
dGVkU2NyaXB0LmpzCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
Sm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKwordmFyIEluamVjdGVkU2NyaXB0ID0ge307CisKK0luamVjdGVkU2NyaXB0
LmFwcGx5U3R5bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGUsIHN0eWxlVGV4dCwgbmFtZSwgY2FsbGJh
Y2spCit7CisgICAgdmFyIHN0eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC50cmltV2hpdGVzcGFj
ZSgpLmxlbmd0aDsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBlbGVtZW50IHRvIHBhcnNlIHRoZSB1
c2VyIGlucHV0IENTUy4KKyAgICB2YXIgcGFyc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOworICAgIHBhcnNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgc3R5
bGVUZXh0KTsKKworICAgIHZhciB0ZW1wU3R5bGUgPSBwYXJzZUVsZW1lbnQuc3R5bGU7CisgICAg
aWYgKHRlbXBTdHlsZS5sZW5ndGggfHwgIXN0eWxlVGV4dExlbmd0aCkgeworICAgICAgICAvLyBU
aGUgaW5wdXQgd2FzIHBhcnNhYmxlIG9yIHRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28g
cmVtb3ZlIHRoZQorICAgICAgICAvLyBvcmlnaW5hbCBwcm9wZXJ0eSBmcm9tIHRoZSByZWFsIHN0
eWxlIGRlY2xhcmF0aW9uLiBJZiB0aGlzIHJlcHJlc2VudHMKKyAgICAgICAgLy8gYSBzaG9ydGhh
bmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJvcGVydGllcy4KKyAgICAgICAgaWYgKHN0eWxl
LmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpKSB7CisgICAgICAgICAgICB2YXIgbG9uZ2hhbmRQ
cm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBuYW1lKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KGxvbmdoYW5kUHJvcGVydGllc1tp
XSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkodGhp
cy5uYW1lKTsKKyAgICB9CisKKyAgICBpZiAoIXRlbXBTdHlsZS5sZW5ndGgpIHsKKyAgICAgICAg
Y2FsbGJhY2soZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSXRlcmF0
ZSBvZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUgZGVjbGFyYXRp
b24gYW5kCisgICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdl
IHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCisgICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9
IHt9OworICAgIHZhciB1bmlxdWVQcm9wZXJ0aWVzID0gZ2V0VW5pcXVlU3R5bGVQcm9wZXJ0aWVz
KHRlbXBTdHlsZSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlxdWVQcm9wZXJ0aWVzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgIHZhciBuYW1lID0gdW5pcXVlUHJvcGVydGllc1tpXTsKKyAg
ICAgICAgdmFyIHNob3J0aGFuZCA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1l
KTsKKworICAgICAgICBpZiAoc2hvcnRoYW5kICYmIHNob3J0aGFuZCBpbiBmb3VuZFNob3J0aGFu
ZHMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoc2hvcnRoYW5kKSB7Cisg
ICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRTaG9ydGhhbmRWYWx1ZSh0ZW1wU3R5bGUsIHNob3J0
aGFuZCk7CisgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBnZXRTaG9ydGhhbmRQcmlvcml0eSh0
ZW1wU3R5bGUsIHNob3J0aGFuZCk7CisgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHNbc2hvcnRo
YW5kXSA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0
ZW1wU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKKyAgICAgICAgICAgIHZhciBwcmlvcml0
eSA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4K
KyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoKHNob3J0aGFuZCB8fCBuYW1lKSwgdmFsdWUsIHBy
aW9yaXR5KTsKKyAgICB9CisgICAgY2FsbGJhY2sodHJ1ZSk7Cit9CisKK0luamVjdGVkU2NyaXB0
LnNldFN0eWxlVGV4dCA9IGZ1bmN0aW9uKHN0eWxlLCBjc3NUZXh0KQoreworICAgIHN0eWxlLmNz
c1RleHQgPSBjc3NUZXh0OworfQorCitJbmplY3RlZFNjcmlwdC50b2dnbGVTdHlsZUVuYWJsZWQg
PSBmdW5jdGlvbihzdHlsZSwgbmFtZSwgZGlzYWJsZWQsIGNhbGxiYWNrKQoreworICAgIGlmIChk
aXNhYmxlZCkgeworICAgICAgICBpZiAoIXN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyB8
fCAhc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcykgeworICAgICAgICAgICAgdmFy
IGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7
CisgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllcyA9IG5ldyBpbnNwZWN0ZWRX
aW5kb3cuT2JqZWN0OworICAgICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVz
ID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7CisgICAgICAgICAgICBzdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7CisgICAg
ICAgIH0KKworICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXNbbmFtZV0gPSBz
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydHlQcmlvcml0aWVzW25hbWVdID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsK
KworICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSkpIHsKKyAgICAg
ICAgICAgIHZhciBsb25naGFuZFByb3BlcnRpZXMgPSBnZXRMb25naGFuZFByb3BlcnRpZXMoc3R5
bGUsIG5hbWUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZFByb3Bl
cnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydGllc1tsb25naGFuZFByb3BlcnRpZXNbaV1dID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBz
dHlsZS5yZW1vdmVQcm9wZXJ0eShsb25naGFuZFByb3BlcnRpZXNbaV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnRp
ZXNbbmFtZV0gPSB0cnVlOworICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzICYm
IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW25hbWVdKSB7CisgICAgICAgIHZhciB2YWx1ZSA9
IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlc1tuYW1lXTsKKyAgICAgICAgdmFyIHByaW9y
aXR5ID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1tuYW1lXTsKKworICAgICAg
ICBzdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpOworICAgICAgICBkZWxl
dGUgc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXNbbmFtZV07CisgICAgICAgIGRlbGV0ZSBzdHls
ZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXNbbmFtZV07CisgICAgICAgIGRlbGV0ZSBzdHlsZS5f
X2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzW25hbWVdOworICAgIH0KKyAgICBjYWxsYmFjaygp
OworfQorCitJbmplY3RlZFNjcmlwdC5zZXRTdHlsZVJ1bGUgPSBmdW5jdGlvbihydWxlLCBuZXdD
b250ZW50LCBjc3NUZXh0LCBzZWxlY3RlZE5vZGUsIGNhbGxiYWNrKQoreworICAgIHRyeSB7Cisg
ICAgICAgIHZhciBzdHlsZXNoZWV0ID0gcnVsZS5wYXJlbnRTdHlsZVNoZWV0OworICAgICAgICBz
dHlsZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7CisgICAgICAgIHZhciBuZXdSdWxlID0gc3R5
bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0aCAtIDFdOworICAgICAg
ICBuZXdSdWxlLnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0OworCisgICAgICAgIHZhciBwYXJlbnRS
dWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cGFyZW50UnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRSdWxlc1tp
XSA9PT0gcnVsZSkgeworICAgICAgICAgICAgICAgIHJ1bGUucGFyZW50U3R5bGVTaGVldC5yZW1v
dmVSdWxlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdmFyIG5vZGVzID0gc2VsZWN0ZWROb2RlLm93bmVyRG9jdW1lbnQucXVl
cnlTZWxlY3RvckFsbChuZXdDb250ZW50KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
b2Rlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGVzW2ldID09PSBzZWxlY3Rl
ZE5vZGUpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgdHJ1ZSwgbmV3UnVsZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGNhbGxiYWNrKGZhbHNlLCBmYWxzZSwgbmV3UnVsZSk7CisgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgIC8vIFJlcG9ydCBpbnZhbGlkIHN5bnRheC4KKyAgICAgICAgY2FsbGJhY2sodHJ1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKaW5kZXggNGYwMmNhNC4uOTY4MzAzMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAt
NTU5LDM3ICs1NTksMjkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlID0gewogICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gb2xkQ29udGVudCkKICAgICAg
ICAgICAgIHJldHVybiBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlzKTsKIAotICAgICAgICB0
cnkgewotICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSB0aGlzLnJ1bGUucGFyZW50U3R5bGVT
aGVldDsKLSAgICAgICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50KTsKLSAgICAg
ICAgICAgIHZhciBuZXdSdWxlID0gc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1
bGVzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgbmV3UnVsZS5zdHlsZS5jc3NUZXh0ID0gdGhp
cy5zdHlsZVJ1bGUuc3R5bGUuY3NzVGV4dDsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAg
ICAgICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0b3IKLSAgICAgICAgICAgIHRoaXMu
ZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkKGVsZW1lbnQsIGNvbnRleHQpOwotICAgICAgICAgICAg
cmV0dXJuIG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCF0aGlzLl9kb2VzU2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUobmV3Q29udGVudCkp
IHsKLSAgICAgICAgICAgIHRoaXMubm9BZmZlY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5l
bGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMubm9BZmZlY3Q7Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQu
cmVtb3ZlU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
cGFyZW50UnVsZXMgPSB0aGlzLnJ1bGUucGFyZW50U3R5bGVTaGVldC5jc3NSdWxlczsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRSdWxlcy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgaWYgKHBhcmVudFJ1bGVzW2ldID09PSB0aGlzLnJ1bGUpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLnJ1bGUucGFyZW50U3R5bGVTaGVldC5yZW1vdmVSdWxlKGkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBjYWxsYmFj
ayA9IGZ1bmN0aW9uKGludmFsaWRTeW50YXgsIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUsIG5ld1J1
bGUpIHsKKyAgICAgICAgICAgIGlmIChpbnZhbGlkU3ludGF4KSB7CisgICAgICAgICAgICAgICAg
Ly8gSW52YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0b3IKKyAgICAgICAgICAgICAgICBzZWxmLmVk
aXRpbmdTZWxlY3RvckNhbmNlbGxlZChlbGVtZW50LCBjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbChzZWxmKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRvZXNBZmZlY3RTZWxlY3RlZE5vZGUp
IHsKKyAgICAgICAgICAgICAgICBzZWxmLm5vQWZmZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBzZWxmLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLm5vQWZmZWN0OworICAgICAgICAg
ICAgICAgIHNlbGYuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIHRoaXMucnVsZSA9IG5ld1J1bGU7Ci0gICAg
ICAgIHRoaXMuc3R5bGVSdWxlID0geyBzZWN0aW9uOiB0aGlzLCBzdHlsZTogbmV3UnVsZS5zdHls
ZSwgc2VsZWN0b3JUZXh0OiBuZXdSdWxlLnNlbGVjdG9yVGV4dCwgcGFyZW50U3R5bGVTaGVldDog
bmV3UnVsZS5wYXJlbnRTdHlsZVNoZWV0LCBydWxlOiBuZXdSdWxlIH07Ci0gICAgICAgIHRoaXMu
cGFuZS51cGRhdGUobnVsbCwgdHJ1ZSk7Ci0gICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5jYWxs
KHRoaXMpOworICAgICAgICAgICAgc2VsZi5ydWxlID0gbmV3UnVsZTsKKyAgICAgICAgICAgIHNl
bGYuc3R5bGVSdWxlID0geyBzZWN0aW9uOiBzZWxmLCBzdHlsZTogbmV3UnVsZS5zdHlsZSwgc2Vs
ZWN0b3JUZXh0OiBuZXdSdWxlLnNlbGVjdG9yVGV4dCwgcGFyZW50U3R5bGVTaGVldDogbmV3UnVs
ZS5wYXJlbnRTdHlsZVNoZWV0LCBydWxlOiBuZXdSdWxlIH07CisgICAgICAgICAgICBzZWxmLnBh
bmUudXBkYXRlKG51bGwsIHRydWUpOworICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVkLmNh
bGwoc2VsZik7CisgICAgICAgIH07CisKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVS
dWxlKHRoaXMucnVsZSwgbmV3Q29udGVudCwgdGhpcy5zdHlsZVJ1bGUuc3R5bGUuY3NzVGV4dCwg
dGhpcy5wYW5lLm5vZGUsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9y
Q2FuY2VsbGVkOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQpAQCAtODk1LDQzICs4ODcsMTkg
QEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAg
ICAgdG9nZ2xlRW5hYmxlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgZGlz
YWJsZWQgPSAhZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CisgICAgICAgIAorICAgICAgICB2YXIgc2Vs
ZiA9IHRoaXM7CisgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgLy8gU2V0IHRoZSBkaXNhYmxlZCBwcm9wZXJ0eSBoZXJlLCBzaW5jZSB0aGUgY29kZSBhYm92
ZSByZXBsaWVzIG9uIGl0IG5vdCBjaGFuZ2luZworICAgICAgICAgICAgLy8gdW50aWwgYWZ0ZXIg
dGhlIHZhbHVlIGFuZCBwcmlvcml0eSBhcmUgcmV0cmlldmVkLgorICAgICAgICAgICAgc2VsZi5k
aXNhYmxlZCA9IGRpc2FibGVkOwogCi0gICAgICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICAg
ICAgaWYgKCF0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyB8fCAhdGhpcy5zdHls
ZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlu
c3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllcyA9IG5ldyBpbnNw
ZWN0ZWRXaW5kb3cuT2JqZWN0OwotICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuX19kaXNhYmxl
ZFByb3BlcnR5VmFsdWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0gbmV3IGluc3Bl
Y3RlZFdpbmRvdy5PYmplY3Q7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMuc3R5
bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3RoaXMubmFtZV0gPSB0aGlzLnZhbHVlOwotICAg
ICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzW3RoaXMubmFt
ZV0gPSB0aGlzLnByaW9yaXR5OwotCi0gICAgICAgICAgICBpZiAodGhpcy5zaG9ydGhhbmQpIHsK
LSAgICAgICAgICAgICAgICB2YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9w
ZXJ0aWVzKHRoaXMuc3R5bGUsIHRoaXMubmFtZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsb25naGFuZFByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllc1tsb25naGFuZFByb3BlcnRp
ZXNbaV1dID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9w
ZXJ0eShsb25naGFuZFByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVy
dGllc1t0aGlzLm5hbWVdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnJlbW92
ZVByb3BlcnR5KHRoaXMubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KHRoaXMubmFtZSwgdGhpcy52YWx1ZSwg
dGhpcy5wcmlvcml0eSk7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5zdHlsZS5fX2Rpc2FibGVk
UHJvcGVydGllc1t0aGlzLm5hbWVdOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGUuX19k
aXNhYmxlZFByb3BlcnR5VmFsdWVzW3RoaXMubmFtZV07Ci0gICAgICAgICAgICBkZWxldGUgdGhp
cy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzW3RoaXMubmFtZV07Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTZXQgdGhlIGRpc2FibGVkIHByb3BlcnR5IGhlcmUsIHNpbmNlIHRo
ZSBjb2RlIGFib3ZlIHJlcGxpZXMgb24gaXQgbm90IGNoYW5naW5nCi0gICAgICAgIC8vIHVudGls
IGFmdGVyIHRoZSB2YWx1ZSBhbmQgcHJpb3JpdHkgYXJlIHJldHJpZXZlZC4KLSAgICAgICAgdGhp
cy5kaXNhYmxlZCA9IGRpc2FibGVkOworICAgICAgICAgICAgaWYgKHNlbGYudHJlZU91dGxpbmUu
c2VjdGlvbiAmJiBzZWxmLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZSkKKyAgICAgICAgICAgICAg
ICBzZWxmLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
InN0eWxlIHByb3BlcnR5IHRvZ2dsZWQiKTsKIAotICAgICAgICBpZiAodGhpcy50cmVlT3V0bGlu
ZS5zZWN0aW9uICYmIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lKQotICAgICAgICAgICAg
dGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJz
dHlsZSBwcm9wZXJ0eSB0b2dnbGVkIik7Ci0KLSAgICAgICAgdGhpcy51cGRhdGVBbGwodHJ1ZSk7
CisgICAgICAgICAgICBzZWxmLnVwZGF0ZUFsbCh0cnVlKTsKKyAgICAgICAgfTsKKyAgICAgICAg
SW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkKHRoaXMuc3R5bGUsIHRoaXMubmFtZSwg
ZGlzYWJsZWQsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgdXBkYXRlU3RhdGU6IGZ1bmN0aW9u
KCkKQEAgLTEwOTQsNyArMTA2Miw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gUmVz
dG9yZSB0aGUgb3JpZ2luYWwgQ1NTIHRleHQgYmVmb3JlIGFwcGx5aW5nIHVzZXIgY2hhbmdlcy4g
VGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudAogICAgICAgICAgICAgLy8gbmV3IHByb3BlcnRpZXMg
ZnJvbSBzdGlja2luZyBhcm91bmQgaWYgdGhlIHVzZXIgYWRkcyBvbmUsIHRoZW4gcmVtb3ZlcyBp
dC4KLSAgICAgICAgICAgIHRoaXMuc3R5bGUuY3NzVGV4dCA9IHRoaXMub3JpZ2luYWxDU1NUZXh0
OworICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVUZXh0KHRoaXMuc3R5bGUsIHRo
aXMub3JpZ2luYWxDU1NUZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuYXBwbHlTdHls
ZVRleHQodGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQpOwpAQCAtMTExNCw3ICsxMDgy
LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgIHRoaXMudHJlZU91
dGxpbmUucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAgICAgIGVsc2UgaWYgKHRoaXMub3JpZ2luYWxD
U1NUZXh0KSB7Ci0gICAgICAgICAgICB0aGlzLnN0eWxlLmNzc1RleHQgPSB0aGlzLm9yaWdpbmFs
Q1NTVGV4dDsKKyAgICAgICAgICAgIEluamVjdGVkU2NyaXB0LnNldFN0eWxlVGV4dCh0aGlzLnN0
eWxlLCB0aGlzLm9yaWdpbmFsQ1NTVGV4dCk7CiAKICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVP
dXRsaW5lLnNlY3Rpb24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCiAgICAgICAg
ICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKCJzdHlsZSBlZGl0ZWQiKTsKQEAgLTExODcsMjMgKzExNTUsNiBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAg
IHZhciBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRleHQudHJpbVdoaXRlc3BhY2UoKS5sZW5ndGg7
CiAKLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGVsZW1lbnQgdG8gcGFyc2UgdGhlIHVzZXIgaW5w
dXQgQ1NTLgotICAgICAgICB2YXIgcGFyc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOwotICAgICAgICBwYXJzZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsIHN0
eWxlVGV4dCk7Ci0KLSAgICAgICAgdmFyIHRlbXBTdHlsZSA9IHBhcnNlRWxlbWVudC5zdHlsZTsK
LSAgICAgICAgaWYgKHRlbXBTdHlsZS5sZW5ndGggfHwgIXN0eWxlVGV4dExlbmd0aCkgewotICAg
ICAgICAgICAgLy8gVGhlIGlucHV0IHdhcyBwYXJzYWJsZSBvciB0aGUgdXNlciBkZWxldGVkIGV2
ZXJ5dGhpbmcsIHNvIHJlbW92ZSB0aGUKLSAgICAgICAgICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5
IGZyb20gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIElmIHRoaXMgcmVwcmVzZW50cwotICAg
ICAgICAgICAgLy8gYSBzaG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJvcGVydGll
cy4KLSAgICAgICAgICAgIGlmICh0aGlzLnNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgIHZh
ciBsb25naGFuZFByb3BlcnRpZXMgPSBnZXRMb25naGFuZFByb3BlcnRpZXModGhpcy5zdHlsZSwg
dGhpcy5uYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5k
UHJvcGVydGllcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5y
ZW1vdmVQcm9wZXJ0eShsb25naGFuZFByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0aGlzLm5hbWUpOwot
ICAgICAgICB9Ci0KICAgICAgICAgaWYgKCFzdHlsZVRleHRMZW5ndGgpIHsKICAgICAgICAgICAg
IGlmICh1cGRhdGVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciBkZWxl
dGVkIGV2ZXJ5dGhpbmcsIHNvIHJlbW92ZSB0aGUgdHJlZSBlbGVtZW50IGFuZCB1cGRhdGUuCkBA
IC0xMjE2LDUxICsxMTY3LDMwIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1l
bnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCF0ZW1wU3R5bGUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdXNlciB0eXBl
ZCBzb21ldGhpbmcsIGJ1dCBpdCBkaWRuJ3QgcGFyc2UuIEp1c3QgYWJvcnQgYW5kIHJlc3RvcmUK
LSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCB0aXRsZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElm
IHRoaXMgd2FzIGEgbmV3IGF0dHJpYnV0ZSBhbmQKLSAgICAgICAgICAgIC8vIHdlIGNvdWxkbid0
IHBhcnNlLCB0aGVuIGp1c3QgcmVtb3ZlIGl0LgotICAgICAgICAgICAgaWYgKHRoaXMuX25ld1By
b3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHVwZGF0ZUludGVyZmFjZSkKLSAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJdGVyYXRlIG9mIHRo
ZSBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQK
LSAgICAgICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRh
a2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCi0gICAgICAgIHZhciBmb3VuZFNob3J0aGFuZHMg
PSB7fTsKLSAgICAgICAgdmFyIHVuaXF1ZVByb3BlcnRpZXMgPSBnZXRVbmlxdWVTdHlsZVByb3Bl
cnRpZXModGVtcFN0eWxlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlxdWVQcm9w
ZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHVuaXF1ZVByb3Bl
cnRpZXNbaV07Ci0gICAgICAgICAgICB2YXIgc2hvcnRoYW5kID0gdGVtcFN0eWxlLmdldFByb3Bl
cnR5U2hvcnRoYW5kKG5hbWUpOwotCi0gICAgICAgICAgICBpZiAoc2hvcnRoYW5kICYmIHNob3J0
aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIGlmIChzaG9ydGhhbmQpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBn
ZXRTaG9ydGhhbmRWYWx1ZSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAg
dmFyIHByaW9yaXR5ID0gZ2V0U2hvcnRoYW5kUHJpb3JpdHkodGVtcFN0eWxlLCBzaG9ydGhhbmQp
OwotICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kc1tzaG9ydGhhbmRdID0gdHJ1ZTsKKyAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihw
YXJzZWRPaykgeworICAgICAgICAgICAgaWYgKCFwYXJzZWRPaykgeworICAgICAgICAgICAgICAg
IC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0IGl0IGRpZG4ndCBwYXJzZS4gSnVzdCBh
Ym9ydCBhbmQgcmVzdG9yZQorICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCB0aXRsZSBm
b3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEgbmV3IGF0dHJpYnV0ZSBhbmQKKyAgICAg
ICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBqdXN0IHJlbW92ZSBpdC4KKyAg
ICAgICAgICAgICAgICBpZiAoc2VsZi5fbmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUludGVy
ZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVUaXRsZSgpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZShuYW1lKTsKLSAgICAgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSB0ZW1wU3R5
bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4KLSAg
ICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoKHNob3J0aGFuZCB8fCBuYW1lKSwgdmFs
dWUsIHByaW9yaXR5KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5l
LnNlY3Rpb24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCi0gICAgICAgICAgICB0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0
eWxlIGVkaXRlZCIpOworICAgICAgICAgICAgICAgIGlmIChzZWxmLnRyZWVPdXRsaW5lLnNlY3Rp
b24gJiYgc2VsZi50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCisgICAgICAgICAgICAgICAgICAg
IHNlbGYudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygi
c3R5bGUgZWRpdGVkIik7CiAKLSAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKLSAgICAgICAg
ICAgIHRoaXMudXBkYXRlQWxsKHRydWUpOworICAgICAgICAgICAgICAgIGlmICh1cGRhdGVJbnRl
cmZhY2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUpOwogCi0gICAg
ICAgIGlmICghdGhpcy5ydWxlKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVt
ZW50cy50cmVlT3V0bGluZS51cGRhdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlbGYucnVs
ZSkKKyAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy50cmVl
T3V0bGluZS51cGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgSW5q
ZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQodGhpcy5zdHlsZSwgc3R5bGVUZXh0LCB0aGlzLm5h
bWUsIGNhbGxiYWNrKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktp
dC5xcmMKaW5kZXggNTExYTFiYy4uMDI4ODllZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMKQEAgLTIwLDYgKzIwLDcgQEAKICAgICA8ZmlsZT5FbGVtZW50c1RyZWVPdXRs
aW5lLmpzPC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPklt
YWdlVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5JbmplY3RlZFNjcmlwdC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5pbnNwZWN0b3IuanM8L2ZpbGU+CiAgICAgPGZpbGU+S2V5Ym9hcmRTaG9ydGN1dC5q
czwvZmlsZT4KICAgICA8ZmlsZT5NZXRyaWNzU2lkZWJhclBhbmUuanM8L2ZpbGU+CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggZGM3NmM0OC4uNDU5ODNi
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtODAs
NiArODAsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQcm9maWxlVmlldy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQWdlbnQuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkluamVjdGVkU2Ny
aXB0LmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJkZXRhY2hlZCI+CiAgICAg
PGRpdiBpZD0idG9vbGJhciI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34134</attachid>
            <date>2009-08-05 07:02:08 -0700</date>
            <delta_ts>2009-08-05 08:35:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style_edit.txt</filename>
            <type>text/plain</type>
            <size>39394</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4ZjU4Yy4uOGU2MzQ3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wOC0wNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJJbnNwZWN0b3I6IEV4dHJhY3Qgc3R5bGUgZWRpdGluZyBp
bnRvIGEgc2VwYXJhdGUgZmlsZSB0aGF0IGlzCisgICAgICAgIGdvaW5nIHRvIGJlIGxvYWRlZCBp
biBwYWdlIGNvbnRleHQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3OTM5CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVUZXh0
KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnNldFN0eWxlVGV4dCk6CisgICAgICAgIChJbmpl
Y3RlZFNjcmlwdC50b2dnbGVTdHlsZUVuYWJsZWQpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQu
c2V0U3R5bGVSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24u
cHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5jYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVj
dG9yQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisK
IDIwMDktMDgtMDQgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBQcm9zcGVjdGl2ZSBidWlsZCBmaXggZm9yIFF0IGJ1aWxkIGJvdDogRml4IGRlcGVuZGVu
Y3kgb2YgSFRNTE5hbWVzLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50Lmpz
CmluZGV4IDY4MGFlNWEuLjdhMTdiMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9N
QWdlbnQuanMKQEAgLTE4NSw0MiArMTg1LDE3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIF9zZXRTdHlsZXM6IGZ1bmN0aW9uKGNvbXB1dGVkU3R5bGUsIGlubGlu
ZVN0eWxlLCBzdHlsZUF0dHJpYnV0ZXMsIG1hdGNoZWRDU1NSdWxlcykKICAgICB7Ci0gICAgICAg
IHRoaXMuX2NvbXB1dGVkU3R5bGUgPSB0aGlzLl9tYWtlU3R5bGUoY29tcHV0ZWRTdHlsZSk7Ci0g
ICAgICAgIHRoaXMuc3R5bGUgPSB0aGlzLl9tYWtlU3R5bGUoaW5saW5lU3R5bGUpOworICAgICAg
ICB0aGlzLl9jb21wdXRlZFN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0
aW9uKGNvbXB1dGVkU3R5bGUpOworICAgICAgICB0aGlzLnN0eWxlID0gbmV3IFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uKGlubGluZVN0eWxlKTsKIAogICAgICAgICBmb3IgKHZhciBu
YW1lIGluIHN0eWxlQXR0cmlidXRlcykgewogICAgICAgICAgICAgaWYgKHRoaXMuX2F0dHJpYnV0
ZXNNYXBbbmFtZV0pCi0gICAgICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc01hcFtuYW1lXS5z
dHlsZSA9IHRoaXMuX21ha2VTdHlsZShzdHlsZUF0dHJpYnV0ZXNbbmFtZV0pOworICAgICAgICAg
ICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNNYXBbbmFtZV0uc3R5bGUgPSBuZXcgV2ViSW5zcGVjdG9y
LkNTU1N0eWxlRGVjbGFyYXRpb24oc3R5bGVBdHRyaWJ1dGVzW25hbWVdKTsKICAgICAgICAgfQog
CiAgICAgICAgIHRoaXMuX21hdGNoZWRDU1NSdWxlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFy
IGRlc2NyaXB0aW9uID0gbWF0Y2hlZENTU1J1bGVzW2ldOwotCi0gICAgICAgICAgICB2YXIgcnVs
ZSA9IHt9OwotICAgICAgICAgICAgcnVsZS5zZWxlY3RvclRleHQgPSBkZXNjcmlwdGlvbi5zZWxl
Y3RvclRleHQ7Ci0gICAgICAgICAgICBydWxlLnN0eWxlID0gdGhpcy5fbWFrZVN0eWxlKGRlc2Ny
aXB0aW9uLnN0eWxlKTsKLQotICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnBhcmVudFN0eWxl
U2hlZXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50U3R5bGVNb2NrID0ge307Ci0gICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGVNb2NrLmhyZWYgPSBkZXNjcmlwdGlvbi5wYXJlbnRTdHls
ZVNoZWV0LmhyZWY7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZGVzY3JpcHRpb24u
cGFyZW50U3R5bGVTaGVldC5vd25lck5vZGVOYW1lOwotICAgICAgICAgICAgICAgIGlmIChub2Rl
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZU1vY2sub3duZXJOb2RlID0g
ewotICAgICAgICAgICAgICAgICAgICAgICAgIm5vZGVOYW1lIjogbm9kZU5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcnVsZS5w
YXJlbnRTdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVNb2NrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGhpcy5fbWF0Y2hlZENTU1J1bGVzLnB1c2gocnVsZSk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX21ha2VTdHlsZTogZnVuY3Rpb24ocGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzdHlsZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXlsb2FkKTsK
LSAgICAgICAgc3R5bGUuX25vZGVJZCA9IHRoaXMuX2lkOwotICAgICAgICByZXR1cm4gc3R5bGU7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlZENTU1J1bGVzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgdGhpcy5fbWF0Y2hlZENTU1J1bGVzLnB1c2goV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24ucGFyc2VSdWxlKG1hdGNoZWRDU1NSdWxlc1tpXSkpOwogICAgIH0s
CiAKICAgICBfY2xlYXJTdHlsZXM6IGZ1bmN0aW9uKCkKQEAgLTI5Niw2ICsyNzEsNyBAQCBXZWJJ
bnNwZWN0b3IuRE9NV2luZG93LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLl9kb21BZ2VudC5kb2N1bWVudDsKICAgICB9LAorCiAgICAgZ2V0IE5vZGUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5ET01Ob2RlOwpAQCAtNDc3LDIxICs0NTMsNDEg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKSB7
CiAgICAgdGhpcy5faWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lkdGggPSBwYXlsb2FkLndp
ZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7Ci0gICAgdGhpcy5fX2Rpc2Fi
bGVkUHJvcGVydGllcyA9IHBheWxvYWQuZGlzYWJsZWRQcm9wZXJ0aWVzOwotICAgIHRoaXMuX19k
aXNhYmxlZFByb3BlcnR5VmFsdWVzID0gcGF5bG9hZC5kaXNhYmxlZFByb3BlcnR5VmFsdWVzOwot
ICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHBheWxvYWQuZGlzYWJsZWRQ
cm9wZXJ0eVByaW9yaXRpZXM7CisgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHBheWxv
YWQuX19kaXNhYmxlZFByb3BlcnRpZXM7CisgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlWYWx1
ZXMgPSBwYXlsb2FkLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlczsKKyAgICB0aGlzLl9fZGlzYWJs
ZWRQcm9wZXJ0eVByaW9yaXRpZXMgPSBwYXlsb2FkLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRp
ZXM7CiAKICAgICB0aGlzLl9wcm9wZXJ0eU1hcCA9IHt9OwotICAgIHRoaXMubGVuZ3RoID0gdGhp
cy5fcHJvcGVydGllcy5sZW5ndGg7CisgICAgdGhpcy5sZW5ndGggPSBwYXlsb2FkLnByb3BlcnRp
ZXMubGVuZ3RoOwogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbaV07CisgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHBheWxvYWQucHJvcGVydGllc1tpXTsKICAgICAgICAgdmFyIG5hbWUgPSBw
cm9wZXJ0eS5uYW1lOwogICAgICAgICB0aGlzW2ldID0gbmFtZTsKICAgICAgICAgdGhpcy5fcHJv
cGVydHlNYXBbbmFtZV0gPSBwcm9wZXJ0eTsKICAgICB9CiB9CiAKK1dlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUgPSBmdW5jdGlvbihwYXlsb2FkKQoreworICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ocGF5bG9hZCk7Cit9CisK
K1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUnVsZSA9IGZ1bmN0aW9uKHBh
eWxvYWQpCit7CisgICAgdmFyIHJ1bGUgPSB7fTsKKyAgICBydWxlLl9pZCA9IHBheWxvYWQuaWQ7
CisgICAgcnVsZS5zZWxlY3RvclRleHQgPSBwYXlsb2FkLnNlbGVjdG9yVGV4dDsKKyAgICBydWxl
LnN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKHBheWxvYWQuc3R5
bGUpOworICAgIHJ1bGUuc3R5bGUucGFyZW50UnVsZSA9IHJ1bGU7CisgICAgcnVsZS5pc1VzZXJB
Z2VudCA9IHBheWxvYWQuaXNVc2VyQWdlbnQ7CisgICAgcnVsZS5pc1VzZXIgPSBwYXlsb2FkLmlz
VXNlcjsKKyAgICBpZiAocGF5bG9hZC5wYXJlbnRTdHlsZVNoZWV0KQorICAgICAgICBydWxlLnBh
cmVudFN0eWxlU2hlZXQgPSB7IGhyZWY6IHBheWxvYWQucGFyZW50U3R5bGVTaGVldC5ocmVmIH07
CisKKyAgICByZXR1cm4gcnVsZTsKK30KKwogV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b24ucHJvdG90eXBlID0gewogICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKG5hbWUpCiAg
ICAgewpAQCAtNTU1LDMgKzU1MSwyNSBAQCBXZWJJbnNwZWN0b3IuZGlkUGVyZm9ybVNlYXJjaCA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
QXBwbHlEb21DaGFuZ2UgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwog
V2ViSW5zcGVjdG9yLmRpZFJlbW92ZUF0dHJpYnV0ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkU2V0VGV4dE5vZGVWYWx1ZSA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CisKKy8vIFRlbXBvcmFyeSBtZXRob2Rz
IGZvciBET01BZ2VudCBtaWdyYXRpb24uCitXZWJJbnNwZWN0b3Iud3JhcE5vZGVXaXRoU3R5bGVz
ID0gZnVuY3Rpb24obm9kZSwgc3R5bGVzKQoreworICAgIHZhciB3aW5kb3dTdHViID0gbmV3IFdl
Ykluc3BlY3Rvci5ET01XaW5kb3cobnVsbCk7CisgICAgdmFyIGRvY1N0dWIgPSBuZXcgV2ViSW5z
cGVjdG9yLkRPTURvY3VtZW50KG51bGwsIHdpbmRvd1N0dWIpOworICAgIHZhciBwYXlsb2FkID0g
e307CisgICAgcGF5bG9hZC5ub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7CisgICAgcGF5bG9hZC5u
b2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CisgICAgcGF5bG9hZC5ub2RlVmFsdWUgPSBub2RlLm5v
ZGVWYWx1ZTsKKyAgICBwYXlsb2FkLmF0dHJpYnV0ZXMgPSBbXTsKKyAgICBwYXlsb2FkLmNoaWxk
Tm9kZUNvdW50ID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwor
ICAgICAgICBwYXlsb2FkLmF0dHJpYnV0ZXMucHVzaChhdHRyLm5hbWUpOworICAgICAgICBwYXls
b2FkLmF0dHJpYnV0ZXMucHVzaChhdHRyLm5vZGVWYWx1ZSk7CisgICAgfQorICAgIHZhciBub2Rl
U3R1YiA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NTm9kZShkb2NTdHViLCBwYXlsb2FkKTsKKyAgICBu
b2RlU3R1Yi5fc2V0U3R5bGVzKHN0eWxlcy5jb21wdXRlZFN0eWxlLCBzdHlsZXMuaW5saW5lU3R5
bGUsIHN0eWxlcy5zdHlsZUF0dHJpYnV0ZXMsIHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXMpOworICAg
IHJldHVybiBub2RlU3R1YjsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjA3M2Ji
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9z
ZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKwordmFyIEluamVjdGVkU2NyaXB0ID0geworICAgIF9zdHlsZXM6IHt9LAorICAg
IF9zdHlsZVJ1bGVzOiB7fSwKKyAgICBfbGFzdFN0eWxlSWQ6IDAsCisgICAgX2xhc3RTdHlsZVJ1
bGVJZDogMAorfTsKKworSW5qZWN0ZWRTY3JpcHQuZ2V0U3R5bGVzQXN5bmMgPSBmdW5jdGlvbihu
b2RlLCBhdXRob3JPbmx5LCBjYWxsYmFjaykKK3sKKyAgICB2YXIgbWF0Y2hlZFJ1bGVzID0gSW5z
cGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5nZXRNYXRjaGVkQ1NTUnVsZXMobm9k
ZSwgIiIsIGF1dGhvck9ubHkpOworICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBbXTsKKyAgICBm
b3IgKHZhciBpID0gMDsgbWF0Y2hlZFJ1bGVzICYmIGkgPCBtYXRjaGVkUnVsZXMubGVuZ3RoOyAr
K2kpCisgICAgICAgIG1hdGNoZWRDU1NSdWxlcy5wdXNoKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxp
emVSdWxlKG1hdGNoZWRSdWxlc1tpXSkpOworCisgICAgdmFyIHN0eWxlQXR0cmlidXRlcyA9IHt9
OworICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzOworICAgIGZvciAodmFyIGkg
PSAwOyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
IGlmIChhdHRyaWJ1dGVzW2ldLnN0eWxlKQorICAgICAgICAgICAgc3R5bGVBdHRyaWJ1dGVzW2F0
dHJpYnV0ZXNbaV0ubmFtZV0gPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoYXR0cmli
dXRlc1tpXS5zdHlsZSwgdHJ1ZSk7CisgICAgfQorICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICBy
ZXN1bHQuaW5saW5lU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUobm9kZS5z
dHlsZSwgdHJ1ZSk7CisgICAgcmVzdWx0LmNvbXB1dGVkU3R5bGUgPSBJbmplY3RlZFNjcmlwdC5f
c2VyaWFsaXplU3R5bGUoSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5nZXRD
b21wdXRlZFN0eWxlKG5vZGUpKTsKKyAgICByZXN1bHQubWF0Y2hlZENTU1J1bGVzID0gbWF0Y2hl
ZENTU1J1bGVzOworICAgIHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXMgPSBzdHlsZUF0dHJpYnV0ZXM7
CisgICAgY2FsbGJhY2socmVzdWx0KTsKK30KKworSW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcHV0ZWRT
dHlsZUFzeW5jID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soSW5q
ZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSkpOworfQorCitJbmplY3RlZFNjcmlwdC5n
ZXRJbmxpbmVTdHlsZUFzeW5jID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spCit7CisgICAgY2Fs
bGJhY2soSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKG5vZGUuc3R5bGUsIHRydWUpKTsK
K30KKworSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZUlkLCBz
dHlsZVRleHQsIHByb3BlcnR5TmFtZSwgY2FsbGJhY2spCit7CisgICAgdmFyIHN0eWxlID0gSW5q
ZWN0ZWRTY3JpcHQuX3N0eWxlc1tzdHlsZUlkXTsKKyAgICBpZiAoIXN0eWxlKSB7CisgICAgICAg
IC8vIENhbid0IGVkaXQgdW5rbm93biBzdHlsZS4KKyAgICAgICAgY2FsbGJhY2sobnVsbCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVU
ZXh0LnRyaW1XaGl0ZXNwYWNlKCkubGVuZ3RoOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGVsZW1l
bnQgdG8gcGFyc2UgdGhlIHVzZXIgaW5wdXQgQ1NTLgorICAgIHZhciBwYXJzZUVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgcGFyc2VFbGVtZW50LnNldEF0dHJp
YnV0ZSgic3R5bGUiLCBzdHlsZVRleHQpOworCisgICAgdmFyIHRlbXBTdHlsZSA9IHBhcnNlRWxl
bWVudC5zdHlsZTsKKyAgICBpZiAodGVtcFN0eWxlLmxlbmd0aCB8fCAhc3R5bGVUZXh0TGVuZ3Ro
KSB7CisgICAgICAgIC8vIFRoZSBpbnB1dCB3YXMgcGFyc2FibGUgb3IgdGhlIHVzZXIgZGVsZXRl
ZCBldmVyeXRoaW5nLCBzbyByZW1vdmUgdGhlCisgICAgICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5
IGZyb20gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIElmIHRoaXMgcmVwcmVzZW50cworICAg
ICAgICAvLyBhIHNob3J0aGFuZCByZW1vdmUgYWxsIHRoZSBsb25naGFuZCBwcm9wZXJ0aWVzLgor
ICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlOYW1lKSkgewor
ICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IGdldExvbmdoYW5kUHJvcGVydGll
cyhzdHlsZSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHN0eWxlLnJl
bW92ZVByb3BlcnR5KGxvbmdoYW5kUHJvcGVydGllc1tpXSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKKyAgICB9CisKKyAg
ICBpZiAoIXRlbXBTdHlsZS5sZW5ndGgpIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9u
IHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKKyAgICAvLyBhZGQgdGhl
bSB0byB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRvIG1vdmUgc2hv
cnRoYW5kcy4KKyAgICB2YXIgZm91bmRTaG9ydGhhbmRzID0ge307CisgICAgdmFyIGNoYW5nZWRQ
cm9wZXJ0aWVzID0gW107CisgICAgdmFyIHVuaXF1ZVByb3BlcnRpZXMgPSBnZXRVbmlxdWVTdHls
ZVByb3BlcnRpZXModGVtcFN0eWxlKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXF1ZVBy
b3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIG5hbWUgPSB1bmlxdWVQcm9wZXJ0
aWVzW2ldOworICAgICAgICB2YXIgc2hvcnRoYW5kID0gdGVtcFN0eWxlLmdldFByb3BlcnR5U2hv
cnRoYW5kKG5hbWUpOworCisgICAgICAgIGlmIChzaG9ydGhhbmQgJiYgc2hvcnRoYW5kIGluIGZv
dW5kU2hvcnRoYW5kcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChzaG9y
dGhhbmQpIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldFNob3J0aGFuZFZhbHVlKHRlbXBT
dHlsZSwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IGdldFNob3J0aGFu
ZFByaW9yaXR5KHRlbXBTdHlsZSwgc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIGZvdW5kU2hvcnRo
YW5kc1tzaG9ydGhhbmRdID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOworICAgICAgICAgICAg
dmFyIHByaW9yaXR5ID0gdGVtcFN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIHByb3BlcnR5IG9uIHRoZSByZWFsIHN0eWxlIGRl
Y2xhcmF0aW9uLgorICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eSgoc2hvcnRoYW5kIHx8IG5hbWUp
LCB2YWx1ZSwgcHJpb3JpdHkpOworICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5wdXNoKHNob3J0
aGFuZCB8fCBuYW1lKTsKKyAgICB9CisgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuX3Nlcmlh
bGl6ZVN0eWxlKHN0eWxlLCB0cnVlKSwgY2hhbmdlZFByb3BlcnRpZXMpOworfQorCitJbmplY3Rl
ZFNjcmlwdC5zZXRTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZSwgY3NzVGV4dCkKK3sKKyAgICBz
dHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKK30KKworSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVF
bmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCwgY2FsbGJh
Y2spCit7CisgICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxlc1tzdHlsZUlkXTsK
KyAgICBpZiAoIXN0eWxlKSB7CisgICAgICAgIC8vIENhbid0IHRvZ2dsZSB1bmtub3duIHN0eWxl
LgorICAgICAgICBjYWxsYmFjayhudWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChkaXNhYmxlZCkgeworICAgICAgICBpZiAoIXN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZh
bHVlcyB8fCAhc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcykgeworICAgICAgICAg
ICAgdmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2lu
ZG93KCk7CisgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllcyA9IG5ldyBpbnNw
ZWN0ZWRXaW5kb3cuT2JqZWN0OworICAgICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5
VmFsdWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7CisgICAgICAgICAgICBzdHlsZS5f
X2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7
CisgICAgICAgIH0KKworICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXNbcHJv
cGVydHlOYW1lXSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1twcm9wZXJ0eU5hbWVdID0gc3R5
bGUuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIGlmIChzdHls
ZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICB2YXIg
bG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZFByb3BlcnRp
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVy
dGllc1tsb25naGFuZFByb3BlcnRpZXNbaV1dID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdHls
ZS5yZW1vdmVQcm9wZXJ0eShsb25naGFuZFByb3BlcnRpZXNbaV0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXNb
cHJvcGVydHlOYW1lXSA9IHRydWU7CisgICAgICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzdHlsZS5fX2Rpc2FibGVk
UHJvcGVydGllcyAmJiBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKSB7
CisgICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlc1twcm9w
ZXJ0eU5hbWVdOworICAgICAgICB2YXIgcHJpb3JpdHkgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVy
dHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07CisKKyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHko
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHJpb3JpdHkpOworICAgICAgICBkZWxldGUgc3R5bGUuX19k
aXNhYmxlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgZGVsZXRlIHN0eWxlLl9f
ZGlzYWJsZWRQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdOworICAgICAgICBkZWxldGUgc3R5
bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1twcm9wZXJ0eU5hbWVdOworICAgIH0KKyAg
ICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoc3R5bGUsIHRydWUpKTsK
K30KKworSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0ID0gZnVuY3Rpb24ocnVsZUlk
LCBuZXdDb250ZW50LCBzZWxlY3RlZE5vZGUsIGNhbGxiYWNrKQoreworICAgIHZhciBydWxlID0g
SW5qZWN0ZWRTY3JpcHQuX3N0eWxlUnVsZXNbcnVsZUlkXTsKKyAgICBpZiAoIXJ1bGUpIHsKKyAg
ICAgICAgY2FsbGJhY2sobnVsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0cnkg
eworICAgICAgICB2YXIgc3R5bGVzaGVldCA9IHJ1bGUucGFyZW50U3R5bGVTaGVldDsKKyAgICAg
ICAgc3R5bGVzaGVldC5hZGRSdWxlKG5ld0NvbnRlbnQpOworICAgICAgICB2YXIgbmV3UnVsZSA9
IHN0eWxlc2hlZXQuY3NzUnVsZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXTsKKyAg
ICAgICAgbmV3UnVsZS5zdHlsZS5jc3NUZXh0ID0gcnVsZS5zdHlsZS5jc3NUZXh0OworCisgICAg
ICAgIHZhciBwYXJlbnRSdWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXM7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcGFyZW50UnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChwYXJlbnRSdWxlc1tpXSA9PT0gcnVsZSkgeworICAgICAgICAgICAgICAgIHJ1bGUucGFyZW50
U3R5bGVTaGVldC5yZW1vdmVSdWxlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIG5vZGVzID0gc2VsZWN0ZWROb2RlLm93
bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChuZXdDb250ZW50KTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGVz
W2ldID09PSBzZWxlY3RlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhJbmplY3Rl
ZFNjcmlwdC5fc2VyaWFsaXplUnVsZShuZXdSdWxlKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKEluamVj
dGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5ld1J1bGUpLCBmYWxzZSk7CisgICAgfSBjYXRjaChl
KSB7CisgICAgICAgIC8vIFJlcG9ydCBpbnZhbGlkIHN5bnRheC4KKyAgICAgICAgY2FsbGJhY2so
bnVsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0luamVjdGVkU2NyaXB0LmFkZFN0
eWxlU2VsZWN0b3IgPSBmdW5jdGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKK3sKKyAgICB2YXIg
c3R5bGVzaGVldCA9IEluamVjdGVkU2NyaXB0LnN0eWxlc2hlZXQ7CisgICAgaWYgKCFzdHlsZXNo
ZWV0KSB7CisgICAgICAgIHZhciBpbnNwZWN0ZWREb2N1bWVudCA9IEluc3BlY3RvckNvbnRyb2xs
ZXIuaW5zcGVjdGVkV2luZG93KCkuZG9jdW1lbnQ7CisgICAgICAgIHZhciBoZWFkID0gaW5zcGVj
dGVkRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKKyAgICAgICAgdmFy
IHN0eWxlRWxlbWVudCA9IGluc3BlY3RlZERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7
CisgICAgICAgIHN0eWxlRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKKyAgICAgICAgaGVhZC5h
cHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOworICAgICAgICBzdHlsZXNoZWV0ID0gaW5zcGVjdGVk
RG9jdW1lbnQuc3R5bGVTaGVldHNbaW5zcGVjdGVkRG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3Ro
IC0gMV07CisgICAgICAgIEluamVjdGVkU2NyaXB0LnN0eWxlc2hlZXQgPSBzdHlsZXNoZWV0Owor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNl
bGVjdG9yCisgICAgICAgIGNhbGxiYWNrKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZhciBydWxlID0gc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1bGVz
Lmxlbmd0aCAtIDFdOworICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxl
KHJ1bGUpKTsKK30KKworSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVJ1bGUgPSBmdW5jdGlvbihy
dWxlKQoreworICAgIHZhciBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS5wYXJlbnRTdHlsZVNoZWV0
OworCisgICAgdmFyIHJ1bGVWYWx1ZSA9IHt9OworICAgIHJ1bGVWYWx1ZS5zZWxlY3RvclRleHQg
PSBydWxlLnNlbGVjdG9yVGV4dDsKKyAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgeworICAgICAg
ICBydWxlVmFsdWUucGFyZW50U3R5bGVTaGVldCA9IHt9OworICAgICAgICBydWxlVmFsdWUucGFy
ZW50U3R5bGVTaGVldC5ocmVmID0gcGFyZW50U3R5bGVTaGVldC5ocmVmOworICAgIH0KKyAgICBy
dWxlVmFsdWUuaXNVc2VyQWdlbnQgPSBwYXJlbnRTdHlsZVNoZWV0ICYmICFwYXJlbnRTdHlsZVNo
ZWV0Lm93bmVyTm9kZSAmJiAhcGFyZW50U3R5bGVTaGVldC5ocmVmOworICAgIHJ1bGVWYWx1ZS5p
c1VzZXIgPSBwYXJlbnRTdHlsZVNoZWV0ICYmIHBhcmVudFN0eWxlU2hlZXQub3duZXJOb2RlICYm
IHBhcmVudFN0eWxlU2hlZXQub3duZXJOb2RlLm5vZGVOYW1lID09ICIjZG9jdW1lbnQiOworCisg
ICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCisgICAgdmFyIGRvQmluZCA9ICFydWxl
VmFsdWUuaXNVc2VyQWdlbnQgJiYgIXJ1bGVWYWx1ZS5pc1VzZXI7CisgICAgcnVsZVZhbHVlLnN0
eWxlID0gSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKHJ1bGUuc3R5bGUsIGRvQmluZCk7
CisKKyAgICBpZiAoZG9CaW5kKSB7CisgICAgICAgIGlmICghcnVsZS5faWQpIHsKKyAgICAgICAg
ICAgIHJ1bGUuX2lkID0gSW5qZWN0ZWRTY3JpcHQuX2xhc3RTdHlsZVJ1bGVJZCsrOworICAgICAg
ICAgICAgSW5qZWN0ZWRTY3JpcHQuX3N0eWxlUnVsZXNbcnVsZS5faWRdID0gcnVsZTsKKyAgICAg
ICAgfQorICAgICAgICBydWxlVmFsdWUuaWQgPSBydWxlLl9pZDsKKyAgICB9CisgICAgcmV0dXJu
IHJ1bGVWYWx1ZTsKK30KKworSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVQcm9wZXJ0eSA9IGZ1bmN0
aW9uKHN0eWxlSWQsIG5hbWUsIHZhbHVlLCBjYWxsYmFjaykgeworICAgIHZhciBzdHlsZSA9IElu
amVjdGVkU2NyaXB0Ll9zdHlsZXNbc3R5bGVJZF07CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsICIiKTsKKyAgICBj
YWxsYmFjaygpOworfQorCitJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUgPSBmdW5jdGlv
bihzdHlsZSwgZG9CaW5kKQoreworICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICByZXN1bHQud2lk
dGggPSBzdHlsZS53aWR0aDsKKyAgICByZXN1bHQuaGVpZ2h0ID0gc3R5bGUuaGVpZ2h0OworICAg
IHJlc3VsdC5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVz
OworICAgIHJlc3VsdC5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBzdHlsZS5fX2Rpc2FibGVk
UHJvcGVydHlWYWx1ZXM7CisgICAgcmVzdWx0Ll9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMg
PSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzOworICAgIHJlc3VsdC5wcm9wZXJ0
aWVzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgewor
ICAgICAgICB2YXIgcHJvcGVydHkgPSB7fTsKKyAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtpXTsK
KyAgICAgICAgcHJvcGVydHkubmFtZSA9IG5hbWU7CisgICAgICAgIHByb3BlcnR5LnByaW9yaXR5
ID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKKyAgICAgICAgcHJvcGVydHkuaW1w
bGljaXQgPSBzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSk7CisgICAgICAgIHByb3BlcnR5
LnNob3J0aGFuZCA9IHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICBw
cm9wZXJ0eS52YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7CisgICAgICAgIHJl
c3VsdC5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworICAgIH0KKworICAgIGlmIChkb0JpbmQp
IHsKKyAgICAgICAgaWYgKCFzdHlsZS5faWQpIHsKKyAgICAgICAgICAgIHN0eWxlLl9pZCA9IElu
amVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVJZCsrOworICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZS5faWRdID0gc3R5bGU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0Lmlk
ID0gc3R5bGUuX2lkOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKaW5kZXggYTIyYTAw
MC4uMzBlYzVhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJp
Y3NTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmlj
c1NpZGViYXJQYW5lLmpzCkBAIC0yOSw2ICsyOSw3IEBACiBXZWJJbnNwZWN0b3IuTWV0cmljc1Np
ZGViYXJQYW5lID0gZnVuY3Rpb24oKQogewogICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5j
YWxsKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTWV0cmljcyIpKTsKKyAgICB0aGlzLl9p
bmxpbmVTdHlsZUlkID0gbnVsbDsKIH0KIAogV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFu
ZS5wcm90b3R5cGUgPSB7CkBAIC00NiwxMiArNDcsMjQgQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NT
aWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS5vd25l
ckRvY3VtZW50LmRlZmF1bHRWaWV3KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZh
ciBzdHlsZTsKLSAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RF
KQotICAgICAgICAgICAgc3R5bGUgPSBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0
Q29tcHV0ZWRTdHlsZShub2RlKTsKLSAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgaWYgKG5v
ZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKQogICAgICAgICAgICAgcmV0dXJuOwog
CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rp
b24oc3R5bGVQYXlsb2FkKSB7CisgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKHN0eWxlUGF5bG9hZCk7CisgICAgICAgICAg
ICBzZWxmLl91cGRhdGUobm9kZSwgYm9keSwgc3R5bGUpOworICAgICAgICB9OworICAgICAgICBJ
bmplY3RlZFNjcmlwdC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9kZSwgY2FsbGJhY2spOworCisg
ICAgICAgIHZhciBpbmxpbmVTdHlsZUNhbGxiYWNrID0gZnVuY3Rpb24oc3R5bGVQYXlsb2FkKSB7
CisgICAgICAgICAgICBzZWxmLl9pbmxpbmVTdHlsZUlkID0gc3R5bGVQYXlsb2FkLmlkOworICAg
ICAgICB9OworICAgICAgICBJbmplY3RlZFNjcmlwdC5nZXRJbmxpbmVTdHlsZUFzeW5jKG5vZGUs
IGlubGluZVN0eWxlQ2FsbGJhY2spOworICAgIH0sCisKKyAgICBfdXBkYXRlOiBmdW5jdGlvbihu
b2RlLCBib2R5LCBzdHlsZSkKKyAgICB7CiAgICAgICAgIHZhciBtZXRyaWNzRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBtZXRyaWNzRWxlbWVudC5jbGFz
c05hbWUgPSAibWV0cmljcyI7CiAKQEAgLTE4NCwxMSArMTk3LDEyIEBAIFdlYkluc3BlY3Rvci5N
ZXRyaWNzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICBpZiAoL15cZCskLy50ZXN0
KHVzZXJJbnB1dCkpCiAgICAgICAgICAgICB1c2VySW5wdXQgKz0gInB4IjsKIAotICAgICAgICB0
aGlzLm5vZGUuc3R5bGUuc2V0UHJvcGVydHkoY29udGV4dC5zdHlsZVByb3BlcnR5LCB1c2VySW5w
dXQsICIiKTsKLQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibWV0cmlj
cyBlZGl0ZWQiKTsKLQotICAgICAgICB0aGlzLnVwZGF0ZSgpOworICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7CisgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
c2VsZi5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoIm1ldHJpY3MgZWRpdGVkIik7CisgICAgICAg
ICAgICBzZWxmLnVwZGF0ZSgpOworICAgICAgICB9OworICAgICAgICBJbmplY3RlZFNjcmlwdC5z
ZXRTdHlsZVByb3BlcnR5KHRoaXMuX2lubGluZVN0eWxlSWQsIGNvbnRleHQuc3R5bGVQcm9wZXJ0
eSwgdXNlcklucHV0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKaW5kZXggNTRkN2I3Mi4uOGVhMzgx
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQ
YW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFu
ZS5qcwpAQCAtNjMsNiArNjMsMTYgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCisg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24o
c3R5bGVzKSB7CisgICAgICAgICAgICB2YXIgbm9kZVdyYXBwZXIgPSBXZWJJbnNwZWN0b3Iud3Jh
cE5vZGVXaXRoU3R5bGVzKG5vZGUsIHN0eWxlcyk7CisgICAgICAgICAgICBzZWxmLl91cGRhdGUo
cmVmcmVzaCwgYm9keSwgbm9kZVdyYXBwZXIsIGVkaXRlZFNlY3Rpb24sIGZvcmNlVXBkYXRlKTsK
KyAgICAgICAgfTsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQuZ2V0U3R5bGVzQXN5bmMobm9kZSwg
IVByZWZlcmVuY2VzLnNob3dVc2VyQWdlbnRTdHlsZXMsIGNhbGxiYWNrKTsKKyAgICB9LAorCisg
ICAgX3VwZGF0ZTogZnVuY3Rpb24ocmVmcmVzaCwgYm9keSwgbm9kZSwgZWRpdGVkU2VjdGlvbiwg
Zm9yY2VVcGRhdGUpCisgICAgewogICAgICAgICB2YXIgc3R5bGVSdWxlcyA9IFtdOwogCiAgICAg
ICAgIGlmIChyZWZyZXNoKSB7CkBAIC0zMDUsOCArMzE1LDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydGllc1NlY3Rpb24gPSBmdW5jdGlvbihzdHlsZVJ1bGUsIHN1YnRpdGxlLCBjb21wdXRl
ZFN0eWwKICAgICB0aGlzLmVkaXRhYmxlID0gKGVkaXRhYmxlICYmICFjb21wdXRlZFN0eWxlKTsK
IAogICAgIC8vIFByZXZlbnQgZWRpdGluZyB0aGUgdXNlciBhZ2VudCBhbmQgdXNlciBydWxlcy4K
LSAgICB2YXIgaXNVc2VyQWdlbnQgPSB0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0ICYm
ICF0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0Lm93bmVyTm9kZSAmJiAhdGhpcy5zdHls
ZVJ1bGUucGFyZW50U3R5bGVTaGVldC5ocmVmOwotICAgIHZhciBpc1VzZXIgPSB0aGlzLnN0eWxl
UnVsZS5wYXJlbnRTdHlsZVNoZWV0ICYmIHRoaXMuc3R5bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQu
b3duZXJOb2RlICYmIHRoaXMuc3R5bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQub3duZXJOb2RlLm5v
ZGVOYW1lID09ICcjZG9jdW1lbnQnOworICAgIHZhciBpc1VzZXJBZ2VudCA9IHRoaXMuc3R5bGVS
dWxlLmlzVXNlckFnZW50OworICAgIHZhciBpc1VzZXIgPSB0aGlzLnN0eWxlUnVsZS5pc1VzZXI7
CisKICAgICBpZiAoaXNVc2VyQWdlbnQgfHwgaXNVc2VyKQogICAgICAgICB0aGlzLmVkaXRhYmxl
ID0gZmFsc2U7CiAKQEAgLTQ4Niw3ICs0OTcsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgaW5oZXJpdGVkID0gdGhp
cy5pc1Byb3BlcnR5SW5oZXJpdGVkKG5hbWUpOwogICAgICAgICAgICAgdmFyIG92ZXJsb2FkZWQg
PSB0aGlzLmlzUHJvcGVydHlPdmVybG9hZGVkKG5hbWUsIGlzU2hvcnRoYW5kKTsKIAotICAgICAg
ICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVu
dChzdHlsZSwgbmFtZSwgaXNTaG9ydGhhbmQsIGluaGVyaXRlZCwgb3ZlcmxvYWRlZCwgZGlzYWJs
ZWQpOworICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dHlUcmVlRWxlbWVudCh0aGlzLnN0eWxlUnVsZSwgc3R5bGUsIG5hbWUsIGlzU2hvcnRoYW5kLCBp
bmhlcml0ZWQsIG92ZXJsb2FkZWQsIGRpc2FibGVkKTsKICAgICAgICAgICAgIHRoaXMucHJvcGVy
dGllc1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgICB9CiAgICAgfSwKQEAg
LTUwNCw3ICs1MTUsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90
b3R5cGUgPSB7CiAKICAgICBhZGROZXdCbGFua1Byb3BlcnR5OiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50KHRoaXMuc3R5bGVSdWxlLnN0eWxlLCAiIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up
OworICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50KHRoaXMuc3R5bGVSdWxlLCB0aGlzLnN0eWxlUnVsZS5zdHlsZSwgIiIsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUu
YXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgIGl0ZW0ubGlzdEl0ZW1FbGVtZW50LnRleHRDb250
ZW50ID0gIiI7CiAgICAgICAgIGl0ZW0uX25ld1Byb3BlcnR5ID0gdHJ1ZTsKQEAgLTU2NCw0MCAr
NTc1LDMzIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9
IHsKICAgICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IG9sZENvbnRlbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwodGhpcyk7CiAKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIHZhciBzdHlsZXNoZWV0ID0gdGhpcy5ydWxlLnBhcmVudFN0eWxlU2hlZXQ7Ci0g
ICAgICAgICAgICBzdHlsZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7Ci0gICAgICAgICAgICB2
YXIgbmV3UnVsZSA9IHN0eWxlc2hlZXQuY3NzUnVsZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5n
dGggLSAxXTsKLSAgICAgICAgICAgIG5ld1J1bGUuc3R5bGUuY3NzVGV4dCA9IHRoaXMuc3R5bGVS
dWxlLnN0eWxlLmNzc1RleHQ7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIC8v
IEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCi0gICAgICAgICAgICB0aGlzLmVkaXRpbmdT
ZWxlY3RvckNhbmNlbGxlZChlbGVtZW50LCBjb250ZXh0KTsKLSAgICAgICAgICAgIHJldHVybiBt
b3ZlVG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
dGhpcy5fZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlKG5ld0NvbnRlbnQpKSB7Ci0gICAg
ICAgICAgICB0aGlzLm5vQWZmZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLm5vQWZmZWN0OwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZVN0
eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHBhcmVudFJ1
bGVzID0gdGhpcy5ydWxlLnBhcmVudFN0eWxlU2hlZXQuY3NzUnVsZXM7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcGFyZW50UnVsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChwYXJlbnRSdWxlc1tpXSA9PT0gdGhpcy5ydWxlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5y
dWxlLnBhcmVudFN0eWxlU2hlZXQucmVtb3ZlUnVsZShpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5j
dGlvbihuZXdSdWxlUGF5bG9hZCwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkgeworICAgICAgICAg
ICAgaWYgKCFuZXdSdWxlUGF5bG9hZCkgeworICAgICAgICAgICAgICAgIC8vIEludmFsaWQgU3lu
dGF4IGZvciBhIFNlbGVjdG9yCisgICAgICAgICAgICAgICAgc2VsZi5lZGl0aW5nU2VsZWN0b3JD
YW5jZWxsZWQoZWxlbWVudCwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgbW92ZVRvTmV4dElm
TmVlZGVkLmNhbGwoc2VsZik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpIHsK
KyAgICAgICAgICAgICAgICBzZWxmLm5vQWZmZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBz
ZWxmLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLm5vQWZmZWN0OworICAgICAgICAgICAg
ICAgIHNlbGYuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIG5ld1J1bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5wYXJzZVJ1bGUobmV3UnVsZVBheWxvYWQpOworICAgICAgICAgICAgc2VsZi5y
dWxlID0gbmV3UnVsZTsKKyAgICAgICAgICAgIHNlbGYuc3R5bGVSdWxlID0geyBzZWN0aW9uOiBz
ZWxmLCBzdHlsZTogbmV3UnVsZS5zdHlsZSwgc2VsZWN0b3JUZXh0OiBuZXdSdWxlLnNlbGVjdG9y
VGV4dCwgcGFyZW50U3R5bGVTaGVldDogbmV3UnVsZS5wYXJlbnRTdHlsZVNoZWV0LCBydWxlOiBu
ZXdSdWxlIH07CisgICAgICAgICAgICB2YXIgb2xkSWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmll
cjsKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IG5ld1J1bGUuc2VsZWN0b3JUZXh0ICsg
IjoiICsgc2VsZi5zdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBzZWxm
LnBhbmUudXBkYXRlKG51bGwsIHRydWUpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVs
cy5lbGVtZW50cy5yZW5hbWVTZWxlY3RvcihvbGRJZGVudGlmaWVyLCB0aGlzLmlkZW50aWZpZXIs
IG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpOworICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVk
LmNhbGwoc2VsZik7CisgICAgICAgIH07CiAKLSAgICAgICAgdGhpcy5ydWxlID0gbmV3UnVsZTsK
LSAgICAgICAgdGhpcy5zdHlsZVJ1bGUgPSB7IHNlY3Rpb246IHRoaXMsIHN0eWxlOiBuZXdSdWxl
LnN0eWxlLCBzZWxlY3RvclRleHQ6IG5ld1J1bGUuc2VsZWN0b3JUZXh0LCBwYXJlbnRTdHlsZVNo
ZWV0OiBuZXdSdWxlLnBhcmVudFN0eWxlU2hlZXQsIHJ1bGU6IG5ld1J1bGUgfTsKLSAgICAgICAg
dmFyIG9sZElkZW50aWZpZXIgPSB0aGlzLmlkZW50aWZpZXI7Ci0gICAgICAgIHRoaXMuaWRlbnRp
ZmllciA9IG5ld1J1bGUuc2VsZWN0b3JUZXh0ICsgIjoiICsgdGhpcy5zdWJ0aXRsZUVsZW1lbnQu
dGV4dENvbnRlbnQ7ICAgICAgICAKLSAgICAgICAgdGhpcy5wYW5lLnVwZGF0ZShudWxsLCB0cnVl
KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5yZW5hbWVTZWxlY3Rvcihv
bGRJZGVudGlmaWVyLCB0aGlzLmlkZW50aWZpZXIsIG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpOwot
ICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlzKTsKKyAgICAgICAgSW5qZWN0ZWRT
Y3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0KHRoaXMucnVsZS5faWQsIG5ld0NvbnRlbnQsIHRoaXMu
cGFuZS5ub2RlLCBjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIGVkaXRpbmdTZWxlY3RvckNhbmNl
bGxlZDogZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCkKQEAgLTY1OCwzOSArNjYyLDI3IEBAIFdl
Ykluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogCiAg
ICAgZWRpdGluZ0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3Q29udGVudCwgb2xkQ29u
dGVudCwgY29udGV4dCkKICAgICB7Ci0gICAgICAgIHZhciBzdHlsZXNoZWV0ID0gV2ViSW5zcGVj
dG9yLnBhbmVscy5lbGVtZW50cy5zdHlsZXNoZWV0OwotICAgICAgICBpZiAoIXN0eWxlc2hlZXQp
IHsKLSAgICAgICAgICAgIHZhciBpbnNwZWN0ZWREb2N1bWVudCA9IEluc3BlY3RvckNvbnRyb2xs
ZXIuaW5zcGVjdGVkV2luZG93KCkuZG9jdW1lbnQ7Ci0gICAgICAgICAgICB2YXIgaGVhZCA9IGlu
c3BlY3RlZERvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07Ci0gICAgICAg
ICAgICB2YXIgc3R5bGVFbGVtZW50ID0gaW5zcGVjdGVkRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3R5bGUiKTsKLSAgICAgICAgICAgIHN0eWxlRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKLSAg
ICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKLSAgICAgICAgICAgIHN0
eWxlc2hlZXQgPSBpbnNwZWN0ZWREb2N1bWVudC5zdHlsZVNoZWV0c1tpbnNwZWN0ZWREb2N1bWVu
dC5zdHlsZVNoZWV0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5l
bHMuZWxlbWVudHMuc3R5bGVzaGVldCA9IHN0eWxlc2hlZXQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICB0cnkgewotICAgICAgICAgICAgc3R5bGVzaGVldC5hZGRSdWxlKG5ld0NvbnRlbnQpOwotICAg
ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAvLyBJbnZhbGlkIFN5bnRheCBmb3IgYSBT
ZWxlY3RvcgotICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcnVsZSA9IHN0eWxlc2hlZXQuY3Nz
UnVsZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXTsKLSAgICAgICAgdmFyIHN0eWxl
UnVsZSA9IHsgc2VjdGlvbjogdGhpcywgc3R5bGU6IHJ1bGUuc3R5bGUsIHNlbGVjdG9yVGV4dDog
cnVsZS5zZWxlY3RvclRleHQsIHBhcmVudFN0eWxlU2hlZXQ6IHJ1bGUucGFyZW50U3R5bGVTaGVl
dCwgcnVsZTogcnVsZSB9OwotICAgICAgICB0aGlzLm1ha2VOb3JtYWwoc3R5bGVSdWxlKTsKKyAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihz
dHlsZVJ1bGUpIHsKKyAgICAgICAgICAgIGlmICghc3R5bGVSdWxlKSB7CisgICAgICAgICAgICAg
ICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0b3IKKyAgICAgICAgICAgICAgICBzZWxm
LmVkaXRpbmdDYW5jZWxsZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzZWxmLm1ha2VOb3JtYWwoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVj
bGFyYXRpb24ucGFyc2VSdWxlKHN0eWxlUnVsZSkpOwogCi0gICAgICAgIGlmICghdGhpcy5fZG9l
c1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlKG5ld0NvbnRlbnQpKSB7Ci0gICAgICAgICAgICB0
aGlzLm5vQWZmZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJuby1hZmZlY3QiKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzZWxmLl9kb2Vz
U2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUobmV3Q29udGVudCkpIHsKKyAgICAgICAgICAgICAg
ICBzZWxmLm5vQWZmZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygibm8tYWZmZWN0Iik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5z
dWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoInZpYSBp
bnNwZWN0b3IiKTsKLSAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICAgICAgICAgIHNlbGYuc3Vi
dGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJ2aWEgaW5z
cGVjdG9yIik7CisgICAgICAgICAgICBzZWxmLmV4cGFuZCgpOwogCi0gICAgICAgIHRoaXMucGFu
ZS5hZGRCbGFua1NlY3Rpb24oKTsKLSAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCku
c3RhcnRFZGl0aW5nKCk7CisgICAgICAgICAgICBzZWxmLnBhbmUuYWRkQmxhbmtTZWN0aW9uKCk7
CisgICAgICAgICAgICBzZWxmLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRpbmcoKTsK
KyAgICAgICAgfTsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQuYWRkU3R5bGVTZWxlY3RvcihuZXdD
b250ZW50LCBjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIG1ha2VOb3JtYWw6IGZ1bmN0aW9uKHN0
eWxlUnVsZSkKQEAgLTcxNyw4ICs3MDksOSBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKIAogV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9w
ZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlN0eWxlUHJv
cGVydGllc1NlY3Rpb24ucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50ID0gZnVuY3Rpb24oc3R5bGUsIG5hbWUsIHNob3J0aGFuZCwgaW5oZXJpdGVkLCBv
dmVybG9hZGVkLCBkaXNhYmxlZCkKK1dlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1l
bnQgPSBmdW5jdGlvbihzdHlsZVJ1bGUsIHN0eWxlLCBuYW1lLCBzaG9ydGhhbmQsIGluaGVyaXRl
ZCwgb3ZlcmxvYWRlZCwgZGlzYWJsZWQpCiB7CisgICAgdGhpcy5fc3R5bGVSdWxlID0gc3R5bGVS
dWxlOwogICAgIHRoaXMuc3R5bGUgPSBzdHlsZTsKICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAg
IHRoaXMuc2hvcnRoYW5kID0gc2hvcnRoYW5kOwpAQCAtOTA1LDQyICs4OTgsMjQgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB2YXIgZGlzYWJsZWQgPSAhZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CiAKLSAgICAgICAgaWYg
KGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3Bl
cnR5VmFsdWVzIHx8ICF0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMpIHsK
LSAgICAgICAgICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxl
ci5pbnNwZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9fZGlzYWJs
ZWRQcm9wZXJ0aWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBuZXcgaW5zcGVjdGVkV2lu
ZG93Lk9iamVjdDsKLSAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0
eVByaW9yaXRpZXMgPSBuZXcgaW5zcGVjdGVkV2luZG93Lk9iamVjdDsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlv
bihuZXdQYXlsb2FkKSB7CisgICAgICAgICAgICBpZiAoIW5ld1BheWxvYWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0
eVZhbHVlc1t0aGlzLm5hbWVdID0gdGhpcy52YWx1ZTsKLSAgICAgICAgICAgIHRoaXMuc3R5bGUu
X19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1t0aGlzLm5hbWVdID0gdGhpcy5wcmlvcml0eTsK
KyAgICAgICAgICAgIHNlbGYuc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
bi5wYXJzZVN0eWxlKG5ld1BheWxvYWQpOworICAgICAgICAgICAgc2VsZi5fc3R5bGVSdWxlLnN0
eWxlID0gc2VsZi5zdHlsZTsKIAotICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRoYW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IGdldExvbmdoYW5kUHJvcGVy
dGllcyh0aGlzLnN0eWxlLCB0aGlzLm5hbWUpOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbG9uZ2hhbmRQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXNbbG9uZ2hhbmRQcm9wZXJ0aWVz
W2ldXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVy
dHkobG9uZ2hhbmRQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnRp
ZXNbdGhpcy5uYW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQ
cm9wZXJ0eSh0aGlzLm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0aGlzLm5hbWUsIHRoaXMudmFsdWUsIHRo
aXMucHJpb3JpdHkpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGUuX19kaXNhYmxlZFBy
b3BlcnRpZXNbdGhpcy5uYW1lXTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlLl9fZGlz
YWJsZWRQcm9wZXJ0eVZhbHVlc1t0aGlzLm5hbWVdOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMu
c3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1t0aGlzLm5hbWVdOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBkaXNhYmxlZCBwcm9wZXJ0eSBoZXJlLCBzaW5jZSB0aGUg
Y29kZSBhYm92ZSByZXBsaWVzIG9uIGl0IG5vdCBjaGFuZ2luZwotICAgICAgICAvLyB1bnRpbCBh
ZnRlciB0aGUgdmFsdWUgYW5kIHByaW9yaXR5IGFyZSByZXRyaWV2ZWQuCi0gICAgICAgIHRoaXMu
ZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZGlzYWJsZWQgcHJv
cGVydHkgaGVyZSwgc2luY2UgdGhlIGNvZGUgYWJvdmUgcmVwbGllcyBvbiBpdCBub3QgY2hhbmdp
bmcKKyAgICAgICAgICAgIC8vIHVudGlsIGFmdGVyIHRoZSB2YWx1ZSBhbmQgcHJpb3JpdHkgYXJl
IHJldHJpZXZlZC4KKyAgICAgICAgICAgIHNlbGYuZGlzYWJsZWQgPSBkaXNhYmxlZDsKIAotICAg
ICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lKQotICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHlsZSBwcm9wZXJ0eSB0b2dnbGVkIik7CisgICAgICAg
ICAgICBpZiAoc2VsZi50cmVlT3V0bGluZS5zZWN0aW9uICYmIHNlbGYudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lKQorICAgICAgICAgICAgICAgIHNlbGYudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5l
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgcHJvcGVydHkgdG9nZ2xlZCIpOwogCi0g
ICAgICAgIHRoaXMudXBkYXRlQWxsKHRydWUpOworICAgICAgICAgICAgc2VsZi51cGRhdGVBbGwo
dHJ1ZSk7CisgICAgICAgIH07CisgICAgICAgIEluamVjdGVkU2NyaXB0LnRvZ2dsZVN0eWxlRW5h
YmxlZCh0aGlzLnN0eWxlLl9pZCwgdGhpcy5uYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2spOwogICAg
IH0sCiAKICAgICB1cGRhdGVTdGF0ZTogZnVuY3Rpb24oKQpAQCAtOTg0LDcgKzk1OSw3IEBAIFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHZhciBvdmVybG9hZGVkID0gdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmlzUHJv
cGVydHlPdmVybG9hZGVkKG5hbWUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIg
aXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRoaXMuc3R5
bGUsIG5hbWUsIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpOworICAgICAgICAgICAgdmFy
IGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0aGlzLl9z
dHlsZVJ1bGUsIHRoaXMuc3R5bGUsIG5hbWUsIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQp
OwogICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgfQogICAgIH0s
CkBAIC0xMTAzLDcgKzEwNzgsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFJlc3Rv
cmUgdGhlIG9yaWdpbmFsIENTUyB0ZXh0IGJlZm9yZSBhcHBseWluZyB1c2VyIGNoYW5nZXMuIFRo
aXMgaXMgbmVlZGVkIHRvIHByZXZlbnQKICAgICAgICAgICAgIC8vIG5ldyBwcm9wZXJ0aWVzIGZy
b20gc3RpY2tpbmcgYXJvdW5kIGlmIHRoZSB1c2VyIGFkZHMgb25lLCB0aGVuIHJlbW92ZXMgaXQu
Ci0gICAgICAgICAgICB0aGlzLnN0eWxlLmNzc1RleHQgPSB0aGlzLm9yaWdpbmFsQ1NTVGV4dDsK
KyAgICAgICAgICAgIEluamVjdGVkU2NyaXB0LnNldFN0eWxlVGV4dCh0aGlzLnN0eWxlLCB0aGlz
Lm9yaWdpbmFsQ1NTVGV4dCk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmFwcGx5U3R5bGVU
ZXh0KHRoaXMubGlzdEl0ZW1FbGVtZW50LnRleHRDb250ZW50KTsKQEAgLTExMjMsNyArMTA5OCw3
IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAodGhpcy5fbmV3UHJvcGVydHkpCiAgICAgICAgICAgICB0aGlzLnRyZWVPdXRs
aW5lLnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICAgICBlbHNlIGlmICh0aGlzLm9yaWdpbmFsQ1NT
VGV4dCkgewotICAgICAgICAgICAgdGhpcy5zdHlsZS5jc3NUZXh0ID0gdGhpcy5vcmlnaW5hbENT
U1RleHQ7CisgICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5zZXRTdHlsZVRleHQodGhpcy5zdHls
ZSwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwogCiAgICAgICAgICAgICBpZiAodGhpcy50cmVlT3V0
bGluZS5zZWN0aW9uICYmIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lKQogICAgICAgICAg
ICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycygic3R5bGUgZWRpdGVkIik7CkBAIC0xMTk3LDI1ICsxMTcyLDYgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzZWN0
aW9uID0gdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uOwogICAgICAgICB2YXIgZWxlbWVudHNQYW5l
bCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHM7CiAgICAgICAgIHZhciBzdHlsZVRleHRM
ZW5ndGggPSBzdHlsZVRleHQudHJpbVdoaXRlc3BhY2UoKS5sZW5ndGg7Ci0KLSAgICAgICAgLy8g
Q3JlYXRlIGEgbmV3IGVsZW1lbnQgdG8gcGFyc2UgdGhlIHVzZXIgaW5wdXQgQ1NTLgotICAgICAg
ICB2YXIgcGFyc2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAg
ICAgICBwYXJzZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsIHN0eWxlVGV4dCk7Ci0KLSAg
ICAgICAgdmFyIHRlbXBTdHlsZSA9IHBhcnNlRWxlbWVudC5zdHlsZTsKLSAgICAgICAgaWYgKHRl
bXBTdHlsZS5sZW5ndGggfHwgIXN0eWxlVGV4dExlbmd0aCkgewotICAgICAgICAgICAgLy8gVGhl
IGlucHV0IHdhcyBwYXJzYWJsZSBvciB0aGUgdXNlciBkZWxldGVkIGV2ZXJ5dGhpbmcsIHNvIHJl
bW92ZSB0aGUKLSAgICAgICAgICAgIC8vIG9yaWdpbmFsIHByb3BlcnR5IGZyb20gdGhlIHJlYWwg
c3R5bGUgZGVjbGFyYXRpb24uIElmIHRoaXMgcmVwcmVzZW50cwotICAgICAgICAgICAgLy8gYSBz
aG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJvcGVydGllcy4KLSAgICAgICAgICAg
IGlmICh0aGlzLnNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgIHZhciBsb25naGFuZFByb3Bl
cnRpZXMgPSBnZXRMb25naGFuZFByb3BlcnRpZXModGhpcy5zdHlsZSwgdGhpcy5uYW1lKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShs
b25naGFuZFByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0aGlzLm5hbWUpOwotICAgICAgICAgICAgZWxl
bWVudHNQYW5lbC5yZW1vdmVTdHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIsIHRoaXMuc3R5
bGUsIHRoaXMubmFtZSk7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0
aCkgewogICAgICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkgewogICAgICAgICAgICAgICAg
IC8vIFRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0cmVlIGVsZW1l
bnQgYW5kIHVwZGF0ZS4KQEAgLTEyMjksNTIgKzExODUsMzYgQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoIXRlbXBTdHlsZS5sZW5ndGgpIHsKLSAgICAgICAgICAg
IC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0IGl0IGRpZG4ndCBwYXJzZS4gSnVzdCBh
Ym9ydCBhbmQgcmVzdG9yZQotICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHRpdGxlIGZvciB0
aGlzIHByb3BlcnR5LiAgSWYgdGhpcyB3YXMgYSBuZXcgYXR0cmlidXRlIGFuZAotICAgICAgICAg
ICAgLy8gd2UgY291bGRuJ3QgcGFyc2UsIHRoZW4ganVzdCByZW1vdmUgaXQuCi0gICAgICAgICAg
ICBpZiAodGhpcy5fbmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5y
ZW1vdmVDaGlsZCh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAodXBkYXRlSW50ZXJmYWNlKQotICAgICAgICAgICAgICAgIHRoaXMu
dXBkYXRlVGl0bGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEl0ZXJhdGUgb2YgdGhlIHByb3BlcnRpZXMgb24gdGhlIHRlc3QgZWxlbWVudCdzIHN0eWxl
IGRlY2xhcmF0aW9uIGFuZAotICAgICAgICAvLyBhZGQgdGhlbSB0byB0aGUgcmVhbCBzdHlsZSBk
ZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRvIG1vdmUgc2hvcnRoYW5kcy4KLSAgICAgICAgdmFy
IGZvdW5kU2hvcnRoYW5kcyA9IHt9OwotICAgICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IGdl
dFVuaXF1ZVN0eWxlUHJvcGVydGllcyh0ZW1wU3R5bGUpOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHVuaXF1ZVByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBu
YW1lID0gdW5pcXVlUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIHZhciBzaG9ydGhhbmQgPSB0
ZW1wU3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChz
aG9ydGhhbmQgJiYgc2hvcnRoYW5kIGluIGZvdW5kU2hvcnRoYW5kcykKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKHNob3J0aGFuZCkgewotICAgICAgICAgICAg
ICAgIHZhciB2YWx1ZSA9IGdldFNob3J0aGFuZFZhbHVlKHRlbXBTdHlsZSwgc2hvcnRoYW5kKTsK
LSAgICAgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBnZXRTaG9ydGhhbmRQcmlvcml0eSh0ZW1w
U3R5bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzW3Nob3J0
aGFuZF0gPSB0cnVlOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBjYWxs
YmFjayA9IGZ1bmN0aW9uKG5ld1BheWxvYWQsIGNoYW5nZWRQcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICBpZiAoIW5ld1BheWxvYWQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciB0eXBl
ZCBzb21ldGhpbmcsIGJ1dCBpdCBkaWRuJ3QgcGFyc2UuIEp1c3QgYWJvcnQgYW5kIHJlc3RvcmUK
KyAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgdGl0bGUgZm9yIHRoaXMgcHJvcGVydHku
ICBJZiB0aGlzIHdhcyBhIG5ldyBhdHRyaWJ1dGUgYW5kCisgICAgICAgICAgICAgICAgLy8gd2Ug
Y291bGRuJ3QgcGFyc2UsIHRoZW4ganVzdCByZW1vdmUgaXQuCisgICAgICAgICAgICAgICAgaWYg
KHNlbGYuX25ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJl
bW92ZUNoaWxkKHNlbGYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYudXBkYXRlVGl0bGUoKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gdGVtcFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7
Ci0gICAgICAgICAgICAgICAgdmFyIHByaW9yaXR5ID0gdGVtcFN0eWxlLmdldFByb3BlcnR5UHJp
b3JpdHkobmFtZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNldCB0aGUgcHJv
cGVydHkgb24gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgICAgICAgICB0aGlzLnN0
eWxlLnNldFByb3BlcnR5KChzaG9ydGhhbmQgfHwgbmFtZSksIHZhbHVlLCBwcmlvcml0eSk7Ci0g
ICAgICAgICAgICBlbGVtZW50c1BhbmVsLmFkZFN0eWxlQ2hhbmdlKHNlY3Rpb24uaWRlbnRpZmll
ciwgdGhpcy5zdHlsZSwgKHNob3J0aGFuZCB8fCBuYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbGVtZW50c1BhbmVsLnJlbW92ZVN0eWxlQ2hhbmdlKHNlY3Rpb24uaWRlbnRpZmll
ciwgc2VsZi5zdHlsZSwgc2VsZi5uYW1lKTsKIAotICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0
aW9uLnBhbmUpCi0gICAgICAgICAgICBzZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKCJzdHlsZSBlZGl0ZWQiKTsKKyAgICAgICAgICAgICAgICBzZWxmLnN0eWxlID0gV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRQcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1BhbmVsLmFkZFN0eWxlQ2hhbmdlKHNl
Y3Rpb24uaWRlbnRpZmllciwgc2VsZi5zdHlsZSwgY2hhbmdlZFByb3BlcnRpZXNbaV0pOworICAg
ICAgICAgICAgICAgIHNlbGYuX3N0eWxlUnVsZS5zdHlsZSA9IHNlbGYuc3R5bGU7CisgICAgICAg
ICAgICAgICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi5wYW5lKQorICAgICAgICAgICAgICAgICAg
ICBzZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHlsZSBlZGl0ZWQiKTsK
IAotICAgICAgICBpZiAodXBkYXRlSW50ZXJmYWNlKQotICAgICAgICAgICAgdGhpcy51cGRhdGVB
bGwodHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi51cGRhdGVBbGwodHJ1ZSk7CiAKLSAgICAgICAgaWYgKCF0aGlzLnJ1
bGUpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLnRyZWVPdXRsaW5l
LnVwZGF0ZSgpOworICAgICAgICAgICAgICAgIGlmICghc2VsZi5ydWxlKQorICAgICAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLnRyZWVPdXRsaW5lLnVwZGF0ZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBJbmplY3RlZFNjcmlwdC5hcHBs
eVN0eWxlVGV4dCh0aGlzLnN0eWxlLl9pZCwgc3R5bGVUZXh0LCB0aGlzLm5hbWUsIGNhbGxiYWNr
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXgg
Y2Y1ODg3MC4uNzI0YzRlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
QEAgLTIyLDYgKzIyLDcgQEAKICAgICA8ZmlsZT5FbGVtZW50c1RyZWVPdXRsaW5lLmpzPC9maWxl
PgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkltYWdlVmlldy5qczwv
ZmlsZT4KKyAgICA8ZmlsZT5JbmplY3RlZFNjcmlwdC5qczwvZmlsZT4KICAgICA8ZmlsZT5pbnNw
ZWN0b3IuanM8L2ZpbGU+CiAgICAgPGZpbGU+S2V5Ym9hcmRTaG9ydGN1dC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5NZXRyaWNzU2lkZWJhclBhbmUuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMGNkODZiNS4uNDk3YTkwNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtODIsNiArODIsNyBAQCBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRvcERvd25Q
cm9maWxlRGF0YUdyaWRUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJQcm9maWxlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQWdlbnQuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkluamVjdGVkU2NyaXB0LmpzIj48L3Nj
cmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJkZXRhY2hlZCI+CiAgICAgPGRpdiBpZD0idG9v
bGJhciI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34136</attachid>
            <date>2009-08-05 08:35:01 -0700</date>
            <delta_ts>2009-08-07 01:05:11 -0700</delta_ts>
            <desc>Same, but access to injected script is done via InspectorController</desc>
            <filename>style_edit.txt</filename>
            <type>text/plain</type>
            <size>41698</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTE4ZjU4Yy4uOGU2MzQ3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOS0wOC0wNSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJJbnNwZWN0b3I6IEV4dHJhY3Qgc3R5bGUgZWRpdGluZyBp
bnRvIGEgc2VwYXJhdGUgZmlsZSB0aGF0IGlzCisgICAgICAgIGdvaW5nIHRvIGJlIGxvYWRlZCBp
biBwYWdlIGNvbnRleHQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI3OTM5CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVUZXh0
KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnNldFN0eWxlVGV4dCk6CisgICAgICAgIChJbmpl
Y3RlZFNjcmlwdC50b2dnbGVTdHlsZUVuYWJsZWQpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQu
c2V0U3R5bGVSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24u
cHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5jYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVj
dG9yQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisK
IDIwMDktMDgtMDQgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBQcm9zcGVjdGl2ZSBidWlsZCBmaXggZm9yIFF0IGJ1aWxkIGJvdDogRml4IGRlcGVuZGVu
Y3kgb2YgSFRNTE5hbWVzLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50Lmpz
CmluZGV4IDY4MGFlNWEuLmFhZjc4OGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9N
QWdlbnQuanMKQEAgLTE4NSw0MiArMTg1LDE3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIF9zZXRTdHlsZXM6IGZ1bmN0aW9uKGNvbXB1dGVkU3R5bGUsIGlubGlu
ZVN0eWxlLCBzdHlsZUF0dHJpYnV0ZXMsIG1hdGNoZWRDU1NSdWxlcykKICAgICB7Ci0gICAgICAg
IHRoaXMuX2NvbXB1dGVkU3R5bGUgPSB0aGlzLl9tYWtlU3R5bGUoY29tcHV0ZWRTdHlsZSk7Ci0g
ICAgICAgIHRoaXMuc3R5bGUgPSB0aGlzLl9tYWtlU3R5bGUoaW5saW5lU3R5bGUpOworICAgICAg
ICB0aGlzLl9jb21wdXRlZFN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0
aW9uKGNvbXB1dGVkU3R5bGUpOworICAgICAgICB0aGlzLnN0eWxlID0gbmV3IFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uKGlubGluZVN0eWxlKTsKIAogICAgICAgICBmb3IgKHZhciBu
YW1lIGluIHN0eWxlQXR0cmlidXRlcykgewogICAgICAgICAgICAgaWYgKHRoaXMuX2F0dHJpYnV0
ZXNNYXBbbmFtZV0pCi0gICAgICAgICAgICAgICAgdGhpcy5fYXR0cmlidXRlc01hcFtuYW1lXS5z
dHlsZSA9IHRoaXMuX21ha2VTdHlsZShzdHlsZUF0dHJpYnV0ZXNbbmFtZV0pOworICAgICAgICAg
ICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNNYXBbbmFtZV0uc3R5bGUgPSBuZXcgV2ViSW5zcGVjdG9y
LkNTU1N0eWxlRGVjbGFyYXRpb24oc3R5bGVBdHRyaWJ1dGVzW25hbWVdKTsKICAgICAgICAgfQog
CiAgICAgICAgIHRoaXMuX21hdGNoZWRDU1NSdWxlcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFy
IGRlc2NyaXB0aW9uID0gbWF0Y2hlZENTU1J1bGVzW2ldOwotCi0gICAgICAgICAgICB2YXIgcnVs
ZSA9IHt9OwotICAgICAgICAgICAgcnVsZS5zZWxlY3RvclRleHQgPSBkZXNjcmlwdGlvbi5zZWxl
Y3RvclRleHQ7Ci0gICAgICAgICAgICBydWxlLnN0eWxlID0gdGhpcy5fbWFrZVN0eWxlKGRlc2Ny
aXB0aW9uLnN0eWxlKTsKLQotICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnBhcmVudFN0eWxl
U2hlZXQpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyZW50U3R5bGVNb2NrID0ge307Ci0gICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGVNb2NrLmhyZWYgPSBkZXNjcmlwdGlvbi5wYXJlbnRTdHls
ZVNoZWV0LmhyZWY7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZGVzY3JpcHRpb24u
cGFyZW50U3R5bGVTaGVldC5vd25lck5vZGVOYW1lOwotICAgICAgICAgICAgICAgIGlmIChub2Rl
TmFtZSkgewotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZU1vY2sub3duZXJOb2RlID0g
ewotICAgICAgICAgICAgICAgICAgICAgICAgIm5vZGVOYW1lIjogbm9kZU5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcnVsZS5w
YXJlbnRTdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVNb2NrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGhpcy5fbWF0Y2hlZENTU1J1bGVzLnB1c2gocnVsZSk7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgX21ha2VTdHlsZTogZnVuY3Rpb24ocGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzdHlsZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXlsb2FkKTsK
LSAgICAgICAgc3R5bGUuX25vZGVJZCA9IHRoaXMuX2lkOwotICAgICAgICByZXR1cm4gc3R5bGU7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hlZENTU1J1bGVzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgdGhpcy5fbWF0Y2hlZENTU1J1bGVzLnB1c2goV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24ucGFyc2VSdWxlKG1hdGNoZWRDU1NSdWxlc1tpXSkpOwogICAgIH0s
CiAKICAgICBfY2xlYXJTdHlsZXM6IGZ1bmN0aW9uKCkKQEAgLTI5Niw2ICsyNzEsNyBAQCBXZWJJ
bnNwZWN0b3IuRE9NV2luZG93LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLl9kb21BZ2VudC5kb2N1bWVudDsKICAgICB9LAorCiAgICAgZ2V0IE5vZGUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5ET01Ob2RlOwpAQCAtNDc3LDIxICs0NTMsNDEg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKSB7
CiAgICAgdGhpcy5faWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lkdGggPSBwYXlsb2FkLndp
ZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7Ci0gICAgdGhpcy5fX2Rpc2Fi
bGVkUHJvcGVydGllcyA9IHBheWxvYWQuZGlzYWJsZWRQcm9wZXJ0aWVzOwotICAgIHRoaXMuX19k
aXNhYmxlZFByb3BlcnR5VmFsdWVzID0gcGF5bG9hZC5kaXNhYmxlZFByb3BlcnR5VmFsdWVzOwot
ICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHBheWxvYWQuZGlzYWJsZWRQ
cm9wZXJ0eVByaW9yaXRpZXM7CisgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHBheWxv
YWQuX19kaXNhYmxlZFByb3BlcnRpZXM7CisgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlWYWx1
ZXMgPSBwYXlsb2FkLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlczsKKyAgICB0aGlzLl9fZGlzYWJs
ZWRQcm9wZXJ0eVByaW9yaXRpZXMgPSBwYXlsb2FkLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRp
ZXM7CiAKICAgICB0aGlzLl9wcm9wZXJ0eU1hcCA9IHt9OwotICAgIHRoaXMubGVuZ3RoID0gdGhp
cy5fcHJvcGVydGllcy5sZW5ndGg7CisgICAgdGhpcy5sZW5ndGggPSBwYXlsb2FkLnByb3BlcnRp
ZXMubGVuZ3RoOwogCiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnRpZXNbaV07CisgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHBheWxvYWQucHJvcGVydGllc1tpXTsKICAgICAgICAgdmFyIG5hbWUgPSBw
cm9wZXJ0eS5uYW1lOwogICAgICAgICB0aGlzW2ldID0gbmFtZTsKICAgICAgICAgdGhpcy5fcHJv
cGVydHlNYXBbbmFtZV0gPSBwcm9wZXJ0eTsKICAgICB9CiB9CiAKK1dlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUgPSBmdW5jdGlvbihwYXlsb2FkKQoreworICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ocGF5bG9hZCk7Cit9CisK
K1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUnVsZSA9IGZ1bmN0aW9uKHBh
eWxvYWQpCit7CisgICAgdmFyIHJ1bGUgPSB7fTsKKyAgICBydWxlLl9pZCA9IHBheWxvYWQuaWQ7
CisgICAgcnVsZS5zZWxlY3RvclRleHQgPSBwYXlsb2FkLnNlbGVjdG9yVGV4dDsKKyAgICBydWxl
LnN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKHBheWxvYWQuc3R5
bGUpOworICAgIHJ1bGUuc3R5bGUucGFyZW50UnVsZSA9IHJ1bGU7CisgICAgcnVsZS5pc1VzZXJB
Z2VudCA9IHBheWxvYWQuaXNVc2VyQWdlbnQ7CisgICAgcnVsZS5pc1VzZXIgPSBwYXlsb2FkLmlz
VXNlcjsKKyAgICBpZiAocGF5bG9hZC5wYXJlbnRTdHlsZVNoZWV0KQorICAgICAgICBydWxlLnBh
cmVudFN0eWxlU2hlZXQgPSB7IGhyZWY6IHBheWxvYWQucGFyZW50U3R5bGVTaGVldC5ocmVmIH07
CisKKyAgICByZXR1cm4gcnVsZTsKK30KKwogV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b24ucHJvdG90eXBlID0gewogICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKG5hbWUpCiAg
ICAgewpAQCAtNTU1LDMgKzU1MSw4OCBAQCBXZWJJbnNwZWN0b3IuZGlkUGVyZm9ybVNlYXJjaCA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
QXBwbHlEb21DaGFuZ2UgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwog
V2ViSW5zcGVjdG9yLmRpZFJlbW92ZUF0dHJpYnV0ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkU2V0VGV4dE5vZGVWYWx1ZSA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CisKKy8vIFRlbXBvcmFyeSBtZXRob2Rz
IGZvciBET01BZ2VudCBtaWdyYXRpb24uCitXZWJJbnNwZWN0b3Iud3JhcE5vZGVXaXRoU3R5bGVz
ID0gZnVuY3Rpb24obm9kZSwgc3R5bGVzKQoreworICAgIHZhciB3aW5kb3dTdHViID0gbmV3IFdl
Ykluc3BlY3Rvci5ET01XaW5kb3cobnVsbCk7CisgICAgdmFyIGRvY1N0dWIgPSBuZXcgV2ViSW5z
cGVjdG9yLkRPTURvY3VtZW50KG51bGwsIHdpbmRvd1N0dWIpOworICAgIHZhciBwYXlsb2FkID0g
e307CisgICAgcGF5bG9hZC5ub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7CisgICAgcGF5bG9hZC5u
b2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CisgICAgcGF5bG9hZC5ub2RlVmFsdWUgPSBub2RlLm5v
ZGVWYWx1ZTsKKyAgICBwYXlsb2FkLmF0dHJpYnV0ZXMgPSBbXTsKKyAgICBwYXlsb2FkLmNoaWxk
Tm9kZUNvdW50ID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwor
ICAgICAgICBwYXlsb2FkLmF0dHJpYnV0ZXMucHVzaChhdHRyLm5hbWUpOworICAgICAgICBwYXls
b2FkLmF0dHJpYnV0ZXMucHVzaChhdHRyLm5vZGVWYWx1ZSk7CisgICAgfQorICAgIHZhciBub2Rl
U3R1YiA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NTm9kZShkb2NTdHViLCBwYXlsb2FkKTsKKyAgICBu
b2RlU3R1Yi5fc2V0U3R5bGVzKHN0eWxlcy5jb21wdXRlZFN0eWxlLCBzdHlsZXMuaW5saW5lU3R5
bGUsIHN0eWxlcy5zdHlsZUF0dHJpYnV0ZXMsIHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXMpOworICAg
IHJldHVybiBub2RlU3R1YjsKK30KKworLy8gVGVtcG9yYXJ5IG1ldGhvZHMgdGhhdCB3aWxsIGJl
IGRpc3BhdGNoZWQgdmlhIEluc3BlY3RvckNvbnRyb2xsZXIgaW50byB0aGUgaW5qZWN0ZWQgY29u
dGV4dC4KK0luc3BlY3RvckNvbnRyb2xsZXIuZ2V0U3R5bGVzID0gZnVuY3Rpb24obm9kZUlkLCBh
dXRob3JPbmx5LCBjYWxsYmFjaykKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5nZXRTdHlsZXMobm9kZUlkLCBhdXRob3JPbmx5
KSk7CisgICAgfSwgMCkKK30KKworSW5zcGVjdG9yQ29udHJvbGxlci5nZXRDb21wdXRlZFN0eWxl
ID0gZnVuY3Rpb24obm9kZUlkLCBjYWxsYmFjaykKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5nZXRDb21wdXRlZFN0eWxlKG5v
ZGVJZCkpOworICAgIH0sIDApCit9CisKK0luc3BlY3RvckNvbnRyb2xsZXIuZ2V0SW5saW5lU3R5
bGUgPSBmdW5jdGlvbihub2RlSWQsIGNhbGxiYWNrKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldElubGluZVN0eWxlKG5v
ZGVJZCkpOworICAgIH0sIDApCit9CisKK0luc3BlY3RvckNvbnRyb2xsZXIuYXBwbHlTdHlsZVRl
eHQgPSBmdW5jdGlvbihzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSwgY2FsbGJhY2sp
Cit7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGJhY2soSW5qZWN0
ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQoc3R5bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICB9LCAwKQorfQorCitJbnNwZWN0b3JDb250cm9sbGVyLnNldFN0eWxlVGV4dCA9IGZ1
bmN0aW9uKHN0eWxlLCBjc3NUZXh0LCBjYWxsYmFjaykKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5zZXRTdHlsZVRleHQoc3R5
bGUsIGNzc1RleHQpKTsKKyAgICB9LCAwKQorfQorCitJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2ds
ZVN0eWxlRW5hYmxlZCA9IGZ1bmN0aW9uKHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQs
IGNhbGxiYWNrKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNhbGxi
YWNrKEluamVjdGVkU2NyaXB0LnRvZ2dsZVN0eWxlRW5hYmxlZChzdHlsZUlkLCBwcm9wZXJ0eU5h
bWUsIGRpc2FibGVkKSk7CisgICAgfSwgMCkKK30KKworSW5zcGVjdG9yQ29udHJvbGxlci5hcHBs
eVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9k
ZSwgY2FsbGJhY2spCit7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2Fs
bGJhY2soSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0KHJ1bGVJZCwgbmV3Q29udGVu
dCwgc2VsZWN0ZWROb2RlKSk7CisgICAgfSwgMCkKK30KKworSW5zcGVjdG9yQ29udHJvbGxlci5h
ZGRTdHlsZVNlbGVjdG9yID0gZnVuY3Rpb24obmV3Q29udGVudCwgY2FsbGJhY2spCit7CisgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQu
YWRkU3R5bGVTZWxlY3RvcihuZXdDb250ZW50KSk7CisgICAgfSwgMCkKK30KKworSW5zcGVjdG9y
Q29udHJvbGxlci5zZXRTdHlsZVByb3BlcnR5ID0gZnVuY3Rpb24oc3R5bGVJZCwgbmFtZSwgdmFs
dWUsIGNhbGxiYWNrKSB7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2Fs
bGJhY2soSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVQcm9wZXJ0eShzdHlsZUlkLCBuYW1lLCB2YWx1
ZSkpOworICAgIH0sIDApCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExOGYzZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qcwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2Vw
aCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK3ZhciBJbmplY3RlZFNjcmlwdCA9IHsKKyAgICBfc3R5bGVzOiB7fSwKKyAgICBf
c3R5bGVSdWxlczoge30sCisgICAgX2xhc3RTdHlsZUlkOiAwLAorICAgIF9sYXN0U3R5bGVSdWxl
SWQ6IDAKK307CisKK0luamVjdGVkU2NyaXB0LmdldFN0eWxlcyA9IGZ1bmN0aW9uKG5vZGVJZCwg
YXV0aG9yT25seSkKK3sKKyAgICB2YXIgbm9kZSA9IEluamVjdGVkU2NyaXB0Ll9ub2RlRm9ySWQo
bm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBudWxsOworICAgIHZhciBt
YXRjaGVkUnVsZXMgPSBJbmplY3RlZFNjcmlwdC5fd2luZG93KCkuZ2V0TWF0Y2hlZENTU1J1bGVz
KG5vZGUsICIiLCBhdXRob3JPbmx5KTsKKyAgICB2YXIgbWF0Y2hlZENTU1J1bGVzID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IG1hdGNoZWRSdWxlcyAmJiBpIDwgbWF0Y2hlZFJ1bGVzLmxlbmd0
aDsgKytpKQorICAgICAgICBtYXRjaGVkQ1NTUnVsZXMucHVzaChJbmplY3RlZFNjcmlwdC5fc2Vy
aWFsaXplUnVsZShtYXRjaGVkUnVsZXNbaV0pKTsKKworICAgIHZhciBzdHlsZUF0dHJpYnV0ZXMg
PSB7fTsKKyAgICB2YXIgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlczsKKyAgICBmb3IgKHZh
ciBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkgeworICAg
ICAgICBpZiAoYXR0cmlidXRlc1tpXS5zdHlsZSkKKyAgICAgICAgICAgIHN0eWxlQXR0cmlidXRl
c1thdHRyaWJ1dGVzW2ldLm5hbWVdID0gSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKGF0
dHJpYnV0ZXNbaV0uc3R5bGUsIHRydWUpOworICAgIH0KKyAgICB2YXIgcmVzdWx0ID0ge307Cisg
ICAgcmVzdWx0LmlubGluZVN0eWxlID0gSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKG5v
ZGUuc3R5bGUsIHRydWUpOworICAgIHJlc3VsdC5jb21wdXRlZFN0eWxlID0gSW5qZWN0ZWRTY3Jp
cHQuX3NlcmlhbGl6ZVN0eWxlKEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5nZXRDb21wdXRlZFN0
eWxlKG5vZGUpKTsKKyAgICByZXN1bHQubWF0Y2hlZENTU1J1bGVzID0gbWF0Y2hlZENTU1J1bGVz
OworICAgIHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXMgPSBzdHlsZUF0dHJpYnV0ZXM7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworSW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0
aW9uKG5vZGVJZCkKK3sKKyAgICB2YXIgbm9kZSA9IEluamVjdGVkU2NyaXB0Ll9ub2RlRm9ySWQo
bm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKEluamVjdGVkU2NyaXB0Ll93aW5kb3co
KS5nZXRDb21wdXRlZFN0eWxlKG5vZGUpKTsKK30KKworSW5qZWN0ZWRTY3JpcHQuZ2V0SW5saW5l
U3R5bGUgPSBmdW5jdGlvbihub2RlSWQpCit7CisgICAgdmFyIG5vZGUgPSBJbmplY3RlZFNjcmlw
dC5fbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVTdHlsZShub2RlLnN0eWxl
LCB0cnVlKTsKK30KKworSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQgPSBmdW5jdGlvbihz
dHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSkKK3sKKyAgICB2YXIgc3R5bGUgPSBJbmpl
Y3RlZFNjcmlwdC5fc3R5bGVzW3N0eWxlSWRdOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHZhciBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRleHQudHJpbVdo
aXRlc3BhY2UoKS5sZW5ndGg7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgZWxlbWVudCB0byBwYXJz
ZSB0aGUgdXNlciBpbnB1dCBDU1MuCisgICAgdmFyIHBhcnNlRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBwYXJzZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHls
ZSIsIHN0eWxlVGV4dCk7CisKKyAgICB2YXIgdGVtcFN0eWxlID0gcGFyc2VFbGVtZW50LnN0eWxl
OworICAgIGlmICh0ZW1wU3R5bGUubGVuZ3RoIHx8ICFzdHlsZVRleHRMZW5ndGgpIHsKKyAgICAg
ICAgLy8gVGhlIGlucHV0IHdhcyBwYXJzYWJsZSBvciB0aGUgdXNlciBkZWxldGVkIGV2ZXJ5dGhp
bmcsIHNvIHJlbW92ZSB0aGUKKyAgICAgICAgLy8gb3JpZ2luYWwgcHJvcGVydHkgZnJvbSB0aGUg
cmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gSWYgdGhpcyByZXByZXNlbnRzCisgICAgICAgIC8vIGEg
c2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCisgICAgICAgIGlm
IChzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAg
ICB2YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZFBy
b3BlcnRpZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlUHJvcGVy
dHkobG9uZ2hhbmRQcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBz
dHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIGlmICghdGVt
cFN0eWxlLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSXRlcmF0ZSBv
ZiB0aGUgcHJvcGVydGllcyBvbiB0aGUgdGVzdCBlbGVtZW50J3Mgc3R5bGUgZGVjbGFyYXRpb24g
YW5kCisgICAgLy8gYWRkIHRoZW0gdG8gdGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRh
a2UgY2FyZSB0byBtb3ZlIHNob3J0aGFuZHMuCisgICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9IHt9
OworICAgIHZhciBjaGFuZ2VkUHJvcGVydGllcyA9IFtdOworICAgIHZhciB1bmlxdWVQcm9wZXJ0
aWVzID0gZ2V0VW5pcXVlU3R5bGVQcm9wZXJ0aWVzKHRlbXBTdHlsZSk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB1bmlxdWVQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBu
YW1lID0gdW5pcXVlUHJvcGVydGllc1tpXTsKKyAgICAgICAgdmFyIHNob3J0aGFuZCA9IHRlbXBT
dHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKworICAgICAgICBpZiAoc2hvcnRoYW5k
ICYmIHNob3J0aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAoc2hvcnRoYW5kKSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRT
aG9ydGhhbmRWYWx1ZSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7CisgICAgICAgICAgICB2YXIgcHJp
b3JpdHkgPSBnZXRTaG9ydGhhbmRQcmlvcml0eSh0ZW1wU3R5bGUsIHNob3J0aGFuZCk7CisgICAg
ICAgICAgICBmb3VuZFNob3J0aGFuZHNbc2hvcnRoYW5kXSA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShu
YW1lKTsKKyAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRlbXBTdHlsZS5nZXRQcm9wZXJ0eVBy
aW9yaXR5KG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBv
biB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgc3R5bGUuc2V0UHJvcGVydHko
KHNob3J0aGFuZCB8fCBuYW1lKSwgdmFsdWUsIHByaW9yaXR5KTsKKyAgICAgICAgY2hhbmdlZFBy
b3BlcnRpZXMucHVzaChzaG9ydGhhbmQgfHwgbmFtZSk7CisgICAgfQorICAgIHJldHVybiBbSW5q
ZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKHN0eWxlLCB0cnVlKSwgY2hhbmdlZFByb3BlcnRp
ZXNdOworfQorCitJbmplY3RlZFNjcmlwdC5zZXRTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZSwg
Y3NzVGV4dCkKK3sKKyAgICBzdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDsKK30KKworSW5qZWN0ZWRT
Y3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1l
LCBkaXNhYmxlZCkKK3sKKyAgICB2YXIgc3R5bGUgPSBJbmplY3RlZFNjcmlwdC5fc3R5bGVzW3N0
eWxlSWRdOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChkaXNhYmxlZCkgeworICAgICAgICBpZiAoIXN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVl
cyB8fCAhc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcykgeworICAgICAgICAgICAg
dmFyIGluc3BlY3RlZFdpbmRvdyA9IEluamVjdGVkU2NyaXB0Ll93aW5kb3coKTsKKyAgICAgICAg
ICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmpl
Y3Q7CisgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBuZXcgaW5z
cGVjdGVkV2luZG93Lk9iamVjdDsKKyAgICAgICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0
eVByaW9yaXRpZXMgPSBuZXcgaW5zcGVjdGVkV2luZG93Lk9iamVjdDsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdID0gc3R5
bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpOworICAgICAgICBzdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV0gPSBzdHlsZS5nZXRQcm9wZXJ0eVBy
aW9yaXR5KHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAgaWYgKHN0eWxlLmdldFByb3BlcnR5U2hv
cnRoYW5kKHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIHZhciBsb25naGFuZFByb3BlcnRp
ZXMgPSBnZXRMb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW2xvbmdoYW5kUHJv
cGVydGllc1tpXV0gPSB0cnVlOworICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5
KGxvbmdoYW5kUHJvcGVydGllc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0g
dHJ1ZTsKKyAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzICYmIHN0
eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pIHsKKyAgICAgICAgdmFyIHZh
bHVlID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07CisgICAg
ICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXNbcHJv
cGVydHlOYW1lXTsKKworICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwcmlvcml0eSk7CisgICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGll
c1twcm9wZXJ0eU5hbWVdOworICAgICAgICBkZWxldGUgc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5
VmFsdWVzW3Byb3BlcnR5TmFtZV07CisgICAgICAgIGRlbGV0ZSBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07CisgICAgfQorICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUoc3R5bGUsIHRydWUpOworfQorCitJbmplY3RlZFNjcmlw
dC5hcHBseVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQsIHNlbGVj
dGVkTm9kZSkKK3sKKyAgICB2YXIgcnVsZSA9IEluamVjdGVkU2NyaXB0Ll9zdHlsZVJ1bGVzW3J1
bGVJZF07CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0cnkg
eworICAgICAgICB2YXIgc3R5bGVzaGVldCA9IHJ1bGUucGFyZW50U3R5bGVTaGVldDsKKyAgICAg
ICAgc3R5bGVzaGVldC5hZGRSdWxlKG5ld0NvbnRlbnQpOworICAgICAgICB2YXIgbmV3UnVsZSA9
IHN0eWxlc2hlZXQuY3NzUnVsZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXTsKKyAg
ICAgICAgbmV3UnVsZS5zdHlsZS5jc3NUZXh0ID0gcnVsZS5zdHlsZS5jc3NUZXh0OworCisgICAg
ICAgIHZhciBwYXJlbnRSdWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXM7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcGFyZW50UnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChwYXJlbnRSdWxlc1tpXSA9PT0gcnVsZSkgeworICAgICAgICAgICAgICAgIHJ1bGUucGFyZW50
U3R5bGVTaGVldC5yZW1vdmVSdWxlKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIG5vZGVzID0gc2VsZWN0ZWROb2RlLm93
bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChuZXdDb250ZW50KTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKG5vZGVz
W2ldID09PSBzZWxlY3RlZE5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW0luamVjdGVk
U2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5ld1J1bGUpLCB0cnVlXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gW0luamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5l
d1J1bGUpLCBmYWxzZV07CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIC8vIFJlcG9ydCBpbnZh
bGlkIHN5bnRheC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworSW5qZWN0ZWRT
Y3JpcHQuYWRkU3R5bGVTZWxlY3RvciA9IGZ1bmN0aW9uKG5ld0NvbnRlbnQpCit7CisgICAgdmFy
IHN0eWxlc2hlZXQgPSBJbmplY3RlZFNjcmlwdC5zdHlsZXNoZWV0OworICAgIGlmICghc3R5bGVz
aGVldCkgeworICAgICAgICB2YXIgaW5zcGVjdGVkRG9jdW1lbnQgPSBJbmplY3RlZFNjcmlwdC5f
d2luZG93KCkuZG9jdW1lbnQ7CisgICAgICAgIHZhciBoZWFkID0gaW5zcGVjdGVkRG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKKyAgICAgICAgdmFyIHN0eWxlRWxlbWVu
dCA9IGluc3BlY3RlZERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CisgICAgICAgIHN0
eWxlRWxlbWVudC50eXBlID0gInRleHQvY3NzIjsKKyAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChz
dHlsZUVsZW1lbnQpOworICAgICAgICBzdHlsZXNoZWV0ID0gaW5zcGVjdGVkRG9jdW1lbnQuc3R5
bGVTaGVldHNbaW5zcGVjdGVkRG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoIC0gMV07CisgICAg
ICAgIEluamVjdGVkU2NyaXB0LnN0eWxlc2hlZXQgPSBzdHlsZXNoZWV0OworICAgIH0KKworICAg
IHRyeSB7CisgICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50KTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuX3Nl
cmlhbGl6ZVJ1bGUoc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0
aCAtIDFdKTsKK30KKworSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVQcm9wZXJ0eSA9IGZ1bmN0aW9u
KHN0eWxlSWQsIG5hbWUsIHZhbHVlKSB7CisgICAgdmFyIHN0eWxlID0gSW5qZWN0ZWRTY3JpcHQu
X3N0eWxlc1tzdHlsZUlkXTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgIiIpOworICAgIHJldHVybiB0
cnVlOworfQorCitJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplUnVsZSA9IGZ1bmN0aW9uKHJ1bGUp
Cit7CisgICAgdmFyIHBhcmVudFN0eWxlU2hlZXQgPSBydWxlLnBhcmVudFN0eWxlU2hlZXQ7CisK
KyAgICB2YXIgcnVsZVZhbHVlID0ge307CisgICAgcnVsZVZhbHVlLnNlbGVjdG9yVGV4dCA9IHJ1
bGUuc2VsZWN0b3JUZXh0OworICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CisgICAgICAgIHJ1
bGVWYWx1ZS5wYXJlbnRTdHlsZVNoZWV0ID0ge307CisgICAgICAgIHJ1bGVWYWx1ZS5wYXJlbnRT
dHlsZVNoZWV0LmhyZWYgPSBwYXJlbnRTdHlsZVNoZWV0LmhyZWY7CisgICAgfQorICAgIHJ1bGVW
YWx1ZS5pc1VzZXJBZ2VudCA9IHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQu
b3duZXJOb2RlICYmICFwYXJlbnRTdHlsZVNoZWV0LmhyZWY7CisgICAgcnVsZVZhbHVlLmlzVXNl
ciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUgJiYgcGFy
ZW50U3R5bGVTaGVldC5vd25lck5vZGUubm9kZU5hbWUgPT0gIiNkb2N1bWVudCI7CisKKyAgICAv
LyBCaW5kIGVkaXRhYmxlIHNjcmlwdHMgb25seS4KKyAgICB2YXIgZG9CaW5kID0gIXJ1bGVWYWx1
ZS5pc1VzZXJBZ2VudCAmJiAhcnVsZVZhbHVlLmlzVXNlcjsKKyAgICBydWxlVmFsdWUuc3R5bGUg
PSBJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUocnVsZS5zdHlsZSwgZG9CaW5kKTsKKwor
ICAgIGlmIChkb0JpbmQpIHsKKyAgICAgICAgaWYgKCFydWxlLl9pZCkgeworICAgICAgICAgICAg
cnVsZS5faWQgPSBJbmplY3RlZFNjcmlwdC5fbGFzdFN0eWxlUnVsZUlkKys7CisgICAgICAgICAg
ICBJbmplY3RlZFNjcmlwdC5fc3R5bGVSdWxlc1tydWxlLl9pZF0gPSBydWxlOworICAgICAgICB9
CisgICAgICAgIHJ1bGVWYWx1ZS5pZCA9IHJ1bGUuX2lkOworICAgIH0KKyAgICByZXR1cm4gcnVs
ZVZhbHVlOworfQorCitJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUgPSBmdW5jdGlvbihz
dHlsZSwgZG9CaW5kKQoreworICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICByZXN1bHQud2lkdGgg
PSBzdHlsZS53aWR0aDsKKyAgICByZXN1bHQuaGVpZ2h0ID0gc3R5bGUuaGVpZ2h0OworICAgIHJl
c3VsdC5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzOwor
ICAgIHJlc3VsdC5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBzdHlsZS5fX2Rpc2FibGVkUHJv
cGVydHlWYWx1ZXM7CisgICAgcmVzdWx0Ll9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMgPSBz
dHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzOworICAgIHJlc3VsdC5wcm9wZXJ0aWVz
ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZS5sZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgcHJvcGVydHkgPSB7fTsKKyAgICAgICAgdmFyIG5hbWUgPSBzdHlsZVtpXTsKKyAg
ICAgICAgcHJvcGVydHkubmFtZSA9IG5hbWU7CisgICAgICAgIHByb3BlcnR5LnByaW9yaXR5ID0g
c3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKKyAgICAgICAgcHJvcGVydHkuaW1wbGlj
aXQgPSBzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSk7CisgICAgICAgIHByb3BlcnR5LnNo
b3J0aGFuZCA9IHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICBwcm9w
ZXJ0eS52YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7CisgICAgICAgIHJlc3Vs
dC5wcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworICAgIH0KKworICAgIGlmIChkb0JpbmQpIHsK
KyAgICAgICAgaWYgKCFzdHlsZS5faWQpIHsKKyAgICAgICAgICAgIHN0eWxlLl9pZCA9IEluamVj
dGVkU2NyaXB0Ll9sYXN0U3R5bGVJZCsrOworICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX3N0
eWxlc1tzdHlsZS5faWRdID0gc3R5bGU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmlkID0g
c3R5bGUuX2lkOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbmplY3RlZFNjcmlw
dC5fd2luZG93ID0gZnVuY3Rpb24oKQoreworICAgIHJldHVybiBJbnNwZWN0b3JDb250cm9sbGVy
Lmluc3BlY3RlZFdpbmRvdygpOworfQorCitJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkID0gZnVu
Y3Rpb24obm9kZUlkKQoreworICAgIHJldHVybiBub2RlSWQ7Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcwppbmRleCBhMjJhMDAwLi44
NzEyZGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1Np
ZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lk
ZWJhclBhbmUuanMKQEAgLTI5LDYgKzI5LDcgQEAKIFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJh
clBhbmUgPSBmdW5jdGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwo
dGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJNZXRyaWNzIikpOworICAgIHRoaXMuX2lubGlu
ZVN0eWxlSWQgPSBudWxsOwogfQogCiBXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQYW5lLnBy
b3RvdHlwZSA9IHsKQEAgLTQ2LDEyICs0NywyOCBAQCBXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGVi
YXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLm93bmVyRG9j
dW1lbnQuZGVmYXVsdFZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHN0
eWxlOwotICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpCi0g
ICAgICAgICAgICBzdHlsZSA9IG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21w
dXRlZFN0eWxlKG5vZGUpOwotICAgICAgICBpZiAoIXN0eWxlKQorICAgICAgICBpZiAobm9kZS5u
b2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpCiAgICAgICAgICAgICByZXR1cm47CiAKKyAg
ICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihz
dHlsZVBheWxvYWQpIHsKKyAgICAgICAgICAgIGlmICghc3R5bGVQYXlsb2FkKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUoc3R5bGVQYXlsb2FkKTsKKyAgICAgICAgICAgIHNl
bGYuX3VwZGF0ZShub2RlLCBib2R5LCBzdHlsZSk7CisgICAgICAgIH07CisgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBjYWxsYmFjayk7CisKKyAgICAg
ICAgdmFyIGlubGluZVN0eWxlQ2FsbGJhY2sgPSBmdW5jdGlvbihzdHlsZVBheWxvYWQpIHsKKyAg
ICAgICAgICAgIGlmICghc3R5bGVQYXlsb2FkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHNlbGYuX2lubGluZVN0eWxlSWQgPSBzdHlsZVBheWxvYWQuaWQ7CisgICAgICAg
IH07CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0SW5saW5lU3R5bGUobm9kZSwgaW5s
aW5lU3R5bGVDYWxsYmFjayk7CisgICAgfSwKKworICAgIF91cGRhdGU6IGZ1bmN0aW9uKG5vZGUs
IGJvZHksIHN0eWxlKQorICAgIHsKICAgICAgICAgdmFyIG1ldHJpY3NFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgIG1ldHJpY3NFbGVtZW50LmNsYXNzTmFt
ZSA9ICJtZXRyaWNzIjsKIApAQCAtMTg0LDExICsyMDEsMTQgQEAgV2ViSW5zcGVjdG9yLk1ldHJp
Y3NTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICgvXlxkKyQvLnRlc3QodXNl
cklucHV0KSkKICAgICAgICAgICAgIHVzZXJJbnB1dCArPSAicHgiOwogCi0gICAgICAgIHRoaXMu
bm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShjb250ZXh0LnN0eWxlUHJvcGVydHksIHVzZXJJbnB1dCwg
IiIpOwotCi0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJtZXRyaWNzIGVk
aXRlZCIpOwotCi0gICAgICAgIHRoaXMudXBkYXRlKCk7CisgICAgICAgIHZhciBzZWxmID0gdGhp
czsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oc3VjY2VzcykgeworICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNl
bGYuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJtZXRyaWNzIGVkaXRlZCIpOworICAgICAgICAg
ICAgc2VsZi51cGRhdGUoKTsKKyAgICAgICAgfTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5zZXRTdHlsZVByb3BlcnR5KHRoaXMuX2lubGluZVN0eWxlSWQsIGNvbnRleHQuc3R5bGVQcm9w
ZXJ0eSwgdXNlcklucHV0LCBjYWxsYmFjayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKaW5kZXggNTRkN2I3Mi4uMzIz
ZDkxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFy
UGFuZS5qcwpAQCAtNjMsNiArNjMsMjMgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwog
CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rp
b24oc3R5bGVzKSB7CisgICAgICAgICAgICBpZiAoIXN0eWxlcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB2YXIgbm9kZVdyYXBwZXIgPSBXZWJJbnNwZWN0b3Iud3JhcE5v
ZGVXaXRoU3R5bGVzKG5vZGUsIHN0eWxlcyk7CisgICAgICAgICAgICBzZWxmLl91cGRhdGUocmVm
cmVzaCwgYm9keSwgbm9kZVdyYXBwZXIsIGVkaXRlZFNlY3Rpb24sIGZvcmNlVXBkYXRlKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRTdHlsZXMobm9kZSwgIVBy
ZWZlcmVuY2VzLnNob3dVc2VyQWdlbnRTdHlsZXMsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAg
X3VwZGF0ZTogZnVuY3Rpb24ocmVmcmVzaCwgYm9keSwgbm9kZSwgZWRpdGVkU2VjdGlvbiwgZm9y
Y2VVcGRhdGUpCisgICAgeworICAgICAgICBpZiAoIXJlZnJlc2gpIHsKKyAgICAgICAgICAgIGJv
ZHkucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHZhciBzdHlsZVJ1bGVzID0gW107CiAKICAgICAgICAgaWYgKHJl
ZnJlc2gpIHsKQEAgLTMwNSw4ICszMjIsOSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVz
U2VjdGlvbiA9IGZ1bmN0aW9uKHN0eWxlUnVsZSwgc3VidGl0bGUsIGNvbXB1dGVkU3R5bAogICAg
IHRoaXMuZWRpdGFibGUgPSAoZWRpdGFibGUgJiYgIWNvbXB1dGVkU3R5bGUpOwogCiAgICAgLy8g
UHJldmVudCBlZGl0aW5nIHRoZSB1c2VyIGFnZW50IGFuZCB1c2VyIHJ1bGVzLgotICAgIHZhciBp
c1VzZXJBZ2VudCA9IHRoaXMuc3R5bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQgJiYgIXRoaXMuc3R5
bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQub3duZXJOb2RlICYmICF0aGlzLnN0eWxlUnVsZS5wYXJl
bnRTdHlsZVNoZWV0LmhyZWY7Ci0gICAgdmFyIGlzVXNlciA9IHRoaXMuc3R5bGVSdWxlLnBhcmVu
dFN0eWxlU2hlZXQgJiYgdGhpcy5zdHlsZVJ1bGUucGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUg
JiYgdGhpcy5zdHlsZVJ1bGUucGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUubm9kZU5hbWUgPT0g
JyNkb2N1bWVudCc7CisgICAgdmFyIGlzVXNlckFnZW50ID0gdGhpcy5zdHlsZVJ1bGUuaXNVc2Vy
QWdlbnQ7CisgICAgdmFyIGlzVXNlciA9IHRoaXMuc3R5bGVSdWxlLmlzVXNlcjsKKwogICAgIGlm
IChpc1VzZXJBZ2VudCB8fCBpc1VzZXIpCiAgICAgICAgIHRoaXMuZWRpdGFibGUgPSBmYWxzZTsK
IApAQCAtNDg2LDcgKzUwNCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9u
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBpbmhlcml0ZWQgPSB0aGlzLmlzUHJvcGVy
dHlJbmhlcml0ZWQobmFtZSk7CiAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRlZCA9IHRoaXMuaXNQ
cm9wZXJ0eU92ZXJsb2FkZWQobmFtZSwgaXNTaG9ydGhhbmQpOwogCi0gICAgICAgICAgICB2YXIg
aXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHN0eWxlLCBu
YW1lLCBpc1Nob3J0aGFuZCwgaW5oZXJpdGVkLCBvdmVybG9hZGVkLCBkaXNhYmxlZCk7CisgICAg
ICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50KHRoaXMuc3R5bGVSdWxlLCBzdHlsZSwgbmFtZSwgaXNTaG9ydGhhbmQsIGluaGVyaXRlZCwg
b3ZlcmxvYWRlZCwgZGlzYWJsZWQpOwogICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91
dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgIH0KICAgICB9LApAQCAtNTA0LDcgKzUy
Miw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsK
IAogICAgIGFkZE5ld0JsYW5rUHJvcGVydHk6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZh
ciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhpcy5z
dHlsZVJ1bGUuc3R5bGUsICIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
IHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhp
cy5zdHlsZVJ1bGUsIHRoaXMuc3R5bGVSdWxlLnN0eWxlLCAiIiwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UpOwogICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGls
ZChpdGVtKTsKICAgICAgICAgaXRlbS5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQgPSAiIjsK
ICAgICAgICAgaXRlbS5fbmV3UHJvcGVydHkgPSB0cnVlOwpAQCAtNTY0LDQwICs1ODIsMzYgQEAg
V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAg
ICBpZiAobmV3Q29udGVudCA9PT0gb2xkQ29udGVudCkKICAgICAgICAgICAgIHJldHVybiBtb3Zl
VG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlzKTsKIAotICAgICAgICB0cnkgewotICAgICAgICAgICAg
dmFyIHN0eWxlc2hlZXQgPSB0aGlzLnJ1bGUucGFyZW50U3R5bGVTaGVldDsKLSAgICAgICAgICAg
IHN0eWxlc2hlZXQuYWRkUnVsZShuZXdDb250ZW50KTsKLSAgICAgICAgICAgIHZhciBuZXdSdWxl
ID0gc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0aCAtIDFdOwot
ICAgICAgICAgICAgbmV3UnVsZS5zdHlsZS5jc3NUZXh0ID0gdGhpcy5zdHlsZVJ1bGUuc3R5bGUu
Y3NzVGV4dDsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgLy8gSW52YWxpZCBT
eW50YXggZm9yIGEgU2VsZWN0b3IKLSAgICAgICAgICAgIHRoaXMuZWRpdGluZ1NlbGVjdG9yQ2Fu
Y2VsbGVkKGVsZW1lbnQsIGNvbnRleHQpOwotICAgICAgICAgICAgcmV0dXJuIG1vdmVUb05leHRJ
Zk5lZWRlZC5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9kb2Vz
U2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUobmV3Q29udGVudCkpIHsKLSAgICAgICAgICAgIHRo
aXMubm9BZmZlY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoIm5vLWFmZmVjdCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsZXRlIHRo
aXMubm9BZmZlY3Q7Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygi
bm8tYWZmZWN0Iik7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAg
ICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0b3IK
KyAgICAgICAgICAgICAgICBzZWxmLmVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZChlbGVtZW50LCBj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbChzZWxmKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgdmFyIHBh
cmVudFJ1bGVzID0gdGhpcy5ydWxlLnBhcmVudFN0eWxlU2hlZXQuY3NzUnVsZXM7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50UnVsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChwYXJlbnRSdWxlc1tpXSA9PT0gdGhpcy5ydWxlKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5ydWxlLnBhcmVudFN0eWxlU2hlZXQucmVtb3ZlUnVsZShpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHZhciBuZXdSdWxlUGF5bG9hZCA9IHJlc3VsdFswXTsKKyAg
ICAgICAgICAgIHZhciBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlID0gcmVzdWx0WzFdOworICAgICAg
ICAgICAgaWYgKCFkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKSB7CisgICAgICAgICAgICAgICAgc2Vs
Zi5ub0FmZmVjdCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoIm5vLWFmZmVjdCIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgc2VsZi5ub0FmZmVjdDsKKyAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucmVt
b3ZlU3R5bGVDbGFzcygibm8tYWZmZWN0Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAot
ICAgICAgICB0aGlzLnJ1bGUgPSBuZXdSdWxlOwotICAgICAgICB0aGlzLnN0eWxlUnVsZSA9IHsg
c2VjdGlvbjogdGhpcywgc3R5bGU6IG5ld1J1bGUuc3R5bGUsIHNlbGVjdG9yVGV4dDogbmV3UnVs
ZS5zZWxlY3RvclRleHQsIHBhcmVudFN0eWxlU2hlZXQ6IG5ld1J1bGUucGFyZW50U3R5bGVTaGVl
dCwgcnVsZTogbmV3UnVsZSB9OwotICAgICAgICB2YXIgb2xkSWRlbnRpZmllciA9IHRoaXMuaWRl
bnRpZmllcjsKLSAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gbmV3UnVsZS5zZWxlY3RvclRleHQg
KyAiOiIgKyB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsgICAgICAgIAotICAgICAg
ICB0aGlzLnBhbmUudXBkYXRlKG51bGwsIHRydWUpOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLmVsZW1lbnRzLnJlbmFtZVNlbGVjdG9yKG9sZElkZW50aWZpZXIsIHRoaXMuaWRlbnRpZmll
ciwgb2xkQ29udGVudCwgbmV3Q29udGVudCk7Ci0gICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5j
YWxsKHRoaXMpOworICAgICAgICAgICAgdmFyIG5ld1J1bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvbi5wYXJzZVJ1bGUobmV3UnVsZVBheWxvYWQpOworICAgICAgICAgICAgc2Vs
Zi5ydWxlID0gbmV3UnVsZTsKKyAgICAgICAgICAgIHNlbGYuc3R5bGVSdWxlID0geyBzZWN0aW9u
OiBzZWxmLCBzdHlsZTogbmV3UnVsZS5zdHlsZSwgc2VsZWN0b3JUZXh0OiBuZXdSdWxlLnNlbGVj
dG9yVGV4dCwgcGFyZW50U3R5bGVTaGVldDogbmV3UnVsZS5wYXJlbnRTdHlsZVNoZWV0LCBydWxl
OiBuZXdSdWxlIH07CisgICAgICAgICAgICB2YXIgb2xkSWRlbnRpZmllciA9IHRoaXMuaWRlbnRp
ZmllcjsKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IG5ld1J1bGUuc2VsZWN0b3JUZXh0
ICsgIjoiICsgc2VsZi5zdWJ0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgICAgICBz
ZWxmLnBhbmUudXBkYXRlKG51bGwsIHRydWUpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5lbGVtZW50cy5yZW5hbWVTZWxlY3RvcihvbGRJZGVudGlmaWVyLCB0aGlzLmlkZW50aWZp
ZXIsIG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpOworICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVl
ZGVkLmNhbGwoc2VsZik7CisgICAgICAgIH07CisKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5hcHBseVN0eWxlUnVsZVRleHQodGhpcy5ydWxlLl9pZCwgbmV3Q29udGVudCwgdGhpcy5wYW5l
Lm5vZGUsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVk
OiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQpAQCAtNjU4LDM5ICs2NzIsMjcgQEAgV2ViSW5z
cGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAKICAgICBl
ZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdDb250ZW50LCBvbGRDb250ZW50
LCBjb250ZXh0KQogICAgIHsKLSAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzLnN0eWxlc2hlZXQ7Ci0gICAgICAgIGlmICghc3R5bGVzaGVldCkgewot
ICAgICAgICAgICAgdmFyIGluc3BlY3RlZERvY3VtZW50ID0gSW5zcGVjdG9yQ29udHJvbGxlci5p
bnNwZWN0ZWRXaW5kb3coKS5kb2N1bWVudDsKLSAgICAgICAgICAgIHZhciBoZWFkID0gaW5zcGVj
dGVkRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKLSAgICAgICAgICAg
IHZhciBzdHlsZUVsZW1lbnQgPSBpbnNwZWN0ZWREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHls
ZSIpOwotICAgICAgICAgICAgc3R5bGVFbGVtZW50LnR5cGUgPSAidGV4dC9jc3MiOwotICAgICAg
ICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwotICAgICAgICAgICAgc3R5bGVz
aGVldCA9IGluc3BlY3RlZERvY3VtZW50LnN0eWxlU2hlZXRzW2luc3BlY3RlZERvY3VtZW50LnN0
eWxlU2hlZXRzLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5l
bGVtZW50cy5zdHlsZXNoZWV0ID0gc3R5bGVzaGVldDsKLSAgICAgICAgfQotCi0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICBzdHlsZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7Ci0gICAgICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVj
dG9yCi0gICAgICAgICAgICB0aGlzLmVkaXRpbmdDYW5jZWxsZWQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBydWxlID0gc3R5bGVzaGVldC5jc3NSdWxl
c1tzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0aCAtIDFdOwotICAgICAgICB2YXIgc3R5bGVSdWxl
ID0geyBzZWN0aW9uOiB0aGlzLCBzdHlsZTogcnVsZS5zdHlsZSwgc2VsZWN0b3JUZXh0OiBydWxl
LnNlbGVjdG9yVGV4dCwgcGFyZW50U3R5bGVTaGVldDogcnVsZS5wYXJlbnRTdHlsZVNoZWV0LCBy
dWxlOiBydWxlIH07Ci0gICAgICAgIHRoaXMubWFrZU5vcm1hbChzdHlsZVJ1bGUpOworICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKHN0eWxl
UnVsZSkgeworICAgICAgICAgICAgaWYgKCFzdHlsZVJ1bGUpIHsKKyAgICAgICAgICAgICAgICAv
LyBJbnZhbGlkIFN5bnRheCBmb3IgYSBTZWxlY3RvcgorICAgICAgICAgICAgICAgIHNlbGYuZWRp
dGluZ0NhbmNlbGxlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHNlbGYubWFrZU5vcm1hbChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbi5wYXJzZVJ1bGUoc3R5bGVSdWxlKSk7CiAKLSAgICAgICAgaWYgKCF0aGlzLl9kb2VzU2Vs
ZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUobmV3Q29udGVudCkpIHsKLSAgICAgICAgICAgIHRoaXMu
bm9BZmZlY3QgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
Im5vLWFmZmVjdCIpOwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNlbGYuX2RvZXNTZWxl
Y3RvckFmZmVjdFNlbGVjdGVkTm9kZShuZXdDb250ZW50KSkgeworICAgICAgICAgICAgICAgIHNl
bGYubm9BZmZlY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIHNlbGYuZWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJuby1hZmZlY3QiKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnN1YnRp
dGxlRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygidmlhIGluc3Bl
Y3RvciIpOwotICAgICAgICB0aGlzLmV4cGFuZCgpOworICAgICAgICAgICAgc2VsZi5zdWJ0aXRs
ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoInZpYSBpbnNwZWN0
b3IiKTsKKyAgICAgICAgICAgIHNlbGYuZXhwYW5kKCk7CiAKLSAgICAgICAgdGhpcy5wYW5lLmFk
ZEJsYW5rU2VjdGlvbigpOwotICAgICAgICB0aGlzLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFy
dEVkaXRpbmcoKTsKKyAgICAgICAgICAgIHNlbGYucGFuZS5hZGRCbGFua1NlY3Rpb24oKTsKKyAg
ICAgICAgICAgIHNlbGYuYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygpOworICAg
ICAgICB9OworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0b3IobmV3
Q29udGVudCwgY2FsbGJhY2spOwogICAgIH0sCiAKICAgICBtYWtlTm9ybWFsOiBmdW5jdGlvbihz
dHlsZVJ1bGUpCkBAIC03MTcsOCArNzE5LDkgQEAgV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9w
ZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJv
cGVydGllc1NlY3Rpb24ucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0eWxlLCBuYW1lLCBzaG9ydGhhbmQsIGluaGVyaXRlZCwg
b3ZlcmxvYWRlZCwgZGlzYWJsZWQpCitXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50ID0gZnVuY3Rpb24oc3R5bGVSdWxlLCBzdHlsZSwgbmFtZSwgc2hvcnRoYW5kLCBpbmhlcml0
ZWQsIG92ZXJsb2FkZWQsIGRpc2FibGVkKQogeworICAgIHRoaXMuX3N0eWxlUnVsZSA9IHN0eWxl
UnVsZTsKICAgICB0aGlzLnN0eWxlID0gc3R5bGU7CiAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAg
ICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFuZDsKQEAgLTkwNSw0MiArOTA4LDI0IEBAIFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIHsKICAg
ICAgICAgdmFyIGRpc2FibGVkID0gIWV2ZW50LnRhcmdldC5jaGVja2VkOwogCi0gICAgICAgIGlm
IChkaXNhYmxlZCkgewotICAgICAgICAgICAgaWYgKCF0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9w
ZXJ0eVZhbHVlcyB8fCAhdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xs
ZXIuaW5zcGVjdGVkV2luZG93KCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydGllcyA9IG5ldyBpbnNwZWN0ZWRXaW5kb3cuT2JqZWN0OwotICAgICAgICAgICAg
ICAgIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0gbmV3IGluc3BlY3RlZFdp
bmRvdy5PYmplY3Q7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVy
dHlQcmlvcml0aWVzID0gbmV3IGluc3BlY3RlZFdpbmRvdy5PYmplY3Q7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3RoaXMu
bmFtZV0gPSB0aGlzLnZhbHVlOwotICAgICAgICAgICAgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJv
cGVydHlQcmlvcml0aWVzW3RoaXMubmFtZV0gPSB0aGlzLnByaW9yaXR5OworICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKG5ld1BheWxvYWQp
IHsKKyAgICAgICAgICAgIGlmICghbmV3UGF5bG9hZCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgIGlmICh0aGlzLnNob3J0aGFuZCkgewotICAgICAgICAgICAgICAgIHZh
ciBsb25naGFuZFByb3BlcnRpZXMgPSBnZXRMb25naGFuZFByb3BlcnRpZXModGhpcy5zdHlsZSwg
dGhpcy5uYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5k
UHJvcGVydGllcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxl
Ll9fZGlzYWJsZWRQcm9wZXJ0aWVzW2xvbmdoYW5kUHJvcGVydGllc1tpXV0gPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGxvbmdoYW5kUHJvcGVy
dGllc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW3RoaXMubmFtZV0gPSB0
cnVlOwotICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodGhpcy5uYW1l
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuc3R5
bGUuc2V0UHJvcGVydHkodGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLnByaW9yaXR5KTsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW3RoaXMubmFt
ZV07Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1
ZXNbdGhpcy5uYW1lXTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlLl9fZGlzYWJsZWRQ
cm9wZXJ0eVByaW9yaXRpZXNbdGhpcy5uYW1lXTsKLSAgICAgICAgfQorICAgICAgICAgICAgc2Vs
Zi5zdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3
UGF5bG9hZCk7CisgICAgICAgICAgICBzZWxmLl9zdHlsZVJ1bGUuc3R5bGUgPSBzZWxmLnN0eWxl
OwogCi0gICAgICAgIC8vIFNldCB0aGUgZGlzYWJsZWQgcHJvcGVydHkgaGVyZSwgc2luY2UgdGhl
IGNvZGUgYWJvdmUgcmVwbGllcyBvbiBpdCBub3QgY2hhbmdpbmcKLSAgICAgICAgLy8gdW50aWwg
YWZ0ZXIgdGhlIHZhbHVlIGFuZCBwcmlvcml0eSBhcmUgcmV0cmlldmVkLgotICAgICAgICB0aGlz
LmRpc2FibGVkID0gZGlzYWJsZWQ7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGRpc2FibGVkIHBy
b3BlcnR5IGhlcmUsIHNpbmNlIHRoZSBjb2RlIGFib3ZlIHJlcGxpZXMgb24gaXQgbm90IGNoYW5n
aW5nCisgICAgICAgICAgICAvLyB1bnRpbCBhZnRlciB0aGUgdmFsdWUgYW5kIHByaW9yaXR5IGFy
ZSByZXRyaWV2ZWQuCisgICAgICAgICAgICBzZWxmLmRpc2FibGVkID0gZGlzYWJsZWQ7CiAKLSAg
ICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNl
Y3Rpb24ucGFuZSkKLSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5lLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgcHJvcGVydHkgdG9nZ2xlZCIpOworICAgICAg
ICAgICAgaWYgKHNlbGYudHJlZU91dGxpbmUuc2VjdGlvbiAmJiBzZWxmLnRyZWVPdXRsaW5lLnNl
Y3Rpb24ucGFuZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFu
ZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIHByb3BlcnR5IHRvZ2dsZWQiKTsKIAot
ICAgICAgICB0aGlzLnVwZGF0ZUFsbCh0cnVlKTsKKyAgICAgICAgICAgIHNlbGYudXBkYXRlQWxs
KHRydWUpOworICAgICAgICB9OworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZVN0
eWxlRW5hYmxlZCh0aGlzLnN0eWxlLl9pZCwgdGhpcy5uYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2sp
OwogICAgIH0sCiAKICAgICB1cGRhdGVTdGF0ZTogZnVuY3Rpb24oKQpAQCAtOTg0LDcgKzk2OSw3
IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgICAgIHZhciBvdmVybG9hZGVkID0gdGhpcy50cmVlT3V0bGluZS5zZWN0aW9u
LmlzUHJvcGVydHlPdmVybG9hZGVkKG5hbWUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHRo
aXMuc3R5bGUsIG5hbWUsIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJsb2FkZWQpOworICAgICAgICAg
ICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0
aGlzLl9zdHlsZVJ1bGUsIHRoaXMuc3R5bGUsIG5hbWUsIGZhbHNlLCBpbmhlcml0ZWQsIG92ZXJs
b2FkZWQpOwogICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgfQog
ICAgIH0sCkBAIC0xMTAzLDcgKzEwODgsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IFJlc3RvcmUgdGhlIG9yaWdpbmFsIENTUyB0ZXh0IGJlZm9yZSBhcHBseWluZyB1c2VyIGNoYW5n
ZXMuIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQKICAgICAgICAgICAgIC8vIG5ldyBwcm9wZXJ0
aWVzIGZyb20gc3RpY2tpbmcgYXJvdW5kIGlmIHRoZSB1c2VyIGFkZHMgb25lLCB0aGVuIHJlbW92
ZXMgaXQuCi0gICAgICAgICAgICB0aGlzLnN0eWxlLmNzc1RleHQgPSB0aGlzLm9yaWdpbmFsQ1NT
VGV4dDsKKyAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5bGVUZXh0KHRoaXMu
c3R5bGUsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMu
YXBwbHlTdHlsZVRleHQodGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQpOwpAQCAtMTEy
Myw3ICsxMTA4LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgIHRo
aXMudHJlZU91dGxpbmUucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICAgICAgIGVsc2UgaWYgKHRoaXMu
b3JpZ2luYWxDU1NUZXh0KSB7Ci0gICAgICAgICAgICB0aGlzLnN0eWxlLmNzc1RleHQgPSB0aGlz
Lm9yaWdpbmFsQ1NTVGV4dDsKKyAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5
bGVUZXh0KHRoaXMuc3R5bGUsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKIAogICAgICAgICAgICAg
aWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24u
cGFuZSkKICAgICAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwpAQCAtMTE5NywyNSArMTE4Miw2
IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbjsKICAgICAgICAg
dmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzOwogICAgICAg
ICB2YXIgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0LnRyaW1XaGl0ZXNwYWNlKCkubGVuZ3Ro
OwotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBlbGVtZW50IHRvIHBhcnNlIHRoZSB1c2VyIGlu
cHV0IENTUy4KLSAgICAgICAgdmFyIHBhcnNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKLSAgICAgICAgcGFyc2VFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLCBz
dHlsZVRleHQpOwotCi0gICAgICAgIHZhciB0ZW1wU3R5bGUgPSBwYXJzZUVsZW1lbnQuc3R5bGU7
Ci0gICAgICAgIGlmICh0ZW1wU3R5bGUubGVuZ3RoIHx8ICFzdHlsZVRleHRMZW5ndGgpIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBpbnB1dCB3YXMgcGFyc2FibGUgb3IgdGhlIHVzZXIgZGVsZXRlZCBl
dmVyeXRoaW5nLCBzbyByZW1vdmUgdGhlCi0gICAgICAgICAgICAvLyBvcmlnaW5hbCBwcm9wZXJ0
eSBmcm9tIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBJZiB0aGlzIHJlcHJlc2VudHMKLSAg
ICAgICAgICAgIC8vIGEgc2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRp
ZXMuCi0gICAgICAgICAgICBpZiAodGhpcy5zaG9ydGhhbmQpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHRoaXMuc3R5bGUs
IHRoaXMubmFtZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFu
ZFByb3BlcnRpZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUu
cmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodGhpcy5uYW1lKTsK
LSAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwucmVtb3ZlU3R5bGVDaGFuZ2Uoc2VjdGlvbi5pZGVu
dGlmaWVyLCB0aGlzLnN0eWxlLCB0aGlzLm5hbWUpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYg
KCFzdHlsZVRleHRMZW5ndGgpIHsKICAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciBkZWxldGVkIGV2ZXJ5dGhpbmcsIHNvIHJlbW92
ZSB0aGUgdHJlZSBlbGVtZW50IGFuZCB1cGRhdGUuCkBAIC0xMjI5LDUyICsxMTk1LDM4IEBAIFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0ZW1wU3R5bGUubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAvLyBUaGUgdXNlciB0eXBlZCBzb21ldGhpbmcsIGJ1dCBpdCBkaWRu
J3QgcGFyc2UuIEp1c3QgYWJvcnQgYW5kIHJlc3RvcmUKLSAgICAgICAgICAgIC8vIHRoZSBvcmln
aW5hbCB0aXRsZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEgbmV3IGF0dHJpYnV0
ZSBhbmQKLSAgICAgICAgICAgIC8vIHdlIGNvdWxkbid0IHBhcnNlLCB0aGVuIGp1c3QgcmVtb3Zl
IGl0LgotICAgICAgICAgICAgaWYgKHRoaXMuX25ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKLSAgICAg
ICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0
IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKLSAgICAgICAgLy8gYWRkIHRoZW0gdG8g
dGhlIHJlYWwgc3R5bGUgZGVjbGFyYXRpb24uIFdlIHRha2UgY2FyZSB0byBtb3ZlIHNob3J0aGFu
ZHMuCi0gICAgICAgIHZhciBmb3VuZFNob3J0aGFuZHMgPSB7fTsKLSAgICAgICAgdmFyIHVuaXF1
ZVByb3BlcnRpZXMgPSBnZXRVbmlxdWVTdHlsZVByb3BlcnRpZXModGVtcFN0eWxlKTsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlxdWVQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgbmFtZSA9IHVuaXF1ZVByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICB2
YXIgc2hvcnRoYW5kID0gdGVtcFN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwotCi0g
ICAgICAgICAgICBpZiAoc2hvcnRoYW5kICYmIHNob3J0aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChzaG9ydGhhbmQp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRTaG9ydGhhbmRWYWx1ZSh0ZW1wU3R5
bGUsIHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgdmFyIHByaW9yaXR5ID0gZ2V0U2hvcnRo
YW5kUHJpb3JpdHkodGVtcFN0eWxlLCBzaG9ydGhhbmQpOwotICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kc1tzaG9ydGhhbmRdID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHZhbHVlID0gdGVtcFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7
Ci0gICAgICAgICAgICAgICAgdmFyIHByaW9yaXR5ID0gdGVtcFN0eWxlLmdldFByb3BlcnR5UHJp
b3JpdHkobmFtZSk7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgdmFyIGNhbGxi
YWNrID0gZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICAgICAgICAgIC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0IGl0IGRpZG4ndCBw
YXJzZS4gSnVzdCBhYm9ydCBhbmQgcmVzdG9yZQorICAgICAgICAgICAgICAgIC8vIHRoZSBvcmln
aW5hbCB0aXRsZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEgbmV3IGF0dHJpYnV0
ZSBhbmQKKyAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBqdXN0IHJl
bW92ZSBpdC4KKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5fbmV3UHJvcGVydHkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQucmVtb3ZlQ2hpbGQoc2VsZik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHVwZGF0ZUludGVyZmFjZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVUaXRsZSgp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBTZXQgdGhlIHByb3BlcnR5IG9uIHRo
ZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLgotICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9w
ZXJ0eSgoc2hvcnRoYW5kIHx8IG5hbWUpLCB2YWx1ZSwgcHJpb3JpdHkpOwotICAgICAgICAgICAg
ZWxlbWVudHNQYW5lbC5hZGRTdHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIsIHRoaXMuc3R5
bGUsIChzaG9ydGhhbmQgfHwgbmFtZSkpOwotICAgICAgICB9CisgICAgICAgICAgICB2YXIgbmV3
UGF5bG9hZCA9IHJlc3VsdFswXTsKKyAgICAgICAgICAgIHZhciBjaGFuZ2VkUHJvcGVydGllcyA9
IHJlc3VsdFsxXTsKKyAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwucmVtb3ZlU3R5bGVDaGFuZ2Uo
c2VjdGlvbi5pZGVudGlmaWVyLCBzZWxmLnN0eWxlLCBzZWxmLm5hbWUpOwogCi0gICAgICAgIGlm
IChzZWN0aW9uICYmIHNlY3Rpb24ucGFuZSkKLSAgICAgICAgICAgIHNlY3Rpb24ucGFuZS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOworICAgICAgICAgICAgc2VsZi5z
dHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3UGF5
bG9hZCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRQcm9wZXJ0aWVz
Lmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwuYWRkU3R5bGVDaGFu
Z2Uoc2VjdGlvbi5pZGVudGlmaWVyLCBzZWxmLnN0eWxlLCBjaGFuZ2VkUHJvcGVydGllc1tpXSk7
CisgICAgICAgICAgICBzZWxmLl9zdHlsZVJ1bGUuc3R5bGUgPSBzZWxmLnN0eWxlOworICAgICAg
ICAgICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi5wYW5lKQorICAgICAgICAgICAgICAgIHNlY3Rp
b24ucGFuZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwogCi0gICAg
ICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCi0gICAgICAgICAgICB0aGlzLnVwZGF0ZUFsbCh0cnVl
KTsKKyAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCisgICAgICAgICAgICAgICAgc2Vs
Zi51cGRhdGVBbGwodHJ1ZSk7CiAKLSAgICAgICAgaWYgKCF0aGlzLnJ1bGUpCi0gICAgICAgICAg
ICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLnRyZWVPdXRsaW5lLnVwZGF0ZSgpOworICAg
ICAgICAgICAgaWYgKCFzZWxmLnJ1bGUpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5lbGVtZW50cy50cmVlT3V0bGluZS51cGRhdGUoKTsKKyAgICAgICAgfTsKKyAgICAgICAg
SW5zcGVjdG9yQ29udHJvbGxlci5hcHBseVN0eWxlVGV4dCh0aGlzLnN0eWxlLl9pZCwgc3R5bGVU
ZXh0LCB0aGlzLm5hbWUsIGNhbGxiYWNrKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMKaW5kZXggY2Y1ODg3MC4uNzI0YzRlNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTIyLDYgKzIyLDcgQEAKICAgICA8ZmlsZT5FbGVt
ZW50c1RyZWVPdXRsaW5lLmpzPC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxlPgog
ICAgIDxmaWxlPkltYWdlVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5JbmplY3RlZFNjcmlwdC5q
czwvZmlsZT4KICAgICA8ZmlsZT5pbnNwZWN0b3IuanM8L2ZpbGU+CiAgICAgPGZpbGU+S2V5Ym9h
cmRTaG9ydGN1dC5qczwvZmlsZT4KICAgICA8ZmlsZT5NZXRyaWNzU2lkZWJhclBhbmUuanM8L2Zp
bGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMGNk
ODZiNS4uNDk3YTkwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
aHRtbApAQCAtODIsNiArODIsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJQcm9maWxlVmlldy5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQWdl
bnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkluamVjdGVkU2NyaXB0LmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJkZXRh
Y2hlZCI+CiAgICAgPGRpdiBpZD0idG9vbGJhciI+Cg==
</data>
<flag name="commit-queue"
          id="18319"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34210</attachid>
            <date>2009-08-06 08:09:15 -0700</date>
            <delta_ts>2009-08-07 01:04:59 -0700</delta_ts>
            <desc>move style-related utilities into InjectedScript</desc>
            <filename>move_utils.txt</filename>
            <type>text/plain</type>
            <size>19540</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzI1NjEwNy4uODYzMDM2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwzNiBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IFRp
bW90aHkgSGF0Y2hlci4KIAorICAgICAgICBXZWJJbnNwZWN0b3I6IG1vdmUgc3R5bGUtcmVsYXRl
ZCB1dGlsaXRpZXMgaW50byBJbmplY3RlZFNjcmlwdC4KKworICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzkzOQorCisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3Rv
dHlwZS5pc1Byb3BlcnR5SW1wbGljaXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucHJvdG90eXBlLnN0eWxlVGV4dFdpdGhTaG9ydGhhbmRzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZXRMb25naGFuZFBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJv
dG90eXBlLmdldFNob3J0aGFuZFByaW9yaXR5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0LmpzOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHls
ZVRleHQpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkKToKKyAg
ICAgICAgKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVTdHlsZSk6CisgICAgICAgIChJbmplY3Rl
ZFNjcmlwdC5fZ2V0VW5pcXVlU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluamVjdGVkU2Ny
aXB0Ll9nZXRMb25naGFuZFByb3BlcnRpZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuX2dl
dFNob3J0aGFuZFByaW9yaXR5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxl
c1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5l
LnByb3RvdHlwZS5fdXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRp
ZXNTZWN0aW9uLnByb3RvdHlwZS5pc1Byb3BlcnR5T3ZlcmxvYWRlZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUub25wb3B1bGF0ZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5n
ZXQgcHJpb3JpdHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUuZ2V0IHZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL3V0aWxpdGllcy5qczoKKworMjAwOS0wOC0wNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisK
ICAgICAgICAgV2ViSW5zcGVjdG9yOiBFeHRyYWN0IHN0eWxlIGVkaXRpbmcgaW50byBhIHNlcGFy
YXRlIGZpbGUgdGhhdCBpcwogICAgICAgICBnb2luZyB0byBiZSBsb2FkZWQgaW4gcGFnZSBjb250
ZXh0LgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggNTM1ZDRm
Ni4uNDVlOWQ1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFn
ZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAt
NDU2LDggKzQ1NiwxMCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGZ1bmN0
aW9uKHBheWxvYWQpIHsKICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0aWVzID0gcGF5bG9hZC5f
X2Rpc2FibGVkUHJvcGVydGllczsKICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyA9
IHBheWxvYWQuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzOwogICAgIHRoaXMuX19kaXNhYmxlZFBy
b3BlcnR5UHJpb3JpdGllcyA9IHBheWxvYWQuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllczsK
LQorICAgIHRoaXMudW5pcXVlU3R5bGVQcm9wZXJ0aWVzID0gcGF5bG9hZC51bmlxdWVTdHlsZVBy
b3BlcnRpZXM7CisgICAgdGhpcy5fc2hvcnRoYW5kVmFsdWVzID0gcGF5bG9hZC5zaG9ydGhhbmRW
YWx1ZXM7CiAgICAgdGhpcy5fcHJvcGVydHlNYXAgPSB7fTsKKyAgICB0aGlzLl9sb25naGFuZFBy
b3BlcnRpZXMgPSB7fTsKICAgICB0aGlzLmxlbmd0aCA9IHBheWxvYWQucHJvcGVydGllcy5sZW5n
dGg7CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHsKQEAgLTQ2
Niw2ICs0NjgsMjAgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlv
bihwYXlsb2FkKSB7CiAgICAgICAgIHRoaXNbaV0gPSBuYW1lOwogICAgICAgICB0aGlzLl9wcm9w
ZXJ0eU1hcFtuYW1lXSA9IHByb3BlcnR5OwogICAgIH0KKworICAgIC8vIEluZGV4IGxvbmdoYW5k
IHByb3BlcnRpZXMuCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuaXF1ZVN0eWxlUHJv
cGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgbmFtZSA9IHRoaXMudW5pcXVlU3R5
bGVQcm9wZXJ0aWVzW2ldOworICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLl9wcm9wZXJ0eU1h
cFtuYW1lXTsKKyAgICAgICAgaWYgKHByb3BlcnR5LnNob3J0aGFuZCkgeworICAgICAgICAgICAg
dmFyIGxvbmdoYW5kcyA9IHRoaXMuX2xvbmdoYW5kUHJvcGVydGllc1twcm9wZXJ0eS5zaG9ydGhh
bmRdOworICAgICAgICAgICAgaWYgKCFsb25naGFuZHMpIHsKKyAgICAgICAgICAgICAgICBsb25n
aGFuZHMgPSBbXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9sb25naGFuZFByb3BlcnRpZXNbcHJv
cGVydHkuc2hvcnRoYW5kXSA9IGxvbmdoYW5kczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGxvbmdoYW5kcy5wdXNoKG5hbWUpOworICAgICAgICB9CisgICAgfQogfQogCiBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlID0gZnVuY3Rpb24ocGF5bG9hZCkKQEAg
LTUxMSw2ICs1MjcsNTcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90
eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5fcHJvcGVydHlNYXBb
bmFtZV07CiAgICAgICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LmltcGxpY2l0IDogIiI7
CisgICAgfSwKKworICAgIHN0eWxlVGV4dFdpdGhTaG9ydGhhbmRzOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgY3NzVGV4dCA9ICIiOworICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVz
ID0ge307CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHRoaXNbaV07CisgICAgICAgICAg
ICB2YXIgc2hvcnRoYW5kUHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2
aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gKHNob3J0aGFu
ZFByb3BlcnR5IHx8IGluZGl2aWR1YWxQcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eU5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAoc2hvcnRoYW5kUHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoc2hvcnRoYW5kUHJvcGVydHkpOworICAg
ICAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRoaXMuZ2V0U2hvcnRoYW5kUHJpb3JpdHkoc2hv
cnRoYW5kUHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSB0aGlzLmdldFByb3BlcnR5UHJpb3JpdHkoaW5k
aXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm91bmRQcm9w
ZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlOworCisgICAgICAgICAgICBjc3NUZXh0ICs9IHBy
b3BlcnR5TmFtZSArICI6ICIgKyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChwcmlvcml0eSkKKyAg
ICAgICAgICAgICAgICBjc3NUZXh0ICs9ICIgISIgKyBwcmlvcml0eTsKKyAgICAgICAgICAgIGNz
c1RleHQgKz0gIjsgIjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjc3NUZXh0OworICAg
IH0sCisKKyAgICBnZXRMb25naGFuZFByb3BlcnRpZXM6IGZ1bmN0aW9uKG5hbWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVzW25hbWVdIHx8IFtdOworICAg
IH0sCisKKyAgICBnZXRTaG9ydGhhbmRWYWx1ZTogZnVuY3Rpb24oc2hvcnRoYW5kUHJvcGVydHkp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2hvcnRoYW5kVmFsdWVzW3Nob3J0aGFuZFBy
b3BlcnR5XTsKKyAgICB9LAorCisgICAgZ2V0U2hvcnRoYW5kUHJpb3JpdHk6IGZ1bmN0aW9uKHNo
b3J0aGFuZFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgdmFyIHByaW9yaXR5ID0gdGhpcy5nZXRQ
cm9wZXJ0eVByaW9yaXR5KHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICAgICAgaWYgKHByaW9yaXR5
KQorICAgICAgICAgICAgcmV0dXJuIHByaW9yaXR5OworCisgICAgICAgIHZhciBsb25naGFuZHMg
PSB0aGlzLl9sb25naGFuZFByb3BlcnRpZXNbc2hvcnRoYW5kUHJvcGVydHldOworICAgICAgICBy
ZXR1cm4gbG9uZ2hhbmRzID8gdGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KGxvbmdoYW5kc1swXSkg
OiBudWxsOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVj
dGVkU2NyaXB0LmpzCmluZGV4IDBjMWNmZjMuLjNkMjliMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTkyLDcgKzkyLDcgQEAgSW5qZWN0
ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQgPSBmdW5jdGlvbihzdHlsZUlkLCBzdHlsZVRleHQsIHBy
b3BlcnR5TmFtZSkKICAgICAgICAgLy8gb3JpZ2luYWwgcHJvcGVydHkgZnJvbSB0aGUgcmVhbCBz
dHlsZSBkZWNsYXJhdGlvbi4gSWYgdGhpcyByZXByZXNlbnRzCiAgICAgICAgIC8vIGEgc2hvcnRo
YW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChzdHls
ZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICB2YXIg
bG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IEluamVjdGVkU2Ny
aXB0Ll9nZXRMb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7CiAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7ICsraSkK
ICAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmVQcm9wZXJ0eShsb25naGFuZFByb3BlcnRpZXNb
aV0pOwogICAgICAgICB9IGVsc2UKQEAgLTEwNiw3ICsxMDYsNyBAQCBJbmplY3RlZFNjcmlwdC5h
cHBseVN0eWxlVGV4dCA9IGZ1bmN0aW9uKHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1l
KQogICAgIC8vIGFkZCB0aGVtIHRvIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBXZSB0YWtl
IGNhcmUgdG8gbW92ZSBzaG9ydGhhbmRzLgogICAgIHZhciBmb3VuZFNob3J0aGFuZHMgPSB7fTsK
ICAgICB2YXIgY2hhbmdlZFByb3BlcnRpZXMgPSBbXTsKLSAgICB2YXIgdW5pcXVlUHJvcGVydGll
cyA9IGdldFVuaXF1ZVN0eWxlUHJvcGVydGllcyh0ZW1wU3R5bGUpOworICAgIHZhciB1bmlxdWVQ
cm9wZXJ0aWVzID0gSW5qZWN0ZWRTY3JpcHQuX2dldFVuaXF1ZVN0eWxlUHJvcGVydGllcyh0ZW1w
U3R5bGUpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pcXVlUHJvcGVydGllcy5sZW5ndGg7
ICsraSkgewogICAgICAgICB2YXIgbmFtZSA9IHVuaXF1ZVByb3BlcnRpZXNbaV07CiAgICAgICAg
IHZhciBzaG9ydGhhbmQgPSB0ZW1wU3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CkBA
IC0xMTUsOCArMTE1LDggQEAgSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVRleHQgPSBmdW5jdGlv
bihzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGlmIChzaG9ydGhhbmQpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdl
dFNob3J0aGFuZFZhbHVlKHRlbXBTdHlsZSwgc2hvcnRoYW5kKTsKLSAgICAgICAgICAgIHZhciBw
cmlvcml0eSA9IGdldFNob3J0aGFuZFByaW9yaXR5KHRlbXBTdHlsZSwgc2hvcnRoYW5kKTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IEluamVjdGVkU2NyaXB0Ll9nZXRTaG9ydGhhbmRWYWx1ZSh0
ZW1wU3R5bGUsIHNob3J0aGFuZCk7CisgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBJbmplY3Rl
ZFNjcmlwdC5fZ2V0U2hvcnRoYW5kUHJpb3JpdHkodGVtcFN0eWxlLCBzaG9ydGhhbmQpOwogICAg
ICAgICAgICAgZm91bmRTaG9ydGhhbmRzW3Nob3J0aGFuZF0gPSB0cnVlOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgdmFyIHZhbHVlID0gdGVtcFN0eWxlLmdldFByb3BlcnR5VmFsdWUo
bmFtZSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFi
bGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCkKICAgICAgICAg
c3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1twcm9wZXJ0eU5hbWVdID0gc3R5bGUu
Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIGlmIChzdHlsZS5n
ZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICB2YXIgbG9u
Z2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgdmFyIGxvbmdoYW5kUHJvcGVydGllcyA9IEluamVjdGVkU2NyaXB0
Ll9nZXRMb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgICAgIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzW2xvbmdoYW5kUHJvcGVy
dGllc1tpXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KGxv
bmdoYW5kUHJvcGVydGllc1tpXSk7CkBAIC0yNzUsMTYgKzI3NSwyNCBAQCBJbmplY3RlZFNjcmlw
dC5fc2VyaWFsaXplU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgZG9CaW5kKQogICAgIHJlc3VsdC5f
X2Rpc2FibGVkUHJvcGVydHlWYWx1ZXMgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXM7
CiAgICAgcmVzdWx0Ll9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMgPSBzdHlsZS5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzOwogICAgIHJlc3VsdC5wcm9wZXJ0aWVzID0gW107CisgICAg
cmVzdWx0LnNob3J0aGFuZFZhbHVlcyA9IHt9OworICAgIHZhciBmb3VuZFNob3J0aGFuZHMgPSB7
fTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
IHZhciBwcm9wZXJ0eSA9IHt9OwogICAgICAgICB2YXIgbmFtZSA9IHN0eWxlW2ldOwogICAgICAg
ICBwcm9wZXJ0eS5uYW1lID0gbmFtZTsKICAgICAgICAgcHJvcGVydHkucHJpb3JpdHkgPSBzdHls
ZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpOwogICAgICAgICBwcm9wZXJ0eS5pbXBsaWNpdCA9
IHN0eWxlLmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKTsKLSAgICAgICAgcHJvcGVydHkuc2hvcnRo
YW5kID0gc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgIHZhciBzaG9y
dGhhbmQgPSAgc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgIHByb3Bl
cnR5LnNob3J0aGFuZCA9IHNob3J0aGFuZDsKKyAgICAgICAgaWYgKHNob3J0aGFuZCAmJiAhKHNo
b3J0aGFuZCBpbiBmb3VuZFNob3J0aGFuZHMpKSB7CisgICAgICAgICAgICBmb3VuZFNob3J0aGFu
ZHNbc2hvcnRoYW5kXSA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQuc2hvcnRoYW5kVmFsdWVz
W3Nob3J0aGFuZF0gPSBJbmplY3RlZFNjcmlwdC5fZ2V0U2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNo
b3J0aGFuZCk7CisgICAgICAgIH0KICAgICAgICAgcHJvcGVydHkudmFsdWUgPSBzdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKG5hbWUpOwogICAgICAgICByZXN1bHQucHJvcGVydGllcy5wdXNoKHByb3Bl
cnR5KTsKICAgICB9CisgICAgcmVzdWx0LnVuaXF1ZVN0eWxlUHJvcGVydGllcyA9IEluamVjdGVk
U2NyaXB0Ll9nZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5bGUpOwogCiAgICAgaWYgKGRvQmlu
ZCkgewogICAgICAgICBpZiAoIXN0eWxlLl9pZCkgewpAQCAtMjk2LDYgKzMwNCw4MyBAQCBJbmpl
Y3RlZFNjcmlwdC5fc2VyaWFsaXplU3R5bGUgPSBmdW5jdGlvbihzdHlsZSwgZG9CaW5kKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK0luamVjdGVkU2NyaXB0Ll9nZXRVbmlxdWVTdHlsZVByb3Bl
cnRpZXMgPSBmdW5jdGlvbihzdHlsZSkKK3sKKyAgICB2YXIgcHJvcGVydGllcyA9IFtdOworICAg
IHZhciBmb3VuZFByb3BlcnRpZXMgPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5
bGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHByb3BlcnR5ID0gc3R5bGVbaV07CisgICAg
ICAgIGlmIChwcm9wZXJ0eSBpbiBmb3VuZFByb3BlcnRpZXMpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHRydWU7CisgICAgICAgIHBy
b3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7CisgICAgfQorCisgICAgcmV0dXJuIHByb3BlcnRpZXM7
Cit9CisKKworSW5qZWN0ZWRTY3JpcHQuX2dldExvbmdoYW5kUHJvcGVydGllcyA9IGZ1bmN0aW9u
KHN0eWxlLCBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICB2YXIgcHJvcGVydGllcyA9IFtdOwor
ICAgIHZhciBmb3VuZFByb3BlcnRpZXMgPSB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3R5bGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0
eWxlW2ldOworICAgICAgICBpZiAoaW5kaXZpZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGll
cyB8fCBzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBz
aG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZFBy
b3BlcnRpZXNbaW5kaXZpZHVhbFByb3BlcnR5XSA9IHRydWU7CisgICAgICAgIHByb3BlcnRpZXMu
cHVzaChpbmRpdmlkdWFsUHJvcGVydHkpOworICAgIH0KKworICAgIHJldHVybiBwcm9wZXJ0aWVz
OworfQorCitJbmplY3RlZFNjcmlwdC5fZ2V0U2hvcnRoYW5kVmFsdWUgPSBmdW5jdGlvbihzdHls
ZSwgc2hvcnRoYW5kUHJvcGVydHkpCit7CisgICAgdmFyIHZhbHVlID0gc3R5bGUuZ2V0UHJvcGVy
dHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAv
LyBTb21lIHNob3J0aGFuZHMgKGxpa2UgYm9yZGVyKSByZXR1cm4gYSBudWxsIHZhbHVlLCBzbyBj
b21wdXRlIGEgc2hvcnRoYW5kIHZhbHVlLgorICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
d2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgyMyBpcyBmaXhl
ZC4KKworICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBpbmRpdmlk
dWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKKyAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsUHJvcGVy
dHkgaW4gZm91bmRQcm9wZXJ0aWVzIHx8IHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2
aWR1YWxQcm9wZXJ0eSkgIT09IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZShpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICAgICAgaWYgKHN0eWxlLmlz
UHJvcGVydHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpIHx8IGluZGl2aWR1YWxWYWx1ZSA9
PT0gImluaXRpYWwiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBm
b3VuZFByb3BlcnRpZXNbaW5kaXZpZHVhbFByb3BlcnR5XSA9IHRydWU7CisKKyAgICAgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAiICI7CisgICAg
ICAgICAgICB2YWx1ZSArPSBpbmRpdmlkdWFsVmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHZhbHVlOworfQorCitJbmplY3RlZFNjcmlwdC5fZ2V0U2hvcnRoYW5kUHJpb3JpdHkg
PSBmdW5jdGlvbihzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpCit7CisgICAgdmFyIHByaW9yaXR5
ID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYg
KCFwcmlvcml0eSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGVbaV07Cisg
ICAgICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3Bl
cnR5KSAhPT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoaW5kaXZpZHVh
bFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBwcmlvcml0eTsKK30KKwogSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdyA9IGZ1bmN0aW9uKCkK
IHsKICAgICByZXR1cm4gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRl
eCBmZjc5OWE0Li44YTNhNjdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC0yMDQsNyArMjA0LDcgQEAgV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZVJ1bGVzW2ldLnN0eWxlOwot
ICAgICAgICAgICAgICAgIHZhciB1bmlxdWVQcm9wZXJ0aWVzID0gZ2V0VW5pcXVlU3R5bGVQcm9w
ZXJ0aWVzKHN0eWxlKTsKKyAgICAgICAgICAgICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHN0
eWxlLnVuaXF1ZVN0eWxlUHJvcGVydGllczsKICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IHVuaXF1ZVByb3BlcnRpZXMubGVuZ3RoOyArK2opIHsKICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5hbWUgPSB1bmlxdWVQcm9wZXJ0aWVzW2pdOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKS5sZW5ndGgpIHsKQEAgLTQzNyw3ICs0
MzcsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgLy8gRmluZCBvdXQgaWYgYW55IG9mIHRoZSBpbmRpdmlkdWFsIGxvbmdoYW5k
IHByb3BlcnRpZXMgb2YgdGhlIHNob3J0aGFuZAogICAgICAgICAvLyBhcmUgdXNlZCwgaWYgbm9u
ZSBhcmUgdGhlbiB0aGUgc2hvcnRoYW5kIGlzIG92ZXJsb2FkZWQgdG9vLgotICAgICAgICB2YXIg
bG9uZ2hhbmRQcm9wZXJ0aWVzID0gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHRoaXMuc3R5bGVSdWxl
LnN0eWxlLCBwcm9wZXJ0eSk7CisgICAgICAgIHZhciBsb25naGFuZFByb3BlcnRpZXMgPSB0aGlz
LnN0eWxlUnVsZS5zdHlsZS5nZXRMb25naGFuZFByb3BlcnRpZXMocHJvcGVydHkpOwogICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGxvbmdoYW5kUHJvcGVydGllcy5sZW5ndGg7ICsraikgewog
ICAgICAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9wZXJ0eSA9IGxvbmdoYW5kUHJvcGVydGllc1tq
XTsKICAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsUHJvcGVydHkgaW4gdGhpcy51c2VkUHJvcGVy
dGllcykKQEAgLTQ3Niw3ICs0NzYsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2Vj
dGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuc3R5bGVSdWxlLnN0
eWxlOwogCiAgICAgICAgIHZhciBmb3VuZFNob3J0aGFuZHMgPSB7fTsKLSAgICAgICAgdmFyIHVu
aXF1ZVByb3BlcnRpZXMgPSBnZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5bGUpOworICAgICAg
ICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHN0eWxlLnVuaXF1ZVN0eWxlUHJvcGVydGllczsKICAg
ICAgICAgdmFyIGRpc2FibGVkUHJvcGVydGllcyA9IHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVZh
bHVlcyB8fCB7fTsKIAogICAgICAgICBmb3IgKHZhciBuYW1lIGluIGRpc2FibGVkUHJvcGVydGll
cykKQEAgLTc3NywxNCArNzc3LDE0IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYg
dGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzICYmIHRoaXMubmFtZSBpbiB0
aGlzLnN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0eVByaW9yaXRpZXMpCiAgICAgICAgICAgICByZXR1
cm4gdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzW3RoaXMubmFtZV07Ci0g
ICAgICAgIHJldHVybiAodGhpcy5zaG9ydGhhbmQgPyBnZXRTaG9ydGhhbmRQcmlvcml0eSh0aGlz
LnN0eWxlLCB0aGlzLm5hbWUpIDogdGhpcy5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHRoaXMu
bmFtZSkpOworICAgICAgICByZXR1cm4gKHRoaXMuc2hvcnRoYW5kID8gdGhpcy5zdHlsZS5nZXRT
aG9ydGhhbmRQcmlvcml0eSh0aGlzLm5hbWUpIDogdGhpcy5zdHlsZS5nZXRQcm9wZXJ0eVByaW9y
aXR5KHRoaXMubmFtZSkpOwogICAgIH0sCiAKICAgICBnZXQgdmFsdWUoKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgdGhpcy5zdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1
ZXMgJiYgdGhpcy5uYW1lIGluIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzKQog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Ro
aXMubmFtZV07Ci0gICAgICAgIHJldHVybiAodGhpcy5zaG9ydGhhbmQgPyBnZXRTaG9ydGhhbmRW
YWx1ZSh0aGlzLnN0eWxlLCB0aGlzLm5hbWUpIDogdGhpcy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVl
KHRoaXMubmFtZSkpOworICAgICAgICByZXR1cm4gKHRoaXMuc2hvcnRoYW5kID8gdGhpcy5zdHls
ZS5nZXRTaG9ydGhhbmRWYWx1ZSh0aGlzLm5hbWUpIDogdGhpcy5zdHlsZS5nZXRQcm9wZXJ0eVZh
bHVlKHRoaXMubmFtZSkpOwogICAgIH0sCiAKICAgICBvbmF0dGFjaDogZnVuY3Rpb24oKQpAQCAt
MTAyNyw3ICsxMDI3LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5z
aG9ydGhhbmQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGxvbmdoYW5kUHJv
cGVydGllcyA9IGdldExvbmdoYW5kUHJvcGVydGllcyh0aGlzLnN0eWxlLCB0aGlzLm5hbWUpOwor
ICAgICAgICB2YXIgbG9uZ2hhbmRQcm9wZXJ0aWVzID0gdGhpcy5zdHlsZS5nZXRMb25naGFuZFBy
b3BlcnRpZXModGhpcy5uYW1lKTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFu
ZFByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBuYW1lID0gbG9uZ2hh
bmRQcm9wZXJ0aWVzW2ldOwogCkBAIC0xMTUxLDcgKzExNTEsNyBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLm9y
aWdpbmFsQ1NTVGV4dCkgewogICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJ1bGUncyBvcmln
aW5hbCBDU1MgdGV4dCwgc28gaXQgY2FuIGJlIHJlc3RvcmVkCiAgICAgICAgICAgICAvLyBpZiB0
aGUgZWRpdGluZyBpcyBjYW5jZWxlZCBhbmQgYmVmb3JlIGVhY2ggYXBwbHkuCi0gICAgICAgICAg
ICB0aGlzLm9yaWdpbmFsQ1NTVGV4dCA9IGdldFN0eWxlVGV4dFdpdGhTaG9ydGhhbmRzKHRoaXMu
c3R5bGUpOworICAgICAgICAgICAgdGhpcy5vcmlnaW5hbENTU1RleHQgPSB0aGlzLnN0eWxlLnN0
eWxlVGV4dFdpdGhTaG9ydGhhbmRzKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBDU1MgdGV4dCBiZWZvcmUgYXBwbHlpbmcgdXNlciBjaGFu
Z2VzLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50CiAgICAgICAgICAgICAvLyBuZXcgcHJvcGVy
dGllcyBmcm9tIHN0aWNraW5nIGFyb3VuZCBpZiB0aGUgdXNlciBhZGRzIG9uZSwgdGhlbiByZW1v
dmVzIGl0LgpAQCAtMTI3NCw2ICsxMjc0LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRl
VGl0bGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZhciBuZXdQYXlsb2FkID0gcmVzdWx0WzBdOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMKaW5kZXggNDAwYWEwOC4uZWVjMGI4NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC0zODUsMTEzICszODUsNiBAQCBTdHJpbmcu
cHJvdG90eXBlLnRyaW1VUkwgPSBmdW5jdGlvbihiYXNlVVJMRG9tYWluKQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLWZ1bmN0aW9uIGdldFN0eWxlVGV4dFdpdGhTaG9ydGhhbmRzKHN0eWxlKQot
ewotICAgIHZhciBjc3NUZXh0ID0gIiI7Ci0gICAgdmFyIGZvdW5kUHJvcGVydGllcyA9IHt9Owot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFy
IGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlW2ldOwotICAgICAgICB2YXIgc2hvcnRoYW5kUHJv
cGVydHkgPSBzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpOwot
ICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gKHNob3J0aGFuZFByb3BlcnR5IHx8IGluZGl2aWR1
YWxQcm9wZXJ0eSk7Ci0KLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBmb3VuZFByb3BlcnRp
ZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2hvcnRoYW5kUHJvcGVy
dHkpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldFNob3J0aGFuZFZhbHVlKHN0eWxlLCBz
aG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBnZXRTaG9ydGhh
bmRQcmlvcml0eShzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgdmFyIHZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpbmRpdmlkdWFs
UHJvcGVydHkpOwotICAgICAgICAgICAgdmFyIHByaW9yaXR5ID0gc3R5bGUuZ2V0UHJvcGVydHlQ
cmlvcml0eShpbmRpdmlkdWFsUHJvcGVydHkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm91bmRQ
cm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlOwotCi0gICAgICAgIGNzc1RleHQgKz0gcHJv
cGVydHlOYW1lICsgIjogIiArIHZhbHVlOwotICAgICAgICBpZiAocHJpb3JpdHkpCi0gICAgICAg
ICAgICBjc3NUZXh0ICs9ICIgISIgKyBwcmlvcml0eTsKLSAgICAgICAgY3NzVGV4dCArPSAiOyAi
OwotICAgIH0KLQotICAgIHJldHVybiBjc3NUZXh0OwotfQotCi1mdW5jdGlvbiBnZXRTaG9ydGhh
bmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgdmFyIHZhbHVlID0gc3R5
bGUuZ2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgaWYgKCF2YWx1ZSkg
ewotICAgICAgICAvLyBTb21lIHNob3J0aGFuZHMgKGxpa2UgYm9yZGVyKSByZXR1cm4gYSBudWxs
IHZhbHVlLCBzbyBjb21wdXRlIGEgc2hvcnRoYW5kIHZhbHVlLgotICAgICAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgd2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTgyMyBpcyBmaXhlZC4KLQotICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IHZhciBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKLSAgICAgICAgICAgIGlmIChpbmRp
dmlkdWFsUHJvcGVydHkgaW4gZm91bmRQcm9wZXJ0aWVzIHx8IHN0eWxlLmdldFByb3BlcnR5U2hv
cnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT09IHNob3J0aGFuZFByb3BlcnR5KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFZhbHVlID0g
c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpbmRpdmlkdWFsUHJvcGVydHkpOwotICAgICAgICAgICAg
aWYgKHN0eWxlLmlzUHJvcGVydHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpIHx8IGluZGl2
aWR1YWxWYWx1ZSA9PT0gImluaXRpYWwiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNbaW5kaXZpZHVhbFByb3BlcnR5XSA9IHRydWU7Ci0K
LSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB2YWx1ZSAr
PSAiICI7Ci0gICAgICAgICAgICB2YWx1ZSArPSBpbmRpdmlkdWFsVmFsdWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1mdW5jdGlvbiBnZXRTaG9ydGhhbmRQcmlv
cml0eShzdHlsZSwgc2hvcnRoYW5kUHJvcGVydHkpCi17Ci0gICAgdmFyIHByaW9yaXR5ID0gc3R5
bGUuZ2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7Ci0gICAgaWYgKCFwcmlv
cml0eSkgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGVbaV07Ci0gICAgICAg
ICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAh
PT0gc2hvcnRoYW5kUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBwcmlvcml0eSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoaW5kaXZpZHVhbFByb3Bl
cnR5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBw
cmlvcml0eTsKLX0KLQotZnVuY3Rpb24gZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHN0eWxlLCBzaG9y
dGhhbmRQcm9wZXJ0eSkKLXsKLSAgICB2YXIgcHJvcGVydGllcyA9IFtdOwotICAgIHZhciBmb3Vu
ZFByb3BlcnRpZXMgPSB7fTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgdmFyIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlW2ldOwotICAg
ICAgICBpZiAoaW5kaXZpZHVhbFByb3BlcnR5IGluIGZvdW5kUHJvcGVydGllcyB8fCBzdHlsZS5n
ZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9ydGhhbmRQcm9w
ZXJ0eSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3VuZFByb3BlcnRpZXNbaW5k
aXZpZHVhbFByb3BlcnR5XSA9IHRydWU7Ci0gICAgICAgIHByb3BlcnRpZXMucHVzaChpbmRpdmlk
dWFsUHJvcGVydHkpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9wZXJ0aWVzOwotfQotCi1mdW5j
dGlvbiBnZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5bGUpCi17Ci0gICAgdmFyIHByb3BlcnRp
ZXMgPSBbXTsKLSAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0ge307Ci0KLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0eSA9IHN0
eWxlW2ldOwotICAgICAgICBpZiAocHJvcGVydHkgaW4gZm91bmRQcm9wZXJ0aWVzKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvdW5kUHJvcGVydGllc1twcm9wZXJ0eV0gPSB0cnVl
OwotICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwotICAgIH0KLQotICAgIHJldHVy
biBwcm9wZXJ0aWVzOwotfQotCiBmdW5jdGlvbiBpc05vZGVXaGl0ZXNwYWNlKCkKIHsKICAgICBp
ZiAoIXRoaXMgfHwgdGhpcy5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>