<?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>82453</bug_id>
          
          <creation_ts>2012-03-28 05:42:12 -0700</creation_ts>
          <short_desc>Web Inspector: switch heap profiler front-end to separate storage of nodes and edges</short_desc>
          <delta_ts>2012-03-29 05:39:03 -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>
          
          <blocked>81927</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>alph</cc>
    
    <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>589884</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 05:42:12 -0700</bug_when>
    <thetext>We are going to split snapshot into separate arrays of nodes and edges on the front-end. Then switch heap profiler front-end to the two new arrays. And after that the snapshot format is going to be changed so that the nodes and edges arrive in two separate arrays.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589885</commentid>
    <comment_count>1</comment_count>
      <attachid>134274</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 05:44:00 -0700</bug_when>
    <thetext>Created attachment 134274
Working draft of the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590047</commentid>
    <comment_count>2</comment_count>
      <attachid>134316</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 09:35:41 -0700</bug_when>
    <thetext>Created attachment 134316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590127</commentid>
    <comment_count>3</comment_count>
      <attachid>134316</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2012-03-28 10:49:37 -0700</bug_when>
    <thetext>Comment on attachment 134316
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        we may just delete node offset by number of node fields to get node index. After

divide

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:398
&gt; +    var retainerIndexPosition = retainedNodeIndex / snapshot._nodeFieldCount;

retainedNodePosition?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:667
&gt; +        return new WebInspector.HeapSnapshotArraySlice(this._snapshot._containmentEdges, this._firstEdgeIndex(), this._afterLastEdgeIndex());

I would call the functions _beginEdgeIndex and _endEdgeIndex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590836</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 21:59:03 -0700</bug_when>
    <thetext>---------- Forwarded message ----------
From: Alexei Filippov &lt;alexeif@google.com&gt;
Date: 2012/3/28
Subject: Re: [Bug 82453] Web Inspector: switch heap profiler front-end to separate storage of nodes and edges
To: bugzilla-daemon@webkit.org
Cc: alexeif@chromium.org


It says that I&apos;m not authorized to edit that attachment. Anyway here are my comments:

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        we may just delete node offset by number of node fields to get node index. After

typo: *divide* node offset

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:398
&gt; +    var retainerIndexPosition = retainedNodeIndex / snapshot._nodeFieldCount;

May be name it retainerOrdinal?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:401
&gt; +    if (retainerIndexPosition + 1 &lt; snapshot._firstRetainerIndex.length)

We used to have an extra element in these arrays to avoid such conditionals. Why not to have one extra item in _firstRetainerIndex and set it to _retainingEdges.length. wdyt?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:702
&gt; +        return this._snapshot._onlyNodes[this.nodeIndex + this._snapshot._edgesCountOffset];

Why _edgesCountOffset? Do you use it to store first edge index. Can we rename it or at least make an alias.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590854</commentid>
    <comment_count>5</comment_count>
      <attachid>134500</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 22:38:30 -0700</bug_when>
    <thetext>Created attachment 134500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590856</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-28 22:41:43 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 134316 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134316&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        we may just delete node offset by number of node fields to get node index. After
&gt; 
&gt; divide
&gt; 
Fixed.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:398
&gt; &gt; +    var retainerIndexPosition = retainedNodeIndex / snapshot._nodeFieldCount;
&gt; 
&gt; retainedNodePosition?
&gt; 
Renamed to retainedNodeOrdinal

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:667
&gt; &gt; +        return new WebInspector.HeapSnapshotArraySlice(this._snapshot._containmentEdges, this._firstEdgeIndex(), this._afterLastEdgeIndex());
&gt; 
&gt; I would call the functions _beginEdgeIndex and _endEdgeIndex.
Renamed to _edgeIndexesStart/End


