<?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>110597</bug_id>
          
          <creation_ts>2013-02-22 05:35:44 -0800</creation_ts>
          <short_desc>Web Inspector: move profile type specific code out of ProfilesPanel (refactor)</short_desc>
          <delta_ts>2013-02-25 02:54:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexei Filippov">alph</reporter>
          <assigned_to name="Alexei Filippov">alph</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>839491</commentid>
    <comment_count>0</comment_count>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-22 05:35:44 -0800</bug_when>
    <thetext>Move profile type specific code out of ProfilesPanel class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839510</commentid>
    <comment_count>1</comment_count>
      <attachid>189759</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-22 05:44:34 -0800</bug_when>
    <thetext>Created attachment 189759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839575</commentid>
    <comment_count>2</comment_count>
      <attachid>189759</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-22 08:00:07 -0800</bug_when>
    <thetext>Comment on attachment 189759
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=189759&amp;action=review

&gt; Source/WebCore/inspector/front-end/CPUProfileView.js:678
&gt; +        WebInspector.ProfileType.prototype.removeProfile.call(this, profile);

Do you really need this call of super class?

&gt; Source/WebCore/inspector/front-end/CSSSelectorProfileView.js:-330
&gt; -        profilesPanel.setRecordingProfile(WebInspector.CSSSelectorProfileType.TypeId, true);

Where is it called now?

&gt; Source/WebCore/inspector/front-end/CSSSelectorProfileView.js:-351
&gt; -            profilesPanel.setRecordingProfile(WebInspector.CSSSelectorProfileType.TypeId, false);

Who notifies the panel about recording state change?

