<?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>97226</bug_id>
          
          <creation_ts>2012-09-20 09:27:08 -0700</creation_ts>
          <short_desc>Web Inspector: [refactoring] simplify interface to FileOutputStream</short_desc>
          <delta_ts>2012-09-21 05:49:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>724568</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-09-20 09:27:08 -0700</bug_when>
    <thetext>This brings FileOutputStream closer to the classical notion of stream, having just open(), write() and close() methods and using individual callbacks instead of a delegate with multiple methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724663</commentid>
    <comment_count>1</comment_count>
      <attachid>164948</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-09-20 11:05:29 -0700</bug_when>
    <thetext>Created attachment 164948
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725277</commentid>
    <comment_count>2</comment_count>
      <attachid>164948</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-09-21 02:02:30 -0700</bug_when>
    <thetext>Comment on attachment 164948
Patch

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:861
&gt; -        if (!this._receiver)
&gt; -            this._setupWorker();
&gt;          var loaderProxy = /** @type {WebInspector.HeapSnapshotLoaderProxy} */ this._receiver;
&gt; -
&gt; -        this._numberOfChunks = 0;
&gt; -        if (!loaderProxy.isStarted()) {
&gt; -            loaderProxy.startTransfer();
&gt; +        
&gt; +        if (!loaderProxy) {

looks strange. I hope it could be simplified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725279</commentid>
    <comment_count>3</comment_count>
      <attachid>164948</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-09-21 02:03:02 -0700</bug_when>
    <thetext>Comment on attachment 164948
Patch

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

&gt; Source/WebCore/inspector/front-end/FileUtils.js:316
&gt; +        WebInspector.fileManager.addEventListener(WebInspector.FileManager.EventTypes.SavedURL, callbackWrapper, this);

callbackWrapper -&gt; callbackWrapper.bind(this)

&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:-141
&gt; -            this.transferChunk(&quot;&quot;);

I&apos;d say that after this change it is easier to break the code by changing one of the cases.

&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:864
&gt; +            this._numberOfChunks = 0;

Now it is only reset if there is now worker yet, is it intentional?

&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:936
&gt; +        if (!transferFinished &amp;&amp; this._receiver)

You should make sure the receiver is closed when it is reset to null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725311</commentid>
    <comment_count>4</comment_count>
      <attachid>164948</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-09-21 02:32:22 -0700</bug_when>
    <thetext>Comment on attachment 164948
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/FileUtils.js:316
&gt;&gt; +        WebInspector.fileManager.addEventListener(WebInspector.FileManager.EventTypes.SavedURL, callbackWrapper, this);
&gt; 
&gt; callbackWrapper -&gt; callbackWrapper.bind(this)

this is implicitly bound with third argument to addEventListener. This is critically more convenient, as otherwise we would have to store the resulting bound function to be able to removeEventListener(). I did miss this in call to removeEventListener(), though.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotLoader.js:-141
&gt;&gt; -            this.transferChunk(&quot;&quot;);
&gt; 
&gt; I&apos;d say that after this change it is easier to break the code by changing one of the cases.

So what we&apos;re doing here is essentially a piece of code that would be executed sequentially if the data in chunk were not incomplete. We only need state to jump in to appropriate parsing stage when more data come in the next block. I think recursion here is quite confusing, we should just keep falling through cases while we have enough data.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:861
&gt;&gt; +        if (!loaderProxy) {
&gt; 
&gt; looks strange. I hope it could be simplified.

done.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:864
&gt;&gt; +            this._numberOfChunks = 0;
&gt; 
&gt; Now it is only reset if there is now worker yet, is it intentional?

fixed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshotView.js:936
&gt;&gt; +        if (!transferFinished &amp;&amp; this._receiver)
&gt; 
&gt; You should make sure the receiver is closed when it is reset to null.

done (in snapshotReceived).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725314</commentid>
    <comment_count>5</comment_count>
      <attachid>165094</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-09-21 02:35:44 -0700</bug_when>
    <thetext>Created attachment 165094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725446</commentid>
    <comment_count>6</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-09-21 05:49:17 -0700</bug_when>
    <thetext>Committed r129218: &lt;http://trac.webkit.org/changeset/129218&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164948</attachid>
            <date>2012-09-20 11:05:29 -0700</date>
            <delta_ts>2012-09-21 02:35:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97226-20120920220453.patch</filename>
            <type>text/plain</type>
            <size>30203</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFlNGI2Y2QxYzllZWEw
OWY4MzE3ODJiZGIxNjhhNjFhODRkMmNkMC4uZTY3N2NhODNiMGE0ZjJhNDMyOTQ1Y2ZhMDg1YmFl
MjMwMTg4ODI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA5LTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogW3JlZmFjdG9yaW5nXSBzaW1wbGlmeSBpbnRlcmZhY2UgdG8gRmlsZU91dHB1dFN0cmVhbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyMjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGNoYW5nZSBP
dXRwdXRTdHJlYW0gaW50ZXJmYWNlIHRvIG1hdGNoIHRoYXQgb2Ygc3RyZWFtOworICAgICAgICAt
IGZpeCBPdXRwdXRTdHJlYW0gaW1wbGVtZW50YXRpb25zIChGaWxlT3V0cHV0U3RyZWFtIGFuZCB0
aG9zZSBpbiBoZWFwIHByb2ZpbGVyKTsKKyAgICAgICAgLSBmaXggdXNhZ2VzIGluIFRpbWVsaW5l
IGFuZCBIZWFwUHJvZmlsZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVV
dGlscy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0ucHJvdG90eXBlLndy
aXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0ucHJvdG90eXBlLmNsb3Nl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUuc3Rh
cnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyLnByb3RvdHlwZS5f
b25DaHVua0xvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZFhIUlJlYWRlci5w
cm90b3R5cGUuc3RhcnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRYSFJSZWFkZXIu
cHJvdG90eXBlLl9vblByb2dyZXNzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkWEhS
UmVhZGVyLnByb3RvdHlwZS5fb25Mb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxlT3V0
cHV0U3RyZWFtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxlT3V0cHV0U3RyZWFtLnByb3Rv
dHlwZS5vcGVuLmNhbGxiYWNrV3JhcHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRmlsZU91
dHB1dFN0cmVhbS5wcm90b3R5cGUub3Blbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRmlsZU91
dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbGVP
dXRwdXRTdHJlYW0ucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxl
T3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fb25BcHBlbmREb25lKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlLndyaXRlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZS5zdGFydFRyYW5zZmVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUud3Jp
dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3Rv
dHlwZS5jbG9zZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUubG9hZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9zZXR1cFdvcmtl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRp
c3Bvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlw
ZS50cmFuc2ZlckNodW5rLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJv
ZmlsZUhlYWRlci5wcm90b3R5cGUudHJhbnNmZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmZpbmlzaEhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLnNhdmVUb0ZpbGUu
b25PcGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5
cGUuc2F2ZVRvRmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1v
ZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLl9j
cmVhdGVGaWxlV3JpdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnBy
b3RvdHlwZS5zYXZlVG9GaWxlLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsLnByb3RvdHlwZS5zYXZlVG9GaWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
aW1lbGluZU1vZGVsTG9hZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVs
TG9hZGVyLnByb3RvdHlwZS53cml0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVN
b2RlbExvYWRlci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lU2F2ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIucHJvdG90eXBl
LnNhdmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIucHJvdG90eXBlLl93
cml0ZU5leHRDaHVuayk6CisKIDIwMTItMDktMjAgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZy
YWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGlzU3RhcnRDb2x1bW4gaW4gdGhlIGJv
cmRlciBjb2xsYXBzaW5nIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9GaWxlVXRpbHMuanMKaW5kZXggNjViNDljYjkxMTM5N2RiOWFlNzMwODU0MzY1NDQ4NmE4
NDA0MTQ5OC4uN2IxMTgyYmJkMmI5YTc2NmJjZGY5NDNhMDI4MjY3OWRkZjNiOGFkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMKQEAgLTUz
LDE2ICs1MywxMyBAQCBXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtID0gZnVuY3Rpb24oKQogfQog
CiBXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtLnByb3RvdHlwZSA9IHsKLSAgICBzdGFydFRyYW5z
ZmVyOiBmdW5jdGlvbigpIHsgfSwKLQogICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBj
aHVuaworICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhCisgICAgICogQHBhcmFtIHtmdW5jdGlv
bihXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtKT19IGNhbGxiYWNrCiAgICAgICovCi0gICAgdHJh
bnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspIHsgfSwKLQotICAgIGZpbmlzaFRyYW5zZmVyOiBm
dW5jdGlvbigpIHsgfSwKKyAgICB3cml0ZTogZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2spIHsgfSwK
IAotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkgeyB9CisgICAgY2xvc2U6IGZ1bmN0aW9uKCkgeyB9
CiB9CiAKIC8qKgpAQCAtOTIsNyArODksNiBAQCBXZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVSZWFk
ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigp
OwogICAgICAgICB0aGlzLl9yZWFkZXIub25sb2FkID0gdGhpcy5fb25DaHVua0xvYWRlZC5iaW5k
KHRoaXMpOwogICAgICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IHRoaXMuX2RlbGVnYXRlLm9u
RXJyb3IuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgdGhpcyk7Ci0gICAgICAgIHRoaXMuX291dHB1dC5z
dGFydFRyYW5zZmVyKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJTdGFydGVk
KHRoaXMpOwogICAgICAgICB0aGlzLl9sb2FkQ2h1bmsoKTsKICAgICB9LApAQCAtMTMxLDcgKzEy
Nyw3IEBAIFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHZhciBkYXRhID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgICAgICAgdGhpcy5fbG9hZGVk
U2l6ZSArPSBkYXRhLmxlbmd0aDsKIAotICAgICAgICB0aGlzLl9vdXRwdXQudHJhbnNmZXJDaHVu
ayhkYXRhKTsKKyAgICAgICAgdGhpcy5fb3V0cHV0LndyaXRlKGRhdGEpOwogICAgICAgICBpZiAo
dGhpcy5faXNDYW5jZWxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhpcy5fZGVs
ZWdhdGUub25DaHVua1RyYW5zZmVycmVkKHRoaXMpOwpAQCAtMTM5LDcgKzEzNSw3IEBAIFdlYklu
c3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlz
Ll9sb2FkZWRTaXplID09PSB0aGlzLl9maWxlU2l6ZSkgewogICAgICAgICAgICAgdGhpcy5fZmls
ZSA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsOwotICAgICAgICAgICAg
dGhpcy5fb3V0cHV0LmZpbmlzaFRyYW5zZmVyKCk7CisgICAgICAgICAgICB0aGlzLl9vdXRwdXQu
Y2xvc2UoKTsKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0
aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTg1LDcgKzE4MSw2IEBA
IFdlYkluc3BlY3Rvci5DaHVua2VkWEhSUmVhZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5feGhyLm9uZXJyb3IgPSB0aGlzLl9kZWxlZ2F0ZS5vbkVycm9yLmJpbmQodGhpcy5fZGVsZWdh
dGUsIHRoaXMpOwogICAgICAgICB0aGlzLl94aHIuc2VuZChudWxsKTsKIAotICAgICAgICB0aGlz
Ll9vdXRwdXQuc3RhcnRUcmFuc2ZlcigpOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5z
ZmVyU3RhcnRlZCh0aGlzKTsKICAgICB9LAogCkBAIC0yMjYsNyArMjIxLDcgQEAgV2ViSW5zcGVj
dG9yLkNodW5rZWRYSFJSZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIHRoaXMuX2xvYWRlZFNpemUgKz0gZGF0YS5sZW5ndGg7Ci0gICAgICAgIHRoaXMu
X291dHB1dC50cmFuc2ZlckNodW5rKGRhdGEpOworICAgICAgICB0aGlzLl9vdXRwdXQud3JpdGUo
ZGF0YSk7CiAgICAgICAgIGlmICh0aGlzLl9pc0NhbmNlbGVkKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQodGhpcyk7CkBAIC0y
NDIsNyArMjM3LDcgQEAgV2ViSW5zcGVjdG9yLkNodW5rZWRYSFJSZWFkZXIucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAodGhpcy5faXNDYW5jZWxlZCkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICB0aGlzLl9vdXRwdXQuZmluaXNoVHJhbnNmZXIoKTsKKyAgICAgICAgdGhpcy5fb3V0
cHV0LmNsb3NlKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0
aGlzKTsKICAgICB9CiB9CkBAIC0yOTcsNjYgKzI5Miw2MyBAQCBXZWJJbnNwZWN0b3IuZmluZEJh
bGFuY2VkQ3VybHlCcmFja2V0cyA9IGZ1bmN0aW9uKHNvdXJjZSwgc3RhcnRJbmRleCwgbGFzdElu
ZGV4KQogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3Iu
T3V0cHV0U3RyZWFtfQotICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lCi0gKiBAcGFyYW0geyFX
ZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGV9IGRlbGVnYXRlCiAgKi8KLVdlYkluc3Bl
Y3Rvci5GaWxlT3V0cHV0U3RyZWFtID0gZnVuY3Rpb24oZmlsZU5hbWUsIGRlbGVnYXRlKQorV2Vi
SW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0gPSBmdW5jdGlvbigpCiB7Ci0gICAgdGhpcy5fZmls
ZU5hbWUgPSBmaWxlTmFtZTsKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogfQogCiBX
ZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAgLyoqCi0gICAg
ICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lCisgICAgICogQHBh
cmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbSwgc3RyaW5nPSl9IGNh
bGxiYWNrCiAgICAgICovCi0gICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rpb24oKQorICAgIG9wZW46
IGZ1bmN0aW9uKGZpbGVOYW1lLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5F
dmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9vblRyYW5zZmVyU3RhcnRlZCwgdGhpcyk7CisgICAg
ICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl93cml0ZUNhbGxiYWNrcyA9
IFtdOworICAgICAgICB0aGlzLl9maWxlTmFtZSA9IGZpbGVOYW1lOworICAgICAgICBmdW5jdGlv
biBjYWxsYmFja1dyYXBwZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIu
RXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVyKTsKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFu
YWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX29uQXBwZW5kRG9uZSwgdGhpcyk7
CisgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNw
ZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFn
ZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVyLCB0aGlzKTsKICAgICAgICAg
V2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fZmlsZU5hbWUsICIiLCB0cnVlKTsK
ICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICogQHBhcmFtIHtzdHJp
bmd9IGNodW5rCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEKKyAgICAgKiBAcGFyYW0ge2Z1
bmN0aW9uKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0pPX0gY2FsbGJhY2sKICAgICAgKi8KLSAg
ICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKLSAgICB7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5maWxlTWFuYWdlci5hcHBlbmQodGhpcy5fZmlsZU5hbWUsIGNodW5rKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgZmluaXNoVHJhbnNmZXI6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5yZW1v
dmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVu
ZGVkVG9VUkwsIHRoaXMuX29uQ2h1bmtUcmFuc2ZlcnJlZCwgdGhpcyk7Ci0gICAgICAgIHRoaXMu
X2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKLSAgICB9LAotCi0gICAgZGlzcG9z
ZTogZnVuY3Rpb24oKQorICAgIHdyaXRlOiBmdW5jdGlvbihkYXRhLCBjYWxsYmFjaykKICAgICB7
CisgICAgICAgIHRoaXMuX3dyaXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgICAgICBX
ZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYXBwZW5kKHRoaXMuX2ZpbGVOYW1lLCBkYXRhKTsKICAg
ICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50
Ci0gICAgICovCi0gICAgX29uVHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBj
bG9zZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09IHRoaXMu
X2ZpbGVOYW1lKQorICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlOworICAgICAgICBpZiAodGhp
cy5fd3JpdGVDYWxsYmFja3MubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRlZCh0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5h
Z2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX29uVHJhbnNmZXJTdGFydGVkLCB0aGlzKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRUb1VSTCwgdGhpcy5fb25DaHVu
a1RyYW5zZmVycmVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJl
bW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBw
ZW5kZWRUb1VSTCwgdGhpcy5fb25BcHBlbmREb25lLCB0aGlzKTsKICAgICB9LAogCiAgICAgLyoq
Ci0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CisgICAgICogQHBhcmFt
IHtFdmVudH0gZXZlbnQKICAgICAgKi8KLSAgICBfb25DaHVua1RyYW5zZmVycmVkOiBmdW5jdGlv
bihldmVudCkKKyAgICBfb25BcHBlbmREb25lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAg
ICAgIGlmIChldmVudC5kYXRhICE9PSB0aGlzLl9maWxlTmFtZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5zZmVycmVkKHRoaXMpOworICAg
ICAgICBpZiAoIXRoaXMuX3dyaXRlQ2FsbGJhY2tzLmxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KHRoaXMuX2Nsb3NlZCkKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIu
cmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5B
cHBlbmRlZFRvVVJMLCB0aGlzLl9vbkFwcGVuZERvbmUsIHRoaXMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX3dyaXRlQ2FsbGJh
Y2tzLnNoaWZ0KCk7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgICAgIGNhbGxiYWNr
KHRoaXMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKaW5kZXggZTRlNmYyMjVlOGUxYWJjZGQ4
Y2I0ZWZhZmE0NjMyOGQ5OGEyOTg2Ni4uODcyNTQ4MmE1YjMzMjQzZjdlMWM0NjJkNTc0YmI5YTNi
ODMwY2UwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3RMb2FkZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKQEAgLTM4LDEwICszOCw2IEBAIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIgPSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewotICAgIHN0YXJ0VHJhbnNmZXI6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgfSwKLQogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIHRoaXMuX3Jlc2V0KCk7CkBAIC01NCw3ICs1MCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zbmFwc2hvdCA9IHt9Owog
ICAgIH0sCiAKLSAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKQorICAgIGNsb3NlOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fanNvbikKICAgICAgICAgICAgIHRoaXMu
X3BhcnNlU3RyaW5nc0FycmF5KCk7CkBAIC0xMTcsNyArMTEzLDcgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtz
dHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmsp
CisgICAgd3JpdGU6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAgICAgICAgdGhpcy5fanNvbiAr
PSBjaHVuazsKICAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkgewpAQCAtMTI4LDggKzEyNCw2
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU25hcHNob3QgdG9rZW4gbm90IGZvdW5kIik7CiAg
ICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGljZShzbmFwc2hvdFRva2VuSW5k
ZXggKyBzbmFwc2hvdFRva2VuLmxlbmd0aCArIDEpOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUg
PSAicGFyc2Utc25hcHNob3QtaW5mbyI7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmso
IiIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2Ut
c25hcHNob3QtaW5mbyI6IHsKICAgICAgICAgICAgIHZhciBjbG9zaW5nQnJhY2tldEluZGV4ID0g
V2ViSW5zcGVjdG9yLmZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHModGhpcy5fanNvbik7CkBAIC0x
MzgsOCArMTMyLDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hvdCA9IC8qKiBAdHlwZSB7SGVh
cFNuYXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5fanNvbi5zbGljZSgwLCBjbG9zaW5n
QnJhY2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGlj
ZShjbG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gImZpbmQt
bm9kZXMiOwotICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKLSAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgImZpbmQtbm9kZXMiOiB7CiAgICAgICAg
ICAgICB2YXIgbm9kZXNUb2tlbiA9ICJcIm5vZGVzXCIiOwpAQCAtMTU1LDggKzE0Nyw2IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dGhpcy5fYXJyYXkgPSBuZXcgVWludDMyQXJyYXkobm9kZXNfbGVuZ3RoKTsKICAgICAgICAgICAg
IHRoaXMuX2FycmF5SW5kZXggPSAwOwogICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2Ut
bm9kZXMiOwotICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKLSAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgInBhcnNlLW5vZGVzIjogewogICAgICAg
ICAgICAgaWYgKHRoaXMuX3BhcnNlVWludEFycmF5KCkpCkBAIC0xNjQsOCArMTU0LDYgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0
aGlzLl9zbmFwc2hvdC5ub2RlcyA9IHRoaXMuX2FycmF5OwogICAgICAgICAgICAgdGhpcy5fc3Rh
dGUgPSAiZmluZC1lZGdlcyI7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9IG51bGw7Ci0gICAg
ICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1lZGdlcyI6IHsKICAgICAgICAgICAgIHZhciBlZGdl
c1Rva2VuID0gIlwiZWRnZXNcIiI7CkBAIC0xODEsOCArMTY5LDYgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9
IG5ldyBVaW50MzJBcnJheShlZGdlc19sZW5ndGgpOwogICAgICAgICAgICAgdGhpcy5fYXJyYXlJ
bmRleCA9IDA7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJwYXJzZS1lZGdlcyI7Ci0gICAg
ICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSAicGFyc2UtZWRnZXMiOiB7CiAgICAgICAgICAgICBpZiAodGhp
cy5fcGFyc2VVaW50QXJyYXkoKSkKQEAgLTE5MCw4ICsxNzYsNiBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90
LmVkZ2VzID0gdGhpcy5fYXJyYXk7CiAgICAgICAgICAgICB0aGlzLl9hcnJheSA9IG51bGw7CiAg
ICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJmaW5kLXN0cmluZ3MiOwotICAgICAgICAgICAgdGhp
cy50cmFuc2ZlckNodW5rKCIiKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgImZpbmQtc3RyaW5ncyI6IHsKICAgICAgICAgICAgIHZhciBzdHJpbmdzVG9rZW4g
PSAiXCJzdHJpbmdzXCIiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKaW5kZXggYTYzY2FhNzM1OGRjNTc2YmY1NWY3
MDlkN2VjMGI0NDUwNWQ0ZTI3NS4uMWIyNGJhMjBmNDdiMDcwMDg1ZTFkMDhhOTk4MzM5NGIwNGFh
MjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNjgsNyArMzY4LDYgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICBzdGFydFRyYW5zZmVyOiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTsKLSAgICAgICAg
dGhpcy5jYWxsTWV0aG9kKG51bGwsICJzdGFydFRyYW5zZmVyIik7CiAgICAgfSwKIAogICAgIGlz
U3RhcnRlZDogZnVuY3Rpb24oKQpAQCAtMzg3LDEyICszODYsMTIgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFy
YW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihj
aHVuaykKKyAgICB3cml0ZTogZnVuY3Rpb24oY2h1bmspCiAgICAgewotICAgICAgICB0aGlzLmNh
bGxNZXRob2QobnVsbCwgInRyYW5zZmVyQ2h1bmsiLCBjaHVuayk7CisgICAgICAgIHRoaXMuY2Fs
bE1ldGhvZChudWxsLCAid3JpdGUiLCBjaHVuayk7CiAgICAgfSwKIAotICAgIGZpbmlzaFRyYW5z
ZmVyOiBmdW5jdGlvbigpCisgICAgY2xvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZ1
bmN0aW9uIGJ1aWxkU25hcHNob3QoKQogICAgICAgICB7CkBAIC00MTEsNyArNDEwLDcgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdTbmFw
c2hvdENvbnN1bWVycyA9IFtdOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuY2FsbE1ldGhvZChi
dWlsZFNuYXBzaG90LmJpbmQodGhpcyksICJmaW5pc2hUcmFuc2ZlciIpOworICAgICAgICB0aGlz
LmNhbGxNZXRob2QoYnVpbGRTbmFwc2hvdC5iaW5kKHRoaXMpLCAiY2xvc2UiKTsKICAgICB9CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdFZpZXcuanMKaW5kZXggZDk4ZWE3NDI0MDU1MDIyYmIzOGZhY2NiNjA0NDBlN2Y2MWUx
ZDQ0NC4uMDFkZTc0NTZmNWU3ZTU3YmQ1YmMzNmU0NjI5NzU0OGViMWZjODIwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3Lmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmll
dy5qcwpAQCAtODEyLDcgKzgxMiw3IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlciA9
IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1aWQsIG1heEpTT2JqZWN0SWQpCiAgICAgV2ViSW5zcGVj
dG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRsZSwgdWlkKTsKICAgICB0aGlz
Lm1heEpTT2JqZWN0SWQgPSBtYXhKU09iamVjdElkOwogICAgIC8qKgotICAgICAqIEB0eXBlIHtX
ZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQorICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuRmls
ZU91dHB1dFN0cmVhbX0KICAgICAgKi8KICAgICB0aGlzLl9yZWNlaXZlciA9IG51bGw7CiAgICAg
LyoqCkBAIC04NTYsMTMgKzg1NiwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKCF0aGlzLl9yZWNlaXZlcikKLSAgICAgICAgICAgIHRoaXMuX3NldHVwV29ya2VyKCk7CiAg
ICAgICAgIHZhciBsb2FkZXJQcm94eSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdExvYWRlclByb3h5fSAqLyB0aGlzLl9yZWNlaXZlcjsKLQotICAgICAgICB0aGlzLl9udW1i
ZXJPZkNodW5rcyA9IDA7Ci0gICAgICAgIGlmICghbG9hZGVyUHJveHkuaXNTdGFydGVkKCkpIHsK
LSAgICAgICAgICAgIGxvYWRlclByb3h5LnN0YXJ0VHJhbnNmZXIoKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghbG9hZGVyUHJveHkpIHsKKyAgICAgICAgICAgIHRoaXMuX3NldHVwV29ya2VyKCk7
CisgICAgICAgICAgICBsb2FkZXJQcm94eSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdExvYWRlclByb3h5fSAqLyB0aGlzLl9yZWNlaXZlcjsKKyAgICAgICAgICAgIHRoaXMu
X251bWJlck9mQ2h1bmtzID0gMDsKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3Vi
dGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYiKTsKICAgICAgICAg
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IHRydWU7CiAgICAgICAgICAgICBQcm9maWxl
ckFnZW50LmdldFByb2ZpbGUodGhpcy5wcm9maWxlVHlwZSgpLmlkLCB0aGlzLnVpZCk7CkBAIC04
NzIsNyArODcxLDggQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9
IHsKIAogICAgIF9zZXR1cFdvcmtlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZnVuY3Rp
b24gc2V0UHJvZmlsZVdhaXQoZXZlbnQpIHsKKyAgICAgICAgZnVuY3Rpb24gc2V0UHJvZmlsZVdh
aXQoZXZlbnQpCisgICAgICAgIHsKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2Fp
dCA9IGV2ZW50LmRhdGE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyKCk7CkBAIC04ODUsNyArODg1LDcgQEAgV2ViSW5z
cGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICBkaXNwb3NlOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVjZWl2ZXIpCi0gICAgICAgICAgICB0
aGlzLl9yZWNlaXZlci5kaXNwb3NlKCk7CisgICAgICAgICAgICB0aGlzLl9yZWNlaXZlci5jbG9z
ZSgpOwogICAgICAgICBlbHNlIGlmICh0aGlzLl9zbmFwc2hvdFByb3h5KQogICAgICAgICAgICAg
dGhpcy5fc25hcHNob3RQcm94eS5kaXNwb3NlKCk7CiAgICAgfSwKQEAgLTkwOCw3ICs5MDgsMTMg
QEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlwZSA9IHsKICAgICB0cmFu
c2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKICAgICB7CiAgICAgICAgICsrdGhpcy5fbnVtYmVy
T2ZDaHVua3M7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnRyYW5zZmVyQ2h1bmsoY2h1bmspOwor
ICAgICAgICB0aGlzLl9yZWNlaXZlci53cml0ZShjaHVuaywgY2FsbGJhY2suYmluZCh0aGlzKSk7
CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhp
cy5fc2F2ZVN0YXR1c1VwZGF0ZSgrK3RoaXMuX3NhdmVkQ2h1bmtzKTsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzID09PSB0aGlzLl9zYXZlZENodW5rcykKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zbmFwc2hvdFJlY2VpdmVkKG51bGwpOworICAgICAgICB9CiAgICAg
fSwKIAogICAgIF9zbmFwc2hvdFJlY2VpdmVkOiBmdW5jdGlvbihzbmFwc2hvdFByb3h5KQpAQCAt
OTI3LDggKzkzMyw4IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICB0aGlzLl90b3RhbE51bWJlck9mQ2h1bmtzID0gdGhpcy5fbnVt
YmVyT2ZDaHVua3M7CiAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlBhcnNpbmdcdTIwMjYiKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zl
ckZpbmlzaGVkKQotICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXIuZmluaXNoVHJhbnNmZXIoKTsK
KyAgICAgICAgaWYgKCF0cmFuc2ZlckZpbmlzaGVkICYmIHRoaXMuX3JlY2VpdmVyKQorICAgICAg
ICAgICAgdGhpcy5fcmVjZWl2ZXIuY2xvc2UoKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC05NDUs
MjEgKzk1MSwxNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0g
ewogICAgICAqLwogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRo
aXMuX2ZpbGVOYW1lID0gdGhpcy5fZmlsZU5hbWUgfHwgIkhlYXAtIiArIG5ldyBEYXRlKCkudG9J
U084NjAxQ29tcGFjdCgpICsgIi5oZWFwc25hcHNob3QiOwotICAgICAgICB2YXIgZGVsZWdhdGUg
PSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZSh0aGlzKTsK
LSAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSB0aGlzLl9jcmVhdGVGaWxlV3JpdGVyKHRoaXMuX2Zp
bGVOYW1lLCBkZWxlZ2F0ZSk7CiAgICAgICAgIHRoaXMuX251bWJlck9mQ2h1bmtzID0gMDsKLSAg
ICAgICAgdGhpcy5fcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgKiBAcGFyYW0geyFzdHJpbmd9IGZpbGVOYW1lCi0gICAgICogQHBhcmFtIHshV2ViSW5z
cGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlfSBkZWxlZ2F0ZQotICAgICAqIEByZXR1cm4ge1dl
Ykluc3BlY3Rvci5PdXRwdXRTdHJlYW19Ci0gICAgICovCi0gICAgX2NyZWF0ZUZpbGVXcml0ZXI6
IGZ1bmN0aW9uKGZpbGVOYW1lLCBkZWxlZ2F0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0oZmlsZU5hbWUsIGRlbGVnYXRlKTsKKyAgICAg
ICAgZnVuY3Rpb24gb25PcGVuKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5fc2F2ZWRD
aHVua3MgPSAwOworICAgICAgICAgICAgdGhpcy5fc2F2ZVN0YXR1c1VwZGF0ZSgwKTsKKyAgICAg
ICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmlsZSh0aGlzLnByb2ZpbGVUeXBlKCkuaWQsIHRo
aXMudWlkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9maWxlTmFtZSA9IHRoaXMuX2ZpbGVO
YW1lIHx8ICJIZWFwLSIgKyBuZXcgRGF0ZSgpLnRvSVNPODYwMUNvbXBhY3QoKSArICIuaGVhcHNu
YXBzaG90IjsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZpbGVP
dXRwdXRTdHJlYW0oKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIub3Blbih0aGlzLl9maWxlTmFt
ZSwgb25PcGVuLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEwMzYsMzUgKzEw
MzcsMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZEZyb21GaWxlRGVsZWdhdGUucHJv
dG90eXBlID0gewogICAgICAgICB9CiAgICAgfQogfQotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZX0KLSAqLwot
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKHNu
YXBzaG90SGVhZGVyKQotewotICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyID0gc25hcHNob3RIZWFk
ZXI7Ci0gICAgdGhpcy5fc2F2ZWRDaHVua3MgPSAwOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90U2F2ZVRvRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKLSAgICBvblRyYW5zZmVyU3Rh
cnRlZDogZnVuY3Rpb24oc291cmNlKQotICAgIHsKLSAgICAgICAgdGhpcy5fc25hcHNob3RIZWFk
ZXIuX3NhdmVTdGF0dXNVcGRhdGUoMCk7Ci0gICAgICAgIFByb2ZpbGVyQWdlbnQuZ2V0UHJvZmls
ZSh0aGlzLl9zbmFwc2hvdEhlYWRlci5wcm9maWxlVHlwZSgpLmlkLCB0aGlzLl9zbmFwc2hvdEhl
YWRlci51aWQpOwotICAgIH0sCi0KLSAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVyLl9zYXZlU3RhdHVzVXBk
YXRlKCsrdGhpcy5fc2F2ZWRDaHVua3MpOwotICAgIH0sCi0KLSAgICBvblRyYW5zZmVyRmluaXNo
ZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NuYXBzaG90SGVhZGVy
Ll9zbmFwc2hvdFJlY2VpdmVkKG51bGwpOwotICAgIH0sCi0KLSAgICBvbkVycm9yOiBmdW5jdGlv
bihzb3VyY2UsIGV2ZW50KQotICAgIHsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKaW5kZXggNzRlNjM1YjJkMWE5
YmQzNWE3MjUwMGYzYWY3NTAwMGY0YmVkMmRkYy4uZTVlOWU5MWFhZDE4Mjk1ODRmYzdmOWNlMThh
Nzk0YjZkNjBlMGE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UaW1lbGluZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVNb2RlbC5qcwpAQCAtMTkzLDE5ICsxOTMsMjIgQEAgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3Bl
Y3Rvci5DaHVua2VkRmlsZVJlYWRlcihmaWxlLCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5U
cmFuc2ZlckNodW5rTGVuZ3RoQnl0ZXMsIGRlbGVnYXRlKTsKICAgICB9LAogCi0gICAgc2F2ZVRv
RmlsZTogZnVuY3Rpb24oKQorICAgIF9jcmVhdGVGaWxlV3JpdGVyOiBmdW5jdGlvbihmaWxlTmFt
ZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKLSAgICAg
ICAgdmFyIGZpbGVOYW1lID0gIlRpbWVsaW5lUmF3RGF0YS0iICsgbm93LnRvSVNPODYwMUNvbXBh
Y3QoKSArICIuanNvbiI7Ci0KLSAgICAgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1vZGVsV3JpdGVUb0ZpbGVEZWxlZ2F0ZSh0aGlzLl9yZWNvcmRzLCB3aW5kb3cu
bmF2aWdhdG9yLmFwcFZlcnNpb24pOwotICAgICAgICB2YXIgd3JpdGVyID0gdGhpcy5fY3JlYXRl
RmlsZVdyaXRlcihmaWxlTmFtZSwgZGVsZWdhdGUpOwotICAgICAgICB3cml0ZXIuc3RhcnRUcmFu
c2ZlcigpOworICAgICAgICB2YXIgc3RyZWFtID0gbmV3IFdlYkluc3BlY3Rvci5GaWxlT3V0cHV0
U3RyZWFtKCk7CisgICAgICAgIHN0cmVhbS5vcGVuKGZpbGVOYW1lLCBjYWxsYmFjayk7CiAgICAg
fSwKIAotICAgIF9jcmVhdGVGaWxlV3JpdGVyOiBmdW5jdGlvbihmaWxlTmFtZSwgZGVsZWdhdGUp
CisgICAgc2F2ZVRvRmlsZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbShmaWxlTmFtZSwgZGVsZWdhdGUpOworICAgICAg
ICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAgICAgdmFyIGZpbGVOYW1lID0gIlRpbWVsaW5l
UmF3RGF0YS0iICsgbm93LnRvSVNPODYwMUNvbXBhY3QoKSArICIuanNvbiI7CisgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHN0cmVhbSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNhdmVy
ID0gbmV3IFdlYkluc3BlY3Rvci5UaW1lbGluZVNhdmVyKHN0cmVhbSk7CisgICAgICAgICAgICBz
YXZlci5zYXZlKHRoaXMuX3JlY29yZHMsIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5fY3JlYXRlRmlsZVdyaXRlcihmaWxlTmFtZSwgY2FsbGJh
Y2suYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlvbigpCkBAIC0yNjIs
MjAgKzI2NSwxNCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbExvYWRlciA9IGZ1bmN0aW9u
KG1vZGVsLCByZWFkZXIsIHByb2dyZXNzKQogICAgIHRoaXMuX3JlYWRlciA9IHJlYWRlcjsKICAg
ICB0aGlzLl9wcm9ncmVzcyA9IHByb2dyZXNzOwogICAgIHRoaXMuX2J1ZmZlciA9ICIiOworICAg
IHRoaXMuX2ZpcnN0Q2h1bmsgPSB0cnVlOwogfQogCiBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bExvYWRlci5wcm90b3R5cGUgPSB7Ci0gICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fbW9kZWwucmVzZXQoKTsKLSAgICAgICAgdGhpcy5fZmlyc3RDaHVu
ayA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KICAgICAvKioKICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICB0cmFuc2ZlckNodW5rOiBmdW5j
dGlvbihjaHVuaykKKyAgICB3cml0ZTogZnVuY3Rpb24oY2h1bmspCiAgICAgewogICAgICAgICB2
YXIgZGF0YSA9IHRoaXMuX2J1ZmZlciArIGNodW5rOwogICAgICAgICB2YXIgbGFzdEluZGV4ID0g
MDsKQEAgLTMwOSw2ICszMDYsNyBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbExvYWRlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9maXJzdENodW5rKSB7CiAgICAgICAgICAg
ICB0aGlzLl92ZXJzaW9uID0gaXRlbXNbMF07CiAgICAgICAgICAgICB0aGlzLl9maXJzdENodW5r
ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9tb2RlbC5yZXNldCgpOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gU2tpcCAwLXRoIGVsZW1lbnQgLSBpdCBpcyBlaXRoZXIgdmVyc2lvbiBvciAw
LgpAQCAtMzE2LDkgKzMxNCw3IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsTG9hZGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX21vZGVsLl9hZGRSZWNvcmQoaXRlbXNbaV0p
OwogICAgIH0sCiAKLSAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24oKSB7IH0sCi0KLSAgICBk
aXNwb3NlOiBmdW5jdGlvbigpIHsgfQorICAgIGNsb3NlOiBmdW5jdGlvbigpIHsgfQogfQogCiAv
KioKQEAgLTM4MSwzNiArMzc3LDI4IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsTG9hZEZy
b21GaWxlRGVsZWdhdGUucHJvdG90eXBlID0gewogCiAvKioKICAqIEBjb25zdHJ1Y3RvcgotICog
QGltcGxlbWVudHMgV2ViSW5zcGVjdG9yLk91dHB1dFN0cmVhbURlbGVnYXRlCi0gKiBAcGFyYW0g
e0FycmF5fSByZWNvcmRzCi0gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbgogICovCi1XZWJJbnNw
ZWN0b3IuVGltZWxpbmVNb2RlbFdyaXRlVG9GaWxlRGVsZWdhdGUgPSBmdW5jdGlvbihyZWNvcmRz
LCB2ZXJzaW9uKQorV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIgPSBmdW5jdGlvbihzdHJlYW0p
CiB7Ci0gICAgdGhpcy5fcmVjb3JkcyA9IHJlY29yZHM7Ci0gICAgdGhpcy5fcmVjb3JkSW5kZXgg
PSAwOwotICAgIHRoaXMuX3Byb2xvZ3VlID0gIlsiICsgSlNPTi5zdHJpbmdpZnkobmV3IFN0cmlu
Zyh2ZXJzaW9uKSk7CisgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtOwogfQogCi1XZWJJbnNwZWN0
b3IuVGltZWxpbmVNb2RlbFdyaXRlVG9GaWxlRGVsZWdhdGUucHJvdG90eXBlID0gewotICAgIG9u
VHJhbnNmZXJTdGFydGVkOiBmdW5jdGlvbih3cml0ZXIpCitXZWJJbnNwZWN0b3IuVGltZWxpbmVT
YXZlci5wcm90b3R5cGUgPSB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVO
YW1lCisgICAgICogQHBhcmFtIHtBcnJheX0gcmVjb3JkcworICAgICAqIEBwYXJhbSB7c3RyaW5n
fSB2ZXJzaW9uCisgICAgICovCisgICAgc2F2ZTogZnVuY3Rpb24ocmVjb3JkcywgdmVyc2lvbikK
ICAgICB7Ci0gICAgICAgIHRoaXMuX3B1c2hDaHVuayh3cml0ZXIpOwotICAgIH0sCisgICAgICAg
IHRoaXMuX3JlY29yZHMgPSByZWNvcmRzOworICAgICAgICB0aGlzLl9yZWNvcmRJbmRleCA9IDA7
CisgICAgICAgIHRoaXMuX3Byb2xvZ3VlID0gIlsiICsgSlNPTi5zdHJpbmdpZnkodmVyc2lvbik7
CiAKLSAgICBvbkNodW5rVHJhbnNmZXJyZWQ6IGZ1bmN0aW9uKHdyaXRlcikKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9yZWNvcmRJbmRleCA9PT0gdGhpcy5fcmVjb3Jkcy5sZW5ndGgpCi0gICAg
ICAgICAgICB3cml0ZXIuZmluaXNoVHJhbnNmZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGhpcy5fcHVzaENodW5rKHdyaXRlcik7CisgICAgICAgIHRoaXMuX3dyaXRlTmV4dENodW5r
KHRoaXMuX3N0cmVhbSk7CiAgICAgfSwKIAotICAgIG9uVHJhbnNmZXJGaW5pc2hlZDogZnVuY3Rp
b24od3JpdGVyKSB7IH0sCi0KLSAgICBvbkVycm9yOiBmdW5jdGlvbih3cml0ZXIsIGV2ZW50KSB7
IH0sCi0KLSAgICBfcHVzaENodW5rOiBmdW5jdGlvbih3cml0ZXIpCisgICAgX3dyaXRlTmV4dENo
dW5rOiBmdW5jdGlvbihzdHJlYW0pCiAgICAgewogICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSAi
LFxuIjsKICAgICAgICAgdmFyIGRhdGEgPSBbXTsKQEAgLTQyMCw5ICs0MDgsMTMgQEAgV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTW9kZWxXcml0ZVRvRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGRhdGEucHVzaCh0aGlzLl9wcm9sb2d1ZSk7CiAgICAgICAgICAgICBsZW5ndGgg
Kz0gdGhpcy5fcHJvbG9ndWUubGVuZ3RoOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Byb2xv
Z3VlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9yZWNvcmRJbmRleCA9PT0gdGhpcy5fcmVjb3Jkcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICBzdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkYXRhLnB1c2goIiIpOwotCisgICAgICAgIH0KICAgICAgICAgd2hp
bGUgKHRoaXMuX3JlY29yZEluZGV4IDwgdGhpcy5fcmVjb3Jkcy5sZW5ndGgpIHsKICAgICAgICAg
ICAgIHZhciBpdGVtID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fcmVjb3Jkc1t0aGlzLl9yZWNvcmRJ
bmRleF0pOwogICAgICAgICAgICAgdmFyIGl0ZW1MZW5ndGggPSBpdGVtLmxlbmd0aCArIHNlcGFy
YXRvci5sZW5ndGg7CkBAIC00MzQsNiArNDI2LDYgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWxXcml0ZVRvRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgICAgICBp
ZiAodGhpcy5fcmVjb3JkSW5kZXggPT09IHRoaXMuX3JlY29yZHMubGVuZ3RoKQogICAgICAgICAg
ICAgZGF0YS5wdXNoKGRhdGEucG9wKCkgKyAiXSIpOwotICAgICAgICB3cml0ZXIudHJhbnNmZXJD
aHVuayhkYXRhLmpvaW4oc2VwYXJhdG9yKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShkYXRhLmpv
aW4oc2VwYXJhdG9yKSwgdGhpcy5fd3JpdGVOZXh0Q2h1bmsuYmluZCh0aGlzKSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGQxYjg3MzM0ZGY4MTE0NTNmZWQ0NGJjODE0OTBiYzY3MDVkNGYyM2IuLjg3MWVj
OTljODFhNTgxZTcwYTNlNTA1ZjdkN2UxZjlkYmE0ZTE5N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBA
QAorMjAxMi0wOS0yMCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFtyZWZhY3RvcmluZ10gc2ltcGxpZnkgaW50ZXJmYWNlIHRv
IEZpbGVPdXRwdXRTdHJlYW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk3MjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBhZGp1c3QgdGVzdHMgdG8gbmV3IEZpbGVPdXRwdXRTdHJlYW0gaW50ZXJmYWNl
OworCisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0
bWw6CisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLWxvYWQuaHRtbDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtdGVzdC5qczoKKyAgICAgICAgKGlu
aXRpYWxpemVfVGltZWxpbmUuSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVJlYWRlci5wcm90b3R5cGUu
c3RhcnQpOgorICAgICAgICAoaW5pdGlhbGl6ZV9UaW1lbGluZS5JbnNwZWN0b3JUZXN0LlN0cmlu
Z091dHB1dFN0cmVhbSk6CisgICAgICAgIChpbml0aWFsaXplX1RpbWVsaW5lLkluc3BlY3RvclRl
c3QuU3RyaW5nT3V0cHV0U3RyZWFtLnByb3RvdHlwZS53cml0ZSk6CisgICAgICAgIChpbml0aWFs
aXplX1RpbWVsaW5lLkluc3BlY3RvclRlc3QuU3RyaW5nT3V0cHV0U3RyZWFtLnByb3RvdHlwZS5j
bG9zZSk6CisgICAgICAgIChpbml0aWFsaXplX1RpbWVsaW5lKToKKwogMjAxMi0wOS0yMCAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gVW5yZXZp
ZXdlZCBnYXJkZW5pbmcuIFVuc2tpcCBmYXN0L2V4Y2x1c2lvbnMgdGVzdHMsIGJlY2F1c2UgdGhl
eSBwYXNzIG5vdy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9o
ZWFwLXNuYXBzaG90LWxvYWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKaW5kZXggNTY2MDQ0Mjg4Mzg2MDBmYjgyYzE0YjE5
OThkYzk1M2FhZjFiNmQzNS4uYTI1OGUxMDZiZGY4ODEyNWQ5M2IyZjc0M2I4NTMwMzdmYzVjZjYx
OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNo
b3QtbG9hZGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAt
c25hcHNob3QtbG9hZGVyLmh0bWwKQEAgLTIwLDEwICsyMCw5IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RMb2FkZXJUZXN0KG5leHQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExv
YWRlcigpOwotICAgICAgICAgICAgbG9hZGVyLnN0YXJ0VHJhbnNmZXIoKTsKICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlU3RyaW5naWZpZWQubGVuZ3RoOyBpIDwgbDsgaSAr
PSBwYXJ0U2l6ZSkKLSAgICAgICAgICAgICAgICBsb2FkZXIudHJhbnNmZXJDaHVuayhzb3VyY2VT
dHJpbmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKLSAgICAgICAgICAgIGxvYWRlci5m
aW5pc2hUcmFuc2ZlcigpOworICAgICAgICAgICAgICAgIGxvYWRlci53cml0ZShzb3VyY2VTdHJp
bmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKKyAgICAgICAgICAgIGxvYWRlci5jbG9z
ZSgpOwogICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGxvYWRlci5idWlsZFNuYXBzaG90KCk7CiAg
ICAgICAgICAgICByZXN1bHQuX25vZGVzID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdC5fbm9kZXMp
OwogICAgICAgICAgICAgcmVzdWx0Ll9jb250YWlubWVudEVkZ2VzID0gbmV3IFVpbnQzMkFycmF5
KHJlc3VsdC5fY29udGFpbm1lbnRFZGdlcyk7CkBAIC05NywxMSArOTYsMTAgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm92ZXJyaWRlKFdlYkluc3BlY3Rvci5I
ZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUsICdfY3JlYXRlRmlsZVJlYWRlcicsIGZ1bmN0aW9u
KGZpbGVNb2NrLCBkZWxlZ2F0ZSkgewogICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihyZWNlaXZlcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZWNlaXZlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY2VpdmVyLndyaXRlKHNvdXJjZVN0cmluZ2lmaWVkKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcnJlZCh0aGlzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmZpbmlzaFRyYW5zZmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZWNlaXZlci5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOwogICAgICAgICAgICAgICAgICAg
ICB9LAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUvdGltZWxp
bmUtbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLWxv
YWQuaHRtbAppbmRleCAzNGJhNzE3MDNhODU3ZmRiMDliNjkxNTJiOWI1YWU3NTVhYzlhOTE2Li5i
MjZlYmNkYzEyMjVhYzMwNzg1MmY2MWYxYjE4YjFmMGVmMmJmYzMyIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtbG9hZC5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1sb2FkLmh0bWwKQEAgLTE2LDkgKzE2
LDkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICByZXR1cm4gbmV3IEluc3BlY3RvclRl
c3QuRmFrZUZpbGVSZWFkZXIoaW5wdXQsIGRlbGVnYXRlLCBtb2RlbC5zYXZlVG9GaWxlLmJpbmQo
bW9kZWwpKTsKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbGVXcml0ZXIo
ZmlsZU5hbWUsIGRlbGVnYXRlKQorICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWxlV3JpdGVyKGZp
bGVOYW1lLCBjYWxsYmFjaykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnNw
ZWN0b3JUZXN0LkZha2VGaWxlV3JpdGVyKGRlbGVnYXRlLCBjaGVja1NhdmVEYXRhKTsKKyAgICAg
ICAgICAgIGNhbGxiYWNrKG5ldyBJbnNwZWN0b3JUZXN0LlN0cmluZ091dHB1dFN0cmVhbShjaGVj
a1NhdmVEYXRhKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBjaGVja1NhdmVEYXRh
KG91dHB1dCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS90aW1l
bGluZS10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRl
c3QuanMKaW5kZXggYWVmNGUyNjIwNzUwZTk3ZGY3ZjZjYTc5MzYwZTM0ZmNkYWYwMWNhNC4uYjFm
N2VmMDBkZmQ4Njg0ZmVjZjEyNTNkZWZhNjYxNmJkMGM0ZjAyOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRlc3QuanMKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRlc3QuanMKQEAgLTE2OCw3ICsxNjgsNiBA
QCBJbnNwZWN0b3JUZXN0LkZha2VGaWxlUmVhZGVyID0gZnVuY3Rpb24oaW5wdXQsIGRlbGVnYXRl
LCBjYWxsYmFjaykKIEluc3BlY3RvclRlc3QuRmFrZUZpbGVSZWFkZXIucHJvdG90eXBlID0gewog
ICAgIHN0YXJ0OiBmdW5jdGlvbihvdXRwdXQpCiAgICAgewotICAgICAgICBvdXRwdXQuc3RhcnRU
cmFuc2ZlcigpOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRlZCh0aGlz
KTsKIAogICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5faW5wdXQubGVuZ3RoOwpAQCAtMTc2LDE1
ICsxNzUsMTUgQEAgSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5faW5wdXQuc3Vic3RyaW5nKDAsIGhhbGYpOwogICAg
ICAgICB0aGlzLl9sb2FkZWRTaXplICs9IGNodW5rLmxlbmd0aDsKLSAgICAgICAgb3V0cHV0LnRy
YW5zZmVyQ2h1bmsoY2h1bmspOworICAgICAgICBvdXRwdXQud3JpdGUoY2h1bmspOwogICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQodGhpcyk7CiAKICAgICAgICAgY2h1
bmsgPSB0aGlzLl9pbnB1dC5zdWJzdHJpbmcoaGFsZik7CiAgICAgICAgIHRoaXMuX2xvYWRlZFNp
emUgKz0gY2h1bmsubGVuZ3RoOwotICAgICAgICBvdXRwdXQudHJhbnNmZXJDaHVuayhjaHVuayk7
CisgICAgICAgIG91dHB1dC53cml0ZShjaHVuayk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9u
Q2h1bmtUcmFuc2ZlcnJlZCh0aGlzKTsKIAotICAgICAgICBvdXRwdXQuZmluaXNoVHJhbnNmZXIo
KTsKKyAgICAgICAgb3V0cHV0LmNsb3NlKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJh
bnNmZXJGaW5pc2hlZCh0aGlzKTsKIAogICAgICAgICB0aGlzLl9jYWxsYmFjaygpOwpAQCAtMjA4
LDMyICsyMDcsMjQgQEAgSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7
CiAgICAgfQogfTsKIAotSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVdyaXRlciA9IGZ1bmN0aW9uKGRl
bGVnYXRlLCBjYWxsYmFjaykKK0luc3BlY3RvclRlc3QuU3RyaW5nT3V0cHV0U3RyZWFtID0gZnVu
Y3Rpb24oY2FsbGJhY2spCiB7Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKICAgICB0
aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIHRoaXMuX2J1ZmZlciA9ICIiOwogfTsKIAot
SW5zcGVjdG9yVGVzdC5GYWtlRmlsZVdyaXRlci5wcm90b3R5cGUgPSB7Ci0gICAgc3RhcnRUcmFu
c2ZlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUub25UcmFuc2Zl
clN0YXJ0ZWQodGhpcyk7Ci0gICAgfSwKLQotICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0aW9uKGNo
dW5rKQorSW5zcGVjdG9yVGVzdC5TdHJpbmdPdXRwdXRTdHJlYW0ucHJvdG90eXBlID0geworICAg
IHdyaXRlOiBmdW5jdGlvbihjaHVuaywgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0aGlzLl9i
dWZmZXIgKz0gY2h1bms7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcnJl
ZCh0aGlzKTsKKyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgY2FsbGJhY2sodGhp
cyk7CiAgICAgfSwKIAotICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCisgICAgY2xvc2U6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5p
c2hlZCh0aGlzKTsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sodGhpcy5fYnVmZmVyKTsKLSAgICB9
LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7IH0KKyAgICB9CiB9OwogCiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165094</attachid>
            <date>2012-09-21 02:35:44 -0700</date>
            <delta_ts>2012-09-21 03:14:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97226-20120921133507.patch</filename>
            <type>text/plain</type>
            <size>30323</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjhiYjNjOGVkMzIyYTg1
MjQwZTJkMWUzYjY2NTkwYzM4N2YzMTM0Mi4uY2FhM2NkZDNhYWE1MWFkZmJkOWJjMzM1Y2EwZmE5
NDFmNmU3YzY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA5LTIwICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogW3JlZmFjdG9yaW5nXSBzaW1wbGlmeSBpbnRlcmZhY2UgdG8gRmlsZU91dHB1dFN0cmVhbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTcyMjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGNoYW5nZSBP
dXRwdXRTdHJlYW0gaW50ZXJmYWNlIHRvIG1hdGNoIHRoYXQgb2Ygc3RyZWFtOworICAgICAgICAt
IGZpeCBPdXRwdXRTdHJlYW0gaW1wbGVtZW50YXRpb25zIChGaWxlT3V0cHV0U3RyZWFtIGFuZCB0
aG9zZSBpbiBoZWFwIHByb2ZpbGVyKTsKKyAgICAgICAgLSBmaXggdXNhZ2VzIGluIFRpbWVsaW5l
IGFuZCBIZWFwUHJvZmlsZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0ZpbGVV
dGlscy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0ucHJvdG90eXBlLndy
aXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0ucHJvdG90eXBlLmNsb3Nl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUuc3Rh
cnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRGaWxlUmVhZGVyLnByb3RvdHlwZS5f
b25DaHVua0xvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2h1bmtlZFhIUlJlYWRlci5w
cm90b3R5cGUuc3RhcnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNodW5rZWRYSFJSZWFkZXIu
cHJvdG90eXBlLl9vblByb2dyZXNzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaHVua2VkWEhS
UmVhZGVyLnByb3RvdHlwZS5fb25Mb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxlT3V0
cHV0U3RyZWFtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxlT3V0cHV0U3RyZWFtLnByb3Rv
dHlwZS5vcGVuLmNhbGxiYWNrV3JhcHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRmlsZU91
dHB1dFN0cmVhbS5wcm90b3R5cGUub3Blbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRmlsZU91
dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZpbGVP
dXRwdXRTdHJlYW0ucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GaWxl
T3V0cHV0U3RyZWFtLnByb3RvdHlwZS5fb25BcHBlbmREb25lKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdExvYWRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlLndyaXRlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZS5zdGFydFRyYW5zZmVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXJQcm94eS5wcm90b3R5cGUud3Jp
dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3Rv
dHlwZS5jbG9zZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUubG9hZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLl9zZXR1cFdvcmtl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmRp
c3Bvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3RvdHlw
ZS50cmFuc2ZlckNodW5rLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJv
ZmlsZUhlYWRlci5wcm90b3R5cGUudHJhbnNmZXJDaHVuayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLmZpbmlzaEhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlLnNhdmVUb0ZpbGUu
b25PcGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5
cGUuc2F2ZVRvRmlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1v
ZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLl9j
cmVhdGVGaWxlV3JpdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnBy
b3RvdHlwZS5zYXZlVG9GaWxlLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsLnByb3RvdHlwZS5zYXZlVG9GaWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
aW1lbGluZU1vZGVsTG9hZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVs
TG9hZGVyLnByb3RvdHlwZS53cml0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVN
b2RlbExvYWRlci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lU2F2ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIucHJvdG90eXBl
LnNhdmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lU2F2ZXIucHJvdG90eXBlLl93
cml0ZU5leHRDaHVuayk6CisKIDIwMTItMDktMjEgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUHJlcGFyZSBDYWxlbmRhclBpY2tlciBzbyB3ZSBjYW4gYWRk
IGFub3RoZXIgcGlja2VyLCBTdWdnZXRpb25QaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRmlsZVV0aWxzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9GaWxlVXRpbHMuanMKaW5kZXggNjViNDljYjkxMTM5N2RiOWFlNzMw
ODU0MzY1NDQ4NmE4NDA0MTQ5OC4uMjM2Y2UxZDAzZDNhM2VmMDdiZTY3NjVkMmM3MDI4Y2IxMWQ2
YjkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxl
VXRpbHMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9GaWxlVXRp
bHMuanMKQEAgLTUzLDE2ICs1MywxMyBAQCBXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtID0gZnVu
Y3Rpb24oKQogfQogCiBXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtLnByb3RvdHlwZSA9IHsKLSAg
ICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpIHsgfSwKLQogICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBjaHVuaworICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhCisgICAgICogQHBh
cmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtKT19IGNhbGxiYWNrCiAgICAg
ICovCi0gICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspIHsgfSwKLQotICAgIGZpbmlz
aFRyYW5zZmVyOiBmdW5jdGlvbigpIHsgfSwKKyAgICB3cml0ZTogZnVuY3Rpb24oZGF0YSwgY2Fs
bGJhY2spIHsgfSwKIAotICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkgeyB9CisgICAgY2xvc2U6IGZ1
bmN0aW9uKCkgeyB9CiB9CiAKIC8qKgpAQCAtOTIsNyArODksNiBAQCBXZWJJbnNwZWN0b3IuQ2h1
bmtlZEZpbGVSZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZWFkZXIgPSBuZXcg
RmlsZVJlYWRlcigpOwogICAgICAgICB0aGlzLl9yZWFkZXIub25sb2FkID0gdGhpcy5fb25DaHVu
a0xvYWRlZC5iaW5kKHRoaXMpOwogICAgICAgICB0aGlzLl9yZWFkZXIub25lcnJvciA9IHRoaXMu
X2RlbGVnYXRlLm9uRXJyb3IuYmluZCh0aGlzLl9kZWxlZ2F0ZSwgdGhpcyk7Ci0gICAgICAgIHRo
aXMuX291dHB1dC5zdGFydFRyYW5zZmVyKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJh
bnNmZXJTdGFydGVkKHRoaXMpOwogICAgICAgICB0aGlzLl9sb2FkQ2h1bmsoKTsKICAgICB9LApA
QCAtMTMxLDcgKzEyNyw3IEBAIFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHZhciBkYXRhID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKICAgICAgICAg
dGhpcy5fbG9hZGVkU2l6ZSArPSBkYXRhLmxlbmd0aDsKIAotICAgICAgICB0aGlzLl9vdXRwdXQu
dHJhbnNmZXJDaHVuayhkYXRhKTsKKyAgICAgICAgdGhpcy5fb3V0cHV0LndyaXRlKGRhdGEpOwog
ICAgICAgICBpZiAodGhpcy5faXNDYW5jZWxlZCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5zZmVycmVkKHRoaXMpOwpAQCAtMTM5LDcgKzEz
NSw3IEBAIFdlYkluc3BlY3Rvci5DaHVua2VkRmlsZVJlYWRlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIGlmICh0aGlzLl9sb2FkZWRTaXplID09PSB0aGlzLl9maWxlU2l6ZSkgewogICAgICAgICAg
ICAgdGhpcy5fZmlsZSA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsOwot
ICAgICAgICAgICAgdGhpcy5fb3V0cHV0LmZpbmlzaFRyYW5zZmVyKCk7CisgICAgICAgICAgICB0
aGlzLl9vdXRwdXQuY2xvc2UoKTsKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNm
ZXJGaW5pc2hlZCh0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTg1
LDcgKzE4MSw2IEBAIFdlYkluc3BlY3Rvci5DaHVua2VkWEhSUmVhZGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5feGhyLm9uZXJyb3IgPSB0aGlzLl9kZWxlZ2F0ZS5vbkVycm9yLmJpbmQo
dGhpcy5fZGVsZWdhdGUsIHRoaXMpOwogICAgICAgICB0aGlzLl94aHIuc2VuZChudWxsKTsKIAot
ICAgICAgICB0aGlzLl9vdXRwdXQuc3RhcnRUcmFuc2ZlcigpOwogICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS5vblRyYW5zZmVyU3RhcnRlZCh0aGlzKTsKICAgICB9LAogCkBAIC0yMjYsNyArMjIxLDcg
QEAgV2ViSW5zcGVjdG9yLkNodW5rZWRYSFJSZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2xvYWRlZFNpemUgKz0gZGF0YS5sZW5ndGg7Ci0g
ICAgICAgIHRoaXMuX291dHB1dC50cmFuc2ZlckNodW5rKGRhdGEpOworICAgICAgICB0aGlzLl9v
dXRwdXQud3JpdGUoZGF0YSk7CiAgICAgICAgIGlmICh0aGlzLl9pc0NhbmNlbGVkKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQo
dGhpcyk7CkBAIC0yNDIsNyArMjM3LDcgQEAgV2ViSW5zcGVjdG9yLkNodW5rZWRYSFJSZWFkZXIu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5faXNDYW5jZWxlZCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICB0aGlzLl9vdXRwdXQuZmluaXNoVHJhbnNmZXIoKTsKKyAgICAg
ICAgdGhpcy5fb3V0cHV0LmNsb3NlKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNm
ZXJGaW5pc2hlZCh0aGlzKTsKICAgICB9CiB9CkBAIC0yOTcsNjYgKzI5Miw2MyBAQCBXZWJJbnNw
ZWN0b3IuZmluZEJhbGFuY2VkQ3VybHlCcmFja2V0cyA9IGZ1bmN0aW9uKHNvdXJjZSwgc3RhcnRJ
bmRleCwgbGFzdEluZGV4KQogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBpbXBsZW1lbnRzIHtX
ZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQotICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lCi0g
KiBAcGFyYW0geyFXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGV9IGRlbGVnYXRlCiAg
Ki8KLVdlYkluc3BlY3Rvci5GaWxlT3V0cHV0U3RyZWFtID0gZnVuY3Rpb24oZmlsZU5hbWUsIGRl
bGVnYXRlKQorV2ViSW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0gPSBmdW5jdGlvbigpCiB7Ci0g
ICAgdGhpcy5fZmlsZU5hbWUgPSBmaWxlTmFtZTsKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVn
YXRlOwogfQogCiBXZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbS5wcm90b3R5cGUgPSB7CiAg
ICAgLyoqCi0gICAgICogQG92ZXJyaWRlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1l
CisgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbSwg
c3RyaW5nPSl9IGNhbGxiYWNrCiAgICAgICovCi0gICAgc3RhcnRUcmFuc2ZlcjogZnVuY3Rpb24o
KQorICAgIG9wZW46IGZ1bmN0aW9uKGZpbGVOYW1lLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAg
IFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5G
aWxlTWFuYWdlci5FdmVudFR5cGVzLlNhdmVkVVJMLCB0aGlzLl9vblRyYW5zZmVyU3RhcnRlZCwg
dGhpcyk7CisgICAgICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl93cml0
ZUNhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLl9maWxlTmFtZSA9IGZpbGVOYW1lOworICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFja1dyYXBwZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVyLCB0aGlzKTsK
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5GaWxlTWFuYWdlci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX29u
QXBwZW5kRG9uZSwgdGhpcyk7CisgICAgICAgICAgICBjYWxsYmFjayh0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5TYXZlZFVSTCwgY2FsbGJhY2tXcmFwcGVy
LCB0aGlzKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnNhdmUodGhpcy5fZmls
ZU5hbWUsICIiLCB0cnVlKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0g
ICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEK
KyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW0pPX0gY2Fs
bGJhY2sKICAgICAgKi8KLSAgICB0cmFuc2ZlckNodW5rOiBmdW5jdGlvbihjaHVuaykKLSAgICB7
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5maWxlTWFuYWdlci5hcHBlbmQodGhpcy5fZmlsZU5hbWUs
IGNodW5rKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0g
ICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rv
ci5maWxlTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaWxlTWFuYWdl
ci5FdmVudFR5cGVzLkFwcGVuZGVkVG9VUkwsIHRoaXMuX29uQ2h1bmtUcmFuc2ZlcnJlZCwgdGhp
cyk7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKLSAg
ICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKQorICAgIHdyaXRlOiBmdW5jdGlvbihkYXRh
LCBjYWxsYmFjaykKICAgICB7CisgICAgICAgIHRoaXMuX3dyaXRlQ2FsbGJhY2tzLnB1c2goY2Fs
bGJhY2spOworICAgICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFnZXIuYXBwZW5kKHRoaXMuX2Zp
bGVOYW1lLCBkYXRhKTsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuRXZlbnR9IGV2ZW50Ci0gICAgICovCi0gICAgX29uVHJhbnNmZXJTdGFydGVkOiBmdW5j
dGlvbihldmVudCkKKyAgICBjbG9zZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKGV2
ZW50LmRhdGEgIT09IHRoaXMuX2ZpbGVOYW1lKQorICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVl
OworICAgICAgICBpZiAodGhpcy5fd3JpdGVDYWxsYmFja3MubGVuZ3RoKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRlZCh0aGlzKTsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2ZWRVUkwsIHRoaXMuX29uVHJhbnNm
ZXJTdGFydGVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2VyLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRU
b1VSTCwgdGhpcy5fb25DaHVua1RyYW5zZmVycmVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmZpbGVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5h
Z2VyLkV2ZW50VHlwZXMuQXBwZW5kZWRUb1VSTCwgdGhpcy5fb25BcHBlbmREb25lLCB0aGlzKTsK
ICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2
ZW50CisgICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKICAgICAgKi8KLSAgICBfb25DaHVua1Ry
YW5zZmVycmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfb25BcHBlbmREb25lOiBmdW5jdGlvbihl
dmVudCkKICAgICB7CiAgICAgICAgIGlmIChldmVudC5kYXRhICE9PSB0aGlzLl9maWxlTmFtZSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUub25DaHVua1RyYW5z
ZmVycmVkKHRoaXMpOworICAgICAgICBpZiAoIXRoaXMuX3dyaXRlQ2FsbGJhY2tzLmxlbmd0aCkg
eworICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkKKyAgICAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuZmlsZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1h
bmFnZXIuRXZlbnRUeXBlcy5BcHBlbmRlZFRvVVJMLCB0aGlzLl9vbkFwcGVuZERvbmUsIHRoaXMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBjYWxsYmFjayA9
IHRoaXMuX3dyaXRlQ2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAg
ICAgICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90TG9hZGVyLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKaW5kZXgg
ZTRlNmYyMjVlOGUxYWJjZGQ4Y2I0ZWZhZmE0NjMyOGQ5OGEyOTg2Ni4uODcyNTQ4MmE1YjMzMjQz
ZjdlMWM0NjJkNTc0YmI5YTNiODMwY2UwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RMb2FkZXIuanMKQEAgLTM4LDEwICsz
OCw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIgPSBmdW5jdGlvbigpCiB9CiAK
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewotICAgIHN0YXJ0
VHJhbnNmZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfSwKLQogICAgIGRpc3Bvc2U6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc2V0KCk7CkBAIC01NCw3ICs1MCw3IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll9zbmFwc2hvdCA9IHt9OwogICAgIH0sCiAKLSAgICBmaW5pc2hUcmFuc2ZlcjogZnVuY3Rpb24o
KQorICAgIGNsb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fanNvbikK
ICAgICAgICAgICAgIHRoaXMuX3BhcnNlU3RyaW5nc0FycmF5KCk7CkBAIC0xMTcsNyArMTEzLDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgLyoq
CiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgdHJhbnNmZXJDaHVu
azogZnVuY3Rpb24oY2h1bmspCisgICAgd3JpdGU6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAg
ICAgICAgdGhpcy5fanNvbiArPSBjaHVuazsKICAgICAgICAgc3dpdGNoICh0aGlzLl9zdGF0ZSkg
ewpAQCAtMTI4LDggKzEyNCw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU25hcHNob3QgdG9r
ZW4gbm90IGZvdW5kIik7CiAgICAgICAgICAgICB0aGlzLl9qc29uID0gdGhpcy5fanNvbi5zbGlj
ZShzbmFwc2hvdFRva2VuSW5kZXggKyBzbmFwc2hvdFRva2VuLmxlbmd0aCArIDEpOwogICAgICAg
ICAgICAgdGhpcy5fc3RhdGUgPSAicGFyc2Utc25hcHNob3QtaW5mbyI7Ci0gICAgICAgICAgICB0
aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSAicGFyc2Utc25hcHNob3QtaW5mbyI6IHsKICAgICAgICAgICAgIHZhciBjbG9z
aW5nQnJhY2tldEluZGV4ID0gV2ViSW5zcGVjdG9yLmZpbmRCYWxhbmNlZEN1cmx5QnJhY2tldHMo
dGhpcy5fanNvbik7CkBAIC0xMzgsOCArMTMyLDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5zbmFwc2hv
dCA9IC8qKiBAdHlwZSB7SGVhcFNuYXBzaG90SGVhZGVyfSAqL0pTT04ucGFyc2UodGhpcy5fanNv
bi5zbGljZSgwLCBjbG9zaW5nQnJhY2tldEluZGV4KSk7CiAgICAgICAgICAgICB0aGlzLl9qc29u
ID0gdGhpcy5fanNvbi5zbGljZShjbG9zaW5nQnJhY2tldEluZGV4KTsKICAgICAgICAgICAgIHRo
aXMuX3N0YXRlID0gImZpbmQtbm9kZXMiOwotICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5r
KCIiKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgImZpbmQt
bm9kZXMiOiB7CiAgICAgICAgICAgICB2YXIgbm9kZXNUb2tlbiA9ICJcIm5vZGVzXCIiOwpAQCAt
MTU1LDggKzE0Nyw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RMb2FkZXIucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgdGhpcy5fYXJyYXkgPSBuZXcgVWludDMyQXJyYXkobm9kZXNfbGVu
Z3RoKTsKICAgICAgICAgICAgIHRoaXMuX2FycmF5SW5kZXggPSAwOwogICAgICAgICAgICAgdGhp
cy5fc3RhdGUgPSAicGFyc2Utbm9kZXMiOwotICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5r
KCIiKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgInBhcnNl
LW5vZGVzIjogewogICAgICAgICAgICAgaWYgKHRoaXMuX3BhcnNlVWludEFycmF5KCkpCkBAIC0x
NjQsOCArMTU0LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdC5ub2RlcyA9IHRoaXMuX2FycmF5OwogICAg
ICAgICAgICAgdGhpcy5fc3RhdGUgPSAiZmluZC1lZGdlcyI7CiAgICAgICAgICAgICB0aGlzLl9h
cnJheSA9IG51bGw7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAiZmluZC1lZGdlcyI6IHsKICAg
ICAgICAgICAgIHZhciBlZGdlc1Rva2VuID0gIlwiZWRnZXNcIiI7CkBAIC0xODEsOCArMTY5LDYg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB0aGlzLl9hcnJheSA9IG5ldyBVaW50MzJBcnJheShlZGdlc19sZW5ndGgpOwogICAgICAg
ICAgICAgdGhpcy5fYXJyYXlJbmRleCA9IDA7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJw
YXJzZS1lZGdlcyI7Ci0gICAgICAgICAgICB0aGlzLnRyYW5zZmVyQ2h1bmsoIiIpOwotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAicGFyc2UtZWRnZXMiOiB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5fcGFyc2VVaW50QXJyYXkoKSkKQEAgLTE5MCw4ICsxNzYsNiBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90TG9hZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMuX3NuYXBzaG90LmVkZ2VzID0gdGhpcy5fYXJyYXk7CiAgICAgICAgICAgICB0aGlz
Ll9hcnJheSA9IG51bGw7CiAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICJmaW5kLXN0cmluZ3Mi
OwotICAgICAgICAgICAgdGhpcy50cmFuc2ZlckNodW5rKCIiKTsKLSAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgImZpbmQtc3RyaW5ncyI6IHsKICAgICAgICAgICAg
IHZhciBzdHJpbmdzVG9rZW4gPSAiXCJzdHJpbmdzXCIiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKaW5kZXggYTYz
Y2FhNzM1OGRjNTc2YmY1NWY3MDlkN2VjMGI0NDUwNWQ0ZTI3NS4uMWIyNGJhMjBmNDdiMDcwMDg1
ZTFkMDhhOTk4MzM5NGIwNGFhMjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNjgsNyArMzY4LDYg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAg
ICBzdGFydFRyYW5zZmVyOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9zdGFydGVk
ID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5jYWxsTWV0aG9kKG51bGwsICJzdGFydFRyYW5zZmVyIik7
CiAgICAgfSwKIAogICAgIGlzU3RhcnRlZDogZnVuY3Rpb24oKQpAQCAtMzg3LDEyICszODYsMTIg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3RvdHlwZSA9IHsKICAg
ICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2h1bmsKICAgICAgKi8KLSAgICB0cmFuc2Zl
ckNodW5rOiBmdW5jdGlvbihjaHVuaykKKyAgICB3cml0ZTogZnVuY3Rpb24oY2h1bmspCiAgICAg
ewotICAgICAgICB0aGlzLmNhbGxNZXRob2QobnVsbCwgInRyYW5zZmVyQ2h1bmsiLCBjaHVuayk7
CisgICAgICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAid3JpdGUiLCBjaHVuayk7CiAgICAgfSwK
IAotICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCisgICAgY2xvc2U6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkU25hcHNob3QoKQogICAgICAgICB7CkBAIC00
MTEsNyArNDEwLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgICAg
IHRoaXMuX3BlbmRpbmdTbmFwc2hvdENvbnN1bWVycyA9IFtdOwogICAgICAgICB9Ci0gICAgICAg
IHRoaXMuY2FsbE1ldGhvZChidWlsZFNuYXBzaG90LmJpbmQodGhpcyksICJmaW5pc2hUcmFuc2Zl
ciIpOworICAgICAgICB0aGlzLmNhbGxNZXRob2QoYnVpbGRTbmFwc2hvdC5iaW5kKHRoaXMpLCAi
Y2xvc2UiKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKaW5kZXggZDk4ZWE3NDI0MDU1MDIyYmIz
OGZhY2NiNjA0NDBlN2Y2MWUxZDQ0NC4uMzVlZDc5Njc3ZTAxOWQxMTYzNDRhNzJmY2ZkZGJhMTlj
MDUwZjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3RWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90Vmlldy5qcwpAQCAtODEyLDcgKzgxMiw3IEBAIFdlYkluc3BlY3Rvci5I
ZWFwUHJvZmlsZUhlYWRlciA9IGZ1bmN0aW9uKHR5cGUsIHRpdGxlLCB1aWQsIG1heEpTT2JqZWN0
SWQpCiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVIZWFkZXIuY2FsbCh0aGlzLCB0eXBlLCB0aXRs
ZSwgdWlkKTsKICAgICB0aGlzLm1heEpTT2JqZWN0SWQgPSBtYXhKU09iamVjdElkOwogICAgIC8q
KgotICAgICAqIEB0eXBlIHtXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQorICAgICAqIEB0eXBl
IHtXZWJJbnNwZWN0b3IuRmlsZU91dHB1dFN0cmVhbX0KICAgICAgKi8KICAgICB0aGlzLl9yZWNl
aXZlciA9IG51bGw7CiAgICAgLyoqCkBAIC04NTYsMjMgKzg1NiwyMSBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFByb2ZpbGVIZWFkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCF0aGlzLl9yZWNlaXZlcikKLSAgICAgICAgICAgIHRoaXMu
X3NldHVwV29ya2VyKCk7Ci0gICAgICAgIHZhciBsb2FkZXJQcm94eSA9IC8qKiBAdHlwZSB7V2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRlclByb3h5fSAqLyB0aGlzLl9yZWNlaXZlcjsKLQog
ICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5rcyA9IDA7Ci0gICAgICAgIGlmICghbG9hZGVyUHJv
eHkuaXNTdGFydGVkKCkpIHsKLSAgICAgICAgICAgIGxvYWRlclByb3h5LnN0YXJ0VHJhbnNmZXIo
KTsKKyAgICAgICAgaWYgKCF0aGlzLl9yZWNlaXZlcikgeworICAgICAgICAgICAgdGhpcy5fc2V0
dXBXb3JrZXIoKTsKICAgICAgICAgICAgIHRoaXMuc2lkZWJhckVsZW1lbnQuc3VidGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvYWRpbmdcdTIwMjYiKTsKICAgICAgICAgICAgIHRoaXMu
c2lkZWJhckVsZW1lbnQud2FpdCA9IHRydWU7CiAgICAgICAgICAgICBQcm9maWxlckFnZW50Lmdl
dFByb2ZpbGUodGhpcy5wcm9maWxlVHlwZSgpLmlkLCB0aGlzLnVpZCk7CiAgICAgICAgIH0KKyAg
ICAgICAgdmFyIGxvYWRlclByb3h5ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90TG9hZGVyUHJveHl9ICovIHRoaXMuX3JlY2VpdmVyOwogICAgICAgICBsb2FkZXJQcm94eS5h
ZGRDb25zdW1lcihjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9zZXR1cFdvcmtlcjogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gc2V0UHJvZmlsZVdhaXQoZXZlbnQpIHsKKyAg
ICAgICAgZnVuY3Rpb24gc2V0UHJvZmlsZVdhaXQoZXZlbnQpCisgICAgICAgIHsKICAgICAgICAg
ICAgIHRoaXMuc2lkZWJhckVsZW1lbnQud2FpdCA9IGV2ZW50LmRhdGE7CiAgICAgICAgIH0KICAg
ICAgICAgdmFyIHdvcmtlciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90V29ya2VyKCk7
CkBAIC04ODUsNyArODgzLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3Rv
dHlwZSA9IHsKICAgICBkaXNwb3NlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhp
cy5fcmVjZWl2ZXIpCi0gICAgICAgICAgICB0aGlzLl9yZWNlaXZlci5kaXNwb3NlKCk7CisgICAg
ICAgICAgICB0aGlzLl9yZWNlaXZlci5jbG9zZSgpOwogICAgICAgICBlbHNlIGlmICh0aGlzLl9z
bmFwc2hvdFByb3h5KQogICAgICAgICAgICAgdGhpcy5fc25hcHNob3RQcm94eS5kaXNwb3NlKCk7
CiAgICAgfSwKQEAgLTkwOCwxMSArOTA2LDE4IEBAIFdlYkluc3BlY3Rvci5IZWFwUHJvZmlsZUhl
YWRlci5wcm90b3R5cGUgPSB7CiAgICAgdHJhbnNmZXJDaHVuazogZnVuY3Rpb24oY2h1bmspCiAg
ICAgewogICAgICAgICArK3RoaXMuX251bWJlck9mQ2h1bmtzOwotICAgICAgICB0aGlzLl9yZWNl
aXZlci50cmFuc2ZlckNodW5rKGNodW5rKTsKKyAgICAgICAgdGhpcy5fcmVjZWl2ZXIud3JpdGUo
Y2h1bmssIGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjaygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3NhdmVTdGF0dXNVcGRhdGUoKyt0aGlzLl9z
YXZlZENodW5rcyk7CisgICAgICAgICAgICBpZiAodGhpcy5fdG90YWxOdW1iZXJPZkNodW5rcyA9
PT0gdGhpcy5fc2F2ZWRDaHVua3MpCisgICAgICAgICAgICAgICAgdGhpcy5fc25hcHNob3RSZWNl
aXZlZChudWxsKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBfc25hcHNob3RSZWNlaXZlZDog
ZnVuY3Rpb24oc25hcHNob3RQcm94eSkKICAgICB7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyLmNs
b3NlKCk7CiAgICAgICAgIHRoaXMuX3JlY2VpdmVyID0gbnVsbDsKICAgICAgICAgaWYgKHNuYXBz
aG90UHJveHkpCiAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdFByb3h5ID0gc25hcHNob3RQcm94
eTsKQEAgLTkyNyw4ICs5MzIsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFByb2ZpbGVIZWFkZXIucHJv
dG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5fdG90YWxOdW1iZXJPZkNodW5rcyA9IHRo
aXMuX251bWJlck9mQ2h1bmtzOwogICAgICAgICB0aGlzLnNpZGViYXJFbGVtZW50LnN1YnRpdGxl
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQYXJzaW5nXHUyMDI2Iik7Ci0gICAgICAgIGlmICgh
dHJhbnNmZXJGaW5pc2hlZCkKLSAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVyLmZpbmlzaFRyYW5z
ZmVyKCk7CisgICAgICAgIGlmICghdHJhbnNmZXJGaW5pc2hlZCAmJiB0aGlzLl9yZWNlaXZlcikK
KyAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVyLmNsb3NlKCk7CiAgICAgfSwKIAogICAgIC8qKgpA
QCAtOTQ1LDIxICs5NTAsMTYgQEAgV2ViSW5zcGVjdG9yLkhlYXBQcm9maWxlSGVhZGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgKi8KICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICB0aGlzLl9maWxlTmFtZSA9IHRoaXMuX2ZpbGVOYW1lIHx8ICJIZWFwLSIgKyBuZXcgRGF0
ZSgpLnRvSVNPODYwMUNvbXBhY3QoKSArICIuaGVhcHNuYXBzaG90IjsKLSAgICAgICAgdmFyIGRl
bGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUo
dGhpcyk7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyID0gdGhpcy5fY3JlYXRlRmlsZVdyaXRlcih0
aGlzLl9maWxlTmFtZSwgZGVsZWdhdGUpOwogICAgICAgICB0aGlzLl9udW1iZXJPZkNodW5rcyA9
IDA7Ci0gICAgICAgIHRoaXMuX3JlY2VpdmVyLnN0YXJ0VHJhbnNmZXIoKTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHshc3RyaW5nfSBmaWxlTmFtZQotICAgICAqIEBwYXJhbSB7
IVdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZX0gZGVsZWdhdGUKLSAgICAgKiBAcmV0
dXJuIHtXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtfQotICAgICAqLwotICAgIF9jcmVhdGVGaWxl
V3JpdGVyOiBmdW5jdGlvbihmaWxlTmFtZSwgZGVsZWdhdGUpCi0gICAgewotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5GaWxlT3V0cHV0U3RyZWFtKGZpbGVOYW1lLCBkZWxlZ2F0ZSk7
CisgICAgICAgIGZ1bmN0aW9uIG9uT3BlbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
X3NhdmVkQ2h1bmtzID0gMDsKKyAgICAgICAgICAgIHRoaXMuX3NhdmVTdGF0dXNVcGRhdGUoMCk7
CisgICAgICAgICAgICBQcm9maWxlckFnZW50LmdldFByb2ZpbGUodGhpcy5wcm9maWxlVHlwZSgp
LmlkLCB0aGlzLnVpZCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZmlsZU5hbWUgPSB0aGlz
Ll9maWxlTmFtZSB8fCAiSGVhcC0iICsgbmV3IERhdGUoKS50b0lTTzg2MDFDb21wYWN0KCkgKyAi
LmhlYXBzbmFwc2hvdCI7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyID0gbmV3IFdlYkluc3BlY3Rv
ci5GaWxlT3V0cHV0U3RyZWFtKCk7CisgICAgICAgIHRoaXMuX3JlY2VpdmVyLm9wZW4odGhpcy5f
ZmlsZU5hbWUsIG9uT3Blbi5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xMDM2
LDM1ICsxMDM2LDMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdExvYWRGcm9tRmlsZURlbGVn
YXRlLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0KIH0KLQotLyoqCi0gKiBAY29uc3Ry
dWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuT3V0cHV0U3RyZWFtRGVsZWdhdGV9
Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTYXZlVG9GaWxlRGVsZWdhdGUgPSBmdW5j
dGlvbihzbmFwc2hvdEhlYWRlcikKLXsKLSAgICB0aGlzLl9zbmFwc2hvdEhlYWRlciA9IHNuYXBz
aG90SGVhZGVyOwotICAgIHRoaXMuX3NhdmVkQ2h1bmtzID0gMDsKLX0KLQotV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFNhdmVUb0ZpbGVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7Ci0gICAgb25UcmFu
c2ZlclN0YXJ0ZWQ6IGZ1bmN0aW9uKHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NuYXBz
aG90SGVhZGVyLl9zYXZlU3RhdHVzVXBkYXRlKDApOwotICAgICAgICBQcm9maWxlckFnZW50Lmdl
dFByb2ZpbGUodGhpcy5fc25hcHNob3RIZWFkZXIucHJvZmlsZVR5cGUoKS5pZCwgdGhpcy5fc25h
cHNob3RIZWFkZXIudWlkKTsKLSAgICB9LAotCi0gICAgb25DaHVua1RyYW5zZmVycmVkOiBmdW5j
dGlvbihzb3VyY2UpCi0gICAgewotICAgICAgICB0aGlzLl9zbmFwc2hvdEhlYWRlci5fc2F2ZVN0
YXR1c1VwZGF0ZSgrK3RoaXMuX3NhdmVkQ2h1bmtzKTsKLSAgICB9LAotCi0gICAgb25UcmFuc2Zl
ckZpbmlzaGVkOiBmdW5jdGlvbihzb3VyY2UpCi0gICAgewotICAgICAgICB0aGlzLl9zbmFwc2hv
dEhlYWRlci5fc25hcHNob3RSZWNlaXZlZChudWxsKTsKLSAgICB9LAotCi0gICAgb25FcnJvcjog
ZnVuY3Rpb24oc291cmNlLCBldmVudCkKLSAgICB7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCmluZGV4IDc0ZTYz
NWIyZDFhOWJkMzVhNzI1MDBmM2FmNzUwMDBmNGJlZDJkZGMuLmU1ZTllOTFhYWQxODI5NTg0ZmM3
ZjljZTE4YTc5NGI2ZDYwZTBhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKQEAgLTE5MywxOSArMTkzLDIyIEBAIFdlYklu
c3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuQ2h1bmtlZEZpbGVSZWFkZXIoZmlsZSwgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TW9kZWwuVHJhbnNmZXJDaHVua0xlbmd0aEJ5dGVzLCBkZWxlZ2F0ZSk7CiAgICAgfSwKIAotICAg
IHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKKyAgICBfY3JlYXRlRmlsZVdyaXRlcjogZnVuY3Rpb24o
ZmlsZU5hbWUsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7
Ci0gICAgICAgIHZhciBmaWxlTmFtZSA9ICJUaW1lbGluZVJhd0RhdGEtIiArIG5vdy50b0lTTzg2
MDFDb21wYWN0KCkgKyAiLmpzb24iOwotCi0gICAgICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJ
bnNwZWN0b3IuVGltZWxpbmVNb2RlbFdyaXRlVG9GaWxlRGVsZWdhdGUodGhpcy5fcmVjb3Jkcywg
d2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uKTsKLSAgICAgICAgdmFyIHdyaXRlciA9IHRoaXMu
X2NyZWF0ZUZpbGVXcml0ZXIoZmlsZU5hbWUsIGRlbGVnYXRlKTsKLSAgICAgICAgd3JpdGVyLnN0
YXJ0VHJhbnNmZXIoKTsKKyAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBXZWJJbnNwZWN0b3IuRmls
ZU91dHB1dFN0cmVhbSgpOworICAgICAgICBzdHJlYW0ub3BlbihmaWxlTmFtZSwgY2FsbGJhY2sp
OwogICAgIH0sCiAKLSAgICBfY3JlYXRlRmlsZVdyaXRlcjogZnVuY3Rpb24oZmlsZU5hbWUsIGRl
bGVnYXRlKQorICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLkZpbGVPdXRwdXRTdHJlYW0oZmlsZU5hbWUsIGRlbGVnYXRlKTsK
KyAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CisgICAgICAgIHZhciBmaWxlTmFtZSA9ICJU
aW1lbGluZVJhd0RhdGEtIiArIG5vdy50b0lTTzg2MDFDb21wYWN0KCkgKyAiLmpzb24iOworICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHJlYW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBzYXZlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGltZWxpbmVTYXZlcihzdHJlYW0pOworICAgICAg
ICAgICAgc2F2ZXIuc2F2ZSh0aGlzLl9yZWNvcmRzLCB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNp
b24pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NyZWF0ZUZpbGVXcml0ZXIoZmlsZU5hbWUs
IGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICByZXNldDogZnVuY3Rpb24oKQpA
QCAtMjYyLDIwICsyNjUsMTQgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWxMb2FkZXIgPSBm
dW5jdGlvbihtb2RlbCwgcmVhZGVyLCBwcm9ncmVzcykKICAgICB0aGlzLl9yZWFkZXIgPSByZWFk
ZXI7CiAgICAgdGhpcy5fcHJvZ3Jlc3MgPSBwcm9ncmVzczsKICAgICB0aGlzLl9idWZmZXIgPSAi
IjsKKyAgICB0aGlzLl9maXJzdENodW5rID0gdHJ1ZTsKIH0KIAogV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTW9kZWxMb2FkZXIucHJvdG90eXBlID0gewotICAgIHN0YXJ0VHJhbnNmZXI6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21vZGVsLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX2Zp
cnN0Q2h1bmsgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCiAgICAgLyoq
CiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNodW5rCiAgICAgICovCi0gICAgdHJhbnNmZXJDaHVu
azogZnVuY3Rpb24oY2h1bmspCisgICAgd3JpdGU6IGZ1bmN0aW9uKGNodW5rKQogICAgIHsKICAg
ICAgICAgdmFyIGRhdGEgPSB0aGlzLl9idWZmZXIgKyBjaHVuazsKICAgICAgICAgdmFyIGxhc3RJ
bmRleCA9IDA7CkBAIC0zMDksNiArMzA2LDcgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWxM
b2FkZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fZmlyc3RDaHVuaykgewogICAg
ICAgICAgICAgdGhpcy5fdmVyc2lvbiA9IGl0ZW1zWzBdOwogICAgICAgICAgICAgdGhpcy5fZmly
c3RDaHVuayA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fbW9kZWwucmVzZXQoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFNraXAgMC10aCBlbGVtZW50IC0gaXQgaXMgZWl0aGVyIHZlcnNp
b24gb3IgMC4KQEAgLTMxNiw5ICszMTQsNyBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbExv
YWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9tb2RlbC5fYWRkUmVjb3JkKGl0
ZW1zW2ldKTsKICAgICB9LAogCi0gICAgZmluaXNoVHJhbnNmZXI6IGZ1bmN0aW9uKCkgeyB9LAot
Ci0gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7IH0KKyAgICBjbG9zZTogZnVuY3Rpb24oKSB7IH0K
IH0KIAogLyoqCkBAIC0zODEsMzYgKzM3NywyOCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bExvYWRGcm9tRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0
b3IKLSAqIEBpbXBsZW1lbnRzIFdlYkluc3BlY3Rvci5PdXRwdXRTdHJlYW1EZWxlZ2F0ZQotICog
QHBhcmFtIHtBcnJheX0gcmVjb3JkcwotICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24KICAqLwot
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWxXcml0ZVRvRmlsZURlbGVnYXRlID0gZnVuY3Rpb24o
cmVjb3JkcywgdmVyc2lvbikKK1dlYkluc3BlY3Rvci5UaW1lbGluZVNhdmVyID0gZnVuY3Rpb24o
c3RyZWFtKQogewotICAgIHRoaXMuX3JlY29yZHMgPSByZWNvcmRzOwotICAgIHRoaXMuX3JlY29y
ZEluZGV4ID0gMDsKLSAgICB0aGlzLl9wcm9sb2d1ZSA9ICJbIiArIEpTT04uc3RyaW5naWZ5KG5l
dyBTdHJpbmcodmVyc2lvbikpOworICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTsKIH0KIAotV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lTW9kZWxXcml0ZVRvRmlsZURlbGVnYXRlLnByb3RvdHlwZSA9IHsK
LSAgICBvblRyYW5zZmVyU3RhcnRlZDogZnVuY3Rpb24od3JpdGVyKQorV2ViSW5zcGVjdG9yLlRp
bWVsaW5lU2F2ZXIucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBmaWxlTmFtZQorICAgICAqIEBwYXJhbSB7QXJyYXl9IHJlY29yZHMKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gdmVyc2lvbgorICAgICAqLworICAgIHNhdmU6IGZ1bmN0aW9uKHJlY29yZHMsIHZl
cnNpb24pCiAgICAgewotICAgICAgICB0aGlzLl9wdXNoQ2h1bmsod3JpdGVyKTsKLSAgICB9LAor
ICAgICAgICB0aGlzLl9yZWNvcmRzID0gcmVjb3JkczsKKyAgICAgICAgdGhpcy5fcmVjb3JkSW5k
ZXggPSAwOworICAgICAgICB0aGlzLl9wcm9sb2d1ZSA9ICJbIiArIEpTT04uc3RyaW5naWZ5KHZl
cnNpb24pOwogCi0gICAgb25DaHVua1RyYW5zZmVycmVkOiBmdW5jdGlvbih3cml0ZXIpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5fcmVjb3JkSW5kZXggPT09IHRoaXMuX3JlY29yZHMubGVuZ3Ro
KQotICAgICAgICAgICAgd3JpdGVyLmZpbmlzaFRyYW5zZmVyKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRoaXMuX3B1c2hDaHVuayh3cml0ZXIpOworICAgICAgICB0aGlzLl93cml0ZU5l
eHRDaHVuayh0aGlzLl9zdHJlYW0pOwogICAgIH0sCiAKLSAgICBvblRyYW5zZmVyRmluaXNoZWQ6
IGZ1bmN0aW9uKHdyaXRlcikgeyB9LAotCi0gICAgb25FcnJvcjogZnVuY3Rpb24od3JpdGVyLCBl
dmVudCkgeyB9LAotCi0gICAgX3B1c2hDaHVuazogZnVuY3Rpb24od3JpdGVyKQorICAgIF93cml0
ZU5leHRDaHVuazogZnVuY3Rpb24oc3RyZWFtKQogICAgIHsKICAgICAgICAgY29uc3Qgc2VwYXJh
dG9yID0gIixcbiI7CiAgICAgICAgIHZhciBkYXRhID0gW107CkBAIC00MjAsOSArNDA4LDEzIEBA
IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsV3JpdGVUb0ZpbGVEZWxlZ2F0ZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBkYXRhLnB1c2godGhpcy5fcHJvbG9ndWUpOwogICAgICAgICAgICAg
bGVuZ3RoICs9IHRoaXMuX3Byb2xvZ3VlLmxlbmd0aDsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9wcm9sb2d1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fcmVjb3JkSW5kZXggPT09IHRoaXMuX3JlY29yZHMubGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGF0YS5wdXNoKCIiKTsKLQorICAgICAgICB9CiAgICAg
ICAgIHdoaWxlICh0aGlzLl9yZWNvcmRJbmRleCA8IHRoaXMuX3JlY29yZHMubGVuZ3RoKSB7CiAg
ICAgICAgICAgICB2YXIgaXRlbSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3JlY29yZHNbdGhpcy5f
cmVjb3JkSW5kZXhdKTsKICAgICAgICAgICAgIHZhciBpdGVtTGVuZ3RoID0gaXRlbS5sZW5ndGgg
KyBzZXBhcmF0b3IubGVuZ3RoOwpAQCAtNDM0LDYgKzQyNiw2IEBAIFdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsV3JpdGVUb0ZpbGVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHRoaXMuX3JlY29yZEluZGV4ID09PSB0aGlzLl9yZWNvcmRzLmxlbmd0aCkKICAg
ICAgICAgICAgIGRhdGEucHVzaChkYXRhLnBvcCgpICsgIl0iKTsKLSAgICAgICAgd3JpdGVyLnRy
YW5zZmVyQ2h1bmsoZGF0YS5qb2luKHNlcGFyYXRvcikpOworICAgICAgICBzdHJlYW0ud3JpdGUo
ZGF0YS5qb2luKHNlcGFyYXRvciksIHRoaXMuX3dyaXRlTmV4dENodW5rLmJpbmQodGhpcykpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCAzMzkxNTczYmQ2M2U4MzVmNjVjMjIzNmEzZWE4ZWZhOTViZGUzMDY4
Li4wYTg2MTA3M2E5NGZkMGYzNGUwOTBkZjk5ZjQ0MDhlYTgxZTBkODlkIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTItMDktMjAgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbcmVmYWN0b3JpbmddIHNpbXBsaWZ5IGludGVy
ZmFjZSB0byBGaWxlT3V0cHV0U3RyZWFtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NzIyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gYWRqdXN0IHRlc3RzIHRvIG5ldyBGaWxlT3V0cHV0U3RyZWFtIGlu
dGVyZmFjZTsKKworICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWxv
YWRlci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1sb2FkLmh0
bWw6CisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRlc3QuanM6CisgICAg
ICAgIChpbml0aWFsaXplX1RpbWVsaW5lLkluc3BlY3RvclRlc3QuRmFrZUZpbGVSZWFkZXIucHJv
dG90eXBlLnN0YXJ0KToKKyAgICAgICAgKGluaXRpYWxpemVfVGltZWxpbmUuSW5zcGVjdG9yVGVz
dC5TdHJpbmdPdXRwdXRTdHJlYW0pOgorICAgICAgICAoaW5pdGlhbGl6ZV9UaW1lbGluZS5JbnNw
ZWN0b3JUZXN0LlN0cmluZ091dHB1dFN0cmVhbS5wcm90b3R5cGUud3JpdGUpOgorICAgICAgICAo
aW5pdGlhbGl6ZV9UaW1lbGluZS5JbnNwZWN0b3JUZXN0LlN0cmluZ091dHB1dFN0cmVhbS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoaW5pdGlhbGl6ZV9UaW1lbGluZSk6CisKIDIwMTItMDkt
MjEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gQ2hhbmdlZCBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9oZWJyZXctc2VsZWN0aW9u
Lmh0bWwgZXhwZWN0YXRpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9m
aWxlci9oZWFwLXNuYXBzaG90LWxvYWRlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3By
b2ZpbGVyL2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKaW5kZXggNTY2MDQ0Mjg4Mzg2MDBmYjgy
YzE0YjE5OThkYzk1M2FhZjFiNmQzNS4uYTI1OGUxMDZiZGY4ODEyNWQ5M2IyZjc0M2I4NTMwMzdm
YzVjZjYxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAt
c25hcHNob3QtbG9hZGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVy
L2hlYXAtc25hcHNob3QtbG9hZGVyLmh0bWwKQEAgLTIwLDEwICsyMCw5IEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RMb2FkZXJUZXN0KG5leHQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdExvYWRlcigpOwotICAgICAgICAgICAgbG9hZGVyLnN0YXJ0VHJhbnNmZXIoKTsKICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc291cmNlU3RyaW5naWZpZWQubGVuZ3RoOyBpIDwg
bDsgaSArPSBwYXJ0U2l6ZSkKLSAgICAgICAgICAgICAgICBsb2FkZXIudHJhbnNmZXJDaHVuayhz
b3VyY2VTdHJpbmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKLSAgICAgICAgICAgIGxv
YWRlci5maW5pc2hUcmFuc2ZlcigpOworICAgICAgICAgICAgICAgIGxvYWRlci53cml0ZShzb3Vy
Y2VTdHJpbmdpZmllZC5zbGljZShpLCBpICsgcGFydFNpemUpKTsKKyAgICAgICAgICAgIGxvYWRl
ci5jbG9zZSgpOwogICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGxvYWRlci5idWlsZFNuYXBzaG90
KCk7CiAgICAgICAgICAgICByZXN1bHQuX25vZGVzID0gbmV3IFVpbnQzMkFycmF5KHJlc3VsdC5f
bm9kZXMpOwogICAgICAgICAgICAgcmVzdWx0Ll9jb250YWlubWVudEVkZ2VzID0gbmV3IFVpbnQz
MkFycmF5KHJlc3VsdC5fY29udGFpbm1lbnRFZGdlcyk7CkBAIC05NywxMSArOTYsMTAgQEAgZnVu
Y3Rpb24gdGVzdCgpCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm92ZXJyaWRlKFdlYkluc3Bl
Y3Rvci5IZWFwUHJvZmlsZUhlYWRlci5wcm90b3R5cGUsICdfY3JlYXRlRmlsZVJlYWRlcicsIGZ1
bmN0aW9uKGZpbGVNb2NrLCBkZWxlZ2F0ZSkgewogICAgICAgICAgICAgICAgIHJldHVybiB7CiAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbihyZWNlaXZlcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjZWl2ZXIuc3RhcnRUcmFuc2ZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZWdhdGUub25UcmFuc2ZlclN0YXJ0ZWQodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZWNlaXZlci50cmFuc2ZlckNodW5rKHNvdXJjZVN0cmluZ2lmaWVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLndyaXRlKHNvdXJjZVN0cmluZ2lmaWVkKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlLm9uQ2h1bmtUcmFuc2ZlcnJlZCh0aGlz
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmZpbmlzaFRyYW5zZmVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5jbG9zZSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZWdhdGUub25UcmFuc2ZlckZpbmlzaGVkKHRoaXMpOwogICAgICAgICAgICAg
ICAgICAgICB9LAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUv
dGltZWxpbmUtbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVs
aW5lLWxvYWQuaHRtbAppbmRleCAzNGJhNzE3MDNhODU3ZmRiMDliNjkxNTJiOWI1YWU3NTVhYzlh
OTE2Li5iMjZlYmNkYzEyMjVhYzMwNzg1MmY2MWYxYjE4YjFmMGVmMmJmYzMyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtbG9hZC5odG1sCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS90aW1lbGluZS1sb2FkLmh0bWwKQEAgLTE2
LDkgKzE2LDkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICByZXR1cm4gbmV3IEluc3Bl
Y3RvclRlc3QuRmFrZUZpbGVSZWFkZXIoaW5wdXQsIGRlbGVnYXRlLCBtb2RlbC5zYXZlVG9GaWxl
LmJpbmQobW9kZWwpKTsKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbGVX
cml0ZXIoZmlsZU5hbWUsIGRlbGVnYXRlKQorICAgICAgICBmdW5jdGlvbiBjcmVhdGVGaWxlV3Jp
dGVyKGZpbGVOYW1lLCBjYWxsYmFjaykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5l
dyBJbnNwZWN0b3JUZXN0LkZha2VGaWxlV3JpdGVyKGRlbGVnYXRlLCBjaGVja1NhdmVEYXRhKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBJbnNwZWN0b3JUZXN0LlN0cmluZ091dHB1dFN0cmVh
bShjaGVja1NhdmVEYXRhKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBjaGVja1Nh
dmVEYXRhKG91dHB1dCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGlu
ZS90aW1lbGluZS10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVs
aW5lLXRlc3QuanMKaW5kZXggYWVmNGUyNjIwNzUwZTk3ZGY3ZjZjYTc5MzYwZTM0ZmNkYWYwMWNh
NC4uYjFmN2VmMDBkZmQ4Njg0ZmVjZjEyNTNkZWZhNjYxNmJkMGM0ZjAyOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRlc3QuanMKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lL3RpbWVsaW5lLXRlc3QuanMKQEAgLTE2OCw3ICsx
NjgsNiBAQCBJbnNwZWN0b3JUZXN0LkZha2VGaWxlUmVhZGVyID0gZnVuY3Rpb24oaW5wdXQsIGRl
bGVnYXRlLCBjYWxsYmFjaykKIEluc3BlY3RvclRlc3QuRmFrZUZpbGVSZWFkZXIucHJvdG90eXBl
ID0gewogICAgIHN0YXJ0OiBmdW5jdGlvbihvdXRwdXQpCiAgICAgewotICAgICAgICBvdXRwdXQu
c3RhcnRUcmFuc2ZlcigpOwogICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vblRyYW5zZmVyU3RhcnRl
ZCh0aGlzKTsKIAogICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5faW5wdXQubGVuZ3RoOwpAQCAt
MTc2LDE1ICsxNzUsMTUgQEAgSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVJlYWRlci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5faW5wdXQuc3Vic3RyaW5nKDAsIGhhbGYp
OwogICAgICAgICB0aGlzLl9sb2FkZWRTaXplICs9IGNodW5rLmxlbmd0aDsKLSAgICAgICAgb3V0
cHV0LnRyYW5zZmVyQ2h1bmsoY2h1bmspOworICAgICAgICBvdXRwdXQud3JpdGUoY2h1bmspOwog
ICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5vbkNodW5rVHJhbnNmZXJyZWQodGhpcyk7CiAKICAgICAg
ICAgY2h1bmsgPSB0aGlzLl9pbnB1dC5zdWJzdHJpbmcoaGFsZik7CiAgICAgICAgIHRoaXMuX2xv
YWRlZFNpemUgKz0gY2h1bmsubGVuZ3RoOwotICAgICAgICBvdXRwdXQudHJhbnNmZXJDaHVuayhj
aHVuayk7CisgICAgICAgIG91dHB1dC53cml0ZShjaHVuayk7CiAgICAgICAgIHRoaXMuX2RlbGVn
YXRlLm9uQ2h1bmtUcmFuc2ZlcnJlZCh0aGlzKTsKIAotICAgICAgICBvdXRwdXQuZmluaXNoVHJh
bnNmZXIoKTsKKyAgICAgICAgb3V0cHV0LmNsb3NlKCk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRl
Lm9uVHJhbnNmZXJGaW5pc2hlZCh0aGlzKTsKIAogICAgICAgICB0aGlzLl9jYWxsYmFjaygpOwpA
QCAtMjA4LDMyICsyMDcsMjQgQEAgSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVJlYWRlci5wcm90b3R5
cGUgPSB7CiAgICAgfQogfTsKIAotSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVdyaXRlciA9IGZ1bmN0
aW9uKGRlbGVnYXRlLCBjYWxsYmFjaykKK0luc3BlY3RvclRlc3QuU3RyaW5nT3V0cHV0U3RyZWFt
ID0gZnVuY3Rpb24oY2FsbGJhY2spCiB7Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
ICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIHRoaXMuX2J1ZmZlciA9ICIiOwog
fTsKIAotSW5zcGVjdG9yVGVzdC5GYWtlRmlsZVdyaXRlci5wcm90b3R5cGUgPSB7Ci0gICAgc3Rh
cnRUcmFuc2ZlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fZGVsZWdhdGUub25U
cmFuc2ZlclN0YXJ0ZWQodGhpcyk7Ci0gICAgfSwKLQotICAgIHRyYW5zZmVyQ2h1bms6IGZ1bmN0
aW9uKGNodW5rKQorSW5zcGVjdG9yVGVzdC5TdHJpbmdPdXRwdXRTdHJlYW0ucHJvdG90eXBlID0g
eworICAgIHdyaXRlOiBmdW5jdGlvbihjaHVuaywgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0
aGlzLl9idWZmZXIgKz0gY2h1bms7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uQ2h1bmtUcmFu
c2ZlcnJlZCh0aGlzKTsKKyAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgY2FsbGJh
Y2sodGhpcyk7CiAgICAgfSwKIAotICAgIGZpbmlzaFRyYW5zZmVyOiBmdW5jdGlvbigpCisgICAg
Y2xvc2U6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2RlbGVnYXRlLm9uVHJhbnNm
ZXJGaW5pc2hlZCh0aGlzKTsKICAgICAgICAgdGhpcy5fY2FsbGJhY2sodGhpcy5fYnVmZmVyKTsK
LSAgICB9LAotCi0gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7IH0KKyAgICB9CiB9OwogCiB9Owo=
</data>
<flag name="review"
          id="177036"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>