(In reply to comment #4)
&gt; ---------- Forwarded message ----------
&gt; From: Alexei Filippov &lt;alexeif@google.com&gt;
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134316&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        we may just delete node offset by number of node fields to get node index. After
&gt; 
&gt; typo: *divide* node offset
&gt; 
Fixed.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:398
&gt; &gt; +    var retainerIndexPosition = retainedNodeIndex / snapshot._nodeFieldCount;
&gt; 
&gt; May be name it retainerOrdinal?
&gt;
Done. retainedNodeOrdinal
 
&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:401
&gt; &gt; +    if (retainerIndexPosition + 1 &lt; snapshot._firstRetainerIndex.length)
&gt; 
&gt; We used to have an extra element in these arrays to avoid such conditionals. Why not to have one extra item in _firstRetainerIndex and set it to _retainingEdges.length. wdyt?
&gt; 
Good point. Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:702
&gt; &gt; +        return this._snapshot._onlyNodes[this.nodeIndex + this._snapshot._edgesCountOffset];
&gt; 
&gt; Why _edgesCountOffset? Do you use it to store first edge index. Can we rename it or at least make an alias.

Yes, it is now also used to store first containment edge index. Will add an alias.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591084</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-03-29 05:39:03 -0700</bug_when>
    <thetext>Committed r112523: &lt;http://trac.webkit.org/changeset/112523&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134274</attachid>
            <date>2012-03-28 05:44:00 -0700</date>
            <delta_ts>2012-03-28 09:35:27 -0700</delta_ts>
            <desc>Working draft of the patch</desc>
            <filename>heap-iterators-new.patch</filename>
            <type>text/plain</type>
            <size>25607</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3Qu
anMKaW5kZXggODY2MDQyNi4uZmE0Y2FlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTM5MCwxNyArMzkwLDI3IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlSXRlcmF0b3IucHJvdG90eXBlID0gewogICAgIH0K
IH07CiAKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UgPSBmdW5jdGlvbihz
bmFwc2hvdCwgcmV0YWluZXJzLCByZXRhaW5lckluZGV4KQorV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFJldGFpbmVyRWRnZSA9IGZ1bmN0aW9uKHNuYXBzaG90LCByZXRhaW5lZE5vZGVJbmRleCwg
cmV0YWluZXJJbmRleCkKIHsKICAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBzaG90OwotICAgIHRo
aXMuX3JldGFpbmVycyA9IHJldGFpbmVyczsKLSAgICB0aGlzLnJldGFpbmVySW5kZXggPSByZXRh
aW5lckluZGV4IHx8IDA7CisgICAgdGhpcy5fcmV0YWluZWROb2RlSW5kZXggPSByZXRhaW5lZE5v
ZGVJbmRleDsKKworICAgIHZhciByZXRhaW5lckluZGV4UG9zaXRpb24gPSByZXRhaW5lZE5vZGVJ
bmRleCAvIHNuYXBzaG90Ll9ub2RlRmllbGRDb3VudDsKKyAgICB0aGlzLl9maXJzdFJldGFpbmVy
ID0gc25hcHNob3QuX2ZpcnN0UmV0YWluZXJJbmRleFtyZXRhaW5lckluZGV4UG9zaXRpb25dOwor
ICAgIHZhciBhZnRlckxhc3RSZXRhaW5lcjsKKyAgICBpZiAocmV0YWluZXJJbmRleFBvc2l0aW9u
ICsgMSA8IHNuYXBzaG90Ll9maXJzdFJldGFpbmVySW5kZXgubGVuZ3RoKQorICAgICAgICBhZnRl
ckxhc3RSZXRhaW5lciA9IHNuYXBzaG90Ll9maXJzdFJldGFpbmVySW5kZXhbcmV0YWluZXJJbmRl
eFBvc2l0aW9uICsgMV07CisgICAgZWxzZQorICAgICAgICBhZnRlckxhc3RSZXRhaW5lciA9IHNu
YXBzaG90Ll9yZXRhaW5pbmdFZGdlcy5sZW5ndGg7CisgICAgdGhpcy5fcmV0YWluZXJzQ291bnQg
PSBhZnRlckxhc3RSZXRhaW5lciAtIHRoaXMuX2ZpcnN0UmV0YWluZXI7CisKKyAgICB0aGlzLnJl
dGFpbmVySW5kZXggPSByZXRhaW5lckluZGV4OwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKICAgICBjbG9uZTogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJF
ZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9yZXRhaW5lcnMsIHRoaXMucmV0YWluZXJJbmRleCk7
CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRn
ZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5fcmV0YWluZWROb2RlSW5kZXgsIHRoaXMucmV0YWluZXJJ
bmRleCk7CiAgICAgfSwKIAogICAgIGdldCBoYXNTdHJpbmdOYW1lKCkKQEAgLTQ2OCw4ICs0Nzgs
OSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsK
IAogICAgIHNldCBlZGdlSW5kZXgoZWRnZUluZGV4KQogICAgIHsKLSAgICAgICAgdGhpcy5fZ2xv
YmFsRWRnZUluZGV4ID0gdGhpcy5fcmV0YWluZXJzLml0ZW0oZWRnZUluZGV4KTsKLSAgICAgICAg
dGhpcy5fbm9kZUluZGV4ID0gdGhpcy5fc25hcHNob3QuX2ZpbmROZWFyZXN0Tm9kZUluZGV4KHRo
aXMuX2dsb2JhbEVkZ2VJbmRleCk7CisgICAgICAgIHZhciByZXRhaW5lckluZGV4ID0gdGhpcy5f
Zmlyc3RSZXRhaW5lciArIGVkZ2VJbmRleDsKKyAgICAgICAgdGhpcy5fZ2xvYmFsRWRnZUluZGV4
ID0gdGhpcy5fc25hcHNob3QuX3JldGFpbmluZ0VkZ2VzW3JldGFpbmVySW5kZXhdOworICAgICAg
ICB0aGlzLl9ub2RlSW5kZXggPSB0aGlzLl9zbmFwc2hvdC5fcmV0YWluaW5nTm9kZXNbcmV0YWlu
ZXJJbmRleF07CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGdlSW5zdGFuY2U7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9ub2RlSW5zdGFuY2U7CiAgICAgfSwKQEAgLTQ4NCw3ICs0OTUsNyBAQCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKICAgICBnZXQg
X2VkZ2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9lZGdlSW5zdGFuY2UpIHsKLSAgICAg
ICAgICAgIHZhciBlZGdlSW5kZXggPSB0aGlzLl9nbG9iYWxFZGdlSW5kZXggLSB0aGlzLl9ub2Rl
SW5kZXggLSB0aGlzLl9zbmFwc2hvdC5fZmlyc3RFZGdlT2Zmc2V0OworICAgICAgICAgICAgdmFy
IGVkZ2VJbmRleCA9IHRoaXMuX2dsb2JhbEVkZ2VJbmRleCAtIHRoaXMuX25vZGUuX2ZpcnN0RWRn
ZUluZGV4KCk7CiAgICAgICAgICAgICB0aGlzLl9lZGdlSW5zdGFuY2UgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEVkZ2UodGhpcy5fc25hcHNob3QsIHRoaXMuX25vZGUucmF3RWRnZXMs
IGVkZ2VJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbnN0YW5j
ZTsKQEAgLTUxNCw3ICs1MjUsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJF
ZGdlSXRlcmF0b3IucHJvdG90eXBlID0gewogCiAgICAgaGFzTmV4dDogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmV0YWluZXIucmV0YWluZXJJbmRleCA8IHRoaXMucmV0
YWluZXIuX3JldGFpbmVycy5sZW5ndGg7CisgICAgICAgIHJldHVybiB0aGlzLnJldGFpbmVyLnJl
dGFpbmVySW5kZXggPCB0aGlzLnJldGFpbmVyLl9yZXRhaW5lcnNDb3VudDsKICAgICB9LAogCiAg
ICAgZ2V0IGluZGV4KCkKQEAgLTU5Niw3ICs2MDcsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Tm9kZS5wcm90b3R5cGUgPSB7CiAKICAgICBnZXQgZWRnZXNDb3VudCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
ZWRnZXNDb3VudE9mZnNldF07CisgICAgICAgIHJldHVybiAodGhpcy5fYWZ0ZXJMYXN0RWRnZUlu
ZGV4KCkgLSB0aGlzLl9maXJzdEVkZ2VJbmRleCgpKSAvIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmll
bGRzQ291bnQ7CiAgICAgfSwKIAogICAgIGdldCBmbGFncygpCkBAIC02NDMsNiArNjU0LDcgQEAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogCiAgICAgZ2V0IGlz
Um9vdCgpCiAgICAgeworLy8gICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0gMDsKICAg
ICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ID09PSB0aGlzLl9zbmFwc2hvdC5fcm9vdE5vZGVJ
bmRleDsKICAgICB9LAogCkBAIC02NTMsOCArNjY1LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdE5vZGUucHJvdG90eXBlID0gewogCiAgICAgZ2V0IHJhd0VkZ2VzKCkKICAgICB7Ci0gICAg
ICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IHRoaXMuX2ZpcnN0RWRnZUluZGV4KCk7Ci0gICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEFycmF5U2xpY2UodGhpcy5fc25h
cHNob3QuX25vZGVzLCBmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5kZXggKyB0aGlzLmVkZ2Vz
Q291bnQgKiB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsKKyAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLl9zbmFwc2hvdC5f
Y29udGFpbm1lbnRFZGdlcywgdGhpcy5fZmlyc3RFZGdlSW5kZXgoKSwgdGhpcy5fYWZ0ZXJMYXN0
RWRnZUluZGV4KCkpOwogICAgIH0sCiAKICAgICBnZXQgcmV0YWluZWRTaXplKCkKQEAgLTY2NCw3
ICs2NzUsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAK
ICAgICBnZXQgcmV0YWluZXJzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZUl0ZXJhdG9yKG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9zbmFwc2hvdC5fcmV0
YWluZXJzRm9yTm9kZSh0aGlzKSkpOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RSZXRhaW5lckVkZ2VJdGVyYXRvcihuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFJldGFpbmVyRWRnZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5ub2RlSW5kZXgsIDApKTsKICAg
ICB9LAogCiAgICAgZ2V0IHNlbGZTaXplKCkKQEAgLTY4NCwxNyArNjk1LDI1IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBfbm9kZXMoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9ub2RlczsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NuYXBzaG90Ll9vbmx5Tm9kZXM7CiAgICAgfSwKIAogICAgIF9maXJzdEVkZ2VJ
bmRleDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ICsg
dGhpcy5fc25hcHNob3QuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nu
YXBzaG90Ll9vbmx5Tm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXND
b3VudE9mZnNldF07CisgICAgfSwKKworICAgIF9hZnRlckxhc3RFZGdlSW5kZXg6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gdGhpcy5fbmV4dE5vZGVJbmRl
eDsKKyAgICAgICAgaWYgKG5leHROb2RlSW5kZXggPCB0aGlzLl9zbmFwc2hvdC5fb25seU5vZGVz
Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fb25seU5vZGVzW25l
eHROb2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF0KKyAgICAgICAg
cmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsKICAgICB9LAog
CiAgICAgZ2V0IF9uZXh0Tm9kZUluZGV4KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9m
aXJzdEVkZ2VJbmRleCgpICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNob3QuX2VkZ2VG
aWVsZHNDb3VudDsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNo
b3QuX25vZGVGaWVsZENvdW50OwogICAgIH0sCiAKICAgICBfdHlwZTogZnVuY3Rpb24oKQpAQCAt
Nzg5LDEwICs4MDgsMTAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBkZXRhY2hlZERPTVRyZWVOb2RlOiAyLAogICAgICAgICB9OwogCisgICAg
ICAgIHRoaXMuX2J1aWxkQ29udGludW91c05vZGVBcnJheSgpOworICAgICAgICB0aGlzLl9yb290
Tm9kZUluZGV4ID0gMDsKKwogICAgICAgICB0aGlzLl9tYXJrSW52aXNpYmxlRWRnZXMoKTsKLSAg
ICAgICAgdGhpcy5fYnVpbGROb2RlSW5kZXgoKTsKLSAgICAgICAgdGhpcy5fYnVpbGRSZXRhaW5l
cnMoKTsKLSAgICAgICAgdGhpcy5fYnVpbGREb21pbmF0ZWROb2RlcygpOwogICAgICAgICB0aGlz
Ll9jYWxjdWxhdGVGbGFncygpOwogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRv
d0Rpc3RhbmNlKCk7CiAgICAgfSwKQEAgLTgwOCwxMCArODI3LDEyIEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgdG90YWxFZGdlQ291bnQgKz0g
ZWRnZXNDb3VudDsKICAgICAgICAgICAgIGluZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCAr
IGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CiAgICAgICAgIH0KKyAgICAgICAg
dGhpcy5ub2RlQ291bnQgPSB0b3RhbE5vZGVDb3VudDsKICAgICAgICAgdGhpcy5fY3JlYXRlT25s
eU5vZGVzQXJyYXkodG90YWxOb2RlQ291bnQpOwogICAgICAgICB0aGlzLl9jcmVhdGVDb250YWlu
bWVudEVkZ2VzQXJyYXkodG90YWxFZGdlQ291bnQpOwotICAgICAgICB0aGlzLl9jcmVhdGVSZXRh
aW5tZW50RWRnZXNBcnJheSh0b3RhbE5vZGVDb3VudCwgdG90YWxFZGdlQ291bnQpOwogICAgICAg
ICB0aGlzLl9yZXN0b3JlTm9kZVR5cGVzKCk7CisgICAgICAgIHRoaXMuX2NyZWF0ZVJldGFpbm1l
bnRFZGdlc0FycmF5KHRvdGFsTm9kZUNvdW50LCB0b3RhbEVkZ2VDb3VudCk7CisgICAgICAgIHRo
aXMuX2NyZWF0ZURvbWluYXRlZE5vZGVzQXJyYXkodG90YWxOb2RlQ291bnQpOwogICAgIH0sCiAK
ICAgICBfY3JlYXRlT25seU5vZGVzQXJyYXk6IGZ1bmN0aW9uKHRvdGFsTm9kZUNvdW50KQpAQCAt
ODY4LDIwICs4ODksMzQgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7
CiAgICAgX2NyZWF0ZVJldGFpbm1lbnRFZGdlc0FycmF5OiBmdW5jdGlvbih0b3RhbE5vZGVDb3Vu
dCwgdG90YWxFZGdlQ291bnQpCiAgICAgewogICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2RlcyA9
IG5ldyBVaW50MzJBcnJheSh0b3RhbEVkZ2VDb3VudCk7CisgICAgICAgIHRoaXMuX3JldGFpbmVy
cyA9IHRoaXMuX3JldGFpbmluZ0VkZ2VzID0gbmV3IFVpbnQzMkFycmF5KHRvdGFsRWRnZUNvdW50
KTsKICAgICAgICAgLy8gSW5kZXggb2YgdGhlIGZpcnN0IHJldGFpbmVyIGluIHRoZSBfcmV0YWlu
aW5nTm9kZXMgYXJyYXkuIEFkZHJlc3NlZCBieSByZXRhaW5lZCBub2RlIGluZGV4LgotICAgICAg
ICB0aGlzLl9maXJzdFJldGFpbmVySW5kZXggPSBuZXcgVWludDMyQXJyYXkodG90YWxOb2RlQ291
bnQpOwotCi0gICAgICAgIGZvciAodmFyIHRvTm9kZUluZGV4ID0gdGhpcy5fZWRnZVRvTm9kZU9m
ZnNldDsgdG9Ob2RlSW5kZXggPCB0aGlzLl9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsgdG9Ob2Rl
SW5kZXggKz0gdGhpcy5fZWRnZUZpZWxkc0NvdW50KQotICAgICAgICAgICAgKyt0aGlzLl9maXJz
dFJldGFpbmVySW5kZXhbdGhpcy5fY29udGFpbm1lbnRFZGdlc1t0b05vZGVJbmRleF1dOworICAg
ICAgICB0aGlzLl9yZXRhaW5lckluZGV4ID0gdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4ID0gbmV3
IFVpbnQzMkFycmF5KHRvdGFsTm9kZUNvdW50KTsKKwordmFyIHRvdGFsUmV0YWlubWVudEVkZ2Vz
ID0gMDsKKyAgICAgICAgZm9yICh2YXIgdG9Ob2RlRmllbGRJbmRleCA9IHRoaXMuX2VkZ2VUb05v
ZGVPZmZzZXQ7IHRvTm9kZUZpZWxkSW5kZXggPCB0aGlzLl9jb250YWlubWVudEVkZ2VzLmxlbmd0
aDsgdG9Ob2RlRmllbGRJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQpIHsKKyAgICAgICAg
ICAgIHZhciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbdG9Ob2RlRmllbGRJ
bmRleF07CisgICAgICAgICAgICBpZiAodG9Ob2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3Vu
dCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9Ob2RlSW5kZXgg
IiArIHRvTm9kZUluZGV4KTsKKyAgICAgICAgICAgICsrdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4
W3RvTm9kZUluZGV4IC8gdGhpcy5fbm9kZUZpZWxkQ291bnRdOworICAgICAgICAgICAgKyt0b3Rh
bFJldGFpbm1lbnRFZGdlczsKKyAgICAgICAgfQorICAgICAgICBpZiAodG90YWxSZXRhaW5tZW50
RWRnZXMgIT09IHRvdGFsRWRnZUNvdW50KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJm
YWlsZWQgdG8gYnVpbGQgcmV0YWluZXJzIik7Cit2YXIgdG90YWxSZXRhaW5tZW50RWRnZXMgPSAw
OwogICAgICAgICBmb3IgKHZhciBpID0gMCwgZmlyc3RVbnVzZWRSZXRhaW5lclNsb3QgPSAwOyBp
IDwgdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICB2
YXIgcmV0YWluZXJzQ291bnQgPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbaV07CisgICAgICAg
ICAgICB0b3RhbFJldGFpbm1lbnRFZGdlcyArPSByZXRhaW5lcnNDb3VudDsKICAgICAgICAgICAg
IHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFtpXSA9IGZpcnN0VW51c2VkUmV0YWluZXJTbG90Owog
ICAgICAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXNbZmlyc3RVbnVzZWRSZXRhaW5lclNsb3Rd
ID0gcmV0YWluZXJzQ291bnQ7CiAgICAgICAgICAgICBmaXJzdFVudXNlZFJldGFpbmVyU2xvdCAr
PSByZXRhaW5lcnNDb3VudDsKICAgICAgICAgfQorICAgICAgICBpZiAodG90YWxSZXRhaW5tZW50
RWRnZXMgIT09IHRvdGFsRWRnZUNvdW50KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJm
YWlsZWQgdG8gYnVpbGQgcmV0YWluZXJzIik7CiAKK3ZhciB0b3RhbFJldGFpbm1lbnRFZGdlcyA9
IDA7CiAgICAgICAgIHZhciBzcmNOb2RlSW5kZXggPSAwOwotICAgICAgICB2YXIgbmV4dE5vZGVG
aXJzdEVkZ2VJbmRleCA9IHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQ7CisgICAgICAgIHZhciBuZXh0
Tm9kZUZpcnN0RWRnZUluZGV4ID0gdGhpcy5fb25seU5vZGVzW3RoaXMuX2VkZ2VzQ291bnRPZmZz
ZXRdOwogICAgICAgICB3aGlsZSAoc3JjTm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0
aCkgewogICAgICAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gbmV4dE5vZGVGaXJzdEVkZ2VJ
bmRleDsKICAgICAgICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gc3JjTm9kZUluZGV4ICsgdGhp
cy5fbm9kZUZpZWxkQ291bnQ7CkBAIC04OTAsMTIgKzkyNSwxOCBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogdGhpcy5fY29udGFpbm1lbnRFZGdlcy5sZW5ndGg7CiAgICAgICAgICAgICBmb3Ig
KHZhciBlZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleDsgZWRnZUluZGV4IDwgbmV4dE5vZGVGaXJz
dEVkZ2VJbmRleDsgZWRnZUluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgewogICAgICAg
ICAgICAgICAgIHZhciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZUlu
ZGV4ICsgdGhpcy5fZWRnZVRvTm9kZU9mZnNldF07Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0
UmV0YWluZXJTbG90SW5kZXggPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXhd
OworICAgICAgICAgICAgICAgIGlmICh0b05vZGVJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50
KQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9Ob2RlSW5k
ZXggIiArIHRvTm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB2YXIgZmlyc3RSZXRhaW5lclNs
b3RJbmRleCA9IHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFt0b05vZGVJbmRleCAvIHRoaXMuX25v
ZGVGaWVsZENvdW50XTsKICAgICAgICAgICAgICAgICB2YXIgbmV4dFVudXNlZFJldGFpbmVyU2xv
dEluZGV4ID0gZmlyc3RSZXRhaW5lclNsb3RJbmRleCArICgtLXRoaXMuX3JldGFpbmluZ05vZGVz
W2ZpcnN0UmV0YWluZXJTbG90SW5kZXhdKTsKICAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5p
bmdOb2Rlc1tuZXh0VW51c2VkUmV0YWluZXJTbG90SW5kZXhdID0gc3JjTm9kZUluZGV4OworICAg
ICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1tuZXh0VW51c2VkUmV0YWluZXJTbG90SW5kZXhd
ID0gZWRnZUluZGV4OworICAgICAgICAgICAgICAgICsrdG90YWxSZXRhaW5tZW50RWRnZXM7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNOb2RlSW5kZXggPSBuZXh0Tm9kZUluZGV4Owog
ICAgICAgICB9CisgICAgICAgIGlmICh0b3RhbFJldGFpbm1lbnRFZGdlcyAhPT0gdG90YWxFZGdl
Q291bnQpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBidWlsZCByZXRh
aW5lcnMiKTsKICAgICB9LAogCiAgICAgX3Jlc3RvcmVOb2RlVHlwZXM6IGZ1bmN0aW9uKCkKQEAg
LTkxMCw2ICs5NTEsNDIgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0KICAgICB9LAogCisgICAgX2NyZWF0ZURvbWluYXRlZE5vZGVzQXJyYXk6IGZ1
bmN0aW9uKG5vZGVDb3VudCkKKyAgICB7CisgICAgICAgIHZhciBpbmRleEFycmF5ID0gdGhpcy5f
Zmlyc3REb21pbmF0ZWROb2RlSW5kZXggPSBuZXcgVWludDMyQXJyYXkobm9kZUNvdW50ICsgMSk7
CisgICAgICAgIC8vIEFsbCBub2RlcyBleGNlcHQgdGhlIHJvb3QgaGF2ZSBkb21pbmF0b3JzLgor
ICAgICAgICB2YXIgZG9taW5hdGVkTm9kZXMgPSB0aGlzLl9kb21pbmF0ZWROb2RlcyA9IG5ldyBV
aW50MzJBcnJheShub2RlQ291bnQgLSAxKTsKKworICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVy
IG9mIGRvbWluYXRlZCBub2RlcyBmb3IgZWFjaCBub2RlCisgICAgICAgIGZvciAodmFyIG5vZGVJ
bmRleCA9IDA7IG5vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGg7IG5vZGVJbmRleCAr
PSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4
ID0gdGhpcy5fb25seU5vZGVzW25vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF07Cisg
ICAgICAgICAgICBpZiAoZG9taW5hdG9ySW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIGRvbWluYXRvckluZGV4ICIgKyBk
b21pbmF0b3JJbmRleCk7CisgICAgICAgICAgICAvLyBTa2lwIHJvb3Qgbm9kZS4gV2UgbWF5IHNp
bXBsaWZ5IHRoaXMgYnkgc3RhcnRpbmcgaXRlcmF0aW9uIGZyb20gc2Vjb25kIG5vZGUuCisgICAg
ICAgICAgICBpZiAobm9kZUluZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7CisgICAg
ICAgICAgICArK2luZGV4QXJyYXlbZG9taW5hdG9ySW5kZXggLyB0aGlzLl9ub2RlRmllbGRDb3Vu
dF07CisgICAgICAgIH0KKyAgICAgICAgLy8gUHV0IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2gg
ZG9taW5hdGVkTm9kZXMgc2xpY2UgdGhlIGNvdW50IG9mIGVudHJpZXMKKyAgICAgICAgLy8gdGhh
dCB3aWxsIGJlIGZpbGxlZC4KKyAgICAgICAgdmFyIGZpcnN0RG9taW5hdGVkTm9kZUluZGV4ID0g
MDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSBub2RlQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgdmFyIGRvbWluYXRlZENvdW50ID0gZG9taW5hdGVkTm9kZXNbZmlyc3REb21pbmF0ZWROb2Rl
SW5kZXhdID0gaW5kZXhBcnJheVtpXTsKKyAgICAgICAgICAgIGluZGV4QXJyYXlbaV0gPSBmaXJz
dERvbWluYXRlZE5vZGVJbmRleDsKKyAgICAgICAgICAgIGZpcnN0RG9taW5hdGVkTm9kZUluZGV4
ICs9IGRvbWluYXRlZENvdW50OworICAgICAgICB9CisgICAgICAgIC8vIEZpbGwgdXAgdGhlIGRv
bWluYXRlZE5vZGVzIGFycmF5IHdpdGggaW5kZXhlcyBvZiBkb21pbmF0ZWQgbm9kZXMuCisgICAg
ICAgIGZvciAodmFyIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5s
ZW5ndGg7IG5vZGVJbmRleCArPSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAg
dmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fb25seU5vZGVzW25vZGVJbmRleCArIHRoaXMuX2Rv
bWluYXRvck9mZnNldF07CisgICAgICAgICAgICBpZiAoZG9taW5hdG9ySW5kZXggJSB0aGlzLl9u
b2RlRmllbGRDb3VudCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIGRv
bWluYXRvckluZGV4ICIgKyBkb21pbmF0b3JJbmRleCk7CisgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7CisgICAgICAgICAgICB2YXIgZG9taW5h
dG9yUG9zID0gZG9taW5hdG9ySW5kZXggLyB0aGlzLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAg
ICAgIHZhciBkb21pbmF0ZWRSZWZJbmRleCA9IGluZGV4QXJyYXlbZG9taW5hdG9yUG9zXTsKKyAg
ICAgICAgICAgIGRvbWluYXRlZFJlZkluZGV4ICs9ICgtLWRvbWluYXRlZE5vZGVzW2RvbWluYXRl
ZFJlZkluZGV4XSk7CisgICAgICAgICAgICBkb21pbmF0ZWROb2Rlc1tkb21pbmF0ZWRSZWZJbmRl
eF0gPSBub2RlSW5kZXg7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgZGlzcG9zZTogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVzOwpAQCAtOTMzLDExICsxMDEw
LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVJdGVyYXRvcih0aGlzLnJvb3RO
b2RlKTsKICAgICB9LAogCi0gICAgZ2V0IG5vZGVDb3VudCgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5ub2RlSW5kZXhlcy5sZW5ndGggLSAxOwotICAgIH0sCi0KICAgICBub2RlRmllbGRW
YWx1ZXNCeUluZGV4OiBmdW5jdGlvbihmaWVsZE5hbWUsIGluZGV4ZXMpCiAgICAgewogICAgICAg
ICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzKTsKQEAg
LTk1OSwxMCArMTAzMSw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAodHlwZW9mIHRoaXMuX21heE5vZGVJZCA9PT0gIm51bWJlciIpCiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fbWF4Tm9kZUlkOwogICAgICAgICB0aGlzLl9tYXhOb2RlSWQg
PSAwOwotICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZSh0aGlzLCB0aGlzLm5vZGVJbmRleGVzWzBdKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwg
PSB0aGlzLm5vZGVDb3VudDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAgbm9kZS5ub2RlSW5k
ZXggPSB0aGlzLm5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgdmFyIGlkID0gbm9kZS5pZDsK
KyAgICAgICAgZm9yICh2YXIgbm9kZUlkSW5kZXggPSB0aGlzLl9ub2RlSWRPZmZzZXQ7IG5vZGVJ
ZEluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aDsgbm9kZUlkSW5kZXggKz0gdGhpcy5fbm9k
ZUZpZWxkQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX29ubHlOb2Rlc1tub2Rl
SWRJbmRleF07CiAgICAgICAgICAgICBpZiAoKGlkICUgMikgJiYgaWQgPiB0aGlzLl9tYXhOb2Rl
SWQpCiAgICAgICAgICAgICAgICAgdGhpcy5fbWF4Tm9kZUlkID0gaWQ7CiAgICAgICAgIH0KQEAg
LTk3OSwxMyArMTA0OSw2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5yZXRhaW5lZFNpemU7CiAgICAgfSwKIAot
ICAgIF9yZXRhaW5lcnNGb3JOb2RlOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgdmFy
IHJldEluZGV4RnJvbSA9IHRoaXMuX2dldFJldGFpbmVySW5kZXgobm9kZS5ub2RlSW5kZXgpOwot
ICAgICAgICB2YXIgcmV0SW5kZXhUbyA9IHRoaXMuX2dldFJldGFpbmVySW5kZXgobm9kZS5fbmV4
dE5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEFycmF5U2xpY2UodGhpcy5fcmV0YWluZXJzLCByZXRJbmRleEZyb20sIHJldEluZGV4VG8pOwot
ICAgIH0sCi0KICAgICBfZG9taW5hdGVkTm9kZXNPZk5vZGU6IGZ1bmN0aW9uKG5vZGUpCiAgICAg
ewogICAgICAgICB2YXIgZG9taW5hdGVkSW5kZXhGcm9tID0gdGhpcy5fZ2V0RG9taW5hdGVkSW5k
ZXgobm9kZS5ub2RlSW5kZXgpOwpAQCAtMTAyOSw2MiArMTA5Miw2IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gYWdncmVnYXRlczsKICAg
ICB9LAogCi0gICAgX2J1aWxkUmV0YWluZXJzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgbm9kZUluZGV4ZXMgPSB0aGlzLm5vZGVJbmRleGVzOwotICAgICAgICB2YXIgbm9kZVBvc2l0
aW9ucyA9IHRoaXMuX25vZGVQb3NpdGlvbjsKLSAgICAgICAgdmFyIG5vZGVDb3VudCA9IHRoaXMu
bm9kZUNvdW50OwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKLQotICAgICAgICAv
LyBCdWlsZHMgdXAgdHdvIGFycmF5czoKLSAgICAgICAgLy8gIC0gImJhY2tSZWZzQXJyYXkiIGlz
IGEgY29udGludW91cyBhcnJheSwgd2hlcmUgZWFjaCBub2RlIG93bnMgYW4KLSAgICAgICAgLy8g
ICAgaW50ZXJ2YWwgKGNhbiBiZSBlbXB0eSkgd2l0aCBjb3JyZXNwb25kaW5nIGJhY2sgcmVmZXJl
bmNlcy4KLSAgICAgICAgLy8gIC0gImluZGV4QXJyYXkiIGlzIGFuIGFycmF5IG9mIGluZGV4ZXMg
aW4gdGhlICJiYWNrUmVmc0FycmF5IgotICAgICAgICAvLyAgICB3aXRoIHRoZSBzYW1lIHBvc2l0
aW9ucyBhcyBpbiB0aGUgX25vZGVJbmRleC4KLSAgICAgICAgdmFyIGluZGV4QXJyYXkgPSB0aGlz
Ll9yZXRhaW5lckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVDb3VudCArIDEpOwotICAgICAg
ICB2YXIgZWRnZXNDb3VudE9mZnNldCA9IHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQ7Ci0gICAgICAg
IHZhciBmaXJzdEVkZ2VPZmZzZXQgPSB0aGlzLl9maXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAgIHZh
ciBlZGdlRmllbGRzQ291bnQgPSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Ci0gICAgICAgIHZhciBl
ZGdlVG9Ob2RlT2Zmc2V0ID0gdGhpcy5fZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAgdmFyIGJh
Y2tSZWZzQ291bnQgPSAwOwotICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHJldGFpbmVy
cyBmb3IgZWFjaCBub2RlCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIHZhciBub2RlSW5kZXggPSBub2RlSW5kZXhlc1tpXTsKLSAgICAg
ICAgICAgIHZhciBlZGdlc09mZnNldCA9IG5vZGVJbmRleCArIGZpcnN0RWRnZU9mZnNldCArIGVk
Z2VUb05vZGVPZmZzZXQ7Ci0gICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IG5vZGVzW25vZGVJ
bmRleCArIGVkZ2VzQ291bnRPZmZzZXRdOwotICAgICAgICAgICAgYmFja1JlZnNDb3VudCArPSBl
ZGdlc0NvdW50OwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlc0NvdW50OyAr
K2opIHsKLSAgICAgICAgICAgICAgdmFyIHRhcmdldE5vZGVJbmRleCA9IG5vZGVzW2ogKiBlZGdl
RmllbGRzQ291bnQgKyBlZGdlc09mZnNldF07Ci0gICAgICAgICAgICAgICsraW5kZXhBcnJheVtu
b2RlUG9zaXRpb25zW3RhcmdldE5vZGVJbmRleF1dOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHZhciBiYWNrUmVmc0FycmF5ID0gdGhpcy5fcmV0YWluZXJzID0gbmV3IFVpbnQz
MkFycmF5KGJhY2tSZWZzQ291bnQpOwotICAgICAgICAvLyBQdXQgaW4gdGhlIGZpcnN0IHNsb3Qg
b2YgZWFjaCBiYWNrUmVmc0FycmF5IHNsaWNlIHRoZSBjb3VudCBvZiBlbnRyaWVzCi0gICAgICAg
IC8vIHRoYXQgd2lsbCBiZSBmaWxsZWQuCi0gICAgICAgIHZhciBiYWNrUmVmc1Bvc2l0aW9uID0g
MDsKLSAgICAgICAgLy8gVGhlIG9uZSBleHRyYSBzbG90IGluIHRoZSBfcmV0YWluZXJJbmRleCBh
cnJheSBpcyBzZXQgdG8gdGhlCi0gICAgICAgIC8vIGVuZCBvZiBfcmV0YWluZXJzIGFycmF5LiBJ
dCBpcyB1c2VkIGluIHRoZSByZXRhaW5lcnMgaXRlcmF0b3IuCi0gICAgICAgIGZvciAoaSA9IDA7
IGkgPD0gbm9kZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGJhY2tSZWZzQ291bnQgPSBiYWNr
UmVmc0FycmF5W2JhY2tSZWZzUG9zaXRpb25dID0gaW5kZXhBcnJheVtpXTsKLSAgICAgICAgICAg
IGluZGV4QXJyYXlbaV0gPSBiYWNrUmVmc1Bvc2l0aW9uOwotICAgICAgICAgICAgYmFja1JlZnNQ
b3NpdGlvbiArPSBiYWNrUmVmc0NvdW50OwotICAgICAgICB9Ci0gICAgICAgIHZhciByZXRhaW5l
ckluZGV4ID0gdGhpcy5fcmV0YWluZXJJbmRleDsKLSAgICAgICAgLy8gRmlsbCB1cCB0aGUgcmV0
YWluZXJzIGFycmF5IHdpdGggaW5kZXhlcyBvZiBlZGdlcy4KLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IG5v
ZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgdmFyIGVkZ2VzT2Zmc2V0ID0gbm9kZUluZGV4ICsg
Zmlyc3RFZGdlT2Zmc2V0OwotICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSBub2Rlc1tub2Rl
SW5kZXggKyBlZGdlc0NvdW50T2Zmc2V0XTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgZWRnZXNDb3VudDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVkZ2VJbmRleCA9IGog
KiBlZGdlRmllbGRzQ291bnQgKyBlZGdlc09mZnNldDsKLSAgICAgICAgICAgICAgICB2YXIgcmV0
Tm9kZSA9IG5vZGVQb3NpdGlvbnNbbm9kZXNbZWRnZUluZGV4ICsgZWRnZVRvTm9kZU9mZnNldF1d
OwotICAgICAgICAgICAgICAgIHZhciByZXRJbmRleCA9IGluZGV4QXJyYXlbcmV0Tm9kZV07Ci0g
ICAgICAgICAgICAgICAgdmFyIGJhY2tSZWZJbmRleCA9IHJldEluZGV4ICsgKC0tYmFja1JlZnNB
cnJheVtyZXRJbmRleF0pOwotICAgICAgICAgICAgICAgIGJhY2tSZWZzQXJyYXlbYmFja1JlZklu
ZGV4XSA9IGVkZ2VJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0sCi0KICAg
ICBfY2FsY3VsYXRlT2JqZWN0VG9XaW5kb3dEaXN0YW5jZTogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3cgPSBuZXcgQXJyYXkodGhpcy5ub2RlQ291bnQp
OwpAQCAtMTA5NCw2ICsxMTAxLDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJvb3ROb2RlLmVkZ2VzOyBpdGVy
Lmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKICAgICAgICAgICAgIHZhciBub2RlID0gaXRlci5l
ZGdlLm5vZGU7CiAgICAgICAgICAgICBpZiAobm9kZS5pc1dpbmRvdykgeworICAgICAgICAgICAg
ICAgIGlmIChub2RlLm5vZGVJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50KQorICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbm9kZUluZGV4OiAiICsgbm9kZS5u
b2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGxpc3QucHVzaChub2RlLm5vZGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3dbbm9kZS5ub2RlSW5kZXhdID0g
MDsKICAgICAgICAgICAgIH0KQEAgLTExMDMsMTQgKzExMTIsMTQgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIGJmcyBmb3Igcm9vdAogICAgICAg
ICBsaXN0ID0gW107CiAgICAgICAgIGxpc3QucHVzaCh0aGlzLl9yb290Tm9kZUluZGV4KTsKLSAg
ICAgICAgdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3dbdGhpcy5yb290Tm9kZS5ub2RlSW5kZXhdID0g
MDsKKyAgICAgICAgdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3dbdGhpcy5fcm9vdE5vZGVJbmRleF0g
PSAwOwogICAgICAgICB0aGlzLl9iZnMobGlzdCk7CiAgICAgfSwKIAogICAgIF9iZnM6IGZ1bmN0
aW9uKGxpc3QpCiAgICAgewogICAgICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICB2YXIgbm9k
ZXMgPSB0aGlzLl9ub2RlczsKKyAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGUodGhpcyk7CiAgICAgICAgIHdoaWxlIChpbmRleCA8IGxpc3QubGVuZ3Ro
KSB7CiAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbGlzdFtpbmRleCsrXTsgLy8gc2hpZnQg
Z2VuZXJhdGVzIHRvbyBtdWNoIGdhcmJhZ2UuCiAgICAgICAgICAgICBpZiAoaW5kZXggPiAxMDAw
MDApIHsKQEAgLTExMTgsMTAgKzExMjcsMTMgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3dbbm9kZUlu
ZGV4XSArIDE7Ci0gICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IG5vZGVzW25vZGVJbmRleCAr
IHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwotICAgICAgICAgICAgdmFyIGVkZ2VUb05vZGVJbmRl
eCA9IG5vZGVJbmRleCArIHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIHRoaXMuX2VkZ2VUb05vZGVP
ZmZzZXQ7CisgICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAg
ICAgIHZhciBlZGdlc0NvdW50ID0gbm9kZS5lZGdlc0NvdW50OworICAgICAgICAgICAgdmFyIGVk
Z2VUb05vZGVJbmRleCA9IG5vZGUuX2ZpcnN0RWRnZUluZGV4KCkgKyB0aGlzLl9lZGdlVG9Ob2Rl
T2Zmc2V0OwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlc0NvdW50OyArK2kp
IHsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlSW5kZXggPSBub2Rlc1tlZGdlVG9Ob2Rl
SW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVJbmRleCA9IHRoaXMuX2NvbnRh
aW5tZW50RWRnZXNbZWRnZVRvTm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRO
b2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJJbnZhbGlkIGNoaWxkTm9kZUluZGV4OiAiICsgY2hpbGROb2RlSW5kZXgp
OwogICAgICAgICAgICAgICAgIGVkZ2VUb05vZGVJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291
bnQ7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZUluZGV4IGluIHRoaXMuX2Rpc3RhbmNl
c1RvV2luZG93KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTExNDQsOSArMTE1
Niw5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogCiAgICAgICAg
IHZhciBhZ2dyZWdhdGVzID0ge307CiAgICAgICAgIHZhciBhZ2dyZWdhdGVzQnlDbGFzc05hbWUg
PSB7fTsKLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGUodGhpcywgdGhpcy5ub2RlSW5kZXhlc1swXSk7CisgICAgICAgIHZhciBub2RlID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMsIHRoaXMuX3Jvb3ROb2RlSW5kZXgpOwog
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubm9kZUNvdW50OyBpIDwgbDsgKytpKSB7
Ci0gICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9IHRoaXMubm9kZUluZGV4ZXNbaV07CisgICAg
ICAgICAgICBub2RlLm5vZGVJbmRleCA9IG5vZGUuX25leHROb2RlSW5kZXg7CiAgICAgICAgICAg
ICBpZiAoc2hvdWxkU2tpcChub2RlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIHZhciBjbGFzc0luZGV4ID0gbm9kZS5jbGFzc0luZGV4OwpAQCAtMTIxOCw4OSArMTIz
MCwxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX25vZGVJbmRleDsKICAgICB9LAogCi0gICAgX2J1aWxkTm9kZUluZGV4OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY291bnQgPSAwOwotICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5fcm9vdE5vZGVJbmRleCwgbCA9IHRoaXMuX25vZGVzLmxlbmd0aDsgaSA8IGw7
ICsrY291bnQpIHsKLSAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbaSAr
IHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwotICAgICAgICAgICAgaSArPSB0aGlzLl9maXJzdEVk
Z2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50OwotICAgICAgICB9
Ci0gICAgICAgIHZhciBub2RlSW5kZXggPSBuZXcgVWludDMyQXJyYXkoY291bnQgKyAxKTsKLSAg
ICAgICAgdmFyIG5vZGVQb3NpdGlvbiA9IHt9OwotICAgICAgICBjb3VudCA9IDA7Ci0gICAgICAg
IGZvciAodmFyIGkgPSB0aGlzLl9yb290Tm9kZUluZGV4LCBsID0gdGhpcy5fbm9kZXMubGVuZ3Ro
OyBpIDwgbDsgKytjb3VudCkgewotICAgICAgICAgICAgbm9kZUluZGV4W2NvdW50XSA9IGk7Ci0g
ICAgICAgICAgICBub2RlUG9zaXRpb25baV0gPSBjb3VudDsKLSAgICAgICAgICAgIHZhciBlZGdl
c0NvdW50ID0gdGhpcy5fbm9kZXNbaSArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwotICAgICAg
ICAgICAgaSArPSB0aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRn
ZUZpZWxkc0NvdW50OwotICAgICAgICB9Ci0gICAgICAgIG5vZGVJbmRleFtjb3VudF0gPSB0aGlz
Ll9ub2Rlcy5sZW5ndGg7Ci0gICAgICAgIG5vZGVQb3NpdGlvblt0aGlzLl9ub2Rlcy5sZW5ndGhd
ID0gY291bnQ7Ci0gICAgICAgIHRoaXMuX25vZGVJbmRleCA9IG5vZGVJbmRleDsKLSAgICAgICAg
dGhpcy5fbm9kZVBvc2l0aW9uID0gbm9kZVBvc2l0aW9uOwotICAgIH0sCi0KLSAgICBfZmluZE5l
YXJlc3ROb2RlSW5kZXg6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3Vs
dCA9IGJpbmFyeVNlYXJjaChpbmRleCwgdGhpcy5fbm9kZUluZGV4LCB0aGlzLl9udW1iZXJzQ29t
cGFyYXRvcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgICAgICByZXN1bHQg
PSAtcmVzdWx0IC0gMTsKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IHRoaXMuX25vZGVJbmRleFty
ZXN1bHRdOwotICAgICAgICAgICAgLy8gQmluYXJ5IHNlYXJjaCBjYW4gcmV0dXJuIGVpdGhlciBt
YXhpbXVtIGxvd2VyIHZhbHVlLCBvciBtaW5pbXVtIGhpZ2hlciB2YWx1ZS4KLSAgICAgICAgICAg
IGlmIChub2RlSW5kZXggPiBpbmRleCkKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSB0aGlz
Ll9ub2RlSW5kZXhbcmVzdWx0IC0gMV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmFy
IG5vZGVJbmRleCA9IHRoaXMuX25vZGVJbmRleFtyZXN1bHRdOwotICAgICAgICByZXR1cm4gbm9k
ZUluZGV4OwotICAgIH0sCi0KLSAgICBfZ2V0UmV0YWluZXJJbmRleDogZnVuY3Rpb24obm9kZUlu
ZGV4KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVQb3NpdGlvbiA9IHRoaXMuX25vZGVQb3NpdGlv
bltub2RlSW5kZXhdOwotICAgICAgICByZXR1cm4gdGhpcy5fcmV0YWluZXJJbmRleFtub2RlUG9z
aXRpb25dOwotICAgIH0sCi0KLSAgICBfYnVpbGREb21pbmF0ZWROb2RlczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgdmFyIG5vZGVDb3VudCA9IHRoaXMubm9kZUNvdW50OwotICAgICAgICAv
LyBCdWlsZHMgdXAgdHdvIGFycmF5czoKLSAgICAgICAgLy8gIC0gImRvbWluYXRlZE5vZGVzIiBp
cyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2ggbm9kZSBvd25zIGFuCi0gICAgICAgIC8v
ICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGggY29ycmVzcG9uZGluZyBkb21pbmF0ZWQg
bm9kZXMuCi0gICAgICAgIC8vICAtICJpbmRleEFycmF5IiBpcyBhbiBhcnJheSBvZiBpbmRleGVz
IGluIHRoZSAiZG9taW5hdGVkTm9kZXMiCi0gICAgICAgIC8vICAgIHdpdGggdGhlIHNhbWUgcG9z
aXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4LgotICAgICAgICB2YXIgaW5kZXhBcnJheSA9IHRo
aXMuX2RvbWluYXRlZEluZGV4ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVDb3VudCArIDEpOwotICAg
ICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHJldGFpbmVycyBmb3IgZWFjaCBub2RlCi0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgdmFyIGRvbWlu
YXRvckluZGV4ID0gdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0
XTsKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT09IGRvbWluYXRvckluZGV4KSBjb250aW51
ZTsKLSAgICAgICAgICAgICsraW5kZXhBcnJheVt0aGlzLl9ub2RlUG9zaXRpb25bZG9taW5hdG9y
SW5kZXhdXTsKLSAgICAgICAgfQotICAgICAgICB2YXIgZG9taW5hdGVkTm9kZXMgPSB0aGlzLl9k
b21pbmF0ZWROb2RlcyA9IG5ldyBVaW50MzJBcnJheShub2RlQ291bnQgLSAxKTsKLSAgICAgICAg
Ly8gUHV0IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2ggZG9taW5hdGVkTm9kZXMgc2xpY2UgdGhl
IGNvdW50IG9mIGVudHJpZXMKLSAgICAgICAgLy8gdGhhdCB3aWxsIGJlIGZpbGxlZC4KLSAgICAg
ICAgdmFyIGRvbWluYXRlZFBvc2l0aW9uID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8PSBu
b2RlQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGRvbWluYXRlZENvdW50ID0gZG9taW5h
dGVkTm9kZXNbZG9taW5hdGVkUG9zaXRpb25dID0gaW5kZXhBcnJheVtpXTsKLSAgICAgICAgICAg
IGluZGV4QXJyYXlbaV0gPSBkb21pbmF0ZWRQb3NpdGlvbjsKLSAgICAgICAgICAgIGRvbWluYXRl
ZFBvc2l0aW9uICs9IGRvbWluYXRlZENvdW50OwotICAgICAgICB9Ci0gICAgICAgIC8vIEZpbGwg
dXAgdGhlIGRvbWluYXRlZE5vZGVzIGFycmF5IHdpdGggaW5kZXhlcyBvZiBkb21pbmF0ZWQgbm9k
ZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAg
dmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZG9taW5h
dG9yT2Zmc2V0XTsKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT09IGRvbWluYXRvckluZGV4
KSBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciBkb21pbmF0b3JQb3MgPSB0aGlzLl9ub2RlUG9z
aXRpb25bZG9taW5hdG9ySW5kZXhdOwotICAgICAgICAgICAgdmFyIGRvbWluYXRlZFJlZkluZGV4
ID0gaW5kZXhBcnJheVtkb21pbmF0b3JQb3NdOwotICAgICAgICAgICAgZG9taW5hdGVkUmVmSW5k
ZXggKz0gKC0tZG9taW5hdGVkTm9kZXNbZG9taW5hdGVkUmVmSW5kZXhdKTsKLSAgICAgICAgICAg
IGRvbWluYXRlZE5vZGVzW2RvbWluYXRlZFJlZkluZGV4XSA9IG5vZGVJbmRleDsKLSAgICAgICAg
fQotICAgIH0sCi0KICAgICBfZ2V0RG9taW5hdGVkSW5kZXg6IGZ1bmN0aW9uKG5vZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIHZhciBub2RlUG9zaXRpb24gPSB0aGlzLl9ub2RlUG9zaXRpb25bbm9k
ZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RvbWluYXRlZEluZGV4W25vZGVQb3NpdGlv
bl07CisgICAgICAgIGlmIChub2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBub2RlSW5kZXg6ICIgKyBub2RlSW5kZXgp
OworICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3REb21pbmF0ZWROb2RlSW5kZXhbbm9kZUluZGV4
IC8gdGhpcy5fbm9kZUZpZWxkQ291bnRdOwogICAgIH0sCiAKICAgICBfbWFya0ludmlzaWJsZUVk
Z2VzOiBmdW5jdGlvbigpCkBAIC0xMzI1LDcgKzEyNTksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsT2JqRWRn
ZS5ub2RlLmlzSGlkZGVuCiAgICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbE9iakVkZ2UuX2hh
c1N0cmluZ05hbWUKICAgICAgICAgICAgICAgICAgICAgJiYgKGdsb2JhbE9iakVkZ2UuX25hbWVP
ckluZGV4IGluIHByb3BOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzW2ds
b2JhbE9iakVkZ2UuX2VkZ2VzLl9zdGFydCArIGdsb2JhbE9iakVkZ2UuZWRnZUluZGV4ICsgdGhp
cy5fZWRnZVR5cGVPZmZzZXRdID0gdGhpcy5fZWRnZUludmlzaWJsZVR5cGU7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZ2xvYmFsT2JqRWRnZS5fZWRnZXMuX3N0
YXJ0ICsgZ2xvYmFsT2JqRWRnZS5lZGdlSW5kZXggKyB0aGlzLl9lZGdlVHlwZU9mZnNldF0gPSB0
aGlzLl9lZGdlSW52aXNpYmxlVHlwZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0s
CkBAIC0xMzgxLDExICsxMzE1LDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90
eXBlID0gewogICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXg7CiAgICAgICAg
ICAgICB0aGlzLl9mbGFnc1tub2RlSW5kZXhdIHw9IGZsYWc7CiAgICAgICAgICAgICB2YXIgZWRn
ZXNPZmZzZXQgPSBub2RlSW5kZXggKyB0aGlzLl9maXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAgICAg
ICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW25vZGVJbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdOworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSBub2RlLmVkZ2VzQ291bnQ7
CiAgICAgICAgICAgICBlZGdlLl9lZGdlcyA9IG5vZGUucmF3RWRnZXM7CiAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzQ291bnQ7ICsraikgewogICAgICAgICAgICAgICAgIGVk
Z2UuZWRnZUluZGV4ID0gaiAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKLSAgICAgICAgICAgICAg
ICB2YXIgbm9kZUluZGV4ID0gdGhpcy5fbm9kZXNbZWRnZXNPZmZzZXQgKyBlZGdlLmVkZ2VJbmRl
eCArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXRdOworICAgICAgICAgICAgICAgIHZhciBub2RlSW5k
ZXggPSBlZGdlLm5vZGVJbmRleDsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmxhZ3Nbbm9k
ZUluZGV4XSAmIGZsYWcpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmIChlZGdlLmlzSGlkZGVuIHx8IGVkZ2UuaXNJbnZpc2libGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5Lmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5q
cwppbmRleCA2YzJjYjQxLi43ZDc3NzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKQEAgLTkzLDcgKzkzLDcg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFdvcmtlciA9IGZ1bmN0aW9uKCkKICAgICB0aGlz
Ll9jYWxsYmFja3MgPSBbXTsKICAgICB0aGlzLl9wcmV2aW91c0NhbGxiYWNrcyA9IFtdOwogICAg
IC8vIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHdvcmtlcnMgaW4gQ2hyb21pdW0gRFJULgotICAg
IHRoaXMuX3dvcmtlciA9IHR5cGVvZiBJbnNwZWN0b3JUZXN0ID09PSAidW5kZWZpbmVkIiA/IG5l
dyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmVhbFdvcmtlcigpIDogbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RGYWtlV29ya2VyKCk7CisgICAgdGhpcy5fd29ya2VyID0gIG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RmFrZVdvcmtlcigpOwogICAgIHRoaXMuX3dvcmtlci5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGhpcy5fbWVzc2FnZVJlY2VpdmVkLmJpbmQodGhpcyks
IGZhbHNlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134316</attachid>
            <date>2012-03-28 09:35:41 -0700</date>
            <delta_ts>2012-03-28 22:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82453-20120328203538.patch</filename>
            <type>text/plain</type>
            <size>39852</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNjMGRjNDIwZjVjYmEz
OWZkM2MwMWMzNDBhMWJkZWY3ZTRmOGY0YS4uZGRhM2U4ZDlmMmJkMzJiMjM2NjEwYjI1NjRmYjNl
ZTJjY2IyMTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTI4ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHN3aXRjaCBoZWFwIHByb2ZpbGVyIGZyb250LWVuZCB0byBzZXBhcmF0ZSBzdG9yYWdlIG9m
IG5vZGVzIGFuZCBlZGdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODI0NTMKKworICAgICAgICBXaGVuIGhlYXAgc25hcHNob3QgaXMgY29tcGxldGVs
eSBsb2FkZWQgbW92ZSBub2RlcyBhbmQgY29udGFpbm1lbnQgZWRnZXMKKyAgICAgICAgaW50byB0
d28gc2VwYXJhdGUgYXJyYXlzLiBUaGlzIHdheSB3ZSBkb24ndCBuZWVkIF9ub2RlSW5kZXggYW5k
IF9ub2RlUG9zaXRpb24KKyAgICAgICAgbWFwcyB0byBnbyBmcm9tIG5vZGUgb2Zmc2V0IGluc2lk
ZSB0aGUgcmF3IHNuYXBzaG90IHRvIGl0cyBpbmRleCBhbmQgYmFjaywgaW5zdGVhZAorICAgICAg
ICB3ZSBtYXkganVzdCBkZWxldGUgbm9kZSBvZmZzZXQgYnkgbnVtYmVyIG9mIG5vZGUgZmllbGRz
IHRvIGdldCBub2RlIGluZGV4LiBBZnRlcgorICAgICAgICB0aGUgbm9kZXMgYW5kIGNvbnRhaW5t
ZW50IGVkZ2VzIGFyZSBzZXBhcmF0ZWQgb3JpZ2luYWwgYXJyYXkgKF9ub2RlcykgaXMgZHJvcHBl
ZC4KKyAgICAgICAgQWxsIGZyb250LWVuZCBjb2RlIHdhcyBzd2l0Y2hlZCB0byB0aGUgbmV3IHJl
cHJlc2VudGF0aW9uLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UucHJvdG90eXBlLmNsb25lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UucHJvdG90eXBlLnNldCBlZGdl
SW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZS5w
cm90b3R5cGUuZ2V0IF9lZGdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RS
ZXRhaW5lckVkZ2VJdGVyYXRvci5wcm90b3R5cGUuaGFzTmV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuZ2V0IGVkZ2VzQ291bnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLmdldCByYXdFZGdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuZ2V0IHJl
dGFpbmVycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5
cGUuZ2V0IF9ub2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5w
cm90b3R5cGUuX2ZpcnN0RWRnZUluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlLnByb3RvdHlwZS5fYWZ0ZXJMYXN0RWRnZUluZGV4KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQgX25leHROb2RlSW5kZXgpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2luaXQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX3NwbGl0Tm9kZXNBbmRD
b250YWlubWVudEVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlLl9jcmVhdGVPbmx5Tm9kZXNBcnJheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbm1lbnRFZGdlc0FycmF5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9idWlsZFJldGFpbmVycyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5kaXNwb3NlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLmdldCBtYXhOb2Rl
SWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2NhbGN1
bGF0ZU9iamVjdFRvV2luZG93RGlzdGFuY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuX2Jmcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90LnByb3RvdHlwZS5fYnVpbGREb21pbmF0ZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fZ2V0RG9taW5hdGVkSW5kZXgpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX21hcmtJbnZpc2libGVFZGdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fbWFya1F1ZXJp
YWJsZUhlYXBPYmplY3RzKToKKwogMjAxMi0wMy0yNyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVHJhbnNmZXIgd2hlZWwgZmxpbmcg
dmlhIFdlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKaW5kZXggODY2MDQyNmFkY2Jk
MTZmMzliM2YzYTQ0MzM5NjlhNDRmYTYzYWZlMC4uNWM0MDlmNWI0MGU4ZGU2MjJmMDE1MjE4NWQ1
YWFjNDljMTljZWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTM5MCwxNyArMzkwLDI3IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlSXRlcmF0b3IucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UgPSBmdW5jdGlvbihzbmFwc2hvdCwgcmV0
YWluZXJzLCByZXRhaW5lckluZGV4KQorV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVy
RWRnZSA9IGZ1bmN0aW9uKHNuYXBzaG90LCByZXRhaW5lZE5vZGVJbmRleCwgcmV0YWluZXJJbmRl
eCkKIHsKICAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBzaG90OwotICAgIHRoaXMuX3JldGFpbmVy
cyA9IHJldGFpbmVyczsKLSAgICB0aGlzLnJldGFpbmVySW5kZXggPSByZXRhaW5lckluZGV4IHx8
IDA7CisgICAgdGhpcy5fcmV0YWluZWROb2RlSW5kZXggPSByZXRhaW5lZE5vZGVJbmRleDsKKwor
ICAgIHZhciByZXRhaW5lckluZGV4UG9zaXRpb24gPSByZXRhaW5lZE5vZGVJbmRleCAvIHNuYXBz
aG90Ll9ub2RlRmllbGRDb3VudDsKKyAgICB0aGlzLl9maXJzdFJldGFpbmVyID0gc25hcHNob3Qu
X2ZpcnN0UmV0YWluZXJJbmRleFtyZXRhaW5lckluZGV4UG9zaXRpb25dOworICAgIHZhciBhZnRl
ckxhc3RSZXRhaW5lcjsKKyAgICBpZiAocmV0YWluZXJJbmRleFBvc2l0aW9uICsgMSA8IHNuYXBz
aG90Ll9maXJzdFJldGFpbmVySW5kZXgubGVuZ3RoKQorICAgICAgICBhZnRlckxhc3RSZXRhaW5l
ciA9IHNuYXBzaG90Ll9maXJzdFJldGFpbmVySW5kZXhbcmV0YWluZXJJbmRleFBvc2l0aW9uICsg
MV07CisgICAgZWxzZQorICAgICAgICBhZnRlckxhc3RSZXRhaW5lciA9IHNuYXBzaG90Ll9yZXRh
aW5pbmdFZGdlcy5sZW5ndGg7CisgICAgdGhpcy5fcmV0YWluZXJzQ291bnQgPSBhZnRlckxhc3RS
ZXRhaW5lciAtIHRoaXMuX2ZpcnN0UmV0YWluZXI7CisKKyAgICB0aGlzLnJldGFpbmVySW5kZXgg
PSByZXRhaW5lckluZGV4OwogfQogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJF
ZGdlLnByb3RvdHlwZSA9IHsKICAgICBjbG9uZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3Nu
YXBzaG90LCB0aGlzLl9yZXRhaW5lcnMsIHRoaXMucmV0YWluZXJJbmRleCk7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSh0aGlzLl9zbmFw
c2hvdCwgdGhpcy5fcmV0YWluZWROb2RlSW5kZXgsIHRoaXMucmV0YWluZXJJbmRleCk7CiAgICAg
fSwKIAogICAgIGdldCBoYXNTdHJpbmdOYW1lKCkKQEAgLTQ2OCw4ICs0NzgsOSBAQCBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKIAogICAgIHNldCBl
ZGdlSW5kZXgoZWRnZUluZGV4KQogICAgIHsKLSAgICAgICAgdGhpcy5fZ2xvYmFsRWRnZUluZGV4
ID0gdGhpcy5fcmV0YWluZXJzLml0ZW0oZWRnZUluZGV4KTsKLSAgICAgICAgdGhpcy5fbm9kZUlu
ZGV4ID0gdGhpcy5fc25hcHNob3QuX2ZpbmROZWFyZXN0Tm9kZUluZGV4KHRoaXMuX2dsb2JhbEVk
Z2VJbmRleCk7CisgICAgICAgIHZhciByZXRhaW5lckluZGV4ID0gdGhpcy5fZmlyc3RSZXRhaW5l
ciArIGVkZ2VJbmRleDsKKyAgICAgICAgdGhpcy5fZ2xvYmFsRWRnZUluZGV4ID0gdGhpcy5fc25h
cHNob3QuX3JldGFpbmluZ0VkZ2VzW3JldGFpbmVySW5kZXhdOworICAgICAgICB0aGlzLl9ub2Rl
SW5kZXggPSB0aGlzLl9zbmFwc2hvdC5fcmV0YWluaW5nTm9kZXNbcmV0YWluZXJJbmRleF07CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9lZGdlSW5zdGFuY2U7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9u
b2RlSW5zdGFuY2U7CiAgICAgfSwKQEAgLTQ4NCw3ICs0OTUsNyBAQCBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZSA9IHsKICAgICBnZXQgX2VkZ2UoKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9lZGdlSW5zdGFuY2UpIHsKLSAgICAgICAgICAgIHZhciBl
ZGdlSW5kZXggPSB0aGlzLl9nbG9iYWxFZGdlSW5kZXggLSB0aGlzLl9ub2RlSW5kZXggLSB0aGlz
Ll9zbmFwc2hvdC5fZmlyc3RFZGdlT2Zmc2V0OworICAgICAgICAgICAgdmFyIGVkZ2VJbmRleCA9
IHRoaXMuX2dsb2JhbEVkZ2VJbmRleCAtIHRoaXMuX25vZGUuX2ZpcnN0RWRnZUluZGV4KCk7CiAg
ICAgICAgICAgICB0aGlzLl9lZGdlSW5zdGFuY2UgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEVkZ2UodGhpcy5fc25hcHNob3QsIHRoaXMuX25vZGUucmF3RWRnZXMsIGVkZ2VJbmRleCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbnN0YW5jZTsKQEAgLTUxNCw3
ICs1MjUsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlSXRlcmF0b3Iu
cHJvdG90eXBlID0gewogCiAgICAgaGFzTmV4dDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMucmV0YWluZXIucmV0YWluZXJJbmRleCA8IHRoaXMucmV0YWluZXIuX3JldGFp
bmVycy5sZW5ndGg7CisgICAgICAgIHJldHVybiB0aGlzLnJldGFpbmVyLnJldGFpbmVySW5kZXgg
PCB0aGlzLnJldGFpbmVyLl9yZXRhaW5lcnNDb3VudDsKICAgICB9LAogCiAgICAgZ2V0IGluZGV4
KCkKQEAgLTU5Niw3ICs2MDcsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90
b3R5cGUgPSB7CiAKICAgICBnZXQgZWRnZXNDb3VudCgpCiAgICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9m
ZnNldF07CisgICAgICAgIHJldHVybiAodGhpcy5fYWZ0ZXJMYXN0RWRnZUluZGV4KCkgLSB0aGlz
Ll9maXJzdEVkZ2VJbmRleCgpKSAvIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CiAg
ICAgfSwKIAogICAgIGdldCBmbGFncygpCkBAIC02NTMsOCArNjY0LDcgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogCiAgICAgZ2V0IHJhd0VkZ2VzKCkKICAg
ICB7Ci0gICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IHRoaXMuX2ZpcnN0RWRnZUluZGV4KCk7
Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEFycmF5U2xpY2Uo
dGhpcy5fc25hcHNob3QuX25vZGVzLCBmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5kZXggKyB0
aGlzLmVkZ2VzQ291bnQgKiB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLl9z
bmFwc2hvdC5fY29udGFpbm1lbnRFZGdlcywgdGhpcy5fZmlyc3RFZGdlSW5kZXgoKSwgdGhpcy5f
YWZ0ZXJMYXN0RWRnZUluZGV4KCkpOwogICAgIH0sCiAKICAgICBnZXQgcmV0YWluZWRTaXplKCkK
QEAgLTY2NCw3ICs2NzQsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5
cGUgPSB7CiAKICAgICBnZXQgcmV0YWluZXJzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZUl0ZXJhdG9yKG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9zbmFw
c2hvdC5fcmV0YWluZXJzRm9yTm9kZSh0aGlzKSkpOworICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2VJdGVyYXRvcihuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5ub2RlSW5kZXgs
IDApKTsKICAgICB9LAogCiAgICAgZ2V0IHNlbGZTaXplKCkKQEAgLTY4NCwxNyArNjk0LDI1IEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBf
bm9kZXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9ub2RlczsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9vbmx5Tm9kZXM7CiAgICAgfSwKIAogICAgIF9m
aXJzdEVkZ2VJbmRleDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9k
ZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NuYXBzaG90Ll9vbmx5Tm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hv
dC5fZWRnZXNDb3VudE9mZnNldF07CisgICAgfSwKKworICAgIF9hZnRlckxhc3RFZGdlSW5kZXg6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gdGhpcy5fbmV4
dE5vZGVJbmRleDsKKyAgICAgICAgaWYgKG5leHROb2RlSW5kZXggPCB0aGlzLl9zbmFwc2hvdC5f
b25seU5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fb25s
eU5vZGVzW25leHROb2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF0K
KyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsK
ICAgICB9LAogCiAgICAgZ2V0IF9uZXh0Tm9kZUluZGV4KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9maXJzdEVkZ2VJbmRleCgpICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNo
b3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ICsgdGhp
cy5fc25hcHNob3QuX25vZGVGaWVsZENvdW50OwogICAgIH0sCiAKICAgICBfdHlwZTogZnVuY3Rp
b24oKQpAQCAtNzUzLDcgKzc3MSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QgPSBmdW5j
dGlvbihwcm9maWxlKQogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAg
ICAgX2luaXQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3Jvb3ROb2RlSW5kZXgg
PSAxOworICAgICAgICB0aGlzLl9yb290Tm9kZUluZGV4ID0gMTsgLy8gRmlyc3QgY2VsbCBjb250
YWluZWQgbWV0YWRhdGEsIG5vdyB3ZSBzaG91bGQgc2tpcCBpdC4KICAgICAgICAgdmFyIG1ldGEg
PSB0aGlzLl9tZXRhTm9kZTsKICAgICAgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLmZp
ZWxkcy5pbmRleE9mKCJ0eXBlIik7CiAgICAgICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gbWV0
YS5maWVsZHMuaW5kZXhPZigibmFtZSIpOwpAQCAtNzg5LDE1ICs4MDcsMTggQEAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZXRhY2hlZERPTVRy
ZWVOb2RlOiAyLAogICAgICAgICB9OwogCisgICAgICAgIHRoaXMuX3NwbGl0Tm9kZXNBbmRDb250
YWlubWVudEVkZ2VzKCk7CisgICAgICAgIHRoaXMuX3Jvb3ROb2RlSW5kZXggPSAwOworCiAgICAg
ICAgIHRoaXMuX21hcmtJbnZpc2libGVFZGdlcygpOwotICAgICAgICB0aGlzLl9idWlsZE5vZGVJ
bmRleCgpOwogICAgICAgICB0aGlzLl9idWlsZFJldGFpbmVycygpOwotICAgICAgICB0aGlzLl9i
dWlsZERvbWluYXRlZE5vZGVzKCk7CisgICAgICAgIGlmICh0aGlzLl9kb21pbmF0b3JPZmZzZXQg
IT09IC0xKSAvLyBGb3IgdGVzdHMgd2hlcmUgd2UgbWF5IG5vdCBoYXZlIGRvbWluYXRvciBmaWVs
ZC4KKyAgICAgICAgICAgIHRoaXMuX2J1aWxkRG9taW5hdGVkTm9kZXMoKQogICAgICAgICB0aGlz
Ll9jYWxjdWxhdGVGbGFncygpOwogICAgICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRv
d0Rpc3RhbmNlKCk7CiAgICAgfSwKIAotICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1
bmN0aW9uKCkKKyAgICBfc3BsaXROb2Rlc0FuZENvbnRhaW5tZW50RWRnZXM6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIC8vIEVzdGltYXRlIG51bWJlciBvZiBub2Rlcy4KICAgICAgICAgdmFy
IHRvdGFsRWRnZUNvdW50ID0gMDsKQEAgLTgwOCwxNiArODI5LDE3IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgdG90YWxFZGdlQ291bnQgKz0g
ZWRnZXNDb3VudDsKICAgICAgICAgICAgIGluZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCAr
IGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CiAgICAgICAgIH0KLSAgICAgICAg
dGhpcy5fY3JlYXRlT25seU5vZGVzQXJyYXkodG90YWxOb2RlQ291bnQpOwotICAgICAgICB0aGlz
Ll9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXkodG90YWxFZGdlQ291bnQpOwotICAgICAgICB0
aGlzLl9jcmVhdGVSZXRhaW5tZW50RWRnZXNBcnJheSh0b3RhbE5vZGVDb3VudCwgdG90YWxFZGdl
Q291bnQpOwotICAgICAgICB0aGlzLl9yZXN0b3JlTm9kZVR5cGVzKCk7CisgICAgICAgIHRoaXMu
bm9kZUNvdW50ID0gdG90YWxOb2RlQ291bnQ7CisgICAgICAgIHRoaXMuX2VkZ2VDb3VudCA9IHRv
dGFsRWRnZUNvdW50OworICAgICAgICB0aGlzLl9jcmVhdGVPbmx5Tm9kZXNBcnJheSgpOworICAg
ICAgICB0aGlzLl9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXkoKTsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX25vZGVzOwogICAgIH0sCiAKLSAgICBfY3JlYXRlT25seU5vZGVzQXJyYXk6IGZ1bmN0
aW9uKHRvdGFsTm9kZUNvdW50KQorICAgIF9jcmVhdGVPbmx5Tm9kZXNBcnJheTogZnVuY3Rpb24o
KQogICAgIHsKICAgICAgICAgLy8gQ29weSBub2RlcyB0byB0aGVpciBvd24gYXJyYXkuCi0gICAg
ICAgIHRoaXMuX29ubHlOb2RlcyA9IG5ldyBVaW50MzJBcnJheSh0b3RhbE5vZGVDb3VudCAqIHRo
aXMuX25vZGVGaWVsZENvdW50KTsKKyAgICAgICAgdGhpcy5fb25seU5vZGVzID0gbmV3IFVpbnQz
MkFycmF5KHRoaXMubm9kZUNvdW50ICogdGhpcy5fbm9kZUZpZWxkQ291bnQpOwogICAgICAgICB2
YXIgZHN0SW5kZXggPSAwOwogICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUlu
ZGV4OwogICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKQEAg
LTgzNywxMCArODU5LDEwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0g
ewogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXk6
IGZ1bmN0aW9uKHRvdGFsRWRnZUNvdW50KQorICAgIF9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJy
YXk6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIENvcHkgZWRnZXMgdG8gdGhlaXIgb3du
IGFycmF5LgotICAgICAgICB0aGlzLl9jb250YWlubWVudEVkZ2VzID0gbmV3IFVpbnQzMkFycmF5
KHRvdGFsRWRnZUNvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50KTsKKyAgICAgICAgdGhpcy5f
Y29udGFpbm1lbnRFZGdlcyA9IG5ldyBVaW50MzJBcnJheSh0aGlzLl9lZGdlQ291bnQgKiB0aGlz
Ll9lZGdlRmllbGRzQ291bnQpOwogICAgICAgICB2YXIgZWRnZUFycmF5SW5kZXggPSAwOwogICAg
ICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OwogICAgICAgICB3aGlsZSAo
c3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKQEAgLTg2NSwxNCArODg3LDIwIEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwK
IAotICAgIF9jcmVhdGVSZXRhaW5tZW50RWRnZXNBcnJheTogZnVuY3Rpb24odG90YWxOb2RlQ291
bnQsIHRvdGFsRWRnZUNvdW50KQorICAgIF9idWlsZFJldGFpbmVyczogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXMgPSBuZXcgVWludDMyQXJyYXkodG90YWxF
ZGdlQ291bnQpOwotICAgICAgICAvLyBJbmRleCBvZiB0aGUgZmlyc3QgcmV0YWluZXIgaW4gdGhl
IF9yZXRhaW5pbmdOb2RlcyBhcnJheS4gQWRkcmVzc2VkIGJ5IHJldGFpbmVkIG5vZGUgaW5kZXgu
Ci0gICAgICAgIHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleCA9IG5ldyBVaW50MzJBcnJheSh0b3Rh
bE5vZGVDb3VudCk7Ci0KLSAgICAgICAgZm9yICh2YXIgdG9Ob2RlSW5kZXggPSB0aGlzLl9lZGdl
VG9Ob2RlT2Zmc2V0OyB0b05vZGVJbmRleCA8IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMubGVuZ3Ro
OyB0b05vZGVJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQpCi0gICAgICAgICAgICArK3Ro
aXMuX2ZpcnN0UmV0YWluZXJJbmRleFt0aGlzLl9jb250YWlubWVudEVkZ2VzW3RvTm9kZUluZGV4
XV07CisgICAgICAgIHRoaXMuX3JldGFpbmluZ05vZGVzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMu
X2VkZ2VDb3VudCk7CisgICAgICAgIHRoaXMuX3JldGFpbmluZ0VkZ2VzID0gbmV3IFVpbnQzMkFy
cmF5KHRoaXMuX2VkZ2VDb3VudCk7CisgICAgICAgIC8vIEluZGV4IG9mIHRoZSBmaXJzdCByZXRh
aW5lciBpbiB0aGUgX3JldGFpbmluZ05vZGVzIGFuZCBfcmV0YWluaW5nRWRnZXMKKyAgICAgICAg
Ly8gYXJyYXlzLiBBZGRyZXNzZWQgYnkgcmV0YWluZWQgbm9kZSBpbmRleC4KKyAgICAgICAgdGhp
cy5fZmlyc3RSZXRhaW5lckluZGV4ID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50KTsK
KworICAgICAgICBmb3IgKHZhciB0b05vZGVGaWVsZEluZGV4ID0gdGhpcy5fZWRnZVRvTm9kZU9m
ZnNldDsgdG9Ob2RlRmllbGRJbmRleCA8IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMubGVuZ3RoOyB0
b05vZGVGaWVsZEluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgeworICAgICAgICAgICAg
dmFyIHRvTm9kZUluZGV4ID0gdGhpcy5fY29udGFpbm1lbnRFZGdlc1t0b05vZGVGaWVsZEluZGV4
XTsKKyAgICAgICAgICAgIGlmICh0b05vZGVJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50KQor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b05vZGVJbmRleCAiICsg
dG9Ob2RlSW5kZXgpOworICAgICAgICAgICAgKyt0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9O
b2RlSW5kZXggLyB0aGlzLl9ub2RlRmllbGRDb3VudF07CisgICAgICAgIH0KICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGZpcnN0VW51c2VkUmV0YWluZXJTbG90ID0gMDsgaSA8IHRoaXMuX2ZpcnN0
UmV0YWluZXJJbmRleC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdmFyIHJldGFpbmVyc0Nv
dW50ID0gdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4W2ldOwogICAgICAgICAgICAgdGhpcy5fZmly
c3RSZXRhaW5lckluZGV4W2ldID0gZmlyc3RVbnVzZWRSZXRhaW5lclNsb3Q7CkBAIC04ODEsNyAr
OTA5LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KIAogICAgICAgICB2YXIgc3JjTm9kZUluZGV4ID0gMDsKLSAgICAgICAgdmFyIG5leHROb2Rl
Rmlyc3RFZGdlSW5kZXggPSB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0OworICAgICAgICB2YXIgbmV4
dE5vZGVGaXJzdEVkZ2VJbmRleCA9IHRoaXMuX29ubHlOb2Rlc1t0aGlzLl9lZGdlc0NvdW50T2Zm
c2V0XTsKICAgICAgICAgd2hpbGUgKHNyY05vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5n
dGgpIHsKICAgICAgICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IG5leHROb2RlRmlyc3RFZGdl
SW5kZXg7CiAgICAgICAgICAgICB2YXIgbmV4dE5vZGVJbmRleCA9IHNyY05vZGVJbmRleCArIHRo
aXMuX25vZGVGaWVsZENvdW50OwpAQCAtODkwLDQwICs5MTgsMzEgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMubGVuZ3RoOwogICAgICAgICAgICAgZm9y
ICh2YXIgZWRnZUluZGV4ID0gZmlyc3RFZGdlSW5kZXg7IGVkZ2VJbmRleCA8IG5leHROb2RlRmly
c3RFZGdlSW5kZXg7IGVkZ2VJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQpIHsKICAgICAg
ICAgICAgICAgICB2YXIgdG9Ob2RlSW5kZXggPSB0aGlzLl9jb250YWlubWVudEVkZ2VzW2VkZ2VJ
bmRleCArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXRdOwotICAgICAgICAgICAgICAgIHZhciBmaXJz
dFJldGFpbmVyU2xvdEluZGV4ID0gdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4W3RvTm9kZUluZGV4
XTsKKyAgICAgICAgICAgICAgICBpZiAodG9Ob2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3Vu
dCkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRvTm9kZUlu
ZGV4ICIgKyB0b05vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgdmFyIGZpcnN0UmV0YWluZXJT
bG90SW5kZXggPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXggLyB0aGlzLl9u
b2RlRmllbGRDb3VudF07CiAgICAgICAgICAgICAgICAgdmFyIG5leHRVbnVzZWRSZXRhaW5lclNs
b3RJbmRleCA9IGZpcnN0UmV0YWluZXJTbG90SW5kZXggKyAoLS10aGlzLl9yZXRhaW5pbmdOb2Rl
c1tmaXJzdFJldGFpbmVyU2xvdEluZGV4XSk7CiAgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWlu
aW5nTm9kZXNbbmV4dFVudXNlZFJldGFpbmVyU2xvdEluZGV4XSA9IHNyY05vZGVJbmRleDsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5pbmdFZGdlc1tuZXh0VW51c2VkUmV0YWluZXJTbG90
SW5kZXhdID0gZWRnZUluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3JjTm9kZUlu
ZGV4ID0gbmV4dE5vZGVJbmRleDsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBfcmVzdG9yZU5v
ZGVUeXBlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNyY0luZGV4ID0gdGhpcy5f
cm9vdE5vZGVJbmRleDsKLSAgICAgICAgd2hpbGUgKHNyY0luZGV4IDwgdGhpcy5fbm9kZXMubGVu
Z3RoKSB7Ci0gICAgICAgICAgICB2YXIgc3JjTm9kZVR5cGVJbmRleCA9IHNyY0luZGV4ICsgdGhp
cy5fbm9kZVR5cGVPZmZzZXQ7Ci0gICAgICAgICAgICB2YXIgbmV3Tm9kZUluZGV4ID0gdGhpcy5f
bm9kZXNbc3JjTm9kZVR5cGVJbmRleF07Ci0gICAgICAgICAgICB0aGlzLl9ub2Rlc1tzcmNOb2Rl
VHlwZUluZGV4XSA9IHRoaXMuX29ubHlOb2Rlc1tuZXdOb2RlSW5kZXggKyB0aGlzLl9ub2RlVHlw
ZU9mZnNldF07Ci0gICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW3NyY0lu
ZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07Ci0gICAgICAgICAgICBzcmNJbmRleCArPSB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50
OwotICAgICAgICB9Ci0gICAgfSwKLQogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlczsKICAgICAgICAgZGVsZXRlIHRoaXMuX3N0cmluZ3M7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9yZXRhaW5lcnM7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9y
ZXRhaW5lckluZGV4OwotICAgICAgICBkZWxldGUgdGhpcy5fbm9kZUluZGV4OworICAgICAgICBk
ZWxldGUgdGhpcy5fcmV0YWluaW5nRWRnZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXRhaW5p
bmdOb2RlczsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleDsKICAgICAg
ICAgaWYgKHRoaXMuX2FnZ3JlZ2F0ZXMpIHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hZ2dy
ZWdhdGVzOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FnZ3JlZ2F0ZXNTb3J0ZWRGbGFnczsK
ICAgICAgICAgfQogICAgICAgICBkZWxldGUgdGhpcy5fYmFzZU5vZGVJZHM7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRl
ZEluZGV4OworICAgICAgICBkZWxldGUgdGhpcy5fZmlyc3REb21pbmF0ZWROb2RlSW5kZXg7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9mbGFnczsKICAgICAgICAgZGVsZXRlIHRoaXMuX2Rpc3RhbmNl
c1RvV2luZG93OwogICAgIH0sCkBAIC05MzMsMTEgKzk1Miw2IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3ROb2RlSXRlcmF0b3IodGhpcy5yb290Tm9kZSk7CiAgICAgfSwKIAotICAgIGdl
dCBub2RlQ291bnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ZXMubGVu
Z3RoIC0gMTsKLSAgICB9LAotCiAgICAgbm9kZUZpZWxkVmFsdWVzQnlJbmRleDogZnVuY3Rpb24o
ZmllbGROYW1lLCBpbmRleGVzKQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcyk7CkBAIC05NTksMTAgKzk3Myw4IEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBpZiAodHlwZW9mIHRo
aXMuX21heE5vZGVJZCA9PT0gIm51bWJlciIpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWF4
Tm9kZUlkOwogICAgICAgICB0aGlzLl9tYXhOb2RlSWQgPSAwOwotICAgICAgICB2YXIgbm9kZSA9
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLCB0aGlzLm5vZGVJbmRleGVz
WzBdKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLm5vZGVDb3VudDsgaSA8IGw7
ICsraSkgewotICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVzW2ld
OwotICAgICAgICAgICAgdmFyIGlkID0gbm9kZS5pZDsKKyAgICAgICAgZm9yICh2YXIgbm9kZUlk
SW5kZXggPSB0aGlzLl9ub2RlSWRPZmZzZXQ7IG5vZGVJZEluZGV4IDwgdGhpcy5fb25seU5vZGVz
Lmxlbmd0aDsgbm9kZUlkSW5kZXggKz0gdGhpcy5fbm9kZUZpZWxkQ291bnQpIHsKKyAgICAgICAg
ICAgIHZhciBpZCA9IHRoaXMuX29ubHlOb2Rlc1tub2RlSWRJbmRleF07CiAgICAgICAgICAgICBp
ZiAoKGlkICUgMikgJiYgaWQgPiB0aGlzLl9tYXhOb2RlSWQpCiAgICAgICAgICAgICAgICAgdGhp
cy5fbWF4Tm9kZUlkID0gaWQ7CiAgICAgICAgIH0KQEAgLTk3OSwxMyArOTkxLDYgQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLnJv
b3ROb2RlLnJldGFpbmVkU2l6ZTsKICAgICB9LAogCi0gICAgX3JldGFpbmVyc0Zvck5vZGU6IGZ1
bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICB2YXIgcmV0SW5kZXhGcm9tID0gdGhpcy5fZ2V0
UmV0YWluZXJJbmRleChub2RlLm5vZGVJbmRleCk7Ci0gICAgICAgIHZhciByZXRJbmRleFRvID0g
dGhpcy5fZ2V0UmV0YWluZXJJbmRleChub2RlLl9uZXh0Tm9kZUluZGV4KTsKLSAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLl9yZXRhaW5l
cnMsIHJldEluZGV4RnJvbSwgcmV0SW5kZXhUbyk7Ci0gICAgfSwKLQogICAgIF9kb21pbmF0ZWRO
b2Rlc09mTm9kZTogZnVuY3Rpb24obm9kZSkKICAgICB7CiAgICAgICAgIHZhciBkb21pbmF0ZWRJ
bmRleEZyb20gPSB0aGlzLl9nZXREb21pbmF0ZWRJbmRleChub2RlLm5vZGVJbmRleCk7CkBAIC0x
MDI5LDYyICsxMDM0LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVzOwogICAgIH0sCiAKLSAgICBfYnVpbGRSZXRhaW5l
cnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlSW5kZXhlcyA9IHRoaXMubm9k
ZUluZGV4ZXM7Ci0gICAgICAgIHZhciBub2RlUG9zaXRpb25zID0gdGhpcy5fbm9kZVBvc2l0aW9u
OwotICAgICAgICB2YXIgbm9kZUNvdW50ID0gdGhpcy5ub2RlQ291bnQ7Ci0gICAgICAgIHZhciBu
b2RlcyA9IHRoaXMuX25vZGVzOwotCi0gICAgICAgIC8vIEJ1aWxkcyB1cCB0d28gYXJyYXlzOgot
ICAgICAgICAvLyAgLSAiYmFja1JlZnNBcnJheSIgaXMgYSBjb250aW51b3VzIGFycmF5LCB3aGVy
ZSBlYWNoIG5vZGUgb3ducyBhbgotICAgICAgICAvLyAgICBpbnRlcnZhbCAoY2FuIGJlIGVtcHR5
KSB3aXRoIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzLgotICAgICAgICAvLyAgLSAiaW5k
ZXhBcnJheSIgaXMgYW4gYXJyYXkgb2YgaW5kZXhlcyBpbiB0aGUgImJhY2tSZWZzQXJyYXkiCi0g
ICAgICAgIC8vICAgIHdpdGggdGhlIHNhbWUgcG9zaXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4
LgotICAgICAgICB2YXIgaW5kZXhBcnJheSA9IHRoaXMuX3JldGFpbmVySW5kZXggPSBuZXcgVWlu
dDMyQXJyYXkobm9kZUNvdW50ICsgMSk7Ci0gICAgICAgIHZhciBlZGdlc0NvdW50T2Zmc2V0ID0g
dGhpcy5fZWRnZXNDb3VudE9mZnNldDsKLSAgICAgICAgdmFyIGZpcnN0RWRnZU9mZnNldCA9IHRo
aXMuX2ZpcnN0RWRnZU9mZnNldDsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZHNDb3VudCA9IHRoaXMu
X2VkZ2VGaWVsZHNDb3VudDsKLSAgICAgICAgdmFyIGVkZ2VUb05vZGVPZmZzZXQgPSB0aGlzLl9l
ZGdlVG9Ob2RlT2Zmc2V0OwotICAgICAgICB2YXIgYmFja1JlZnNDb3VudCA9IDA7Ci0gICAgICAg
IC8vIENvdW50IHRoZSBudW1iZXIgb2YgcmV0YWluZXJzIGZvciBlYWNoIG5vZGUKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIG5v
ZGVJbmRleCA9IG5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgdmFyIGVkZ2VzT2Zmc2V0ID0g
bm9kZUluZGV4ICsgZmlyc3RFZGdlT2Zmc2V0ICsgZWRnZVRvTm9kZU9mZnNldDsKLSAgICAgICAg
ICAgIHZhciBlZGdlc0NvdW50ID0gbm9kZXNbbm9kZUluZGV4ICsgZWRnZXNDb3VudE9mZnNldF07
Ci0gICAgICAgICAgICBiYWNrUmVmc0NvdW50ICs9IGVkZ2VzQ291bnQ7Ci0gICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzQ291bnQ7ICsraikgewotICAgICAgICAgICAgICB2YXIg
dGFyZ2V0Tm9kZUluZGV4ID0gbm9kZXNbaiAqIGVkZ2VGaWVsZHNDb3VudCArIGVkZ2VzT2Zmc2V0
XTsKLSAgICAgICAgICAgICAgKytpbmRleEFycmF5W25vZGVQb3NpdGlvbnNbdGFyZ2V0Tm9kZUlu
ZGV4XV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGJhY2tSZWZzQXJy
YXkgPSB0aGlzLl9yZXRhaW5lcnMgPSBuZXcgVWludDMyQXJyYXkoYmFja1JlZnNDb3VudCk7Ci0g
ICAgICAgIC8vIFB1dCBpbiB0aGUgZmlyc3Qgc2xvdCBvZiBlYWNoIGJhY2tSZWZzQXJyYXkgc2xp
Y2UgdGhlIGNvdW50IG9mIGVudHJpZXMKLSAgICAgICAgLy8gdGhhdCB3aWxsIGJlIGZpbGxlZC4K
LSAgICAgICAgdmFyIGJhY2tSZWZzUG9zaXRpb24gPSAwOwotICAgICAgICAvLyBUaGUgb25lIGV4
dHJhIHNsb3QgaW4gdGhlIF9yZXRhaW5lckluZGV4IGFycmF5IGlzIHNldCB0byB0aGUKLSAgICAg
ICAgLy8gZW5kIG9mIF9yZXRhaW5lcnMgYXJyYXkuIEl0IGlzIHVzZWQgaW4gdGhlIHJldGFpbmVy
cyBpdGVyYXRvci4KLSAgICAgICAgZm9yIChpID0gMDsgaSA8PSBub2RlQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgYmFja1JlZnNDb3VudCA9IGJhY2tSZWZzQXJyYXlbYmFja1JlZnNQb3NpdGlv
bl0gPSBpbmRleEFycmF5W2ldOwotICAgICAgICAgICAgaW5kZXhBcnJheVtpXSA9IGJhY2tSZWZz
UG9zaXRpb247Ci0gICAgICAgICAgICBiYWNrUmVmc1Bvc2l0aW9uICs9IGJhY2tSZWZzQ291bnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHJldGFpbmVySW5kZXggPSB0aGlzLl9yZXRhaW5lcklu
ZGV4OwotICAgICAgICAvLyBGaWxsIHVwIHRoZSByZXRhaW5lcnMgYXJyYXkgd2l0aCBpbmRleGVz
IG9mIGVkZ2VzLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbm9kZUluZGV4ZXNbaV07Ci0gICAgICAgICAg
ICB2YXIgZWRnZXNPZmZzZXQgPSBub2RlSW5kZXggKyBmaXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAg
ICAgICB2YXIgZWRnZXNDb3VudCA9IG5vZGVzW25vZGVJbmRleCArIGVkZ2VzQ291bnRPZmZzZXRd
OwotICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlZGdlc0NvdW50OyArK2opIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZWRnZUluZGV4ID0gaiAqIGVkZ2VGaWVsZHNDb3VudCArIGVkZ2Vz
T2Zmc2V0OwotICAgICAgICAgICAgICAgIHZhciByZXROb2RlID0gbm9kZVBvc2l0aW9uc1tub2Rl
c1tlZGdlSW5kZXggKyBlZGdlVG9Ob2RlT2Zmc2V0XV07Ci0gICAgICAgICAgICAgICAgdmFyIHJl
dEluZGV4ID0gaW5kZXhBcnJheVtyZXROb2RlXTsKLSAgICAgICAgICAgICAgICB2YXIgYmFja1Jl
ZkluZGV4ID0gcmV0SW5kZXggKyAoLS1iYWNrUmVmc0FycmF5W3JldEluZGV4XSk7Ci0gICAgICAg
ICAgICAgICAgYmFja1JlZnNBcnJheVtiYWNrUmVmSW5kZXhdID0gZWRnZUluZGV4OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQogICAgIF9jYWxjdWxhdGVPYmplY3RUb1dpbmRv
d0Rpc3RhbmNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9kaXN0YW5jZXNUb1dp
bmRvdyA9IG5ldyBBcnJheSh0aGlzLm5vZGVDb3VudCk7CkBAIC0xMDk0LDYgKzEwNDMsOCBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9yICh2YXIg
aXRlciA9IHRoaXMucm9vdE5vZGUuZWRnZXM7IGl0ZXIuaGFzTmV4dCgpOyBpdGVyLm5leHQoKSkg
ewogICAgICAgICAgICAgdmFyIG5vZGUgPSBpdGVyLmVkZ2Uubm9kZTsKICAgICAgICAgICAgIGlm
IChub2RlLmlzV2luZG93KSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZUluZGV4ICUg
dGhpcy5fbm9kZUZpZWxkQ291bnQpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigiSW52YWxpZCBub2RlSW5kZXg6ICIgKyBub2RlLm5vZGVJbmRleCk7CiAgICAgICAgICAgICAg
ICAgbGlzdC5wdXNoKG5vZGUubm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICB0aGlzLl9kaXN0
YW5jZXNUb1dpbmRvd1tub2RlLm5vZGVJbmRleF0gPSAwOwogICAgICAgICAgICAgfQpAQCAtMTEw
MywxNCArMTA1NCwxNCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgLy8gYmZzIGZvciByb290CiAgICAgICAgIGxpc3QgPSBbXTsKICAgICAgICAgbGlz
dC5wdXNoKHRoaXMuX3Jvb3ROb2RlSW5kZXgpOwotICAgICAgICB0aGlzLl9kaXN0YW5jZXNUb1dp
bmRvd1t0aGlzLnJvb3ROb2RlLm5vZGVJbmRleF0gPSAwOworICAgICAgICB0aGlzLl9kaXN0YW5j
ZXNUb1dpbmRvd1t0aGlzLl9yb290Tm9kZUluZGV4XSA9IDA7CiAgICAgICAgIHRoaXMuX2Jmcyhs
aXN0KTsKICAgICB9LAogCiAgICAgX2JmczogZnVuY3Rpb24obGlzdCkKICAgICB7CiAgICAgICAg
IHZhciBpbmRleCA9IDA7Ci0gICAgICAgIHZhciBub2RlcyA9IHRoaXMuX25vZGVzOworICAgICAg
ICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzKTsKICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGlzdC5sZW5ndGgpIHsKICAgICAgICAgICAgIHZhciBub2Rl
SW5kZXggPSBsaXN0W2luZGV4KytdOyAvLyBzaGlmdCBnZW5lcmF0ZXMgdG9vIG11Y2ggZ2FyYmFn
ZS4KICAgICAgICAgICAgIGlmIChpbmRleCA+IDEwMDAwMCkgewpAQCAtMTExOCwxMCArMTA2OSwx
MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
ICAgICBpbmRleCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXIgZGlzdGFuY2Ug
PSB0aGlzLl9kaXN0YW5jZXNUb1dpbmRvd1tub2RlSW5kZXhdICsgMTsKLSAgICAgICAgICAgIHZh
ciBlZGdlc0NvdW50ID0gbm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07
Ci0gICAgICAgICAgICB2YXIgZWRnZVRvTm9kZUluZGV4ID0gbm9kZUluZGV4ICsgdGhpcy5fZmly
c3RFZGdlT2Zmc2V0ICsgdGhpcy5fZWRnZVRvTm9kZU9mZnNldDsKKyAgICAgICAgICAgIG5vZGUu
bm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSBub2Rl
LmVkZ2VzQ291bnQ7CisgICAgICAgICAgICB2YXIgZWRnZVRvTm9kZUluZGV4ID0gbm9kZS5fZmly
c3RFZGdlSW5kZXgoKSArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXQ7CiAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGVkZ2VzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBj
aGlsZE5vZGVJbmRleCA9IG5vZGVzW2VkZ2VUb05vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
dmFyIGNoaWxkTm9kZUluZGV4ID0gdGhpcy5fY29udGFpbm1lbnRFZGdlc1tlZGdlVG9Ob2RlSW5k
ZXhdOworICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVJbmRleCAlIHRoaXMuX25vZGVGaWVs
ZENvdW50KQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2hp
bGROb2RlSW5kZXg6ICIgKyBjaGlsZE5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgZWRnZVRv
Tm9kZUluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGROb2RlSW5kZXggaW4gdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3cpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMTE0NCw5ICsxMDk4LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGFnZ3JlZ2F0ZXMgPSB7fTsKICAg
ICAgICAgdmFyIGFnZ3JlZ2F0ZXNCeUNsYXNzTmFtZSA9IHt9OwotICAgICAgICB2YXIgbm9kZSA9
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLCB0aGlzLm5vZGVJbmRleGVz
WzBdKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLm5vZGVDb3VudDsgaSA8IGw7
ICsraSkgewotICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVzW2ld
OworICAgICAgICBmb3IgKHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RO
b2RlKHRoaXMsIHRoaXMuX3Jvb3ROb2RlSW5kZXgpOyBub2RlLm5vZGVJbmRleCA8IHRoaXMuX29u
bHlOb2Rlcy5sZW5ndGg7IG5vZGUubm9kZUluZGV4ID0gbm9kZS5fbmV4dE5vZGVJbmRleCkgewog
ICAgICAgICAgICAgaWYgKHNob3VsZFNraXAobm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICB2YXIgY2xhc3NJbmRleCA9IG5vZGUuY2xhc3NJbmRleDsKQEAgLTEy
MTMsODQgKzExNjUsMzYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgfSwKIAotICAgIGdldCBub2RlSW5kZXhlcygpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbm9kZUluZGV4OwotICAgIH0sCi0KLSAgICBfYnVp
bGROb2RlSW5kZXg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjb3VudCA9IDA7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9yb290Tm9kZUluZGV4LCBsID0gdGhpcy5fbm9kZXMu
bGVuZ3RoOyBpIDwgbDsgKytjb3VudCkgewotICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0
aGlzLl9ub2Rlc1tpICsgdGhpcy5fZWRnZXNDb3VudE9mZnNldF07Ci0gICAgICAgICAgICBpICs9
IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291
bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIG5vZGVJbmRleCA9IG5ldyBVaW50MzJBcnJheShj
b3VudCArIDEpOwotICAgICAgICB2YXIgbm9kZVBvc2l0aW9uID0ge307Ci0gICAgICAgIGNvdW50
ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX3Jvb3ROb2RlSW5kZXgsIGwgPSB0aGlz
Ll9ub2Rlcy5sZW5ndGg7IGkgPCBsOyArK2NvdW50KSB7Ci0gICAgICAgICAgICBub2RlSW5kZXhb
Y291bnRdID0gaTsKLSAgICAgICAgICAgIG5vZGVQb3NpdGlvbltpXSA9IGNvdW50OwotICAgICAg
ICAgICAgdmFyIGVkZ2VzQ291bnQgPSB0aGlzLl9ub2Rlc1tpICsgdGhpcy5fZWRnZXNDb3VudE9m
ZnNldF07Ci0gICAgICAgICAgICBpICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291
bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZUluZGV4
W2NvdW50XSA9IHRoaXMuX25vZGVzLmxlbmd0aDsKLSAgICAgICAgbm9kZVBvc2l0aW9uW3RoaXMu
X25vZGVzLmxlbmd0aF0gPSBjb3VudDsKLSAgICAgICAgdGhpcy5fbm9kZUluZGV4ID0gbm9kZUlu
ZGV4OwotICAgICAgICB0aGlzLl9ub2RlUG9zaXRpb24gPSBub2RlUG9zaXRpb247Ci0gICAgfSwK
LQotICAgIF9maW5kTmVhcmVzdE5vZGVJbmRleDogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAg
ICAgICB2YXIgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKGluZGV4LCB0aGlzLl9ub2RlSW5kZXgsIHRo
aXMuX251bWJlcnNDb21wYXJhdG9yKTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IC1yZXN1bHQgLSAxOwotICAgICAgICAgICAgbm9kZUluZGV4ID0gdGhp
cy5fbm9kZUluZGV4W3Jlc3VsdF07Ci0gICAgICAgICAgICAvLyBCaW5hcnkgc2VhcmNoIGNhbiBy
ZXR1cm4gZWl0aGVyIG1heGltdW0gbG93ZXIgdmFsdWUsIG9yIG1pbmltdW0gaGlnaGVyIHZhbHVl
LgotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA+IGluZGV4KQotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IHRoaXMuX25vZGVJbmRleFtyZXN1bHQgLSAxXTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gdGhpcy5fbm9kZUluZGV4W3Jlc3VsdF07Ci0gICAg
ICAgIHJldHVybiBub2RlSW5kZXg7Ci0gICAgfSwKLQotICAgIF9nZXRSZXRhaW5lckluZGV4OiBm
dW5jdGlvbihub2RlSW5kZXgpCi0gICAgewotICAgICAgICB2YXIgbm9kZVBvc2l0aW9uID0gdGhp
cy5fbm9kZVBvc2l0aW9uW25vZGVJbmRleF07Ci0gICAgICAgIHJldHVybiB0aGlzLl9yZXRhaW5l
ckluZGV4W25vZGVQb3NpdGlvbl07Ci0gICAgfSwKLQogICAgIF9idWlsZERvbWluYXRlZE5vZGVz
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgbm9kZUNvdW50ID0gdGhpcy5ub2RlQ291
bnQ7Ci0gICAgICAgIC8vIEJ1aWxkcyB1cCB0d28gYXJyYXlzOgotICAgICAgICAvLyAgLSAiZG9t
aW5hdGVkTm9kZXMiIGlzIGEgY29udGludW91cyBhcnJheSwgd2hlcmUgZWFjaCBub2RlIG93bnMg
YW4KLSAgICAgICAgLy8gICAgaW50ZXJ2YWwgKGNhbiBiZSBlbXB0eSkgd2l0aCBjb3JyZXNwb25k
aW5nIGRvbWluYXRlZCBub2Rlcy4KLSAgICAgICAgLy8gIC0gImluZGV4QXJyYXkiIGlzIGFuIGFy
cmF5IG9mIGluZGV4ZXMgaW4gdGhlICJkb21pbmF0ZWROb2RlcyIKLSAgICAgICAgLy8gICAgd2l0
aCB0aGUgc2FtZSBwb3NpdGlvbnMgYXMgaW4gdGhlIF9ub2RlSW5kZXguCi0gICAgICAgIHZhciBp
bmRleEFycmF5ID0gdGhpcy5fZG9taW5hdGVkSW5kZXggPSBuZXcgVWludDMyQXJyYXkobm9kZUNv
dW50ICsgMSk7Ci0gICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgcmV0YWluZXJzIGZvciBl
YWNoIG5vZGUKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IHRoaXMubm9kZUluZGV4ZXNbaV07Ci0gICAgICAg
ICAgICB2YXIgZG9taW5hdG9ySW5kZXggPSB0aGlzLl9ub2Rlc1tub2RlSW5kZXggKyB0aGlzLl9k
b21pbmF0b3JPZmZzZXRdOworICAgICAgICB2YXIgaW5kZXhBcnJheSA9IHRoaXMuX2ZpcnN0RG9t
aW5hdGVkTm9kZUluZGV4ID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50ICsgMSk7Cisg
ICAgICAgIC8vIEFsbCBub2RlcyBleGNlcHQgdGhlIHJvb3QgaGF2ZSBkb21pbmF0b3JzLgorICAg
ICAgICB2YXIgZG9taW5hdGVkTm9kZXMgPSB0aGlzLl9kb21pbmF0ZWROb2RlcyA9IG5ldyBVaW50
MzJBcnJheSh0aGlzLm5vZGVDb3VudCAtIDEpOworCisgICAgICAgIC8vIENvdW50IHRoZSBudW1i
ZXIgb2YgZG9taW5hdGVkIG5vZGVzIGZvciBlYWNoIG5vZGUKKyAgICAgICAgZm9yICh2YXIgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aDsgbm9kZUluZGV4
ICs9IHRoaXMuX25vZGVGaWVsZENvdW50KSB7CisgICAgICAgICAgICB2YXIgZG9taW5hdG9ySW5k
ZXggPSB0aGlzLl9vbmx5Tm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0XTsK
KyAgICAgICAgICAgIGlmIChkb21pbmF0b3JJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50KQor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgZG9taW5hdG9ySW5kZXggIiAr
IGRvbWluYXRvckluZGV4ICsgIiBub2RlSW5kZXggPSAiICsgbm9kZUluZGV4ICsgIiBub2RlQ291
bnQgPSAiICsgdGhpcy5ub2RlQ291bnQpOworICAgICAgICAgICAgLy8gU2tpcCByb290IG5vZGUu
IFdlIG1heSBzaW1wbGlmeSB0aGlzIGJ5IHN0YXJ0aW5nIGl0ZXJhdGlvbiBmcm9tIHNlY29uZCBu
b2RlLgogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA9PT0gZG9taW5hdG9ySW5kZXgpIGNvbnRp
bnVlOwotICAgICAgICAgICAgKytpbmRleEFycmF5W3RoaXMuX25vZGVQb3NpdGlvbltkb21pbmF0
b3JJbmRleF1dOworICAgICAgICAgICAgKytpbmRleEFycmF5W2RvbWluYXRvckluZGV4IC8gdGhp
cy5fbm9kZUZpZWxkQ291bnRdOwogICAgICAgICB9Ci0gICAgICAgIHZhciBkb21pbmF0ZWROb2Rl
cyA9IHRoaXMuX2RvbWluYXRlZE5vZGVzID0gbmV3IFVpbnQzMkFycmF5KG5vZGVDb3VudCAtIDEp
OwogICAgICAgICAvLyBQdXQgaW4gdGhlIGZpcnN0IHNsb3Qgb2YgZWFjaCBkb21pbmF0ZWROb2Rl
cyBzbGljZSB0aGUgY291bnQgb2YgZW50cmllcwogICAgICAgICAvLyB0aGF0IHdpbGwgYmUgZmls
bGVkLgotICAgICAgICB2YXIgZG9taW5hdGVkUG9zaXRpb24gPSAwOwotICAgICAgICBmb3IgKGkg
PSAwOyBpIDw9IG5vZGVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgZG9taW5hdGVkQ291
bnQgPSBkb21pbmF0ZWROb2Rlc1tkb21pbmF0ZWRQb3NpdGlvbl0gPSBpbmRleEFycmF5W2ldOwot
ICAgICAgICAgICAgaW5kZXhBcnJheVtpXSA9IGRvbWluYXRlZFBvc2l0aW9uOwotICAgICAgICAg
ICAgZG9taW5hdGVkUG9zaXRpb24gKz0gZG9taW5hdGVkQ291bnQ7CisgICAgICAgIHZhciBmaXJz
dERvbWluYXRlZE5vZGVJbmRleCA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdGhpcy5u
b2RlQ291bnQ7ICsraSkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRlZENvdW50ID0gZG9taW5h
dGVkTm9kZXNbZmlyc3REb21pbmF0ZWROb2RlSW5kZXhdID0gaW5kZXhBcnJheVtpXTsKKyAgICAg
ICAgICAgIGluZGV4QXJyYXlbaV0gPSBmaXJzdERvbWluYXRlZE5vZGVJbmRleDsKKyAgICAgICAg
ICAgIGZpcnN0RG9taW5hdGVkTm9kZUluZGV4ICs9IGRvbWluYXRlZENvdW50OwogICAgICAgICB9
CiAgICAgICAgIC8vIEZpbGwgdXAgdGhlIGRvbWluYXRlZE5vZGVzIGFycmF5IHdpdGggaW5kZXhl
cyBvZiBkb21pbmF0ZWQgbm9kZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVz
W2ldOwotICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fbm9kZXNbbm9kZUlu
ZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0XTsKKyAgICAgICAgZm9yICh2YXIgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aDsgbm9kZUluZGV4ICs9IHRo
aXMuX25vZGVGaWVsZENvdW50KSB7CisgICAgICAgICAgICB2YXIgZG9taW5hdG9ySW5kZXggPSB0
aGlzLl9vbmx5Tm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zmc2V0XTsKKyAgICAg
ICAgICAgIGlmIChkb21pbmF0b3JJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50KQorICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgZG9taW5hdG9ySW5kZXggIiArIGRvbWlu
YXRvckluZGV4KTsKICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPT09IGRvbWluYXRvckluZGV4
KSBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciBkb21pbmF0b3JQb3MgPSB0aGlzLl9ub2RlUG9z
aXRpb25bZG9taW5hdG9ySW5kZXhdOworICAgICAgICAgICAgdmFyIGRvbWluYXRvclBvcyA9IGRv
bWluYXRvckluZGV4IC8gdGhpcy5fbm9kZUZpZWxkQ291bnQ7CiAgICAgICAgICAgICB2YXIgZG9t
aW5hdGVkUmVmSW5kZXggPSBpbmRleEFycmF5W2RvbWluYXRvclBvc107CiAgICAgICAgICAgICBk
b21pbmF0ZWRSZWZJbmRleCArPSAoLS1kb21pbmF0ZWROb2Rlc1tkb21pbmF0ZWRSZWZJbmRleF0p
OwogICAgICAgICAgICAgZG9taW5hdGVkTm9kZXNbZG9taW5hdGVkUmVmSW5kZXhdID0gbm9kZUlu
ZGV4OwpAQCAtMTI5OSw4ICsxMjAzLDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90
b3R5cGUgPSB7CiAKICAgICBfZ2V0RG9taW5hdGVkSW5kZXg6IGZ1bmN0aW9uKG5vZGVJbmRleCkK
ICAgICB7Ci0gICAgICAgIHZhciBub2RlUG9zaXRpb24gPSB0aGlzLl9ub2RlUG9zaXRpb25bbm9k
ZUluZGV4XTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2RvbWluYXRlZEluZGV4W25vZGVQb3NpdGlv
bl07CisgICAgICAgIGlmIChub2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBub2RlSW5kZXg6ICIgKyBub2RlSW5kZXgp
OworICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3REb21pbmF0ZWROb2RlSW5kZXhbbm9kZUluZGV4
IC8gdGhpcy5fbm9kZUZpZWxkQ291bnRdOwogICAgIH0sCiAKICAgICBfbWFya0ludmlzaWJsZUVk
Z2VzOiBmdW5jdGlvbigpCkBAIC0xMzI1LDcgKzEyMzAsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsT2JqRWRn
ZS5ub2RlLmlzSGlkZGVuCiAgICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbE9iakVkZ2UuX2hh
c1N0cmluZ05hbWUKICAgICAgICAgICAgICAgICAgICAgJiYgKGdsb2JhbE9iakVkZ2UuX25hbWVP
ckluZGV4IGluIHByb3BOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzW2ds
b2JhbE9iakVkZ2UuX2VkZ2VzLl9zdGFydCArIGdsb2JhbE9iakVkZ2UuZWRnZUluZGV4ICsgdGhp
cy5fZWRnZVR5cGVPZmZzZXRdID0gdGhpcy5fZWRnZUludmlzaWJsZVR5cGU7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZ2xvYmFsT2JqRWRnZS5fZWRnZXMuX3N0
YXJ0ICsgZ2xvYmFsT2JqRWRnZS5lZGdlSW5kZXggKyB0aGlzLl9lZGdlVHlwZU9mZnNldF0gPSB0
aGlzLl9lZGdlSW52aXNpYmxlVHlwZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0s
CkBAIC0xMzgxLDExICsxMjg2LDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90
eXBlID0gewogICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBub2RlSW5kZXg7CiAgICAgICAg
ICAgICB0aGlzLl9mbGFnc1tub2RlSW5kZXhdIHw9IGZsYWc7CiAgICAgICAgICAgICB2YXIgZWRn
ZXNPZmZzZXQgPSBub2RlSW5kZXggKyB0aGlzLl9maXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAgICAg
ICB2YXIgZWRnZXNDb3VudCA9IHRoaXMuX25vZGVzW25vZGVJbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdOworICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQgPSBub2RlLmVkZ2VzQ291bnQ7
CiAgICAgICAgICAgICBlZGdlLl9lZGdlcyA9IG5vZGUucmF3RWRnZXM7CiAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzQ291bnQ7ICsraikgewogICAgICAgICAgICAgICAgIGVk
Z2UuZWRnZUluZGV4ID0gaiAqIHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKLSAgICAgICAgICAgICAg
ICB2YXIgbm9kZUluZGV4ID0gdGhpcy5fbm9kZXNbZWRnZXNPZmZzZXQgKyBlZGdlLmVkZ2VJbmRl
eCArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXRdOworICAgICAgICAgICAgICAgIHZhciBub2RlSW5k
ZXggPSBlZGdlLm5vZGVJbmRleDsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmxhZ3Nbbm9k
ZUluZGV4XSAmIGZsYWcpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmIChlZGdlLmlzSGlkZGVuIHx8IGVkZ2UuaXNJbnZpc2libGUpCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzU2
N2U0OWJhOTcxNWM3NmRjODk0MzRmNzUzNWFmMmY0N2Y5MjQ5ZC4uZGMzZTljYzk5MzAwMjFhNTc4
NzI1NmE2ZWI5YmYyNGQxYjkxMWY3OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTI4
ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHN3aXRjaCBoZWFwIHByb2ZpbGVyIGZyb250LWVuZCB0byBzZXBhcmF0ZSBzdG9y
YWdlIG9mIG5vZGVzIGFuZCBlZGdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI0NTMKKworICAgICAgICBVcGRhdGVkIGhlYXAgcHJvZmlsZXIgdGVz
dCBhZnRlciBzd2l0Y2hpbmcgaGVhcCBwcm9maWxlciBmcm9udC1lbmQKKyAgICAgICAgdG8gdGhl
IG5ldyByZXByZXNlbnRhdGlvbiBvZiBub2RlcyBhbmQgZWRnZXMuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvZmlsZXIvaGVh
cC1zbmFwc2hvdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hl
YXAtc25hcHNob3QtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxpemVfSGVhcFNuYXBzaG90VGVz
dC5JbnNwZWN0b3JUZXN0LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2tPYmplY3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWw6CisKIDIwMTItMDMtMjcgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmll
d2VkOiByZWJhc2VsaW5lZCBjaHJvbWl1bSBleHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQK
aW5kZXggZDNkZTU2ODE2MGNiN2ZhNGE2OTIxN2Q1YmI1ZTlmMjE3NGU4YjBkNy4uNGViZDMyNTcx
Y2Y1ODFlNGI3MjZiNjg5ZTljN2U4OTBiOGRkZjQ4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LWV4cGVjdGVkLnR4dApAQCAt
MTMsNiArMTMsOCBAQCBSdW5uaW5nOiBoZWFwU25hcHNob3ROb2RlQW5kRWRnZVRlc3QKIAogUnVu
bmluZzogaGVhcFNuYXBzaG90U2ltcGxlVGVzdAogCitSdW5uaW5nOiB0ZXN0Tm9kZXNBbmRFZGdl
c1NlcGFyYXRpb25JbkhlYXBTbmFwc2hvdAorCiBSdW5uaW5nOiBoZWFwU25hcHNob3RSZXRhaW5l
cnNUZXN0CiAKIFJ1bm5pbmc6IGhlYXBTbmFwc2hvdEFnZ3JlZ2F0ZXNUZXN0CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcwppbmRl
eCAzZTc1MDAxMTUxNmNjMDEwMzZmMGZiNTViNzg3NzMxOWQzYjNjYTRiLi5mYWMwOTZiODI0ODdl
ODc5YTFiODEwZWIxMTlmZWM5MWExOWYxZjBlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanMKQEAgLTgsNiArOCw3IEBAIElu
c3BlY3RvclRlc3QuY3JlYXRlSGVhcFNuYXBzaG90TW9ja09iamVjdCA9IGZ1bmN0aW9uKCkKICAg
ICAgICAgX25vZGVOYW1lT2Zmc2V0OiAxLAogICAgICAgICBfZWRnZXNDb3VudE9mZnNldDogMiwK
ICAgICAgICAgX2ZpcnN0RWRnZU9mZnNldDogMywKKyAgICAgICAgX25vZGVGaWVsZENvdW50OiAz
LAogICAgICAgICBfZWRnZUZpZWxkc0NvdW50OiAzLAogICAgICAgICBfZWRnZVR5cGVPZmZzZXQ6
IDAsCiAgICAgICAgIF9lZGdlTmFtZU9mZnNldDogMSwKQEAgLTIwLDE5ICsyMSwyNCBAQCBJbnNw
ZWN0b3JUZXN0LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2tPYmplY3QgPSBmdW5jdGlvbigpCiAgICAg
ICAgIC8vIFJlcHJlc2VudHMgdGhlIGZvbGxvd2luZyBncmFwaDoKICAgICAgICAgLy8gICAobnVt
YmVycyBpbiBwYXJlbnRoZXNlcyBpbmRpY2F0ZSBub2RlIG9mZnNldCkKICAgICAgICAgLy8gCi0g
ICAgICAgIC8vICAgICAgICAgQSAoOSkgLS1hYy0gQyAoMjcpIC1jZS0gRSgzNikKKyAgICAgICAg
Ly8gICAgICAgICBBICgzKSAtLWFjLSBDICg5KSAtY2UtIEUoMTUpCiAgICAgICAgIC8vICAgICAg
IGEvfCAgICAgICAgIC8KICAgICAgICAgLy8gICIiICgwKSAxICAgICAgYmMKICAgICAgICAgLy8g
ICAgICAgYlx2ICAgIC8KLSAgICAgICAgLy8gICAgICAgICBCICgxOCkgLWJkLSBEICgzMykKKyAg
ICAgICAgLy8gICAgICAgICBCICg2KSAtYmQtIEQgKDEyKQogICAgICAgICAvLwotICAgICAgICBf
bm9kZXM6IFsKLSAgICAgICAgICAgIDAsIDAsIDIsIDEsICA2LCAgOSwgMSwgIDcsIDE4LAotICAg
ICAgICAgICAgMSwgMSwgMiwgMCwgIDEsIDE4LCAxLCAgOCwgMjcsCi0gICAgICAgICAgICAxLCAy
LCAyLCAxLCAgOSwgMjcsIDEsIDEwLCAzMywKLSAgICAgICAgICAgIDEsIDMsIDEsIDEsIDExLCAz
NiwKLSAgICAgICAgICAgIDEsIDQsIDAsCi0gICAgICAgICAgICAxLCA1LCAwXSwKKyAgICAgICAg
X29ubHlOb2RlczogWworICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgIDEsIDEsIDYs
CisgICAgICAgICAgICAxLCAyLCAxMiwKKyAgICAgICAgICAgIDEsIDMsIDE4LAorICAgICAgICAg
ICAgMSwgNCwgMjEsCisgICAgICAgICAgICAxLCA1LCAyMV0sCisgICAgICAgIF9jb250YWlubWVu
dEVkZ2VzOiBbCisgICAgICAgICAgICAxLCAgNiwgMywgMSwgIDcsIDYsCisgICAgICAgICAgICAw
LCAgMSwgNiwgMSwgIDgsIDksCisgICAgICAgICAgICAxLCAgOSwgOSwgMSwgMTAsIDEyLAorICAg
ICAgICAgICAgMSwgMTEsIDE1XSwKICAgICAgICAgX3N0cmluZ3M6IFsiIiwgIkEiLCAiQiIsICJD
IiwgIkQiLCAiRSIsICJhIiwgImIiLCAiYWMiLCAiYmMiLCAiYmQiLCAiY2UiXQogICAgIH07CiB9
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNo
b3QuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0
bWwKaW5kZXggMzdiZGFkYWUxYWUxYzIwZWZiZDQ3YjA5NjQ2MmYwZWM1OWUzYTMyYS4uYWY3NDFh
MGU2OWZjMmI3ZTRlNzljOTcwNDAzODM5MjVkNmE5MDUyMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5odG1sCkBAIC0xNCw3ICsxNCw3IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMo
IiIsIG5vZGVSb290Lm5hbWUsICJyb290IG5hbWUiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYXNzZXJ0RXF1YWxzKCJoaWRkZW4iLCBub2RlUm9vdC50eXBlLCAicm9vdCB0eXBlIik7CiAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygyLCBub2RlUm9vdC5lZGdlc0Nv
dW50LCAicm9vdCBlZGdlcyIpOwotICAgICAgICAgICAgdmFyIG5vZGVFID0gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3ROb2RlKHNuYXBzaG90LCAzNik7CisgICAgICAgICAgICB2YXIgbm9k
ZUUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUoc25hcHNob3QsIDE1KTsKICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCJFIiwgbm9kZUUubmFtZSwgIkUg
bmFtZSIpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoIm9iamVjdCIs
IG5vZGVFLnR5cGUsICJFIHR5cGUiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
RXF1YWxzKDAsIG5vZGVFLmVkZ2VzQ291bnQsICJFIGVkZ2VzIik7CkBAIC01NSw3ICs1NSw3IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgZm9yIChpdGVyYXRvci5maXJzdCgpOyBpdGVy
YXRvci5oYXNOZXh0KCk7IGl0ZXJhdG9yLm5leHQoKSkKICAgICAgICAgICAgICAgICBuYW1lcy5w
dXNoKGl0ZXJhdG9yLml0ZW0ubmFtZSk7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dEVxdWFscygiYSxiIiwgbmFtZXMuam9pbigiLCIpLCAiZWRnZSBpdGVyYXRvciIpOwotICAgICAg
ICAgICAgdmFyIG5vZGVFID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHNuYXBz
aG90LCAzNik7CisgICAgICAgICAgICB2YXIgbm9kZUUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGUoc25hcHNob3QsIDE1KTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0RXF1YWxzKGZhbHNlLCBub2RlRS5lZGdlcy5oYXNOZXh0KCksICJlbXB0eSBlZGdlIGl0ZXJh
dG9yIik7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0sCkBAIC05NSw2ICs5NSw1MiBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgfSwKIAorICAg
ICAgICBmdW5jdGlvbiB0ZXN0Tm9kZXNBbmRFZGdlc1NlcGFyYXRpb25JbkhlYXBTbmFwc2hvdChu
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc25hcHNob3QgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdChJbnNwZWN0b3JUZXN0LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2soKSk7
CisgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU5ld0luZGV4KCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB2YXIgY29waWVkTm9kZUluZGV4ID0gMDsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBub2Rlc0l0ZXIgPSB0aGlzLl9hbGxOb2Rlczsgbm9kZXNJdGVyLmhhc05leHQo
KTsgbm9kZXNJdGVyLm5leHQoKSwgY29waWVkTm9kZUluZGV4ICs9IHRoaXMuX25vZGVGaWVsZENv
dW50KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbE5vZGUgPSBub2Rlc0l0ZXIu
bm9kZTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvcGllZE5vZGUgPSB0aGlzLl9vbmx5Tm9k
ZXNbY29waWVkTm9kZUluZGV4XTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxO
b2RlLmlkICE9PSB0aGlzLl9vbmx5Tm9kZXNbY29waWVkTm9kZUluZGV4ICsgdGhpcy5fbm9kZUlk
T2Zmc2V0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSWQgbWlz
bWF0Y2g6ICIgKyBvcmlnaW5hbE5vZGUuaWQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChv
cmlnaW5hbE5vZGUuX3R5cGUoKSAhPT0gdGhpcy5fb25seU5vZGVzW2NvcGllZE5vZGVJbmRleCAr
IHRoaXMuX25vZGVUeXBlT2Zmc2V0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiTm9kZSB0eXBlIG1pc21hdGNoOiAiICsgb3JpZ2luYWxOb2RlLmlkKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb250YWlubWVudCBlZGdlcy4KKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gdGhpcy5fb25seU5vZGVzW2NvcGllZE5v
ZGVJbmRleCArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOworICAgICAgICAgICAgICAgICAgICB2
YXIgbmV4dE5vZGVJbmRleCA9IGNvcGllZE5vZGVJbmRleCArIHRoaXMuX25vZGVGaWVsZENvdW50
OworICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEVkZ2VJbmRleCA9IChuZXh0Tm9kZUluZGV4
IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyB0aGlzLl9vbmx5Tm9kZXNbbmV4dE5vZGVJbmRleCArIHRoaXMuX2VkZ2VzQ291
bnRPZmZzZXRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5f
Y29udGFpbm1lbnRFZGdlcy5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdp
bmFsTm9kZS5lZGdlc0NvdW50ICE9PSAobGFzdEVkZ2VJbmRleCAtIGZpcnN0RWRnZUluZGV4KSAv
IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiRWRnZXMgY291bnQgbWlzbWF0Y2g6ICIgKyBvcmlnaW5hbE5vZGUuaWQpOworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGVkZ2VJdGVyID0gb3JpZ2luYWxOb2RlLmVkZ2Vz
LCBjb3BpZWRFZGdlSW5kZXggPSBmaXJzdEVkZ2VJbmRleDsgZWRnZUl0ZXIuaGFzTmV4dCgpOyBl
ZGdlSXRlci5uZXh0KCksIGNvcGllZEVkZ2VJbmRleCArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlSXRlci5lZGdlLl90eXBlKCkgIT09
IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbY29waWVkRWRnZUluZGV4ICsgdGhpcy5fZWRnZVR5cGVP
ZmZzZXRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRWRn
ZSB0eXBlIG1pc21hdGNoOiAiICsgZWRnZUl0ZXIuZWRnZS50eXBlKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHRvTm9kZUluZGV4ID0gdGhpcy5fY29udGFpbm1lbnRFZGdlc1tjb3Bp
ZWRFZGdlSW5kZXggKyB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlZGdlSXRlci5lZGdlLm5vZGUuaWQgIT09IHRoaXMuX29ubHlOb2Rlc1t0b05v
ZGVJbmRleCArIHRoaXMuX25vZGVJZE9mZnNldF0pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJFZGdlIHRvIG5vZGUgaWQgbWlzbWF0Y2g6ICIgKyBlZGdlSXRl
ci5lZGdlLm5vZGUuaWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YWxp
ZGF0ZU5ld0luZGV4LmNhbGwoc25hcHNob3QpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KGUpOworICAgICAgICAgICAg
ICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
IH0sCisKKwogICAgICAgICBmdW5jdGlvbiBoZWFwU25hcHNob3RSZXRhaW5lcnNUZXN0KG5leHQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzbmFwc2hvdCA9IG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90KEluc3BlY3RvclRlc3QuY3JlYXRlSGVhcFNuYXBzaG90TW9jaygpKTsKQEAg
LTEzMywxMSArMTc5LDEyIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhleHBlY3RlZEFnZ3JlZ2F0ZVtwYXJhbWV0ZXJdLCBh
Z2dyZWdhdGVbcGFyYW1ldGVyXSwgInBhcmFtZXRlciAiICsgcGFyYW1ldGVyICsgIiBvZiBcIiIg
KyBuYW1lICsgIlwiIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXIgZXhwZWN0ZWRJ
bmRleGVzID0gewotICAgICAgICAgICAgICAgIkEiOiBbMTRdLAotICAgICAgICAgICAgICAgIkIi
OiBbMjddLAotICAgICAgICAgICAgICAgIkMiOiBbNDBdLAotICAgICAgICAgICAgICAgIkQiOiBb
NTBdLAotICAgICAgICAgICAgICAgIkUiOiBbNTddCisgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEluZGV4IG9mIGNvcnJlc3BvbmRpbmcgbm9kZSBpbiB0aGUgcmF3IHNuYXBzaG90OgorICAg
ICAgICAgICAgICAgIkEiOiBbN10sICAvLyAxNAorICAgICAgICAgICAgICAgIkIiOiBbMTRdLCAv
LyAyNworICAgICAgICAgICAgICAgIkMiOiBbMjFdLCAvLyA0MAorICAgICAgICAgICAgICAgIkQi
OiBbMjhdLCAvLyA1MAorICAgICAgICAgICAgICAgIkUiOiBbMzVdICAvLyA1NwogICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgIHZhciBpbmRleGVzID0gc25hcHNob3QuYWdncmVnYXRlcyh0cnVl
KTsKICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gYWdncmVnYXRlcykgewpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NzUxZjhhODdlZDM3NDhkNGM5OWJlZTc3NThhNDIwZTg2ZDk4NTI2Li44YTkwZjc0
MDgyODk5NWVhOTlkNGM4ODMxYTlhYzZjODgwMDg5MTE5IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEyLTAzLTI4ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHN3aXRjaCBoZWFwIHByb2ZpbGVyIGZyb250
LWVuZCB0byBzZXBhcmF0ZSBzdG9yYWdlIG9mIG5vZGVzIGFuZCBlZGdlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI0NTMKKworICAgICAgICBVcGRh
dGVkIGhlYXAgcHJvZmlsZXIgcGVyZm9ybWFuY2UgdGVzdCBhZnRlciBoZWFwIHByb2ZpbGVyIGZy
b250LWVuZAorICAgICAgICBjaGFuZ2VzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2RldGFpbGVkLWhlYXBzaG90cy1zbW9rZS10
ZXN0Lmh0bWw6CisKIDIwMTItMDMtMjcgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9w
ZW5ib3NzYS5vcmc+CiAKICAgICAgICAgQWRkIGEgcGVyZiB0ZXN0IHdoaWNoIHVwZGF0ZXMgdGhl
IHZhbHVlIG9mIGFuIGFscmVhZHkgZGVjbGFyZWQgQ1NTIHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9pbnNwZWN0b3IvZGV0YWlsZWQtaGVhcHNob3RzLXNtb2tlLXRlc3Qu
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvaW5zcGVjdG9yL2RldGFpbGVkLWhlYXBzaG90cy1zbW9r
ZS10ZXN0Lmh0bWwKaW5kZXggMTJjNWU0NmI1OGQzNzJkYjViNTFmM2Q3MmMzZmMxYWQ3NzNjNzFi
Mi4uNGU3ZjdhM2ExODlhYTc1NDVlZGVlMGRjODFhNTE0NGIxNTAyNmYxYSAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9pbnNwZWN0b3IvZGV0YWlsZWQtaGVhcHNob3RzLXNtb2tlLXRlc3Qu
aHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL2luc3BlY3Rvci9kZXRhaWxlZC1oZWFwc2hvdHMt
c21va2UtdGVzdC5odG1sCkBAIC0yNSw5ICsyNSw5IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5tZWFzdXJlRnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdC5wcm90b3R5cGUsICJfY2FsY3VsYXRlRmxhZ3MiKTsKICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QubWVhc3VyZUZ1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBl
LCAiX2J1aWxkQWdncmVnYXRlcyIpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5tZWFzdXJl
RnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUsICJfY2FsY3VsYXRl
T2JqZWN0VG9XaW5kb3dEaXN0YW5jZSIpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5tZWFz
dXJlRnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUsICJfYnVpbGRO
b2RlSW5kZXgiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubWVhc3VyZUZ1bmN0aW9uKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLCAiX21hcmtEZXRhY2hlZERPTVRyZWVO
b2RlcyIpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5tZWFzdXJlRnVuY3Rpb24oV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUsICJfbWFya1F1ZXJpYWJsZUhlYXBPYmplY3Rz
Iik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm1lYXN1cmVGdW5jdGlvbihXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSwgIl9zcGxpdE5vZGVzQW5kQ29udGFpbm1lbnRFZGdl
cyIpOwogCiAgICAgICAgICAgICB0aW1lci5maW5pc2goYmFja2VuZFRpbWVyQ29va2llKTsKICAg
ICAgICAgICAgIHRyYW5zZmVyVGltZXJDb29raWUgPSB0aW1lci5zdGFydCgidHJhbnNmZXItc25h
cHNob3QiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134500</attachid>
            <date>2012-03-28 22:38:30 -0700</date>
            <delta_ts>2012-03-29 04:54:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82453-20120329093828.patch</filename>
            <type>text/plain</type>
            <size>39898</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNjMGRjNDIwZjVjYmEz
OWZkM2MwMWMzNDBhMWJkZWY3ZTRmOGY0YS4uMTI2YTM0OWYwYWY0NWVlMWUwOTk1ODdjODIwYWM2
ZWI3MjViMDI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTAzLTI4ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHN3aXRjaCBoZWFwIHByb2ZpbGVyIGZyb250LWVuZCB0byBzZXBhcmF0ZSBzdG9yYWdlIG9m
IG5vZGVzIGFuZCBlZGdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODI0NTMKKworICAgICAgICBXaGVuIGhlYXAgc25hcHNob3QgaXMgY29tcGxldGVs
eSBsb2FkZWQgbW92ZSBub2RlcyBhbmQgY29udGFpbm1lbnQgZWRnZXMKKyAgICAgICAgaW50byB0
d28gc2VwYXJhdGUgYXJyYXlzLiBUaGlzIHdheSB3ZSBkb24ndCBuZWVkIF9ub2RlSW5kZXggYW5k
IF9ub2RlUG9zaXRpb24KKyAgICAgICAgbWFwcyB0byBnbyBmcm9tIG5vZGUgb2Zmc2V0IGluc2lk
ZSB0aGUgcmF3IHNuYXBzaG90IHRvIGl0cyBpbmRleCBhbmQgYmFjaywgaW5zdGVhZAorICAgICAg
ICB3ZSBtYXkganVzdCBkaXZpZGUgbm9kZSBvZmZzZXQgYnkgdGhlIG51bWJlciBvZiBub2RlIGZp
ZWxkcyB0byBnZXQgbm9kZSBpbmRleC4gQWZ0ZXIKKyAgICAgICAgdGhlIG5vZGVzIGFuZCBjb250
YWlubWVudCBlZGdlcyBhcmUgc2VwYXJhdGVkIG9yaWdpbmFsIGFycmF5IChfbm9kZXMpIGlzIGRy
b3BwZWQuCisgICAgICAgIEFsbCBmcm9udC1lbmQgY29kZSB3YXMgc3dpdGNoZWQgdG8gdGhlIG5l
dyByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZS5jbG9uZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlLnByb3RvdHlwZS5zZXQg
ZWRnZUluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVk
Z2UucHJvdG90eXBlLmdldCBfZWRnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UmV0YWluZXJFZGdlSXRlcmF0b3IucHJvdG90eXBlLmhhc05leHQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLmdldCBlZGdlc0NvdW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQgcmF3RWRn
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLmdl
dCByZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJv
dG90eXBlLmdldCBfbm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGUucHJvdG90eXBlLl9maXJzdEVkZ2VJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuX2FmdGVyTGFzdEVkZ2VJbmRleCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuZ2V0IF9uZXh0Tm9kZUluZGV4
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9pbml0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9zcGxpdE5vZGVz
QW5kQ29udGFpbm1lbnRFZGdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
LnByb3RvdHlwZS5fY3JlYXRlT25seU5vZGVzQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2NyZWF0ZUNvbnRhaW5tZW50RWRnZXNBcnJheSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fYnVpbGRSZXRhaW5l
cnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZGlzcG9z
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5nZXQgbWF4
Tm9kZUlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9j
YWxjdWxhdGVPYmplY3RUb1dpbmRvd0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlLl9iZnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuX2J1aWxkRG9taW5hdGVkTm9kZXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2dldERvbWluYXRlZEluZGV4KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9tYXJrSW52aXNpYmxlRWRn
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX21hcmtR
dWVyaWFibGVIZWFwT2JqZWN0cyk6CisKIDIwMTItMDMtMjcgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFRyYW5zZmVyIHdoZWVsIGZs
aW5nIHZpYSBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IDg2NjA0MjZh
ZGNiZDE2ZjM5YjNmM2E0NDMzOTY5YTQ0ZmE2M2FmZTAuLjRjZWMzYzNkZTRkZjcxNWJmZjA5MmFi
ZGJkOTk0NDk2MzIxMDAyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC0zOTAsMTcgKzM5MCwyMiBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90RWRnZUl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1X
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlID0gZnVuY3Rpb24oc25hcHNob3Qs
IHJldGFpbmVycywgcmV0YWluZXJJbmRleCkKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRh
aW5lckVkZ2UgPSBmdW5jdGlvbihzbmFwc2hvdCwgcmV0YWluZWROb2RlSW5kZXgsIHJldGFpbmVy
SW5kZXgpCiB7CiAgICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICB0aGlzLl9yZXRh
aW5lcnMgPSByZXRhaW5lcnM7Ci0gICAgdGhpcy5yZXRhaW5lckluZGV4ID0gcmV0YWluZXJJbmRl
eCB8fCAwOworICAgIHRoaXMuX3JldGFpbmVkTm9kZUluZGV4ID0gcmV0YWluZWROb2RlSW5kZXg7
CisKKyAgICB2YXIgcmV0YWluZWROb2RlT3JkaW5hbCA9IHJldGFpbmVkTm9kZUluZGV4IC8gc25h
cHNob3QuX25vZGVGaWVsZENvdW50OworICAgIHRoaXMuX2ZpcnN0UmV0YWluZXIgPSBzbmFwc2hv
dC5fZmlyc3RSZXRhaW5lckluZGV4W3JldGFpbmVkTm9kZU9yZGluYWxdOworICAgIHRoaXMuX3Jl
dGFpbmVyc0NvdW50ID0gc25hcHNob3QuX2ZpcnN0UmV0YWluZXJJbmRleFtyZXRhaW5lZE5vZGVP
cmRpbmFsICsgMV0gLSB0aGlzLl9maXJzdFJldGFpbmVyOworCisgICAgdGhpcy5yZXRhaW5lcklu
ZGV4ID0gcmV0YWluZXJJbmRleDsKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFp
bmVyRWRnZS5wcm90b3R5cGUgPSB7CiAgICAgY2xvbmU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZSh0aGlz
Ll9zbmFwc2hvdCwgdGhpcy5fcmV0YWluZXJzLCB0aGlzLnJldGFpbmVySW5kZXgpOworICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UodGhpcy5f
c25hcHNob3QsIHRoaXMuX3JldGFpbmVkTm9kZUluZGV4LCB0aGlzLnJldGFpbmVySW5kZXgpOwog
ICAgIH0sCiAKICAgICBnZXQgaGFzU3RyaW5nTmFtZSgpCkBAIC00NjgsOCArNDczLDkgQEAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZS5wcm90b3R5cGUgPSB7CiAKICAgICBz
ZXQgZWRnZUluZGV4KGVkZ2VJbmRleCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2dsb2JhbEVkZ2VJ
bmRleCA9IHRoaXMuX3JldGFpbmVycy5pdGVtKGVkZ2VJbmRleCk7Ci0gICAgICAgIHRoaXMuX25v
ZGVJbmRleCA9IHRoaXMuX3NuYXBzaG90Ll9maW5kTmVhcmVzdE5vZGVJbmRleCh0aGlzLl9nbG9i
YWxFZGdlSW5kZXgpOworICAgICAgICB2YXIgcmV0YWluZXJJbmRleCA9IHRoaXMuX2ZpcnN0UmV0
YWluZXIgKyBlZGdlSW5kZXg7CisgICAgICAgIHRoaXMuX2dsb2JhbEVkZ2VJbmRleCA9IHRoaXMu
X3NuYXBzaG90Ll9yZXRhaW5pbmdFZGdlc1tyZXRhaW5lckluZGV4XTsKKyAgICAgICAgdGhpcy5f
bm9kZUluZGV4ID0gdGhpcy5fc25hcHNob3QuX3JldGFpbmluZ05vZGVzW3JldGFpbmVySW5kZXhd
OwogICAgICAgICBkZWxldGUgdGhpcy5fZWRnZUluc3RhbmNlOwogICAgICAgICBkZWxldGUgdGhp
cy5fbm9kZUluc3RhbmNlOwogICAgIH0sCkBAIC00ODQsNyArNDkwLDcgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZS5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IF9lZGdlKCkK
ICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fZWRnZUluc3RhbmNlKSB7Ci0gICAgICAgICAgICB2
YXIgZWRnZUluZGV4ID0gdGhpcy5fZ2xvYmFsRWRnZUluZGV4IC0gdGhpcy5fbm9kZUluZGV4IC0g
dGhpcy5fc25hcHNob3QuX2ZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgICAgIHZhciBlZGdlSW5k
ZXggPSB0aGlzLl9nbG9iYWxFZGdlSW5kZXggLSB0aGlzLl9ub2RlLl9lZGdlSW5kZXhlc1N0YXJ0
KCk7CiAgICAgICAgICAgICB0aGlzLl9lZGdlSW5zdGFuY2UgPSBuZXcgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEVkZ2UodGhpcy5fc25hcHNob3QsIHRoaXMuX25vZGUucmF3RWRnZXMsIGVkZ2VJ
bmRleCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbnN0YW5jZTsKQEAg
LTUxNCw3ICs1MjAsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlSXRl
cmF0b3IucHJvdG90eXBlID0gewogCiAgICAgaGFzTmV4dDogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMucmV0YWluZXIucmV0YWluZXJJbmRleCA8IHRoaXMucmV0YWluZXIu
X3JldGFpbmVycy5sZW5ndGg7CisgICAgICAgIHJldHVybiB0aGlzLnJldGFpbmVyLnJldGFpbmVy
SW5kZXggPCB0aGlzLnJldGFpbmVyLl9yZXRhaW5lcnNDb3VudDsKICAgICB9LAogCiAgICAgZ2V0
IGluZGV4KCkKQEAgLTU5Niw3ICs2MDIsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZS5wcm90b3R5cGUgPSB7CiAKICAgICBnZXQgZWRnZXNDb3VudCgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXND
b3VudE9mZnNldF07CisgICAgICAgIHJldHVybiAodGhpcy5fZWRnZUluZGV4ZXNFbmQoKSAtIHRo
aXMuX2VkZ2VJbmRleGVzU3RhcnQoKSkgLyB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50
OwogICAgIH0sCiAKICAgICBnZXQgZmxhZ3MoKQpAQCAtNjUzLDggKzY1OSw3IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCByYXdFZGdlcygp
CiAgICAgewotICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXggPSB0aGlzLl9maXJzdEVkZ2VJbmRl
eCgpOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RBcnJheVNs
aWNlKHRoaXMuX3NuYXBzaG90Ll9ub2RlcywgZmlyc3RFZGdlSW5kZXgsIGZpcnN0RWRnZUluZGV4
ICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudCk7Cisg
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEFycmF5U2xpY2UodGhp
cy5fc25hcHNob3QuX2NvbnRhaW5tZW50RWRnZXMsIHRoaXMuX2VkZ2VJbmRleGVzU3RhcnQoKSwg
dGhpcy5fZWRnZUluZGV4ZXNFbmQoKSk7CiAgICAgfSwKIAogICAgIGdldCByZXRhaW5lZFNpemUo
KQpAQCAtNjY0LDcgKzY2OSw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIGdldCByZXRhaW5lcnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlSXRlcmF0b3IobmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5lckVkZ2UodGhpcy5fc25hcHNob3QsIHRoaXMuX3Nu
YXBzaG90Ll9yZXRhaW5lcnNGb3JOb2RlKHRoaXMpKSk7CisgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbmVyRWRnZUl0ZXJhdG9yKG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90UmV0YWluZXJFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLm5vZGVJbmRl
eCwgMCkpOwogICAgIH0sCiAKICAgICBnZXQgc2VsZlNpemUoKQpAQCAtNjg0LDE3ICs2ODksMjUg
QEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogCiAgICAgZ2V0
IF9ub2RlcygpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX25vZGVzOwor
ICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX29ubHlOb2RlczsKICAgICB9LAogCi0gICAg
X2ZpcnN0RWRnZUluZGV4OiBmdW5jdGlvbigpCisgICAgX2VkZ2VJbmRleGVzU3RhcnQ6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBz
aG90Ll9maXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fb25s
eU5vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VzQ291bnRPZmZzZXRd
OworICAgIH0sCisKKyAgICBfZWRnZUluZGV4ZXNFbmQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gdGhpcy5fbmV4dE5vZGVJbmRleDsKKyAgICAgICAgaWYg
KG5leHROb2RlSW5kZXggPCB0aGlzLl9zbmFwc2hvdC5fb25seU5vZGVzLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fb25seU5vZGVzW25leHROb2RlSW5kZXggKyB0
aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nu
YXBzaG90Ll9jb250YWlubWVudEVkZ2VzLmxlbmd0aDsKICAgICB9LAogCiAgICAgZ2V0IF9uZXh0
Tm9kZUluZGV4KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9maXJzdEVkZ2VJbmRleCgp
ICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAg
ICAgICAgcmV0dXJuIHRoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVGaWVsZENv
dW50OwogICAgIH0sCiAKICAgICBfdHlwZTogZnVuY3Rpb24oKQpAQCAtNzUzLDcgKzc2Niw3IEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QgPSBmdW5jdGlvbihwcm9maWxlKQogV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgX2luaXQ6IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX3Jvb3ROb2RlSW5kZXggPSAxOworICAgICAgICB0aGlzLl9yb290
Tm9kZUluZGV4ID0gMTsgLy8gRmlyc3QgY2VsbCBjb250YWluZWQgbWV0YWRhdGEsIG5vdyB3ZSBz
aG91bGQgc2tpcCBpdC4KICAgICAgICAgdmFyIG1ldGEgPSB0aGlzLl9tZXRhTm9kZTsKICAgICAg
ICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJ0eXBlIik7CiAg
ICAgICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigibmFtZSIp
OwpAQCAtNzg5LDE1ICs4MDIsMTggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBkZXRhY2hlZERPTVRyZWVOb2RlOiAyLAogICAgICAgICB9Owog
CisgICAgICAgIHRoaXMuX3NwbGl0Tm9kZXNBbmRDb250YWlubWVudEVkZ2VzKCk7CisgICAgICAg
IHRoaXMuX3Jvb3ROb2RlSW5kZXggPSAwOworCiAgICAgICAgIHRoaXMuX21hcmtJbnZpc2libGVF
ZGdlcygpOwotICAgICAgICB0aGlzLl9idWlsZE5vZGVJbmRleCgpOwogICAgICAgICB0aGlzLl9i
dWlsZFJldGFpbmVycygpOwotICAgICAgICB0aGlzLl9idWlsZERvbWluYXRlZE5vZGVzKCk7Cisg
ICAgICAgIGlmICh0aGlzLl9kb21pbmF0b3JPZmZzZXQgIT09IC0xKSAvLyBGb3IgdGVzdHMgd2hl
cmUgd2UgbWF5IG5vdCBoYXZlIGRvbWluYXRvciBmaWVsZC4KKyAgICAgICAgICAgIHRoaXMuX2J1
aWxkRG9taW5hdGVkTm9kZXMoKQogICAgICAgICB0aGlzLl9jYWxjdWxhdGVGbGFncygpOwogICAg
ICAgICB0aGlzLl9jYWxjdWxhdGVPYmplY3RUb1dpbmRvd0Rpc3RhbmNlKCk7CiAgICAgfSwKIAot
ICAgIF9idWlsZENvbnRpbnVvdXNOb2RlQXJyYXk6IGZ1bmN0aW9uKCkKKyAgICBfc3BsaXROb2Rl
c0FuZENvbnRhaW5tZW50RWRnZXM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIEVzdGlt
YXRlIG51bWJlciBvZiBub2Rlcy4KICAgICAgICAgdmFyIHRvdGFsRWRnZUNvdW50ID0gMDsKQEAg
LTgwOCwxNiArODI0LDE3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdG90YWxFZGdlQ291bnQgKz0gZWRnZXNDb3VudDsKICAgICAgICAgICAg
IGluZGV4ICs9IHRoaXMuX2ZpcnN0RWRnZU9mZnNldCArIGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdl
RmllbGRzQ291bnQ7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fY3JlYXRlT25seU5vZGVzQXJy
YXkodG90YWxOb2RlQ291bnQpOwotICAgICAgICB0aGlzLl9jcmVhdGVDb250YWlubWVudEVkZ2Vz
QXJyYXkodG90YWxFZGdlQ291bnQpOwotICAgICAgICB0aGlzLl9jcmVhdGVSZXRhaW5tZW50RWRn
ZXNBcnJheSh0b3RhbE5vZGVDb3VudCwgdG90YWxFZGdlQ291bnQpOwotICAgICAgICB0aGlzLl9y
ZXN0b3JlTm9kZVR5cGVzKCk7CisgICAgICAgIHRoaXMubm9kZUNvdW50ID0gdG90YWxOb2RlQ291
bnQ7CisgICAgICAgIHRoaXMuX2VkZ2VDb3VudCA9IHRvdGFsRWRnZUNvdW50OworICAgICAgICB0
aGlzLl9jcmVhdGVPbmx5Tm9kZXNBcnJheSgpOworICAgICAgICB0aGlzLl9jcmVhdGVDb250YWlu
bWVudEVkZ2VzQXJyYXkoKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVzOwogICAgIH0sCiAK
LSAgICBfY3JlYXRlT25seU5vZGVzQXJyYXk6IGZ1bmN0aW9uKHRvdGFsTm9kZUNvdW50KQorICAg
IF9jcmVhdGVPbmx5Tm9kZXNBcnJheTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gQ29w
eSBub2RlcyB0byB0aGVpciBvd24gYXJyYXkuCi0gICAgICAgIHRoaXMuX29ubHlOb2RlcyA9IG5l
dyBVaW50MzJBcnJheSh0b3RhbE5vZGVDb3VudCAqIHRoaXMuX25vZGVGaWVsZENvdW50KTsKKyAg
ICAgICAgdGhpcy5fb25seU5vZGVzID0gbmV3IFVpbnQzMkFycmF5KHRoaXMubm9kZUNvdW50ICog
dGhpcy5fbm9kZUZpZWxkQ291bnQpOwogICAgICAgICB2YXIgZHN0SW5kZXggPSAwOwogICAgICAg
ICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4OwogICAgICAgICB3aGlsZSAoc3Jj
SW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKQEAgLTgzNywxMCArODU0LDEwIEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAot
ICAgIF9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXk6IGZ1bmN0aW9uKHRvdGFsRWRnZUNvdW50
KQorICAgIF9jcmVhdGVDb250YWlubWVudEVkZ2VzQXJyYXk6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIC8vIENvcHkgZWRnZXMgdG8gdGhlaXIgb3duIGFycmF5LgotICAgICAgICB0aGlzLl9j
b250YWlubWVudEVkZ2VzID0gbmV3IFVpbnQzMkFycmF5KHRvdGFsRWRnZUNvdW50ICogdGhpcy5f
ZWRnZUZpZWxkc0NvdW50KTsKKyAgICAgICAgdGhpcy5fY29udGFpbm1lbnRFZGdlcyA9IG5ldyBV
aW50MzJBcnJheSh0aGlzLl9lZGdlQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQpOwogICAg
ICAgICB2YXIgZWRnZUFycmF5SW5kZXggPSAwOwogICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlz
Ll9yb290Tm9kZUluZGV4OwogICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5s
ZW5ndGgpIHsKQEAgLTg2NSwyMyArODgyLDMwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3Qu
cHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9jcmVhdGVSZXRhaW5tZW50
RWRnZXNBcnJheTogZnVuY3Rpb24odG90YWxOb2RlQ291bnQsIHRvdGFsRWRnZUNvdW50KQorICAg
IF9idWlsZFJldGFpbmVyczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fcmV0YWlu
aW5nTm9kZXMgPSBuZXcgVWludDMyQXJyYXkodG90YWxFZGdlQ291bnQpOwotICAgICAgICAvLyBJ
bmRleCBvZiB0aGUgZmlyc3QgcmV0YWluZXIgaW4gdGhlIF9yZXRhaW5pbmdOb2RlcyBhcnJheS4g
QWRkcmVzc2VkIGJ5IHJldGFpbmVkIG5vZGUgaW5kZXguCi0gICAgICAgIHRoaXMuX2ZpcnN0UmV0
YWluZXJJbmRleCA9IG5ldyBVaW50MzJBcnJheSh0b3RhbE5vZGVDb3VudCk7Ci0KLSAgICAgICAg
Zm9yICh2YXIgdG9Ob2RlSW5kZXggPSB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0OyB0b05vZGVJbmRl
eCA8IHRoaXMuX2NvbnRhaW5tZW50RWRnZXMubGVuZ3RoOyB0b05vZGVJbmRleCArPSB0aGlzLl9l
ZGdlRmllbGRzQ291bnQpCi0gICAgICAgICAgICArK3RoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFt0
aGlzLl9jb250YWlubWVudEVkZ2VzW3RvTm9kZUluZGV4XV07Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwLCBmaXJzdFVudXNlZFJldGFpbmVyU2xvdCA9IDA7IGkgPCB0aGlzLl9maXJzdFJldGFpbmVy
SW5kZXgubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXMgPSBuZXcg
VWludDMyQXJyYXkodGhpcy5fZWRnZUNvdW50KTsKKyAgICAgICAgdGhpcy5fcmV0YWluaW5nRWRn
ZXMgPSBuZXcgVWludDMyQXJyYXkodGhpcy5fZWRnZUNvdW50KTsKKyAgICAgICAgLy8gSW5kZXgg
b2YgdGhlIGZpcnN0IHJldGFpbmVyIGluIHRoZSBfcmV0YWluaW5nTm9kZXMgYW5kIF9yZXRhaW5p
bmdFZGdlcworICAgICAgICAvLyBhcnJheXMuIEFkZHJlc3NlZCBieSByZXRhaW5lZCBub2RlIGlu
ZGV4LgorICAgICAgICB0aGlzLl9maXJzdFJldGFpbmVySW5kZXggPSBuZXcgVWludDMyQXJyYXko
dGhpcy5ub2RlQ291bnQgKyAxKTsKKworICAgICAgICBmb3IgKHZhciB0b05vZGVGaWVsZEluZGV4
ID0gdGhpcy5fZWRnZVRvTm9kZU9mZnNldDsgdG9Ob2RlRmllbGRJbmRleCA8IHRoaXMuX2NvbnRh
aW5tZW50RWRnZXMubGVuZ3RoOyB0b05vZGVGaWVsZEluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHND
b3VudCkgeworICAgICAgICAgICAgdmFyIHRvTm9kZUluZGV4ID0gdGhpcy5fY29udGFpbm1lbnRF
ZGdlc1t0b05vZGVGaWVsZEluZGV4XTsKKyAgICAgICAgICAgIGlmICh0b05vZGVJbmRleCAlIHRo
aXMuX25vZGVGaWVsZENvdW50KQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52
YWxpZCB0b05vZGVJbmRleCAiICsgdG9Ob2RlSW5kZXgpOworICAgICAgICAgICAgKyt0aGlzLl9m
aXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXggLyB0aGlzLl9ub2RlRmllbGRDb3VudF07Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGZpcnN0VW51c2VkUmV0YWluZXJTbG90
ID0gMDsgaSA8IHRoaXMubm9kZUNvdW50OyBpKyspIHsKICAgICAgICAgICAgIHZhciByZXRhaW5l
cnNDb3VudCA9IHRoaXMuX2ZpcnN0UmV0YWluZXJJbmRleFtpXTsKICAgICAgICAgICAgIHRoaXMu
X2ZpcnN0UmV0YWluZXJJbmRleFtpXSA9IGZpcnN0VW51c2VkUmV0YWluZXJTbG90OwogICAgICAg
ICAgICAgdGhpcy5fcmV0YWluaW5nTm9kZXNbZmlyc3RVbnVzZWRSZXRhaW5lclNsb3RdID0gcmV0
YWluZXJzQ291bnQ7CiAgICAgICAgICAgICBmaXJzdFVudXNlZFJldGFpbmVyU2xvdCArPSByZXRh
aW5lcnNDb3VudDsKICAgICAgICAgfQorICAgICAgICB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhb
dGhpcy5ub2RlQ291bnRdID0gdGhpcy5fcmV0YWluaW5nTm9kZXMubGVuZ3RoOwogCiAgICAgICAg
IHZhciBzcmNOb2RlSW5kZXggPSAwOwotICAgICAgICB2YXIgbmV4dE5vZGVGaXJzdEVkZ2VJbmRl
eCA9IHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQ7CisgICAgICAgIHZhciBuZXh0Tm9kZUZpcnN0RWRn
ZUluZGV4ID0gdGhpcy5fb25seU5vZGVzW3RoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwogICAgICAg
ICB3aGlsZSAoc3JjTm9kZUluZGV4IDwgdGhpcy5fb25seU5vZGVzLmxlbmd0aCkgewogICAgICAg
ICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsKICAgICAg
ICAgICAgIHZhciBuZXh0Tm9kZUluZGV4ID0gc3JjTm9kZUluZGV4ICsgdGhpcy5fbm9kZUZpZWxk
Q291bnQ7CkBAIC04OTAsNDAgKzkxNCwzMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhp
cy5fY29udGFpbm1lbnRFZGdlcy5sZW5ndGg7CiAgICAgICAgICAgICBmb3IgKHZhciBlZGdlSW5k
ZXggPSBmaXJzdEVkZ2VJbmRleDsgZWRnZUluZGV4IDwgbmV4dE5vZGVGaXJzdEVkZ2VJbmRleDsg
ZWRnZUluZGV4ICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudCkgewogICAgICAgICAgICAgICAgIHZh
ciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZUluZGV4ICsgdGhpcy5f
ZWRnZVRvTm9kZU9mZnNldF07Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0UmV0YWluZXJTbG90
SW5kZXggPSB0aGlzLl9maXJzdFJldGFpbmVySW5kZXhbdG9Ob2RlSW5kZXhdOworICAgICAgICAg
ICAgICAgIGlmICh0b05vZGVJbmRleCAlIHRoaXMuX25vZGVGaWVsZENvdW50KQorICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9Ob2RlSW5kZXggIiArIHRvTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICB2YXIgZmlyc3RSZXRhaW5lclNsb3RJbmRleCA9IHRo
aXMuX2ZpcnN0UmV0YWluZXJJbmRleFt0b05vZGVJbmRleCAvIHRoaXMuX25vZGVGaWVsZENvdW50
XTsKICAgICAgICAgICAgICAgICB2YXIgbmV4dFVudXNlZFJldGFpbmVyU2xvdEluZGV4ID0gZmly
c3RSZXRhaW5lclNsb3RJbmRleCArICgtLXRoaXMuX3JldGFpbmluZ05vZGVzW2ZpcnN0UmV0YWlu
ZXJTbG90SW5kZXhdKTsKICAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5pbmdOb2Rlc1tuZXh0
VW51c2VkUmV0YWluZXJTbG90SW5kZXhdID0gc3JjTm9kZUluZGV4OworICAgICAgICAgICAgICAg
IHRoaXMuX3JldGFpbmluZ0VkZ2VzW25leHRVbnVzZWRSZXRhaW5lclNsb3RJbmRleF0gPSBlZGdl
SW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNOb2RlSW5kZXggPSBuZXh0Tm9k
ZUluZGV4OwogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9yZXN0b3JlTm9kZVR5cGVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLl9yb290Tm9kZUluZGV4
OwotICAgICAgICB3aGlsZSAoc3JjSW5kZXggPCB0aGlzLl9ub2Rlcy5sZW5ndGgpIHsKLSAgICAg
ICAgICAgIHZhciBzcmNOb2RlVHlwZUluZGV4ID0gc3JjSW5kZXggKyB0aGlzLl9ub2RlVHlwZU9m
ZnNldDsKLSAgICAgICAgICAgIHZhciBuZXdOb2RlSW5kZXggPSB0aGlzLl9ub2Rlc1tzcmNOb2Rl
VHlwZUluZGV4XTsKLSAgICAgICAgICAgIHRoaXMuX25vZGVzW3NyY05vZGVUeXBlSW5kZXhdID0g
dGhpcy5fb25seU5vZGVzW25ld05vZGVJbmRleCArIHRoaXMuX25vZGVUeXBlT2Zmc2V0XTsKLSAg
ICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbc3JjSW5kZXggKyB0aGlzLl9l
ZGdlc0NvdW50T2Zmc2V0XTsKLSAgICAgICAgICAgIHNyY0luZGV4ICs9IHRoaXMuX2ZpcnN0RWRn
ZU9mZnNldCArIGVkZ2VzQ291bnQgKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Ci0gICAgICAgIH0K
LSAgICB9LAotCiAgICAgZGlzcG9zZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgZGVsZXRl
IHRoaXMuX25vZGVzOwogICAgICAgICBkZWxldGUgdGhpcy5fc3RyaW5nczsKLSAgICAgICAgZGVs
ZXRlIHRoaXMuX3JldGFpbmVyczsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3JldGFpbmVySW5kZXg7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlSW5kZXg7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9y
ZXRhaW5pbmdFZGdlczsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3JldGFpbmluZ05vZGVzOworICAg
ICAgICBkZWxldGUgdGhpcy5fZmlyc3RSZXRhaW5lckluZGV4OwogICAgICAgICBpZiAodGhpcy5f
YWdncmVnYXRlcykgewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FnZ3JlZ2F0ZXM7CiAgICAg
ICAgICAgICBkZWxldGUgdGhpcy5fYWdncmVnYXRlc1NvcnRlZEZsYWdzOwogICAgICAgICB9CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9iYXNlTm9kZUlkczsKICAgICAgICAgZGVsZXRlIHRoaXMuX2Rv
bWluYXRlZE5vZGVzOwotICAgICAgICBkZWxldGUgdGhpcy5fZG9taW5hdGVkSW5kZXg7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9maXJzdERvbWluYXRlZE5vZGVJbmRleDsKICAgICAgICAgZGVsZXRl
IHRoaXMuX2ZsYWdzOwogICAgICAgICBkZWxldGUgdGhpcy5fZGlzdGFuY2VzVG9XaW5kb3c7CiAg
ICAgfSwKQEAgLTkzMywxMSArOTQ4LDYgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVJdGVyYXRvcih0aGlzLnJvb3ROb2RlKTsKICAgICB9LAogCi0gICAgZ2V0IG5vZGVDb3VudCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5ub2RlSW5kZXhlcy5sZW5ndGggLSAxOwotICAg
IH0sCi0KICAgICBub2RlRmllbGRWYWx1ZXNCeUluZGV4OiBmdW5jdGlvbihmaWVsZE5hbWUsIGlu
ZGV4ZXMpCiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZSh0aGlzKTsKQEAgLTk1OSwxMCArOTY5LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fbWF4Tm9kZUlk
ID09PSAibnVtYmVyIikKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXhOb2RlSWQ7CiAgICAg
ICAgIHRoaXMuX21heE5vZGVJZCA9IDA7Ci0gICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMsIHRoaXMubm9kZUluZGV4ZXNbMF0pOwotICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubm9kZUNvdW50OyBpIDwgbDsgKytpKSB7Ci0gICAg
ICAgICAgICBub2RlLm5vZGVJbmRleCA9IHRoaXMubm9kZUluZGV4ZXNbaV07Ci0gICAgICAgICAg
ICB2YXIgaWQgPSBub2RlLmlkOworICAgICAgICBmb3IgKHZhciBub2RlSWRJbmRleCA9IHRoaXMu
X25vZGVJZE9mZnNldDsgbm9kZUlkSW5kZXggPCB0aGlzLl9vbmx5Tm9kZXMubGVuZ3RoOyBub2Rl
SWRJbmRleCArPSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGlkID0g
dGhpcy5fb25seU5vZGVzW25vZGVJZEluZGV4XTsKICAgICAgICAgICAgIGlmICgoaWQgJSAyKSAm
JiBpZCA+IHRoaXMuX21heE5vZGVJZCkKICAgICAgICAgICAgICAgICB0aGlzLl9tYXhOb2RlSWQg
PSBpZDsKICAgICAgICAgfQpAQCAtOTc5LDEzICs5ODcsNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGUucmV0YWlu
ZWRTaXplOwogICAgIH0sCiAKLSAgICBfcmV0YWluZXJzRm9yTm9kZTogZnVuY3Rpb24obm9kZSkK
LSAgICB7Ci0gICAgICAgIHZhciByZXRJbmRleEZyb20gPSB0aGlzLl9nZXRSZXRhaW5lckluZGV4
KG5vZGUubm9kZUluZGV4KTsKLSAgICAgICAgdmFyIHJldEluZGV4VG8gPSB0aGlzLl9nZXRSZXRh
aW5lckluZGV4KG5vZGUuX25leHROb2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RBcnJheVNsaWNlKHRoaXMuX3JldGFpbmVycywgcmV0SW5kZXhG
cm9tLCByZXRJbmRleFRvKTsKLSAgICB9LAotCiAgICAgX2RvbWluYXRlZE5vZGVzT2ZOb2RlOiBm
dW5jdGlvbihub2RlKQogICAgIHsKICAgICAgICAgdmFyIGRvbWluYXRlZEluZGV4RnJvbSA9IHRo
aXMuX2dldERvbWluYXRlZEluZGV4KG5vZGUubm9kZUluZGV4KTsKQEAgLTEwMjksNjIgKzEwMzAs
NiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIGFnZ3JlZ2F0ZXM7CiAgICAgfSwKIAotICAgIF9idWlsZFJldGFpbmVyczogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVJbmRleGVzID0gdGhpcy5ub2RlSW5kZXhlczsKLSAg
ICAgICAgdmFyIG5vZGVQb3NpdGlvbnMgPSB0aGlzLl9ub2RlUG9zaXRpb247Ci0gICAgICAgIHZh
ciBub2RlQ291bnQgPSB0aGlzLm5vZGVDb3VudDsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5f
bm9kZXM7Ci0KLSAgICAgICAgLy8gQnVpbGRzIHVwIHR3byBhcnJheXM6Ci0gICAgICAgIC8vICAt
ICJiYWNrUmVmc0FycmF5IiBpcyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2ggbm9kZSBv
d25zIGFuCi0gICAgICAgIC8vICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGggY29ycmVz
cG9uZGluZyBiYWNrIHJlZmVyZW5jZXMuCi0gICAgICAgIC8vICAtICJpbmRleEFycmF5IiBpcyBh
biBhcnJheSBvZiBpbmRleGVzIGluIHRoZSAiYmFja1JlZnNBcnJheSIKLSAgICAgICAgLy8gICAg
d2l0aCB0aGUgc2FtZSBwb3NpdGlvbnMgYXMgaW4gdGhlIF9ub2RlSW5kZXguCi0gICAgICAgIHZh
ciBpbmRleEFycmF5ID0gdGhpcy5fcmV0YWluZXJJbmRleCA9IG5ldyBVaW50MzJBcnJheShub2Rl
Q291bnQgKyAxKTsKLSAgICAgICAgdmFyIGVkZ2VzQ291bnRPZmZzZXQgPSB0aGlzLl9lZGdlc0Nv
dW50T2Zmc2V0OwotICAgICAgICB2YXIgZmlyc3RFZGdlT2Zmc2V0ID0gdGhpcy5fZmlyc3RFZGdl
T2Zmc2V0OwotICAgICAgICB2YXIgZWRnZUZpZWxkc0NvdW50ID0gdGhpcy5fZWRnZUZpZWxkc0Nv
dW50OwotICAgICAgICB2YXIgZWRnZVRvTm9kZU9mZnNldCA9IHRoaXMuX2VkZ2VUb05vZGVPZmZz
ZXQ7Ci0gICAgICAgIHZhciBiYWNrUmVmc0NvdW50ID0gMDsKLSAgICAgICAgLy8gQ291bnQgdGhl
IG51bWJlciBvZiByZXRhaW5lcnMgZm9yIGVhY2ggbm9kZQotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5vZGVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gbm9k
ZUluZGV4ZXNbaV07Ci0gICAgICAgICAgICB2YXIgZWRnZXNPZmZzZXQgPSBub2RlSW5kZXggKyBm
aXJzdEVkZ2VPZmZzZXQgKyBlZGdlVG9Ob2RlT2Zmc2V0OwotICAgICAgICAgICAgdmFyIGVkZ2Vz
Q291bnQgPSBub2Rlc1tub2RlSW5kZXggKyBlZGdlc0NvdW50T2Zmc2V0XTsKLSAgICAgICAgICAg
IGJhY2tSZWZzQ291bnQgKz0gZWRnZXNDb3VudDsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgZWRnZXNDb3VudDsgKytqKSB7Ci0gICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlSW5k
ZXggPSBub2Rlc1tqICogZWRnZUZpZWxkc0NvdW50ICsgZWRnZXNPZmZzZXRdOwotICAgICAgICAg
ICAgICArK2luZGV4QXJyYXlbbm9kZVBvc2l0aW9uc1t0YXJnZXROb2RlSW5kZXhdXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgYmFja1JlZnNBcnJheSA9IHRoaXMuX3Jl
dGFpbmVycyA9IG5ldyBVaW50MzJBcnJheShiYWNrUmVmc0NvdW50KTsKLSAgICAgICAgLy8gUHV0
IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2ggYmFja1JlZnNBcnJheSBzbGljZSB0aGUgY291bnQg
b2YgZW50cmllcwotICAgICAgICAvLyB0aGF0IHdpbGwgYmUgZmlsbGVkLgotICAgICAgICB2YXIg
YmFja1JlZnNQb3NpdGlvbiA9IDA7Ci0gICAgICAgIC8vIFRoZSBvbmUgZXh0cmEgc2xvdCBpbiB0
aGUgX3JldGFpbmVySW5kZXggYXJyYXkgaXMgc2V0IHRvIHRoZQotICAgICAgICAvLyBlbmQgb2Yg
X3JldGFpbmVycyBhcnJheS4gSXQgaXMgdXNlZCBpbiB0aGUgcmV0YWluZXJzIGl0ZXJhdG9yLgot
ICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG5vZGVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBi
YWNrUmVmc0NvdW50ID0gYmFja1JlZnNBcnJheVtiYWNrUmVmc1Bvc2l0aW9uXSA9IGluZGV4QXJy
YXlbaV07Ci0gICAgICAgICAgICBpbmRleEFycmF5W2ldID0gYmFja1JlZnNQb3NpdGlvbjsKLSAg
ICAgICAgICAgIGJhY2tSZWZzUG9zaXRpb24gKz0gYmFja1JlZnNDb3VudDsKLSAgICAgICAgfQot
ICAgICAgICB2YXIgcmV0YWluZXJJbmRleCA9IHRoaXMuX3JldGFpbmVySW5kZXg7Ci0gICAgICAg
IC8vIEZpbGwgdXAgdGhlIHJldGFpbmVycyBhcnJheSB3aXRoIGluZGV4ZXMgb2YgZWRnZXMuCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IHZhciBub2RlSW5kZXggPSBub2RlSW5kZXhlc1tpXTsKLSAgICAgICAgICAgIHZhciBlZGdlc09m
ZnNldCA9IG5vZGVJbmRleCArIGZpcnN0RWRnZU9mZnNldDsKLSAgICAgICAgICAgIHZhciBlZGdl
c0NvdW50ID0gbm9kZXNbbm9kZUluZGV4ICsgZWRnZXNDb3VudE9mZnNldF07Ci0gICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGVkZ2VzQ291bnQ7ICsraikgewotICAgICAgICAgICAgICAg
IHZhciBlZGdlSW5kZXggPSBqICogZWRnZUZpZWxkc0NvdW50ICsgZWRnZXNPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgdmFyIHJldE5vZGUgPSBub2RlUG9zaXRpb25zW25vZGVzW2VkZ2VJbmRleCAr
IGVkZ2VUb05vZGVPZmZzZXRdXTsKLSAgICAgICAgICAgICAgICB2YXIgcmV0SW5kZXggPSBpbmRl
eEFycmF5W3JldE5vZGVdOwotICAgICAgICAgICAgICAgIHZhciBiYWNrUmVmSW5kZXggPSByZXRJ
bmRleCArICgtLWJhY2tSZWZzQXJyYXlbcmV0SW5kZXhdKTsKLSAgICAgICAgICAgICAgICBiYWNr
UmVmc0FycmF5W2JhY2tSZWZJbmRleF0gPSBlZGdlSW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9LAotCiAgICAgX2NhbGN1bGF0ZU9iamVjdFRvV2luZG93RGlzdGFuY2U6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1RvV2luZG93ID0gbmV3IEFy
cmF5KHRoaXMubm9kZUNvdW50KTsKQEAgLTEwOTQsNiArMTAzOSw4IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBmb3IgKHZhciBpdGVyID0gdGhpcy5y
b290Tm9kZS5lZGdlczsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7CiAgICAgICAgICAg
ICB2YXIgbm9kZSA9IGl0ZXIuZWRnZS5ub2RlOwogICAgICAgICAgICAgaWYgKG5vZGUuaXNXaW5k
b3cpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlSW5kZXggJSB0aGlzLl9ub2RlRmll
bGRDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG5v
ZGVJbmRleDogIiArIG5vZGUubm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBsaXN0LnB1c2go
bm9kZS5ub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1RvV2luZG93
W25vZGUubm9kZUluZGV4XSA9IDA7CiAgICAgICAgICAgICB9CkBAIC0xMTAzLDE0ICsxMDUwLDE0
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICAvLyBi
ZnMgZm9yIHJvb3QKICAgICAgICAgbGlzdCA9IFtdOwogICAgICAgICBsaXN0LnB1c2godGhpcy5f
cm9vdE5vZGVJbmRleCk7Ci0gICAgICAgIHRoaXMuX2Rpc3RhbmNlc1RvV2luZG93W3RoaXMucm9v
dE5vZGUubm9kZUluZGV4XSA9IDA7CisgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1RvV2luZG93W3Ro
aXMuX3Jvb3ROb2RlSW5kZXhdID0gMDsKICAgICAgICAgdGhpcy5fYmZzKGxpc3QpOwogICAgIH0s
CiAKICAgICBfYmZzOiBmdW5jdGlvbihsaXN0KQogICAgIHsKICAgICAgICAgdmFyIGluZGV4ID0g
MDsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7CisgICAgICAgIHZhciBub2RlID0g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMpOwogICAgICAgICB3aGlsZSAo
aW5kZXggPCBsaXN0Lmxlbmd0aCkgewogICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IGxpc3Rb
aW5kZXgrK107IC8vIHNoaWZ0IGdlbmVyYXRlcyB0b28gbXVjaCBnYXJiYWdlLgogICAgICAgICAg
ICAgaWYgKGluZGV4ID4gMTAwMDAwKSB7CkBAIC0xMTE4LDEwICsxMDY1LDEzIEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGluZGV4ID0g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IHRoaXMuX2Rpc3Rh
bmNlc1RvV2luZG93W25vZGVJbmRleF0gKyAxOwotICAgICAgICAgICAgdmFyIGVkZ2VzQ291bnQg
PSBub2Rlc1tub2RlSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XTsKLSAgICAgICAgICAg
IHZhciBlZGdlVG9Ob2RlSW5kZXggPSBub2RlSW5kZXggKyB0aGlzLl9maXJzdEVkZ2VPZmZzZXQg
KyB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0OworICAgICAgICAgICAgbm9kZS5ub2RlSW5kZXggPSBu
b2RlSW5kZXg7CisgICAgICAgICAgICB2YXIgZWRnZXNDb3VudCA9IG5vZGUuZWRnZXNDb3VudDsK
KyAgICAgICAgICAgIHZhciBlZGdlVG9Ob2RlSW5kZXggPSBub2RlLl9lZGdlSW5kZXhlc1N0YXJ0
KCkgKyB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0OwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBlZGdlc0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlSW5k
ZXggPSBub2Rlc1tlZGdlVG9Ob2RlSW5kZXhdOworICAgICAgICAgICAgICAgIHZhciBjaGlsZE5v
ZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbZWRnZVRvTm9kZUluZGV4XTsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hpbGROb2RlSW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNoaWxkTm9kZUluZGV4
OiAiICsgY2hpbGROb2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIGVkZ2VUb05vZGVJbmRleCAr
PSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZUlu
ZGV4IGluIHRoaXMuX2Rpc3RhbmNlc1RvV2luZG93KQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTExNDQsOSArMTA5NCw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlID0gewogCiAgICAgICAgIHZhciBhZ2dyZWdhdGVzID0ge307CiAgICAgICAgIHZhciBh
Z2dyZWdhdGVzQnlDbGFzc05hbWUgPSB7fTsKLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcywgdGhpcy5ub2RlSW5kZXhlc1swXSk7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5ub2RlQ291bnQ7IGkgPCBsOyArK2kpIHsKLSAg
ICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gdGhpcy5ub2RlSW5kZXhlc1tpXTsKKyAgICAgICAg
Zm9yICh2YXIgbm9kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLCB0
aGlzLl9yb290Tm9kZUluZGV4KTsgbm9kZS5ub2RlSW5kZXggPCB0aGlzLl9vbmx5Tm9kZXMubGVu
Z3RoOyBub2RlLm5vZGVJbmRleCA9IG5vZGUuX25leHROb2RlSW5kZXgpIHsKICAgICAgICAgICAg
IGlmIChzaG91bGRTa2lwKG5vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgdmFyIGNsYXNzSW5kZXggPSBub2RlLmNsYXNzSW5kZXg7CkBAIC0xMjEzLDg0ICsxMTYx
LDQxIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIH0pOwogICAgIH0sCiAKLSAgICBnZXQgbm9kZUluZGV4ZXMoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX25vZGVJbmRleDsKLSAgICB9LAotCi0gICAgX2J1aWxkTm9kZUluZGV4
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY291bnQgPSAwOwotICAgICAgICBmb3Ig
KHZhciBpID0gdGhpcy5fcm9vdE5vZGVJbmRleCwgbCA9IHRoaXMuX25vZGVzLmxlbmd0aDsgaSA8
IGw7ICsrY291bnQpIHsKLSAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNb
aSArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwotICAgICAgICAgICAgaSArPSB0aGlzLl9maXJz
dEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5fZWRnZUZpZWxkc0NvdW50OwotICAgICAg
ICB9Ci0gICAgICAgIHZhciBub2RlSW5kZXggPSBuZXcgVWludDMyQXJyYXkoY291bnQgKyAxKTsK
LSAgICAgICAgdmFyIG5vZGVQb3NpdGlvbiA9IHt9OwotICAgICAgICBjb3VudCA9IDA7Ci0gICAg
ICAgIGZvciAodmFyIGkgPSB0aGlzLl9yb290Tm9kZUluZGV4LCBsID0gdGhpcy5fbm9kZXMubGVu
Z3RoOyBpIDwgbDsgKytjb3VudCkgewotICAgICAgICAgICAgbm9kZUluZGV4W2NvdW50XSA9IGk7
Ci0gICAgICAgICAgICBub2RlUG9zaXRpb25baV0gPSBjb3VudDsKLSAgICAgICAgICAgIHZhciBl
ZGdlc0NvdW50ID0gdGhpcy5fbm9kZXNbaSArIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXRdOwotICAg
ICAgICAgICAgaSArPSB0aGlzLl9maXJzdEVkZ2VPZmZzZXQgKyBlZGdlc0NvdW50ICogdGhpcy5f
ZWRnZUZpZWxkc0NvdW50OwotICAgICAgICB9Ci0gICAgICAgIG5vZGVJbmRleFtjb3VudF0gPSB0
aGlzLl9ub2Rlcy5sZW5ndGg7Ci0gICAgICAgIG5vZGVQb3NpdGlvblt0aGlzLl9ub2Rlcy5sZW5n
dGhdID0gY291bnQ7Ci0gICAgICAgIHRoaXMuX25vZGVJbmRleCA9IG5vZGVJbmRleDsKLSAgICAg
ICAgdGhpcy5fbm9kZVBvc2l0aW9uID0gbm9kZVBvc2l0aW9uOwotICAgIH0sCi0KLSAgICBfZmlu
ZE5lYXJlc3ROb2RlSW5kZXg6IGZ1bmN0aW9uKGluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IGJpbmFyeVNlYXJjaChpbmRleCwgdGhpcy5fbm9kZUluZGV4LCB0aGlzLl9udW1iZXJz
Q29tcGFyYXRvcik7Ci0gICAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSAtcmVzdWx0IC0gMTsKLSAgICAgICAgICAgIG5vZGVJbmRleCA9IHRoaXMuX25vZGVJbmRl
eFtyZXN1bHRdOwotICAgICAgICAgICAgLy8gQmluYXJ5IHNlYXJjaCBjYW4gcmV0dXJuIGVpdGhl
ciBtYXhpbXVtIGxvd2VyIHZhbHVlLCBvciBtaW5pbXVtIGhpZ2hlciB2YWx1ZS4KLSAgICAgICAg
ICAgIGlmIChub2RlSW5kZXggPiBpbmRleCkKLSAgICAgICAgICAgICAgICBub2RlSW5kZXggPSB0
aGlzLl9ub2RlSW5kZXhbcmVzdWx0IC0gMV07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dmFyIG5vZGVJbmRleCA9IHRoaXMuX25vZGVJbmRleFtyZXN1bHRdOwotICAgICAgICByZXR1cm4g
bm9kZUluZGV4OwotICAgIH0sCi0KLSAgICBfZ2V0UmV0YWluZXJJbmRleDogZnVuY3Rpb24obm9k
ZUluZGV4KQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVQb3NpdGlvbiA9IHRoaXMuX25vZGVQb3Np
dGlvbltub2RlSW5kZXhdOwotICAgICAgICByZXR1cm4gdGhpcy5fcmV0YWluZXJJbmRleFtub2Rl
UG9zaXRpb25dOwotICAgIH0sCi0KICAgICBfYnVpbGREb21pbmF0ZWROb2RlczogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgdmFyIG5vZGVDb3VudCA9IHRoaXMubm9kZUNvdW50OwogICAgICAg
ICAvLyBCdWlsZHMgdXAgdHdvIGFycmF5czoKICAgICAgICAgLy8gIC0gImRvbWluYXRlZE5vZGVz
IiBpcyBhIGNvbnRpbnVvdXMgYXJyYXksIHdoZXJlIGVhY2ggbm9kZSBvd25zIGFuCiAgICAgICAg
IC8vICAgIGludGVydmFsIChjYW4gYmUgZW1wdHkpIHdpdGggY29ycmVzcG9uZGluZyBkb21pbmF0
ZWQgbm9kZXMuCiAgICAgICAgIC8vICAtICJpbmRleEFycmF5IiBpcyBhbiBhcnJheSBvZiBpbmRl
eGVzIGluIHRoZSAiZG9taW5hdGVkTm9kZXMiCiAgICAgICAgIC8vICAgIHdpdGggdGhlIHNhbWUg
cG9zaXRpb25zIGFzIGluIHRoZSBfbm9kZUluZGV4LgotICAgICAgICB2YXIgaW5kZXhBcnJheSA9
IHRoaXMuX2RvbWluYXRlZEluZGV4ID0gbmV3IFVpbnQzMkFycmF5KG5vZGVDb3VudCArIDEpOwot
ICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHJldGFpbmVycyBmb3IgZWFjaCBub2RlCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
IHZhciBub2RlSW5kZXggPSB0aGlzLm5vZGVJbmRleGVzW2ldOwotICAgICAgICAgICAgdmFyIGRv
bWluYXRvckluZGV4ID0gdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgdGhpcy5fZG9taW5hdG9yT2Zm
c2V0XTsKKyAgICAgICAgdmFyIGluZGV4QXJyYXkgPSB0aGlzLl9maXJzdERvbWluYXRlZE5vZGVJ
bmRleCA9IG5ldyBVaW50MzJBcnJheSh0aGlzLm5vZGVDb3VudCArIDEpOworICAgICAgICAvLyBB
bGwgbm9kZXMgZXhjZXB0IHRoZSByb290IGhhdmUgZG9taW5hdG9ycy4KKyAgICAgICAgdmFyIGRv
bWluYXRlZE5vZGVzID0gdGhpcy5fZG9taW5hdGVkTm9kZXMgPSBuZXcgVWludDMyQXJyYXkodGhp
cy5ub2RlQ291bnQgLSAxKTsKKworICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIGRvbWlu
YXRlZCBub2RlcyBmb3IgZWFjaCBub2RlCisgICAgICAgIGZvciAodmFyIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGg7IG5vZGVJbmRleCArPSB0aGlzLl9u
b2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5f
b25seU5vZGVzW25vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF07CisgICAgICAgICAg
ICBpZiAoZG9taW5hdG9ySW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIGRvbWluYXRvckluZGV4ICIgKyBkb21pbmF0b3JJ
bmRleCArICIgbm9kZUluZGV4ID0gIiArIG5vZGVJbmRleCArICIgbm9kZUNvdW50ID0gIiArIHRo
aXMubm9kZUNvdW50KTsKKyAgICAgICAgICAgIC8vIFNraXAgcm9vdCBub2RlLiBXZSBtYXkgc2lt
cGxpZnkgdGhpcyBieSBzdGFydGluZyBpdGVyYXRpb24gZnJvbSBzZWNvbmQgbm9kZS4KICAgICAg
ICAgICAgIGlmIChub2RlSW5kZXggPT09IGRvbWluYXRvckluZGV4KSBjb250aW51ZTsKLSAgICAg
ICAgICAgICsraW5kZXhBcnJheVt0aGlzLl9ub2RlUG9zaXRpb25bZG9taW5hdG9ySW5kZXhdXTsK
KyAgICAgICAgICAgICsraW5kZXhBcnJheVtkb21pbmF0b3JJbmRleCAvIHRoaXMuX25vZGVGaWVs
ZENvdW50XTsKICAgICAgICAgfQotICAgICAgICB2YXIgZG9taW5hdGVkTm9kZXMgPSB0aGlzLl9k
b21pbmF0ZWROb2RlcyA9IG5ldyBVaW50MzJBcnJheShub2RlQ291bnQgLSAxKTsKICAgICAgICAg
Ly8gUHV0IGluIHRoZSBmaXJzdCBzbG90IG9mIGVhY2ggZG9taW5hdGVkTm9kZXMgc2xpY2UgdGhl
IGNvdW50IG9mIGVudHJpZXMKICAgICAgICAgLy8gdGhhdCB3aWxsIGJlIGZpbGxlZC4KLSAgICAg
ICAgdmFyIGRvbWluYXRlZFBvc2l0aW9uID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8PSBu
b2RlQ291bnQ7ICsraSkgewotICAgICAgICAgICAgdmFyIGRvbWluYXRlZENvdW50ID0gZG9taW5h
dGVkTm9kZXNbZG9taW5hdGVkUG9zaXRpb25dID0gaW5kZXhBcnJheVtpXTsKLSAgICAgICAgICAg
IGluZGV4QXJyYXlbaV0gPSBkb21pbmF0ZWRQb3NpdGlvbjsKLSAgICAgICAgICAgIGRvbWluYXRl
ZFBvc2l0aW9uICs9IGRvbWluYXRlZENvdW50OworICAgICAgICB2YXIgZmlyc3REb21pbmF0ZWRO
b2RlSW5kZXggPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHRoaXMubm9kZUNvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciBkb21pbmF0ZWRDb3VudCA9IGRvbWluYXRlZE5vZGVzW2Zp
cnN0RG9taW5hdGVkTm9kZUluZGV4XSA9IGluZGV4QXJyYXlbaV07CisgICAgICAgICAgICBpbmRl
eEFycmF5W2ldID0gZmlyc3REb21pbmF0ZWROb2RlSW5kZXg7CisgICAgICAgICAgICBmaXJzdERv
bWluYXRlZE5vZGVJbmRleCArPSBkb21pbmF0ZWRDb3VudDsKICAgICAgICAgfQogICAgICAgICAv
LyBGaWxsIHVwIHRoZSBkb21pbmF0ZWROb2RlcyBhcnJheSB3aXRoIGluZGV4ZXMgb2YgZG9taW5h
dGVkIG5vZGVzLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgKytpKSB7
Ci0gICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gdGhpcy5ub2RlSW5kZXhlc1tpXTsKLSAgICAg
ICAgICAgIHZhciBkb21pbmF0b3JJbmRleCA9IHRoaXMuX25vZGVzW25vZGVJbmRleCArIHRoaXMu
X2RvbWluYXRvck9mZnNldF07CisgICAgICAgIGZvciAodmFyIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IHRoaXMuX29ubHlOb2Rlcy5sZW5ndGg7IG5vZGVJbmRleCArPSB0aGlzLl9ub2RlRmll
bGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gdGhpcy5fb25seU5v
ZGVzW25vZGVJbmRleCArIHRoaXMuX2RvbWluYXRvck9mZnNldF07CisgICAgICAgICAgICBpZiAo
ZG9taW5hdG9ySW5kZXggJSB0aGlzLl9ub2RlRmllbGRDb3VudCkKKyAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIldyb25nIGRvbWluYXRvckluZGV4ICIgKyBkb21pbmF0b3JJbmRleCk7
CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09PSBkb21pbmF0b3JJbmRleCkgY29udGludWU7
Ci0gICAgICAgICAgICB2YXIgZG9taW5hdG9yUG9zID0gdGhpcy5fbm9kZVBvc2l0aW9uW2RvbWlu
YXRvckluZGV4XTsKKyAgICAgICAgICAgIHZhciBkb21pbmF0b3JQb3MgPSBkb21pbmF0b3JJbmRl
eCAvIHRoaXMuX25vZGVGaWVsZENvdW50OwogICAgICAgICAgICAgdmFyIGRvbWluYXRlZFJlZklu
ZGV4ID0gaW5kZXhBcnJheVtkb21pbmF0b3JQb3NdOwogICAgICAgICAgICAgZG9taW5hdGVkUmVm
SW5kZXggKz0gKC0tZG9taW5hdGVkTm9kZXNbZG9taW5hdGVkUmVmSW5kZXhdKTsKICAgICAgICAg
ICAgIGRvbWluYXRlZE5vZGVzW2RvbWluYXRlZFJlZkluZGV4XSA9IG5vZGVJbmRleDsKQEAgLTEy
OTksOCArMTIwNCw5IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewog
CiAgICAgX2dldERvbWluYXRlZEluZGV4OiBmdW5jdGlvbihub2RlSW5kZXgpCiAgICAgewotICAg
ICAgICB2YXIgbm9kZVBvc2l0aW9uID0gdGhpcy5fbm9kZVBvc2l0aW9uW25vZGVJbmRleF07Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9kb21pbmF0ZWRJbmRleFtub2RlUG9zaXRpb25dOworICAgICAg
ICBpZiAobm9kZUluZGV4ICUgdGhpcy5fbm9kZUZpZWxkQ291bnQpCisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkludmFsaWQgbm9kZUluZGV4OiAiICsgbm9kZUluZGV4KTsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2ZpcnN0RG9taW5hdGVkTm9kZUluZGV4W25vZGVJbmRleCAvIHRoaXMuX25v
ZGVGaWVsZENvdW50XTsKICAgICB9LAogCiAgICAgX21hcmtJbnZpc2libGVFZGdlczogZnVuY3Rp
b24oKQpAQCAtMTMyNSw3ICsxMjMxLDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbE9iakVkZ2Uubm9kZS5pc0hp
ZGRlbgogICAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWxPYmpFZGdlLl9oYXNTdHJpbmdOYW1l
CiAgICAgICAgICAgICAgICAgICAgICYmIChnbG9iYWxPYmpFZGdlLl9uYW1lT3JJbmRleCBpbiBw
cm9wTmFtZXMpKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1tnbG9iYWxPYmpFZGdl
Ll9lZGdlcy5fc3RhcnQgKyBnbG9iYWxPYmpFZGdlLmVkZ2VJbmRleCArIHRoaXMuX2VkZ2VUeXBl
T2Zmc2V0XSA9IHRoaXMuX2VkZ2VJbnZpc2libGVUeXBlOworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9jb250YWlubWVudEVkZ2VzW2dsb2JhbE9iakVkZ2UuX2VkZ2VzLl9zdGFydCArIGdsb2Jh
bE9iakVkZ2UuZWRnZUluZGV4ICsgdGhpcy5fZWRnZVR5cGVPZmZzZXRdID0gdGhpcy5fZWRnZUlu
dmlzaWJsZVR5cGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LApAQCAtMTM4MSwx
MSArMTI4NywxMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIG5vZGUubm9kZUluZGV4ID0gbm9kZUluZGV4OwogICAgICAgICAgICAgdGhpcy5f
ZmxhZ3Nbbm9kZUluZGV4XSB8PSBmbGFnOwogICAgICAgICAgICAgdmFyIGVkZ2VzT2Zmc2V0ID0g
bm9kZUluZGV4ICsgdGhpcy5fZmlyc3RFZGdlT2Zmc2V0OwotICAgICAgICAgICAgdmFyIGVkZ2Vz
Q291bnQgPSB0aGlzLl9ub2Rlc1tub2RlSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XTsK
KyAgICAgICAgICAgIHZhciBlZGdlc0NvdW50ID0gbm9kZS5lZGdlc0NvdW50OwogICAgICAgICAg
ICAgZWRnZS5fZWRnZXMgPSBub2RlLnJhd0VkZ2VzOwogICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBlZGdlc0NvdW50OyArK2opIHsKICAgICAgICAgICAgICAgICBlZGdlLmVkZ2VJbmRl
eCA9IGogKiB0aGlzLl9lZGdlRmllbGRzQ291bnQ7Ci0gICAgICAgICAgICAgICAgdmFyIG5vZGVJ
bmRleCA9IHRoaXMuX25vZGVzW2VkZ2VzT2Zmc2V0ICsgZWRnZS5lZGdlSW5kZXggKyB0aGlzLl9l
ZGdlVG9Ob2RlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZWRnZS5u
b2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZsYWdzW25vZGVJbmRleF0gJiBm
bGFnKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAo
ZWRnZS5pc0hpZGRlbiB8fCBlZGdlLmlzSW52aXNpYmxlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc1NjdlNDliYTk3MTVj
NzZkYzg5NDM0Zjc1MzVhZjJmNDdmOTI0OWQuLmRjM2U5Y2M5OTMwMDIxYTU3ODcyNTZhNmViOWJm
MjRkMWI5MTFmNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wMy0yOCAgWXVyeSBTZW1p
a2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBz
d2l0Y2ggaGVhcCBwcm9maWxlciBmcm9udC1lbmQgdG8gc2VwYXJhdGUgc3RvcmFnZSBvZiBub2Rl
cyBhbmQgZWRnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyNDUzCisKKyAgICAgICAgVXBkYXRlZCBoZWFwIHByb2ZpbGVyIHRlc3QgYWZ0ZXIgc3dp
dGNoaW5nIGhlYXAgcHJvZmlsZXIgZnJvbnQtZW5kCisgICAgICAgIHRvIHRoZSBuZXcgcmVwcmVz
ZW50YXRpb24gb2Ygbm9kZXMgYW5kIGVkZ2VzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90
LXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX0hlYXBTbmFwc2hvdFRlc3QuSW5zcGVjdG9y
VGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrT2JqZWN0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
cHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5odG1sOgorCiAyMDEyLTAzLTI3ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZDogcmViYXNl
bGluZWQgY2hyb21pdW0gZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0CmluZGV4IGQzZGU1
NjgxNjBjYjdmYTRhNjkyMTdkNWJiNWU5ZjIxNzRlOGIwZDcuLjRlYmQzMjU3MWNmNTgxZTRiNzI2
YjY4OWU5YzdlODkwYjhkZGY0ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9w
cm9maWxlci9oZWFwLXNuYXBzaG90LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQKQEAgLTEzLDYgKzEzLDgg
QEAgUnVubmluZzogaGVhcFNuYXBzaG90Tm9kZUFuZEVkZ2VUZXN0CiAKIFJ1bm5pbmc6IGhlYXBT
bmFwc2hvdFNpbXBsZVRlc3QKIAorUnVubmluZzogdGVzdE5vZGVzQW5kRWRnZXNTZXBhcmF0aW9u
SW5IZWFwU25hcHNob3QKKwogUnVubmluZzogaGVhcFNuYXBzaG90UmV0YWluZXJzVGVzdAogCiBS
dW5uaW5nOiBoZWFwU25hcHNob3RBZ2dyZWdhdGVzVGVzdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanMKaW5kZXggM2U3NTAwMTE1
MTZjYzAxMDM2ZjBmYjU1Yjc4NzczMTlkM2IzY2E0Yi4uZmFjMDk2YjgyNDg3ZTg3OWExYjgxMGVi
MTE5ZmVjOTFhMTlmMWYwZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2Zp
bGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJv
ZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCkBAIC04LDYgKzgsNyBAQCBJbnNwZWN0b3JUZXN0
LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2tPYmplY3QgPSBmdW5jdGlvbigpCiAgICAgICAgIF9ub2Rl
TmFtZU9mZnNldDogMSwKICAgICAgICAgX2VkZ2VzQ291bnRPZmZzZXQ6IDIsCiAgICAgICAgIF9m
aXJzdEVkZ2VPZmZzZXQ6IDMsCisgICAgICAgIF9ub2RlRmllbGRDb3VudDogMywKICAgICAgICAg
X2VkZ2VGaWVsZHNDb3VudDogMywKICAgICAgICAgX2VkZ2VUeXBlT2Zmc2V0OiAwLAogICAgICAg
ICBfZWRnZU5hbWVPZmZzZXQ6IDEsCkBAIC0yMCwxOSArMjEsMjQgQEAgSW5zcGVjdG9yVGVzdC5j
cmVhdGVIZWFwU25hcHNob3RNb2NrT2JqZWN0ID0gZnVuY3Rpb24oKQogICAgICAgICAvLyBSZXBy
ZXNlbnRzIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CiAgICAgICAgIC8vICAgKG51bWJlcnMgaW4gcGFy
ZW50aGVzZXMgaW5kaWNhdGUgbm9kZSBvZmZzZXQpCiAgICAgICAgIC8vIAotICAgICAgICAvLyAg
ICAgICAgIEEgKDkpIC0tYWMtIEMgKDI3KSAtY2UtIEUoMzYpCisgICAgICAgIC8vICAgICAgICAg
QSAoMykgLS1hYy0gQyAoOSkgLWNlLSBFKDE1KQogICAgICAgICAvLyAgICAgICBhL3wgICAgICAg
ICAvCiAgICAgICAgIC8vICAiIiAoMCkgMSAgICAgIGJjCiAgICAgICAgIC8vICAgICAgIGJcdiAg
ICAvCi0gICAgICAgIC8vICAgICAgICAgQiAoMTgpIC1iZC0gRCAoMzMpCisgICAgICAgIC8vICAg
ICAgICAgQiAoNikgLWJkLSBEICgxMikKICAgICAgICAgLy8KLSAgICAgICAgX25vZGVzOiBbCi0g
ICAgICAgICAgICAwLCAwLCAyLCAxLCAgNiwgIDksIDEsICA3LCAxOCwKLSAgICAgICAgICAgIDEs
IDEsIDIsIDAsICAxLCAxOCwgMSwgIDgsIDI3LAotICAgICAgICAgICAgMSwgMiwgMiwgMSwgIDks
IDI3LCAxLCAxMCwgMzMsCi0gICAgICAgICAgICAxLCAzLCAxLCAxLCAxMSwgMzYsCi0gICAgICAg
ICAgICAxLCA0LCAwLAotICAgICAgICAgICAgMSwgNSwgMF0sCisgICAgICAgIF9vbmx5Tm9kZXM6
IFsKKyAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAxLCAxLCA2LAorICAgICAgICAg
ICAgMSwgMiwgMTIsCisgICAgICAgICAgICAxLCAzLCAxOCwKKyAgICAgICAgICAgIDEsIDQsIDIx
LAorICAgICAgICAgICAgMSwgNSwgMjFdLAorICAgICAgICBfY29udGFpbm1lbnRFZGdlczogWwor
ICAgICAgICAgICAgMSwgIDYsIDMsIDEsICA3LCA2LAorICAgICAgICAgICAgMCwgIDEsIDYsIDEs
ICA4LCA5LAorICAgICAgICAgICAgMSwgIDksIDksIDEsIDEwLCAxMiwKKyAgICAgICAgICAgIDEs
IDExLCAxNV0sCiAgICAgICAgIF9zdHJpbmdzOiBbIiIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUi
LCAiYSIsICJiIiwgImFjIiwgImJjIiwgImJkIiwgImNlIl0KICAgICB9OwogfTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWwgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5odG1sCmluZGV4IDM3
YmRhZGFlMWFlMWMyMGVmYmQ0N2IwOTY0NjJmMGVjNTllM2EzMmEuLmFmNzQxYTBlNjlmYzJiN2U0
ZTc5Yzk3MDQwMzgzOTI1ZDZhOTA1MjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QuaHRtbApAQCAtMTQsNyArMTQsNyBAQCBmdW5jdGlvbiB0
ZXN0KCkKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCIiLCBub2RlUm9v
dC5uYW1lLCAicm9vdCBuYW1lIik7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVx
dWFscygiaGlkZGVuIiwgbm9kZVJvb3QudHlwZSwgInJvb3QgdHlwZSIpOwogICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoMiwgbm9kZVJvb3QuZWRnZXNDb3VudCwgInJvb3Qg
ZWRnZXMiKTsKLSAgICAgICAgICAgIHZhciBub2RlRSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZShzbmFwc2hvdCwgMzYpOworICAgICAgICAgICAgdmFyIG5vZGVFID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHNuYXBzaG90LCAxNSk7CiAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygiRSIsIG5vZGVFLm5hbWUsICJFIG5hbWUiKTsKICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCJvYmplY3QiLCBub2RlRS50eXBl
LCAiRSB0eXBlIik7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygwLCBu
b2RlRS5lZGdlc0NvdW50LCAiRSBlZGdlcyIpOwpAQCAtNTUsNyArNTUsNyBAQCBmdW5jdGlvbiB0
ZXN0KCkKICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IuZmlyc3QoKTsgaXRlcmF0b3IuaGFzTmV4
dCgpOyBpdGVyYXRvci5uZXh0KCkpCiAgICAgICAgICAgICAgICAgbmFtZXMucHVzaChpdGVyYXRv
ci5pdGVtLm5hbWUpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoImEs
YiIsIG5hbWVzLmpvaW4oIiwiKSwgImVkZ2UgaXRlcmF0b3IiKTsKLSAgICAgICAgICAgIHZhciBu
b2RlRSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZShzbmFwc2hvdCwgMzYpOwor
ICAgICAgICAgICAgdmFyIG5vZGVFID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
KHNuYXBzaG90LCAxNSk7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscyhm
YWxzZSwgbm9kZUUuZWRnZXMuaGFzTmV4dCgpLCAiZW1wdHkgZWRnZSBpdGVyYXRvciIpOwogICAg
ICAgICAgICAgbmV4dCgpOwogICAgICAgICB9LApAQCAtOTUsNiArOTUsNTIgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0sCiAKKyAgICAgICAgZnVuY3Rp
b24gdGVzdE5vZGVzQW5kRWRnZXNTZXBhcmF0aW9uSW5IZWFwU25hcHNob3QobmV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QoSW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrKCkpOworICAgICAgICAg
ICAgZnVuY3Rpb24gdmFsaWRhdGVOZXdJbmRleCgpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvcGllZE5vZGVJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
bm9kZXNJdGVyID0gdGhpcy5fYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRl
ci5uZXh0KCksIGNvcGllZE5vZGVJbmRleCArPSB0aGlzLl9ub2RlRmllbGRDb3VudCkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxOb2RlID0gbm9kZXNJdGVyLm5vZGU7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBjb3BpZWROb2RlID0gdGhpcy5fb25seU5vZGVzW2NvcGllZE5v
ZGVJbmRleF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsTm9kZS5pZCAhPT0g
dGhpcy5fb25seU5vZGVzW2NvcGllZE5vZGVJbmRleCArIHRoaXMuX25vZGVJZE9mZnNldF0pCisg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIklkIG1pc21hdGNoOiAiICsg
b3JpZ2luYWxOb2RlLmlkKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxOb2Rl
Ll90eXBlKCkgIT09IHRoaXMuX29ubHlOb2Rlc1tjb3BpZWROb2RlSW5kZXggKyB0aGlzLl9ub2Rl
VHlwZU9mZnNldF0pCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5v
ZGUgdHlwZSBtaXNtYXRjaDogIiArIG9yaWdpbmFsTm9kZS5pZCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVmFsaWRhdGUgY29udGFpbm1lbnQgZWRnZXMuCisgICAgICAgICAgICAgICAgICAg
IHZhciBmaXJzdEVkZ2VJbmRleCA9IHRoaXMuX29ubHlOb2Rlc1tjb3BpZWROb2RlSW5kZXggKyB0
aGlzLl9lZGdlc0NvdW50T2Zmc2V0XTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5leHROb2Rl
SW5kZXggPSBjb3BpZWROb2RlSW5kZXggKyB0aGlzLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGxhc3RFZGdlSW5kZXggPSAobmV4dE5vZGVJbmRleCA8IHRoaXMuX29u
bHlOb2Rlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
dGhpcy5fb25seU5vZGVzW25leHROb2RlSW5kZXggKyB0aGlzLl9lZGdlc0NvdW50T2Zmc2V0XQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NvbnRhaW5tZW50
RWRnZXMubGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbE5vZGUuZWRn
ZXNDb3VudCAhPT0gKGxhc3RFZGdlSW5kZXggLSBmaXJzdEVkZ2VJbmRleCkgLyB0aGlzLl9lZGdl
RmllbGRzQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVk
Z2VzIGNvdW50IG1pc21hdGNoOiAiICsgb3JpZ2luYWxOb2RlLmlkKTsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBlZGdlSXRlciA9IG9yaWdpbmFsTm9kZS5lZGdlcywgY29waWVkRWRn
ZUluZGV4ID0gZmlyc3RFZGdlSW5kZXg7IGVkZ2VJdGVyLmhhc05leHQoKTsgZWRnZUl0ZXIubmV4
dCgpLCBjb3BpZWRFZGdlSW5kZXggKz0gdGhpcy5fZWRnZUZpZWxkc0NvdW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZWRnZUl0ZXIuZWRnZS5fdHlwZSgpICE9PSB0aGlzLl9jb250
YWlubWVudEVkZ2VzW2NvcGllZEVkZ2VJbmRleCArIHRoaXMuX2VkZ2VUeXBlT2Zmc2V0XSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkVkZ2UgdHlwZSBtaXNt
YXRjaDogIiArIGVkZ2VJdGVyLmVkZ2UudHlwZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0b05vZGVJbmRleCA9IHRoaXMuX2NvbnRhaW5tZW50RWRnZXNbY29waWVkRWRnZUluZGV4
ICsgdGhpcy5fZWRnZVRvTm9kZU9mZnNldF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZWRnZUl0ZXIuZWRnZS5ub2RlLmlkICE9PSB0aGlzLl9vbmx5Tm9kZXNbdG9Ob2RlSW5kZXggKyB0
aGlzLl9ub2RlSWRPZmZzZXRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiRWRnZSB0byBub2RlIGlkIG1pc21hdGNoOiAiICsgZWRnZUl0ZXIuZWRnZS5ub2Rl
LmlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVOZXdJbmRl
eC5jYWxsKHNuYXBzaG90KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChlKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9LAorCisKICAg
ICAgICAgZnVuY3Rpb24gaGVhcFNuYXBzaG90UmV0YWluZXJzVGVzdChuZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICB2YXIgc25hcHNob3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dChJbnNwZWN0b3JUZXN0LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2soKSk7CkBAIC0xMzMsMTEgKzE3
OSwxMiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRBZ2dyZWdhdGVbcGFyYW1ldGVyXSwgYWdncmVnYXRlW3Bh
cmFtZXRlcl0sICJwYXJhbWV0ZXIgIiArIHBhcmFtZXRlciArICIgb2YgXCIiICsgbmFtZSArICJc
IiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyIGV4cGVjdGVkSW5kZXhlcyA9IHsK
LSAgICAgICAgICAgICAgICJBIjogWzE0XSwKLSAgICAgICAgICAgICAgICJCIjogWzI3XSwKLSAg
ICAgICAgICAgICAgICJDIjogWzQwXSwKLSAgICAgICAgICAgICAgICJEIjogWzUwXSwKLSAgICAg
ICAgICAgICAgICJFIjogWzU3XQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmRleCBv
ZiBjb3JyZXNwb25kaW5nIG5vZGUgaW4gdGhlIHJhdyBzbmFwc2hvdDoKKyAgICAgICAgICAgICAg
ICJBIjogWzddLCAgLy8gMTQKKyAgICAgICAgICAgICAgICJCIjogWzE0XSwgLy8gMjcKKyAgICAg
ICAgICAgICAgICJDIjogWzIxXSwgLy8gNDAKKyAgICAgICAgICAgICAgICJEIjogWzI4XSwgLy8g
NTAKKyAgICAgICAgICAgICAgICJFIjogWzM1XSAgLy8gNTcKICAgICAgICAgICAgIH07CiAgICAg
ICAgICAgICB2YXIgaW5kZXhlcyA9IHNuYXBzaG90LmFnZ3JlZ2F0ZXModHJ1ZSk7CiAgICAgICAg
ICAgICBmb3IgKHZhciBuYW1lIGluIGFnZ3JlZ2F0ZXMpIHsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDc1
MWY4YTg3ZWQzNzQ4ZDRjOTliZWU3NzU4YTQyMGU4NmQ5ODUyNi4uOGE5MGY3NDA4Mjg5OTVlYTk5
ZDRjODgzMWE5YWM2Yzg4MDA4OTExOSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0wMy0yOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBzd2l0Y2ggaGVhcCBwcm9maWxlciBmcm9udC1lbmQgdG8gc2Vw
YXJhdGUgc3RvcmFnZSBvZiBub2RlcyBhbmQgZWRnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNDUzCisKKyAgICAgICAgVXBkYXRlZCBoZWFwIHBy
b2ZpbGVyIHBlcmZvcm1hbmNlIHRlc3QgYWZ0ZXIgaGVhcCBwcm9maWxlciBmcm9udC1lbmQKKyAg
ICAgICAgY2hhbmdlcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9kZXRhaWxlZC1oZWFwc2hvdHMtc21va2UtdGVzdC5odG1sOgor
CiAyMDEyLTAzLTI3ICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3Jn
PgogCiAgICAgICAgIEFkZCBhIHBlcmYgdGVzdCB3aGljaCB1cGRhdGVzIHRoZSB2YWx1ZSBvZiBh
biBhbHJlYWR5IGRlY2xhcmVkIENTUyBwcm9wZXJ0eS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvaW5zcGVjdG9yL2RldGFpbGVkLWhlYXBzaG90cy1zbW9rZS10ZXN0Lmh0bWwgYi9QZXJm
b3JtYW5jZVRlc3RzL2luc3BlY3Rvci9kZXRhaWxlZC1oZWFwc2hvdHMtc21va2UtdGVzdC5odG1s
CmluZGV4IDEyYzVlNDZiNThkMzcyZGI1YjUxZjNkNzJjM2ZjMWFkNzczYzcxYjIuLjRlN2Y3YTNh
MTg5YWE3NTQ1ZWRlZTBkYzgxYTUxNDRiMTUwMjZmMWEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvaW5zcGVjdG9yL2RldGFpbGVkLWhlYXBzaG90cy1zbW9rZS10ZXN0Lmh0bWwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9pbnNwZWN0b3IvZGV0YWlsZWQtaGVhcHNob3RzLXNtb2tlLXRlc3Qu
aHRtbApAQCAtMjUsOSArMjUsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QubWVhc3VyZUZ1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90
eXBlLCAiX2NhbGN1bGF0ZUZsYWdzIik7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm1lYXN1
cmVGdW5jdGlvbihXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSwgIl9idWlsZEFn
Z3JlZ2F0ZXMiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubWVhc3VyZUZ1bmN0aW9uKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLCAiX2NhbGN1bGF0ZU9iamVjdFRvV2lu
ZG93RGlzdGFuY2UiKTsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QubWVhc3VyZUZ1bmN0aW9u
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLCAiX2J1aWxkTm9kZUluZGV4Iik7
CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm1lYXN1cmVGdW5jdGlvbihXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90LnByb3RvdHlwZSwgIl9tYXJrRGV0YWNoZWRET01UcmVlTm9kZXMiKTsKICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QubWVhc3VyZUZ1bmN0aW9uKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QucHJvdG90eXBlLCAiX21hcmtRdWVyaWFibGVIZWFwT2JqZWN0cyIpOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5tZWFzdXJlRnVuY3Rpb24oV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdC5wcm90b3R5cGUsICJfc3BsaXROb2Rlc0FuZENvbnRhaW5tZW50RWRnZXMiKTsKIAogICAg
ICAgICAgICAgdGltZXIuZmluaXNoKGJhY2tlbmRUaW1lckNvb2tpZSk7CiAgICAgICAgICAgICB0
cmFuc2ZlclRpbWVyQ29va2llID0gdGltZXIuc3RhcnQoInRyYW5zZmVyLXNuYXBzaG90Iik7Cg==
</data>
<flag name="review"
          id="138772"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>