&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:356
&gt; +    {

What if there is no temp profile?

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:94
&gt; +    get profiles()

Please use function instead of getter.

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:484
&gt; +        console.trace();

Remove this.

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:577
&gt; +        profileType.addEventListener(WebInspector.ProfileType.Events.AddProfileHeader, (function(event) { this._addProfileHeader(event.data); }).bind(this));

Please use a method instead of anonymous function.

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:988
&gt; +        return this._getProfileTypesArray().reduce(function(result, type) { return result.concat(type.profiles); }, []);

Maybe extract anonymous function and give it a name?

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:995
&gt; +        const visibleView = this.visibleView;

I&apos;d rather use a plain old loop.

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:-1001
&gt; -        for (var i = 0; i &lt; this._profiles.length; ++i) {

Revert this?

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:-1148
&gt; -        this._launcherView.profileStarted();

Now that this code is removed, how does the launcher view know that profiling has started?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839635</commentid>
    <comment_count>3</comment_count>
      <attachid>189759</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-22 09:03:11 -0800</bug_when>
    <thetext>Comment on attachment 189759
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=189759&amp;action=review

Thanks for the review. Please take another look.

&gt;&gt; Source/WebCore/inspector/front-end/CPUProfileView.js:678
&gt;&gt; +        WebInspector.ProfileType.prototype.removeProfile.call(this, profile);
&gt; 
&gt; Do you really need this call of super class?

Sure. Base ProfileType manages profile headers collection.

&gt;&gt; Source/WebCore/inspector/front-end/CSSSelectorProfileView.js:-330
&gt;&gt; -        profilesPanel.setRecordingProfile(WebInspector.CSSSelectorProfileType.TypeId, true);
&gt; 
&gt; Where is it called now?

in ProfilesPanel.toggleRecordButton

&gt;&gt; Source/WebCore/inspector/front-end/CSSSelectorProfileView.js:-351
&gt;&gt; -            profilesPanel.setRecordingProfile(WebInspector.CSSSelectorProfileType.TypeId, false);
&gt; 
&gt; Who notifies the panel about recording state change?

ProfilesPanel.toggleRecordButton does it itself.

&gt;&gt; Source/WebCore/inspector/front-end/NativeMemorySnapshotView.js:356
&gt;&gt; +    {
&gt; 
&gt; What if there is no temp profile?

This would be an error state. But I can add a check to be on the safe side.

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:94
&gt;&gt; +    get profiles()
&gt; 
&gt; Please use function instead of getter.

done

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:484
&gt;&gt; +        console.trace();
&gt; 
&gt; Remove this.

done

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:577
&gt;&gt; +        profileType.addEventListener(WebInspector.ProfileType.Events.AddProfileHeader, (function(event) { this._addProfileHeader(event.data); }).bind(this));
&gt; 
&gt; Please use a method instead of anonymous function.

done

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:988
&gt;&gt; +        return this._getProfileTypesArray().reduce(function(result, type) { return result.concat(type.profiles); }, []);
&gt; 
&gt; Maybe extract anonymous function and give it a name?

turned into a loop.

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:995
&gt;&gt; +        const visibleView = this.visibleView;
&gt; 
&gt; I&apos;d rather use a plain old loop.

ok.

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:-1001
&gt;&gt; -        for (var i = 0; i &lt; this._profiles.length; ++i) {
&gt; 
&gt; Revert this?

done

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:-1148
&gt;&gt; -        this._launcherView.profileStarted();
&gt; 
&gt; Now that this code is removed, how does the launcher view know that profiling has started?

It is called from ProfilesPanel.toggleRecordButton -&gt; ProfilesPanel.setRecordingProfile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839637</commentid>
    <comment_count>4</comment_count>
      <attachid>189778</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-22 09:03:35 -0800</bug_when>
    <thetext>Created attachment 189778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840773</commentid>
    <comment_count>5</comment_count>
      <attachid>189778</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-25 00:48:29 -0800</bug_when>
    <thetext>Comment on attachment 189778
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=189778&amp;action=review

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:575
&gt; +        function onAddProfileHeader(event) {

style: { on the next line

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1007
&gt; +            searchableViews.splice(0, 0, this.visibleView);

searchableViews.unshift(this.visibleView);

BTW, why does visible view have to go first? Maybe just make a swap(0, i) then?

&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1042
&gt; +//        this._getAllProfiles().forEach(function(profile) { profile._profilesTreeElement.searchMatches = 0; });

Remove commented code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840789</commentid>
    <comment_count>6</comment_count>
      <attachid>189778</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-25 01:16:01 -0800</bug_when>
    <thetext>Comment on attachment 189778
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=189778&amp;action=review

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:575
&gt;&gt; +        function onAddProfileHeader(event) {
&gt; 
&gt; style: { on the next line

ok

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1007
&gt;&gt; +            searchableViews.splice(0, 0, this.visibleView);
&gt; 
&gt; searchableViews.unshift(this.visibleView);
&gt; 
&gt; BTW, why does visible view have to go first? Maybe just make a swap(0, i) then?

It was in the original implementation. Probably because it&apos;s more convenient to start searching in the opened view first. Changed to swap.

&gt;&gt; Source/WebCore/inspector/front-end/ProfilesPanel.js:1042
&gt;&gt; +//        this._getAllProfiles().forEach(function(profile) { profile._profilesTreeElement.searchMatches = 0; });
&gt; 
&gt; Remove commented code.

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840791</commentid>
    <comment_count>7</comment_count>
      <attachid>190016</attachid>
    <who name="Alexei Filippov">alph</who>
    <bug_when>2013-02-25 01:26:37 -0800</bug_when>
    <thetext>Created attachment 190016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840834</commentid>
    <comment_count>8</comment_count>
      <attachid>190016</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 02:54:51 -0800</bug_when>
    <thetext>Comment on attachment 190016
Patch

Clearing flags on attachment: 190016

Committed r143900: &lt;http://trac.webkit.org/changeset/143900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840835</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 02:54:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189759</attachid>
            <date>2013-02-22 05:44:34 -0800</date>
            <delta_ts>2013-02-22 09:03:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110597-20130222174053.patch</filename>
            <type>text/plain</type>
            <size>62077</size>
            <attacher name="Alexei Filippov">alph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJiNTViOGFkZDM3NmFk
ZDc1NmNiNWFlMTcyYTQ1OTA3MWRiMmE5Yi4uNDBmZmUwNzA4MjQ0MDZiZmEwZWY0ODNmNTQ3NjNl
NTE0ZTFiYjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAyLTIyICBBbGV4
ZWkgRmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBtb3ZlIHByb2ZpbGUgdHlwZSBzcGVjaWZpYyBjb2RlIG91dCBvZiBQcm9maWxlc1BhbmVsIChy
ZWZhY3RvcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDU5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgcHJvZmlsZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIFByb2ZpbGVz
UGFuZWwgY2xhc3MuCisgICAgICAgIFRoaXMgaXMgYSBmaXJzdCBwYXJ0IG9mIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0
aGUgZnVuY3Rpb25hbGl0eSBpc24ndCBjaGFuZ2VkLgorCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1BV
UHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRQcm9maWxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5wcm90b3R5cGUu
cmVtb3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJv
dG90eXBlLl9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlc2V0UHJvZmlsZXMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLmZpbmlzaEhl
YXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90
eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuX3N0YXJ0UmVj
b3JkaW5nUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
VHlwZS5wcm90b3R5cGUuX3N0b3BSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZS5idXR0b25DbGlja2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuX3J1blNpbmdsZUZyYW1lQ2Fw
dHVyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5
cGUuX3N0YXJ0RnJhbWVDYXB0dXJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1By
b2ZpbGVUeXBlLnByb3RvdHlwZS5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRp
c3Bvc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJv
ZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUu
YnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUucHJvdG90eXBlLmFkZFByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBl
LmZpbmlzaEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUucHJvdG90eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUucmVzZXRQ
cm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
cHJvdG90eXBlLnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fdXBkYXRl
VHJhbnNmZXJQcm9ncmVzcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVN
ZW1vcnlTbmFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNo
b3RQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9m
aWxlVHlwZS5wcm90b3R5cGUuYWRkTmF0aXZlU25hcHNob3RDaHVuayk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2ZpbGVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5
cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJv
dG90eXBlLmdldCBkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUucHJvdG90eXBlLmdldCBwcm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLmdldFByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLnByb3RvdHlwZS5fbWFrZUtleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLmFkZFByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Q
cm9maWxlVHlwZS5wcm90b3R5cGUuZmluZFRlbXBvcmFyeVByb2ZpbGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVzZXQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRpc3Bvc2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlLl9sb2FkRnJvbUZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2Zp
bGVzUGFuZWwucHJvdG90eXBlLnRvZ2dsZVJlY29yZEJ1dHRvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX3BvcHVsYXRlQWxsUHJvZmlsZXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLndhc1Nob3duKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcHJvZmlsZXJXYXNF
bmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5f
cHJvZmlsZXJXYXNEaXNhYmxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuX3Jlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVs
LnByb3RvdHlwZS5fcmVnaXN0ZXJQcm9maWxlVHlwZS5wcm9maWxlVHlwZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2FkZFByb2ZpbGVIZWFkZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9yZW1vdmVQcm9m
aWxlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlw
ZS5fY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUuX3JlbW92ZVRlbXBvcmFyeVByb2ZpbGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmdldFByb2ZpbGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3dQcm9maWxlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fZ2V0UHJvZmlsZVR5cGVz
QXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9n
ZXRBbGxQcm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUuX3NlYXJjaGFibGVWaWV3cy5jb25zdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbC5wcm90b3R5cGUuX3NlYXJjaGFibGVWaWV3cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNldFJlY29yZGluZ1Byb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9yZXBvcnRQ
cm9maWxlUHJvZ3Jlc3MpOgorCiAyMDEzLTAyLTIyICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBHbHlwaFBhZ2U6IEFMV0FZU19JTkxJTkUgYWxsIHBlcmZvcm1h
bmNlLXJlbGV2YW50IGdldHRlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9q
L2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggOTAyMDM0ODg4NWViNjNhOWE0MDcyNGJmOWY2MDAy
OWY1NzFmMGNlOS4uNWQ3MmE0MzVkNTc3MWE2MzZmOGVkOTA3ZjAxMmNiZjNkNmFmNjQ2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpA
QCAtMTEsNiArMTEsNyBAQCBsb2NhbGl6ZWRTdHJpbmdzWyIlLjFmXHUyMDA5aHJzIl0gPSAiJS4x
Zlx1MjAwOWhycyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyIlLjFmXHUyMDA5bWluIl0gPSAiJS4xZlx1
MjAwOW1pbiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyIlLjFmXHUyMDA5S0IiXSA9ICIlLjFmXHUyMDA5
S0IiOwogbG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOU1CIl0gPSAiJS4xZlx1MjAwOU1CIjsK
K2xvY2FsaXplZFN0cmluZ3NbIiUuMGYlIl0gPSAiJS4wZiUiOwogbG9jYWxpemVkU3RyaW5nc1si
JS4yZiUiXSA9ICIlLjJmJSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyIlLjJmXHUyMDA5cyJdID0gIiUu
MmZcdTIwMDlzIjsKIGxvY2FsaXplZFN0cmluZ3NbIiUuM2ZcdTIwMDltcyJdID0gIiUuM2ZcdTIw
MDltcyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQ
VVByb2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQ
cm9maWxlVmlldy5qcwppbmRleCAwM2ZiYzNiMmQwNWUxYjA4MzQ4MGI4MDhiOWU2YWUwOTBiMDg4
N2FkLi5jMjY3OTZlY2FmZmFjNDM5MmMyOTE5NjMxOTI1NGY3MmUxYWEzNzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQVVByb2ZpbGVWaWV3LmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1BVUHJvZmlsZVZpZXcuanMK
QEAgLTU3MSwxMCArNTcxLDEyIEBAIFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5
cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Q
cm9maWxlVHlwZX0KKyAqIEBpbXBsZW1lbnRzIHtQcm9maWxlckFnZW50LkRpc3BhdGNoZXJ9CiAg
Ki8KIFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5
cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbGxlY3QgSmF2YVNjcmlwdCBDUFUg
UHJvZmlsZSIpKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUHJvZmlsZXJEaXNwYXRj
aGVyKHRoaXMpOwogICAgIHRoaXMuX3JlY29yZGluZyA9IGZhbHNlOwogICAgIFdlYkluc3BlY3Rv
ci5DUFVQcm9maWxlVHlwZS5pbnN0YW5jZSA9IHRoaXM7CiB9CkBAIC02MTIsNiArNjE0LDE0IEBA
IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNQVSBwcm9maWxlcyBzaG93IHdoZXJlIHRoZSBleGVj
dXRpb24gdGltZSBpcyBzcGVudCBpbiB5b3VyIHBhZ2UncyBKYXZhU2NyaXB0IGZ1bmN0aW9ucy4i
KTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2Zp
bGVIZWFkZXJ9IHByb2ZpbGVIZWFkZXIKKyAgICAgKi8KKyAgICBhZGRQcm9maWxlSGVhZGVyOiBm
dW5jdGlvbihwcm9maWxlSGVhZGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHRo
aXMuY3JlYXRlUHJvZmlsZShwcm9maWxlSGVhZGVyKSk7CisgICAgfSwKKwogICAgIGlzUmVjb3Jk
aW5nUHJvZmlsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29y
ZGluZzsKQEAgLTYzMCw2ICs2NDAsOSBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJv
dG90eXBlID0gewogICAgICAgICBQcm9maWxlckFnZW50LnN0b3AoKTsKICAgICB9LAogCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtib29sZWFufSBpc1Byb2ZpbGluZworICAgICAqLwogICAgIHNl
dFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKGlzUHJvZmlsaW5nKQogICAgIHsKICAgICAgICAg
dGhpcy5fcmVjb3JkaW5nID0gaXNQcm9maWxpbmc7CkBAIC02MzgsNyArNjUxLDcgQEAgV2ViSW5z
cGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAb3Zl
cnJpZGUKICAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICogQHJldHVybiB7V2Vi
SW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Q
cm9maWxlSGVhZGVyfQogICAgICAqLwogICAgIGNyZWF0ZVRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0
aW9uKHRpdGxlKQogICAgIHsKQEAgLTY0OSwxMyArNjYyLDU5IEBAIFdlYkluc3BlY3Rvci5DUFVQ
cm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAgICAg
ICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKiBAcmV0dXJuIHshV2Vi
SW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAgY3JlYXRlUHJvZmlsZTogZnVu
Y3Rpb24ocHJvZmlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50aXRsZSwgcHJvZmlsZS51aWQpOwogICAgIH0s
CiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0
b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQorICAgICAqLworICAgIHJlbW92ZVByb2ZpbGU6IGZ1
bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
cHJvdG90eXBlLnJlbW92ZVByb2ZpbGUuY2FsbCh0aGlzLCBwcm9maWxlKTsKKyAgICAgICAgaWYg
KCFwcm9maWxlLmlzVGVtcG9yYXJ5KQorICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5yZW1vdmVQ
cm9maWxlKHRoaXMuaWQsIHByb2ZpbGUudWlkKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICog
QG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtmdW5jdGlvbih0aGlzOldlYkluc3BlY3Rvci5Qcm9m
aWxlVHlwZSwgP3N0cmluZywgQXJyYXkuPFByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcj4pfSBw
b3B1bGF0ZUNhbGxiYWNrCisgICAgICovCisgICAgX3JlcXVlc3RQcm9maWxlc0Zyb21CYWNrZW5k
OiBmdW5jdGlvbihwb3B1bGF0ZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgUHJvZmlsZXJBZ2Vu
dC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0ZUNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQG92ZXJyaWRlCisgICAgICovCisgICAgcmVzZXRQcm9maWxlczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICB9LAorCisgICAgLyoqIEBkZXBy
ZWNhdGVkIFRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHJvdG9jb2wgKi8KKyAgICBhZGRIZWFwU25h
cHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKKyAgICB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTmV2ZXIgY2FsbGVkIik7CisgICAgfSwKKworICAgIC8qKiBAZGVwcmVjYXRlZCBU
byBiZSByZW1vdmVkIGZyb20gdGhlIHByb3RvY29sICovCisgICAgZmluaXNoSGVhcFNuYXBzaG90
OiBmdW5jdGlvbih1aWQpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5ldmVyIGNh
bGxlZCIpOworICAgIH0sCisKKyAgICAvKiogQGRlcHJlY2F0ZWQgVG8gYmUgcmVtb3ZlZCBmcm9t
IHRoZSBwcm90b2NvbCAqLworICAgIHJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzOiBmdW5jdGlv
bihkb25lLCB0b3RhbCkKKyAgICB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTmV2ZXIgY2Fs
bGVkIik7CisgICAgfSwKKwogICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBl
LnByb3RvdHlwZQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMKaW5kZXggYjAxMDdlMDdhMTAy
ODc5NjJkZjJkOTdkMWZiNmZjMmJlNTU3ZDEwMi4uZjQzM2MxMzA2ZmJhNWQwZjMyOGU3NjlmODE5
YjdjYTgxYzc4ZWI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcwpAQCAtMjg2LDE2ICsyODYs
MTUgQEAgV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewog
CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAg
ICAgICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBi
dXR0b25DbGlja2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVjb3Jk
aW5nKSB7Ci0gICAgICAgICAgICB0aGlzLl9zdG9wUmVjb3JkaW5nUHJvZmlsZShwcm9maWxlc1Bh
bmVsKTsKKyAgICAgICAgICAgIHRoaXMuX3N0b3BSZWNvcmRpbmdQcm9maWxlKCk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLl9z
dGFydFJlY29yZGluZ1Byb2ZpbGUocHJvZmlsZXNQYW5lbCk7CisgICAgICAgICAgICB0aGlzLl9z
dGFydFJlY29yZGluZ1Byb2ZpbGUoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfSwKQEAgLTMyMCwyMCArMzE5LDEzIEBAIFdlYkluc3BlY3Rvci5DU1NTZWxlY3Rv
clByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fcmVjb3JkaW5nID0gaXNQ
cm9maWxpbmc7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKi8KLSAgICBfc3RhcnRSZWNvcmRp
bmdQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIF9zdGFydFJlY29yZGluZ1By
b2ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IHRydWU7
CiAgICAgICAgIENTU0FnZW50LnN0YXJ0U2VsZWN0b3JQcm9maWxlcigpOwotICAgICAgICBwcm9m
aWxlc1BhbmVsLnNldFJlY29yZGluZ1Byb2ZpbGUoV2ViSW5zcGVjdG9yLkNTU1NlbGVjdG9yUHJv
ZmlsZVR5cGUuVHlwZUlkLCB0cnVlKTsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAg
IF9zdG9wUmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBfc3Rv
cFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8qKgogICAgICAg
ICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKQEAgLTM0Niw5ICszMzgsNyBAQCBX
ZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgICAgIHZhciB1aWQgPSB0aGlzLl9wcm9maWxlVWlkKys7CiAgICAgICAgICAgICB2YXIgdGl0
bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb2ZpbGUgJWQiLCB1aWQpICsgU3RyaW5nLnNw
cmludGYoIiAoJXMpIiwgTnVtYmVyLnNlY29uZHNUb1N0cmluZyhwcm9maWxlLnRvdGFsVGltZSAv
IDEwMDApKTsKLSAgICAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdlYkluc3BlY3Rv
ci5DU1NQcm9maWxlSGVhZGVyKHRoaXMsIHRpdGxlLCB1aWQsIHByb2ZpbGUpOwotICAgICAgICAg
ICAgcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOwotICAgICAg
ICAgICAgcHJvZmlsZXNQYW5lbC5zZXRSZWNvcmRpbmdQcm9maWxlKFdlYkluc3BlY3Rvci5DU1NT
ZWxlY3RvclByb2ZpbGVUeXBlLlR5cGVJZCwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5hZGRQ
cm9maWxlKG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvZmlsZUhlYWRlcih0aGlzLCB0aXRsZSwgdWlk
LCBwcm9maWxlKSk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFz
UHJvZmlsZVZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZh
c1Byb2ZpbGVWaWV3LmpzCmluZGV4IDliOTEyMjkyMzI0YjFhZjNjM2MxMTA0NDVkYTlkNzgyYzM4
ZTJiZDAuLjhmNWY0YTFlMWU2YmI3MWIxOWViY2IxMWNkOWE4OWRiYzIzM2M2NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYW52YXNQcm9maWxl
Vmlldy5qcwpAQCAtNTM4LDQxICs1MzgsMzMgQEAgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVU
eXBlLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBA
cmV0dXJuIHtib29sZWFufQogICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHBy
b2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuX3JlY29yZGluZykgewogICAgICAgICAgICAgdGhpcy5fcmVjb3JkaW5nID0g
ZmFsc2U7CiAgICAgICAgICAgICB0aGlzLl9zdG9wRnJhbWVDYXB0dXJpbmcoKTsKICAgICAgICAg
fSBlbHNlIGlmICh0aGlzLl9pc1NpbmdsZUZyYW1lTW9kZSgpKSB7CiAgICAgICAgICAgICB0aGlz
Ll9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuX3J1blNpbmdsZUZyYW1lQ2Fw
dHVyaW5nKHByb2ZpbGVzUGFuZWwpOworICAgICAgICAgICAgdGhpcy5fcnVuU2luZ2xlRnJhbWVD
YXB0dXJpbmcoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRoaXMuX3JlY29yZGlu
ZyA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLl9zdGFydEZyYW1lQ2FwdHVyaW5nKHByb2ZpbGVz
UGFuZWwpOworICAgICAgICAgICAgdGhpcy5fc3RhcnRGcmFtZUNhcHR1cmluZygpOwogICAgICAg
ICB9Ci0gICAgICAgIHByb2ZpbGVzUGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0
b3IuQ2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkLCB0aGlzLl9yZWNvcmRpbmcpOwogICAgICAgICBy
ZXR1cm4gdGhpcy5fcmVjb3JkaW5nOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAg
X3J1blNpbmdsZUZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIF9y
dW5TaW5nbGVGcmFtZUNhcHR1cmluZzogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIGZy
YW1lSWQgPSB0aGlzLl9zZWxlY3RlZEZyYW1lSWQoKTsKLSAgICAgICAgQ2FudmFzQWdlbnQuY2Fw
dHVyZUZyYW1lKGZyYW1lSWQsIHRoaXMuX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUuYmluZCh0aGlz
LCBwcm9maWxlc1BhbmVsLCBmcmFtZUlkKSk7CisgICAgICAgIENhbnZhc0FnZW50LmNhcHR1cmVG
cmFtZShmcmFtZUlkLCB0aGlzLl9kaWRTdGFydENhcHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgZnJh
bWVJZCkpOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgX3N0YXJ0RnJhbWVDYXB0
dXJpbmc6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgX3N0YXJ0RnJhbWVDYXB0dXJpbmc6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBmcmFtZUlkID0gdGhpcy5fc2VsZWN0ZWRG
cmFtZUlkKCk7Ci0gICAgICAgIENhbnZhc0FnZW50LnN0YXJ0Q2FwdHVyaW5nKGZyYW1lSWQsIHRo
aXMuX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUuYmluZCh0aGlzLCBwcm9maWxlc1BhbmVsLCBmcmFt
ZUlkKSk7CisgICAgICAgIENhbnZhc0FnZW50LnN0YXJ0Q2FwdHVyaW5nKGZyYW1lSWQsIHRoaXMu
X2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUuYmluZCh0aGlzLCBmcmFtZUlkKSk7CiAgICAgfSwKIAog
ICAgIF9zdG9wRnJhbWVDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKQEAgLTU5MCwxOSArNTgyLDE4IEBA
IFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAog
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2Zp
bGVzUGFuZWwKICAgICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGZyYW1lSWQKICAgICAg
KiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKICAgICAgKiBAcGFyYW0ge0NhbnZhc0Fn
ZW50LlRyYWNlTG9nSWR9IHRyYWNlTG9nSWQKICAgICAgKi8KLSAgICBfZGlkU3RhcnRDYXB0dXJp
bmdGcmFtZTogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCwgZnJhbWVJZCwgZXJyb3IsIHRyYWNlTG9n
SWQpCisgICAgX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWU6IGZ1bmN0aW9uKGZyYW1lSWQsIGVycm9y
LCB0cmFjZUxvZ0lkKQogICAgIHsKICAgICAgICAgaWYgKGVycm9yIHx8IHRoaXMuX2xhc3RQcm9m
aWxlSGVhZGVyICYmIHRoaXMuX2xhc3RQcm9maWxlSGVhZGVyLnRyYWNlTG9nSWQoKSA9PT0gdHJh
Y2VMb2dJZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIHByb2ZpbGVIZWFkZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIodGhpcywgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJUcmFjZSBMb2cgJWQiLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCksIHRoaXMuX25l
eHRQcm9maWxlVWlkLCB0cmFjZUxvZ0lkLCBmcmFtZUlkKTsKICAgICAgICAgKyt0aGlzLl9uZXh0
UHJvZmlsZVVpZDsKICAgICAgICAgdGhpcy5fbGFzdFByb2ZpbGVIZWFkZXIgPSBwcm9maWxlSGVh
ZGVyOwotICAgICAgICBwcm9maWxlc1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZUhlYWRl
cik7CisgICAgICAgIHRoaXMuYWRkUHJvZmlsZShwcm9maWxlSGVhZGVyKTsKICAgICAgICAgcHJv
ZmlsZUhlYWRlci5fdXBkYXRlQ2FwdHVyaW5nU3RhdHVzKCk7CiAgICAgfSwKIApAQCAtNjI4LDEx
ICs2MTksMjMgQEAgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsK
ICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUKICAgICAgKi8KLSAgICByZXNldDogZnVuY3Rpb24o
KQorICAgIF9yZXNldDogZnVuY3Rpb24oKQogICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlBy
b2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVzZXQuY2FsbCh0aGlzKTsKICAgICAgICAgdGhpcy5fbmV4
dFByb2ZpbGVVaWQgPSAxOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAg
ICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQorICAgICAq
LworICAgIHJlbW92ZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICBX
ZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUuY2FsbCh0aGlz
LCBwcm9maWxlKTsKKyAgICAgICAgaWYgKHRoaXMuX3JlY29yZGluZyAmJiBwcm9maWxlID09PSB0
aGlzLl9sYXN0UHJvZmlsZUhlYWRlcikKKyAgICAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGZh
bHNlOworICAgIH0sCisKICAgICBzZXRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbihpc1Byb2Zp
bGluZykKICAgICB7CiAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGlzUHJvZmlsaW5nOwpAQCAt
NjQxLDcgKzY0NCw3IEBAIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUg
PSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0
aXRsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAq
IEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVh
dGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0aXRsZSkKICAgICB7CkBAIC02NTIsNyArNjU1
LDcgQEAgV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICAv
KioKICAgICAgKiBAb3ZlcnJpZGUKICAgICAgKiBAcGFyYW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmls
ZUhlYWRlcn0gcHJvZmlsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVh
ZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAg
Ki8KICAgICBjcmVhdGVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKQEAgLTg3NCwx
NSArODc3LDEyIEBAIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9
IHsKIAogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7IVdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCiAgICAgICovCi0gICAgZGlzcG9zZTog
ZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBkaXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fdHJhY2VMb2dJZCkgewogICAgICAgICAgICAgQ2FudmFzQWdlbnQu
ZHJvcFRyYWNlTG9nKHRoaXMuX3RyYWNlTG9nSWQpOwogICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMuX3JlcXVlc3RTdGF0dXNUaW1lcik7Ci0gICAgICAgICAgICBpZiAodGhpcy5fYWxpdmUp
Ci0gICAgICAgICAgICAgICAgcHJvZmlsZXNQYW5lbC5zZXRSZWNvcmRpbmdQcm9maWxlKFdlYklu
c3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5UeXBlSWQsIGZhbHNlKTsKICAgICAgICAgICAgIHRo
aXMuX2FsaXZlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCmluZGV4IGZi
NzY1ZjlhNTE0ODNiOWY1ZDg0OGY4MWY1OGExNjlhMTAxY2I5N2MuLjE2Y2JhNmE4OTBlOWQxNTk1
ZGY4MjMxNDQwOWY0NjJmNzU1M2VmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKQEAgLTQyNyw3ICs0MjcsNyBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICovCiAg
ICAgX3Byb2ZpbGVzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5wYXJl
bnQuZ2V0UHJvZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJ
ZCk7CisgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKS5wcm9maWxlczsKICAgICB9LAogCiAg
ICAgLyoqCkBAIC03NTQsMTAgKzc1NCwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmll
dy5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5Qcm9maWxlVHlwZX0KKyAqIEBpbXBsZW1lbnRzIHtIZWFwUHJvZmlsZXJBZ2VudC5E
aXNwYXRjaGVyfQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUgPSBm
dW5jdGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJUYWtlIEhlYXAgU25hcHNob3QiKSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckhlYXBQcm9maWxlckRpc3BhdGNoZXIodGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQgPSAiSEVBUCI7CkBAIC03NzAsMTIgKzc3MiwxMSBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAg
ICAgLyoqCiAgICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAg
ICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBidXR0
b25DbGlja2VkOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBwcm9maWxlc1BhbmVsLnRha2VI
ZWFwU25hcHNob3QoKTsKKyAgICAgICAgdGhpcy5fdGFrZUhlYXBTbmFwc2hvdCgpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfSwKIApAQCAtNzkyLDcgKzc5Myw3IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICog
QG92ZXJyaWRlCiAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0
b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBm
dW5jdGlvbih0aXRsZSkKICAgICB7CkBAIC04MDMsMTMgKzgwNCw5MyBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBv
dmVycmlkZQogICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0g
cHJvZmlsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAg
ICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBj
cmVhdGVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50aXRsZSwgcHJv
ZmlsZS51aWQsIHByb2ZpbGUubWF4SlNPYmplY3RJZCB8fCAwKTsKICAgICB9LAogCisgICAgX3Rh
a2VIZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0ZW1wb3JhcnlQ
cm9maWxlID0gdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAgICAgICBpZiAoIXRlbXBv
cmFyeVByb2ZpbGUpCisgICAgICAgICAgICB0aGlzLmFkZFByb2ZpbGUodGhpcy5jcmVhdGVUZW1w
b3JhcnlQcm9maWxlKCkpOworICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNuYXBz
aG90KHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgICAgICBXZWJJbnNwZWN0b3IudXNlck1ldHJp
Y3MuUHJvZmlsZXNIZWFwUHJvZmlsZVRha2VuLnJlY29yZCgpOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge0hlYXBQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGVI
ZWFkZXIKKyAgICAgKi8KKyAgICBhZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlSGVh
ZGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHRoaXMuY3JlYXRlUHJvZmlsZShw
cm9maWxlSGVhZGVyKSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKKyAg
ICAgKi8KKyAgICBhZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKKyAg
ICB7CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtl
S2V5KHVpZCldOworICAgICAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgICAgIHByb2ZpbGUudHJh
bnNmZXJDaHVuayhjaHVuayk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKKyAgICAgKi8KKyAgICBmaW5pc2hIZWFwU25hcHNo
b3Q6IGZ1bmN0aW9uKHVpZCkKKyAgICB7CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJv
ZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCldOworICAgICAgICBpZiAocHJvZmlsZSkKKyAg
ICAgICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90KCk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkb25lCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IHRvdGFsCisgICAgICovCisgICAgcmVwb3J0SGVhcFNuYXBzaG90UHJv
Z3Jlc3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUg
PSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKCk7CisgICAgICAgIGlmIChwcm9maWxlKQorICAg
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLkV2ZW50cy5Qcm9ncmVzc1VwZGF0ZWQsIHsicHJvZmlsZSI6IHByb2ZpbGUsICJkb25l
IjogZG9uZSwgInRvdGFsIjogdG90YWx9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92
ZXJyaWRlCisgICAgICovCisgICAgcmVzZXRQcm9maWxlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fcmVzZXQoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRl
CisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAg
ICAgKi8KKyAgICByZW1vdmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlLmNhbGwo
dGhpcywgcHJvZmlsZSk7CisgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSkKKyAgICAg
ICAgICAgIEhlYXBQcm9maWxlckFnZW50LnJlbW92ZVByb2ZpbGUocHJvZmlsZS51aWQpOworICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KHRoaXM6V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLCA/c3RyaW5nLCBBcnJheS48UHJvZmlsZXJB
Z2VudC5Qcm9maWxlSGVhZGVyPil9IHBvcHVsYXRlQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBfcmVx
dWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKHBvcHVsYXRlQ2FsbGJhY2spCisgICAg
eworICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0ZUNh
bGxiYWNrKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUucHJvdG90eXBlCiB9CiAKQEAgLTkwMSw2ICs5ODIsOSBAQCBXZWJJbnNwZWN0b3IuSGVhcFBy
b2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWNlaXZlciA9IGxvYWRl
clByb3h5OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKi8KICAg
ICBkaXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVjZWl2ZXIp
CkBAIC05MTUsNyArOTk5LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgKi8KICAgICBfdXBkYXRlVHJhbnNmZXJQcm9ncmVzczogZnVuY3Rpb24o
dmFsdWUsIG1heFZhbHVlKQogICAgIHsKLSAgICAgICAgdmFyIHBlcmNlbnRWYWx1ZSA9ICgobWF4
VmFsdWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAqIDEwMCkudG9GaXhlZCgyKTsKKyAgICAg
ICAgdmFyIHBlcmNlbnRWYWx1ZSA9ICgobWF4VmFsdWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAw
KSAqIDEwMCkudG9GaXhlZCgwKTsKICAgICAgICAgaWYgKHRoaXMuX3NhdmluZ1RvRmlsZSkKICAg
ICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlNhdmluZ1x1MjAyNiAlZFwlIiwgcGVyY2VudFZhbHVlKTsKICAgICAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1v
cnlTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05h
dGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwppbmRleCA0ZWU0YjBlZDRjNTc3NGM2MGM2MGM3Nzkw
OGU1MDQwNjMzYTMyNmRlLi4wMmY2MzE4ZWU3YmU5NzhlNmU5NDEwYmIwYTdiMmU4NjY1NjI3NTkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1l
bW9yeVNuYXBzaG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwpAQCAtMjM1LDEwICsyMzUsMTIgQEAgV2Vi
SW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25z
dHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0KKyAqIEBpbXBs
ZW1lbnRzIHtNZW1vcnlBZ2VudC5EaXNwYXRjaGVyfQogICovCiBXZWJJbnNwZWN0b3IuTmF0aXZl
U25hcHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlw
ZS5UeXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGFrZSBOYXRpdmUgSGVhcCBTbmFwc2hv
dCIpKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcih0aGlz
KTsKICAgICB0aGlzLl9uZXh0UHJvZmlsZVVpZCA9IDE7CiB9CiAKQEAgLTI1MiwxNSArMjU0LDE0
IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsK
IAogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0dXJuIHtib29sZWFufQog
ICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAg
YnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHByb2ZpbGVIZWFk
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlcih0aGlzLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90ICVkIiwgdGhpcy5fbmV4dFByb2ZpbGVVaWQp
LCB0aGlzLl9uZXh0UHJvZmlsZVVpZCk7CiAgICAgICAgICsrdGhpcy5fbmV4dFByb2ZpbGVVaWQ7
CiAgICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSB0cnVlOwotICAgICAgICBwcm9m
aWxlc1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZUhlYWRlcik7CisgICAgICAgIHRoaXMu
YWRkUHJvZmlsZShwcm9maWxlSGVhZGVyKTsKICAgICAgICAgcHJvZmlsZUhlYWRlci5sb2FkKGZ1
bmN0aW9uKCkgeyB9KTsKIAogICAgICAgICAvKioKQEAgLTM0Nyw2ICszNDgsMTUgQEAgV2ViSW5z
cGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIodGhpcywg
cHJvZmlsZS50aXRsZSwgLTEpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUK
KyAgICAgKiBAcGFyYW0ge01lbW9yeUFnZW50LkhlYXBTbmFwc2hvdENodW5rfSBjaHVuaworICAg
ICAqLworICAgIGFkZE5hdGl2ZVNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKGNodW5rKQorICAgIHsK
KyAgICAgICAgdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpLmFkZE5hdGl2ZVNuYXBzaG90Q2h1
bmsoY2h1bmspOworICAgIH0sCisKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUKIH0KIApAQCAtNDAxLDYgKzQxMSw4IEBAIFdlYkluc3BlY3Rvci5OYXRp
dmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogLyoqCiAgKiBAY29uc3RydWN0
b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlld30KKyAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHBhcmVudAorICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlSGVhZGVyfSBwcm9maWxlCiAgKi8KIFdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwU25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9maWxlKQog
ewpAQCAtNDM5LDE1ICs0NTEsMTQgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVByb2ZpbGVU
eXBlLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBA
cmV0dXJuIHtib29sZWFufQogICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHBy
b2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgdmFyIHByb2ZpbGVIZWFkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVByb2Zp
bGVIZWFkZXIodGhpcywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTbmFwc2hvdCAlZCIsIHRoaXMu
X25leHRQcm9maWxlVWlkKSwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpOwogICAgICAgICArK3RoaXMu
X25leHRQcm9maWxlVWlkOwogICAgICAgICBwcm9maWxlSGVhZGVyLmlzVGVtcG9yYXJ5ID0gdHJ1
ZTsKLSAgICAgICAgcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIp
OworICAgICAgICB0aGlzLmFkZFByb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAgIC8qKgog
ICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGVycm9yCiAgICAgICAgICAqIEBwYXJhbSB7P01l
bW9yeUFnZW50Lk1lbW9yeUJsb2NrfSBtZW1vcnlCbG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4IDlhYzc1MTEwYzlj
NDRlYWRlNTQwN2JhZTZlZmMzNDNmZDE0NTgzNTYuLmUwZGIwNTBhMzNkNTA4OGNlMTk1OTU1ZDhm
ODcxZmI5OWJhOTE0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUHJvZmlsZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTM1LDE0ICszNSwxOCBAQCBXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGUgPSBmdW5jdGlvbihpZCwgbmFtZSkKIHsKICAgICB0aGlzLl9pZCA9IGlkOwog
ICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIC8qKgotICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0
b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudH0KLSAgICAgKi8KKyAgICAvKiogQHR5cGUgeyFB
cnJheS48IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyPn0gKi8KKyAgICB0aGlzLl9wcm9maWxl
cyA9IFtdOworICAgIHRoaXMuX3Byb2ZpbGVzSWRNYXAgPSB7fTsKKyAgICAvKiogQHR5cGUge1dl
Ykluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50fSAqLwogICAgIHRoaXMudHJlZUVs
ZW1lbnQgPSBudWxsOwogfQogCiBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzID0gewot
ICBWaWV3VXBkYXRlZDogInZpZXctdXBkYXRlZCIsCisgICAgQWRkUHJvZmlsZUhlYWRlcjogImFk
ZC1wcm9maWxlLWhlYWRlciIsCisgICAgUmVtb3ZlUHJvZmlsZUhlYWRlcjogInJlbW92ZS1wcm9m
aWxlLWhlYWRlciIsCisgICAgUHJvZ3Jlc3NVcGRhdGVkOiAicHJvZ3Jlc3MtdXBkYXRlZCIsCisg
ICAgVmlld1VwZGF0ZWQ6ICJ2aWV3LXVwZGF0ZWQiCiB9CiAKIFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUgPSB7CkBAIC03MiwyMSArNzYsMjQgQEAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqIEByZXR1cm4g
e2Jvb2xlYW59CiAgICAgICovCi0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQ
YW5lbCkKKyAgICBidXR0b25DbGlja2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfSwKIAotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgZ2V0IGRlc2Ny
aXB0aW9uKCkKICAgICB7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCi0gICAgZ2V0IGRl
c2NyaXB0aW9uKCkKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0
b3IuUHJvZmlsZUhlYWRlcj59CisgICAgICovCisgICAgZ2V0IHByb2ZpbGVzKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2ZpbGVzLmZpbHRlcihm
dW5jdGlvbihwcm9maWxlKSB7IHJldHVybiAhcHJvZmlsZS5pc1RlbXBvcmFyeTsgfSk7CiAgICAg
fSwKIAogICAgIC8qKgpAQCAtOTcsMTAgKzEwNCwyMCBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9LAogCisgICAgLyoq
CisgICAgICogQG5vc2lkZWVmZmVjdHMKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdWlkCisgICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICovCisgICAgZ2V0
UHJvZmlsZTogZnVuY3Rpb24odWlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Zp
bGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQpXTsKKyAgICB9LAorCiAgICAgLy8gTXVzdCBiZSBp
bXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gdGl0bGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAg
ICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAg
Y3JlYXRlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odGl0bGUpCiAgICAgewpAQCAtMTA5LDEz
ICsxMjYsMTAzIEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAKICAg
ICAvKioKICAgICAgKiBAcGFyYW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmls
ZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEBy
ZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVQ
cm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJOb3Qgc3VwcG9ydGVkIGZvciAiICsgdGhpcy5fbmFtZSArICIgcHJvZmlsZXMuIik7CiAgICAg
fSwKIAorICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3RzCisgICAgICogQHBhcmFtIHtudW1i
ZXJ9IGlkCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIF9tYWtlS2V5OiBm
dW5jdGlvbihpZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpZCArICcvJyArIGVzY2FwZSh0aGlz
LmlkKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlBy
b2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAgICBhZGRQcm9maWxlOiBmdW5jdGlvbihw
cm9maWxlKQorICAgIHsKKyAgICAgICAgdGhpcy5fcHJvZmlsZXMucHVzaChwcm9maWxlKTsKKyAg
ICAgICAgLy8gRklYTUU6IHVpZCBvbmx5IGJhc2VkIGtleSBzaG91bGQgYmUgZW5vdWdoLgorICAg
ICAgICB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkocHJvZmlsZS51aWQpXSA9IHBy
b2ZpbGU7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5Qcm9maWxlVHlwZS5FdmVudHMuQWRkUHJvZmlsZUhlYWRlciwgcHJvZmlsZSk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBw
cm9maWxlCisgICAgICovCisgICAgcmVtb3ZlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAg
ICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wcm9maWxlc1tpXS51aWQgPT09IHByb2ZpbGUu
dWlkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZXMuc3BsaWNlKGksIDEpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRl
bGV0ZSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkocHJvZmlsZS51aWQpXTsKKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQG5vc2lkZWVmZmVjdHMKKyAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKi8KKyAgICBmaW5kVGVtcG9yYXJ5UHJv
ZmlsZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9wcm9maWxlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVz
W2ldLmlzVGVtcG9yYXJ5KQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlc1tp
XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX3Jlc2V0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgcHJvZmlsZXMgPSB0aGlzLl9wcm9maWxl
cy5zbGljZSgwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlcy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgdmFyIHByb2ZpbGUgPSBwcm9maWxlc1tpXTsKKyAgICAgICAg
ICAgIHZhciB2aWV3ID0gcHJvZmlsZS5leGlzdGluZ1ZpZXcoKTsKKyAgICAgICAgICAgIGlmICh2
aWV3KSB7CisgICAgICAgICAgICAgICAgdmlldy5kZXRhY2goKTsKKyAgICAgICAgICAgICAgICBp
ZiAoImRpc3Bvc2UiIGluIHZpZXcpCisgICAgICAgICAgICAgICAgICAgIHZpZXcuZGlzcG9zZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2ZW50cy5SZW1vdmVQcm9maWxlSGVhZGVyLCBw
cm9maWxlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnRyZWVFbGVtZW50LnJlbW92ZUNoaWxk
cmVuKCk7CisgICAgICAgIHRoaXMuX3Byb2ZpbGVzID0gW107CisgICAgICAgIHRoaXMuX3Byb2Zp
bGVzSWRNYXAgPSB7fTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtmdW5jdGlv
bih0aGlzOldlYkluc3BlY3Rvci5Qcm9maWxlVHlwZSwgP3N0cmluZywgIUFycmF5LjwhUHJvZmls
ZXJBZ2VudC5Qcm9maWxlSGVhZGVyPil9IHBvcHVsYXRlQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBf
cmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKHBvcHVsYXRlQ2FsbGJhY2spCisg
ICAgeworICAgIH0sCisKKyAgICBfcG9wdWxhdGVQcm9maWxlczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IKKyAgICAgICAg
ICogQHBhcmFtIHshQXJyYXkuPCFQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXI+fSBwcm9maWxl
SGVhZGVycworICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gcG9wdWxhdGVDYWxsYmFjayhl
cnJvciwgcHJvZmlsZUhlYWRlcnMpIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBwcm9maWxlSGVhZGVycy5zb3J0KGZ1bmN0aW9u
KGEsIGIpIHsgcmV0dXJuIGEudWlkIC0gYi51aWQ7IH0pOworICAgICAgICAgICAgdmFyIGNvdW50
ID0gcHJvZmlsZUhlYWRlcnMubGVuZ3RoOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvZmlsZSh0aGlzLmNyZWF0
ZVByb2ZpbGUocHJvZmlsZUhlYWRlcnNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9y
ZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZChwb3B1bGF0ZUNhbGxiYWNrLmJpbmQodGhpcykpOwor
ICAgIH0sCisKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlCiB9
CiAKQEAgLTEyOSwxMyArMjM2LDggQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIgPSBmdW5j
dGlvbihwcm9maWxlVHlwZSwgdGl0bGUsIHVpZCkKIHsKICAgICB0aGlzLl9wcm9maWxlVHlwZSA9
IHByb2ZpbGVUeXBlOwogICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICBpZiAodWlkID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgdGhpcy51aWQgPSAtMTsKLSAgICAgICAgdGhpcy5pc1RlbXBv
cmFyeSA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy51aWQgPSB1aWQ7Ci0gICAg
ICAgIHRoaXMuaXNUZW1wb3JhcnkgPSBmYWxzZTsKLSAgICB9CisgICAgdGhpcy5pc1RlbXBvcmFy
eSA9IHVpZCA9PT0gdW5kZWZpbmVkOworICAgIHRoaXMudWlkID0gdGhpcy5pc1RlbXBvcmFyeSA/
IC0xIDogdWlkOwogICAgIHRoaXMuX2Zyb21GaWxlID0gZmFsc2U7CiB9CiAKQEAgLTE4NCwxMCAr
Mjg2LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZC4iKTsKICAgICB9LAogCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFu
ZWwKLSAgICAgKi8KLSAgICBkaXNwb3NlOiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIGRp
c3Bvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgfSwKIApAQCAtMjg1LDggKzM4NCw2IEBAIFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Byb2ZpbGVW
aWV3U3RhdHVzQmFySXRlbXNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKICAgICB0aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyLmNsYXNzTmFt
ZSA9ICJzdGF0dXMtYmFyLWl0ZW1zIjsKIAotICAgIC8qKiBAdHlwZSB7IUFycmF5LjwhV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXI+fSAqLwotICAgIHRoaXMuX3Byb2ZpbGVzID0gW107CiAgICAg
dGhpcy5fcHJvZmlsZXJFbmFibGVkID0gIUNhcGFiaWxpdGllcy5wcm9maWxlckNhdXNlc1JlY29t
cGlsYXRpb247CiAKICAgICB0aGlzLl9sYXVuY2hlclZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlBy
b2ZpbGVMYXVuY2hlclZpZXcodGhpcyk7CkBAIC0zMDUsMTAgKzQwMiw2IEBAIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsID0gZnVuY3Rpb24oKQogICAgIGlmIChXZWJJbnNwZWN0b3IuZXhwZXJp
bWVudHNTZXR0aW5ncy5jYW52YXNJbnNwZWN0aW9uLmlzRW5hYmxlZCgpKQogICAgICAgICB0aGlz
Ll9yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUo
KSk7CiAKLSAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUHJvZmlsZXJEaXNwYXRjaGVyKG5l
dyBXZWJJbnNwZWN0b3IuUHJvZmlsZXJEaXNwYXRjaGVyKHRoaXMpKTsKLSAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVySGVhcFByb2ZpbGVyRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkhl
YXBQcm9maWxlckRpc3BhdGNoZXIodGhpcykpOwotICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJNZW1vcnlEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuTWVtb3J5RGlzcGF0Y2hlcih0aGlz
KSk7Ci0KICAgICB0aGlzLl9jcmVhdGVGaWxlU2VsZWN0b3JFbGVtZW50KCk7CiAgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFuZGxlQ29udGV4
dE1lbnVFdmVudC5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtMzM0LDE0ICs0MjcsMTQgQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCEhdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZShX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKSkgeworICAgICAgICB2
YXIgcHJvZmlsZVR5cGUgPSB0aGlzLmdldFByb2ZpbGVUeXBlKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAgICAgICBpZiAoISFwcm9maWxlVHlwZS5maW5k
VGVtcG9yYXJ5UHJvZmlsZSgpKSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQ2FuJ3QgbG9hZCBwcm9maWxlIHdoZW4gb3RoZXIgcHJvZmlsZSBp
cyByZWNvcmRpbmcuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgdmFyIHByb2ZpbGVUeXBlID0gdGhpcy5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKICAgICAgICAgdmFyIHRlbXBvcmFyeVByb2Zp
bGUgPSBwcm9maWxlVHlwZS5jcmVhdGVUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5Qcm9m
aWxlc1BhbmVsRGVzY3JpcHRvci5Vc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUgKyAiLiIgKyBmaWxl
Lm5hbWUpOwotICAgICAgICB0aGlzLmFkZFByb2ZpbGVIZWFkZXIodGVtcG9yYXJ5UHJvZmlsZSk7
CisgICAgICAgIHByb2ZpbGVUeXBlLmFkZFByb2ZpbGUodGVtcG9yYXJ5UHJvZmlsZSk7CiAKICAg
ICAgICAgdGVtcG9yYXJ5UHJvZmlsZS5fZnJvbUZpbGUgPSB0cnVlOwogICAgICAgICB0ZW1wb3Jh
cnlQcm9maWxlLmxvYWRGcm9tRmlsZShmaWxlKTsKQEAgLTM1NSwxOSArNDQ4LDIzIEBAIFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIHRvZ2dsZVJlY29yZEJ1
dHRvbjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIGlzUHJvZmlsaW5nID0gdGhpcy5f
c2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25DbGlja2VkKHRoaXMpOwotICAgICAgICB0aGlzLnJl
Y29yZEJ1dHRvbi50b2dnbGVkID0gaXNQcm9maWxpbmc7Ci0gICAgICAgIHRoaXMucmVjb3JkQnV0
dG9uLnRpdGxlID0gdGhpcy5fc2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25Ub29sdGlwOwotICAg
ICAgICBpZiAoaXNQcm9maWxpbmcpCi0gICAgICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcucHJv
ZmlsZVN0YXJ0ZWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJW
aWV3LnByb2ZpbGVGaW5pc2hlZCgpOworICAgICAgICB2YXIgaXNQcm9maWxpbmcgPSB0aGlzLl9z
ZWxlY3RlZFByb2ZpbGVUeXBlLmJ1dHRvbkNsaWNrZWQoKTsKKyAgICAgICAgdGhpcy5zZXRSZWNv
cmRpbmdQcm9maWxlKHRoaXMuX3NlbGVjdGVkUHJvZmlsZVR5cGUuaWQsIGlzUHJvZmlsaW5nKTsK
KyAgICB9LAorCisgICAgX3BvcHVsYXRlQWxsUHJvZmlsZXM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fcHJvZmlsZXJFbmFibGVkIHx8IHRoaXMuX3Byb2ZpbGVzV2VyZVJl
cXVlc3RlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcHJvZmlsZXNXZXJl
UmVxdWVzdGVkID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgdHlwZUlkIGluIHRoaXMuX3Byb2Zp
bGVUeXBlc0J5SWRNYXApCisgICAgICAgICAgICB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwW3R5
cGVJZF0uX3BvcHVsYXRlUHJvZmlsZXMoKTsKICAgICB9LAogCiAgICAgd2FzU2hvd246IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUud2FzU2hv
d24uY2FsbCh0aGlzKTsKLSAgICAgICAgdGhpcy5fcG9wdWxhdGVQcm9maWxlcygpOworICAgICAg
ICB0aGlzLl9wb3B1bGF0ZUFsbFByb2ZpbGVzKCk7CiAgICAgfSwKIAogICAgIF9wcm9maWxlcldh
c0VuYWJsZWQ6IGZ1bmN0aW9uKCkKQEAgLTM3OSwxMSArNDc2LDEyIEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9yZXNldCgpOwogICAg
ICAgICBpZiAodGhpcy5pc1Nob3dpbmcoKSkKLSAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlUHJv
ZmlsZXMoKTsKKyAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlQWxsUHJvZmlsZXMoKTsKICAgICB9
LAogCiAgICAgX3Byb2ZpbGVyV2FzRGlzYWJsZWQ6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgICAg
IGNvbnNvbGUudHJhY2UoKTsKICAgICAgICAgaWYgKCF0aGlzLl9wcm9maWxlckVuYWJsZWQpCiAg
ICAgICAgICAgICByZXR1cm47CiAKQEAgLTQxNywzMCArNTE1LDEzIEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5Q
YW5lbC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKTsKIAotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgdmll
dyA9IHRoaXMuX3Byb2ZpbGVzW2ldLmV4aXN0aW5nVmlldygpOwotICAgICAgICAgICAgaWYgKHZp
ZXcpIHsKLSAgICAgICAgICAgICAgICB2aWV3LmRldGFjaCgpOwotICAgICAgICAgICAgICAgIGlm
ICgiZGlzcG9zZSIgaW4gdmlldykKLSAgICAgICAgICAgICAgICAgICAgdmlldy5kaXNwb3NlKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9wcm9maWxlc1tpXS5kaXNwb3NlKHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLnZpc2libGVWaWV3OworICAgICAg
ICBmb3IgKHZhciB0eXBlSWQgaW4gdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcCkKKyAgICAgICAg
ICAgIHRoaXMuX3Byb2ZpbGVUeXBlc0J5SWRNYXBbdHlwZUlkXS5fcmVzZXQoKTsKIAorICAgICAg
ICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsKICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFF1
ZXJ5OwogICAgICAgICB0aGlzLnNlYXJjaENhbmNlbGVkKCk7CiAKLSAgICAgICAgZm9yICh2YXIg
aWQgaW4gdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcCkgewotICAgICAgICAgICAgdmFyIHByb2Zp
bGVUeXBlID0gdGhpcy5fcHJvZmlsZVR5cGVzQnlJZE1hcFtpZF07Ci0gICAgICAgICAgICB2YXIg
dHJlZUVsZW1lbnQgPSBwcm9maWxlVHlwZS50cmVlRWxlbWVudDsKLSAgICAgICAgICAgIHRyZWVF
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICB0cmVlRWxlbWVudC5oaWRkZW4g
PSB0cnVlOwotICAgICAgICAgICAgcHJvZmlsZVR5cGUucmVzZXQoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX3Byb2ZpbGVzID0gW107Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzSWRNYXAg
PSB7fTsKICAgICAgICAgdGhpcy5fcHJvZmlsZUdyb3VwcyA9IHt9OwogICAgICAgICB0aGlzLl9w
cm9maWxlR3JvdXBzRm9yTGlua3MgPSB7fTsKICAgICAgICAgdGhpcy5fcHJvZmlsZXNXZXJlUmVx
dWVzdGVkID0gZmFsc2U7CkBAIC00ODIsNyArNTYzLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Qcm9maWxlVHlwZX0gcHJvZmlsZVR5cGUKKyAgICAgKiBAcGFyYW0geyFXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGV9IHByb2ZpbGVUeXBlCiAgICAgICovCiAgICAgX3JlZ2lzdGVy
UHJvZmlsZVR5cGU6IGZ1bmN0aW9uKHByb2ZpbGVUeXBlKQogICAgIHsKQEAgLTQ5Myw2ICs1NzQs
OSBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQocHJvZmlsZVR5cGUudHJlZUVsZW1lbnQpOwogICAg
ICAgICBwcm9maWxlVHlwZS50cmVlRWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFuZGxlQ29udGV4dE1lbnVFdmVudC5iaW5k
KHRoaXMpLCB0cnVlKTsKICAgICAgICAgcHJvZmlsZVR5cGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLlZpZXdVcGRhdGVkLCB0aGlzLl91cGRhdGVQcm9m
aWxlVHlwZVNwZWNpZmljVUksIHRoaXMpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuQWRkUHJvZmlsZUhlYWRlciwg
KGZ1bmN0aW9uKGV2ZW50KSB7IHRoaXMuX2FkZFByb2ZpbGVIZWFkZXIoZXZlbnQuZGF0YSk7IH0p
LmJpbmQodGhpcykpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuUmVtb3ZlUHJvZmlsZUhlYWRlciwgKGZ1bmN0aW9u
KGV2ZW50KSB7IHRoaXMuX3JlbW92ZVByb2ZpbGVIZWFkZXIoZXZlbnQuZGF0YSk7IH0pLmJpbmQo
dGhpcykpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5Qcm9maWxlVHlwZS5FdmVudHMuUHJvZ3Jlc3NVcGRhdGVkLCB0aGlzLl9yZXBvcnRQcm9maWxl
UHJvZ3Jlc3MuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNTIwLDYgKzYwNCw3
IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAg
ICAgLyoqCisgICAgICogQG5vc2lkZWVmZmVjdHMKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4
dAogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9maWxlVHlwZUlkCiAgICAgICogQHJldHVybiB7
c3RyaW5nfQpAQCAtNTMwLDIxICs2MTUsMTIgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwu
cHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
aWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZmlsZVR5cGVJZAotICAgICAqIEByZXR1cm4g
e3N0cmluZ30KLSAgICAgKi8KLSAgICBfbWFrZUtleTogZnVuY3Rpb24oaWQsIHByb2ZpbGVUeXBl
SWQpCi0gICAgewotICAgICAgICByZXR1cm4gaWQgKyAnLycgKyBlc2NhcGUocHJvZmlsZVR5cGVJ
ZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2Zp
bGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhl
YWRlcn0gcHJvZmlsZQogICAgICAqLwotICAgIGFkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHBy
b2ZpbGUpCisgICAgX2FkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewot
ICAgICAgICB0aGlzLl9yZW1vdmVUZW1wb3JhcnlQcm9maWxlKHByb2ZpbGUucHJvZmlsZVR5cGUo
KS5pZCk7CisgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSkKKyAgICAgICAgICAgIHRo
aXMuX3JlbW92ZVRlbXBvcmFyeVByb2ZpbGUocHJvZmlsZS5wcm9maWxlVHlwZSgpLmlkKTsKIAog
ICAgICAgICB2YXIgcHJvZmlsZVR5cGUgPSBwcm9maWxlLnByb2ZpbGVUeXBlKCk7CiAgICAgICAg
IHZhciB0eXBlSWQgPSBwcm9maWxlVHlwZS5pZDsKQEAgLTU1Myw5ICs2MjksNiBAQCBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzbWFsbCA9IGZh
bHNlOwogICAgICAgICB2YXIgYWx0ZXJuYXRlVGl0bGU7CiAKLSAgICAgICAgdGhpcy5fcHJvZmls
ZXMucHVzaChwcm9maWxlKTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtl
S2V5KHByb2ZpbGUudWlkLCB0eXBlSWQpXSA9IHByb2ZpbGU7Ci0KICAgICAgICAgaWYgKCFXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuaXNVc2VySW5pdGlhdGVkUHJvZmlsZShw
cm9maWxlLnRpdGxlKSkgewogICAgICAgICAgICAgdmFyIHByb2ZpbGVUaXRsZUtleSA9IHRoaXMu
X21ha2VUaXRsZUtleShwcm9maWxlLnRpdGxlLCB0eXBlSWQpOwogICAgICAgICAgICAgaWYgKCEo
cHJvZmlsZVRpdGxlS2V5IGluIHRoaXMuX3Byb2ZpbGVHcm91cHMpKQpAQCAtNTYzLDcgKzYzNiw2
IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAg
ICAgdmFyIGdyb3VwID0gdGhpcy5fcHJvZmlsZUdyb3Vwc1twcm9maWxlVGl0bGVLZXldOwogICAg
ICAgICAgICAgZ3JvdXAucHVzaChwcm9maWxlKTsKLQogICAgICAgICAgICAgaWYgKGdyb3VwLmxl
bmd0aCA9PT0gMikgewogICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBncm91cCBUcmVlRWxlbWVu
dCBub3cgdGhhdCB0aGVyZSBhcmUgMiBwcm9maWxlcy4KICAgICAgICAgICAgICAgICBncm91cC5f
cHJvZmlsZXNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZUdyb3VwU2lkZWJh
clRyZWVFbGVtZW50KHByb2ZpbGUudGl0bGUpOwpAQCAtNjEwLDM0ICs2ODIsMjUgQEAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCisgICAgICog
QHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKICAgICAgKi8KICAg
ICBfcmVtb3ZlUHJvZmlsZUhlYWRlcjogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7Ci0gICAgICAg
IHZhciBzaWRlYmFyUGFyZW50ID0gcHJvZmlsZS5wcm9maWxlVHlwZSgpLnRyZWVFbGVtZW50Owot
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9wcm9maWxlc1tpXS51aWQgPT09IHByb2ZpbGUudWlk
KSB7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzW2ldOwotICAgICAg
ICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICBw
cm9maWxlLmRpc3Bvc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5f
bWFrZUtleShwcm9maWxlLnVpZCwgcHJvZmlsZS5wcm9maWxlVHlwZSgpLmlkKV07CisgICAgICAg
IHByb2ZpbGUuZGlzcG9zZSgpOworICAgICAgICBwcm9maWxlLnByb2ZpbGVUeXBlKCkucmVtb3Zl
UHJvZmlsZShwcm9maWxlKTsKIAorICAgICAgICB2YXIgc2lkZWJhclBhcmVudCA9IHByb2ZpbGUu
cHJvZmlsZVR5cGUoKS50cmVlRWxlbWVudDsKICAgICAgICAgdmFyIHByb2ZpbGVUaXRsZUtleSA9
IHRoaXMuX21ha2VUaXRsZUtleShwcm9maWxlLnRpdGxlLCBwcm9maWxlLnByb2ZpbGVUeXBlKCku
aWQpOwotICAgICAgICBkZWxldGUgdGhpcy5fcHJvZmlsZUdyb3Vwc1twcm9maWxlVGl0bGVLZXld
OworICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9wcm9maWxlR3JvdXBzW3Byb2ZpbGVUaXRsZUtl
eV07CisgICAgICAgIGlmIChncm91cCkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gZ3JvdXAu
aW5kZXhPZihwcm9maWxlKTsKKyAgICAgICAgICAgIHNpZGViYXJQYXJlbnQgPSBncm91cC5fcHJv
ZmlsZXNUcmVlRWxlbWVudCB8fCBzaWRlYmFyUGFyZW50OworICAgICAgICAgICAgaWYgKGluZGV4
ICE9PSAtMSkKKyAgICAgICAgICAgICAgICBncm91cC5zcGxpY2UoaW5kZXgsIDEpOworICAgICAg
ICB9CiAKICAgICAgICAgc2lkZWJhclBhcmVudC5yZW1vdmVDaGlsZChwcm9maWxlLl9wcm9maWxl
c1RyZWVFbGVtZW50KTsKIAotICAgICAgICBpZiAoIXByb2ZpbGUuaXNUZW1wb3JhcnkpIHsKLSAg
ICAgICAgICAgIGlmIChwcm9maWxlLnByb2ZpbGVUeXBlKCkuaWQgPT0gV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkKLSAgICAgICAgICAgICAgICBIZWFwUHJvZmls
ZXJBZ2VudC5yZW1vdmVQcm9maWxlKHByb2ZpbGUudWlkKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBQcm9maWxlckFnZW50LnJlbW92ZVByb2ZpbGUocHJvZmlsZS5wcm9maWxl
VHlwZSgpLmlkLCBwcm9maWxlLnVpZCk7Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBObyBvdGhl
ciBpdGVtIHdpbGwgYmUgc2VsZWN0ZWQgaWYgdGhlcmUgYXJlbid0IGFueSBvdGhlciBwcm9maWxl
cywgc28KICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdmlldyBnZXRzIGNsZWFyZWQgd2hlbiB0
aGUgbGFzdCBwcm9maWxlIGlzIHJlbW92ZWQuCiAgICAgICAgIGlmICghc2lkZWJhclBhcmVudC5j
aGlsZHJlbi5sZW5ndGgpIHsKQEAgLTY0OCw3ICs3MTEsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKiBAcGFyYW0geyFXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQogICAgICAqLwogICAgIF9zaG93UHJvZmls
ZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CkBAIC02NzgsMzEgKzc0MSwxNSBAQCBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlSWQKLSAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlcj59Ci0gICAgICovCi0gICAgZ2V0UHJvZmlsZXM6IGZ1bmN0
aW9uKHR5cGVJZCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgdmFy
IHByb2ZpbGVzQ291bnQgPSB0aGlzLl9wcm9maWxlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcHJvZmlsZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvZmls
ZSA9IHRoaXMuX3Byb2ZpbGVzW2ldOwotICAgICAgICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9y
YXJ5ICYmIHByb2ZpbGUucHJvZmlsZVR5cGUoKS5pZCA9PT0gdHlwZUlkKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKHByb2ZpbGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfSwKLQotICAgIC8qKgogICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdlbnQu
SGVhcFNuYXBzaG90T2JqZWN0SWR9IHNuYXBzaG90T2JqZWN0SWQKICAgICAgKiBAcGFyYW0ge3N0
cmluZ30gdmlld05hbWUKICAgICAgKi8KICAgICBzaG93T2JqZWN0OiBmdW5jdGlvbihzbmFwc2hv
dE9iamVjdElkLCB2aWV3TmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBoZWFwUHJvZmlsZXMgPSB0
aGlzLmdldFByb2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBl
SWQpOworICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhpcy5nZXRQcm9maWxlVHlwZShXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKS5wcm9maWxlczsKICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFwUHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgICAgIHZhciBwcm9maWxlID0gaGVhcFByb2ZpbGVzW2ldOwotICAgICAgICAgICAgLy8gVE9E
TzogYWxsb3cgdG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMu
CisgICAgICAgICAgICAvLyBGSVhNRTogYWxsb3cgdG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJl
IGFyZSBzZXZlcmFsIG9wdGlvbnMuCiAgICAgICAgICAgICBpZiAocHJvZmlsZS5tYXhKU09iamVj
dElkID49IHNuYXBzaG90T2JqZWN0SWQpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9zaG93UHJv
ZmlsZShwcm9maWxlKTsKICAgICAgICAgICAgICAgICBwcm9maWxlLnZpZXcoKS5jaGFuZ2VWaWV3
KHZpZXdOYW1lLCBmdW5jdGlvbigpIHsKQEAgLTcxNSwxNSArNzYyLDEyIEBAIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7
c3RyaW5nfSB0eXBlSWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRl
cn0KICAgICAgKi8KLSAgICBmaW5kVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odHlwZUlkKQor
ICAgIF9jcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQpCiAgICAgewotICAg
ICAgICB2YXIgcHJvZmlsZXNDb3VudCA9IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlc0NvdW50OyArK2kpCi0gICAgICAgICAgICBpZiAo
dGhpcy5fcHJvZmlsZXNbaV0ucHJvZmlsZVR5cGUoKS5pZCA9PT0gdHlwZUlkICYmIHRoaXMuX3By
b2ZpbGVzW2ldLmlzVGVtcG9yYXJ5KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9m
aWxlc1tpXTsKLSAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB0eXBlID0gdGhpcy5n
ZXRQcm9maWxlVHlwZSh0eXBlSWQpOworICAgICAgICBpZiAoIXR5cGUuZmluZFRlbXBvcmFyeVBy
b2ZpbGUoKSkKKyAgICAgICAgICAgIHR5cGUuYWRkUHJvZmlsZSh0eXBlLmNyZWF0ZVRlbXBvcmFy
eVByb2ZpbGUoKSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNzMxLDggKzc3NSw4IEBAIFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfcmVtb3Zl
VGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odHlwZUlkKQogICAgIHsKLSAgICAgICAgdmFyIHRl
bXBvcmFyeVByb2ZpbGUgPSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKHR5cGVJZCk7Ci0gICAg
ICAgIGlmICh0ZW1wb3JhcnlQcm9maWxlKQorICAgICAgICB2YXIgdGVtcG9yYXJ5UHJvZmlsZSA9
IHRoaXMuZ2V0UHJvZmlsZVR5cGUodHlwZUlkKS5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAg
ICAgICBpZiAoISF0ZW1wb3JhcnlQcm9maWxlKQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHJv
ZmlsZUhlYWRlcih0ZW1wb3JhcnlQcm9maWxlKTsKICAgICB9LAogCkBAIC03NDIsMzAgKzc4Niw3
IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBnZXRQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQsIHVpZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCB0eXBlSWQpXTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAotICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBjaHVuawotICAgICAqLwotICAgIF9hZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rp
b24odWlkLCBjaHVuaykKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmls
ZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2Zp
bGVUeXBlLlR5cGVJZCldOwotICAgICAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHByb2ZpbGUudHJhbnNmZXJDaHVuayhjaHVuayk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKLSAgICAgKi8KLSAgICBfZmluaXNoSGVh
cFNuYXBzaG90OiBmdW5jdGlvbih1aWQpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRo
aXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLmZpbmlzaEhlYXBTbmFwc2hvdCgpOworICAg
ICAgICByZXR1cm4gdGhpcy5nZXRQcm9maWxlVHlwZSh0eXBlSWQpLmdldFByb2ZpbGUodWlkKTsK
ICAgICB9LAogCiAgICAgLyoqCkBAIC03OTAsNyArODExLDcgQEAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHNob3dQcm9maWxlOiBmdW5jdGlv
bih0eXBlSWQsIHVpZCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dQcm9maWxlKHRoaXMuX3By
b2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleShOdW1iZXIodWlkKSwgdHlwZUlkKV0pOworICAgICAg
ICB0aGlzLl9zaG93UHJvZmlsZSh0aGlzLmdldFByb2ZpbGUodHlwZUlkLCBOdW1iZXIodWlkKSkp
OwogICAgIH0sCiAKICAgICBjbG9zZVZpc2libGVWaWV3OiBmdW5jdGlvbigpCkBAIC05NDgsMjQg
Kzk2OSwzMyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICBjdXJyZW50Vmlldy5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCgpOwogICAgIH0s
CiAKLSAgICBfc2VhcmNoYWJsZVZpZXdzOiBmdW5jdGlvbigpCisgICAgLyoqCisgICAgICogQHJl
dHVybiB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlPn0KKyAgICAgKi8KKyAgICBf
Z2V0UHJvZmlsZVR5cGVzQXJyYXk6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB2aWV3
cyA9IFtdOworICAgICAgICB2YXIgdHlwZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgdHlwZUlk
IGluIHRoaXMuX3Byb2ZpbGVUeXBlc0J5SWRNYXApCisgICAgICAgICAgICB0eXBlcy5wdXNoKHRo
aXMuX3Byb2ZpbGVUeXBlc0J5SWRNYXBbdHlwZUlkXSk7CisgICAgICAgIHJldHVybiB0eXBlczsK
KyAgICB9LAogCi0gICAgICAgIGNvbnN0IHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxlVmlldzsK
LSAgICAgICAgaWYgKHZpc2libGVWaWV3ICYmIHZpc2libGVWaWV3LnBlcmZvcm1TZWFyY2gpCi0g
ICAgICAgICAgICB2aWV3cy5wdXNoKHZpc2libGVWaWV3KTsKLQotICAgICAgICB2YXIgcHJvZmls
ZXNMZW5ndGggPSB0aGlzLl9wcm9maWxlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcHJvZmlsZXNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHByb2ZpbGUgPSB0
aGlzLl9wcm9maWxlc1tpXTsKLSAgICAgICAgICAgIHZhciB2aWV3ID0gcHJvZmlsZS52aWV3KCk7
Ci0gICAgICAgICAgICBpZiAoIXZpZXcucGVyZm9ybVNlYXJjaCB8fCB2aWV3ID09PSB2aXNpYmxl
VmlldykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpZXdzLnB1c2go
dmlldyk7Ci0gICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlcj59CisgICAgICovCisgICAgX2dldEFsbFByb2ZpbGVzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJvZmlsZVR5cGVzQXJy
YXkoKS5yZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCB0eXBlKSB7IHJldHVybiByZXN1bHQuY29uY2F0
KHR5cGUucHJvZmlsZXMpOyB9LCBbXSk7CisgICAgfSwKIAotICAgICAgICByZXR1cm4gdmlld3M7
CisgICAgX3NlYXJjaGFibGVWaWV3czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGFs
bFZpZXdzID0gdGhpcy5fZ2V0QWxsUHJvZmlsZXMoKS5tYXAoZnVuY3Rpb24ocHJvZmlsZSkgeyBy
ZXR1cm4gcHJvZmlsZS52aWV3KCk7IH0pOworICAgICAgICAvLyBNb3ZlIHZpc2libGUgdmlldyB0
byB0aGUgZmlyc3QgcGxhY2UKKyAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2li
bGVWaWV3OworICAgICAgICBpZiAodmlzaWJsZVZpZXcpCisgICAgICAgICAgICBhbGxWaWV3cyA9
IFt2aXNpYmxlVmlld10uY29uY2F0KGFsbFZpZXdzLmZpbHRlcihmdW5jdGlvbih2aWV3KSB7IHJl
dHVybiB2aWV3ICE9PSB2aXNpYmxlVmlldzsgfSkpOworICAgICAgICByZXR1cm4gYWxsVmlld3Mu
ZmlsdGVyKGZ1bmN0aW9uKHZpZXcpIHsgcmV0dXJuICEhdmlldy5wZXJmb3JtU2VhcmNoOyB9KTsK
ICAgICB9LAogCiAgICAgc2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24odmlldywgbWF0Y2hlcykK
QEAgLTk5NCwxNCArMTAyNCw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzID0gMDsKICAgICAgICAgdGhp
cy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVz
dWx0cyA9IFtdOwotCi0gICAgICAgIGlmICghdGhpcy5fcHJvZmlsZXMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wcm9maWxlcy5sZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc1tpXTsK
LSAgICAgICAgICAgIHByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlcyA9
IDA7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy5fZ2V0QWxsUHJvZmlsZXMoKS5mb3JFYWNoKGZ1
bmN0aW9uKHByb2ZpbGUpIHsgcHJvZmlsZS5fcHJvZmlsZXNUcmVlRWxlbWVudC5zZWFyY2hNYXRj
aGVzID0gMDsgfSk7CiAgICAgfSwKIAogICAgIF91cGRhdGVJbnRlcmZhY2U6IGZ1bmN0aW9uKCkK
QEAgLTEwNjQsMzQgKzEwODcsNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgX3BvcHVsYXRlUHJvZmlsZXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fcHJvZmlsZXJFbmFibGVkIHx8IHRoaXMu
X3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAv
KioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB0eXBlCi0gICAgICAgICAqIEBwYXJhbSB7
P3N0cmluZ30gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHtBcnJheS48UHJvZmlsZXJBZ2VudC5Q
cm9maWxlSGVhZGVyPn0gcHJvZmlsZUhlYWRlcnMKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0
aW9uIHBvcHVsYXRlQ2FsbGJhY2sodHlwZSwgZXJyb3IsIHByb2ZpbGVIZWFkZXJzKSB7Ci0gICAg
ICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
cHJvZmlsZUhlYWRlcnMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLnVpZCAtIGIudWlk
OyB9KTsKLSAgICAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyc0xlbmd0aCA9IHByb2ZpbGVIZWFk
ZXJzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZmlsZUhlYWRl
cnNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gcHJv
ZmlsZUhlYWRlcnNbaV07Ci0gICAgICAgICAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0gdGhpcy5n
ZXRQcm9maWxlVHlwZSh0eXBlIHx8IHByb2ZpbGVIZWFkZXIudHlwZUlkKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZVR5cGUuY3JlYXRlUHJvZmlsZShwcm9m
aWxlSGVhZGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBQcm9maWxl
ckFnZW50LmdldFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRlQ2FsbGJhY2suYmluZCh0aGlzLCBudWxs
KSk7Ci0gICAgICAgIEhlYXBQcm9maWxlckFnZW50LmdldFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRl
Q2FsbGJhY2suYmluZCh0aGlzLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
VHlwZUlkKSk7Ci0KLSAgICAgICAgdGhpcy5fcHJvZmlsZXNXZXJlUmVxdWVzdGVkID0gdHJ1ZTsK
LSAgICB9LAotCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLkV2ZW50fSBl
dmVudAogICAgICAqLwpAQCAtMTEyNSw0NyArMTEyMCwyNSBAQCBXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgc2V0UmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24o
cHJvZmlsZVR5cGUsIGlzUHJvZmlsaW5nKQogICAgIHsKICAgICAgICAgdmFyIHByb2ZpbGVUeXBl
T2JqZWN0ID0gdGhpcy5nZXRQcm9maWxlVHlwZShwcm9maWxlVHlwZSk7Ci0gICAgICAgIHByb2Zp
bGVUeXBlT2JqZWN0LnNldFJlY29yZGluZ1Byb2ZpbGUoaXNQcm9maWxpbmcpOwogICAgICAgICB0
aGlzLnJlY29yZEJ1dHRvbi50b2dnbGVkID0gaXNQcm9maWxpbmc7CiAgICAgICAgIHRoaXMucmVj
b3JkQnV0dG9uLnRpdGxlID0gcHJvZmlsZVR5cGVPYmplY3QuYnV0dG9uVG9vbHRpcDsKICAgICAg
ICAgaWYgKGlzUHJvZmlsaW5nKSB7CiAgICAgICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcucHJv
ZmlsZVN0YXJ0ZWQoKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmls
ZShwcm9maWxlVHlwZSkpCi0gICAgICAgICAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKHBy
b2ZpbGVUeXBlT2JqZWN0LmNyZWF0ZVRlbXBvcmFyeVByb2ZpbGUoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVUZW1wb3JhcnlQcm9maWxlKHByb2ZpbGVUeXBl
KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcucHJvZmls
ZUZpbmlzaGVkKCk7Ci0gICAgICAgICAgICB0aGlzLl9yZW1vdmVUZW1wb3JhcnlQcm9maWxlKHBy
b2ZpbGVUeXBlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICB0YWtlSGVhcFNuYXBzaG90OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdGVtcG9yYXJ5UmVjb3JkaW5nUHJvZmlsZSA9
IHRoaXMuZmluZFRlbXBvcmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2Zp
bGVUeXBlLlR5cGVJZCk7Ci0gICAgICAgIGlmICghdGVtcG9yYXJ5UmVjb3JkaW5nUHJvZmlsZSkg
ewotICAgICAgICAgICAgdmFyIHByb2ZpbGVUeXBlT2JqZWN0ID0gdGhpcy5nZXRQcm9maWxlVHlw
ZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKLSAgICAgICAg
ICAgIHRoaXMuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxlVHlwZU9iamVjdC5jcmVhdGVUZW1wb3Jh
cnlQcm9maWxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2xhdW5jaGVyVmlldy5wcm9m
aWxlU3RhcnRlZCgpOwotICAgICAgICBmdW5jdGlvbiBkb25lKCkgewotICAgICAgICAgICAgdGhp
cy5fbGF1bmNoZXJWaWV3LnByb2ZpbGVGaW5pc2hlZCgpOwotICAgICAgICB9Ci0gICAgICAgIEhl
YXBQcm9maWxlckFnZW50LnRha2VIZWFwU25hcHNob3QodHJ1ZSwgZG9uZS5iaW5kKHRoaXMpKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJNZXRyaWNzLlByb2ZpbGVzSGVhcFByb2ZpbGVUYWtl
bi5yZWNvcmQoKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGRv
bmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5FdmVudH0gZXZlbnQKICAgICAgKi8KLSAgICBfcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jl
c3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAgdmFyIHRlbXBvcmFyeVBy
b2ZpbGUgPSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5UeXBlSWQpOwotICAgICAgICBpZiAodGVtcG9yYXJ5UHJvZmlsZSkgewot
ICAgICAgICAgICAgdGVtcG9yYXJ5UHJvZmlsZS5zaWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUiLCAoZG9uZSAvIHRvdGFsKSAqIDEwMCk7Ci0gICAg
ICAgICAgICB0ZW1wb3JhcnlQcm9maWxlLnNpZGViYXJFbGVtZW50LndhaXQgPSB0cnVlOwotICAg
ICAgICAgICAgaWYgKGRvbmUgPj0gdG90YWwpCi0gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
VGVtcG9yYXJ5UHJvZmlsZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlw
ZUlkKTsKLSAgICAgICAgfQorICAgIF9yZXBvcnRQcm9maWxlUHJvZ3Jlc3M6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSBldmVudC5kYXRhLnByb2ZpbGU7Cisg
ICAgICAgIHZhciBkb25lID0gZXZlbnQuZGF0YS5kb25lOworICAgICAgICB2YXIgdG90YWwgPSBl
dmVudC5kYXRhLnRvdGFsOworICAgICAgICBwcm9maWxlLnNpZGViYXJFbGVtZW50LnN1YnRpdGxl
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmJSIsIChkb25lIC8gdG90YWwpICogMTAwKTsK
KyAgICAgICAgcHJvZmlsZS5zaWRlYmFyRWxlbWVudC53YWl0ID0gdHJ1ZTsKICAgICB9LAogCiAg
ICAgLyoqIApAQCAtMTE4Miw3ICsxMTU1LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAoIW9iamVjdElkKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIHZhciBoZWFwUHJvZmlsZXMgPSB0aGlzLmdldFByb2ZpbGVzKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAgICAgICB2YXIgaGVhcFBy
b2ZpbGVzID0gdGhpcy5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJv
ZmlsZVR5cGUuVHlwZUlkKS5wcm9maWxlczsKICAgICAgICAgaWYgKCFoZWFwUHJvZmlsZXMubGVu
Z3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjA4LDE1NiArMTE4MSw2IEBAIFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0
b3IKLSAqIEBpbXBsZW1lbnRzIHtNZW1vcnlBZ2VudC5EaXNwYXRjaGVyfQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICovCi1XZWJJbnNwZWN0
b3IuTWVtb3J5RGlzcGF0Y2hlciA9IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCi17Ci0gICAgdGhp
cy5fcHJvZmlsZXNQYW5lbCA9IHByb2ZpbGVzUGFuZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5NZW1v
cnlEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQot
ICAgICAqIEBwYXJhbSB7TWVtb3J5QWdlbnQuSGVhcFNuYXBzaG90Q2h1bmt9IGNodW5rCi0gICAg
ICovCi0gICAgYWRkTmF0aXZlU25hcHNob3RDaHVuazogZnVuY3Rpb24oY2h1bmspCi0gICAgewot
ICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzUGFuZWwuZmluZFRlbXBvcmFyeVBy
b2ZpbGUoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKLSAg
ICAgICAgaWYgKCFwcm9maWxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxl
LmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsoY2h1bmspOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtQcm9maWxlckFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gKi8KLVdl
Ykluc3BlY3Rvci5Qcm9maWxlckRpc3BhdGNoZXIgPSBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQot
ewotICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwgPSBwcm9maWxlc1BhbmVsOwotfQotCi1XZWJJbnNw
ZWN0b3IuUHJvZmlsZXJEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqLwotICAg
IGFkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICB2YXIg
cHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlc1BhbmVsLmdldFByb2ZpbGVUeXBlKHByb2ZpbGUu
dHlwZUlkKTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHBy
b2ZpbGVUeXBlLmNyZWF0ZVByb2ZpbGUocHJvZmlsZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdWlkCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IGNodW5rCi0gICAgICovCi0gICAgYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0
aW9uKHVpZCwgY2h1bmspCi0gICAgewotICAgICAgICB0aGlzLl9wcm9maWxlc1BhbmVsLl9hZGRI
ZWFwU25hcHNob3RDaHVuayh1aWQsIGNodW5rKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAotICAgICAqLwotICAgIGZpbmlz
aEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlkKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmls
ZXNQYW5lbC5fZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcm9maWxpbmcKLSAgICAg
Ki8KLSAgICBzZXRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlvbihpc1Byb2ZpbGluZykKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVR5cGUuVHlwZUlkLCBpc1Byb2ZpbGluZyk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqLwotICAgIHJlc2V0UHJvZmlsZXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwuX3Jlc2V0KCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBk
b25lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsCi0gICAgICovCi0gICAgcmVwb3J0SGVh
cFNuYXBzaG90UHJvZ3Jlc3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAg
dGhpcy5fcHJvZmlsZXNQYW5lbC5fcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MoZG9uZSwgdG90
YWwpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtI
ZWFwUHJvZmlsZXJBZ2VudC5EaXNwYXRjaGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICovCi1XZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVy
RGlzcGF0Y2hlciA9IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCi17Ci0gICAgdGhpcy5fcHJvZmls
ZXNQYW5lbCA9IHByb2ZpbGVzUGFuZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZXJE
aXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0hlYXBQcm9m
aWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKi8KLSAgICBhZGRQcm9maWxl
SGVhZGVyOiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGVUeXBl
ID0gdGhpcy5fcHJvZmlsZXNQYW5lbC5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5h
ZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVUeXBlLmNyZWF0ZVByb2ZpbGUocHJvZmlsZSkpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0g
dWlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCi0gICAgICovCi0gICAgYWRkSGVhcFNu
YXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCi0gICAgewotICAgICAgICB0aGlzLl9w
cm9maWxlc1BhbmVsLl9hZGRIZWFwU25hcHNob3RDaHVuayh1aWQsIGNodW5rKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAot
ICAgICAqLwotICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlkKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqLwotICAgIHJlc2V0UHJvZmls
ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwuX3Jlc2V0
KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBkb25lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsCi0gICAgICovCi0gICAg
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQotICAgIHsK
LSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3Mo
ZG9uZSwgdG90YWwpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKICAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50fQogICogQHBhcmFtIHshV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZUZv
cm1hdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGRhZDliNDlmYTQ1NjU4ZDRkZDAxYTEwZTNlMmE1YmM5ZTRjYzMzNGUuLmNj
MDRiNzU3ODIwM2ZhYmRiYTdiZjg5MDRiY2ZiODUwMzVkMzc3MTAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NiBAQAorMjAxMy0wMi0yMiAgQWxleGVpIEZpbGlwcG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBwcm9maWxlIHR5cGUgc3BlY2lmaWMgY29kZSBv
dXQgb2YgUHJvZmlsZXNQYW5lbCAocmVmYWN0b3IpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHByb2ZpbGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlv
bmFsaXR5IG91dCBvZiBQcm9maWxlc1BhbmVsIGNsYXNzLgorICAgICAgICBUaGlzIGlzIGEgZmly
c3QgcGFydCBvZiBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCByZWZhY3RvcmluZy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgY2hhbmdlZC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1n
cmlkLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5z
cGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Byb2Zp
bGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanM6CisgICAgICAgIChpbml0aWFs
aXplX0hlYXBTbmFwc2hvdFRlc3QuKToKKyAgICAgICAgKGluaXRpYWxpemVfSGVhcFNuYXBzaG90
VGVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL3Byb2ZpbGVyLXRlc3QuanM6Cisg
ICAgICAgIChpbml0aWFsaXplX1Byb2ZpbGVyVGVzdC5JbnNwZWN0b3JUZXN0LnN0YXJ0UHJvZmls
ZXJUZXN0LnN0YXJ0VGVzdCk6CisgICAgICAgIChpbml0aWFsaXplX1Byb2ZpbGVyVGVzdC5JbnNw
ZWN0b3JUZXN0LnN0YXJ0UHJvZmlsZXJUZXN0KToKKwogMjAxMy0wMi0yMiAgUmFwaGFlbCBLdWJv
IGRhIENvc3RhICA8cmFwaGFlbC5rdWJvLmRhLmNvc3RhQGludGVsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkIGdhcmRlbmluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9w
cm9maWxlci9jYW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1ncmlkLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFzLXJlcGxheS1sb2ctZ3JpZC5odG1s
CmluZGV4IDQyYzA0MzAxZDNjZWI4YWMwNWFmODEzZWJlMTExM2ViYzM3ODdmOGYuLjk2MzY3ZDQ4
MmFhYTFjYTJlZWIyMGNlNzM5ZDUzYzRhNTgwYzZjMGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1ncmlkLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZhcy1yZXBs
YXktbG9nLWdyaWQuaHRtbApAQCAtNTIsOSArNTIsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICB2
YXIgcHJvZmlsZVZpZXc7CiAgICAgdmFyIGRhdGFHcmlkOwogCi0gICAgZnVuY3Rpb24gZGlkU3Rh
cnRDYXB0dXJpbmdGcmFtZShwcm9maWxlc1BhbmVsLCBmcmFtZUlkLCBlcnJvciwgdHJhY2VMb2dJ
ZCkKKyAgICBmdW5jdGlvbiBkaWRTdGFydENhcHR1cmluZ0ZyYW1lKGZyYW1lSWQsIGVycm9yLCB0
cmFjZUxvZ0lkKQogICAgIHsKLSAgICAgICAgcHJvZmlsZUhlYWRlciA9IHByb2ZpbGVzUGFuZWwu
Z2V0UHJvZmlsZXMoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVUeXBlLlR5cGVJZClbMF07Cisg
ICAgICAgIHByb2ZpbGVIZWFkZXIgPSBwcm9maWxlVHlwZS5wcm9maWxlc1swXQogICAgICAgICBw
cm9maWxlc1BhbmVsLl9zaG93UHJvZmlsZShwcm9maWxlSGVhZGVyKTsKICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRTbmlmZmVyKHByb2ZpbGVIZWFkZXIsICJfdXBkYXRlQ2FwdHVyaW5nU3RhdHVz
IiwgZGlkUmVjZWl2ZUZpcnN0RnJhbWUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRl
SW5Db25zb2xlKCJkb1NvbWVDYW52YXNDYWxscygyKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hv
dC1pbnNwZWN0LWRvbS13cmFwcGVyLWV4cGVjdGVkLnR4dAppbmRleCA3ZmQ1ZDEwY2FmNDUzN2Qw
ZmEwZjkzY2YxOTgyMjY0ZTVhMTA0ZWE5Li42MWUwN2I3ZTE5NzkzMmYyNGJmZGQ3MjYxOTgyNGNi
NzU4NzNmMzYzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVh
cC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVy
LWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRlc3QgdGhhdCByZXNvbHZpbmcgaGVhcCBz
bmFwaG90IG9iamVjdCB0byBhIEpTIG9iamVjdCB3aWxsIG5vdCBjcmFzaCBvbiBET00gd3JhcHBl
ciBib2lsZXJwbGF0ZS4gVGVzdCBwYXNzZXMgaWYgaXQgZG9lc24ndCBjcmFzaC4KIAotX2Zpbmlz
aEhlYXBTbmFwc2hvdCAxCitmaW5pc2hIZWFwU25hcHNob3QgMQogX2NhbGxMb2FkQ2FsbGJhY2tz
CiBFcnJvciByZXNvbHZpbmcgaGVhcCBzbmFwc2hvdCBvYmplY3Q6IE9iamVjdCBpcyBub3QgYXZh
aWxhYmxlCiBFcnJvciByZXNvbHZpbmcgaGVhcCBzbmFwc2hvdCBvYmplY3Q6IE9iamVjdCBpcyBu
b3QgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIv
aGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWwKaW5k
ZXggOTI0ZDVjNWU5OWQwYTE3ZGE1MjYyMDZiY2JiNWE4NWYyNzViN2M4YS4uOGIxYTc4ZjJhYTA1
MTVmMGE0Y2M2ZTZhNzEwNzQ0NDVkOWFmZGZlNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWluc3BlY3Qt
ZG9tLXdyYXBwZXIuaHRtbApAQCAtMTgsMTYgKzE4LDE3IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAg
ICAgZnVuY3Rpb24gc3RlcDAoKQogICAgIHsKLSAgICAgICAgdmFyIHByb2ZpbGVzID0gV2ViSW5z
cGVjdG9yLnBhbmVscy5wcm9maWxlcy5nZXRQcm9maWxlcygiSEVBUCIpOworICAgICAgICB2YXIg
aGVhcFByb2ZpbGVUeXBlID0gIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJvZmls
ZVR5cGUoIkhFQVAiKTsKKyAgICAgICAgdmFyIHByb2ZpbGVzID0gaGVhcFByb2ZpbGVUeXBlLnBy
b2ZpbGVzOwogICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9zaG93UHJvZmls
ZShwcm9maWxlc1twcm9maWxlcy5sZW5ndGggLSAxXSk7Ci0gICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiX2ZpbmlzaEhlYXBTbmFw
c2hvdCIsIHN0ZXAxKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKGhlYXBQcm9m
aWxlVHlwZSwgImZpbmlzaEhlYXBTbmFwc2hvdCIsIHN0ZXAxKTsKICAgICB9CiAKICAgICBmdW5j
dGlvbiBzdGVwMSh1aWQpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
X2ZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRS
ZXN1bHQoImZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKICAgICAgICAgdmFyIHBhbmVsID0g
V2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlczsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSBwYW5l
bC5fcHJvZmlsZXNJZE1hcFtwYW5lbC5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSBwYW5lbC5n
ZXRQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQsIHVp
ZCk7CiAgICAgICAgIHByb2ZpbGUubG9hZChzdGVwMi5iaW5kKHRoaXMpKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxv
YWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
bG9hZGVyLmh0bWwKaW5kZXggMGNkYWJkZDliZTQzZDZhNzM5NWU5NDY0OGU2OWYzOWM3MWY4NTU0
Yy4uNWUxMjBhOTAzZTFkMGVhODUwZjQzMmUxM2MwOWEyNDlkMTFhYTc4YSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVy
Lmh0bWwKQEAgLTI4LDcgKzI4LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICBtYXhK
U09iamVjdElkOiA2CiAgICAgICAgIH0pOwogCi0gICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0g
cGFuZWwuX3Byb2ZpbGVzWzBdOworICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IHBhbmVsLmdl
dFByb2ZpbGVUeXBlKCJIRUFQIikucHJvZmlsZXNbMF07CiAKICAgICAgICAgZnVuY3Rpb24gZ2V0
SGVhcFNuYXBzaG90TW9jayh1aWQpIHsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
c291cmNlU3RyaW5naWZpZWQubGVuZ3RoOyBpIDwgbDsgaSArPSBwYXJ0U2l6ZSkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanMg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCmlu
ZGV4IDJlNmJiMWZmY2U4YWZjNjkyNmZkNThhMmY4MzQxMTg5NTdlNjBlYmQuLjI5Y2E3NjFlOTNi
MWQzNzM5ZmIzNmQzOWYwNmU2YzcxNmU0MTRkMGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcwpAQCAtNzMyLDEyICs3MzIs
MTIgQEAgSW5zcGVjdG9yVGVzdC50YWtlQW5kT3BlblNuYXBzaG90ID0gZnVuY3Rpb24oZ2VuZXJh
dG9yLCBjYWxsYmFjaykKICAgICAgICAgc25hcHNob3Quc25hcHNob3QudHlwZUlkID0gIkhFQVAi
OwogICAgICAgICBzbmFwc2hvdC5zbmFwc2hvdC50aXRsZSA9IHByb2ZpbGUudGl0bGU7CiAgICAg
ICAgIHNuYXBzaG90LnNuYXBzaG90LnVpZCA9IHByb2ZpbGUudWlkOwotICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9hZGRIZWFwU25hcHNob3RDaHVuayh1aWQsIEpTT04uc3Ry
aW5naWZ5KHNuYXBzaG90KSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMu
X2ZpbmlzaEhlYXBTbmFwc2hvdCh1aWQpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRIZWFwU25h
cHNob3RDaHVuayh1aWQsIEpTT04uc3RyaW5naWZ5KHNuYXBzaG90KSk7CisgICAgICAgIHByb2Zp
bGVUeXBlLmZpbmlzaEhlYXBTbmFwc2hvdCh1aWQpOwogICAgIH0KICAgICBJbnNwZWN0b3JUZXN0
Lm92ZXJyaWRlKEhlYXBQcm9maWxlckFnZW50LCAiZ2V0SGVhcFNuYXBzaG90IiwgcHVzaEdlbmVy
YXRlZFNuYXBzaG90KTsKICAgICBJbnNwZWN0b3JUZXN0Ll90YWtlQW5kT3BlblNuYXBzaG90Q2Fs
bGJhY2sgPSBjYWxsYmFjazsKLSAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmFkZFBy
b2ZpbGVIZWFkZXIocHJvZmlsZSk7CisgICAgcHJvZmlsZVR5cGUuYWRkUHJvZmlsZShwcm9maWxl
KTsKICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9zaG93UHJvZmlsZShwcm9maWxl
KTsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9wcm9m
aWxlci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3Byb2ZpbGVyLXRl
c3QuanMKaW5kZXggMmJjZjMwZWQ4NGI2YjQ0NzY5YWQ1MzZmODdhZGE4ZTJlMWRlZTE1MC4uMTdi
ODlkNDIzZDY1YTgzOThlMDQwOGRlNWE5NWE3NDlkMTVmNmQ3MCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3Byb2ZpbGVyLXRlc3QuanMKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL3Byb2ZpbGVyLXRlc3QuanMKQEAgLTcsNyArNyw3IEBAIElu
c3BlY3RvclRlc3Quc3RhcnRQcm9maWxlclRlc3QgPSBmdW5jdGlvbihjYWxsYmFjaykKICAgICBm
dW5jdGlvbiBzdGFydFRlc3QoKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIlByb2ZpbGVyIHdhcyBlbmFibGVkLiIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNu
aWZmZXIoV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcywgImFkZFByb2ZpbGVIZWFkZXIiLCBJ
bnNwZWN0b3JUZXN0Ll9wcm9maWxlSGVhZGVyQWRkZWQsIHRydWUpOworICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcywgIl9hZGRQcm9m
aWxlSGVhZGVyIiwgSW5zcGVjdG9yVGVzdC5fcHJvZmlsZUhlYWRlckFkZGVkLCB0cnVlKTsKICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmll
dy5wcm90b3R5cGUsICJyZWZyZXNoIiwgSW5zcGVjdG9yVGVzdC5fcHJvZmlsZVZpZXdSZWZyZXNo
LCB0cnVlKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5zYWZlV3JhcChjYWxsYmFjaykoKTsKICAg
ICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189778</attachid>
            <date>2013-02-22 09:03:35 -0800</date>
            <delta_ts>2013-02-25 01:26:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110597-20130222205953.patch</filename>
            <type>text/plain</type>
            <size>62484</size>
            <attacher name="Alexei Filippov">alph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJiNTViOGFkZDM3NmFk
ZDc1NmNiNWFlMTcyYTQ1OTA3MWRiMmE5Yi4uZDViNjEyMzNlYjE1OGZhM2I3M2UwMTk5NGNkZTQ5
YzIzZmNhNzc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAyLTIyICBBbGV4
ZWkgRmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBtb3ZlIHByb2ZpbGUgdHlwZSBzcGVjaWZpYyBjb2RlIG91dCBvZiBQcm9maWxlc1BhbmVsIChy
ZWZhY3RvcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDU5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgcHJvZmlsZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIFByb2ZpbGVz
UGFuZWwgY2xhc3MuCisgICAgICAgIFRoaXMgaXMgYSBmaXJzdCBwYXJ0IG9mIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0
aGUgZnVuY3Rpb25hbGl0eSBpc24ndCBjaGFuZ2VkLgorCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1BV
UHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRQcm9maWxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5wcm90b3R5cGUu
cmVtb3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJv
dG90eXBlLl9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlc2V0UHJvZmlsZXMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLmZpbmlzaEhl
YXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90
eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuX3N0YXJ0UmVj
b3JkaW5nUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
VHlwZS5wcm90b3R5cGUuX3N0b3BSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZS5idXR0b25DbGlja2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuX3J1blNpbmdsZUZyYW1lQ2Fw
dHVyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5
cGUuX3N0YXJ0RnJhbWVDYXB0dXJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1By
b2ZpbGVUeXBlLnByb3RvdHlwZS5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRp
c3Bvc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJv
ZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUu
YnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUucHJvdG90eXBlLmFkZFByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBl
LmZpbmlzaEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUucHJvdG90eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUucmVzZXRQ
cm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
cHJvdG90eXBlLnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fdXBkYXRl
VHJhbnNmZXJQcm9ncmVzcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVN
ZW1vcnlTbmFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNo
b3RQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9m
aWxlVHlwZS5wcm90b3R5cGUuYWRkTmF0aXZlU25hcHNob3RDaHVuayk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2ZpbGVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5
cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJv
dG90eXBlLmdldCBkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUucHJvdG90eXBlLmdldFByb2ZpbGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUuZ2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLl9tYWtlS2V5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUuYWRkUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2ZpbGVUeXBlLnByb3RvdHlwZS5maW5kVGVtcG9yYXJ5UHJvZmlsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuX2xvYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUudG9nZ2xlUmVjb3JkQnV0dG9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcG9wdWxhdGVBbGxQcm9maWxlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUud2FzU2hvd24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9wcm9maWxlcldhc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9y
ZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX3Jl
Z2lzdGVyUHJvZmlsZVR5cGUub25BZGRQcm9maWxlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVnaXN0ZXJQcm9maWxlVHlwZS5vblJlbW92
ZVByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlLl9yZWdpc3RlclByb2ZpbGVUeXBlLm9uUHJvZ3Jlc3NVcGRhdGVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVnaXN0ZXJQcm9maWxlVHlw
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2FkZFBy
b2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlLl9yZW1vdmVQcm9maWxlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsLnByb3RvdHlwZS5fY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX3JlbW92ZVRlbXBvcmFyeVByb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmdldFByb2Zp
bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3dQ
cm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5f
Z2V0QWxsUHJvZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlLl9zZWFyY2hhYmxlVmlld3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVwb3J0UHJvZmlsZVByb2dyZXNz
KToKKwogMjAxMy0wMi0yMiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgR2x5cGhQYWdlOiBBTFdBWVNfSU5MSU5FIGFsbCBwZXJmb3JtYW5jZS1yZWxldmFudCBn
ZXR0ZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCmluZGV4IDkwMjAzNDg4ODVlYjYzYTlhNDA3MjRiZjlmNjAwMjlmNTcxZjBjZTkuLjVk
NzJhNDM1ZDU3NzFhNjM2ZjhlZDkwN2YwMTJjYmYzZDZhZjY0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKQEAgLTExLDYgKzExLDcg
QEAgbG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOWhycyJdID0gIiUuMWZcdTIwMDlocnMiOwog
bG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOW1pbiJdID0gIiUuMWZcdTIwMDltaW4iOwogbG9j
YWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOUtCIl0gPSAiJS4xZlx1MjAwOUtCIjsKIGxvY2FsaXpl
ZFN0cmluZ3NbIiUuMWZcdTIwMDlNQiJdID0gIiUuMWZcdTIwMDlNQiI7Citsb2NhbGl6ZWRTdHJp
bmdzWyIlLjBmJSJdID0gIiUuMGYlIjsKIGxvY2FsaXplZFN0cmluZ3NbIiUuMmYlIl0gPSAiJS4y
ZiUiOwogbG9jYWxpemVkU3RyaW5nc1siJS4yZlx1MjAwOXMiXSA9ICIlLjJmXHUyMDA5cyI7CiBs
b2NhbGl6ZWRTdHJpbmdzWyIlLjNmXHUyMDA5bXMiXSA9ICIlLjNmXHUyMDA5bXMiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxlVmlldy5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1BVUHJvZmlsZVZpZXcuanMK
aW5kZXggMDNmYmMzYjJkMDVlMWIwODM0ODBiODA4YjllNmFlMDkwYjA4ODdhZC4uYzI2Nzk2ZWNh
ZmZhYzQzOTJjMjkxOTYzMTkyNTRmNzJlMWFhMzcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxlVmlldy5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQVVByb2ZpbGVWaWV3LmpzCkBAIC01NzEsMTAgKzU3
MSwxMiBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlID0gewogLyoqCiAg
KiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGV9Cisg
KiBAaW1wbGVtZW50cyB7UHJvZmlsZXJBZ2VudC5EaXNwYXRjaGVyfQogICovCiBXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLlR5cGVJZCwgV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDb2xsZWN0IEphdmFTY3JpcHQgQ1BVIFByb2ZpbGUiKSk7Cisg
ICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclByb2ZpbGVyRGlzcGF0Y2hlcih0aGlzKTsKICAg
ICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKICAgICBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5
cGUuaW5zdGFuY2UgPSB0aGlzOwogfQpAQCAtNjEyLDYgKzYxNCwxNCBAQCBXZWJJbnNwZWN0b3Iu
Q1BVUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDUFUgcHJvZmlsZXMgc2hvdyB3aGVyZSB0aGUgZXhlY3V0aW9uIHRpbWUgaXMg
c3BlbnQgaW4geW91ciBwYWdlJ3MgSmF2YVNjcmlwdCBmdW5jdGlvbnMuIik7CiAgICAgfSwKIAor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyfSBwcm9m
aWxlSGVhZGVyCisgICAgICovCisgICAgYWRkUHJvZmlsZUhlYWRlcjogZnVuY3Rpb24ocHJvZmls
ZUhlYWRlcikKKyAgICB7CisgICAgICAgIHRoaXMuYWRkUHJvZmlsZSh0aGlzLmNyZWF0ZVByb2Zp
bGUocHJvZmlsZUhlYWRlcikpOworICAgIH0sCisKICAgICBpc1JlY29yZGluZ1Byb2ZpbGU6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRpbmc7CkBAIC02MzAs
NiArNjQwLDkgQEAgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgUHJvZmlsZXJBZ2VudC5zdG9wKCk7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gaXNQcm9maWxpbmcKKyAgICAgKi8KICAgICBzZXRSZWNvcmRpbmdQcm9m
aWxlOiBmdW5jdGlvbihpc1Byb2ZpbGluZykKICAgICB7CiAgICAgICAgIHRoaXMuX3JlY29yZGlu
ZyA9IGlzUHJvZmlsaW5nOwpAQCAtNjM4LDcgKzY1MSw3IEBAIFdlYkluc3BlY3Rvci5DUFVQcm9m
aWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAgICAgICog
QHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9m
aWxlSGVhZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0K
ICAgICAgKi8KICAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0aXRsZSkKICAg
ICB7CkBAIC02NDksMTMgKzY2Miw1OSBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJv
dG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQogICAgICAqIEBwYXJhbSB7UHJv
ZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCi0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9m
aWxlSGVhZGVyfQogICAgICAqLwogICAgIGNyZWF0ZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUp
CiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlSGVhZGVy
KHRoaXMsIHByb2ZpbGUudGl0bGUsIHByb2ZpbGUudWlkKTsKICAgICB9LAogCisgICAgLyoqCisg
ICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFk
ZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAgICByZW1vdmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxl
KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1v
dmVQcm9maWxlLmNhbGwodGhpcywgcHJvZmlsZSk7CisgICAgICAgIGlmICghcHJvZmlsZS5pc1Rl
bXBvcmFyeSkKKyAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQucmVtb3ZlUHJvZmlsZSh0aGlzLmlk
LCBwcm9maWxlLnVpZCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUsID9zdHJp
bmcsIEFycmF5LjxQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXI+KX0gcG9wdWxhdGVDYWxsYmFj
aworICAgICAqLworICAgIF9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZDogZnVuY3Rpb24ocG9w
dWxhdGVDYWxsYmFjaykKKyAgICB7CisgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZUhl
YWRlcnMocG9wdWxhdGVDYWxsYmFjayk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVy
cmlkZQorICAgICAqLworICAgIHJlc2V0UHJvZmlsZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgfSwKKworICAgIC8qKiBAZGVwcmVjYXRlZCBUbyBiZSBy
ZW1vdmVkIGZyb20gdGhlIHByb3RvY29sICovCisgICAgYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1
bmN0aW9uKHVpZCwgY2h1bmspCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5ldmVy
IGNhbGxlZCIpOworICAgIH0sCisKKyAgICAvKiogQGRlcHJlY2F0ZWQgVG8gYmUgcmVtb3ZlZCBm
cm9tIHRoZSBwcm90b2NvbCAqLworICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlk
KQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOZXZlciBjYWxsZWQiKTsKKyAgICB9
LAorCisgICAgLyoqIEBkZXByZWNhdGVkIFRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHJvdG9jb2wg
Ki8KKyAgICByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzczogZnVuY3Rpb24oZG9uZSwgdG90YWwp
CisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5ldmVyIGNhbGxlZCIpOworICAgIH0s
CisKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGUKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTZWxl
Y3RvclByb2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
U1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzCmluZGV4IGIwMTA3ZTA3YTEwMjg3OTYyZGYyZDk3ZDFm
YjZmYzJiZTU1N2QxMDIuLmY0MzNjMTMwNmZiYTVkMGYzMjhlNzY5ZjgxOWI3Y2E4MWM3OGViNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU2VsZWN0
b3JQcm9maWxlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMKQEAgLTI4NiwxNiArMjg2LDE1IEBAIFdlYkluc3Bl
Y3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAg
ICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9
IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAqLwotICAgIGJ1
dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xpY2tlZDog
ZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3JlY29yZGluZykgewotICAgICAg
ICAgICAgdGhpcy5fc3RvcFJlY29yZGluZ1Byb2ZpbGUocHJvZmlsZXNQYW5lbCk7CisgICAgICAg
ICAgICB0aGlzLl9zdG9wUmVjb3JkaW5nUHJvZmlsZSgpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdQ
cm9maWxlKHByb2ZpbGVzUGFuZWwpOworICAgICAgICAgICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdQ
cm9maWxlKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0sCkBA
IC0zMjAsMjAgKzMxOSwxMyBAQCBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGlzUHJvZmlsaW5nOwogICAg
IH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVs
fSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgX3N0YXJ0UmVjb3JkaW5nUHJvZmlsZTogZnVu
Y3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBfc3RhcnRSZWNvcmRpbmdQcm9maWxlOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSB0cnVlOwogICAgICAgICBDU1NB
Z2VudC5zdGFydFNlbGVjdG9yUHJvZmlsZXIoKTsKLSAgICAgICAgcHJvZmlsZXNQYW5lbC5zZXRS
ZWNvcmRpbmdQcm9maWxlKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBlLlR5cGVJ
ZCwgdHJ1ZSk7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKi8KLSAgICBfc3RvcFJlY29yZGlu
Z1Byb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgX3N0b3BSZWNvcmRpbmdQcm9m
aWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICAvKioKICAgICAgICAgICogQHBhcmFtIHs/
UHJvdG9jb2wuRXJyb3J9IGVycm9yCkBAIC0zNDYsOSArMzM4LDcgQEAgV2ViSW5zcGVjdG9yLkNT
U1NlbGVjdG9yUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB2YXIgdWlk
ID0gdGhpcy5fcHJvZmlsZVVpZCsrOwogICAgICAgICAgICAgdmFyIHRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJQcm9maWxlICVkIiwgdWlkKSArIFN0cmluZy5zcHJpbnRmKCIgKCVzKSIs
IE51bWJlci5zZWNvbmRzVG9TdHJpbmcocHJvZmlsZS50b3RhbFRpbWUgLyAxMDAwKSk7Ci0gICAg
ICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJvZmlsZUhl
YWRlcih0aGlzLCB0aXRsZSwgdWlkLCBwcm9maWxlKTsKLSAgICAgICAgICAgIHByb2ZpbGVzUGFu
ZWwuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxlSGVhZGVyKTsKLSAgICAgICAgICAgIHByb2ZpbGVz
UGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
VHlwZS5UeXBlSWQsIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMuYWRkUHJvZmlsZShuZXcgV2Vi
SW5zcGVjdG9yLkNTU1Byb2ZpbGVIZWFkZXIodGhpcywgdGl0bGUsIHVpZCwgcHJvZmlsZSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fcmVjb3JkaW5nID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3Lmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYW52YXNQcm9maWxlVmlldy5q
cwppbmRleCA5YjkxMjI5MjMyNGIxYWYzYzNjMTEwNDQ1ZGE5ZDc4MmMzOGUyYmQwLi44ZjVmNGEx
ZTFlNmJiNzFiMTllYmNiMTFjZDlhODlkYmMyMzNjNjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMKQEAgLTUz
OCw0MSArNTM4LDMzIEBAIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUg
PSB7CiAKICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCiAgICAgICogQHJldHVybiB7Ym9vbGVh
bn0KICAgICAgKi8KLSAgICBidXR0b25DbGlja2VkOiBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQor
ICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9y
ZWNvcmRpbmcpIHsKICAgICAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGZhbHNlOwogICAgICAg
ICAgICAgdGhpcy5fc3RvcEZyYW1lQ2FwdHVyaW5nKCk7CiAgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5faXNTaW5nbGVGcmFtZU1vZGUoKSkgewogICAgICAgICAgICAgdGhpcy5fcmVjb3JkaW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9ydW5TaW5nbGVGcmFtZUNhcHR1cmluZyhwcm9maWxl
c1BhbmVsKTsKKyAgICAgICAgICAgIHRoaXMuX3J1blNpbmdsZUZyYW1lQ2FwdHVyaW5nKCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSB0cnVlOwotICAg
ICAgICAgICAgdGhpcy5fc3RhcnRGcmFtZUNhcHR1cmluZyhwcm9maWxlc1BhbmVsKTsKKyAgICAg
ICAgICAgIHRoaXMuX3N0YXJ0RnJhbWVDYXB0dXJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBw
cm9maWxlc1BhbmVsLnNldFJlY29yZGluZ1Byb2ZpbGUoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2Zp
bGVUeXBlLlR5cGVJZCwgdGhpcy5fcmVjb3JkaW5nKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
Y29yZGluZzsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIF9ydW5TaW5nbGVGcmFt
ZUNhcHR1cmluZzogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBfcnVuU2luZ2xlRnJhbWVD
YXB0dXJpbmc6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBmcmFtZUlkID0gdGhpcy5f
c2VsZWN0ZWRGcmFtZUlkKCk7Ci0gICAgICAgIENhbnZhc0FnZW50LmNhcHR1cmVGcmFtZShmcmFt
ZUlkLCB0aGlzLl9kaWRTdGFydENhcHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgcHJvZmlsZXNQYW5l
bCwgZnJhbWVJZCkpOworICAgICAgICBDYW52YXNBZ2VudC5jYXB0dXJlRnJhbWUoZnJhbWVJZCwg
dGhpcy5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMsIGZyYW1lSWQpKTsKICAgICB9
LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0g
cHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIF9zdGFydEZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlv
bihwcm9maWxlc1BhbmVsKQorICAgIF9zdGFydEZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICB2YXIgZnJhbWVJZCA9IHRoaXMuX3NlbGVjdGVkRnJhbWVJZCgpOwotICAg
ICAgICBDYW52YXNBZ2VudC5zdGFydENhcHR1cmluZyhmcmFtZUlkLCB0aGlzLl9kaWRTdGFydENh
cHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgcHJvZmlsZXNQYW5lbCwgZnJhbWVJZCkpOworICAgICAg
ICBDYW52YXNBZ2VudC5zdGFydENhcHR1cmluZyhmcmFtZUlkLCB0aGlzLl9kaWRTdGFydENhcHR1
cmluZ0ZyYW1lLmJpbmQodGhpcywgZnJhbWVJZCkpOwogICAgIH0sCiAKICAgICBfc3RvcEZyYW1l
Q2FwdHVyaW5nOiBmdW5jdGlvbigpCkBAIC01OTAsMTkgKzU4MiwxOCBAQCBXZWJJbnNwZWN0b3Iu
Q2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCiAgICAg
ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBmcmFtZUlkCiAgICAgICogQHBhcmFtIHs/UHJv
dG9jb2wuRXJyb3J9IGVycm9yCiAgICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFjZUxvZ0lk
fSB0cmFjZUxvZ0lkCiAgICAgICovCi0gICAgX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWU6IGZ1bmN0
aW9uKHByb2ZpbGVzUGFuZWwsIGZyYW1lSWQsIGVycm9yLCB0cmFjZUxvZ0lkKQorICAgIF9kaWRT
dGFydENhcHR1cmluZ0ZyYW1lOiBmdW5jdGlvbihmcmFtZUlkLCBlcnJvciwgdHJhY2VMb2dJZCkK
ICAgICB7CiAgICAgICAgIGlmIChlcnJvciB8fCB0aGlzLl9sYXN0UHJvZmlsZUhlYWRlciAmJiB0
aGlzLl9sYXN0UHJvZmlsZUhlYWRlci50cmFjZUxvZ0lkKCkgPT09IHRyYWNlTG9nSWQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5DYW52YXNQcm9maWxlSGVhZGVyKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVHJh
Y2UgTG9nICVkIiwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCwg
dHJhY2VMb2dJZCwgZnJhbWVJZCk7CiAgICAgICAgICsrdGhpcy5fbmV4dFByb2ZpbGVVaWQ7CiAg
ICAgICAgIHRoaXMuX2xhc3RQcm9maWxlSGVhZGVyID0gcHJvZmlsZUhlYWRlcjsKLSAgICAgICAg
cHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOworICAgICAgICB0
aGlzLmFkZFByb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAgIHByb2ZpbGVIZWFkZXIuX3Vw
ZGF0ZUNhcHR1cmluZ1N0YXR1cygpOwogICAgIH0sCiAKQEAgLTYyOCwxMSArNjE5LDIzIEBAIFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAg
ICogQG92ZXJyaWRlCiAgICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICBfcmVzZXQ6
IGZ1bmN0aW9uKCkKICAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90
b3R5cGUuX3Jlc2V0LmNhbGwodGhpcyk7CiAgICAgICAgIHRoaXMuX25leHRQcm9maWxlVWlkID0g
MTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHsh
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAgICByZW1vdmVQ
cm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlBy
b2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlLmNhbGwodGhpcywgcHJvZmlsZSk7Cisg
ICAgICAgIGlmICh0aGlzLl9yZWNvcmRpbmcgJiYgcHJvZmlsZSA9PT0gdGhpcy5fbGFzdFByb2Zp
bGVIZWFkZXIpCisgICAgICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKKyAgICB9LAor
CiAgICAgc2V0UmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24oaXNQcm9maWxpbmcpCiAgICAgewog
ICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBpc1Byb2ZpbGluZzsKQEAgLTY0MSw3ICs2NDQsNyBA
QCBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIC8qKgog
ICAgICAqIEBvdmVycmlkZQogICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGl0bGUKLSAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKiBAcmV0dXJuIHshV2Vi
SW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAgY3JlYXRlVGVtcG9yYXJ5UHJv
ZmlsZTogZnVuY3Rpb24odGl0bGUpCiAgICAgewpAQCAtNjUyLDcgKzY1NSw3IEBAIFdlYkluc3Bl
Y3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92
ZXJyaWRlCiAgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2Zp
bGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKiBA
cmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAgY3JlYXRl
UHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CkBAIC04NzQsMTUgKzg3NywxMiBAQCBX
ZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAKICAgICAvKioK
ICAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqLwotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKHByb2Zp
bGVzUGFuZWwpCisgICAgZGlzcG9zZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRo
aXMuX3RyYWNlTG9nSWQpIHsKICAgICAgICAgICAgIENhbnZhc0FnZW50LmRyb3BUcmFjZUxvZyh0
aGlzLl90cmFjZUxvZ0lkKTsKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXF1ZXN0
U3RhdHVzVGltZXIpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2FsaXZlKQotICAgICAgICAgICAg
ICAgIHByb2ZpbGVzUGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0b3IuQ2FudmFz
UHJvZmlsZVR5cGUuVHlwZUlkLCBmYWxzZSk7CiAgICAgICAgICAgICB0aGlzLl9hbGl2ZSA9IGZh
bHNlOwogICAgICAgICB9CiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwppbmRleCBmYjc2NWY5YTUxNDgzYjlm
NWQ4NDhmODFmNThhMTY5YTEwMWNiOTdjLi5hNWEwMDA5MDA1MDQ5OWFhMWYzYjQyOTFhYmRhNDRl
MzQzNTMwMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCkBAIC00MjcsNyArNDI3LDcgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9wcm9maWxlczog
ZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFByb2ZpbGVz
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAgICAgICBy
ZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZVR5cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmlsZXMoKTsKICAgICB9LAogCiAgICAgLyoqCkBA
IC03NTQsMTAgKzc1NCwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Q
cm9maWxlVHlwZX0KKyAqIEBpbXBsZW1lbnRzIHtIZWFwUHJvZmlsZXJBZ2VudC5EaXNwYXRjaGVy
fQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUgPSBmdW5jdGlvbigp
CiB7CiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJU
YWtlIEhlYXAgU25hcHNob3QiKSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckhlYXBQ
cm9maWxlckRpc3BhdGNoZXIodGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQgPSAiSEVBUCI7CkBAIC03NzAsMTIgKzc3MiwxMSBAQCBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAg
ICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bH0gcHJvZmlsZXNQYW5lbAogICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICovCi0gICAg
YnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBidXR0b25DbGlja2Vk
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBwcm9maWxlc1BhbmVsLnRha2VIZWFwU25hcHNo
b3QoKTsKKyAgICAgICAgdGhpcy5fdGFrZUhlYXBTbmFwc2hvdCgpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfSwKIApAQCAtNzkyLDcgKzc5Myw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRl
CiAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0
aXRsZSkKICAgICB7CkBAIC04MDMsMTMgKzgwNCw5MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQog
ICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQot
ICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEByZXR1
cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVQcm9m
aWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50aXRsZSwgcHJvZmlsZS51aWQs
IHByb2ZpbGUubWF4SlNPYmplY3RJZCB8fCAwKTsKICAgICB9LAogCisgICAgX3Rha2VIZWFwU25h
cHNob3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0ZW1wb3JhcnlQcm9maWxlID0g
dGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAgICAgICBpZiAoIXRlbXBvcmFyeVByb2Zp
bGUpCisgICAgICAgICAgICB0aGlzLmFkZFByb2ZpbGUodGhpcy5jcmVhdGVUZW1wb3JhcnlQcm9m
aWxlKCkpOworICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNuYXBzaG90KHRydWUs
IGZ1bmN0aW9uKCkge30pOworICAgICAgICBXZWJJbnNwZWN0b3IudXNlck1ldHJpY3MuUHJvZmls
ZXNIZWFwUHJvZmlsZVRha2VuLnJlY29yZCgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge0hlYXBQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGVIZWFkZXIKKyAg
ICAgKi8KKyAgICBhZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlSGVhZGVyKQorICAg
IHsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHRoaXMuY3JlYXRlUHJvZmlsZShwcm9maWxlSGVh
ZGVyKSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSB1aWQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKKyAgICAgKi8KKyAg
ICBhZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKKyAgICB7CisgICAg
ICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCld
OworICAgICAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgICAgIHByb2ZpbGUudHJhbnNmZXJDaHVu
ayhjaHVuayk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSB1aWQKKyAgICAgKi8KKyAgICBmaW5pc2hIZWFwU25hcHNob3Q6IGZ1bmN0
aW9uKHVpZCkKKyAgICB7CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1h
cFt0aGlzLl9tYWtlS2V5KHVpZCldOworICAgICAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgICAg
IHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90KCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkb25lCisgICAgICogQHBhcmFtIHtu
dW1iZXJ9IHRvdGFsCisgICAgICovCisgICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3M6IGZ1
bmN0aW9uKGRvbmUsIHRvdGFsKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLmZp
bmRUZW1wb3JhcnlQcm9maWxlKCk7CisgICAgICAgIGlmIChwcm9maWxlKQorICAgICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2
ZW50cy5Qcm9ncmVzc1VwZGF0ZWQsIHsicHJvZmlsZSI6IHByb2ZpbGUsICJkb25lIjogZG9uZSwg
InRvdGFsIjogdG90YWx9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisg
ICAgICovCisgICAgcmVzZXRQcm9maWxlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVzZXQoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICog
QHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAg
ICByZW1vdmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlLmNhbGwodGhpcywgcHJv
ZmlsZSk7CisgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSkKKyAgICAgICAgICAgIEhl
YXBQcm9maWxlckFnZW50LnJlbW92ZVByb2ZpbGUocHJvZmlsZS51aWQpOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRoaXM6V2Vi
SW5zcGVjdG9yLlByb2ZpbGVUeXBlLCA/c3RyaW5nLCBBcnJheS48UHJvZmlsZXJBZ2VudC5Qcm9m
aWxlSGVhZGVyPil9IHBvcHVsYXRlQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBfcmVxdWVzdFByb2Zp
bGVzRnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKHBvcHVsYXRlQ2FsbGJhY2spCisgICAgeworICAgICAg
ICBIZWFwUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0ZUNhbGxiYWNrKTsK
KyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90
eXBlCiB9CiAKQEAgLTkwMSw2ICs5ODIsOSBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFk
ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWNlaXZlciA9IGxvYWRlclByb3h5Owog
ICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKi8KICAgICBkaXNwb3Nl
OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVjZWl2ZXIpCkBAIC05MTUs
NyArOTk5LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgKi8KICAgICBfdXBkYXRlVHJhbnNmZXJQcm9ncmVzczogZnVuY3Rpb24odmFsdWUsIG1h
eFZhbHVlKQogICAgIHsKLSAgICAgICAgdmFyIHBlcmNlbnRWYWx1ZSA9ICgobWF4VmFsdWUgPyAo
dmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAqIDEwMCkudG9GaXhlZCgyKTsKKyAgICAgICAgdmFyIHBl
cmNlbnRWYWx1ZSA9ICgobWF4VmFsdWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAqIDEwMCku
dG9GaXhlZCgwKTsKICAgICAgICAgaWYgKHRoaXMuX3NhdmluZ1RvRmlsZSkKICAgICAgICAgICAg
IHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNh
dmluZ1x1MjAyNiAlZFwlIiwgcGVyY2VudFZhbHVlKTsKICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlTbmFwc2hv
dFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9y
eVNuYXBzaG90Vmlldy5qcwppbmRleCA0ZWU0YjBlZDRjNTc3NGM2MGM2MGM3NzkwOGU1MDQwNjMz
YTMyNmRlLi5lMjEzZTJlMWMyYmE2ODFmYjllYzVhMjZiMzMyMTg1YTNhNDhhYTBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBz
aG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2
ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwpAQCAtMjM1LDEwICsyMzUsMTIgQEAgV2ViSW5zcGVjdG9y
Lk5hdGl2ZVNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3Rvcgog
ICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0KKyAqIEBpbXBsZW1lbnRzIHtN
ZW1vcnlBZ2VudC5EaXNwYXRjaGVyfQogICovCiBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQ
cm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
Y2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQs
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGFrZSBOYXRpdmUgSGVhcCBTbmFwc2hvdCIpKTsKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcih0aGlzKTsKICAgICB0
aGlzLl9uZXh0UHJvZmlsZVVpZCA9IDE7CiB9CiAKQEAgLTI1MiwxNSArMjU0LDE0IEBAIFdlYklu
c3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIAogICAgIC8q
KgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAqLwot
ICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHByb2ZpbGVIZWFkZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlcih0aGlzLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlNuYXBzaG90ICVkIiwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpLCB0aGlzLl9u
ZXh0UHJvZmlsZVVpZCk7CiAgICAgICAgICsrdGhpcy5fbmV4dFByb2ZpbGVVaWQ7CiAgICAgICAg
IHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSB0cnVlOwotICAgICAgICBwcm9maWxlc1BhbmVs
LmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZUhlYWRlcik7CisgICAgICAgIHRoaXMuYWRkUHJvZmls
ZShwcm9maWxlSGVhZGVyKTsKICAgICAgICAgcHJvZmlsZUhlYWRlci5sb2FkKGZ1bmN0aW9uKCkg
eyB9KTsKIAogICAgICAgICAvKioKQEAgLTM0Nyw2ICszNDgsMTcgQEAgV2ViSW5zcGVjdG9yLk5h
dGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50
aXRsZSwgLTEpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBA
cGFyYW0ge01lbW9yeUFnZW50LkhlYXBTbmFwc2hvdENodW5rfSBjaHVuaworICAgICAqLworICAg
IGFkZE5hdGl2ZVNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKGNodW5rKQorICAgIHsKKyAgICAgICAg
dmFyIHRlbXBQcm9maWxlID0gdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAgICAgICBp
ZiAodGVtcFByb2ZpbGUpCisgICAgICAgICAgICB0ZW1wUHJvZmlsZS5hZGROYXRpdmVTbmFwc2hv
dENodW5rKGNodW5rKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUucHJvdG90eXBlCiB9CiAKQEAgLTQwMSw2ICs0MTMsOCBAQCBXZWJJbnNwZWN0b3Iu
TmF0aXZlU25hcHNob3RQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKIC8qKgogICogQGNvbnN0
cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXd9CisgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwYXJlbnQKKyAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlcn0gcHJvZmlsZQogICovCiBXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmls
ZSkKIHsKQEAgLTQzOSwxNSArNDUzLDE0IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQcm9m
aWxlVHlwZS5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCiAgICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgKi8KLSAgICBidXR0b25DbGlja2VkOiBmdW5jdGlv
bihwcm9maWxlc1BhbmVsKQorICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQ
cm9maWxlSGVhZGVyKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25hcHNob3QgJWQiLCB0
aGlzLl9uZXh0UHJvZmlsZVVpZCksIHRoaXMuX25leHRQcm9maWxlVWlkKTsKICAgICAgICAgKyt0
aGlzLl9uZXh0UHJvZmlsZVVpZDsKICAgICAgICAgcHJvZmlsZUhlYWRlci5pc1RlbXBvcmFyeSA9
IHRydWU7Ci0gICAgICAgIHByb2ZpbGVzUGFuZWwuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxlSGVh
ZGVyKTsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHByb2ZpbGVIZWFkZXIpOwogICAgICAgICAv
KioKICAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgogICAgICAgICAgKiBAcGFyYW0g
ez9NZW1vcnlBZ2VudC5NZW1vcnlCbG9ja30gbWVtb3J5QmxvY2sKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCA5YWM3NTEx
MGM5YzQ0ZWFkZTU0MDdiYWU2ZWZjMzQzZmQxNDU4MzU2Li4xMjg1ZGJkOGQ0MmY3YjFkMGExM2Y2
YTE1ODY4OTQ3NjExYjM0ZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0zNSwxNCArMzUsMTggQEAgV2ViSW5zcGVj
dG9yLlByb2ZpbGVUeXBlID0gZnVuY3Rpb24oaWQsIG5hbWUpCiB7CiAgICAgdGhpcy5faWQgPSBp
ZDsKICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7V2ViSW5z
cGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnR9Ci0gICAgICovCisgICAgLyoqIEB0eXBl
IHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcj59ICovCisgICAgdGhpcy5fcHJv
ZmlsZXMgPSBbXTsKKyAgICB0aGlzLl9wcm9maWxlc0lkTWFwID0ge307CisgICAgLyoqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudH0gKi8KICAgICB0aGlzLnRy
ZWVFbGVtZW50ID0gbnVsbDsKIH0KIAogV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2ZW50cyA9
IHsKLSAgVmlld1VwZGF0ZWQ6ICJ2aWV3LXVwZGF0ZWQiLAorICAgIEFkZFByb2ZpbGVIZWFkZXI6
ICJhZGQtcHJvZmlsZS1oZWFkZXIiLAorICAgIFJlbW92ZVByb2ZpbGVIZWFkZXI6ICJyZW1vdmUt
cHJvZmlsZS1oZWFkZXIiLAorICAgIFByb2dyZXNzVXBkYXRlZDogInByb2dyZXNzLXVwZGF0ZWQi
LAorICAgIFZpZXdVcGRhdGVkOiAidmlldy11cGRhdGVkIgogfQogCiBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUucHJvdG90eXBlID0gewpAQCAtNzIsMjEgKzc2LDI0IEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0
dXJuIHtib29sZWFufQogICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2Zp
bGVzUGFuZWwpCisgICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0sCiAKLSAgICByZXNldDogZnVuY3Rpb24oKQorICAgIGdldCBk
ZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICByZXR1cm4gIiI7CiAgICAgfSwKIAotICAgIGdl
dCBkZXNjcmlwdGlvbigpCisgICAgLyoqCisgICAgICogQHJldHVybiB7IUFycmF5LjwhV2ViSW5z
cGVjdG9yLlByb2ZpbGVIZWFkZXI+fQorICAgICAqLworICAgIGdldFByb2ZpbGVzOiBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiB0aGlzLl9wcm9m
aWxlcy5maWx0ZXIoZnVuY3Rpb24ocHJvZmlsZSkgeyByZXR1cm4gIXByb2ZpbGUuaXNUZW1wb3Jh
cnk7IH0pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk3LDEwICsxMDQsMjAgQEAgV2ViSW5zcGVj
dG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAg
fSwKIAorICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3RzCisgICAgICogQHBhcmFtIHtudW1i
ZXJ9IHVpZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAg
ICAqLworICAgIGdldFByb2ZpbGU6IGZ1bmN0aW9uKHVpZCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkKV07CisgICAgfSwKKwogICAg
IC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAgICAvKioKICAgICAgKiBA
cGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2Zp
bGVIZWFkZXJ9CisgICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQog
ICAgICAqLwogICAgIGNyZWF0ZVRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKHRpdGxlKQogICAg
IHsKQEAgLTEwOSwxMyArMTI2LDEwMyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90
eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVI
ZWFkZXJ9IHByb2ZpbGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRl
cn0KKyAgICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICov
CiAgICAgY3JlYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CiAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBmb3IgIiArIHRoaXMuX25hbWUgKyAiIHByb2Zp
bGVzLiIpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAbm9zaWRlZWZmZWN0cworICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBpZAorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAg
ICBfbWFrZUtleTogZnVuY3Rpb24oaWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQgKyAnLycg
KyBlc2NhcGUodGhpcy5pZCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7IVdl
Ykluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCisgICAgICovCisgICAgYWRkUHJvZmls
ZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Byb2ZpbGVzLnB1c2go
cHJvZmlsZSk7CisgICAgICAgIC8vIEZJWE1FOiB1aWQgb25seSBiYXNlZCBrZXkgc2hvdWxkIGJl
IGVub3VnaC4KKyAgICAgICAgdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHByb2Zp
bGUudWlkKV0gPSBwcm9maWxlOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLkFkZFByb2ZpbGVIZWFkZXIsIHByb2Zp
bGUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJv
ZmlsZUhlYWRlcn0gcHJvZmlsZQorICAgICAqLworICAgIHJlbW92ZVByb2ZpbGU6IGZ1bmN0aW9u
KHByb2ZpbGUpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Byb2Zp
bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fcHJvZmlsZXNbaV0udWlk
ID09PSBwcm9maWxlLnVpZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzLnNwbGlj
ZShpLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBkZWxldGUgdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHByb2Zp
bGUudWlkKV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3RzCisgICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICovCisgICAgZmlu
ZFRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9wcm9maWxlc1tpXS5pc1RlbXBvcmFyeSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fcHJvZmlsZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwK
KworICAgIF9yZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGVzID0g
dGhpcy5fcHJvZmlsZXMuc2xpY2UoMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJv
ZmlsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBwcm9maWxlID0gcHJvZmlsZXNb
aV07CisgICAgICAgICAgICB2YXIgdmlldyA9IHByb2ZpbGUuZXhpc3RpbmdWaWV3KCk7CisgICAg
ICAgICAgICBpZiAodmlldykgeworICAgICAgICAgICAgICAgIHZpZXcuZGV0YWNoKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCJkaXNwb3NlIiBpbiB2aWV3KQorICAgICAgICAgICAgICAgICAgICB2
aWV3LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuUmVtb3ZlUHJv
ZmlsZUhlYWRlciwgcHJvZmlsZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy50cmVlRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLl9wcm9maWxlcyA9IFtdOworICAgICAg
ICB0aGlzLl9wcm9maWxlc0lkTWFwID0ge307CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUsID9zdHJpbmcsICFB
cnJheS48IVByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcj4pfSBwb3B1bGF0ZUNhbGxiYWNrCisg
ICAgICovCisgICAgX3JlcXVlc3RQcm9maWxlc0Zyb21CYWNrZW5kOiBmdW5jdGlvbihwb3B1bGF0
ZUNhbGxiYWNrKQorICAgIHsKKyAgICB9LAorCisgICAgX3BvcHVsYXRlUHJvZmlsZXM6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGVy
cm9yCisgICAgICAgICAqIEBwYXJhbSB7IUFycmF5LjwhUHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVh
ZGVyPn0gcHJvZmlsZUhlYWRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIHBvcHVs
YXRlQ2FsbGJhY2soZXJyb3IsIHByb2ZpbGVIZWFkZXJzKSB7CisgICAgICAgICAgICBpZiAoZXJy
b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcHJvZmlsZUhlYWRlcnMu
c29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLnVpZCAtIGIudWlkOyB9KTsKKyAgICAgICAg
ICAgIHZhciBjb3VudCA9IHByb2ZpbGVIZWFkZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLmFkZFByb2Zp
bGUodGhpcy5jcmVhdGVQcm9maWxlKHByb2ZpbGVIZWFkZXJzW2ldKSk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQocG9wdWxhdGVDYWxsYmFjay5i
aW5kKHRoaXMpKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0
LnByb3RvdHlwZQogfQogCkBAIC0xMjksMTMgKzIzNiw4IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxl
SGVhZGVyID0gZnVuY3Rpb24ocHJvZmlsZVR5cGUsIHRpdGxlLCB1aWQpCiB7CiAgICAgdGhpcy5f
cHJvZmlsZVR5cGUgPSBwcm9maWxlVHlwZTsKICAgICB0aGlzLnRpdGxlID0gdGl0bGU7Ci0gICAg
aWYgKHVpZCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRoaXMudWlkID0gLTE7Ci0gICAgICAg
IHRoaXMuaXNUZW1wb3JhcnkgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMudWlk
ID0gdWlkOwotICAgICAgICB0aGlzLmlzVGVtcG9yYXJ5ID0gZmFsc2U7Ci0gICAgfQorICAgIHRo
aXMuaXNUZW1wb3JhcnkgPSB1aWQgPT09IHVuZGVmaW5lZDsKKyAgICB0aGlzLnVpZCA9IHRoaXMu
aXNUZW1wb3JhcnkgPyAtMSA6IHVpZDsKICAgICB0aGlzLl9mcm9tRmlsZSA9IGZhbHNlOwogfQog
CkBAIC0xODQsMTAgKzI4Niw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQuIik7CiAgICAg
fSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVs
fSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgZGlzcG9zZTogZnVuY3Rpb24ocHJvZmlsZXNQ
YW5lbCkKKyAgICBkaXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAgLTI4NSw4
ICszODQsNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICB0
aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5fcHJvZmlsZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRh
aW5lci5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtcyI7CiAKLSAgICAvKiogQHR5cGUgeyFB
cnJheS48IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyPn0gKi8KLSAgICB0aGlzLl9wcm9maWxl
cyA9IFtdOwogICAgIHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCA9ICFDYXBhYmlsaXRpZXMucHJvZmls
ZXJDYXVzZXNSZWNvbXBpbGF0aW9uOwogCiAgICAgdGhpcy5fbGF1bmNoZXJWaWV3ID0gbmV3IFdl
Ykluc3BlY3Rvci5Qcm9maWxlTGF1bmNoZXJWaWV3KHRoaXMpOwpAQCAtMzA1LDEwICs0MDIsNiBA
QCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICBpZiAoV2ViSW5z
cGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MuY2FudmFzSW5zcGVjdGlvbi5pc0VuYWJsZWQoKSkK
ICAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkNhbnZh
c1Byb2ZpbGVUeXBlKCkpOwogCi0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclByb2ZpbGVy
RGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVyRGlzcGF0Y2hlcih0aGlzKSk7Ci0g
ICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckhlYXBQcm9maWxlckRpc3BhdGNoZXIobmV3IFdl
Ykluc3BlY3Rvci5IZWFwUHJvZmlsZXJEaXNwYXRjaGVyKHRoaXMpKTsKLSAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLk1lbW9yeURp
c3BhdGNoZXIodGhpcykpOwotCiAgICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVjdG9yRWxlbWVudCgp
OwogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMu
X2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKQEAgLTMzNCwxNCAr
NDI3LDE0IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghIXRoaXMuZmluZFRlbXBv
cmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkp
IHsKKyAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0gdGhpcy5nZXRQcm9maWxlVHlwZShXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAgICAgaWYgKCEhcHJv
ZmlsZVR5cGUuZmluZFRlbXBvcmFyeVByb2ZpbGUoKSkgewogICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbid0IGxvYWQgcHJvZmlsZSB3aGVuIG90
aGVyIHByb2ZpbGUgaXMgcmVjb3JkaW5nLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHZhciBwcm9maWxlVHlwZSA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CiAgICAgICAgIHZhciB0
ZW1wb3JhcnlQcm9maWxlID0gcHJvZmlsZVR5cGUuY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZShXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuVXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
ICsgIi4iICsgZmlsZS5uYW1lKTsKLSAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKHRlbXBv
cmFyeVByb2ZpbGUpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRQcm9maWxlKHRlbXBvcmFyeVBy
b2ZpbGUpOwogCiAgICAgICAgIHRlbXBvcmFyeVByb2ZpbGUuX2Zyb21GaWxlID0gdHJ1ZTsKICAg
ICAgICAgdGVtcG9yYXJ5UHJvZmlsZS5sb2FkRnJvbUZpbGUoZmlsZSk7CkBAIC0zNTUsMTkgKzQ0
OCwyMyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICB0
b2dnbGVSZWNvcmRCdXR0b246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBpc1Byb2Zp
bGluZyA9IHRoaXMuX3NlbGVjdGVkUHJvZmlsZVR5cGUuYnV0dG9uQ2xpY2tlZCh0aGlzKTsKLSAg
ICAgICAgdGhpcy5yZWNvcmRCdXR0b24udG9nZ2xlZCA9IGlzUHJvZmlsaW5nOwotICAgICAgICB0
aGlzLnJlY29yZEJ1dHRvbi50aXRsZSA9IHRoaXMuX3NlbGVjdGVkUHJvZmlsZVR5cGUuYnV0dG9u
VG9vbHRpcDsKLSAgICAgICAgaWYgKGlzUHJvZmlsaW5nKQotICAgICAgICAgICAgdGhpcy5fbGF1
bmNoZXJWaWV3LnByb2ZpbGVTdGFydGVkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
aXMuX2xhdW5jaGVyVmlldy5wcm9maWxlRmluaXNoZWQoKTsKKyAgICAgICAgdmFyIGlzUHJvZmls
aW5nID0gdGhpcy5fc2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25DbGlja2VkKCk7CisgICAgICAg
IHRoaXMuc2V0UmVjb3JkaW5nUHJvZmlsZSh0aGlzLl9zZWxlY3RlZFByb2ZpbGVUeXBlLmlkLCBp
c1Byb2ZpbGluZyk7CisgICAgfSwKKworICAgIF9wb3B1bGF0ZUFsbFByb2ZpbGVzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Byb2ZpbGVyRW5hYmxlZCB8fCB0aGlzLl9w
cm9maWxlc1dlcmVSZXF1ZXN0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMu
X3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgIGZvciAodmFyIHR5cGVJZCBp
biB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwKQorICAgICAgICAgICAgdGhpcy5fcHJvZmlsZVR5
cGVzQnlJZE1hcFt0eXBlSWRdLl9wb3B1bGF0ZVByb2ZpbGVzKCk7CiAgICAgfSwKIAogICAgIHdh
c1Nob3duOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJv
dG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRlUHJvZmls
ZXMoKTsKKyAgICAgICAgdGhpcy5fcG9wdWxhdGVBbGxQcm9maWxlcygpOwogICAgIH0sCiAKICAg
ICBfcHJvZmlsZXJXYXNFbmFibGVkOiBmdW5jdGlvbigpCkBAIC0zNzksNyArNDc2LDcgQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX3Jl
c2V0KCk7CiAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZygpKQotICAgICAgICAgICAgdGhpcy5f
cG9wdWxhdGVQcm9maWxlcygpOworICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVBbGxQcm9maWxl
cygpOwogICAgIH0sCiAKICAgICBfcHJvZmlsZXJXYXNEaXNhYmxlZDogZnVuY3Rpb24oKQpAQCAt
NDE3LDMwICs1MTQsMTMgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0g
ewogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5yZXNldC5jYWxs
KHRoaXMpOwogCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciB2aWV3ID0gdGhpcy5fcHJvZmlsZXNbaV0uZXhp
c3RpbmdWaWV3KCk7Ci0gICAgICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgICAgIHZp
ZXcuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCJkaXNwb3NlIiBpbiB2aWV3KQotICAg
ICAgICAgICAgICAgICAgICB2aWV3LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRoaXMuX3Byb2ZpbGVzW2ldLmRpc3Bvc2UodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVsZXRlIHRoaXMudmlzaWJsZVZpZXc7CisgICAgICAgIGZvciAodmFyIHR5cGVJZCBpbiB0aGlz
Ll9wcm9maWxlVHlwZXNCeUlkTWFwKQorICAgICAgICAgICAgdGhpcy5fcHJvZmlsZVR5cGVzQnlJ
ZE1hcFt0eXBlSWRdLl9yZXNldCgpOwogCisgICAgICAgIGRlbGV0ZSB0aGlzLnZpc2libGVWaWV3
OwogICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50UXVlcnk7CiAgICAgICAgIHRoaXMuc2VhcmNo
Q2FuY2VsZWQoKTsKIAotICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9wcm9maWxlVHlwZXNC
eUlkTWFwKSB7Ci0gICAgICAgICAgICB2YXIgcHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlVHlw
ZXNCeUlkTWFwW2lkXTsKLSAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHByb2ZpbGVUeXBl
LnRyZWVFbGVtZW50OwotICAgICAgICAgICAgdHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsK
LSAgICAgICAgICAgIHRyZWVFbGVtZW50LmhpZGRlbiA9IHRydWU7Ci0gICAgICAgICAgICBwcm9m
aWxlVHlwZS5yZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcHJvZmlsZXMgPSBb
XTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNJZE1hcCA9IHt9OwogICAgICAgICB0aGlzLl9wcm9m
aWxlR3JvdXBzID0ge307CiAgICAgICAgIHRoaXMuX3Byb2ZpbGVHcm91cHNGb3JMaW5rcyA9IHt9
OwogICAgICAgICB0aGlzLl9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQgPSBmYWxzZTsKQEAgLTQ4Miw3
ICs1NjIsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
fSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlfSBw
cm9maWxlVHlwZQorICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0gcHJv
ZmlsZVR5cGUKICAgICAgKi8KICAgICBfcmVnaXN0ZXJQcm9maWxlVHlwZTogZnVuY3Rpb24ocHJv
ZmlsZVR5cGUpCiAgICAgewpAQCAtNDkyLDcgKzU3MiwxOSBAQCBXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHByb2ZpbGVUeXBlLnRyZWVFbGVtZW50Lmhp
ZGRlbiA9IHRydWU7CiAgICAgICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQocHJvZmls
ZVR5cGUudHJlZUVsZW1lbnQpOwogICAgICAgICBwcm9maWxlVHlwZS50cmVlRWxlbWVudC5jaGls
ZHJlbkxpc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFu
ZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgZnVuY3Rpb24g
b25BZGRQcm9maWxlSGVhZGVyKGV2ZW50KSB7CisgICAgICAgICAgICB0aGlzLl9hZGRQcm9maWxl
SGVhZGVyKGV2ZW50LmRhdGEpOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIG9uUmVtb3Zl
UHJvZmlsZUhlYWRlcihldmVudCkgeworICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHJvZmlsZUhl
YWRlcihldmVudC5kYXRhKTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBvblByb2dyZXNz
VXBkYXRlZChldmVudCkgeworICAgICAgICAgICAgdGhpcy5fcmVwb3J0UHJvZmlsZVByb2dyZXNz
KGV2ZW50LmRhdGEucHJvZmlsZSwgZXZlbnQuZGF0YS5kb25lLCBldmVudC5kYXRhLnRvdGFsKTsK
KyAgICAgICAgfQogICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuVmlld1VwZGF0ZWQsIHRoaXMuX3VwZGF0ZVByb2ZpbGVU
eXBlU3BlY2lmaWNVSSwgdGhpcyk7CisgICAgICAgIHByb2ZpbGVUeXBlLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2ZW50cy5BZGRQcm9maWxlSGVhZGVyLCBvbkFk
ZFByb2ZpbGVIZWFkZXIsIHRoaXMpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuUmVtb3ZlUHJvZmlsZUhlYWRlciwg
b25SZW1vdmVQcm9maWxlSGVhZGVyLCB0aGlzKTsKKyAgICAgICAgcHJvZmlsZVR5cGUuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLlByb2dyZXNzVXBkYXRl
ZCwgb25Qcm9ncmVzc1VwZGF0ZWQsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTUyMCw2
ICs2MTIsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
fSwKIAogICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3RzCiAgICAgICogQHBhcmFtIHtzdHJp
bmd9IHRleHQKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZmlsZVR5cGVJZAogICAgICAqIEBy
ZXR1cm4ge3N0cmluZ30KQEAgLTUzMCwyMSArNjIzLDEyIEBAIFdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb2ZpbGVUeXBlSWQKLSAgICAgKiBA
cmV0dXJuIHtzdHJpbmd9CisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFk
ZXJ9IHByb2ZpbGUKICAgICAgKi8KLSAgICBfbWFrZUtleTogZnVuY3Rpb24oaWQsIHByb2ZpbGVU
eXBlSWQpCisgICAgX2FkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gaWQgKyAnLycgKyBlc2NhcGUocHJvZmlsZVR5cGVJZCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHBy
b2ZpbGUKLSAgICAgKi8KLSAgICBhZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fcmVtb3ZlVGVtcG9yYXJ5UHJvZmlsZShwcm9maWxlLnByb2Zp
bGVUeXBlKCkuaWQpOworICAgICAgICBpZiAoIXByb2ZpbGUuaXNUZW1wb3JhcnkpCisgICAgICAg
ICAgICB0aGlzLl9yZW1vdmVUZW1wb3JhcnlQcm9maWxlKHByb2ZpbGUucHJvZmlsZVR5cGUoKS5p
ZCk7CiAKICAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0gcHJvZmlsZS5wcm9maWxlVHlwZSgpOwog
ICAgICAgICB2YXIgdHlwZUlkID0gcHJvZmlsZVR5cGUuaWQ7CkBAIC01NTMsOSArNjM3LDYgQEAg
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc21h
bGwgPSBmYWxzZTsKICAgICAgICAgdmFyIGFsdGVybmF0ZVRpdGxlOwogCi0gICAgICAgIHRoaXMu
X3Byb2ZpbGVzLnB1c2gocHJvZmlsZSk7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhp
cy5fbWFrZUtleShwcm9maWxlLnVpZCwgdHlwZUlkKV0gPSBwcm9maWxlOwotCiAgICAgICAgIGlm
ICghV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLmlzVXNlckluaXRpYXRlZFBy
b2ZpbGUocHJvZmlsZS50aXRsZSkpIHsKICAgICAgICAgICAgIHZhciBwcm9maWxlVGl0bGVLZXkg
PSB0aGlzLl9tYWtlVGl0bGVLZXkocHJvZmlsZS50aXRsZSwgdHlwZUlkKTsKICAgICAgICAgICAg
IGlmICghKHByb2ZpbGVUaXRsZUtleSBpbiB0aGlzLl9wcm9maWxlR3JvdXBzKSkKQEAgLTU2Myw3
ICs2NDQsNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgICAgIHZhciBncm91cCA9IHRoaXMuX3Byb2ZpbGVHcm91cHNbcHJvZmlsZVRpdGxlS2V5
XTsKICAgICAgICAgICAgIGdyb3VwLnB1c2gocHJvZmlsZSk7Ci0KICAgICAgICAgICAgIGlmIChn
cm91cC5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgZ3JvdXAgVHJl
ZUVsZW1lbnQgbm93IHRoYXQgdGhlcmUgYXJlIDIgcHJvZmlsZXMuCiAgICAgICAgICAgICAgICAg
Z3JvdXAuX3Byb2ZpbGVzVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVHcm91
cFNpZGViYXJUcmVlRWxlbWVudChwcm9maWxlLnRpdGxlKTsKQEAgLTYxMCwzNCArNjkwLDI1IEBA
IFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAg
LyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQor
ICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCiAgICAg
ICovCiAgICAgX3JlbW92ZVByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewot
ICAgICAgICB2YXIgc2lkZWJhclBhcmVudCA9IHByb2ZpbGUucHJvZmlsZVR5cGUoKS50cmVlRWxl
bWVudDsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Byb2ZpbGVzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fcHJvZmlsZXNbaV0udWlkID09PSBwcm9m
aWxlLnVpZCkgewotICAgICAgICAgICAgICAgIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc1tpXTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9wcm9maWxlcy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAg
ICAgICAgcHJvZmlsZS5kaXNwb3NlKHRoaXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9wcm9maWxlc0lkTWFw
W3RoaXMuX21ha2VLZXkocHJvZmlsZS51aWQsIHByb2ZpbGUucHJvZmlsZVR5cGUoKS5pZCldOwor
ICAgICAgICBwcm9maWxlLmRpc3Bvc2UoKTsKKyAgICAgICAgcHJvZmlsZS5wcm9maWxlVHlwZSgp
LnJlbW92ZVByb2ZpbGUocHJvZmlsZSk7CiAKKyAgICAgICAgdmFyIHNpZGViYXJQYXJlbnQgPSBw
cm9maWxlLnByb2ZpbGVUeXBlKCkudHJlZUVsZW1lbnQ7CiAgICAgICAgIHZhciBwcm9maWxlVGl0
bGVLZXkgPSB0aGlzLl9tYWtlVGl0bGVLZXkocHJvZmlsZS50aXRsZSwgcHJvZmlsZS5wcm9maWxl
VHlwZSgpLmlkKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3Byb2ZpbGVHcm91cHNbcHJvZmlsZVRp
dGxlS2V5XTsKKyAgICAgICAgdmFyIGdyb3VwID0gdGhpcy5fcHJvZmlsZUdyb3Vwc1twcm9maWxl
VGl0bGVLZXldOworICAgICAgICBpZiAoZ3JvdXApIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9
IGdyb3VwLmluZGV4T2YocHJvZmlsZSk7CisgICAgICAgICAgICBzaWRlYmFyUGFyZW50ID0gZ3Jv
dXAuX3Byb2ZpbGVzVHJlZUVsZW1lbnQgfHwgc2lkZWJhclBhcmVudDsKKyAgICAgICAgICAgIGlm
IChpbmRleCAhPT0gLTEpCisgICAgICAgICAgICAgICAgZ3JvdXAuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgfQogCiAgICAgICAgIHNpZGViYXJQYXJlbnQucmVtb3ZlQ2hpbGQocHJvZmlsZS5f
cHJvZmlsZXNUcmVlRWxlbWVudCk7CiAKLSAgICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9yYXJ5
KSB7Ci0gICAgICAgICAgICBpZiAocHJvZmlsZS5wcm9maWxlVHlwZSgpLmlkID09IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpCi0gICAgICAgICAgICAgICAgSGVh
cFByb2ZpbGVyQWdlbnQucmVtb3ZlUHJvZmlsZShwcm9maWxlLnVpZCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5yZW1vdmVQcm9maWxlKHByb2ZpbGUu
cHJvZmlsZVR5cGUoKS5pZCwgcHJvZmlsZS51aWQpOwotICAgICAgICB9Ci0KICAgICAgICAgLy8g
Tm8gb3RoZXIgaXRlbSB3aWxsIGJlIHNlbGVjdGVkIGlmIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIg
cHJvZmlsZXMsIHNvCiAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHZpZXcgZ2V0cyBjbGVhcmVk
IHdoZW4gdGhlIGxhc3QgcHJvZmlsZSBpcyByZW1vdmVkLgogICAgICAgICBpZiAoIXNpZGViYXJQ
YXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7CkBAIC02NDgsNyArNzE5LDcgQEAgV2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCisgICAgICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKICAgICAgKi8KICAgICBfc2hv
d1Byb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewpAQCAtNjc4LDMxICs3NDksMTUgQEAg
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAv
KioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZUlkCi0gICAgICogQHJldHVybiB7IUFycmF5
LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fQotICAgICAqLwotICAgIGdldFByb2ZpbGVz
OiBmdW5jdGlvbih0eXBlSWQpCi0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAg
ICAgIHZhciBwcm9maWxlc0NvdW50ID0gdGhpcy5fcHJvZmlsZXMubGVuZ3RoOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFy
IHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc1tpXTsKLSAgICAgICAgICAgIGlmICghcHJvZmlsZS5p
c1RlbXBvcmFyeSAmJiBwcm9maWxlLnByb2ZpbGVUeXBlKCkuaWQgPT09IHR5cGVJZCkKLSAgICAg
ICAgICAgICAgICByZXN1bHQucHVzaChwcm9maWxlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKICAgICAgKiBAcGFyYW0ge0hlYXBQcm9maWxl
ckFnZW50LkhlYXBTbmFwc2hvdE9iamVjdElkfSBzbmFwc2hvdE9iamVjdElkCiAgICAgICogQHBh
cmFtIHtzdHJpbmd9IHZpZXdOYW1lCiAgICAgICovCiAgICAgc2hvd09iamVjdDogZnVuY3Rpb24o
c25hcHNob3RPYmplY3RJZCwgdmlld05hbWUpCiAgICAgewotICAgICAgICB2YXIgaGVhcFByb2Zp
bGVzID0gdGhpcy5nZXRQcm9maWxlcyhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5
cGUuVHlwZUlkKTsKKyAgICAgICAgdmFyIGhlYXBQcm9maWxlcyA9IHRoaXMuZ2V0UHJvZmlsZVR5
cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmls
ZXMoKTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFwUHJvZmlsZXMubGVuZ3RoOyBp
KyspIHsKICAgICAgICAgICAgIHZhciBwcm9maWxlID0gaGVhcFByb2ZpbGVzW2ldOwotICAgICAg
ICAgICAgLy8gVE9ETzogYWxsb3cgdG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZl
cmFsIG9wdGlvbnMuCisgICAgICAgICAgICAvLyBGSVhNRTogYWxsb3cgdG8gY2hvb3NlIHNuYXBz
aG90IGlmIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMuCiAgICAgICAgICAgICBpZiAocHJvZmls
ZS5tYXhKU09iamVjdElkID49IHNuYXBzaG90T2JqZWN0SWQpIHsKICAgICAgICAgICAgICAgICB0
aGlzLl9zaG93UHJvZmlsZShwcm9maWxlKTsKICAgICAgICAgICAgICAgICBwcm9maWxlLnZpZXco
KS5jaGFuZ2VWaWV3KHZpZXdOYW1lLCBmdW5jdGlvbigpIHsKQEAgLTcxNSwxNSArNzcwLDEyIEBA
IFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlSWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
UHJvZmlsZUhlYWRlcn0KICAgICAgKi8KLSAgICBmaW5kVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rp
b24odHlwZUlkKQorICAgIF9jcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQp
CiAgICAgewotICAgICAgICB2YXIgcHJvZmlsZXNDb3VudCA9IHRoaXMuX3Byb2ZpbGVzLmxlbmd0
aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlc0NvdW50OyArK2kpCi0gICAg
ICAgICAgICBpZiAodGhpcy5fcHJvZmlsZXNbaV0ucHJvZmlsZVR5cGUoKS5pZCA9PT0gdHlwZUlk
ICYmIHRoaXMuX3Byb2ZpbGVzW2ldLmlzVGVtcG9yYXJ5KQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9wcm9maWxlc1tpXTsKLSAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB0
eXBlID0gdGhpcy5nZXRQcm9maWxlVHlwZSh0eXBlSWQpOworICAgICAgICBpZiAoIXR5cGUuZmlu
ZFRlbXBvcmFyeVByb2ZpbGUoKSkKKyAgICAgICAgICAgIHR5cGUuYWRkUHJvZmlsZSh0eXBlLmNy
ZWF0ZVRlbXBvcmFyeVByb2ZpbGUoKSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNzMxLDggKzc4
Myw4IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8K
ICAgICBfcmVtb3ZlVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odHlwZUlkKQogICAgIHsKLSAg
ICAgICAgdmFyIHRlbXBvcmFyeVByb2ZpbGUgPSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKHR5
cGVJZCk7Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlQcm9maWxlKQorICAgICAgICB2YXIgdGVtcG9y
YXJ5UHJvZmlsZSA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUodHlwZUlkKS5maW5kVGVtcG9yYXJ5UHJv
ZmlsZSgpOworICAgICAgICBpZiAoISF0ZW1wb3JhcnlQcm9maWxlKQogICAgICAgICAgICAgdGhp
cy5fcmVtb3ZlUHJvZmlsZUhlYWRlcih0ZW1wb3JhcnlQcm9maWxlKTsKICAgICB9LAogCkBAIC03
NDIsMzAgKzc5NCw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgKi8KICAgICBnZXRQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQsIHVpZCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCB0eXBl
SWQpXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBjaHVuawotICAgICAqLwotICAgIF9hZGRIZWFwU25hcHNob3RD
aHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlID0g
dGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCldOwotICAgICAgICBpZiAoIXByb2ZpbGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2ZpbGUudHJhbnNmZXJDaHVuayhjaHVuayk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKLSAgICAgKi8KLSAg
ICBfZmluaXNoSGVhcFNuYXBzaG90OiBmdW5jdGlvbih1aWQpCi0gICAgewotICAgICAgICB2YXIg
cHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9m
aWxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLmZpbmlzaEhlYXBTbmFw
c2hvdCgpOworICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9maWxlVHlwZSh0eXBlSWQpLmdldFBy
b2ZpbGUodWlkKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC03OTAsNyArODE5LDcgQEAgV2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHNob3dQcm9m
aWxlOiBmdW5jdGlvbih0eXBlSWQsIHVpZCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dQcm9m
aWxlKHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleShOdW1iZXIodWlkKSwgdHlwZUlk
KV0pOworICAgICAgICB0aGlzLl9zaG93UHJvZmlsZSh0aGlzLmdldFByb2ZpbGUodHlwZUlkLCBO
dW1iZXIodWlkKSkpOwogICAgIH0sCiAKICAgICBjbG9zZVZpc2libGVWaWV3OiBmdW5jdGlvbigp
CkBAIC05NDgsMjQgKzk3NywzNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBjdXJyZW50Vmlldy5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3Vs
dCgpOwogICAgIH0sCiAKLSAgICBfc2VhcmNoYWJsZVZpZXdzOiBmdW5jdGlvbigpCisgICAgLyoq
CisgICAgICogQHJldHVybiB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fQor
ICAgICAqLworICAgIF9nZXRBbGxQcm9maWxlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dmFyIHZpZXdzID0gW107Ci0KLSAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2li
bGVWaWV3OwotICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNl
YXJjaCkKLSAgICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICB2YXIg
cHJvZmlsZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgdHlwZUlkIGluIHRoaXMuX3Byb2ZpbGVU
eXBlc0J5SWRNYXApCisgICAgICAgICAgICBwcm9maWxlcyA9IHByb2ZpbGVzLmNvbmNhdCh0aGlz
Ll9wcm9maWxlVHlwZXNCeUlkTWFwW3R5cGVJZF0uZ2V0UHJvZmlsZXMoKSk7CisgICAgICAgIHJl
dHVybiBwcm9maWxlczsKKyAgICB9LAogCi0gICAgICAgIHZhciBwcm9maWxlc0xlbmd0aCA9IHRo
aXMuX3Byb2ZpbGVzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxl
c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVz
W2ldOwotICAgICAgICAgICAgdmFyIHZpZXcgPSBwcm9maWxlLnZpZXcoKTsKLSAgICAgICAgICAg
IGlmICghdmlldy5wZXJmb3JtU2VhcmNoIHx8IHZpZXcgPT09IHZpc2libGVWaWV3KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmlld3MucHVzaCh2aWV3KTsKKyAgICAv
KioKKyAgICAgKiBAcmV0dXJuIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuVmlldz59CisgICAgICov
CisgICAgX3NlYXJjaGFibGVWaWV3czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHBy
b2ZpbGVzID0gdGhpcy5fZ2V0QWxsUHJvZmlsZXMoKTsKKyAgICAgICAgdmFyIHNlYXJjaGFibGVW
aWV3cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgdmlldyA9IHByb2ZpbGVzW2ldLnZpZXcoKTsKKyAgICAg
ICAgICAgIGlmICh2aWV3LnBlcmZvcm1TZWFyY2gpCisgICAgICAgICAgICAgICAgc2VhcmNoYWJs
ZVZpZXdzLnB1c2godmlldykKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB2aWV3czsKKyAg
ICAgICAgdmFyIGluZGV4ID0gc2VhcmNoYWJsZVZpZXdzLmluZGV4T2YodGhpcy52aXNpYmxlVmll
dyk7CisgICAgICAgIGlmIChpbmRleCA+IDApIHsKKyAgICAgICAgICAgIC8vIE1vdmUgdmlzaWJs
ZVZpZXcgdG8gdGhlIGZpcnN0IHBvc2l0aW9uLgorICAgICAgICAgICAgc2VhcmNoYWJsZVZpZXdz
LnNwbGljZShpbmRleCwgMSk7CisgICAgICAgICAgICBzZWFyY2hhYmxlVmlld3Muc3BsaWNlKDAs
IDAsIHRoaXMudmlzaWJsZVZpZXcpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZWFyY2hh
YmxlVmlld3M7CiAgICAgfSwKIAogICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKHZpZXcs
IG1hdGNoZXMpCkBAIC05OTUsMTMgKzEwMzYsMTAgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXgg
PSAwOwogICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAKLSAgICAgICAgaWYgKCF0
aGlzLl9wcm9maWxlcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIg
cHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzW2ldOwotICAgICAgICAgICAgcHJvZmlsZS5fcHJvZmls
ZXNUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzID0gMDsKLSAgICAgICAgfQorICAgICAgICB2YXIg
cHJvZmlsZXMgPSB0aGlzLl9nZXRBbGxQcm9maWxlcygpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHByb2ZpbGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgcHJvZmlsZXNbaV0uX3By
b2ZpbGVzVHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlcyA9IDA7CisvLyAgICAgICAgdGhpcy5fZ2V0
QWxsUHJvZmlsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHByb2ZpbGUpIHsgcHJvZmlsZS5fcHJvZmls
ZXNUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzID0gMDsgfSk7CiAgICAgfSwKIAogICAgIF91cGRh
dGVJbnRlcmZhY2U6IGZ1bmN0aW9uKCkKQEAgLTEwNjQsMzQgKzExMDIsNiBAQCBXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAg
X3BvcHVsYXRlUHJvZmlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
cHJvZmlsZXJFbmFibGVkIHx8IHRoaXMuX3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSB0
eXBlCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gZXJyb3IKLSAgICAgICAgICogQHBhcmFt
IHtBcnJheS48UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyPn0gcHJvZmlsZUhlYWRlcnMKLSAg
ICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlQ2FsbGJhY2sodHlwZSwgZXJyb3Is
IHByb2ZpbGVIZWFkZXJzKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgcHJvZmlsZUhlYWRlcnMuc29ydChmdW5jdGlvbihhLCBi
KSB7IHJldHVybiBhLnVpZCAtIGIudWlkOyB9KTsKLSAgICAgICAgICAgIHZhciBwcm9maWxlSGVh
ZGVyc0xlbmd0aCA9IHByb2ZpbGVIZWFkZXJzLmxlbmd0aDsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcHJvZmlsZUhlYWRlcnNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IHZhciBwcm9maWxlSGVhZGVyID0gcHJvZmlsZUhlYWRlcnNbaV07Ci0gICAgICAgICAgICAgICAg
dmFyIHByb2ZpbGVUeXBlID0gdGhpcy5nZXRQcm9maWxlVHlwZSh0eXBlIHx8IHByb2ZpbGVIZWFk
ZXIudHlwZUlkKTsKLSAgICAgICAgICAgICAgICB0aGlzLmFkZFByb2ZpbGVIZWFkZXIocHJvZmls
ZVR5cGUuY3JlYXRlUHJvZmlsZShwcm9maWxlSGVhZGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRl
Q2FsbGJhY2suYmluZCh0aGlzLCBudWxsKSk7Ci0gICAgICAgIEhlYXBQcm9maWxlckFnZW50Lmdl
dFByb2ZpbGVIZWFkZXJzKHBvcHVsYXRlQ2FsbGJhY2suYmluZCh0aGlzLCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKSk7Ci0KLSAgICAgICAgdGhpcy5fcHJvZmls
ZXNXZXJlUmVxdWVzdGVkID0gdHJ1ZTsKLSAgICB9LAotCiAgICAgLyoqCiAgICAgICogQHBhcmFt
IHshV2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwpAQCAtMTEyNSw0NyArMTEzNSwy
NCBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgc2V0UmVj
b3JkaW5nUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZVR5cGUsIGlzUHJvZmlsaW5nKQogICAgIHsK
ICAgICAgICAgdmFyIHByb2ZpbGVUeXBlT2JqZWN0ID0gdGhpcy5nZXRQcm9maWxlVHlwZShwcm9m
aWxlVHlwZSk7Ci0gICAgICAgIHByb2ZpbGVUeXBlT2JqZWN0LnNldFJlY29yZGluZ1Byb2ZpbGUo
aXNQcm9maWxpbmcpOwogICAgICAgICB0aGlzLnJlY29yZEJ1dHRvbi50b2dnbGVkID0gaXNQcm9m
aWxpbmc7CiAgICAgICAgIHRoaXMucmVjb3JkQnV0dG9uLnRpdGxlID0gcHJvZmlsZVR5cGVPYmpl
Y3QuYnV0dG9uVG9vbHRpcDsKICAgICAgICAgaWYgKGlzUHJvZmlsaW5nKSB7CiAgICAgICAgICAg
ICB0aGlzLl9sYXVuY2hlclZpZXcucHJvZmlsZVN0YXJ0ZWQoKTsKLSAgICAgICAgICAgIGlmICgh
dGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZShwcm9maWxlVHlwZSkpCi0gICAgICAgICAgICAgICAg
dGhpcy5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVUeXBlT2JqZWN0LmNyZWF0ZVRlbXBvcmFyeVBy
b2ZpbGUoKSk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9jcmVhdGVUZW1w
b3JhcnlQcm9maWxlKHByb2ZpbGVUeXBlKTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB0
aGlzLl9sYXVuY2hlclZpZXcucHJvZmlsZUZpbmlzaGVkKCk7Ci0gICAgICAgICAgICB0aGlzLl9y
ZW1vdmVUZW1wb3JhcnlQcm9maWxlKHByb2ZpbGVUeXBlKTsKLSAgICAgICAgfQotICAgIH0sCi0K
LSAgICB0YWtlSGVhcFNuYXBzaG90OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgdGVt
cG9yYXJ5UmVjb3JkaW5nUHJvZmlsZSA9IHRoaXMuZmluZFRlbXBvcmFyeVByb2ZpbGUoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7Ci0gICAgICAgIGlmICghdGVt
cG9yYXJ5UmVjb3JkaW5nUHJvZmlsZSkgewotICAgICAgICAgICAgdmFyIHByb2ZpbGVUeXBlT2Jq
ZWN0ID0gdGhpcy5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUuVHlwZUlkKTsKLSAgICAgICAgICAgIHRoaXMuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxl
VHlwZU9iamVjdC5jcmVhdGVUZW1wb3JhcnlQcm9maWxlKCkpOwotICAgICAgICB9Ci0gICAgICAg
IHRoaXMuX2xhdW5jaGVyVmlldy5wcm9maWxlU3RhcnRlZCgpOwotICAgICAgICBmdW5jdGlvbiBk
b25lKCkgewotICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3LnByb2ZpbGVGaW5pc2hlZCgp
OwotICAgICAgICB9Ci0gICAgICAgIEhlYXBQcm9maWxlckFnZW50LnRha2VIZWFwU25hcHNob3Qo
dHJ1ZSwgZG9uZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVzZXJNZXRyaWNz
LlByb2ZpbGVzSGVhcFByb2ZpbGVUYWtlbi5yZWNvcmQoKTsKICAgICB9LAogCiAgICAgLyoqCisg
ICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKICAgICAg
KiBAcGFyYW0ge251bWJlcn0gZG9uZQogICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbAogICAg
ICAqLwotICAgIF9yZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzczogZnVuY3Rpb24oZG9uZSwgdG90
YWwpCi0gICAgewotICAgICAgICB2YXIgdGVtcG9yYXJ5UHJvZmlsZSA9IHRoaXMuZmluZFRlbXBv
cmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7
Ci0gICAgICAgIGlmICh0ZW1wb3JhcnlQcm9maWxlKSB7Ci0gICAgICAgICAgICB0ZW1wb3JhcnlQ
cm9maWxlLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
LjJmJSIsIChkb25lIC8gdG90YWwpICogMTAwKTsKLSAgICAgICAgICAgIHRlbXBvcmFyeVByb2Zp
bGUuc2lkZWJhckVsZW1lbnQud2FpdCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoZG9uZSA+PSB0
b3RhbCkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVUZW1wb3JhcnlQcm9maWxlKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOwotICAgICAgICB9CisgICAg
X3JlcG9ydFByb2ZpbGVQcm9ncmVzczogZnVuY3Rpb24ocHJvZmlsZSwgZG9uZSwgdG90YWwpCisg
ICAgeworICAgICAgICBwcm9maWxlLnNpZGViYXJFbGVtZW50LnN1YnRpdGxlID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCIlLjBmJSIsIChkb25lIC8gdG90YWwpICogMTAwKTsKKyAgICAgICAgcHJv
ZmlsZS5zaWRlYmFyRWxlbWVudC53YWl0ID0gdHJ1ZTsKICAgICB9LAogCiAgICAgLyoqIApAQCAt
MTE4Miw3ICsxMTY5LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAoIW9iamVjdElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IHZhciBoZWFwUHJvZmlsZXMgPSB0aGlzLmdldFByb2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhp
cy5nZXRQcm9maWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlw
ZUlkKS5nZXRQcm9maWxlcygpOwogICAgICAgICBpZiAoIWhlYXBQcm9maWxlcy5sZW5ndGgpCiAg
ICAgICAgICAgICByZXR1cm47CiAKQEAgLTEyMDgsMTU2ICsxMTk1LDYgQEAgV2ViSW5zcGVjdG9y
LlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogCiAvKioKICAqIEBjb25zdHJ1Y3RvcgotICog
QGltcGxlbWVudHMge01lbW9yeUFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gKi8KLVdlYkluc3BlY3Rvci5NZW1v
cnlEaXNwYXRjaGVyID0gZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKLXsKLSAgICB0aGlzLl9wcm9m
aWxlc1BhbmVsID0gcHJvZmlsZXNQYW5lbDsKLX0KLQotV2ViSW5zcGVjdG9yLk1lbW9yeURpc3Bh
dGNoZXIucHJvdG90eXBlID0gewotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICog
QHBhcmFtIHtNZW1vcnlBZ2VudC5IZWFwU25hcHNob3RDaHVua30gY2h1bmsKLSAgICAgKi8KLSAg
ICBhZGROYXRpdmVTbmFwc2hvdENodW5rOiBmdW5jdGlvbihjaHVuaykKLSAgICB7Ci0gICAgICAg
IHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNQYW5lbC5maW5kVGVtcG9yYXJ5UHJvZmlsZShX
ZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOwotICAgICAgICBp
ZiAoIXByb2ZpbGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHByb2ZpbGUuYWRkTmF0
aXZlU25hcHNob3RDaHVuayhjaHVuayk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rv
cgotICogQGltcGxlbWVudHMge1Byb2ZpbGVyQWdlbnQuRGlzcGF0Y2hlcn0KLSAqIEBwYXJhbSB7
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAqLwotV2ViSW5zcGVj
dG9yLlByb2ZpbGVyRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCi17Ci0gICAg
dGhpcy5fcHJvZmlsZXNQYW5lbCA9IHByb2ZpbGVzUGFuZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5Q
cm9maWxlckRpc3BhdGNoZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCi0gICAgICovCi0gICAgYWRkUHJv
ZmlsZUhlYWRlcjogZnVuY3Rpb24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxl
VHlwZSA9IHRoaXMuX3Byb2ZpbGVzUGFuZWwuZ2V0UHJvZmlsZVR5cGUocHJvZmlsZS50eXBlSWQp
OwotICAgICAgICB0aGlzLl9wcm9maWxlc1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZVR5
cGUuY3JlYXRlUHJvZmlsZShwcm9maWxlKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBv
dmVycmlkZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gY2h1bmsKLSAgICAgKi8KLSAgICBhZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlk
LCBjaHVuaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwuX2FkZEhlYXBTbmFw
c2hvdENodW5rKHVpZCwgY2h1bmspOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdWlkCi0gICAgICovCi0gICAgZmluaXNoSGVhcFNu
YXBzaG90OiBmdW5jdGlvbih1aWQpCi0gICAgewotICAgICAgICB0aGlzLl9wcm9maWxlc1BhbmVs
Ll9maW5pc2hIZWFwU25hcHNob3QodWlkKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92
ZXJyaWRlCi0gICAgICogQHBhcmFtIHtib29sZWFufSBpc1Byb2ZpbGluZwotICAgICAqLwotICAg
IHNldFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKGlzUHJvZmlsaW5nKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5zZXRSZWNvcmRpbmdQcm9maWxlKFdlYkluc3BlY3Rvci5D
UFVQcm9maWxlVHlwZS5UeXBlSWQsIGlzUHJvZmlsaW5nKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgcmVzZXRQcm9maWxlczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fcmVzZXQoKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGRvbmUKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwKLSAgICAgKi8KLSAgICByZXBvcnRIZWFwU25hcHNo
b3RQcm9ncmVzczogZnVuY3Rpb24oZG9uZSwgdG90YWwpCi0gICAgewotICAgICAgICB0aGlzLl9w
cm9maWxlc1BhbmVsLl9yZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhkb25lLCB0b3RhbCk7Ci0g
ICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxlbWVudHMge0hlYXBQcm9m
aWxlckFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsfSBwcm9maWxlc1BhbmVsCi0gKi8KLVdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZXJEaXNwYXRj
aGVyID0gZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKLXsKLSAgICB0aGlzLl9wcm9maWxlc1BhbmVs
ID0gcHJvZmlsZXNQYW5lbDsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlckRpc3BhdGNo
ZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdl
bnQuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQotICAgICAqLwotICAgIGFkZFByb2ZpbGVIZWFkZXI6
IGZ1bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZVR5cGUgPSB0aGlz
Ll9wcm9maWxlc1BhbmVsLmdldFByb2ZpbGVUeXBlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQpOwotICAgICAgICB0aGlzLl9wcm9maWxlc1BhbmVsLmFkZFByb2Zp
bGVIZWFkZXIocHJvZmlsZVR5cGUuY3JlYXRlUHJvZmlsZShwcm9maWxlKSk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKLSAgICAgKi8KLSAgICBhZGRIZWFwU25hcHNob3RD
aHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVz
UGFuZWwuX2FkZEhlYXBTbmFwc2hvdENodW5rKHVpZCwgY2h1bmspOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdWlkCi0gICAgICov
Ci0gICAgZmluaXNoSGVhcFNuYXBzaG90OiBmdW5jdGlvbih1aWQpCi0gICAgewotICAgICAgICB0
aGlzLl9wcm9maWxlc1BhbmVsLl9maW5pc2hIZWFwU25hcHNob3QodWlkKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgcmVzZXRQcm9maWxlczogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fcmVzZXQoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9
IGRvbmUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwKLSAgICAgKi8KLSAgICByZXBvcnRI
ZWFwU25hcHNob3RQcm9ncmVzczogZnVuY3Rpb24oZG9uZSwgdG90YWwpCi0gICAgewotICAgICAg
ICB0aGlzLl9wcm9maWxlc1BhbmVsLl9yZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhkb25lLCB0
b3RhbCk7Ci0gICAgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnR9CiAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3Iu
UHJvZmlsZUhlYWRlcn0gcHJvZmlsZQogICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlRm9ybWF0CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggZGFkOWI0OWZhNDU2NThkNGRkMDFhMTBlM2UyYTViYzllNGNjMzM0ZS4uY2MwNGI3NTc4
MjAzZmFiZGJhN2JmODkwNGJjZmI4NTAzNWQzNzcxMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisy
MDEzLTAyLTIyICBBbGV4ZWkgRmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBtb3ZlIHByb2ZpbGUgdHlwZSBzcGVjaWZpYyBjb2RlIG91dCBvZiBQ
cm9maWxlc1BhbmVsIChyZWZhY3RvcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMDU5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgcHJvZmlsZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkg
b3V0IG9mIFByb2ZpbGVzUGFuZWwgY2xhc3MuCisgICAgICAgIFRoaXMgaXMgYSBmaXJzdCBwYXJ0
IG9mIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGUgZnVuY3Rpb25hbGl0eSBpc24ndCBjaGFuZ2VkLgorCisgICAgICAg
ICogaW5zcGVjdG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZhcy1yZXBsYXktbG9nLWdyaWQuaHRt
bDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRv
bS13cmFwcGVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvaGVh
cC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13cmFwcGVyLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfSGVh
cFNuYXBzaG90VGVzdC4pOgorICAgICAgICAoaW5pdGlhbGl6ZV9IZWFwU25hcHNob3RUZXN0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmlsZXItdGVzdC5qczoKKyAgICAgICAg
KGluaXRpYWxpemVfUHJvZmlsZXJUZXN0Lkluc3BlY3RvclRlc3Quc3RhcnRQcm9maWxlclRlc3Qu
c3RhcnRUZXN0KToKKyAgICAgICAgKGluaXRpYWxpemVfUHJvZmlsZXJUZXN0Lkluc3BlY3RvclRl
c3Quc3RhcnRQcm9maWxlclRlc3QpOgorCiAyMDEzLTAyLTIyICBSYXBoYWVsIEt1Ym8gZGEgQ29z
dGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L2NhbnZhczJkL2NhbnZhcy1yZXBsYXktbG9nLWdyaWQuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1ncmlkLmh0bWwKaW5kZXgg
NDJjMDQzMDFkM2NlYjhhYzA1YWY4MTNlYmUxMTEzZWJjMzc4N2Y4Zi4uMDgzNzUwYzk0YTY1OWQ1
YzQ2MDJjMTMyMTc4ODQ4NTg2NWYzYTllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZhcy1yZXBsYXktbG9nLWdyaWQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFzLXJlcGxheS1sb2ct
Z3JpZC5odG1sCkBAIC01Miw5ICs1Miw5IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHZhciBwcm9m
aWxlVmlldzsKICAgICB2YXIgZGF0YUdyaWQ7CiAKLSAgICBmdW5jdGlvbiBkaWRTdGFydENhcHR1
cmluZ0ZyYW1lKHByb2ZpbGVzUGFuZWwsIGZyYW1lSWQsIGVycm9yLCB0cmFjZUxvZ0lkKQorICAg
IGZ1bmN0aW9uIGRpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUoZnJhbWVJZCwgZXJyb3IsIHRyYWNlTG9n
SWQpCiAgICAgewotICAgICAgICBwcm9maWxlSGVhZGVyID0gcHJvZmlsZXNQYW5lbC5nZXRQcm9m
aWxlcyhXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkKVswXTsKKyAgICAgICAg
cHJvZmlsZUhlYWRlciA9IHByb2ZpbGVUeXBlLmdldFByb2ZpbGVzKClbMF0KICAgICAgICAgcHJv
ZmlsZXNQYW5lbC5fc2hvd1Byb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkU25pZmZlcihwcm9maWxlSGVhZGVyLCAiX3VwZGF0ZUNhcHR1cmluZ1N0YXR1cyIs
IGRpZFJlY2VpdmVGaXJzdEZyYW1lKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUlu
Q29uc29sZSgiZG9Tb21lQ2FudmFzQ2FsbHMoMikiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWluc3BlY3QtZG9tLXdyYXBwZXItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
aW5zcGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQKaW5kZXggN2ZkNWQxMGNhZjQ1MzdkMGZh
MGY5M2NmMTk4MjI2NGU1YTEwNGVhOS4uNjFlMDdiN2UxOTc5MzJmMjRiZmRkNzI2MTk4MjRjYjc1
ODczZjM2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAt
c25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1l
eHBlY3RlZC50eHQKQEAgLTEsNiArMSw2IEBACiBUZXN0IHRoYXQgcmVzb2x2aW5nIGhlYXAgc25h
cGhvdCBvYmplY3QgdG8gYSBKUyBvYmplY3Qgd2lsbCBub3QgY3Jhc2ggb24gRE9NIHdyYXBwZXIg
Ym9pbGVycGxhdGUuIFRlc3QgcGFzc2VzIGlmIGl0IGRvZXNuJ3QgY3Jhc2guCiAKLV9maW5pc2hI
ZWFwU25hcHNob3QgMQorZmluaXNoSGVhcFNuYXBzaG90IDEKIF9jYWxsTG9hZENhbGxiYWNrcwog
RXJyb3IgcmVzb2x2aW5nIGhlYXAgc25hcHNob3Qgb2JqZWN0OiBPYmplY3QgaXMgbm90IGF2YWls
YWJsZQogRXJyb3IgcmVzb2x2aW5nIGhlYXAgc25hcHNob3Qgb2JqZWN0OiBPYmplY3QgaXMgbm90
IGF2YWlsYWJsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hl
YXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sCmluZGV4
IDkyNGQ1YzVlOTlkMGExN2RhNTI2MjA2YmNiYjVhODVmMjc1YjdjOGEuLjIzODA4NDhmYjgzODA0
NzRlMDE4M2YxODBmYTdiZDcxNzk1NzM0NTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWluc3BlY3QtZG9tLXdyYXBwZXIuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRv
bS13cmFwcGVyLmh0bWwKQEAgLTE4LDE2ICsxOCwxNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAg
IGZ1bmN0aW9uIHN0ZXAwKCkKICAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlcyA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJvZmlsZXMoIkhFQVAiKTsKKyAgICAgICAgdmFyIGhl
YXBQcm9maWxlVHlwZSA9ICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmdldFByb2ZpbGVU
eXBlKCJIRUFQIik7CisgICAgICAgIHZhciBwcm9maWxlcyA9IGhlYXBQcm9maWxlVHlwZS5nZXRQ
cm9maWxlcygpOwogICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9zaG93UHJv
ZmlsZShwcm9maWxlc1twcm9maWxlcy5sZW5ndGggLSAxXSk7Ci0gICAgICAgIEluc3BlY3RvclRl
c3QuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiX2ZpbmlzaEhlYXBT
bmFwc2hvdCIsIHN0ZXAxKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKGhlYXBQ
cm9maWxlVHlwZSwgImZpbmlzaEhlYXBTbmFwc2hvdCIsIHN0ZXAxKTsKICAgICB9CiAKICAgICBm
dW5jdGlvbiBzdGVwMSh1aWQpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiX2ZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQoImZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKICAgICAgICAgdmFyIHBhbmVs
ID0gV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlczsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSBw
YW5lbC5fcHJvZmlsZXNJZE1hcFtwYW5lbC5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSBwYW5l
bC5nZXRQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQs
IHVpZCk7CiAgICAgICAgIHByb2ZpbGUubG9hZChzdGVwMi5iaW5kKHRoaXMpKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90
LWxvYWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNo
b3QtbG9hZGVyLmh0bWwKaW5kZXggMGNkYWJkZDliZTQzZDZhNzM5NWU5NDY0OGU2OWYzOWM3MWY4
NTU0Yy4uMTU4ZjMwODAyN2Q4ZDRmMDFkYzQzMjAzNDZjODE2N2U4NGE0YjFhOSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9h
ZGVyLmh0bWwKQEAgLTI4LDcgKzI4LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICBt
YXhKU09iamVjdElkOiA2CiAgICAgICAgIH0pOwogCi0gICAgICAgIHZhciBwcm9maWxlSGVhZGVy
ID0gcGFuZWwuX3Byb2ZpbGVzWzBdOworICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IHBhbmVs
LmdldFByb2ZpbGVUeXBlKCJIRUFQIikuZ2V0UHJvZmlsZXMoKVswXTsKIAogICAgICAgICBmdW5j
dGlvbiBnZXRIZWFwU25hcHNob3RNb2NrKHVpZCkgewogICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBzb3VyY2VTdHJpbmdpZmllZC5sZW5ndGg7IGkgPCBsOyBpICs9IHBhcnRTaXplKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
dGVzdC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRl
c3QuanMKaW5kZXggMmU2YmIxZmZjZThhZmM2OTI2ZmQ1OGEyZjgzNDExODk1N2U2MGViZC4uMjlj
YTc2MWU5M2IxZDM3MzlmYjM2ZDM5ZjA2ZTZjNzE2ZTQxNGQwZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcworKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCkBAIC03MzIs
MTIgKzczMiwxMiBAQCBJbnNwZWN0b3JUZXN0LnRha2VBbmRPcGVuU25hcHNob3QgPSBmdW5jdGlv
bihnZW5lcmF0b3IsIGNhbGxiYWNrKQogICAgICAgICBzbmFwc2hvdC5zbmFwc2hvdC50eXBlSWQg
PSAiSEVBUCI7CiAgICAgICAgIHNuYXBzaG90LnNuYXBzaG90LnRpdGxlID0gcHJvZmlsZS50aXRs
ZTsKICAgICAgICAgc25hcHNob3Quc25hcHNob3QudWlkID0gcHJvZmlsZS51aWQ7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX2FkZEhlYXBTbmFwc2hvdENodW5rKHVpZCwg
SlNPTi5zdHJpbmdpZnkoc25hcHNob3QpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5w
cm9maWxlcy5fZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7CisgICAgICAgIHByb2ZpbGVUeXBlLmFk
ZEhlYXBTbmFwc2hvdENodW5rKHVpZCwgSlNPTi5zdHJpbmdpZnkoc25hcHNob3QpKTsKKyAgICAg
ICAgcHJvZmlsZVR5cGUuZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7CiAgICAgfQogICAgIEluc3Bl
Y3RvclRlc3Qub3ZlcnJpZGUoSGVhcFByb2ZpbGVyQWdlbnQsICJnZXRIZWFwU25hcHNob3QiLCBw
dXNoR2VuZXJhdGVkU25hcHNob3QpOwogICAgIEluc3BlY3RvclRlc3QuX3Rha2VBbmRPcGVuU25h
cHNob3RDYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmls
ZXMuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxlKTsKKyAgICBwcm9maWxlVHlwZS5hZGRQcm9maWxl
KHByb2ZpbGUpOwogICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX3Nob3dQcm9maWxl
KHByb2ZpbGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2Zp
bGVyL3Byb2ZpbGVyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJv
ZmlsZXItdGVzdC5qcwppbmRleCAyYmNmMzBlZDg0YjZiNDQ3NjlhZDUzNmY4N2FkYThlMmUxZGVl
MTUwLi4xN2I4OWQ0MjNkNjVhODM5OGUwNDA4ZGU1YTk1YTc0OWQxNWY2ZDcwIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmlsZXItdGVzdC5qcworKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmlsZXItdGVzdC5qcwpAQCAtNyw3ICs3
LDcgQEAgSW5zcGVjdG9yVGVzdC5zdGFydFByb2ZpbGVyVGVzdCA9IGZ1bmN0aW9uKGNhbGxiYWNr
KQogICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0
LmFkZFJlc3VsdCgiUHJvZmlsZXIgd2FzIGVuYWJsZWQuIik7Ci0gICAgICAgIEluc3BlY3RvclRl
c3QuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiYWRkUHJvZmlsZUhl
YWRlciIsIEluc3BlY3RvclRlc3QuX3Byb2ZpbGVIZWFkZXJBZGRlZCwgdHJ1ZSk7CisgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAi
X2FkZFByb2ZpbGVIZWFkZXIiLCBJbnNwZWN0b3JUZXN0Ll9wcm9maWxlSGVhZGVyQWRkZWQsIHRy
dWUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLkNQVVBy
b2ZpbGVWaWV3LnByb3RvdHlwZSwgInJlZnJlc2giLCBJbnNwZWN0b3JUZXN0Ll9wcm9maWxlVmll
d1JlZnJlc2gsIHRydWUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LnNhZmVXcmFwKGNhbGxiYWNr
KSgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190016</attachid>
            <date>2013-02-25 01:26:37 -0800</date>
            <delta_ts>2013-02-25 02:54:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110597-20130225132252.patch</filename>
            <type>text/plain</type>
            <size>62424</size>
            <attacher name="Alexei Filippov">alph</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E3YzNjZjRmMzhjMzdm
YzRiNDBhZTU2ODUzYzBlNTA0MzQ2NmM4YS4uMWUzOThiNTRjNDM0ZWVhYzA0OWUzYzg3ZDZkMmZl
ZDE4NzY1MjM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAyLTIyICBBbGV4
ZWkgRmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBtb3ZlIHByb2ZpbGUgdHlwZSBzcGVjaWZpYyBjb2RlIG91dCBvZiBQcm9maWxlc1BhbmVsIChy
ZWZhY3RvcikKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMDU5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgcHJvZmlsZSB0eXBlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIFByb2ZpbGVz
UGFuZWwgY2xhc3MuCisgICAgICAgIFRoaXMgaXMgYSBmaXJzdCBwYXJ0IG9mIFdlYkluc3BlY3Rv
ci5Qcm9maWxlc1BhbmVsIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0
aGUgZnVuY3Rpb25hbGl0eSBpc24ndCBjaGFuZ2VkLgorCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1BV
UHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRQcm9maWxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5wcm90b3R5cGUu
cmVtb3ZlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJv
dG90eXBlLl9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlc2V0UHJvZmlsZXMpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlLmZpbmlzaEhl
YXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90
eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxlVHlwZS5wcm90b3R5cGUuX3N0YXJ0UmVj
b3JkaW5nUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
VHlwZS5wcm90b3R5cGUuX3N0b3BSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNhbnZhc1Byb2ZpbGVUeXBlLnByb3RvdHlwZS5idXR0b25DbGlja2VkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUuX3J1blNpbmdsZUZyYW1lQ2Fw
dHVyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5
cGUuX3N0YXJ0RnJhbWVDYXB0dXJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1By
b2ZpbGVUeXBlLnByb3RvdHlwZS5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbnZhc1Byb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRp
c3Bvc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJv
ZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUu
YnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUucHJvdG90eXBlLmFkZFByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5hZGRIZWFwU25hcHNob3RDaHVuayk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBl
LmZpbmlzaEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUucHJvdG90eXBlLnJlcG9ydEhlYXBTbmFwc2hvdFByb2dyZXNzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUucmVzZXRQ
cm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
cHJvdG90eXBlLnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZS5fdXBkYXRl
VHJhbnNmZXJQcm9ncmVzcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVN
ZW1vcnlTbmFwc2hvdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNo
b3RQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9m
aWxlVHlwZS5wcm90b3R5cGUuYWRkTmF0aXZlU25hcHNob3RDaHVuayk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlByb2ZpbGVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5
cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUucHJv
dG90eXBlLmdldCBkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGUucHJvdG90eXBlLmdldFByb2ZpbGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUuZ2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLl9tYWtlS2V5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5wcm90b3R5cGUuYWRkUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUucHJvdG90eXBlLnJlbW92ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBy
b2ZpbGVUeXBlLnByb3RvdHlwZS5maW5kVGVtcG9yYXJ5UHJvZmlsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlLl9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZUhlYWRlci5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuX2xvYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUudG9nZ2xlUmVjb3JkQnV0dG9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcG9wdWxhdGVBbGxQcm9maWxlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUud2FzU2hvd24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9wcm9maWxlcldhc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9y
ZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX3Jl
Z2lzdGVyUHJvZmlsZVR5cGUub25BZGRQcm9maWxlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVnaXN0ZXJQcm9maWxlVHlwZS5vblJlbW92
ZVByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlLl9yZWdpc3RlclByb2ZpbGVUeXBlLm9uUHJvZ3Jlc3NVcGRhdGVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVnaXN0ZXJQcm9maWxlVHlw
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX2FkZFBy
b2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlLl9yZW1vdmVQcm9maWxlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsLnByb3RvdHlwZS5fY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX3JlbW92ZVRlbXBvcmFyeVByb2ZpbGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmdldFByb2Zp
bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3dQ
cm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5f
Z2V0QWxsUHJvZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlLl9zZWFyY2hhYmxlVmlld3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Q
cm9maWxlc1BhbmVsLnByb3RvdHlwZS5zZXRSZWNvcmRpbmdQcm9maWxlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fcmVwb3J0UHJvZmlsZVByb2dyZXNz
KToKKwogMjAxMy0wMi0yNCAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wcm92ZSBzcGVlZCBvZiBMaW5raWZpZXIucmVz
ZXQgb3BlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9s
b2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzCmluZGV4IDkwMjAzNDg4ODVlYjYzYTlhNDA3MjRiZjlmNjAwMjlmNTcxZjBj
ZTkuLjVkNzJhNDM1ZDU3NzFhNjM2ZjhlZDkwN2YwMTJjYmYzZDZhZjY0NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKQEAgLTExLDYg
KzExLDcgQEAgbG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOWhycyJdID0gIiUuMWZcdTIwMDlo
cnMiOwogbG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOW1pbiJdID0gIiUuMWZcdTIwMDltaW4i
OwogbG9jYWxpemVkU3RyaW5nc1siJS4xZlx1MjAwOUtCIl0gPSAiJS4xZlx1MjAwOUtCIjsKIGxv
Y2FsaXplZFN0cmluZ3NbIiUuMWZcdTIwMDlNQiJdID0gIiUuMWZcdTIwMDlNQiI7Citsb2NhbGl6
ZWRTdHJpbmdzWyIlLjBmJSJdID0gIiUuMGYlIjsKIGxvY2FsaXplZFN0cmluZ3NbIiUuMmYlIl0g
PSAiJS4yZiUiOwogbG9jYWxpemVkU3RyaW5nc1siJS4yZlx1MjAwOXMiXSA9ICIlLjJmXHUyMDA5
cyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyIlLjNmXHUyMDA5bXMiXSA9ICIlLjNmXHUyMDA5bXMiOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxl
Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1BVUHJvZmlsZVZp
ZXcuanMKaW5kZXggMDNmYmMzYjJkMDVlMWIwODM0ODBiODA4YjllNmFlMDkwYjA4ODdhZC4uYzI2
Nzk2ZWNhZmZhYzQzOTJjMjkxOTYzMTkyNTRmNzJlMWFhMzcwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DUFVQcm9maWxlVmlldy5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NQVVByb2ZpbGVWaWV3LmpzCkBAIC01NzEs
MTAgKzU3MSwxMiBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlID0gewog
LyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuUHJvZmlsZVR5
cGV9CisgKiBAaW1wbGVtZW50cyB7UHJvZmlsZXJBZ2VudC5EaXNwYXRjaGVyfQogICovCiBXZWJJ
bnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUgPSBmdW5jdGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9y
LlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLlR5cGVJ
ZCwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2xsZWN0IEphdmFTY3JpcHQgQ1BVIFByb2ZpbGUi
KSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclByb2ZpbGVyRGlzcGF0Y2hlcih0aGlz
KTsKICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKICAgICBXZWJJbnNwZWN0b3IuQ1BVUHJv
ZmlsZVR5cGUuaW5zdGFuY2UgPSB0aGlzOwogfQpAQCAtNjEyLDYgKzYxNCwxNCBAQCBXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDUFUgcHJvZmlsZXMgc2hvdyB3aGVyZSB0aGUgZXhlY3V0aW9uIHRp
bWUgaXMgc3BlbnQgaW4geW91ciBwYWdlJ3MgSmF2YVNjcmlwdCBmdW5jdGlvbnMuIik7CiAgICAg
fSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVy
fSBwcm9maWxlSGVhZGVyCisgICAgICovCisgICAgYWRkUHJvZmlsZUhlYWRlcjogZnVuY3Rpb24o
cHJvZmlsZUhlYWRlcikKKyAgICB7CisgICAgICAgIHRoaXMuYWRkUHJvZmlsZSh0aGlzLmNyZWF0
ZVByb2ZpbGUocHJvZmlsZUhlYWRlcikpOworICAgIH0sCisKICAgICBpc1JlY29yZGluZ1Byb2Zp
bGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRpbmc7CkBA
IC02MzAsNiArNjQwLDkgQEAgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZSA9
IHsKICAgICAgICAgUHJvZmlsZXJBZ2VudC5zdG9wKCk7CiAgICAgfSwKIAorICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcm9maWxpbmcKKyAgICAgKi8KICAgICBzZXRSZWNvcmRp
bmdQcm9maWxlOiBmdW5jdGlvbihpc1Byb2ZpbGluZykKICAgICB7CiAgICAgICAgIHRoaXMuX3Jl
Y29yZGluZyA9IGlzUHJvZmlsaW5nOwpAQCAtNjM4LDcgKzY1MSw3IEBAIFdlYkluc3BlY3Rvci5D
UFVQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92ZXJyaWRlCiAg
ICAgICogQHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhl
YWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0aXRs
ZSkKICAgICB7CkBAIC02NDksMTMgKzY2Miw1OSBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5
cGUucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBvdmVycmlkZQogICAgICAqIEBwYXJh
bSB7UHJvZmlsZXJBZ2VudC5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCi0gICAgICogQHJldHVybiB7
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rv
ci5Qcm9maWxlSGVhZGVyfQogICAgICAqLwogICAgIGNyZWF0ZVByb2ZpbGU6IGZ1bmN0aW9uKHBy
b2ZpbGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DUFVQcm9maWxl
SGVhZGVyKHRoaXMsIHByb2ZpbGUudGl0bGUsIHByb2ZpbGUudWlkKTsKICAgICB9LAogCisgICAg
LyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2Zp
bGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAgICByZW1vdmVQcm9maWxlOiBmdW5jdGlvbihw
cm9maWxlKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlw
ZS5yZW1vdmVQcm9maWxlLmNhbGwodGhpcywgcHJvZmlsZSk7CisgICAgICAgIGlmICghcHJvZmls
ZS5pc1RlbXBvcmFyeSkKKyAgICAgICAgICAgIFByb2ZpbGVyQWdlbnQucmVtb3ZlUHJvZmlsZSh0
aGlzLmlkLCBwcm9maWxlLnVpZCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlk
ZQorICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUs
ID9zdHJpbmcsIEFycmF5LjxQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXI+KX0gcG9wdWxhdGVD
YWxsYmFjaworICAgICAqLworICAgIF9yZXF1ZXN0UHJvZmlsZXNGcm9tQmFja2VuZDogZnVuY3Rp
b24ocG9wdWxhdGVDYWxsYmFjaykKKyAgICB7CisgICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJv
ZmlsZUhlYWRlcnMocG9wdWxhdGVDYWxsYmFjayk7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBvdmVycmlkZQorICAgICAqLworICAgIHJlc2V0UHJvZmlsZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3Jlc2V0KCk7CisgICAgfSwKKworICAgIC8qKiBAZGVwcmVjYXRlZCBU
byBiZSByZW1vdmVkIGZyb20gdGhlIHByb3RvY29sICovCisgICAgYWRkSGVhcFNuYXBzaG90Q2h1
bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ik5ldmVyIGNhbGxlZCIpOworICAgIH0sCisKKyAgICAvKiogQGRlcHJlY2F0ZWQgVG8gYmUgcmVt
b3ZlZCBmcm9tIHRoZSBwcm90b2NvbCAqLworICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rp
b24odWlkKQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOZXZlciBjYWxsZWQiKTsK
KyAgICB9LAorCisgICAgLyoqIEBkZXByZWNhdGVkIFRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHJv
dG9jb2wgKi8KKyAgICByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzczogZnVuY3Rpb24oZG9uZSwg
dG90YWwpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5ldmVyIGNhbGxlZCIpOwor
ICAgIH0sCisKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5
cGUKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
U1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9DU1NTZWxlY3RvclByb2ZpbGVWaWV3LmpzCmluZGV4IGIwMTA3ZTA3YTEwMjg3OTYyZGYy
ZDk3ZDFmYjZmYzJiZTU1N2QxMDIuLmY0MzNjMTMwNmZiYTVkMGYzMjhlNzY5ZjgxOWI3Y2E4MWM3
OGViNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NT
U2VsZWN0b3JQcm9maWxlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1NlbGVjdG9yUHJvZmlsZVZpZXcuanMKQEAgLTI4NiwxNiArMjg2LDE1IEBAIFdl
Ykluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIAogICAgIC8q
KgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAqLwot
ICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3JlY29yZGluZykgewot
ICAgICAgICAgICAgdGhpcy5fc3RvcFJlY29yZGluZ1Byb2ZpbGUocHJvZmlsZXNQYW5lbCk7Cisg
ICAgICAgICAgICB0aGlzLl9zdG9wUmVjb3JkaW5nUHJvZmlsZSgpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5fc3RhcnRSZWNv
cmRpbmdQcm9maWxlKHByb2ZpbGVzUGFuZWwpOworICAgICAgICAgICAgdGhpcy5fc3RhcnRSZWNv
cmRpbmdQcm9maWxlKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0sCkBAIC0zMjAsMjAgKzMxOSwxMyBAQCBXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQcm9maWxl
VHlwZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGlzUHJvZmlsaW5n
OwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgX3N0YXJ0UmVjb3JkaW5nUHJvZmls
ZTogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBfc3RhcnRSZWNvcmRpbmdQcm9maWxlOiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSB0cnVlOwogICAgICAg
ICBDU1NBZ2VudC5zdGFydFNlbGVjdG9yUHJvZmlsZXIoKTsKLSAgICAgICAgcHJvZmlsZXNQYW5l
bC5zZXRSZWNvcmRpbmdQcm9maWxlKFdlYkluc3BlY3Rvci5DU1NTZWxlY3RvclByb2ZpbGVUeXBl
LlR5cGVJZCwgdHJ1ZSk7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKLSAgICAgKi8KLSAgICBfc3RvcFJl
Y29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgX3N0b3BSZWNvcmRp
bmdQcm9maWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICAvKioKICAgICAgICAgICogQHBh
cmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCkBAIC0zNDYsOSArMzM4LDcgQEAgV2ViSW5zcGVj
dG9yLkNTU1NlbGVjdG9yUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB2
YXIgdWlkID0gdGhpcy5fcHJvZmlsZVVpZCsrOwogICAgICAgICAgICAgdmFyIHRpdGxlID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJQcm9maWxlICVkIiwgdWlkKSArIFN0cmluZy5zcHJpbnRmKCIg
KCVzKSIsIE51bWJlci5zZWNvbmRzVG9TdHJpbmcocHJvZmlsZS50b3RhbFRpbWUgLyAxMDAwKSk7
Ci0gICAgICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJv
ZmlsZUhlYWRlcih0aGlzLCB0aXRsZSwgdWlkLCBwcm9maWxlKTsKLSAgICAgICAgICAgIHByb2Zp
bGVzUGFuZWwuYWRkUHJvZmlsZUhlYWRlcihwcm9maWxlSGVhZGVyKTsKLSAgICAgICAgICAgIHBy
b2ZpbGVzUGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0b3IuQ1NTU2VsZWN0b3JQ
cm9maWxlVHlwZS5UeXBlSWQsIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMuYWRkUHJvZmlsZShu
ZXcgV2ViSW5zcGVjdG9yLkNTU1Byb2ZpbGVIZWFkZXIodGhpcywgdGl0bGUsIHVpZCwgcHJvZmls
ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fcmVjb3JkaW5nID0gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVW
aWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYW52YXNQcm9maWxl
Vmlldy5qcwppbmRleCA3YjM4M2I4NDM3NDlhZjJkMTlhZWFjMzY5NDlmNWRmY2YzMzE0M2ExLi42
OGE3ZWUxMmQ2NGJhYTExYWQzNGU4NGYwM2NhMmFkZDc3NTVmYzM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbnZhc1Byb2ZpbGVWaWV3LmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FudmFzUHJvZmlsZVZpZXcuanMK
QEAgLTU1OSw0MSArNTU5LDMzIEBAIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90
b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVsCiAgICAgICogQHJldHVybiB7
Ym9vbGVhbn0KICAgICAgKi8KLSAgICBidXR0b25DbGlja2VkOiBmdW5jdGlvbihwcm9maWxlc1Bh
bmVsKQorICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLl9yZWNvcmRpbmcpIHsKICAgICAgICAgICAgIHRoaXMuX3JlY29yZGluZyA9IGZhbHNlOwog
ICAgICAgICAgICAgdGhpcy5fc3RvcEZyYW1lQ2FwdHVyaW5nKCk7CiAgICAgICAgIH0gZWxzZSBp
ZiAodGhpcy5faXNTaW5nbGVGcmFtZU1vZGUoKSkgewogICAgICAgICAgICAgdGhpcy5fcmVjb3Jk
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLl9ydW5TaW5nbGVGcmFtZUNhcHR1cmluZyhw
cm9maWxlc1BhbmVsKTsKKyAgICAgICAgICAgIHRoaXMuX3J1blNpbmdsZUZyYW1lQ2FwdHVyaW5n
KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSB0cnVl
OwotICAgICAgICAgICAgdGhpcy5fc3RhcnRGcmFtZUNhcHR1cmluZyhwcm9maWxlc1BhbmVsKTsK
KyAgICAgICAgICAgIHRoaXMuX3N0YXJ0RnJhbWVDYXB0dXJpbmcoKTsKICAgICAgICAgfQotICAg
ICAgICBwcm9maWxlc1BhbmVsLnNldFJlY29yZGluZ1Byb2ZpbGUoV2ViSW5zcGVjdG9yLkNhbnZh
c1Byb2ZpbGVUeXBlLlR5cGVJZCwgdGhpcy5fcmVjb3JkaW5nKTsKICAgICAgICAgcmV0dXJuIHRo
aXMuX3JlY29yZGluZzsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIF9ydW5TaW5n
bGVGcmFtZUNhcHR1cmluZzogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBfcnVuU2luZ2xl
RnJhbWVDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBmcmFtZUlkID0g
dGhpcy5fc2VsZWN0ZWRGcmFtZUlkKCk7Ci0gICAgICAgIENhbnZhc0FnZW50LmNhcHR1cmVGcmFt
ZShmcmFtZUlkLCB0aGlzLl9kaWRTdGFydENhcHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgcHJvZmls
ZXNQYW5lbCwgZnJhbWVJZCkpOworICAgICAgICBDYW52YXNBZ2VudC5jYXB0dXJlRnJhbWUoZnJh
bWVJZCwgdGhpcy5fZGlkU3RhcnRDYXB0dXJpbmdGcmFtZS5iaW5kKHRoaXMsIGZyYW1lSWQpKTsK
ICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQ
YW5lbH0gcHJvZmlsZXNQYW5lbAotICAgICAqLwotICAgIF9zdGFydEZyYW1lQ2FwdHVyaW5nOiBm
dW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIF9zdGFydEZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB2YXIgZnJhbWVJZCA9IHRoaXMuX3NlbGVjdGVkRnJhbWVJZCgp
OwotICAgICAgICBDYW52YXNBZ2VudC5zdGFydENhcHR1cmluZyhmcmFtZUlkLCB0aGlzLl9kaWRT
dGFydENhcHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgcHJvZmlsZXNQYW5lbCwgZnJhbWVJZCkpOwor
ICAgICAgICBDYW52YXNBZ2VudC5zdGFydENhcHR1cmluZyhmcmFtZUlkLCB0aGlzLl9kaWRTdGFy
dENhcHR1cmluZ0ZyYW1lLmJpbmQodGhpcywgZnJhbWVJZCkpOwogICAgIH0sCiAKICAgICBfc3Rv
cEZyYW1lQ2FwdHVyaW5nOiBmdW5jdGlvbigpCkBAIC02MTEsMTkgKzYwMywxOCBAQCBXZWJJbnNw
ZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVs
CiAgICAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBmcmFtZUlkCiAgICAgICogQHBhcmFt
IHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCiAgICAgICogQHBhcmFtIHtDYW52YXNBZ2VudC5UcmFj
ZUxvZ0lkfSB0cmFjZUxvZ0lkCiAgICAgICovCi0gICAgX2RpZFN0YXJ0Q2FwdHVyaW5nRnJhbWU6
IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwsIGZyYW1lSWQsIGVycm9yLCB0cmFjZUxvZ0lkKQorICAg
IF9kaWRTdGFydENhcHR1cmluZ0ZyYW1lOiBmdW5jdGlvbihmcmFtZUlkLCBlcnJvciwgdHJhY2VM
b2dJZCkKICAgICB7CiAgICAgICAgIGlmIChlcnJvciB8fCB0aGlzLl9sYXN0UHJvZmlsZUhlYWRl
ciAmJiB0aGlzLl9sYXN0UHJvZmlsZUhlYWRlci50cmFjZUxvZ0lkKCkgPT09IHRyYWNlTG9nSWQp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlSGVhZGVyKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiVHJhY2UgTG9nICVkIiwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpLCB0aGlzLl9uZXh0UHJvZmls
ZVVpZCwgdHJhY2VMb2dJZCwgZnJhbWVJZCk7CiAgICAgICAgICsrdGhpcy5fbmV4dFByb2ZpbGVV
aWQ7CiAgICAgICAgIHRoaXMuX2xhc3RQcm9maWxlSGVhZGVyID0gcHJvZmlsZUhlYWRlcjsKLSAg
ICAgICAgcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVIZWFkZXIpOworICAg
ICAgICB0aGlzLmFkZFByb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAgIHByb2ZpbGVIZWFk
ZXIuX3VwZGF0ZUNhcHR1cmluZ1N0YXR1cygpOwogICAgIH0sCiAKQEAgLTY0OSwxMSArNjQwLDIz
IEBAIFdlYkluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoq
CiAgICAgICogQG92ZXJyaWRlCiAgICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICBf
cmVzZXQ6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5Qcm9maWxlVHlw
ZS5wcm90b3R5cGUuX3Jlc2V0LmNhbGwodGhpcyk7CiAgICAgICAgIHRoaXMuX25leHRQcm9maWxl
VWlkID0gMTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisgICAgICogQHBh
cmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAgKi8KKyAgICBy
ZW1vdmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlLmNhbGwodGhpcywgcHJvZmls
ZSk7CisgICAgICAgIGlmICh0aGlzLl9yZWNvcmRpbmcgJiYgcHJvZmlsZSA9PT0gdGhpcy5fbGFz
dFByb2ZpbGVIZWFkZXIpCisgICAgICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBmYWxzZTsKKyAg
ICB9LAorCiAgICAgc2V0UmVjb3JkaW5nUHJvZmlsZTogZnVuY3Rpb24oaXNQcm9maWxpbmcpCiAg
ICAgewogICAgICAgICB0aGlzLl9yZWNvcmRpbmcgPSBpc1Byb2ZpbGluZzsKQEAgLTY2Miw3ICs2
NjUsNyBAQCBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAg
IC8qKgogICAgICAqIEBvdmVycmlkZQogICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gdGl0bGUKLSAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAgICAgKiBAcmV0dXJu
IHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAgY3JlYXRlVGVtcG9y
YXJ5UHJvZmlsZTogZnVuY3Rpb24odGl0bGUpCiAgICAgewpAQCAtNjczLDcgKzY3Niw3IEBAIFdl
Ykluc3BlY3Rvci5DYW52YXNQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAg
ICogQG92ZXJyaWRlCiAgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9
IHByb2ZpbGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KKyAg
ICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAgICAgICovCiAgICAg
Y3JlYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CkBAIC04OTUsMTUgKzg5OCwx
MiBAQCBXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZUhlYWRlci5wcm90b3R5cGUgPSB7CiAKICAg
ICAvKioKICAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuUHJv
ZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqLwotICAgIGRpc3Bvc2U6IGZ1bmN0aW9u
KHByb2ZpbGVzUGFuZWwpCisgICAgZGlzcG9zZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
aWYgKHRoaXMuX3RyYWNlTG9nSWQpIHsKICAgICAgICAgICAgIENhbnZhc0FnZW50LmRyb3BUcmFj
ZUxvZyh0aGlzLl90cmFjZUxvZ0lkKTsKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9y
ZXF1ZXN0U3RhdHVzVGltZXIpOwotICAgICAgICAgICAgaWYgKHRoaXMuX2FsaXZlKQotICAgICAg
ICAgICAgICAgIHByb2ZpbGVzUGFuZWwuc2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0b3Iu
Q2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkLCBmYWxzZSk7CiAgICAgICAgICAgICB0aGlzLl9hbGl2
ZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwppbmRleCBmYjc2NWY5YTUx
NDgzYjlmNWQ4NDhmODFmNThhMTY5YTEwMWNiOTdjLi5hNWEwMDA5MDA1MDQ5OWFhMWYzYjQyOTFh
YmRhNDRlMzQzNTMwMGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCkBAIC00MjcsNyArNDI3LDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9wcm9m
aWxlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFBy
b2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAg
ICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UHJvZmlsZVR5cGUoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmlsZXMoKTsKICAgICB9LAogCiAgICAg
LyoqCkBAIC03NTQsMTAgKzc1NCwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5w
cm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3Bl
Y3Rvci5Qcm9maWxlVHlwZX0KKyAqIEBpbXBsZW1lbnRzIHtIZWFwUHJvZmlsZXJBZ2VudC5EaXNw
YXRjaGVyfQogICovCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUgPSBmdW5j
dGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLmNhbGwodGhpcywgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUYWtlIEhlYXAgU25hcHNob3QiKSk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckhlYXBQcm9maWxlckRpc3BhdGNoZXIodGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQgPSAiSEVBUCI7CkBAIC03NzAsMTIgKzc3MiwxMSBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAg
LyoqCiAgICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAogICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICov
Ci0gICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24ocHJvZmlsZXNQYW5lbCkKKyAgICBidXR0b25D
bGlja2VkOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBwcm9maWxlc1BhbmVsLnRha2VIZWFw
U25hcHNob3QoKTsKKyAgICAgICAgdGhpcy5fdGFrZUhlYXBTbmFwc2hvdCgpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfSwKIApAQCAtNzkyLDcgKzc5Myw3IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQG92
ZXJyaWRlCiAgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0aXRsZQotICAgICAqIEByZXR1cm4ge1dl
Ykluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAqIEByZXR1cm4geyFXZWJJbnNwZWN0b3Iu
UHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVhdGVUZW1wb3JhcnlQcm9maWxlOiBmdW5j
dGlvbih0aXRsZSkKICAgICB7CkBAIC04MDMsMTMgKzgwNCw5MyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBvdmVy
cmlkZQogICAgICAqIEBwYXJhbSB7SGVhcFByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcn0gcHJv
ZmlsZQotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfQorICAgICAq
IEByZXR1cm4geyFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8KICAgICBjcmVh
dGVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIodGhpcywgcHJvZmlsZS50aXRsZSwgcHJvZmls
ZS51aWQsIHByb2ZpbGUubWF4SlNPYmplY3RJZCB8fCAwKTsKICAgICB9LAogCisgICAgX3Rha2VI
ZWFwU25hcHNob3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0ZW1wb3JhcnlQcm9m
aWxlID0gdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAgICAgICBpZiAoIXRlbXBvcmFy
eVByb2ZpbGUpCisgICAgICAgICAgICB0aGlzLmFkZFByb2ZpbGUodGhpcy5jcmVhdGVUZW1wb3Jh
cnlQcm9maWxlKCkpOworICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNuYXBzaG90
KHRydWUsIGZ1bmN0aW9uKCkge30pOworICAgICAgICBXZWJJbnNwZWN0b3IudXNlck1ldHJpY3Mu
UHJvZmlsZXNIZWFwUHJvZmlsZVRha2VuLnJlY29yZCgpOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge0hlYXBQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGVIZWFk
ZXIKKyAgICAgKi8KKyAgICBhZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlSGVhZGVy
KQorICAgIHsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHRoaXMuY3JlYXRlUHJvZmlsZShwcm9m
aWxlSGVhZGVyKSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSB1aWQKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKKyAgICAg
Ki8KKyAgICBhZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVuaykKKyAgICB7
CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5
KHVpZCldOworICAgICAgICBpZiAocHJvZmlsZSkKKyAgICAgICAgICAgIHByb2ZpbGUudHJhbnNm
ZXJDaHVuayhjaHVuayk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBvdmVycmlkZQorICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB1aWQKKyAgICAgKi8KKyAgICBmaW5pc2hIZWFwU25hcHNob3Q6
IGZ1bmN0aW9uKHVpZCkKKyAgICB7CisgICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmls
ZXNJZE1hcFt0aGlzLl9tYWtlS2V5KHVpZCldOworICAgICAgICBpZiAocHJvZmlsZSkKKyAgICAg
ICAgICAgIHByb2ZpbGUuZmluaXNoSGVhcFNuYXBzaG90KCk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBvdmVycmlkZQorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkb25lCisgICAgICogQHBh
cmFtIHtudW1iZXJ9IHRvdGFsCisgICAgICovCisgICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jl
c3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSB0
aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKCk7CisgICAgICAgIGlmIChwcm9maWxlKQorICAgICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2ZpbGVU
eXBlLkV2ZW50cy5Qcm9ncmVzc1VwZGF0ZWQsIHsicHJvZmlsZSI6IHByb2ZpbGUsICJkb25lIjog
ZG9uZSwgInRvdGFsIjogdG90YWx9KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJy
aWRlCisgICAgICovCisgICAgcmVzZXRQcm9maWxlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fcmVzZXQoKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQG92ZXJyaWRlCisg
ICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKKyAgICAg
Ki8KKyAgICByZW1vdmVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZS5yZW1vdmVQcm9maWxlLmNhbGwodGhp
cywgcHJvZmlsZSk7CisgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSkKKyAgICAgICAg
ICAgIEhlYXBQcm9maWxlckFnZW50LnJlbW92ZVByb2ZpbGUocHJvZmlsZS51aWQpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHRo
aXM6V2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLCA/c3RyaW5nLCBBcnJheS48UHJvZmlsZXJBZ2Vu
dC5Qcm9maWxlSGVhZGVyPil9IHBvcHVsYXRlQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBfcmVxdWVz
dFByb2ZpbGVzRnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKHBvcHVsYXRlQ2FsbGJhY2spCisgICAgewor
ICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0ZUNhbGxi
YWNrKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
cHJvdG90eXBlCiB9CiAKQEAgLTkwMSw2ICs5ODIsOSBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2Zp
bGVIZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWNlaXZlciA9IGxvYWRlclBy
b3h5OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAgICAgKi8KICAgICBk
aXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVjZWl2ZXIpCkBA
IC05MTUsNyArOTk5LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgKi8KICAgICBfdXBkYXRlVHJhbnNmZXJQcm9ncmVzczogZnVuY3Rpb24odmFs
dWUsIG1heFZhbHVlKQogICAgIHsKLSAgICAgICAgdmFyIHBlcmNlbnRWYWx1ZSA9ICgobWF4VmFs
dWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAqIDEwMCkudG9GaXhlZCgyKTsKKyAgICAgICAg
dmFyIHBlcmNlbnRWYWx1ZSA9ICgobWF4VmFsdWUgPyAodmFsdWUgLyBtYXhWYWx1ZSkgOiAwKSAq
IDEwMCkudG9GaXhlZCgwKTsKICAgICAgICAgaWYgKHRoaXMuX3NhdmluZ1RvRmlsZSkKICAgICAg
ICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNhdmluZ1x1MjAyNiAlZFwlIiwgcGVyY2VudFZhbHVlKTsKICAgICAgICAgZWxzZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlT
bmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2
ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwppbmRleCA0ZWU0YjBlZDRjNTc3NGM2MGM2MGM3NzkwOGU1
MDQwNjMzYTMyNmRlLi5lMjEzZTJlMWMyYmE2ODFmYjllYzVhMjZiMzMyMTg1YTNhNDhhYTBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9y
eVNuYXBzaG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwpAQCAtMjM1LDEwICsyMzUsMTIgQEAgV2ViSW5z
cGVjdG9yLk5hdGl2ZVNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1
Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5Qcm9maWxlVHlwZX0KKyAqIEBpbXBsZW1l
bnRzIHtNZW1vcnlBZ2VudC5EaXNwYXRjaGVyfQogICovCiBXZWJJbnNwZWN0b3IuTmF0aXZlU25h
cHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuUHJvZmls
ZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlVHlwZS5U
eXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGFrZSBOYXRpdmUgSGVhcCBTbmFwc2hvdCIp
KTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcih0aGlzKTsK
ICAgICB0aGlzLl9uZXh0UHJvZmlsZVVpZCA9IDE7CiB9CiAKQEAgLTI1MiwxNSArMjU0LDE0IEBA
IFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIAog
ICAgIC8qKgogICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlBy
b2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAg
ICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKHByb2ZpbGVzUGFuZWwpCisgICAgYnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHByb2ZpbGVIZWFkZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlcih0aGlzLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90ICVkIiwgdGhpcy5fbmV4dFByb2ZpbGVVaWQpLCB0
aGlzLl9uZXh0UHJvZmlsZVVpZCk7CiAgICAgICAgICsrdGhpcy5fbmV4dFByb2ZpbGVVaWQ7CiAg
ICAgICAgIHByb2ZpbGVIZWFkZXIuaXNUZW1wb3JhcnkgPSB0cnVlOwotICAgICAgICBwcm9maWxl
c1BhbmVsLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZUhlYWRlcik7CisgICAgICAgIHRoaXMuYWRk
UHJvZmlsZShwcm9maWxlSGVhZGVyKTsKICAgICAgICAgcHJvZmlsZUhlYWRlci5sb2FkKGZ1bmN0
aW9uKCkgeyB9KTsKIAogICAgICAgICAvKioKQEAgLTM0Nyw2ICszNDgsMTcgQEAgV2ViSW5zcGVj
dG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdFByb2ZpbGVIZWFkZXIodGhpcywgcHJv
ZmlsZS50aXRsZSwgLTEpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAb3ZlcnJpZGUKKyAg
ICAgKiBAcGFyYW0ge01lbW9yeUFnZW50LkhlYXBTbmFwc2hvdENodW5rfSBjaHVuaworICAgICAq
LworICAgIGFkZE5hdGl2ZVNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKGNodW5rKQorICAgIHsKKyAg
ICAgICAgdmFyIHRlbXBQcm9maWxlID0gdGhpcy5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAg
ICAgICBpZiAodGVtcFByb2ZpbGUpCisgICAgICAgICAgICB0ZW1wUHJvZmlsZS5hZGROYXRpdmVT
bmFwc2hvdENodW5rKGNodW5rKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0
b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlCiB9CiAKQEAgLTQwMSw2ICs0MTMsOCBAQCBXZWJJbnNw
ZWN0b3IuTmF0aXZlU25hcHNob3RQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKIC8qKgogICog
QGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXd9
CisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwYXJlbnQKKyAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90UHJvZmlsZUhlYWRlcn0gcHJvZmlsZQogICov
CiBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcFNuYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwg
cHJvZmlsZSkKIHsKQEAgLTQzOSwxNSArNDUzLDE0IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVNZW1v
cnlQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAb3ZlcnJpZGUK
LSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsfSBwcm9maWxlc1BhbmVs
CiAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgKi8KLSAgICBidXR0b25DbGlja2VkOiBm
dW5jdGlvbihwcm9maWxlc1BhbmVsKQorICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVN
ZW1vcnlQcm9maWxlSGVhZGVyKHRoaXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25hcHNob3Qg
JWQiLCB0aGlzLl9uZXh0UHJvZmlsZVVpZCksIHRoaXMuX25leHRQcm9maWxlVWlkKTsKICAgICAg
ICAgKyt0aGlzLl9uZXh0UHJvZmlsZVVpZDsKICAgICAgICAgcHJvZmlsZUhlYWRlci5pc1RlbXBv
cmFyeSA9IHRydWU7Ci0gICAgICAgIHByb2ZpbGVzUGFuZWwuYWRkUHJvZmlsZUhlYWRlcihwcm9m
aWxlSGVhZGVyKTsKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlKHByb2ZpbGVIZWFkZXIpOwogICAg
ICAgICAvKioKICAgICAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBlcnJvcgogICAgICAgICAgKiBA
cGFyYW0gez9NZW1vcnlBZ2VudC5NZW1vcnlCbG9ja30gbWVtb3J5QmxvY2sKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCA5
YWM3NTExMGM5YzQ0ZWFkZTU0MDdiYWU2ZWZjMzQzZmQxNDU4MzU2Li4xOGMzNzA1MTBhMjZkNDky
OGE4Y2Q5YmZmN2MyMTc3Yzg4MTkxNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCkBAIC0zNSwxNCArMzUsMTggQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVUeXBlID0gZnVuY3Rpb24oaWQsIG5hbWUpCiB7CiAgICAgdGhpcy5f
aWQgPSBpZDsKICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7
V2ViSW5zcGVjdG9yLlNpZGViYXJTZWN0aW9uVHJlZUVsZW1lbnR9Ci0gICAgICovCisgICAgLyoq
IEB0eXBlIHshQXJyYXkuPCFXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcj59ICovCisgICAgdGhp
cy5fcHJvZmlsZXMgPSBbXTsKKyAgICB0aGlzLl9wcm9maWxlc0lkTWFwID0ge307CisgICAgLyoq
IEB0eXBlIHtXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudH0gKi8KICAgICB0
aGlzLnRyZWVFbGVtZW50ID0gbnVsbDsKIH0KIAogV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLkV2
ZW50cyA9IHsKLSAgVmlld1VwZGF0ZWQ6ICJ2aWV3LXVwZGF0ZWQiLAorICAgIEFkZFByb2ZpbGVI
ZWFkZXI6ICJhZGQtcHJvZmlsZS1oZWFkZXIiLAorICAgIFJlbW92ZVByb2ZpbGVIZWFkZXI6ICJy
ZW1vdmUtcHJvZmlsZS1oZWFkZXIiLAorICAgIFByb2dyZXNzVXBkYXRlZDogInByb2dyZXNzLXVw
ZGF0ZWQiLAorICAgIFZpZXdVcGRhdGVkOiAidmlldy11cGRhdGVkIgogfQogCiBXZWJJbnNwZWN0
b3IuUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewpAQCAtNzIsMjEgKzc2LDI0IEBAIFdlYkluc3Bl
Y3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWx9IHByb2ZpbGVzUGFuZWwKICAgICAg
KiBAcmV0dXJuIHtib29sZWFufQogICAgICAqLwotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KHByb2ZpbGVzUGFuZWwpCisgICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCiAKLSAgICByZXNldDogZnVuY3Rpb24oKQorICAg
IGdldCBkZXNjcmlwdGlvbigpCiAgICAgeworICAgICAgICByZXR1cm4gIiI7CiAgICAgfSwKIAot
ICAgIGdldCBkZXNjcmlwdGlvbigpCisgICAgLyoqCisgICAgICogQHJldHVybiB7IUFycmF5Ljwh
V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fQorICAgICAqLworICAgIGdldFByb2ZpbGVzOiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiB0aGlz
Ll9wcm9maWxlcy5maWx0ZXIoZnVuY3Rpb24ocHJvZmlsZSkgeyByZXR1cm4gIXByb2ZpbGUuaXNU
ZW1wb3Jhcnk7IH0pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTk3LDEwICsxMDQsMjAgQEAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG51bGw7
CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3RzCisgICAgICogQHBhcmFt
IHtudW1iZXJ9IHVpZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVy
fQorICAgICAqLworICAgIGdldFByb2ZpbGU6IGZ1bmN0aW9uKHVpZCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkKV07CisgICAgfSwK
KwogICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAgICAvKioKICAg
ICAgKiBAcGFyYW0ge3N0cmluZz19IHRpdGxlCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlByb2ZpbGVIZWFkZXJ9CisgICAgICogQHJldHVybiB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVh
ZGVyfQogICAgICAqLwogICAgIGNyZWF0ZVRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKHRpdGxl
KQogICAgIHsKQEAgLTEwOSwxMyArMTI2LDEwMyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUu
cHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtQcm9maWxlckFnZW50LlBy
b2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmls
ZUhlYWRlcn0KKyAgICAgKiBAcmV0dXJuIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CiAg
ICAgICovCiAgICAgY3JlYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7CiAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBmb3IgIiArIHRoaXMuX25hbWUgKyAi
IHByb2ZpbGVzLiIpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAbm9zaWRlZWZmZWN0cwor
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZAorICAgICAqIEByZXR1cm4ge3N0cmluZ30KKyAgICAg
Ki8KKyAgICBfbWFrZUtleTogZnVuY3Rpb24oaWQpCisgICAgeworICAgICAgICByZXR1cm4gaWQg
KyAnLycgKyBlc2NhcGUodGhpcy5pZCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCisgICAgICovCisgICAgYWRk
UHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Byb2ZpbGVz
LnB1c2gocHJvZmlsZSk7CisgICAgICAgIC8vIEZJWE1FOiB1aWQgb25seSBiYXNlZCBrZXkgc2hv
dWxkIGJlIGVub3VnaC4KKyAgICAgICAgdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5
KHByb2ZpbGUudWlkKV0gPSBwcm9maWxlOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuRXZlbnRzLkFkZFByb2ZpbGVIZWFkZXIs
IHByb2ZpbGUpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0geyFXZWJJbnNwZWN0
b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQorICAgICAqLworICAgIHJlbW92ZVByb2ZpbGU6IGZ1
bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3Byb2ZpbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fcHJvZmlsZXNb
aV0udWlkID09PSBwcm9maWxlLnVpZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3Byb2ZpbGVz
LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBkZWxldGUgdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlzLl9tYWtlS2V5
KHByb2ZpbGUudWlkKV07CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBub3NpZGVlZmZlY3Rz
CisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9CisgICAgICovCisg
ICAgZmluZFRlbXBvcmFyeVByb2ZpbGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmlsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLl9wcm9maWxlc1tpXS5pc1RlbXBvcmFyeSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fcHJvZmlsZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfSwKKworICAgIF9yZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHByb2Zp
bGVzID0gdGhpcy5fcHJvZmlsZXMuc2xpY2UoMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcHJvZmlsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBwcm9maWxlID0gcHJv
ZmlsZXNbaV07CisgICAgICAgICAgICB2YXIgdmlldyA9IHByb2ZpbGUuZXhpc3RpbmdWaWV3KCk7
CisgICAgICAgICAgICBpZiAodmlldykgeworICAgICAgICAgICAgICAgIHZpZXcuZGV0YWNoKCk7
CisgICAgICAgICAgICAgICAgaWYgKCJkaXNwb3NlIiBpbiB2aWV3KQorICAgICAgICAgICAgICAg
ICAgICB2aWV3LmRpc3Bvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMuUmVt
b3ZlUHJvZmlsZUhlYWRlciwgcHJvZmlsZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy50cmVl
RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLl9wcm9maWxlcyA9IFtdOwor
ICAgICAgICB0aGlzLl9wcm9maWxlc0lkTWFwID0ge307CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7ZnVuY3Rpb24odGhpczpXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUsID9zdHJp
bmcsICFBcnJheS48IVByb2ZpbGVyQWdlbnQuUHJvZmlsZUhlYWRlcj4pfSBwb3B1bGF0ZUNhbGxi
YWNrCisgICAgICovCisgICAgX3JlcXVlc3RQcm9maWxlc0Zyb21CYWNrZW5kOiBmdW5jdGlvbihw
b3B1bGF0ZUNhbGxiYWNrKQorICAgIHsKKyAgICB9LAorCisgICAgX3BvcHVsYXRlUHJvZmlsZXM6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gez9zdHJp
bmd9IGVycm9yCisgICAgICAgICAqIEBwYXJhbSB7IUFycmF5LjwhUHJvZmlsZXJBZ2VudC5Qcm9m
aWxlSGVhZGVyPn0gcHJvZmlsZUhlYWRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9u
IHBvcHVsYXRlQ2FsbGJhY2soZXJyb3IsIHByb2ZpbGVIZWFkZXJzKSB7CisgICAgICAgICAgICBp
ZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcHJvZmlsZUhl
YWRlcnMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLnVpZCAtIGIudWlkOyB9KTsKKyAg
ICAgICAgICAgIHZhciBjb3VudCA9IHByb2ZpbGVIZWFkZXJzLmxlbmd0aDsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLmFk
ZFByb2ZpbGUodGhpcy5jcmVhdGVQcm9maWxlKHByb2ZpbGVIZWFkZXJzW2ldKSk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVxdWVzdFByb2ZpbGVzRnJvbUJhY2tlbmQocG9wdWxhdGVDYWxs
YmFjay5iaW5kKHRoaXMpKTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
T2JqZWN0LnByb3RvdHlwZQogfQogCkBAIC0xMjksMTMgKzIzNiw4IEBAIFdlYkluc3BlY3Rvci5Q
cm9maWxlSGVhZGVyID0gZnVuY3Rpb24ocHJvZmlsZVR5cGUsIHRpdGxlLCB1aWQpCiB7CiAgICAg
dGhpcy5fcHJvZmlsZVR5cGUgPSBwcm9maWxlVHlwZTsKICAgICB0aGlzLnRpdGxlID0gdGl0bGU7
Ci0gICAgaWYgKHVpZCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRoaXMudWlkID0gLTE7Ci0g
ICAgICAgIHRoaXMuaXNUZW1wb3JhcnkgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRo
aXMudWlkID0gdWlkOwotICAgICAgICB0aGlzLmlzVGVtcG9yYXJ5ID0gZmFsc2U7Ci0gICAgfQor
ICAgIHRoaXMuaXNUZW1wb3JhcnkgPSB1aWQgPT09IHVuZGVmaW5lZDsKKyAgICB0aGlzLnVpZCA9
IHRoaXMuaXNUZW1wb3JhcnkgPyAtMSA6IHVpZDsKICAgICB0aGlzLl9mcm9tRmlsZSA9IGZhbHNl
OwogfQogCkBAIC0xODQsMTAgKzI4Niw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQuIik7
CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsfSBwcm9maWxlc1BhbmVsCi0gICAgICovCi0gICAgZGlzcG9zZTogZnVuY3Rpb24ocHJv
ZmlsZXNQYW5lbCkKKyAgICBkaXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgIH0sCiAKQEAg
LTI4NSw4ICszODQsNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkK
ICAgICB0aGlzLl9wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1zQ29udGFpbmVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5fcHJvZmlsZVZpZXdTdGF0dXNCYXJJdGVt
c0NvbnRhaW5lci5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtcyI7CiAKLSAgICAvKiogQHR5
cGUgeyFBcnJheS48IVdlYkluc3BlY3Rvci5Qcm9maWxlSGVhZGVyPn0gKi8KLSAgICB0aGlzLl9w
cm9maWxlcyA9IFtdOwogICAgIHRoaXMuX3Byb2ZpbGVyRW5hYmxlZCA9ICFDYXBhYmlsaXRpZXMu
cHJvZmlsZXJDYXVzZXNSZWNvbXBpbGF0aW9uOwogCiAgICAgdGhpcy5fbGF1bmNoZXJWaWV3ID0g
bmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlTGF1bmNoZXJWaWV3KHRoaXMpOwpAQCAtMzA1LDEwICs0
MDIsNiBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICBpZiAo
V2ViSW5zcGVjdG9yLmV4cGVyaW1lbnRzU2V0dGluZ3MuY2FudmFzSW5zcGVjdGlvbi5pc0VuYWJs
ZWQoKSkKICAgICAgICAgdGhpcy5fcmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9y
LkNhbnZhc1Byb2ZpbGVUeXBlKCkpOwogCi0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclBy
b2ZpbGVyRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVyRGlzcGF0Y2hlcih0aGlz
KSk7Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckhlYXBQcm9maWxlckRpc3BhdGNoZXIo
bmV3IFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZXJEaXNwYXRjaGVyKHRoaXMpKTsKLSAgICBJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTWVtb3J5RGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLk1l
bW9yeURpc3BhdGNoZXIodGhpcykpOwotCiAgICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVjdG9yRWxl
bWVudCgpOwogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIs
IHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKQEAgLTMz
NCwxNCArNDI3LDE0IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghIXRoaXMuZmlu
ZFRlbXBvcmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5
cGVJZCkpIHsKKyAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0gdGhpcy5nZXRQcm9maWxlVHlwZShX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAgICAgaWYg
KCEhcHJvZmlsZVR5cGUuZmluZFRlbXBvcmFyeVByb2ZpbGUoKSkgewogICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbid0IGxvYWQgcHJvZmlsZSB3
aGVuIG90aGVyIHByb2ZpbGUgaXMgcmVjb3JkaW5nLiIpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIHZhciBwcm9maWxlVHlwZSA9IHRoaXMuZ2V0UHJvZmlsZVR5
cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CiAgICAgICAg
IHZhciB0ZW1wb3JhcnlQcm9maWxlID0gcHJvZmlsZVR5cGUuY3JlYXRlVGVtcG9yYXJ5UHJvZmls
ZShXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbERlc2NyaXB0b3IuVXNlckluaXRpYXRlZFByb2Zp
bGVOYW1lICsgIi4iICsgZmlsZS5uYW1lKTsKLSAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVy
KHRlbXBvcmFyeVByb2ZpbGUpOworICAgICAgICBwcm9maWxlVHlwZS5hZGRQcm9maWxlKHRlbXBv
cmFyeVByb2ZpbGUpOwogCiAgICAgICAgIHRlbXBvcmFyeVByb2ZpbGUuX2Zyb21GaWxlID0gdHJ1
ZTsKICAgICAgICAgdGVtcG9yYXJ5UHJvZmlsZS5sb2FkRnJvbUZpbGUoZmlsZSk7CkBAIC0zNTUs
MTkgKzQ0OCwyMyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAK
ICAgICB0b2dnbGVSZWNvcmRCdXR0b246IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBp
c1Byb2ZpbGluZyA9IHRoaXMuX3NlbGVjdGVkUHJvZmlsZVR5cGUuYnV0dG9uQ2xpY2tlZCh0aGlz
KTsKLSAgICAgICAgdGhpcy5yZWNvcmRCdXR0b24udG9nZ2xlZCA9IGlzUHJvZmlsaW5nOwotICAg
ICAgICB0aGlzLnJlY29yZEJ1dHRvbi50aXRsZSA9IHRoaXMuX3NlbGVjdGVkUHJvZmlsZVR5cGUu
YnV0dG9uVG9vbHRpcDsKLSAgICAgICAgaWYgKGlzUHJvZmlsaW5nKQotICAgICAgICAgICAgdGhp
cy5fbGF1bmNoZXJWaWV3LnByb2ZpbGVTdGFydGVkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHRoaXMuX2xhdW5jaGVyVmlldy5wcm9maWxlRmluaXNoZWQoKTsKKyAgICAgICAgdmFyIGlz
UHJvZmlsaW5nID0gdGhpcy5fc2VsZWN0ZWRQcm9maWxlVHlwZS5idXR0b25DbGlja2VkKCk7Cisg
ICAgICAgIHRoaXMuc2V0UmVjb3JkaW5nUHJvZmlsZSh0aGlzLl9zZWxlY3RlZFByb2ZpbGVUeXBl
LmlkLCBpc1Byb2ZpbGluZyk7CisgICAgfSwKKworICAgIF9wb3B1bGF0ZUFsbFByb2ZpbGVzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Byb2ZpbGVyRW5hYmxlZCB8fCB0
aGlzLl9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHRoaXMuX3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCA9IHRydWU7CisgICAgICAgIGZvciAodmFyIHR5
cGVJZCBpbiB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwKQorICAgICAgICAgICAgdGhpcy5fcHJv
ZmlsZVR5cGVzQnlJZE1hcFt0eXBlSWRdLl9wb3B1bGF0ZVByb2ZpbGVzKCk7CiAgICAgfSwKIAog
ICAgIHdhc1Nob3duOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwucHJvdG90eXBlLndhc1Nob3duLmNhbGwodGhpcyk7Ci0gICAgICAgIHRoaXMuX3BvcHVsYXRl
UHJvZmlsZXMoKTsKKyAgICAgICAgdGhpcy5fcG9wdWxhdGVBbGxQcm9maWxlcygpOwogICAgIH0s
CiAKICAgICBfcHJvZmlsZXJXYXNFbmFibGVkOiBmdW5jdGlvbigpCkBAIC0zNzksNyArNDc2LDcg
QEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHRo
aXMuX3Jlc2V0KCk7CiAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZygpKQotICAgICAgICAgICAg
dGhpcy5fcG9wdWxhdGVQcm9maWxlcygpOworICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVBbGxQ
cm9maWxlcygpOwogICAgIH0sCiAKICAgICBfcHJvZmlsZXJXYXNEaXNhYmxlZDogZnVuY3Rpb24o
KQpAQCAtNDE3LDMwICs1MTQsMTMgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlID0gewogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5yZXNl
dC5jYWxsKHRoaXMpOwogCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcHJvZmls
ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciB2aWV3ID0gdGhpcy5fcHJvZmlsZXNb
aV0uZXhpc3RpbmdWaWV3KCk7Ci0gICAgICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAg
ICAgIHZpZXcuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCJkaXNwb3NlIiBpbiB2aWV3
KQotICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzW2ldLmRpc3Bvc2UodGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZGVsZXRlIHRoaXMudmlzaWJsZVZpZXc7CisgICAgICAgIGZvciAodmFyIHR5cGVJZCBp
biB0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwKQorICAgICAgICAgICAgdGhpcy5fcHJvZmlsZVR5
cGVzQnlJZE1hcFt0eXBlSWRdLl9yZXNldCgpOwogCisgICAgICAgIGRlbGV0ZSB0aGlzLnZpc2li
bGVWaWV3OwogICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50UXVlcnk7CiAgICAgICAgIHRoaXMu
c2VhcmNoQ2FuY2VsZWQoKTsKIAotICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9wcm9maWxl
VHlwZXNCeUlkTWFwKSB7Ci0gICAgICAgICAgICB2YXIgcHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9m
aWxlVHlwZXNCeUlkTWFwW2lkXTsKLSAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHByb2Zp
bGVUeXBlLnRyZWVFbGVtZW50OwotICAgICAgICAgICAgdHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGRy
ZW4oKTsKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LmhpZGRlbiA9IHRydWU7Ci0gICAgICAgICAg
ICBwcm9maWxlVHlwZS5yZXNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fcHJvZmls
ZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNJZE1hcCA9IHt9OwogICAgICAgICB0aGlz
Ll9wcm9maWxlR3JvdXBzID0ge307CiAgICAgICAgIHRoaXMuX3Byb2ZpbGVHcm91cHNGb3JMaW5r
cyA9IHt9OwogICAgICAgICB0aGlzLl9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQgPSBmYWxzZTsKQEAg
LTQ4Miw3ICs1NjIsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVU
eXBlfSBwcm9maWxlVHlwZQorICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5Qcm9maWxlVHlw
ZX0gcHJvZmlsZVR5cGUKICAgICAgKi8KICAgICBfcmVnaXN0ZXJQcm9maWxlVHlwZTogZnVuY3Rp
b24ocHJvZmlsZVR5cGUpCiAgICAgewpAQCAtNDkyLDcgKzU3MiwyMiBAQCBXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHByb2ZpbGVUeXBlLnRyZWVFbGVt
ZW50LmhpZGRlbiA9IHRydWU7CiAgICAgICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQo
cHJvZmlsZVR5cGUudHJlZUVsZW1lbnQpOwogICAgICAgICBwcm9maWxlVHlwZS50cmVlRWxlbWVu
dC5jaGlsZHJlbkxpc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhp
cy5faGFuZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICAgICAgZnVu
Y3Rpb24gb25BZGRQcm9maWxlSGVhZGVyKGV2ZW50KQorICAgICAgICB7CisgICAgICAgICAgICB0
aGlzLl9hZGRQcm9maWxlSGVhZGVyKGV2ZW50LmRhdGEpOworICAgICAgICB9CisgICAgICAgIGZ1
bmN0aW9uIG9uUmVtb3ZlUHJvZmlsZUhlYWRlcihldmVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdGhpcy5fcmVtb3ZlUHJvZmlsZUhlYWRlcihldmVudC5kYXRhKTsKKyAgICAgICAgfQorICAg
ICAgICBmdW5jdGlvbiBvblByb2dyZXNzVXBkYXRlZChldmVudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGhpcy5fcmVwb3J0UHJvZmlsZVByb2dyZXNzKGV2ZW50LmRhdGEucHJvZmlsZSwgZXZl
bnQuZGF0YS5kb25lLCBldmVudC5kYXRhLnRvdGFsKTsKKyAgICAgICAgfQogICAgICAgICBwcm9m
aWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5FdmVudHMu
Vmlld1VwZGF0ZWQsIHRoaXMuX3VwZGF0ZVByb2ZpbGVUeXBlU3BlY2lmaWNVSSwgdGhpcyk7Cisg
ICAgICAgIHByb2ZpbGVUeXBlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlByb2ZpbGVU
eXBlLkV2ZW50cy5BZGRQcm9maWxlSGVhZGVyLCBvbkFkZFByb2ZpbGVIZWFkZXIsIHRoaXMpOwor
ICAgICAgICBwcm9maWxlVHlwZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9maWxl
VHlwZS5FdmVudHMuUmVtb3ZlUHJvZmlsZUhlYWRlciwgb25SZW1vdmVQcm9maWxlSGVhZGVyLCB0
aGlzKTsKKyAgICAgICAgcHJvZmlsZVR5cGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGUuRXZlbnRzLlByb2dyZXNzVXBkYXRlZCwgb25Qcm9ncmVzc1VwZGF0ZWQsIHRo
aXMpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTUyMCw2ICs2MTUsNyBAQCBXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBu
b3NpZGVlZmZlY3RzCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKICAgICAgKiBAcGFyYW0g
e3N0cmluZ30gcHJvZmlsZVR5cGVJZAogICAgICAqIEByZXR1cm4ge3N0cmluZ30KQEAgLTUzMCwy
MSArNjI2LDEyIEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAg
ICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHByb2ZpbGVUeXBlSWQKLSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICog
QHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKICAgICAgKi8KLSAg
ICBfbWFrZUtleTogZnVuY3Rpb24oaWQsIHByb2ZpbGVUeXBlSWQpCisgICAgX2FkZFByb2ZpbGVI
ZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewotICAgICAgICByZXR1cm4gaWQgKyAnLycg
KyBlc2NhcGUocHJvZmlsZVR5cGVJZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUKLSAgICAgKi8KLSAgICBhZGRQ
cm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVt
b3ZlVGVtcG9yYXJ5UHJvZmlsZShwcm9maWxlLnByb2ZpbGVUeXBlKCkuaWQpOworICAgICAgICBp
ZiAoIXByb2ZpbGUuaXNUZW1wb3JhcnkpCisgICAgICAgICAgICB0aGlzLl9yZW1vdmVUZW1wb3Jh
cnlQcm9maWxlKHByb2ZpbGUucHJvZmlsZVR5cGUoKS5pZCk7CiAKICAgICAgICAgdmFyIHByb2Zp
bGVUeXBlID0gcHJvZmlsZS5wcm9maWxlVHlwZSgpOwogICAgICAgICB2YXIgdHlwZUlkID0gcHJv
ZmlsZVR5cGUuaWQ7CkBAIC01NTMsOSArNjQwLDYgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc21hbGwgPSBmYWxzZTsKICAgICAgICAgdmFy
IGFsdGVybmF0ZVRpdGxlOwogCi0gICAgICAgIHRoaXMuX3Byb2ZpbGVzLnB1c2gocHJvZmlsZSk7
Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzSWRNYXBbdGhpcy5fbWFrZUtleShwcm9maWxlLnVpZCwg
dHlwZUlkKV0gPSBwcm9maWxlOwotCiAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWxEZXNjcmlwdG9yLmlzVXNlckluaXRpYXRlZFByb2ZpbGUocHJvZmlsZS50aXRsZSkpIHsK
ICAgICAgICAgICAgIHZhciBwcm9maWxlVGl0bGVLZXkgPSB0aGlzLl9tYWtlVGl0bGVLZXkocHJv
ZmlsZS50aXRsZSwgdHlwZUlkKTsKICAgICAgICAgICAgIGlmICghKHByb2ZpbGVUaXRsZUtleSBp
biB0aGlzLl9wcm9maWxlR3JvdXBzKSkKQEAgLTU2Myw3ICs2NDcsNiBAQCBXZWJJbnNwZWN0b3Iu
UHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHZhciBncm91cCA9IHRo
aXMuX3Byb2ZpbGVHcm91cHNbcHJvZmlsZVRpdGxlS2V5XTsKICAgICAgICAgICAgIGdyb3VwLnB1
c2gocHJvZmlsZSk7Ci0KICAgICAgICAgICAgIGlmIChncm91cC5sZW5ndGggPT09IDIpIHsKICAg
ICAgICAgICAgICAgICAvLyBNYWtlIGEgZ3JvdXAgVHJlZUVsZW1lbnQgbm93IHRoYXQgdGhlcmUg
YXJlIDIgcHJvZmlsZXMuCiAgICAgICAgICAgICAgICAgZ3JvdXAuX3Byb2ZpbGVzVHJlZUVsZW1l
bnQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVHcm91cFNpZGViYXJUcmVlRWxlbWVudChwcm9m
aWxlLnRpdGxlKTsKQEAgLTYxMCwzNCArNjkzLDI1IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0gcHJvZmlsZQorICAgICAqIEBwYXJhbSB7IVdlYkluc3Bl
Y3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCiAgICAgICovCiAgICAgX3JlbW92ZVByb2ZpbGVI
ZWFkZXI6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewotICAgICAgICB2YXIgc2lkZWJhclBhcmVu
dCA9IHByb2ZpbGUucHJvZmlsZVR5cGUoKS50cmVlRWxlbWVudDsKLQotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fcHJvZmlsZXNbaV0udWlkID09PSBwcm9maWxlLnVpZCkgewotICAgICAgICAgICAg
ICAgIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxlc1tpXTsKLSAgICAgICAgICAgICAgICB0aGlzLl9w
cm9maWxlcy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZS5kaXNwb3NlKHRo
aXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGRlbGV0ZSB0aGlzLl9wcm9maWxlc0lkTWFwW3RoaXMuX21ha2VLZXkocHJvZmlsZS51
aWQsIHByb2ZpbGUucHJvZmlsZVR5cGUoKS5pZCldOworICAgICAgICBwcm9maWxlLmRpc3Bvc2Uo
KTsKKyAgICAgICAgcHJvZmlsZS5wcm9maWxlVHlwZSgpLnJlbW92ZVByb2ZpbGUocHJvZmlsZSk7
CiAKKyAgICAgICAgdmFyIHNpZGViYXJQYXJlbnQgPSBwcm9maWxlLnByb2ZpbGVUeXBlKCkudHJl
ZUVsZW1lbnQ7CiAgICAgICAgIHZhciBwcm9maWxlVGl0bGVLZXkgPSB0aGlzLl9tYWtlVGl0bGVL
ZXkocHJvZmlsZS50aXRsZSwgcHJvZmlsZS5wcm9maWxlVHlwZSgpLmlkKTsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX3Byb2ZpbGVHcm91cHNbcHJvZmlsZVRpdGxlS2V5XTsKKyAgICAgICAgdmFyIGdy
b3VwID0gdGhpcy5fcHJvZmlsZUdyb3Vwc1twcm9maWxlVGl0bGVLZXldOworICAgICAgICBpZiAo
Z3JvdXApIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IGdyb3VwLmluZGV4T2YocHJvZmlsZSk7
CisgICAgICAgICAgICBzaWRlYmFyUGFyZW50ID0gZ3JvdXAuX3Byb2ZpbGVzVHJlZUVsZW1lbnQg
fHwgc2lkZWJhclBhcmVudDsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpCisgICAgICAg
ICAgICAgICAgZ3JvdXAuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgICAgfQogCiAgICAgICAgIHNp
ZGViYXJQYXJlbnQucmVtb3ZlQ2hpbGQocHJvZmlsZS5fcHJvZmlsZXNUcmVlRWxlbWVudCk7CiAK
LSAgICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9yYXJ5KSB7Ci0gICAgICAgICAgICBpZiAocHJv
ZmlsZS5wcm9maWxlVHlwZSgpLmlkID09IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxl
VHlwZS5UeXBlSWQpCi0gICAgICAgICAgICAgICAgSGVhcFByb2ZpbGVyQWdlbnQucmVtb3ZlUHJv
ZmlsZShwcm9maWxlLnVpZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHJv
ZmlsZXJBZ2VudC5yZW1vdmVQcm9maWxlKHByb2ZpbGUucHJvZmlsZVR5cGUoKS5pZCwgcHJvZmls
ZS51aWQpOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gTm8gb3RoZXIgaXRlbSB3aWxsIGJlIHNl
bGVjdGVkIGlmIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcHJvZmlsZXMsIHNvCiAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGF0IHZpZXcgZ2V0cyBjbGVhcmVkIHdoZW4gdGhlIGxhc3QgcHJvZmlsZSBp
cyByZW1vdmVkLgogICAgICAgICBpZiAoIXNpZGViYXJQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7
CkBAIC02NDgsNyArNzIyLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBl
ID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9m
aWxlSGVhZGVyfSBwcm9maWxlCisgICAgICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVI
ZWFkZXJ9IHByb2ZpbGUKICAgICAgKi8KICAgICBfc2hvd1Byb2ZpbGU6IGZ1bmN0aW9uKHByb2Zp
bGUpCiAgICAgewpAQCAtNjc4LDMxICs3NTIsMTUgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFu
ZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gdHlwZUlkCi0gICAgICogQHJldHVybiB7IUFycmF5LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVI
ZWFkZXI+fQotICAgICAqLwotICAgIGdldFByb2ZpbGVzOiBmdW5jdGlvbih0eXBlSWQpCi0gICAg
ewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZhciBwcm9maWxlc0NvdW50ID0g
dGhpcy5fcHJvZmlsZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2Zp
bGVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxl
c1tpXTsKLSAgICAgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSAmJiBwcm9maWxlLnBy
b2ZpbGVUeXBlKCkuaWQgPT09IHR5cGVJZCkKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChw
cm9maWxlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAg
ICAvKioKICAgICAgKiBAcGFyYW0ge0hlYXBQcm9maWxlckFnZW50LkhlYXBTbmFwc2hvdE9iamVj
dElkfSBzbmFwc2hvdE9iamVjdElkCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZpZXdOYW1lCiAg
ICAgICovCiAgICAgc2hvd09iamVjdDogZnVuY3Rpb24oc25hcHNob3RPYmplY3RJZCwgdmlld05h
bWUpCiAgICAgewotICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhpcy5nZXRQcm9maWxlcyhX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKKyAgICAgICAgdmFy
IGhlYXBQcm9maWxlcyA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmlsZXMoKTsKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBoZWFwUHJvZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIHZhciBw
cm9maWxlID0gaGVhcFByb2ZpbGVzW2ldOwotICAgICAgICAgICAgLy8gVE9ETzogYWxsb3cgdG8g
Y2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMuCisgICAgICAgICAg
ICAvLyBGSVhNRTogYWxsb3cgdG8gY2hvb3NlIHNuYXBzaG90IGlmIHRoZXJlIGFyZSBzZXZlcmFs
IG9wdGlvbnMuCiAgICAgICAgICAgICBpZiAocHJvZmlsZS5tYXhKU09iamVjdElkID49IHNuYXBz
aG90T2JqZWN0SWQpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9zaG93UHJvZmlsZShwcm9maWxl
KTsKICAgICAgICAgICAgICAgICBwcm9maWxlLnZpZXcoKS5jaGFuZ2VWaWV3KHZpZXdOYW1lLCBm
dW5jdGlvbigpIHsKQEAgLTcxNSwxNSArNzczLDEyIEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBl
SWQKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuUHJvZmlsZUhlYWRlcn0KICAgICAgKi8K
LSAgICBmaW5kVGVtcG9yYXJ5UHJvZmlsZTogZnVuY3Rpb24odHlwZUlkKQorICAgIF9jcmVhdGVU
ZW1wb3JhcnlQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQpCiAgICAgewotICAgICAgICB2YXIgcHJv
ZmlsZXNDb3VudCA9IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9maWxlc0NvdW50OyArK2kpCi0gICAgICAgICAgICBpZiAodGhpcy5fcHJvZmls
ZXNbaV0ucHJvZmlsZVR5cGUoKS5pZCA9PT0gdHlwZUlkICYmIHRoaXMuX3Byb2ZpbGVzW2ldLmlz
VGVtcG9yYXJ5KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9maWxlc1tpXTsKLSAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB0eXBlID0gdGhpcy5nZXRQcm9maWxlVHlw
ZSh0eXBlSWQpOworICAgICAgICBpZiAoIXR5cGUuZmluZFRlbXBvcmFyeVByb2ZpbGUoKSkKKyAg
ICAgICAgICAgIHR5cGUuYWRkUHJvZmlsZSh0eXBlLmNyZWF0ZVRlbXBvcmFyeVByb2ZpbGUoKSk7
CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNzMxLDggKzc4Niw4IEBAIFdlYkluc3BlY3Rvci5Qcm9m
aWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfcmVtb3ZlVGVtcG9yYXJ5UHJv
ZmlsZTogZnVuY3Rpb24odHlwZUlkKQogICAgIHsKLSAgICAgICAgdmFyIHRlbXBvcmFyeVByb2Zp
bGUgPSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKHR5cGVJZCk7Ci0gICAgICAgIGlmICh0ZW1w
b3JhcnlQcm9maWxlKQorICAgICAgICB2YXIgdGVtcG9yYXJ5UHJvZmlsZSA9IHRoaXMuZ2V0UHJv
ZmlsZVR5cGUodHlwZUlkKS5maW5kVGVtcG9yYXJ5UHJvZmlsZSgpOworICAgICAgICBpZiAoISF0
ZW1wb3JhcnlQcm9maWxlKQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlUHJvZmlsZUhlYWRlcih0
ZW1wb3JhcnlQcm9maWxlKTsKICAgICB9LAogCkBAIC03NDIsMzAgKzc5Nyw3IEBAIFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBnZXRQcm9maWxl
OiBmdW5jdGlvbih0eXBlSWQsIHVpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9m
aWxlc0lkTWFwW3RoaXMuX21ha2VLZXkodWlkLCB0eXBlSWQpXTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHVu
awotICAgICAqLwotICAgIF9hZGRIZWFwU25hcHNob3RDaHVuazogZnVuY3Rpb24odWlkLCBjaHVu
aykKLSAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlID0gdGhpcy5fcHJvZmlsZXNJZE1hcFt0aGlz
Ll9tYWtlS2V5KHVpZCwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJ
ZCldOwotICAgICAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHByb2ZpbGUudHJhbnNmZXJDaHVuayhjaHVuayk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSB1aWQKLSAgICAgKi8KLSAgICBfZmluaXNoSGVhcFNuYXBzaG90OiBm
dW5jdGlvbih1aWQpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVz
SWRNYXBbdGhpcy5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxl
VHlwZS5UeXBlSWQpXTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBwcm9maWxlLmZpbmlzaEhlYXBTbmFwc2hvdCgpOworICAgICAgICByZXR1cm4g
dGhpcy5nZXRQcm9maWxlVHlwZSh0eXBlSWQpLmdldFByb2ZpbGUodWlkKTsKICAgICB9LAogCiAg
ICAgLyoqCkBAIC03OTAsNyArODIyLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAqLwogICAgIHNob3dQcm9maWxlOiBmdW5jdGlvbih0eXBlSWQsIHVp
ZCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dQcm9maWxlKHRoaXMuX3Byb2ZpbGVzSWRNYXBb
dGhpcy5fbWFrZUtleShOdW1iZXIodWlkKSwgdHlwZUlkKV0pOworICAgICAgICB0aGlzLl9zaG93
UHJvZmlsZSh0aGlzLmdldFByb2ZpbGUodHlwZUlkLCBOdW1iZXIodWlkKSkpOwogICAgIH0sCiAK
ICAgICBjbG9zZVZpc2libGVWaWV3OiBmdW5jdGlvbigpCkBAIC05NDgsMjQgKzk4MCwzNiBAQCBX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjdXJy
ZW50Vmlldy5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCgpOwogICAgIH0sCiAKLSAgICBfc2Vh
cmNoYWJsZVZpZXdzOiBmdW5jdGlvbigpCisgICAgLyoqCisgICAgICogQHJldHVybiB7IUFycmF5
LjwhV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXI+fQorICAgICAqLworICAgIF9nZXRBbGxQcm9m
aWxlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHZpZXdzID0gW107Ci0KLSAgICAg
ICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3OwotICAgICAgICBpZiAodmlz
aWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCkKLSAgICAgICAgICAgIHZpZXdz
LnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICB2YXIgcHJvZmlsZXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgdHlwZUlkIGluIHRoaXMuX3Byb2ZpbGVUeXBlc0J5SWRNYXApCisgICAgICAgICAg
ICBwcm9maWxlcyA9IHByb2ZpbGVzLmNvbmNhdCh0aGlzLl9wcm9maWxlVHlwZXNCeUlkTWFwW3R5
cGVJZF0uZ2V0UHJvZmlsZXMoKSk7CisgICAgICAgIHJldHVybiBwcm9maWxlczsKKyAgICB9LAog
Ci0gICAgICAgIHZhciBwcm9maWxlc0xlbmd0aCA9IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3Byb2ZpbGVzW2ldOwotICAgICAgICAgICAgdmFyIHZp
ZXcgPSBwcm9maWxlLnZpZXcoKTsKLSAgICAgICAgICAgIGlmICghdmlldy5wZXJmb3JtU2VhcmNo
IHx8IHZpZXcgPT09IHZpc2libGVWaWV3KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgdmlld3MucHVzaCh2aWV3KTsKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHshQXJy
YXkuPCFXZWJJbnNwZWN0b3IuVmlldz59CisgICAgICovCisgICAgX3NlYXJjaGFibGVWaWV3czog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHByb2ZpbGVzID0gdGhpcy5fZ2V0QWxsUHJv
ZmlsZXMoKTsKKyAgICAgICAgdmFyIHNlYXJjaGFibGVWaWV3cyA9IFtdOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHByb2ZpbGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
dmlldyA9IHByb2ZpbGVzW2ldLnZpZXcoKTsKKyAgICAgICAgICAgIGlmICh2aWV3LnBlcmZvcm1T
ZWFyY2gpCisgICAgICAgICAgICAgICAgc2VhcmNoYWJsZVZpZXdzLnB1c2godmlldykKICAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiB2aWV3czsKKyAgICAgICAgdmFyIGluZGV4ID0gc2VhcmNo
YWJsZVZpZXdzLmluZGV4T2YodGhpcy52aXNpYmxlVmlldyk7CisgICAgICAgIGlmIChpbmRleCA+
IDApIHsKKyAgICAgICAgICAgIC8vIE1vdmUgdmlzaWJsZVZpZXcgdG8gdGhlIGZpcnN0IHBvc2l0
aW9uLgorICAgICAgICAgICAgc2VhcmNoYWJsZVZpZXdzW2luZGV4XSA9IHNlYXJjaGFibGVWaWV3
c1swXTsKKyAgICAgICAgICAgIHNlYXJjaGFibGVWaWV3c1swXSA9IHRoaXMudmlzaWJsZVZpZXc7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNlYXJjaGFibGVWaWV3czsKICAgICB9LAogCiAg
ICAgc2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24odmlldywgbWF0Y2hlcykKQEAgLTk5NSwxMyAr
MTAzOSw5IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKICAgICAgICAgdGhpcy5fc2Vh
cmNoUmVzdWx0cyA9IFtdOwogCi0gICAgICAgIGlmICghdGhpcy5fcHJvZmlsZXMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wcm9maWxl
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIHByb2ZpbGUgPSB0aGlzLl9wcm9maWxl
c1tpXTsKLSAgICAgICAgICAgIHByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1lbnQuc2VhcmNoTWF0
Y2hlcyA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIHByb2ZpbGVzID0gdGhpcy5fZ2V0QWxs
UHJvZmlsZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlcy5sZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIHByb2ZpbGVzW2ldLl9wcm9maWxlc1RyZWVFbGVtZW50LnNlYXJj
aE1hdGNoZXMgPSAwOwogICAgIH0sCiAKICAgICBfdXBkYXRlSW50ZXJmYWNlOiBmdW5jdGlvbigp
CkBAIC0xMDY0LDM0ICsxMTA0LDYgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9wb3B1bGF0ZVByb2ZpbGVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3Byb2ZpbGVyRW5hYmxlZCB8fCB0aGlz
Ll9wcm9maWxlc1dlcmVSZXF1ZXN0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
LyoqCi0gICAgICAgICAqIEBwYXJhbSB7P3N0cmluZ30gdHlwZQotICAgICAgICAgKiBAcGFyYW0g
ez9zdHJpbmd9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7QXJyYXkuPFByb2ZpbGVyQWdlbnQu
UHJvZmlsZUhlYWRlcj59IHByb2ZpbGVIZWFkZXJzCi0gICAgICAgICAqLwotICAgICAgICBmdW5j
dGlvbiBwb3B1bGF0ZUNhbGxiYWNrKHR5cGUsIGVycm9yLCBwcm9maWxlSGVhZGVycykgewotICAg
ICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IHByb2ZpbGVIZWFkZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYS51aWQgLSBiLnVp
ZDsgfSk7Ci0gICAgICAgICAgICB2YXIgcHJvZmlsZUhlYWRlcnNMZW5ndGggPSBwcm9maWxlSGVh
ZGVycy5sZW5ndGg7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVIZWFk
ZXJzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IHBy
b2ZpbGVIZWFkZXJzW2ldOwotICAgICAgICAgICAgICAgIHZhciBwcm9maWxlVHlwZSA9IHRoaXMu
Z2V0UHJvZmlsZVR5cGUodHlwZSB8fCBwcm9maWxlSGVhZGVyLnR5cGVJZCk7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVUeXBlLmNyZWF0ZVByb2ZpbGUocHJv
ZmlsZUhlYWRlcikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUHJvZmls
ZXJBZ2VudC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0ZUNhbGxiYWNrLmJpbmQodGhpcywgbnVs
bCkpOwotICAgICAgICBIZWFwUHJvZmlsZXJBZ2VudC5nZXRQcm9maWxlSGVhZGVycyhwb3B1bGF0
ZUNhbGxiYWNrLmJpbmQodGhpcywgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBl
LlR5cGVJZCkpOwotCi0gICAgICAgIHRoaXMuX3Byb2ZpbGVzV2VyZVJlcXVlc3RlZCA9IHRydWU7
Ci0gICAgfSwKLQogICAgIC8qKgogICAgICAqIEBwYXJhbSB7IVdlYkluc3BlY3Rvci5FdmVudH0g
ZXZlbnQKICAgICAgKi8KQEAgLTExMjUsNDcgKzExMzcsMjQgQEAgV2ViSW5zcGVjdG9yLlByb2Zp
bGVzUGFuZWwucHJvdG90eXBlID0gewogICAgIHNldFJlY29yZGluZ1Byb2ZpbGU6IGZ1bmN0aW9u
KHByb2ZpbGVUeXBlLCBpc1Byb2ZpbGluZykKICAgICB7CiAgICAgICAgIHZhciBwcm9maWxlVHlw
ZU9iamVjdCA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUocHJvZmlsZVR5cGUpOwotICAgICAgICBwcm9m
aWxlVHlwZU9iamVjdC5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKICAgICAgICAg
dGhpcy5yZWNvcmRCdXR0b24udG9nZ2xlZCA9IGlzUHJvZmlsaW5nOwogICAgICAgICB0aGlzLnJl
Y29yZEJ1dHRvbi50aXRsZSA9IHByb2ZpbGVUeXBlT2JqZWN0LmJ1dHRvblRvb2x0aXA7CiAgICAg
ICAgIGlmIChpc1Byb2ZpbGluZykgewogICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3LnBy
b2ZpbGVTdGFydGVkKCk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuZmluZFRlbXBvcmFyeVByb2Zp
bGUocHJvZmlsZVR5cGUpKQotICAgICAgICAgICAgICAgIHRoaXMuYWRkUHJvZmlsZUhlYWRlcihw
cm9maWxlVHlwZU9iamVjdC5jcmVhdGVUZW1wb3JhcnlQcm9maWxlKCkpOwotICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGVtcG9yYXJ5UHJvZmlsZShwcm9maWxlVHlw
ZSk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3LnByb2Zp
bGVGaW5pc2hlZCgpOwotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVGVtcG9yYXJ5UHJvZmlsZShw
cm9maWxlVHlwZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgdGFrZUhlYXBTbmFwc2hvdDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRlbXBvcmFyeVJlY29yZGluZ1Byb2ZpbGUg
PSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9m
aWxlVHlwZS5UeXBlSWQpOwotICAgICAgICBpZiAoIXRlbXBvcmFyeVJlY29yZGluZ1Byb2ZpbGUp
IHsKLSAgICAgICAgICAgIHZhciBwcm9maWxlVHlwZU9iamVjdCA9IHRoaXMuZ2V0UHJvZmlsZVR5
cGUoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7Ci0gICAgICAg
ICAgICB0aGlzLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZVR5cGVPYmplY3QuY3JlYXRlVGVtcG9y
YXJ5UHJvZmlsZSgpKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9sYXVuY2hlclZpZXcucHJv
ZmlsZVN0YXJ0ZWQoKTsKLSAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHsKLSAgICAgICAgICAgIHRo
aXMuX2xhdW5jaGVyVmlldy5wcm9maWxlRmluaXNoZWQoKTsKLSAgICAgICAgfQotICAgICAgICBI
ZWFwUHJvZmlsZXJBZ2VudC50YWtlSGVhcFNuYXBzaG90KHRydWUsIGRvbmUuYmluZCh0aGlzKSk7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci51c2VyTWV0cmljcy5Qcm9maWxlc0hlYXBQcm9maWxlVGFr
ZW4ucmVjb3JkKCk7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7IVdlYkluc3Bl
Y3Rvci5Qcm9maWxlSGVhZGVyfSBwcm9maWxlCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGRvbmUK
ICAgICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwKICAgICAgKi8KLSAgICBfcmVwb3J0SGVhcFNu
YXBzaG90UHJvZ3Jlc3M6IGZ1bmN0aW9uKGRvbmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAgdmFy
IHRlbXBvcmFyeVByb2ZpbGUgPSB0aGlzLmZpbmRUZW1wb3JhcnlQcm9maWxlKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOwotICAgICAgICBpZiAodGVtcG9yYXJ5
UHJvZmlsZSkgewotICAgICAgICAgICAgdGVtcG9yYXJ5UHJvZmlsZS5zaWRlYmFyRWxlbWVudC5z
dWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUiLCAoZG9uZSAvIHRvdGFsKSAq
IDEwMCk7Ci0gICAgICAgICAgICB0ZW1wb3JhcnlQcm9maWxlLnNpZGViYXJFbGVtZW50LndhaXQg
PSB0cnVlOwotICAgICAgICAgICAgaWYgKGRvbmUgPj0gdG90YWwpCi0gICAgICAgICAgICAgICAg
dGhpcy5fcmVtb3ZlVGVtcG9yYXJ5UHJvZmlsZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJv
ZmlsZVR5cGUuVHlwZUlkKTsKLSAgICAgICAgfQorICAgIF9yZXBvcnRQcm9maWxlUHJvZ3Jlc3M6
IGZ1bmN0aW9uKHByb2ZpbGUsIGRvbmUsIHRvdGFsKQorICAgIHsKKyAgICAgICAgcHJvZmlsZS5z
aWRlYmFyRWxlbWVudC5zdWJ0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZiUiLCAo
ZG9uZSAvIHRvdGFsKSAqIDEwMCk7CisgICAgICAgIHByb2ZpbGUuc2lkZWJhckVsZW1lbnQud2Fp
dCA9IHRydWU7CiAgICAgfSwKIAogICAgIC8qKiAKQEAgLTExODIsNyArMTE3MSw3IEBAIFdlYklu
c3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFvYmplY3RJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgaGVhcFByb2ZpbGVzID0gdGhp
cy5nZXRQcm9maWxlcyhXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlk
KTsKKyAgICAgICAgdmFyIGhlYXBQcm9maWxlcyA9IHRoaXMuZ2V0UHJvZmlsZVR5cGUoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCkuZ2V0UHJvZmlsZXMoKTsKICAg
ICAgICAgaWYgKCFoZWFwUHJvZmlsZXMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMjA4LDE1NiArMTE5Nyw2IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlw
ZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtNZW1vcnlBZ2Vu
dC5EaXNwYXRjaGVyfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJv
ZmlsZXNQYW5lbAotICovCi1XZWJJbnNwZWN0b3IuTWVtb3J5RGlzcGF0Y2hlciA9IGZ1bmN0aW9u
KHByb2ZpbGVzUGFuZWwpCi17Ci0gICAgdGhpcy5fcHJvZmlsZXNQYW5lbCA9IHByb2ZpbGVzUGFu
ZWw7Ci19Ci0KLVdlYkluc3BlY3Rvci5NZW1vcnlEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLQot
ICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7TWVtb3J5QWdlbnQuSGVh
cFNuYXBzaG90Q2h1bmt9IGNodW5rCi0gICAgICovCi0gICAgYWRkTmF0aXZlU25hcHNob3RDaHVu
azogZnVuY3Rpb24oY2h1bmspCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZSA9IHRoaXMuX3By
b2ZpbGVzUGFuZWwuZmluZFRlbXBvcmFyeVByb2ZpbGUoV2ViSW5zcGVjdG9yLk5hdGl2ZVNuYXBz
aG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKLSAgICAgICAgaWYgKCFwcm9maWxlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBwcm9maWxlLmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsoY2h1bmsp
OwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtQcm9m
aWxlckFnZW50LkRpc3BhdGNoZXJ9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Qcm9maWxlc1Bh
bmVsfSBwcm9maWxlc1BhbmVsCi0gKi8KLVdlYkluc3BlY3Rvci5Qcm9maWxlckRpc3BhdGNoZXIg
PSBmdW5jdGlvbihwcm9maWxlc1BhbmVsKQotewotICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwgPSBw
cm9maWxlc1BhbmVsOwotfQotCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXJEaXNwYXRjaGVyLnByb3Rv
dHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1Byb2ZpbGVyQWdlbnQuUHJvZmlsZUhl
YWRlcn0gcHJvZmlsZQotICAgICAqLwotICAgIGFkZFByb2ZpbGVIZWFkZXI6IGZ1bmN0aW9uKHBy
b2ZpbGUpCi0gICAgewotICAgICAgICB2YXIgcHJvZmlsZVR5cGUgPSB0aGlzLl9wcm9maWxlc1Bh
bmVsLmdldFByb2ZpbGVUeXBlKHByb2ZpbGUudHlwZUlkKTsKLSAgICAgICAgdGhpcy5fcHJvZmls
ZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVUeXBlLmNyZWF0ZVByb2ZpbGUocHJvZmls
ZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gdWlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCi0gICAgICovCi0gICAg
YWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1bmspCi0gICAgewotICAgICAg
ICB0aGlzLl9wcm9maWxlc1BhbmVsLl9hZGRIZWFwU25hcHNob3RDaHVuayh1aWQsIGNodW5rKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtudW1i
ZXJ9IHVpZAotICAgICAqLwotICAgIGZpbmlzaEhlYXBTbmFwc2hvdDogZnVuY3Rpb24odWlkKQot
ICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fZmluaXNoSGVhcFNuYXBzaG90KHVp
ZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gaXNQcm9maWxpbmcKLSAgICAgKi8KLSAgICBzZXRSZWNvcmRpbmdQcm9maWxlOiBm
dW5jdGlvbihpc1Byb2ZpbGluZykKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVzUGFuZWwu
c2V0UmVjb3JkaW5nUHJvZmlsZShXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUuVHlwZUlkLCBp
c1Byb2ZpbGluZyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAq
LwotICAgIHJlc2V0UHJvZmlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3By
b2ZpbGVzUGFuZWwuX3Jlc2V0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkb25lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRv
dGFsCi0gICAgICovCi0gICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3M6IGZ1bmN0aW9uKGRv
bmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fcmVwb3J0SGVh
cFNuYXBzaG90UHJvZ3Jlc3MoZG9uZSwgdG90YWwpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtIZWFwUHJvZmlsZXJBZ2VudC5EaXNwYXRjaGVyfQot
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbH0gcHJvZmlsZXNQYW5lbAotICov
Ci1XZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVyRGlzcGF0Y2hlciA9IGZ1bmN0aW9uKHByb2ZpbGVz
UGFuZWwpCi17Ci0gICAgdGhpcy5fcHJvZmlsZXNQYW5lbCA9IHByb2ZpbGVzUGFuZWw7Ci19Ci0K
LVdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZXJEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge0hlYXBQcm9maWxlckFnZW50LlByb2ZpbGVIZWFkZXJ9IHByb2Zp
bGUKLSAgICAgKi8KLSAgICBhZGRQcm9maWxlSGVhZGVyOiBmdW5jdGlvbihwcm9maWxlKQotICAg
IHsKLSAgICAgICAgdmFyIHByb2ZpbGVUeXBlID0gdGhpcy5fcHJvZmlsZXNQYW5lbC5nZXRQcm9m
aWxlVHlwZShXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkKTsKLSAg
ICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5hZGRQcm9maWxlSGVhZGVyKHByb2ZpbGVUeXBlLmNy
ZWF0ZVByb2ZpbGUocHJvZmlsZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gdWlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNo
dW5rCi0gICAgICovCi0gICAgYWRkSGVhcFNuYXBzaG90Q2h1bms6IGZ1bmN0aW9uKHVpZCwgY2h1
bmspCi0gICAgewotICAgICAgICB0aGlzLl9wcm9maWxlc1BhbmVsLl9hZGRIZWFwU25hcHNob3RD
aHVuayh1aWQsIGNodW5rKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IHVpZAotICAgICAqLwotICAgIGZpbmlzaEhlYXBTbmFwc2hv
dDogZnVuY3Rpb24odWlkKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5fZmlu
aXNoSGVhcFNuYXBzaG90KHVpZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBvdmVycmlk
ZQotICAgICAqLwotICAgIHJlc2V0UHJvZmlsZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3Byb2ZpbGVzUGFuZWwuX3Jlc2V0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBvdmVycmlkZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkb25lCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IHRvdGFsCi0gICAgICovCi0gICAgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3M6IGZ1
bmN0aW9uKGRvbmUsIHRvdGFsKQotICAgIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXNQYW5lbC5f
cmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MoZG9uZSwgdG90YWwpOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVF
bGVtZW50fQogICogQHBhcmFtIHshV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXJ9IHByb2ZpbGUK
ICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZUZvcm1hdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJjMGVjMTU2MzRlYTM1MmE2
ZjY4NzIzZGE5NDQ4MmZhOTg4NGRlMmIuLmZmMzQ3ZGU3Y2NjNzRhZjQ1NGE3ZDhmMTM2MDJhOTY0
Y2U4ZWM4MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMy0wMi0yMiAgQWxleGVpIEZpbGlw
cG92ICA8YWxwaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBw
cm9maWxlIHR5cGUgc3BlY2lmaWMgY29kZSBvdXQgb2YgUHJvZmlsZXNQYW5lbCAocmVmYWN0b3Ip
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA1OTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHBy
b2ZpbGUgdHlwZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG91dCBvZiBQcm9maWxlc1BhbmVsIGNs
YXNzLgorICAgICAgICBUaGlzIGlzIGEgZmlyc3QgcGFydCBvZiBXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbCByZWZhY3RvcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhlIGZ1bmN0
aW9uYWxpdHkgaXNuJ3QgY2hhbmdlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9j
YW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1ncmlkLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20t
d3JhcHBlci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90
LWxvYWRlci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90
LXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX0hlYXBTbmFwc2hvdFRlc3QuKToKKyAgICAg
ICAgKGluaXRpYWxpemVfSGVhcFNuYXBzaG90VGVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL3By
b2ZpbGVyL3Byb2ZpbGVyLXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX1Byb2ZpbGVyVGVz
dC5JbnNwZWN0b3JUZXN0LnN0YXJ0UHJvZmlsZXJUZXN0LnN0YXJ0VGVzdCk6CisgICAgICAgIChp
bml0aWFsaXplX1Byb2ZpbGVyVGVzdC5JbnNwZWN0b3JUZXN0LnN0YXJ0UHJvZmlsZXJUZXN0KToK
KwogMjAxMy0wMi0yNSAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wcm92ZSBzcGVlZCBvZiBMaW5raWZpZXIucmVzZXQg
b3BlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2Nh
bnZhczJkL2NhbnZhcy1yZXBsYXktbG9nLWdyaWQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9wcm9maWxlci9jYW52YXMyZC9jYW52YXMtcmVwbGF5LWxvZy1ncmlkLmh0bWwKaW5kZXggNDJj
MDQzMDFkM2NlYjhhYzA1YWY4MTNlYmUxMTEzZWJjMzc4N2Y4Zi4uMDgzNzUwYzk0YTY1OWQ1YzQ2
MDJjMTMyMTc4ODQ4NTg2NWYzYTllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Byb2ZpbGVyL2NhbnZhczJkL2NhbnZhcy1yZXBsYXktbG9nLWdyaWQuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvY2FudmFzMmQvY2FudmFzLXJlcGxheS1sb2ctZ3Jp
ZC5odG1sCkBAIC01Miw5ICs1Miw5IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHZhciBwcm9maWxl
VmlldzsKICAgICB2YXIgZGF0YUdyaWQ7CiAKLSAgICBmdW5jdGlvbiBkaWRTdGFydENhcHR1cmlu
Z0ZyYW1lKHByb2ZpbGVzUGFuZWwsIGZyYW1lSWQsIGVycm9yLCB0cmFjZUxvZ0lkKQorICAgIGZ1
bmN0aW9uIGRpZFN0YXJ0Q2FwdHVyaW5nRnJhbWUoZnJhbWVJZCwgZXJyb3IsIHRyYWNlTG9nSWQp
CiAgICAgewotICAgICAgICBwcm9maWxlSGVhZGVyID0gcHJvZmlsZXNQYW5lbC5nZXRQcm9maWxl
cyhXZWJJbnNwZWN0b3IuQ2FudmFzUHJvZmlsZVR5cGUuVHlwZUlkKVswXTsKKyAgICAgICAgcHJv
ZmlsZUhlYWRlciA9IHByb2ZpbGVUeXBlLmdldFByb2ZpbGVzKClbMF0KICAgICAgICAgcHJvZmls
ZXNQYW5lbC5fc2hvd1Byb2ZpbGUocHJvZmlsZUhlYWRlcik7CiAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkU25pZmZlcihwcm9maWxlSGVhZGVyLCAiX3VwZGF0ZUNhcHR1cmluZ1N0YXR1cyIsIGRp
ZFJlY2VpdmVGaXJzdEZyYW1lKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluQ29u
c29sZSgiZG9Tb21lQ2FudmFzQ2FsbHMoMikiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWluc3BlY3QtZG9tLXdyYXBwZXItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5z
cGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQKaW5kZXggN2ZkNWQxMGNhZjQ1MzdkMGZhMGY5
M2NmMTk4MjI2NGU1YTEwNGVhOS4uNjFlMDdiN2UxOTc5MzJmMjRiZmRkNzI2MTk4MjRjYjc1ODcz
ZjM2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25h
cHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci1leHBl
Y3RlZC50eHQKQEAgLTEsNiArMSw2IEBACiBUZXN0IHRoYXQgcmVzb2x2aW5nIGhlYXAgc25hcGhv
dCBvYmplY3QgdG8gYSBKUyBvYmplY3Qgd2lsbCBub3QgY3Jhc2ggb24gRE9NIHdyYXBwZXIgYm9p
bGVycGxhdGUuIFRlc3QgcGFzc2VzIGlmIGl0IGRvZXNuJ3QgY3Jhc2guCiAKLV9maW5pc2hIZWFw
U25hcHNob3QgMQorZmluaXNoSGVhcFNuYXBzaG90IDEKIF9jYWxsTG9hZENhbGxiYWNrcwogRXJy
b3IgcmVzb2x2aW5nIGhlYXAgc25hcHNob3Qgb2JqZWN0OiBPYmplY3QgaXMgbm90IGF2YWlsYWJs
ZQogRXJyb3IgcmVzb2x2aW5nIGhlYXAgc25hcHNob3Qgb2JqZWN0OiBPYmplY3QgaXMgbm90IGF2
YWlsYWJsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAt
c25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtaW5zcGVjdC1kb20td3JhcHBlci5odG1sCmluZGV4IDky
NGQ1YzVlOTlkMGExN2RhNTI2MjA2YmNiYjVhODVmMjc1YjdjOGEuLjIzODA4NDhmYjgzODA0NzRl
MDE4M2YxODBmYTdiZDcxNzk1NzM0NTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWluc3BlY3QtZG9tLXdyYXBwZXIuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1pbnNwZWN0LWRvbS13
cmFwcGVyLmh0bWwKQEAgLTE4LDE2ICsxOCwxNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgIGZ1
bmN0aW9uIHN0ZXAwKCkKICAgICB7Ci0gICAgICAgIHZhciBwcm9maWxlcyA9IFdlYkluc3BlY3Rv
ci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJvZmlsZXMoIkhFQVAiKTsKKyAgICAgICAgdmFyIGhlYXBQ
cm9maWxlVHlwZSA9ICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmdldFByb2ZpbGVUeXBl
KCJIRUFQIik7CisgICAgICAgIHZhciBwcm9maWxlcyA9IGhlYXBQcm9maWxlVHlwZS5nZXRQcm9m
aWxlcygpOwogICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLl9zaG93UHJvZmls
ZShwcm9maWxlc1twcm9maWxlcy5sZW5ndGggLSAxXSk7Ci0gICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiX2ZpbmlzaEhlYXBTbmFw
c2hvdCIsIHN0ZXAxKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKGhlYXBQcm9m
aWxlVHlwZSwgImZpbmlzaEhlYXBTbmFwc2hvdCIsIHN0ZXAxKTsKICAgICB9CiAKICAgICBmdW5j
dGlvbiBzdGVwMSh1aWQpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
X2ZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRS
ZXN1bHQoImZpbmlzaEhlYXBTbmFwc2hvdCAiICsgdWlkKTsKICAgICAgICAgdmFyIHBhbmVsID0g
V2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlczsKLSAgICAgICAgdmFyIHByb2ZpbGUgPSBwYW5l
bC5fcHJvZmlsZXNJZE1hcFtwYW5lbC5fbWFrZUtleSh1aWQsIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm9maWxlVHlwZS5UeXBlSWQpXTsKKyAgICAgICAgdmFyIHByb2ZpbGUgPSBwYW5lbC5n
ZXRQcm9maWxlKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQsIHVp
ZCk7CiAgICAgICAgIHByb2ZpbGUubG9hZChzdGVwMi5iaW5kKHRoaXMpKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxv
YWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
bG9hZGVyLmh0bWwKaW5kZXggMGNkYWJkZDliZTQzZDZhNzM5NWU5NDY0OGU2OWYzOWM3MWY4NTU0
Yy4uMTU4ZjMwODAyN2Q4ZDRmMDFkYzQzMjAzNDZjODE2N2U4NGE0YjFhOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVy
Lmh0bWwKQEAgLTI4LDcgKzI4LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICBtYXhK
U09iamVjdElkOiA2CiAgICAgICAgIH0pOwogCi0gICAgICAgIHZhciBwcm9maWxlSGVhZGVyID0g
cGFuZWwuX3Byb2ZpbGVzWzBdOworICAgICAgICB2YXIgcHJvZmlsZUhlYWRlciA9IHBhbmVsLmdl
dFByb2ZpbGVUeXBlKCJIRUFQIikuZ2V0UHJvZmlsZXMoKVswXTsKIAogICAgICAgICBmdW5jdGlv
biBnZXRIZWFwU25hcHNob3RNb2NrKHVpZCkgewogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBzb3VyY2VTdHJpbmdpZmllZC5sZW5ndGg7IGkgPCBsOyBpICs9IHBhcnRTaXplKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVz
dC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3Qu
anMKaW5kZXggMmU2YmIxZmZjZThhZmM2OTI2ZmQ1OGEyZjgzNDExODk1N2U2MGViZC4uMjljYTc2
MWU5M2IxZDM3MzlmYjM2ZDM5ZjA2ZTZjNzE2ZTQxNGQwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCkBAIC03MzIsMTIg
KzczMiwxMiBAQCBJbnNwZWN0b3JUZXN0LnRha2VBbmRPcGVuU25hcHNob3QgPSBmdW5jdGlvbihn
ZW5lcmF0b3IsIGNhbGxiYWNrKQogICAgICAgICBzbmFwc2hvdC5zbmFwc2hvdC50eXBlSWQgPSAi
SEVBUCI7CiAgICAgICAgIHNuYXBzaG90LnNuYXBzaG90LnRpdGxlID0gcHJvZmlsZS50aXRsZTsK
ICAgICAgICAgc25hcHNob3Quc25hcHNob3QudWlkID0gcHJvZmlsZS51aWQ7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX2FkZEhlYXBTbmFwc2hvdENodW5rKHVpZCwgSlNP
Ti5zdHJpbmdpZnkoc25hcHNob3QpKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9m
aWxlcy5fZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7CisgICAgICAgIHByb2ZpbGVUeXBlLmFkZEhl
YXBTbmFwc2hvdENodW5rKHVpZCwgSlNPTi5zdHJpbmdpZnkoc25hcHNob3QpKTsKKyAgICAgICAg
cHJvZmlsZVR5cGUuZmluaXNoSGVhcFNuYXBzaG90KHVpZCk7CiAgICAgfQogICAgIEluc3BlY3Rv
clRlc3Qub3ZlcnJpZGUoSGVhcFByb2ZpbGVyQWdlbnQsICJnZXRIZWFwU25hcHNob3QiLCBwdXNo
R2VuZXJhdGVkU25hcHNob3QpOwogICAgIEluc3BlY3RvclRlc3QuX3Rha2VBbmRPcGVuU25hcHNo
b3RDYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMu
YWRkUHJvZmlsZUhlYWRlcihwcm9maWxlKTsKKyAgICBwcm9maWxlVHlwZS5hZGRQcm9maWxlKHBy
b2ZpbGUpOwogICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuX3Nob3dQcm9maWxlKHBy
b2ZpbGUpOwogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L3Byb2ZpbGVyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmls
ZXItdGVzdC5qcwppbmRleCAyYmNmMzBlZDg0YjZiNDQ3NjlhZDUzNmY4N2FkYThlMmUxZGVlMTUw
Li4xN2I4OWQ0MjNkNjVhODM5OGUwNDA4ZGU1YTk1YTc0OWQxNWY2ZDcwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmlsZXItdGVzdC5qcworKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvcHJvZmlsZXItdGVzdC5qcwpAQCAtNyw3ICs3LDcg
QEAgSW5zcGVjdG9yVGVzdC5zdGFydFByb2ZpbGVyVGVzdCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQog
ICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiUHJvZmlsZXIgd2FzIGVuYWJsZWQuIik7Ci0gICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiYWRkUHJvZmlsZUhlYWRl
ciIsIEluc3BlY3RvclRlc3QuX3Byb2ZpbGVIZWFkZXJBZGRlZCwgdHJ1ZSk7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCAiX2Fk
ZFByb2ZpbGVIZWFkZXIiLCBJbnNwZWN0b3JUZXN0Ll9wcm9maWxlSGVhZGVyQWRkZWQsIHRydWUp
OwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLkNQVVByb2Zp
bGVWaWV3LnByb3RvdHlwZSwgInJlZnJlc2giLCBJbnNwZWN0b3JUZXN0Ll9wcm9maWxlVmlld1Jl
ZnJlc2gsIHRydWUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LnNhZmVXcmFwKGNhbGxiYWNrKSgp
OwogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>