<?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>105524</bug_id>
          
          <creation_ts>2012-12-20 03:25:25 -0800</creation_ts>
          <short_desc>Web Inspector: extract native heap graph representation into a separate file</short_desc>
          <delta_ts>2012-12-20 05:02:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>795326</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 03:25:25 -0800</bug_when>
    <thetext>NativeHeapSnapshotView.js should contain only code related to the native memory profiler UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795328</commentid>
    <comment_count>1</comment_count>
      <attachid>180315</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 03:27:23 -0800</bug_when>
    <thetext>Created attachment 180315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795344</commentid>
    <comment_count>2</comment_count>
      <attachid>180315</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-20 04:04:41 -0800</bug_when>
    <thetext>Comment on attachment 180315
Patch

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

&gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:110
&gt; +WebInspector.NativeHeapGraphEdge = function(graph, position)

AFAIK our current approach is that we should have types nested into the top-level type (WI.NativeHeapGraph.Edge). Should ask pfeldman to be absolutely sure if you want to leave it this way.

&gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:153
&gt; +WebInspector.NativeHeapGraphNode = function(graph, position)

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795351</commentid>
    <comment_count>3</comment_count>
      <attachid>180319</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 04:18:15 -0800</bug_when>
    <thetext>Created attachment 180319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795352</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 04:19:20 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 180315 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180315&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:110
&gt; &gt; +WebInspector.NativeHeapGraphEdge = function(graph, position)
&gt; 
&gt; AFAIK our current approach is that we should have types nested into the top-level type (WI.NativeHeapGraph.Edge). Should ask pfeldman to be absolutely sure if you want to leave it this way.
&gt; 
Done. What is the advantage of that naming scheme over the old one?

&gt; &gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:153
&gt; &gt; +WebInspector.NativeHeapGraphNode = function(graph, position)
&gt; 
&gt; Ditto
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795358</commentid>
    <comment_count>5</comment_count>
      <attachid>180322</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 04:26:46 -0800</bug_when>
    <thetext>Created attachment 180322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795362</commentid>
    <comment_count>6</comment_count>
      <attachid>180323</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 04:33:11 -0800</bug_when>
    <thetext>Created attachment 180323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795364</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-20 04:35:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 180315 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180315&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:110
&gt; &gt; &gt; +WebInspector.NativeHeapGraphEdge = function(graph, position)
&gt; &gt; 
&gt; &gt; AFAIK our current approach is that we should have types nested into the top-level type (WI.NativeHeapGraph.Edge). Should ask pfeldman to be absolutely sure if you want to leave it this way.
&gt; &gt; 
&gt; Done. What is the advantage of that naming scheme over the old one?

It&apos;s a surefire way to avoid typename clashes across the frontend codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795366</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 04:44:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 180315 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180315&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/inspector/front-end/NativeHeapGraph.js:110
&gt; &gt; &gt; &gt; +WebInspector.NativeHeapGraphEdge = function(graph, position)
&gt; &gt; &gt; 
&gt; &gt; &gt; AFAIK our current approach is that we should have types nested into the top-level type (WI.NativeHeapGraph.Edge). Should ask pfeldman to be absolutely sure if you want to leave it this way.
&gt; &gt; &gt; 
&gt; &gt; Done. What is the advantage of that naming scheme over the old one?
&gt; 
&gt; It&apos;s a surefire way to avoid typename clashes across the frontend codebase.

I understand how it works in case of WebInspector.Node But is longer WebInspector.NativeHeapGraph.Edge is more safe than WebInspector.NativeHeapGraphEdge?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795370</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-12-20 05:02:55 -0800</bug_when>
    <thetext>Committed r138245: &lt;http://trac.webkit.org/changeset/138245&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180315</attachid>
            <date>2012-12-20 03:27:23 -0800</date>
            <delta_ts>2012-12-20 04:18:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105524-20121220152438.patch</filename>
            <type>text/plain</type>
            <size>27641</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhYTM0NWU5OGE0ZmUz
M2IyYWI4YjM1NDRkNzg2YmFiYjAyZjZkMy4uYjNmYmQwZmMzZmNmOTQ5NzlmZWM5ZTc3MzQzNzU1
MDk5NjY4YjY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEyLTIwICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4dHJhY3QgbmF0aXZlIGhlYXAgZ3JhcGggcmVwcmVzZW50YXRpb24gaW50byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVkIG5hdGl2ZSBoZWFwIGdyYXBoIHBhcnNlciBpbnRvIE5hdGl2ZUhlYXBHcmFwaC5qcwor
ICAgICAgICBSZW1vdmVkIHVudXNlZCBwaWUgY2hhcnQgdmlldy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24pOiBmaXhlZCBvcHRpb25hbCBwYXJhbWV0ZXIgaGFuZGxpbmcKKyAgICAgICAg
KiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVIZWFwR3JhcGguanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBo
LnByb3RvdHlwZS5yb290Tm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBH
cmFwaC5wcm90b3R5cGUuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZS5fYWRkRHVtbXlOb2RlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS50eXBlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS5uYW1lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS50YXJnZXQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UucHJvdG90eXBlLl9nZXRTdHJpbmdG
aWVsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZS5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUucHJvdG90eXBlLmlk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS50
eXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlw
ZS5zaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3Rv
dHlwZS5jbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUucHJvdG90eXBlLm5hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFw
aE5vZGUucHJvdG90eXBlLmhhc1JlZmVyZW5jZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBoTm9kZS5wcm90b3R5cGUucmVmZXJlbmNlZE5vZGVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS5vdXRnb2luZ0Vk
Z2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlw
ZS50YXJnZXRPZkVkZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUucHJvdG90eXBlLnRhcmdldHNPZkFsbEVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5O
YXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS5fZmlyc3RFZGdlUG9pc3Rpb24pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUucHJvdG90eXBlLl9hZnRlckxhc3RF
ZGdlUG9zaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUu
cHJvdG90eXBlLl9nZXRTdHJpbmdGaWVsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZl
SGVhcEdyYXBoTm9kZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmM6CisKIDIwMTItMTItMjAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBXaW5DRSBhZnRlciByMTM3NTM0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDJjYjMwZDhiZTJiNmJmNzc2YzIxNWYwNzM0MDNlMGE0NDU1
MzZkNWEuLjI1M2RkYzQzYTBjNzQ3ODhmZDU4MzAyNzE0ODQwODg1MDI4ZmQwM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTUzMjIsNiArNTMyMiw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcEdyYXBoLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlRGF0YUdyaWRUcmVlLmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggNDI5NTEx
Y2YxODdkNThhNGYwMDlmMjdlM2EzMzc4NTkxNTlkODcyOS4uNWI2ZWY0NTczYWZkNDBkYmU2Zjlj
N2VmNzJjNTQ5MjhkMjY5YTdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIHZvaWQg
YWRkUGxhdGZvcm1Db21wb25lbnRzSW5mbyhQYXNzUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2Nr
cz4gY2hpbGRyZW4KIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiByZXBvcnRHcmFwaCwgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiYgcHJvY2Vzc01lbW9yeSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIGdyYXBoKQogewogICAgIE93blB0cjxIZWFwR3JhcGhTZXJpYWxpemVyPiBncmFwaFNl
cmlhbGl6ZXI7Ci0gICAgaWYgKHJlcG9ydEdyYXBoKQorICAgIGlmIChyZXBvcnRHcmFwaCAmJiAq
cmVwb3J0R3JhcGgpCiAgICAgICAgIGdyYXBoU2VyaWFsaXplciA9IGFkb3B0UHRyKG5ldyBIZWFw
R3JhcGhTZXJpYWxpemVyKCkpOwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwg
bWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KGdyYXBoU2VyaWFsaXplci5nZXQoKSk7CiAgICAg
bV9pbnNwZWN0b3JDbGllbnQtPmdldEFsbG9jYXRlZE9iamVjdHMobWVtb3J5SW5zdHJ1bWVudGF0
aW9uQ2xpZW50LmFsbG9jYXRlZE9iamVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvY29tcGlsZS1mcm9udC1lbmQucHkKaW5kZXggNWIxYTBmMjNiZTc4NTgyZDNmMmEyNDA3ODA3
ZmJjODUxZTViZWFkNy4uMDBmNTU1NjQ0YTAyNjg0ZGI1NWRjZTUwM2UwZGQ0NjkyNjQ4NzdmNSAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAt
MzMwLDYgKzMzMCw3IEBAIG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiSGVhcFNuYXBzaG90Vmll
dy5qcyIsCiAgICAgICAgICAgICAiSGVhcFNuYXBzaG90V29ya2VyLmpzIiwKICAgICAgICAgICAg
ICJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIiwKKyAgICAgICAgICAgICJOYXRpdmVI
ZWFwR3JhcGguanMiLAogICAgICAgICAgICAgIk5hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcyIs
CiAgICAgICAgICAgICAiUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCiAgICAgICAgICAgICAiUHJv
ZmlsZXNQYW5lbC5qcyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvTmF0aXZlSGVhcEdyYXBoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0MTU3NTViYWM2ZTA3MzMzMGEy
MWI0ZDhhM2MyMDU0Y2M3ODc1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qcwpAQCAtMCwwICsxLDI2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaCA9
IGZ1bmN0aW9uKHJhd0dyYXBoKQoreworICAgIHRoaXMuX3Jhd0dyYXBoID0gcmF3R3JhcGg7CisK
KyAgICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IDU7CisgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQg
PSAwOworICAgIHRoaXMuX25vZGVTaXplT2Zmc2V0ID0gMTsKKyAgICB0aGlzLl9ub2RlQ2xhc3NO
YW1lT2Zmc2V0ID0gMjsKKyAgICB0aGlzLl9ub2RlTmFtZU9mZnNldCA9IDM7CisgICAgdGhpcy5f
bm9kZUVkZ2VDb3VudE9mZnNldCA9IDQ7CisgICAgdGhpcy5fbm9kZUZpcnN0RWRnZU9mZnNldCA9
IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7CisKKyAgICB0aGlzLl9lZGdlRmllbGRDb3VudCA9
IDM7CisgICAgdGhpcy5fZWRnZVR5cGVPZmZzZXQgPSAwOworICAgIHRoaXMuX2VkZ2VUYXJnZXRP
ZmZzZXQgPSAxOworICAgIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0ID0gMjsKKworICAgIHRoaXMuX25v
ZGVDb3VudCA9IHJhd0dyYXBoLm5vZGVzLmxlbmd0aCAvIHRoaXMuX25vZGVGaWVsZENvdW50Owor
ICAgIHRoaXMuX25vZGVzID0gcmF3R3JhcGgubm9kZXM7CisgICAgdGhpcy5fZWRnZXMgPSByYXdH
cmFwaC5lZGdlczsKKyAgICB0aGlzLl9zdHJpbmdzID0gcmF3R3JhcGguc3RyaW5nczsKKworICAg
IHRoaXMuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlcygpOworfQorCitXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBoLnByb3RvdHlwZSA9IHsKKyAgICByb290Tm9kZXM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBub2RlSGFzSW5jb21pbmdFZGdlcyA9IG5ldyBVaW50OEFycmF5KHRo
aXMuX25vZGVDb3VudCk7CisgICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2VkZ2VzOworICAgICAg
ICB2YXIgZWRnZXNMZW5ndGggPSBlZGdlcy5sZW5ndGg7CisgICAgICAgIHZhciBlZGdlRmllbGRD
b3VudCA9IHRoaXMuX2VkZ2VGaWVsZENvdW50OworICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQg
PSB0aGlzLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2VkZ2VU
YXJnZXRPZmZzZXQ7IGkgPCBlZGdlc0xlbmd0aDsgaSArPSBlZGdlRmllbGRDb3VudCkgeworICAg
ICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gZWRnZXNbaV07CisgICAgICAgICAgICBub2RlSGFz
SW5jb21pbmdFZGdlc1t0YXJnZXRJbmRleF0gPSAxOworICAgICAgICB9CisgICAgICAgIHZhciBy
b290cyA9IFtdOworICAgICAgICB2YXIgbm9kZUNvdW50ID0gbm9kZUhhc0luY29taW5nRWRnZXMu
bGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVIYXNJbmNvbWluZ0VkZ2VzW2ldKQorICAgICAgICAgICAgICAg
IHJvb3RzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlKHRoaXMsIGkg
KiBub2RlRmllbGRDb3VudCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByb290czsKKyAg
ICB9LAorCisgICAgX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7CisgICAgICAgIHZhciBub2RlRmllbGRD
b3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OworICAgICAgICB2YXIgbm9kZUxlbmd0aCA9IG5v
ZGVzLmxlbmd0aDsKKyAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gMDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7IGkgPCBub2RlTGVuZ3RoOyBpICs9
IG5vZGVGaWVsZENvdW50KSB7CisgICAgICAgICAgICB2YXIgY291bnQgPSBub2Rlc1tpXTsKKyAg
ICAgICAgICAgIG5vZGVzW2ldID0gZmlyc3RFZGdlSW5kZXg7CisgICAgICAgICAgICBmaXJzdEVk
Z2VJbmRleCArPSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hZGREdW1teU5vZGUo
KTsKKyAgICB9LAorCisgICAgX2FkZER1bW15Tm9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fbm9kZXMubGVuZ3RoICsgdGhpcy5fbm9k
ZUZpcnN0RWRnZU9mZnNldDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub2Rl
RmllbGRDb3VudDsgaSsrKQorICAgICAgICAgICAgdGhpcy5fbm9kZXMucHVzaCgwKTsKKyAgICAg
ICAgdGhpcy5fbm9kZXNbZmlyc3RFZGdlUG9zaXRpb25dID0gdGhpcy5fZWRnZXMubGVuZ3RoOwor
ICAgIH0KK30KKworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBofSBncmFwaAorICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCisg
Ki8KK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlID0gZnVuY3Rpb24oZ3JhcGgsIHBv
c2l0aW9uKQoreworICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7CisgICAgdGhpcy5fcG9zaXRpb24g
PSBwb3NpdGlvbjsKK30KKworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UucHJvdG90
eXBlID0geworICAgIHR5cGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fZWRnZVR5cGVPZmZzZXQpOworICAgIH0sCisK
KyAgICBuYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3Ry
aW5nRmllbGQodGhpcy5fZ3JhcGguX2VkZ2VOYW1lT2Zmc2V0KTsKKyAgICB9LAorCisgICAgdGFy
Z2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5f
ZWRnZXM7CisgICAgICAgIHZhciB0YXJnZXRQb3NpdGlvbiA9IGVkZ2VzW3RoaXMuX3Bvc2l0aW9u
ICsgdGhpcy5fZ3JhcGguX2VkZ2VUYXJnZXRPZmZzZXRdICogdGhpcy5fZ3JhcGguX25vZGVGaWVs
ZENvdW50OworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhO
b2RlKHRoaXMuX2dyYXBoLCB0YXJnZXRQb3NpdGlvbik7CisgICAgfSwKKworICAgIF9nZXRTdHJp
bmdGaWVsZDogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGVJbmRleCA9
IHRoaXMuX2dyYXBoLl9lZGdlc1t0aGlzLl9wb3NpdGlvbiArIG9mZnNldF07CisgICAgICAgIHJl
dHVybiB0aGlzLl9ncmFwaC5fcmF3R3JhcGguc3RyaW5nc1t0eXBlSW5kZXhdOworICAgIH0sCisK
KyAgICB0b1N0cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJFZGdlIyIg
KyB0aGlzLl9wb3NpdGlvbiArICIgLSIgKyB0aGlzLm5hbWUoKSArICItPiAiICsgdGhpcy50YXJn
ZXQoKTsKKyAgICB9CisKK30KKworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBofSBncmFwaAorICogQHBhcmFtIHtudW1iZXJ9IHBv
c2l0aW9uCisgKi8KK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlID0gZnVuY3Rpb24o
Z3JhcGgsIHBvc2l0aW9uKQoreworICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7CisgICAgdGhpcy5f
cG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUucHJvdG90eXBlID0geworICAgIGlkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fcG9zaXRpb24gLyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7CisgICAgfSwK
KworICAgIHR5cGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRT
dHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZVR5cGVPZmZzZXQpOworICAgIH0sCisKKyAgICBz
aXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVz
W3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGguX25vZGVTaXplT2Zmc2V0XTsKKyAgICB9LAor
CisgICAgY2xhc3NOYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
Z2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVDbGFzc05hbWVPZmZzZXQpOworICAgIH0s
CisKKyAgICBuYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0
U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVOYW1lT2Zmc2V0KTsKKyAgICB9LAorCisgICAg
aGFzUmVmZXJlbmNlZE5vZGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCkgPiB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwor
ICAgIH0sCisKKyAgICByZWZlcmVuY2VkTm9kZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHZhciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKKyAgICAgICAgdmFyIG5vZGVzID0gdGhp
cy5fZ3JhcGguX25vZGVzOworICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFw
aC5fZWRnZUZpZWxkQ291bnQ7CisgICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX2dy
YXBoLl9ub2RlRmllbGRDb3VudDsKKworICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0
aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOworICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRnZVBvc2l0
aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7CisgICAgICAgIHZhciByZXN1bHQg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uICsgdGhpcy5fZ3Jh
cGguX2VkZ2VUYXJnZXRPZmZzZXQ7IGkgPCBhZnRlckxhc3RFZGdlUG9zaXRpb247IGkgKz0gZWRn
ZUZpZWxkQ291bnQpCisgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLk5h
dGl2ZUhlYXBHcmFwaE5vZGUodGhpcy5fZ3JhcGgsIGVkZ2VzW2ldICogbm9kZUZpZWxkQ291bnQp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgb3V0Z29pbmdFZGdlczog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2Vz
OworICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291
bnQ7CisKKyAgICAgICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9p
c3Rpb24oKTsKKyAgICAgICAgdmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVy
TGFzdEVkZ2VQb3NpdGlvbigpOworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZv
ciAodmFyIGkgPSBmaXJzdEVkZ2VQb3NpdGlvbjsgaSA8IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsg
aSArPSBlZGdlRmllbGRDb3VudCkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNw
ZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZSh0aGlzLl9ncmFwaCwgaSkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0sCisKKyAgICB0YXJnZXRPZkVkZ2U6IGZ1bmN0aW9uKGVkZ2VOYW1l
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0c09mQWxsRWRnZXMoZWRnZU5hbWUp
WzBdOworICAgIH0sCisKKyAgICB0YXJnZXRzT2ZBbGxFZGdlczogZnVuY3Rpb24oZWRnZU5hbWUp
CisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7CisgICAgICAg
IHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKKworICAg
ICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwor
ICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBv
c2l0aW9uKCk7CisKKyAgICAgICAgdmFyIGVkZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhl
YXBHcmFwaEVkZ2UodGhpcy5fZ3JhcGgsIGZpcnN0RWRnZVBvc2l0aW9uKQorICAgICAgICB2YXIg
cmVzdWx0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEVkZ2VQb3NpdGlvbjsgaSA8
IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmllbGRDb3VudCkgeworICAgICAgICAg
ICAgZWRnZS5fcG9zaXRpb24gPSBpOworICAgICAgICAgICAgaWYgKGVkZ2UubmFtZSgpID09PSBl
ZGdlTmFtZSkKKyAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlZGdlLnRhcmdldCgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBfZmlyc3RFZGdl
UG9pc3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5f
bm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpcnN0RWRnZU9mZnNldF0g
KiB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7CisgICAgfSwKKworICAgIF9hZnRlckxhc3RF
ZGdlUG9zaXRpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ncmFw
aC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQgKyB0
aGlzLl9ncmFwaC5fbm9kZUZpcnN0RWRnZU9mZnNldF0gKiB0aGlzLl9ncmFwaC5fZWRnZUZpZWxk
Q291bnQ7CisgICAgfSwKKworICAgIF9nZXRTdHJpbmdGaWVsZDogZnVuY3Rpb24ob2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgdmFyIHR5cGVJbmRleCA9IHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9w
b3NpdGlvbiArIG9mZnNldF07CisgICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fcmF3R3JhcGgu
c3RyaW5nc1t0eXBlSW5kZXhdOworICAgIH0sCisKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICJOb2RlIyIgKyB0aGlzLmlkKCkgKyAiICIgKyB0aGlzLm5h
bWUoKSArICIoIiArIHRoaXMuY2xhc3NOYW1lKCkgKyAiKSI7CisgICAgfQorfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlTbmFwc2hv
dFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9y
eVNuYXBzaG90Vmlldy5qcwppbmRleCA3YWZlOGUyYjVmNDFjMTI4MzA2N2RmNWRmOGY0YmFmNWI1
N2RhNDlhLi43MWFhYWYyOTc5ZmFhNDU3MzA5ZWNjZDBiM2E3ZTljYmVjNGRlZDNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBz
aG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2
ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwpAQCAtMzI2LDIzOCArMzI2LDYgQEAgV2ViSW5zcGVjdG9y
Lk5hdGl2ZVNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAKIC8qKgogICogQGNvbnN0cnVjdG9y
Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IGdyYXBoCi0gKiBAcGFy
YW0ge251bWJlcn0gcG9zaXRpb24KLSAqLwotV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVk
Z2UgPSBmdW5jdGlvbihncmFwaCwgcG9zaXRpb24pCi17Ci0gICAgdGhpcy5fZ3JhcGggPSBncmFw
aDsKLSAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi1XZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBoRWRnZS5wcm90b3R5cGUgPSB7Ci0gICAgdHlwZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9lZGdl
VHlwZU9mZnNldCk7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fZWRnZU5hbWVPZmZz
ZXQpOwotICAgIH0sCi0KLSAgICB0YXJnZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIHRhcmdldFBvc2l0aW9u
ID0gZWRnZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fZWRnZVRhcmdldE9mZnNldF0g
KiB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUodGhpcy5fZ3JhcGgsIHRhcmdldFBvc2l0aW9uKTsK
LSAgICB9LAotCi0gICAgX2dldFN0cmluZ0ZpZWxkOiBmdW5jdGlvbihvZmZzZXQpCi0gICAgewot
ICAgICAgICB2YXIgdHlwZUluZGV4ID0gdGhpcy5fZ3JhcGguX2VkZ2VzW3RoaXMuX3Bvc2l0aW9u
ICsgb2Zmc2V0XTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9yYXdHcmFwaC5zdHJpbmdz
W3R5cGVJbmRleF07Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICByZXR1cm4gIkVkZ2UjIiArIHRoaXMuX3Bvc2l0aW9uICsgIiAtIiArIHRoaXMubmFt
ZSgpICsgIi0+ICIgKyB0aGlzLnRhcmdldCgpOwotICAgIH0KLQotfQotCi0KLS8qKgotICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IGdyYXBo
Ci0gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24KLSAqLwotV2ViSW5zcGVjdG9yLk5hdGl2ZUhl
YXBHcmFwaE5vZGUgPSBmdW5jdGlvbihncmFwaCwgcG9zaXRpb24pCi17Ci0gICAgdGhpcy5fZ3Jh
cGggPSBncmFwaDsKLSAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi1XZWJJbnNw
ZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgaWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiAvIHRoaXMuX2dyYXBoLl9u
b2RlRmllbGRDb3VudDsKLSAgICB9LAotCi0gICAgdHlwZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlVHlwZU9m
ZnNldCk7Ci0gICAgfSwKLQotICAgIHNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9ncmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9k
ZVNpemVPZmZzZXRdOwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZUNs
YXNzTmFtZU9mZnNldCk7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZU5hbWVP
ZmZzZXQpOwotICAgIH0sCi0KLSAgICBoYXNSZWZlcmVuY2VkTm9kZXM6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24oKSA+IHRoaXMu
X2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgfSwKLQotICAgIHJlZmVyZW5jZWROb2RlczogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOwot
ICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ncmFwaC5fbm9kZXM7Ci0gICAgICAgIHZhciBlZGdl
RmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLSAgICAgICAgdmFyIG5v
ZGVGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGguX25vZGVGaWVsZENvdW50OwotCi0gICAgICAgIHZh
ciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgICAg
IHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24o
KTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RF
ZGdlUG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fZWRnZVRhcmdldE9mZnNldDsgaSA8IGFmdGVyTGFz
dEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmllbGRDb3VudCkKLSAgICAgICAgICAgIHJlc3VsdC5w
dXNoKG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZSh0aGlzLl9ncmFwaCwgZWRn
ZXNbaV0gKiBub2RlRmllbGRDb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0s
Ci0KLSAgICBvdXRnb2luZ0VkZ2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWRn
ZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7Ci0gICAgICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRo
aXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLQotICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRp
b24gPSB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwotICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRn
ZVBvc2l0aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7Ci0gICAgICAgIHZhciBy
ZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uOyBpIDwg
YWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KQotICAgICAgICAgICAg
cmVzdWx0LnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlKHRoaXMuX2dy
YXBoLCBpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIHRhcmdldE9m
RWRnZTogZnVuY3Rpb24oZWRnZU5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy50YXJn
ZXRzT2ZBbGxFZGdlcyhlZGdlTmFtZSlbMF07Ci0gICAgfSwKLQotICAgIHRhcmdldHNPZkFsbEVk
Z2VzOiBmdW5jdGlvbihlZGdlTmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBlZGdlcyA9IHRoaXMu
X2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGgu
X2VkZ2VGaWVsZENvdW50OwotCi0gICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMu
X2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgICAgIHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24g
PSB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24oKTsKLQotICAgICAgICB2YXIgZWRnZSA9IG5l
dyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZSh0aGlzLl9ncmFwaCwgZmlyc3RFZGdl
UG9zaXRpb24pCi0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IGZpcnN0RWRnZVBvc2l0aW9uOyBpIDwgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VG
aWVsZENvdW50KSB7Ci0gICAgICAgICAgICBlZGdlLl9wb3NpdGlvbiA9IGk7Ci0gICAgICAgICAg
ICBpZiAoZWRnZS5uYW1lKCkgPT09IGVkZ2VOYW1lKQotICAgICAgICAgICAgICAgIHJlc3VsdC5w
dXNoKGVkZ2UudGFyZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSwKLQotICAgIF9maXJzdEVkZ2VQb2lzdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBo
Ll9ub2RlRmlyc3RFZGdlT2Zmc2V0XSAqIHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLSAg
ICB9LAotCi0gICAgX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dy
YXBoLl9ub2RlRmllbGRDb3VudCArIHRoaXMuX2dyYXBoLl9ub2RlRmlyc3RFZGdlT2Zmc2V0XSAq
IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLSAgICB9LAotCi0gICAgX2dldFN0cmluZ0Zp
ZWxkOiBmdW5jdGlvbihvZmZzZXQpCi0gICAgewotICAgICAgICB2YXIgdHlwZUluZGV4ID0gdGhp
cy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgb2Zmc2V0XTsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2dyYXBoLl9yYXdHcmFwaC5zdHJpbmdzW3R5cGVJbmRleF07Ci0gICAgfSwKLQotICAg
IHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gIk5vZGUjIiArIHRo
aXMuaWQoKSArICIgIiArIHRoaXMubmFtZSgpICsgIigiICsgdGhpcy5jbGFzc05hbWUoKSArICIp
IjsKLSAgICB9Ci19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaCA9IGZ1bmN0aW9uKHJhd0dyYXBoKQotewotICAgIHRoaXMuX3Jhd0dy
YXBoID0gcmF3R3JhcGg7Ci0KLSAgICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IDU7Ci0gICAgdGhp
cy5fbm9kZVR5cGVPZmZzZXQgPSAwOwotICAgIHRoaXMuX25vZGVTaXplT2Zmc2V0ID0gMTsKLSAg
ICB0aGlzLl9ub2RlQ2xhc3NOYW1lT2Zmc2V0ID0gMjsKLSAgICB0aGlzLl9ub2RlTmFtZU9mZnNl
dCA9IDM7Ci0gICAgdGhpcy5fbm9kZUVkZ2VDb3VudE9mZnNldCA9IDQ7Ci0gICAgdGhpcy5fbm9k
ZUZpcnN0RWRnZU9mZnNldCA9IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7Ci0KLSAgICB0aGlz
Ll9lZGdlRmllbGRDb3VudCA9IDM7Ci0gICAgdGhpcy5fZWRnZVR5cGVPZmZzZXQgPSAwOwotICAg
IHRoaXMuX2VkZ2VUYXJnZXRPZmZzZXQgPSAxOwotICAgIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0ID0g
MjsKLQotICAgIHRoaXMuX25vZGVDb3VudCA9IHJhd0dyYXBoLm5vZGVzLmxlbmd0aCAvIHRoaXMu
X25vZGVGaWVsZENvdW50OwotICAgIHRoaXMuX25vZGVzID0gcmF3R3JhcGgubm9kZXM7Ci0gICAg
dGhpcy5fZWRnZXMgPSByYXdHcmFwaC5lZGdlczsKLSAgICB0aGlzLl9zdHJpbmdzID0gcmF3R3Jh
cGguc3RyaW5nczsKLQotICAgIHRoaXMuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlcygpOwotfQot
Ci1XZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZSA9IHsKLSAgICByb290Tm9k
ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlSGFzSW5jb21pbmdFZGdlcyA9
IG5ldyBVaW50OEFycmF5KHRoaXMuX25vZGVDb3VudCk7Ci0gICAgICAgIHZhciBlZGdlcyA9IHRo
aXMuX2VkZ2VzOwotICAgICAgICB2YXIgZWRnZXNMZW5ndGggPSBlZGdlcy5sZW5ndGg7Ci0gICAg
ICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2VkZ2VGaWVsZENvdW50OwotICAgICAgICB2
YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICAgICAgZm9yICh2
YXIgaSA9IHRoaXMuX2VkZ2VUYXJnZXRPZmZzZXQ7IGkgPCBlZGdlc0xlbmd0aDsgaSArPSBlZGdl
RmllbGRDb3VudCkgewotICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gZWRnZXNbaV07Ci0g
ICAgICAgICAgICBub2RlSGFzSW5jb21pbmdFZGdlc1t0YXJnZXRJbmRleF0gPSAxOwotICAgICAg
ICB9Ci0gICAgICAgIHZhciByb290cyA9IFtdOwotICAgICAgICB2YXIgbm9kZUNvdW50ID0gbm9k
ZUhhc0luY29taW5nRWRnZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5v
ZGVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGVIYXNJbmNvbWluZ0VkZ2VzW2ld
KQotICAgICAgICAgICAgICAgIHJvb3RzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFw
R3JhcGhOb2RlKHRoaXMsIGkgKiBub2RlRmllbGRDb3VudCkpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByb290czsKLSAgICB9LAotCi0gICAgX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7Ci0gICAg
ICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAgICB2
YXIgbm9kZUxlbmd0aCA9IG5vZGVzLmxlbmd0aDsKLSAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4
ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7IGkg
PCBub2RlTGVuZ3RoOyBpICs9IG5vZGVGaWVsZENvdW50KSB7Ci0gICAgICAgICAgICB2YXIgY291
bnQgPSBub2Rlc1tpXTsKLSAgICAgICAgICAgIG5vZGVzW2ldID0gZmlyc3RFZGdlSW5kZXg7Ci0g
ICAgICAgICAgICBmaXJzdEVkZ2VJbmRleCArPSBjb3VudDsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLl9hZGREdW1teU5vZGUoKTsKLSAgICB9LAotCi0gICAgX2FkZER1bW15Tm9kZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fbm9kZXMu
bGVuZ3RoICsgdGhpcy5fbm9kZUZpcnN0RWRnZU9mZnNldDsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9ub2RlRmllbGRDb3VudDsgaSsrKQotICAgICAgICAgICAgdGhpcy5fbm9k
ZXMucHVzaCgwKTsKLSAgICAgICAgdGhpcy5fbm9kZXNbZmlyc3RFZGdlUG9zaXRpb25dID0gdGhp
cy5fZWRnZXMubGVuZ3RoOwotICAgIH0KLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgogICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5EYXRhR3JpZH0KICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaH0gbmF0aXZlSGVhcEdyYXBoCiAgKi8KQEAgLTgyNiwxMzggKzU5NCw2
IEBAIFdlYkluc3BlY3Rvci5NZW1vcnlCbG9ja1ZpZXdQcm9wZXJ0aWVzLl9mb3JNZW1vcnlCbG9j
ayA9IGZ1bmN0aW9uKG1lbW9yeUJsb2NrKQogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRl
bmRzIHtXZWJJbnNwZWN0b3IuVmlld30KLSAqIEBwYXJhbSB7TWVtb3J5QWdlbnQuTWVtb3J5Qmxv
Y2t9IG1lbW9yeVNuYXBzaG90Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQaWVDaGFy
dCA9IGZ1bmN0aW9uKG1lbW9yeVNuYXBzaG90KQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNh
bGwodGhpcyk7Ci0gICAgdGhpcy5fbWVtb3J5U25hcHNob3QgPSBtZW1vcnlTbmFwc2hvdDsKLSAg
ICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlz
LmVsZW1lbnQuYWRkU3R5bGVDbGFzcygibWVtb3J5LXBpZS1jaGFydC1jb250YWluZXIiKTsKLSAg
ICB0aGlzLl9tZW1vcnlCbG9ja0xpc3QgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIs
ICJtZW1vcnktYmxvY2tzLWxpc3QiKTsKLQotICAgIHRoaXMuX2NhbnZhc0NvbnRhaW5lciA9IHRo
aXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgIm1lbW9yeS1waWUtY2hhcnQiKTsKLSAgICB0
aGlzLl9jYW52YXMgPSB0aGlzLl9jYW52YXNDb250YWluZXIuY3JlYXRlQ2hpbGQoImNhbnZhcyIp
OwotICAgIHRoaXMuX2FkZEJsb2NrTGFiZWxzKG1lbW9yeVNuYXBzaG90LCB0cnVlKTsKLX0KLQot
V2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVBpZUNoYXJ0LnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAb3ZlcnJpZGUKLSAgICAgKi8KLSAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2l6ZSgpOwotICAgICAgICB0aGlzLl9wYWludCgpOwot
ICAgIH0sCi0KLSAgICBfdXBkYXRlU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IHdpZHRoID0gdGhpcy5fY2FudmFzQ29udGFpbmVyLmNsaWVudFdpZHRoIC0gNTsKLSAgICAgICAg
dmFyIGhlaWdodCA9IHRoaXMuX2NhbnZhc0NvbnRhaW5lci5jbGllbnRIZWlnaHQgLSA1OwotICAg
ICAgICB0aGlzLl9jYW52YXMud2lkdGggPSB3aWR0aDsKLSAgICAgICAgdGhpcy5fY2FudmFzLmhl
aWdodCA9IGhlaWdodDsKLSAgICB9LAotCi0gICAgX2FkZEJsb2NrTGFiZWxzOiBmdW5jdGlvbiht
ZW1vcnlCbG9jaywgaW5jbHVkZUNoaWxkcmVuKQotICAgIHsKLSAgICAgICAgdmFyIHZpZXdQcm9w
ZXJ0aWVzID0gV2ViSW5zcGVjdG9yLk1lbW9yeUJsb2NrVmlld1Byb3BlcnRpZXMuX2Zvck1lbW9y
eUJsb2NrKG1lbW9yeUJsb2NrKTsKLSAgICAgICAgdmFyIHRpdGxlID0gdmlld1Byb3BlcnRpZXMu
X2Rlc2NyaXB0aW9uICsgIjogIiArIE51bWJlci5ieXRlc1RvU3RyaW5nKG1lbW9yeUJsb2NrLnNp
emUpOwotCi0gICAgICAgIHZhciBzd2F0Y2hFbGVtZW50ID0gdGhpcy5fbWVtb3J5QmxvY2tMaXN0
LmNyZWF0ZUNoaWxkKCJkaXYiLCAiaXRlbSIpOwotICAgICAgICBzd2F0Y2hFbGVtZW50LmNyZWF0
ZUNoaWxkKCJkaXYiLCAic3dhdGNoIikuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmlld1Byb3Bl
cnRpZXMuX2ZpbGxTdHlsZTsKLSAgICAgICAgc3dhdGNoRWxlbWVudC5jcmVhdGVDaGlsZCgic3Bh
biIsICJ0aXRsZSIpLnRleHRDb250ZW50ID0gdGl0bGU7Ci0KLSAgICAgICAgaWYgKCFtZW1vcnlC
bG9jay5jaGlsZHJlbiB8fCAhaW5jbHVkZUNoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lbW9yeUJsb2NrLmNoaWxkcmVuLmxlbmd0aDsg
aSsrKQotICAgICAgICAgICAgdGhpcy5fYWRkQmxvY2tMYWJlbHMobWVtb3J5QmxvY2suY2hpbGRy
ZW5baV0sIGZhbHNlKTsKLSAgICB9LAotCi0gICAgX3BhaW50OiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB0aGlzLl9jbGVhcigpOwotICAgICAgICB2YXIgd2lkdGggPSB0aGlzLl9jYW52YXMu
d2lkdGg7Ci0gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9jYW52YXMuaGVpZ2h0OwotCi0gICAg
ICAgIHZhciB4ID0gd2lkdGggLyAyOwotICAgICAgICB2YXIgeSA9IGhlaWdodCAvIDI7Ci0gICAg
ICAgIHZhciByYWRpdXMgPSAyMDA7Ci0KLSAgICAgICAgdmFyIGN0eCA9IHRoaXMuX2NhbnZhcy5n
ZXRDb250ZXh0KCIyZCIpOwotICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgIGN0eC5h
cmMoeCwgeSwgcmFkaXVzLCAwLCBNYXRoLlBJKjIsIGZhbHNlKTsKLSAgICAgICAgY3R4LmxpbmVX
aWR0aCA9IDE7Ci0gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDEzMCwgMTMwLCAxMzAs
IDAuOCkiOwotICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsK
LQotICAgICAgICB2YXIgY3VycmVudEFuZ2xlID0gMDsKLSAgICAgICAgdmFyIG1lbW9yeUJsb2Nr
ID0gdGhpcy5fbWVtb3J5U25hcHNob3Q7Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFpbnRQZXJjZW50
QW5kTGFiZWwoZnJhY3Rpb24sIHRpdGxlLCBtaWRBbmdsZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY3R4LmZvbnQgPSAiMTNweCBBcmlhbCI7
Ci0gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoMTAsIDEwLCAxMCwgMC44KSI7Ci0K
LSAgICAgICAgICAgIHZhciB0ZXh0WCA9IHggKyAocmFkaXVzICsgMTApICogTWF0aC5jb3MobWlk
QW5nbGUpOwotICAgICAgICAgICAgdmFyIHRleHRZID0geSArIChyYWRpdXMgKyAxMCkgKiBNYXRo
LnNpbihtaWRBbmdsZSk7Ci0gICAgICAgICAgICB2YXIgcmVsYXRpdmVPZmZzZXQgPSAtTWF0aC5j
b3MobWlkQW5nbGUpIC8gTWF0aC5zaW4oTWF0aC5QSSAvIDEyKTsKLSAgICAgICAgICAgIHJlbGF0
aXZlT2Zmc2V0ID0gTnVtYmVyLmNvbnN0cmFpbihyZWxhdGl2ZU9mZnNldCwgLTEsIDEpOwotICAg
ICAgICAgICAgdmFyIG1ldHJpY3MgPSBjdHgubWVhc3VyZVRleHQodGl0bGUpOwotICAgICAgICAg
ICAgdGV4dFggLT0gbWV0cmljcy53aWR0aCAqIChyZWxhdGl2ZU9mZnNldCArIDEpIC8gMjsKLSAg
ICAgICAgICAgIHRleHRZICs9IDU7Ci0gICAgICAgICAgICBjdHguZmlsbFRleHQodGl0bGUsIHRl
eHRYLCB0ZXh0WSk7Ci0KLSAgICAgICAgICAgIC8vIERvIG5vdCBwcmludCBwZXJjZW50YWdlIGlm
IHRoZSBzZWN0b3IgaXMgdG9vIG5hcnJvdy4KLSAgICAgICAgICAgIGlmIChmcmFjdGlvbiA+IDAu
MDMpIHsKLSAgICAgICAgICAgICAgICB0ZXh0WCA9IHggKyByYWRpdXMgKiBNYXRoLmNvcyhtaWRB
bmdsZSkgLyAyOwotICAgICAgICAgICAgICAgIHRleHRZID0geSArIHJhZGl1cyAqIE1hdGguc2lu
KG1pZEFuZ2xlKSAvIDI7Ci0gICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCgxMDAgKiBmcmFj
dGlvbikudG9GaXhlZCgwKSArICIlIiwgdGV4dFggLSA4LCB0ZXh0WSArIDUpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW1lbW9yeUJsb2NrLmNoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgdG90YWwgPSBtZW1vcnlCbG9jay5zaXplOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1lbW9yeUJsb2NrLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIg
Y2hpbGQgPSBtZW1vcnlCbG9jay5jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIGlmICghY2hpbGQu
c2l6ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciB2aWV3UHJv
cGVydGllcyA9IFdlYkluc3BlY3Rvci5NZW1vcnlCbG9ja1ZpZXdQcm9wZXJ0aWVzLl9mb3JNZW1v
cnlCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICB2YXIgYW5nbGVTcGFuID0gTWF0aC5QSSAqIDIg
KiAoY2hpbGQuc2l6ZSAvIHRvdGFsKTsKLSAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAg
ICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7Ci0gICAgICAgICAgICBjdHgubGluZVRvKHggKyBy
YWRpdXMgKiBNYXRoLmNvcyhjdXJyZW50QW5nbGUpLCB5ICsgcmFkaXVzICogTWF0aC5zaW4oY3Vy
cmVudEFuZ2xlKSk7Ci0gICAgICAgICAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgY3VycmVudEFu
Z2xlLCBjdXJyZW50QW5nbGUgKyBhbmdsZVNwYW4sIGZhbHNlKTsKLSAgICAgICAgICAgIGN0eC5s
aW5lV2lkdGggPSAwLjU7Ci0gICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpOwotICAgICAgICAg
ICAgY3R4LmZpbGxTdHlsZSA9IHZpZXdQcm9wZXJ0aWVzLl9maWxsU3R5bGU7Ci0gICAgICAgICAg
ICBjdHguc3Ryb2tlU3R5bGUgPSAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjgpIjsKLSAgICAgICAg
ICAgIGN0eC5maWxsKCk7Ci0gICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAgICBj
dHguY2xvc2VQYXRoKCk7Ci0KLSAgICAgICAgICAgIHBhaW50UGVyY2VudEFuZExhYmVsKGNoaWxk
LnNpemUgLyB0b3RhbCwgdmlld1Byb3BlcnRpZXMuX2Rlc2NyaXB0aW9uLCBjdXJyZW50QW5nbGUg
KyBhbmdsZVNwYW4gLyAyKTsKLQotICAgICAgICAgICAgY3VycmVudEFuZ2xlICs9IGFuZ2xlU3Bh
bjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfY2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIGN0eC5j
bGVhclJlY3QoMCwgMCwgY3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwotICAg
IH0sCi0KLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQogICov
CiBXZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5QmFyQ2hhcnQgPSBmdW5jdGlvbigpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMK
aW5kZXggMmVjMjhmYWVlYzk3MzhlNWFhODcwYmNiZjM2OTk2YzMyNTVmYzEyNC4uNzY3ODNiMDRj
ZjViMjE3Njc2OGM4NWRlZWVjMjkwOWQzZjExMzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtMTM2Nyw2ICsxMzY3
LDcgQEAgaW1wb3J0U2NyaXB0KCJIZWFwU25hcHNob3RMb2FkZXIuanMiKTsKIGltcG9ydFNjcmlw
dCgiSGVhcFNuYXBzaG90UHJveHkuanMiKTsKIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90Vmll
dy5qcyIpOwogaW1wb3J0U2NyaXB0KCJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIik7
CitpbXBvcnRTY3JpcHQoIk5hdGl2ZUhlYXBHcmFwaC5qcyIpOwogaW1wb3J0U2NyaXB0KCJOYXRp
dmVNZW1vcnlTbmFwc2hvdFZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiUHJvZmlsZUxhdW5jaGVy
Vmlldy5qcyIpOwogaW1wb3J0U2NyaXB0KCJUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4
IDRjMGMxMmQ3MTIxNGRjOGUwZWRkMWE4MTQ3MmNmNzgxMzIwYTBkOWMuLmU0NDIyZGZhNDBiZjA4
ZTZlMzMxZmRkZTllM2VjM2JkOWMyZTg3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgIDxmaWxlPk1l
bW9yeVN0YXRpc3RpY3MuanM8L2ZpbGU+CiAgICAgPGZpbGU+TWV0cmljc1NpZGViYXJQYW5lLmpz
PC9maWxlPgogICAgIDxmaWxlPk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+
CisgICAgPGZpbGU+TmF0aXZlSGVhcEdyYXBoLmpzPC9maWxlPgogICAgIDxmaWxlPk5hdGl2ZU1l
bW9yeVNuYXBzaG90Vmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5OYXZpZ2F0b3JPdmVybGF5Q29u
dHJvbGxlci5qczwvZmlsZT4KICAgICA8ZmlsZT5OYXZpZ2F0b3JWaWV3LmpzPC9maWxlPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180319</attachid>
            <date>2012-12-20 04:18:15 -0800</date>
            <delta_ts>2012-12-20 04:26:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105524-20121220161530.patch</filename>
            <type>text/plain</type>
            <size>27958</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhYTM0NWU5OGE0ZmUz
M2IyYWI4YjM1NDRkNzg2YmFiYjAyZjZkMy4uYjNmYmQwZmMzZmNmOTQ5NzlmZWM5ZTc3MzQzNzU1
MDk5NjY4YjY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEyLTIwICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4dHJhY3QgbmF0aXZlIGhlYXAgZ3JhcGggcmVwcmVzZW50YXRpb24gaW50byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVkIG5hdGl2ZSBoZWFwIGdyYXBoIHBhcnNlciBpbnRvIE5hdGl2ZUhlYXBHcmFwaC5qcwor
ICAgICAgICBSZW1vdmVkIHVudXNlZCBwaWUgY2hhcnQgdmlldy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24pOiBmaXhlZCBvcHRpb25hbCBwYXJhbWV0ZXIgaGFuZGxpbmcKKyAgICAgICAg
KiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVIZWFwR3JhcGguanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBo
LnByb3RvdHlwZS5yb290Tm9kZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBH
cmFwaC5wcm90b3R5cGUuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZS5fYWRkRHVtbXlOb2RlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS50eXBlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS5uYW1lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZS50YXJnZXQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UucHJvdG90eXBlLl9nZXRTdHJpbmdG
aWVsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZS5wcm90b3R5
cGUudG9TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUucHJvdG90eXBlLmlk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS50
eXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlw
ZS5zaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3Rv
dHlwZS5jbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUucHJvdG90eXBlLm5hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFw
aE5vZGUucHJvdG90eXBlLmhhc1JlZmVyZW5jZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBoTm9kZS5wcm90b3R5cGUucmVmZXJlbmNlZE5vZGVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS5vdXRnb2luZ0Vk
Z2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlw
ZS50YXJnZXRPZkVkZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUucHJvdG90eXBlLnRhcmdldHNPZkFsbEVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5O
YXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZS5fZmlyc3RFZGdlUG9pc3Rpb24pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUucHJvdG90eXBlLl9hZnRlckxhc3RF
ZGdlUG9zaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUu
cHJvdG90eXBlLl9nZXRTdHJpbmdGaWVsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZl
SGVhcEdyYXBoTm9kZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmM6CisKIDIwMTItMTItMjAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBXaW5DRSBhZnRlciByMTM3NTM0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDJjYjMwZDhiZTJiNmJmNzc2YzIxNWYwNzM0MDNlMGE0NDU1
MzZkNWEuLjI1M2RkYzQzYTBjNzQ3ODhmZDU4MzAyNzE0ODQwODg1MDI4ZmQwM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTUzMjIsNiArNTMyMiw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0hlYXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlSGVhcEdyYXBoLmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlRGF0YUdyaWRUcmVlLmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggNDI5NTEx
Y2YxODdkNThhNGYwMDlmMjdlM2EzMzc4NTkxNTlkODcyOS4uNWI2ZWY0NTczYWZkNDBkYmU2Zjlj
N2VmNzJjNTQ5MjhkMjY5YTdiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC01MzksNyArNTM5LDcgQEAgc3RhdGljIHZvaWQg
YWRkUGxhdGZvcm1Db21wb25lbnRzSW5mbyhQYXNzUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJsb2Nr
cz4gY2hpbGRyZW4KIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlE
aXN0cmlidXRpb24oRXJyb3JTdHJpbmcqLCBjb25zdCBib29sKiByZXBvcnRHcmFwaCwgUmVmUHRy
PEluc3BlY3Rvck1lbW9yeUJsb2NrPiYgcHJvY2Vzc01lbW9yeSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIGdyYXBoKQogewogICAgIE93blB0cjxIZWFwR3JhcGhTZXJpYWxpemVyPiBncmFwaFNl
cmlhbGl6ZXI7Ci0gICAgaWYgKHJlcG9ydEdyYXBoKQorICAgIGlmIChyZXBvcnRHcmFwaCAmJiAq
cmVwb3J0R3JhcGgpCiAgICAgICAgIGdyYXBoU2VyaWFsaXplciA9IGFkb3B0UHRyKG5ldyBIZWFw
R3JhcGhTZXJpYWxpemVyKCkpOwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudEltcGwg
bWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50KGdyYXBoU2VyaWFsaXplci5nZXQoKSk7CiAgICAg
bV9pbnNwZWN0b3JDbGllbnQtPmdldEFsbG9jYXRlZE9iamVjdHMobWVtb3J5SW5zdHJ1bWVudGF0
aW9uQ2xpZW50LmFsbG9jYXRlZE9iamVjdHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvY29tcGlsZS1mcm9udC1lbmQucHkKaW5kZXggNWIxYTBmMjNiZTc4NTgyZDNmMmEyNDA3ODA3
ZmJjODUxZTViZWFkNy4uMDBmNTU1NjQ0YTAyNjg0ZGI1NWRjZTUwM2UwZGQ0NjkyNjQ4NzdmNSAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAt
MzMwLDYgKzMzMCw3IEBAIG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiSGVhcFNuYXBzaG90Vmll
dy5qcyIsCiAgICAgICAgICAgICAiSGVhcFNuYXBzaG90V29ya2VyLmpzIiwKICAgICAgICAgICAg
ICJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIiwKKyAgICAgICAgICAgICJOYXRpdmVI
ZWFwR3JhcGguanMiLAogICAgICAgICAgICAgIk5hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcyIs
CiAgICAgICAgICAgICAiUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCiAgICAgICAgICAgICAiUHJv
ZmlsZXNQYW5lbC5qcyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvTmF0aXZlSGVhcEdyYXBoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMWNlOGQwNzU5NzUxNGEwOTRl
NzMyM2QzNjJlOWY5OWQxMmYyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qcwpAQCAtMCwwICsxLDI2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaCA9
IGZ1bmN0aW9uKHJhd0dyYXBoKQoreworICAgIHRoaXMuX3Jhd0dyYXBoID0gcmF3R3JhcGg7CisK
KyAgICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IDU7CisgICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQg
PSAwOworICAgIHRoaXMuX25vZGVTaXplT2Zmc2V0ID0gMTsKKyAgICB0aGlzLl9ub2RlQ2xhc3NO
YW1lT2Zmc2V0ID0gMjsKKyAgICB0aGlzLl9ub2RlTmFtZU9mZnNldCA9IDM7CisgICAgdGhpcy5f
bm9kZUVkZ2VDb3VudE9mZnNldCA9IDQ7CisgICAgdGhpcy5fbm9kZUZpcnN0RWRnZU9mZnNldCA9
IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7CisKKyAgICB0aGlzLl9lZGdlRmllbGRDb3VudCA9
IDM7CisgICAgdGhpcy5fZWRnZVR5cGVPZmZzZXQgPSAwOworICAgIHRoaXMuX2VkZ2VUYXJnZXRP
ZmZzZXQgPSAxOworICAgIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0ID0gMjsKKworICAgIHRoaXMuX25v
ZGVDb3VudCA9IHJhd0dyYXBoLm5vZGVzLmxlbmd0aCAvIHRoaXMuX25vZGVGaWVsZENvdW50Owor
ICAgIHRoaXMuX25vZGVzID0gcmF3R3JhcGgubm9kZXM7CisgICAgdGhpcy5fZWRnZXMgPSByYXdH
cmFwaC5lZGdlczsKKyAgICB0aGlzLl9zdHJpbmdzID0gcmF3R3JhcGguc3RyaW5nczsKKworICAg
IHRoaXMuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlcygpOworfQorCitXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBoLnByb3RvdHlwZSA9IHsKKyAgICByb290Tm9kZXM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBub2RlSGFzSW5jb21pbmdFZGdlcyA9IG5ldyBVaW50OEFycmF5KHRo
aXMuX25vZGVDb3VudCk7CisgICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2VkZ2VzOworICAgICAg
ICB2YXIgZWRnZXNMZW5ndGggPSBlZGdlcy5sZW5ndGg7CisgICAgICAgIHZhciBlZGdlRmllbGRD
b3VudCA9IHRoaXMuX2VkZ2VGaWVsZENvdW50OworICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQg
PSB0aGlzLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2VkZ2VU
YXJnZXRPZmZzZXQ7IGkgPCBlZGdlc0xlbmd0aDsgaSArPSBlZGdlRmllbGRDb3VudCkgeworICAg
ICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gZWRnZXNbaV07CisgICAgICAgICAgICBub2RlSGFz
SW5jb21pbmdFZGdlc1t0YXJnZXRJbmRleF0gPSAxOworICAgICAgICB9CisgICAgICAgIHZhciBy
b290cyA9IFtdOworICAgICAgICB2YXIgbm9kZUNvdW50ID0gbm9kZUhhc0luY29taW5nRWRnZXMu
bGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVIYXNJbmNvbWluZ0VkZ2VzW2ldKQorICAgICAgICAgICAgICAg
IHJvb3RzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZSh0aGlzLCBp
ICogbm9kZUZpZWxkQ291bnQpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcm9vdHM7Cisg
ICAgfSwKKworICAgIF9jYWxjdWxhdGVOb2RlRWRnZUluZGV4ZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBub2RlcyA9IHRoaXMuX25vZGVzOworICAgICAgICB2YXIgbm9kZUZpZWxk
Q291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAgdmFyIG5vZGVMZW5ndGggPSBu
b2Rlcy5sZW5ndGg7CisgICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IDA7CisgICAgICAgIGZv
ciAodmFyIGkgPSB0aGlzLl9ub2RlRWRnZUNvdW50T2Zmc2V0OyBpIDwgbm9kZUxlbmd0aDsgaSAr
PSBub2RlRmllbGRDb3VudCkgeworICAgICAgICAgICAgdmFyIGNvdW50ID0gbm9kZXNbaV07Cisg
ICAgICAgICAgICBub2Rlc1tpXSA9IGZpcnN0RWRnZUluZGV4OworICAgICAgICAgICAgZmlyc3RF
ZGdlSW5kZXggKz0gY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fYWRkRHVtbXlOb2Rl
KCk7CisgICAgfSwKKworICAgIF9hZGREdW1teU5vZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX25vZGVzLmxlbmd0aCArIHRoaXMuX25v
ZGVGaXJzdEVkZ2VPZmZzZXQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbm9k
ZUZpZWxkQ291bnQ7IGkrKykKKyAgICAgICAgICAgIHRoaXMuX25vZGVzLnB1c2goMCk7CisgICAg
ICAgIHRoaXMuX25vZGVzW2ZpcnN0RWRnZVBvc2l0aW9uXSA9IHRoaXMuX2VkZ2VzLmxlbmd0aDsK
KyAgICB9Cit9CisKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLk5hdGl2ZUhlYXBHcmFwaH0gZ3JhcGgKKyAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbgor
ICovCitXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLkVkZ2UgPSBmdW5jdGlvbihncmFwaCwg
cG9zaXRpb24pCit7CisgICAgdGhpcy5fZ3JhcGggPSBncmFwaDsKKyAgICB0aGlzLl9wb3NpdGlv
biA9IHBvc2l0aW9uOworfQorCitXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLkVkZ2UucHJv
dG90eXBlID0geworICAgIHR5cGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fZWRnZVR5cGVPZmZzZXQpOworICAgIH0s
CisKKyAgICBuYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0
U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX2VkZ2VOYW1lT2Zmc2V0KTsKKyAgICB9LAorCisgICAg
dGFyZ2V0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFw
aC5fZWRnZXM7CisgICAgICAgIHZhciB0YXJnZXRQb3NpdGlvbiA9IGVkZ2VzW3RoaXMuX3Bvc2l0
aW9uICsgdGhpcy5fZ3JhcGguX2VkZ2VUYXJnZXRPZmZzZXRdICogdGhpcy5fZ3JhcGguX25vZGVG
aWVsZENvdW50OworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3Jh
cGguTm9kZSh0aGlzLl9ncmFwaCwgdGFyZ2V0UG9zaXRpb24pOworICAgIH0sCisKKyAgICBfZ2V0
U3RyaW5nRmllbGQ6IGZ1bmN0aW9uKG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlSW5k
ZXggPSB0aGlzLl9ncmFwaC5fZWRnZXNbdGhpcy5fcG9zaXRpb24gKyBvZmZzZXRdOworICAgICAg
ICByZXR1cm4gdGhpcy5fZ3JhcGguX3Jhd0dyYXBoLnN0cmluZ3NbdHlwZUluZGV4XTsKKyAgICB9
LAorCisgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiRWRn
ZSMiICsgdGhpcy5fcG9zaXRpb24gKyAiIC0iICsgdGhpcy5uYW1lKCkgKyAiLT4gIiArIHRoaXMu
dGFyZ2V0KCk7CisgICAgfQorCit9CisKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaH0gZ3JhcGgKKyAqIEBwYXJhbSB7bnVtYmVy
fSBwb3NpdGlvbgorICovCitXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUgPSBmdW5j
dGlvbihncmFwaCwgcG9zaXRpb24pCit7CisgICAgdGhpcy5fZ3JhcGggPSBncmFwaDsKKyAgICB0
aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uOworfQorCitXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdy
YXBoLk5vZGUucHJvdG90eXBlID0geworICAgIGlkOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fcG9zaXRpb24gLyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7Cisg
ICAgfSwKKworICAgIHR5cGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZVR5cGVPZmZzZXQpOworICAgIH0sCisK
KyAgICBzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGgu
X25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGguX25vZGVTaXplT2Zmc2V0XTsKKyAg
ICB9LAorCisgICAgY2xhc3NOYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVDbGFzc05hbWVPZmZzZXQpOwor
ICAgIH0sCisKKyAgICBuYW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVOYW1lT2Zmc2V0KTsKKyAgICB9LAor
CisgICAgaGFzUmVmZXJlbmNlZE5vZGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCkgPiB0aGlzLl9maXJzdEVkZ2VQb2lzdGlv
bigpOworICAgIH0sCisKKyAgICByZWZlcmVuY2VkTm9kZXM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKKyAgICAgICAgdmFyIG5vZGVz
ID0gdGhpcy5fZ3JhcGguX25vZGVzOworICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlz
Ll9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7CisgICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRo
aXMuX2dyYXBoLl9ub2RlRmllbGRDb3VudDsKKworICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRp
b24gPSB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOworICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRn
ZVBvc2l0aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uICsgdGhp
cy5fZ3JhcGguX2VkZ2VUYXJnZXRPZmZzZXQ7IGkgPCBhZnRlckxhc3RFZGdlUG9zaXRpb247IGkg
Kz0gZWRnZUZpZWxkQ291bnQpCisgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVj
dG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlKHRoaXMuX2dyYXBoLCBlZGdlc1tpXSAqIG5vZGVGaWVs
ZENvdW50KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIG91dGdvaW5n
RWRnZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2dyYXBo
Ll9lZGdlczsKKyAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGguX2VkZ2VG
aWVsZENvdW50OworCisgICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2ZpcnN0
RWRnZVBvaXN0aW9uKCk7CisgICAgICAgIHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24gPSB0aGlz
Ll9hZnRlckxhc3RFZGdlUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAg
ICAgICBmb3IgKHZhciBpID0gZmlyc3RFZGdlUG9zaXRpb247IGkgPCBhZnRlckxhc3RFZGdlUG9z
aXRpb247IGkgKz0gZWRnZUZpZWxkQ291bnQpCisgICAgICAgICAgICByZXN1bHQucHVzaChuZXcg
V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlKHRoaXMuX2dyYXBoLCBpKSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIHRhcmdldE9mRWRnZTogZnVuY3Rpb24o
ZWRnZU5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRzT2ZBbGxFZGdlcyhl
ZGdlTmFtZSlbMF07CisgICAgfSwKKworICAgIHRhcmdldHNPZkFsbEVkZ2VzOiBmdW5jdGlvbihl
ZGdlTmFtZSkKKyAgICB7CisgICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsK
KyAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50
OworCisgICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2ZpcnN0RWRnZVBvaXN0
aW9uKCk7CisgICAgICAgIHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9hZnRlckxh
c3RFZGdlUG9zaXRpb24oKTsKKworICAgICAgICB2YXIgZWRnZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
TmF0aXZlSGVhcEdyYXBoLkVkZ2UodGhpcy5fZ3JhcGgsIGZpcnN0RWRnZVBvc2l0aW9uKQorICAg
ICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEVkZ2VQb3Np
dGlvbjsgaSA8IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmllbGRDb3VudCkgewor
ICAgICAgICAgICAgZWRnZS5fcG9zaXRpb24gPSBpOworICAgICAgICAgICAgaWYgKGVkZ2UubmFt
ZSgpID09PSBlZGdlTmFtZSkKKyAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlZGdlLnRhcmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBf
Zmlyc3RFZGdlUG9pc3Rpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9ncmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpcnN0RWRn
ZU9mZnNldF0gKiB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7CisgICAgfSwKKworICAgIF9h
ZnRlckxhc3RFZGdlUG9zaXRpb246IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9ncmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxk
Q291bnQgKyB0aGlzLl9ncmFwaC5fbm9kZUZpcnN0RWRnZU9mZnNldF0gKiB0aGlzLl9ncmFwaC5f
ZWRnZUZpZWxkQ291bnQ7CisgICAgfSwKKworICAgIF9nZXRTdHJpbmdGaWVsZDogZnVuY3Rpb24o
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGVJbmRleCA9IHRoaXMuX2dyYXBoLl9ub2Rl
c1t0aGlzLl9wb3NpdGlvbiArIG9mZnNldF07CisgICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5f
cmF3R3JhcGguc3RyaW5nc1t0eXBlSW5kZXhdOworICAgIH0sCisKKyAgICB0b1N0cmluZzogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJOb2RlIyIgKyB0aGlzLmlkKCkgKyAiICIg
KyB0aGlzLm5hbWUoKSArICIoIiArIHRoaXMuY2xhc3NOYW1lKCkgKyAiKSI7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1v
cnlTbmFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05h
dGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwppbmRleCA3YWZlOGUyYjVmNDFjMTI4MzA2N2RmNWRm
OGY0YmFmNWI1N2RhNDlhLi43ZTJkZjBiYzRmYWU3MTI0MGFiNWZlYWQyODlkMWUzOTM4NzczYzgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1l
bW9yeVNuYXBzaG90Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcwpAQCAtMzI2LDIzOCArMzI2LDYgQEAgV2Vi
SW5zcGVjdG9yLk5hdGl2ZVNuYXBzaG90Tm9kZS5wcm90b3R5cGUgPSB7CiAKIC8qKgogICogQGNv
bnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IGdyYXBo
Ci0gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24KLSAqLwotV2ViSW5zcGVjdG9yLk5hdGl2ZUhl
YXBHcmFwaEVkZ2UgPSBmdW5jdGlvbihncmFwaCwgcG9zaXRpb24pCi17Ci0gICAgdGhpcy5fZ3Jh
cGggPSBncmFwaDsKLSAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi1XZWJJbnNw
ZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZS5wcm90b3R5cGUgPSB7Ci0gICAgdHlwZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dy
YXBoLl9lZGdlVHlwZU9mZnNldCk7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fZWRn
ZU5hbWVPZmZzZXQpOwotICAgIH0sCi0KLSAgICB0YXJnZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIHRhcmdl
dFBvc2l0aW9uID0gZWRnZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fZWRnZVRhcmdl
dE9mZnNldF0gKiB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgIHJldHVybiBu
ZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUodGhpcy5fZ3JhcGgsIHRhcmdldFBv
c2l0aW9uKTsKLSAgICB9LAotCi0gICAgX2dldFN0cmluZ0ZpZWxkOiBmdW5jdGlvbihvZmZzZXQp
Ci0gICAgewotICAgICAgICB2YXIgdHlwZUluZGV4ID0gdGhpcy5fZ3JhcGguX2VkZ2VzW3RoaXMu
X3Bvc2l0aW9uICsgb2Zmc2V0XTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9yYXdHcmFw
aC5zdHJpbmdzW3R5cGVJbmRleF07Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gIkVkZ2UjIiArIHRoaXMuX3Bvc2l0aW9uICsgIiAtIiAr
IHRoaXMubmFtZSgpICsgIi0+ICIgKyB0aGlzLnRhcmdldCgpOwotICAgIH0KLQotfQotCi0KLS8q
KgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3Jh
cGh9IGdyYXBoCi0gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24KLSAqLwotV2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaE5vZGUgPSBmdW5jdGlvbihncmFwaCwgcG9zaXRpb24pCi17Ci0gICAg
dGhpcy5fZ3JhcGggPSBncmFwaDsKLSAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uOwotfQot
Ci1XZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAgaWQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbiAvIHRoaXMu
X2dyYXBoLl9ub2RlRmllbGRDb3VudDsKLSAgICB9LAotCi0gICAgdHlwZTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9u
b2RlVHlwZU9mZnNldCk7Ci0gICAgfSwKLQotICAgIHNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlzLl9n
cmFwaC5fbm9kZVNpemVPZmZzZXRdOwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFw
aC5fbm9kZUNsYXNzTmFtZU9mZnNldCk7Ci0gICAgfSwKLQotICAgIG5hbWU6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5f
bm9kZU5hbWVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBoYXNSZWZlcmVuY2VkTm9kZXM6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24o
KSA+IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgfSwKLQotICAgIHJlZmVyZW5jZWRO
b2RlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGgu
X2VkZ2VzOwotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ncmFwaC5fbm9kZXM7Ci0gICAgICAg
IHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLSAgICAg
ICAgdmFyIG5vZGVGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGguX25vZGVGaWVsZENvdW50OwotCi0g
ICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7
Ci0gICAgICAgIHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9hZnRlckxhc3RFZGdl
UG9zaXRpb24oKTsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBp
ID0gZmlyc3RFZGdlUG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fZWRnZVRhcmdldE9mZnNldDsgaSA8
IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmllbGRDb3VudCkKLSAgICAgICAgICAg
IHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZSh0aGlzLl9n
cmFwaCwgZWRnZXNbaV0gKiBub2RlRmllbGRDb3VudCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0sCi0KLSAgICBvdXRnb2luZ0VkZ2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7Ci0gICAgICAgIHZhciBlZGdlRmllbGRD
b3VudCA9IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLQotICAgICAgICB2YXIgZmlyc3RF
ZGdlUG9zaXRpb24gPSB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwotICAgICAgICB2YXIgYWZ0
ZXJMYXN0RWRnZVBvc2l0aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7Ci0gICAg
ICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0
aW9uOyBpIDwgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KQotICAg
ICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdl
KHRoaXMuX2dyYXBoLCBpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAg
IHRhcmdldE9mRWRnZTogZnVuY3Rpb24oZWRnZU5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy50YXJnZXRzT2ZBbGxFZGdlcyhlZGdlTmFtZSlbMF07Ci0gICAgfSwKLQotICAgIHRhcmdl
dHNPZkFsbEVkZ2VzOiBmdW5jdGlvbihlZGdlTmFtZSkKLSAgICB7Ci0gICAgICAgIHZhciBlZGdl
cyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhp
cy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OwotCi0gICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlv
biA9IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgICAgIHZhciBhZnRlckxhc3RFZGdl
UG9zaXRpb24gPSB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24oKTsKLQotICAgICAgICB2YXIg
ZWRnZSA9IG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRnZSh0aGlzLl9ncmFwaCwg
Zmlyc3RFZGdlUG9zaXRpb24pCi0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uOyBpIDwgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOyBp
ICs9IGVkZ2VGaWVsZENvdW50KSB7Ci0gICAgICAgICAgICBlZGdlLl9wb3NpdGlvbiA9IGk7Ci0g
ICAgICAgICAgICBpZiAoZWRnZS5uYW1lKCkgPT09IGVkZ2VOYW1lKQotICAgICAgICAgICAgICAg
IHJlc3VsdC5wdXNoKGVkZ2UudGFyZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9maXJzdEVkZ2VQb2lzdGlvbjogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRo
aXMuX2dyYXBoLl9ub2RlRmlyc3RFZGdlT2Zmc2V0XSAqIHRoaXMuX2dyYXBoLl9lZGdlRmllbGRD
b3VudDsKLSAgICB9LAotCi0gICAgX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbjogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiAr
IHRoaXMuX2dyYXBoLl9ub2RlRmllbGRDb3VudCArIHRoaXMuX2dyYXBoLl9ub2RlRmlyc3RFZGdl
T2Zmc2V0XSAqIHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLSAgICB9LAotCi0gICAgX2dl
dFN0cmluZ0ZpZWxkOiBmdW5jdGlvbihvZmZzZXQpCi0gICAgewotICAgICAgICB2YXIgdHlwZUlu
ZGV4ID0gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgb2Zmc2V0XTsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9yYXdHcmFwaC5zdHJpbmdzW3R5cGVJbmRleF07Ci0gICAg
fSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gIk5v
ZGUjIiArIHRoaXMuaWQoKSArICIgIiArIHRoaXMubmFtZSgpICsgIigiICsgdGhpcy5jbGFzc05h
bWUoKSArICIpIjsKLSAgICB9Ci19Ci0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2Vi
SW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaCA9IGZ1bmN0aW9uKHJhd0dyYXBoKQotewotICAgIHRo
aXMuX3Jhd0dyYXBoID0gcmF3R3JhcGg7Ci0KLSAgICB0aGlzLl9ub2RlRmllbGRDb3VudCA9IDU7
Ci0gICAgdGhpcy5fbm9kZVR5cGVPZmZzZXQgPSAwOwotICAgIHRoaXMuX25vZGVTaXplT2Zmc2V0
ID0gMTsKLSAgICB0aGlzLl9ub2RlQ2xhc3NOYW1lT2Zmc2V0ID0gMjsKLSAgICB0aGlzLl9ub2Rl
TmFtZU9mZnNldCA9IDM7Ci0gICAgdGhpcy5fbm9kZUVkZ2VDb3VudE9mZnNldCA9IDQ7Ci0gICAg
dGhpcy5fbm9kZUZpcnN0RWRnZU9mZnNldCA9IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7Ci0K
LSAgICB0aGlzLl9lZGdlRmllbGRDb3VudCA9IDM7Ci0gICAgdGhpcy5fZWRnZVR5cGVPZmZzZXQg
PSAwOwotICAgIHRoaXMuX2VkZ2VUYXJnZXRPZmZzZXQgPSAxOwotICAgIHRoaXMuX2VkZ2VOYW1l
T2Zmc2V0ID0gMjsKLQotICAgIHRoaXMuX25vZGVDb3VudCA9IHJhd0dyYXBoLm5vZGVzLmxlbmd0
aCAvIHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgIHRoaXMuX25vZGVzID0gcmF3R3JhcGgubm9k
ZXM7Ci0gICAgdGhpcy5fZWRnZXMgPSByYXdHcmFwaC5lZGdlczsKLSAgICB0aGlzLl9zdHJpbmdz
ID0gcmF3R3JhcGguc3RyaW5nczsKLQotICAgIHRoaXMuX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhl
cygpOwotfQotCi1XZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZSA9IHsKLSAg
ICByb290Tm9kZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlSGFzSW5jb21p
bmdFZGdlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMuX25vZGVDb3VudCk7Ci0gICAgICAgIHZhciBl
ZGdlcyA9IHRoaXMuX2VkZ2VzOwotICAgICAgICB2YXIgZWRnZXNMZW5ndGggPSBlZGdlcy5sZW5n
dGg7Ci0gICAgICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2VkZ2VGaWVsZENvdW50Owot
ICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IHRoaXMuX2VkZ2VUYXJnZXRPZmZzZXQ7IGkgPCBlZGdlc0xlbmd0aDsg
aSArPSBlZGdlRmllbGRDb3VudCkgewotICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gZWRn
ZXNbaV07Ci0gICAgICAgICAgICBub2RlSGFzSW5jb21pbmdFZGdlc1t0YXJnZXRJbmRleF0gPSAx
OwotICAgICAgICB9Ci0gICAgICAgIHZhciByb290cyA9IFtdOwotICAgICAgICB2YXIgbm9kZUNv
dW50ID0gbm9kZUhhc0luY29taW5nRWRnZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGVIYXNJbmNvbWlu
Z0VkZ2VzW2ldKQotICAgICAgICAgICAgICAgIHJvb3RzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5O
YXRpdmVIZWFwR3JhcGhOb2RlKHRoaXMsIGkgKiBub2RlRmllbGRDb3VudCkpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiByb290czsKLSAgICB9LAotCi0gICAgX2NhbGN1bGF0ZU5vZGVFZGdl
SW5kZXhlczogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fbm9k
ZXM7Ci0gICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50Owot
ICAgICAgICB2YXIgbm9kZUxlbmd0aCA9IG5vZGVzLmxlbmd0aDsKLSAgICAgICAgdmFyIGZpcnN0
RWRnZUluZGV4ID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX25vZGVFZGdlQ291bnRP
ZmZzZXQ7IGkgPCBub2RlTGVuZ3RoOyBpICs9IG5vZGVGaWVsZENvdW50KSB7Ci0gICAgICAgICAg
ICB2YXIgY291bnQgPSBub2Rlc1tpXTsKLSAgICAgICAgICAgIG5vZGVzW2ldID0gZmlyc3RFZGdl
SW5kZXg7Ci0gICAgICAgICAgICBmaXJzdEVkZ2VJbmRleCArPSBjb3VudDsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl9hZGREdW1teU5vZGUoKTsKLSAgICB9LAotCi0gICAgX2FkZER1bW15Tm9k
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhp
cy5fbm9kZXMubGVuZ3RoICsgdGhpcy5fbm9kZUZpcnN0RWRnZU9mZnNldDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub2RlRmllbGRDb3VudDsgaSsrKQotICAgICAgICAgICAg
dGhpcy5fbm9kZXMucHVzaCgwKTsKLSAgICAgICAgdGhpcy5fbm9kZXNbZmlyc3RFZGdlUG9zaXRp
b25dID0gdGhpcy5fZWRnZXMubGVuZ3RoOwotICAgIH0KLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5EYXRhR3JpZH0KICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaH0gbmF0aXZlSGVhcEdyYXBoCiAgKi8KQEAgLTYwOSw3
ICszNzcsNyBAQCBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRGF0YUdyaWRSb290LnByb3Rv
dHlwZSA9IHsKIC8qKgogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9y
LkRhdGFHcmlkTm9kZX0KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGV9IG5vZGUKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlfSBu
b2RlCiAgKi8KIFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhEYXRhR3JpZE5vZGUgPSBmdW5j
dGlvbihub2RlKQogewpAQCAtODI2LDEzOCArNTk0LDYgQEAgV2ViSW5zcGVjdG9yLk1lbW9yeUJs
b2NrVmlld1Byb3BlcnRpZXMuX2Zvck1lbW9yeUJsb2NrID0gZnVuY3Rpb24obWVtb3J5QmxvY2sp
CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQot
ICogQHBhcmFtIHtNZW1vcnlBZ2VudC5NZW1vcnlCbG9ja30gbWVtb3J5U25hcHNob3QKLSAqLwot
V2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeVBpZUNoYXJ0ID0gZnVuY3Rpb24obWVtb3J5U25hcHNo
b3QpCi17Ci0gICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzKTsKLSAgICB0aGlzLl9tZW1v
cnlTbmFwc2hvdCA9IG1lbW9yeVNuYXBzaG90OwotICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJt
ZW1vcnktcGllLWNoYXJ0LWNvbnRhaW5lciIpOwotICAgIHRoaXMuX21lbW9yeUJsb2NrTGlzdCA9
IHRoaXMuZWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgIm1lbW9yeS1ibG9ja3MtbGlzdCIpOwot
Ci0gICAgdGhpcy5fY2FudmFzQ29udGFpbmVyID0gdGhpcy5lbGVtZW50LmNyZWF0ZUNoaWxkKCJk
aXYiLCAibWVtb3J5LXBpZS1jaGFydCIpOwotICAgIHRoaXMuX2NhbnZhcyA9IHRoaXMuX2NhbnZh
c0NvbnRhaW5lci5jcmVhdGVDaGlsZCgiY2FudmFzIik7Ci0gICAgdGhpcy5fYWRkQmxvY2tMYWJl
bHMobWVtb3J5U25hcHNob3QsIHRydWUpOwotfQotCi1XZWJJbnNwZWN0b3IuTmF0aXZlTWVtb3J5
UGllQ2hhcnQucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBvdmVycmlkZQotICAgICAq
LwotICAgIG9uUmVzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVT
aXplKCk7Ci0gICAgICAgIHRoaXMuX3BhaW50KCk7Ci0gICAgfSwKLQotICAgIF91cGRhdGVTaXpl
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgd2lkdGggPSB0aGlzLl9jYW52YXNDb250
YWluZXIuY2xpZW50V2lkdGggLSA1OwotICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fY2FudmFz
Q29udGFpbmVyLmNsaWVudEhlaWdodCAtIDU7Ci0gICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9
IHdpZHRoOwotICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0sCi0K
LSAgICBfYWRkQmxvY2tMYWJlbHM6IGZ1bmN0aW9uKG1lbW9yeUJsb2NrLCBpbmNsdWRlQ2hpbGRy
ZW4pCi0gICAgewotICAgICAgICB2YXIgdmlld1Byb3BlcnRpZXMgPSBXZWJJbnNwZWN0b3IuTWVt
b3J5QmxvY2tWaWV3UHJvcGVydGllcy5fZm9yTWVtb3J5QmxvY2sobWVtb3J5QmxvY2spOwotICAg
ICAgICB2YXIgdGl0bGUgPSB2aWV3UHJvcGVydGllcy5fZGVzY3JpcHRpb24gKyAiOiAiICsgTnVt
YmVyLmJ5dGVzVG9TdHJpbmcobWVtb3J5QmxvY2suc2l6ZSk7Ci0KLSAgICAgICAgdmFyIHN3YXRj
aEVsZW1lbnQgPSB0aGlzLl9tZW1vcnlCbG9ja0xpc3QuY3JlYXRlQ2hpbGQoImRpdiIsICJpdGVt
Iik7Ci0gICAgICAgIHN3YXRjaEVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJzd2F0Y2giKS5z
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB2aWV3UHJvcGVydGllcy5fZmlsbFN0eWxlOwotICAgICAg
ICBzd2F0Y2hFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInRpdGxlIikudGV4dENvbnRlbnQg
PSB0aXRsZTsKLQotICAgICAgICBpZiAoIW1lbW9yeUJsb2NrLmNoaWxkcmVuIHx8ICFpbmNsdWRl
Q2hpbGRyZW4pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbWVtb3J5QmxvY2suY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB0aGlzLl9h
ZGRCbG9ja0xhYmVscyhtZW1vcnlCbG9jay5jaGlsZHJlbltpXSwgZmFsc2UpOwotICAgIH0sCi0K
LSAgICBfcGFpbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFyKCk7Ci0g
ICAgICAgIHZhciB3aWR0aCA9IHRoaXMuX2NhbnZhcy53aWR0aDsKLSAgICAgICAgdmFyIGhlaWdo
dCA9IHRoaXMuX2NhbnZhcy5oZWlnaHQ7Ci0KLSAgICAgICAgdmFyIHggPSB3aWR0aCAvIDI7Ci0g
ICAgICAgIHZhciB5ID0gaGVpZ2h0IC8gMjsKLSAgICAgICAgdmFyIHJhZGl1cyA9IDIwMDsKLQot
ICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAg
IGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIE1hdGgu
UEkqMiwgZmFsc2UpOwotICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKLSAgICAgICAgY3R4LnN0
cm9rZVN0eWxlID0gInJnYmEoMTMwLCAxMzAsIDEzMCwgMC44KSI7Ci0gICAgICAgIGN0eC5zdHJv
a2UoKTsKLSAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwotCi0gICAgICAgIHZhciBjdXJyZW50QW5n
bGUgPSAwOwotICAgICAgICB2YXIgbWVtb3J5QmxvY2sgPSB0aGlzLl9tZW1vcnlTbmFwc2hvdDsK
LQotICAgICAgICBmdW5jdGlvbiBwYWludFBlcmNlbnRBbmRMYWJlbChmcmFjdGlvbiwgdGl0bGUs
IG1pZEFuZ2xlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAg
ICAgICAgICBjdHguZm9udCA9ICIxM3B4IEFyaWFsIjsKLSAgICAgICAgICAgIGN0eC5maWxsU3R5
bGUgPSAicmdiYSgxMCwgMTAsIDEwLCAwLjgpIjsKLQotICAgICAgICAgICAgdmFyIHRleHRYID0g
eCArIChyYWRpdXMgKyAxMCkgKiBNYXRoLmNvcyhtaWRBbmdsZSk7Ci0gICAgICAgICAgICB2YXIg
dGV4dFkgPSB5ICsgKHJhZGl1cyArIDEwKSAqIE1hdGguc2luKG1pZEFuZ2xlKTsKLSAgICAgICAg
ICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IC1NYXRoLmNvcyhtaWRBbmdsZSkgLyBNYXRoLnNpbihN
YXRoLlBJIC8gMTIpOwotICAgICAgICAgICAgcmVsYXRpdmVPZmZzZXQgPSBOdW1iZXIuY29uc3Ry
YWluKHJlbGF0aXZlT2Zmc2V0LCAtMSwgMSk7Ci0gICAgICAgICAgICB2YXIgbWV0cmljcyA9IGN0
eC5tZWFzdXJlVGV4dCh0aXRsZSk7Ci0gICAgICAgICAgICB0ZXh0WCAtPSBtZXRyaWNzLndpZHRo
ICogKHJlbGF0aXZlT2Zmc2V0ICsgMSkgLyAyOwotICAgICAgICAgICAgdGV4dFkgKz0gNTsKLSAg
ICAgICAgICAgIGN0eC5maWxsVGV4dCh0aXRsZSwgdGV4dFgsIHRleHRZKTsKLQotICAgICAgICAg
ICAgLy8gRG8gbm90IHByaW50IHBlcmNlbnRhZ2UgaWYgdGhlIHNlY3RvciBpcyB0b28gbmFycm93
LgotICAgICAgICAgICAgaWYgKGZyYWN0aW9uID4gMC4wMykgewotICAgICAgICAgICAgICAgIHRl
eHRYID0geCArIHJhZGl1cyAqIE1hdGguY29zKG1pZEFuZ2xlKSAvIDI7Ci0gICAgICAgICAgICAg
ICAgdGV4dFkgPSB5ICsgcmFkaXVzICogTWF0aC5zaW4obWlkQW5nbGUpIC8gMjsKLSAgICAgICAg
ICAgICAgICBjdHguZmlsbFRleHQoKDEwMCAqIGZyYWN0aW9uKS50b0ZpeGVkKDApICsgIiUiLCB0
ZXh0WCAtIDgsIHRleHRZICsgNSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN0eC5j
bG9zZVBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbWVtb3J5QmxvY2suY2hpbGRy
ZW4pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0b3RhbCA9IG1lbW9yeUJsb2Nr
LnNpemU7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVtb3J5QmxvY2suY2hpbGRyZW4u
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHZhciBjaGlsZCA9IG1lbW9yeUJsb2NrLmNoaWxk
cmVuW2ldOwotICAgICAgICAgICAgaWYgKCFjaGlsZC5zaXplKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgdmFyIHZpZXdQcm9wZXJ0aWVzID0gV2ViSW5zcGVjdG9yLk1l
bW9yeUJsb2NrVmlld1Byb3BlcnRpZXMuX2Zvck1lbW9yeUJsb2NrKGNoaWxkKTsKLSAgICAgICAg
ICAgIHZhciBhbmdsZVNwYW4gPSBNYXRoLlBJICogMiAqIChjaGlsZC5zaXplIC8gdG90YWwpOwot
ICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5
KTsKLSAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIHJhZGl1cyAqIE1hdGguY29zKGN1cnJlbnRB
bmdsZSksIHkgKyByYWRpdXMgKiBNYXRoLnNpbihjdXJyZW50QW5nbGUpKTsKLSAgICAgICAgICAg
IGN0eC5hcmMoeCwgeSwgcmFkaXVzLCBjdXJyZW50QW5nbGUsIGN1cnJlbnRBbmdsZSArIGFuZ2xl
U3BhbiwgZmFsc2UpOwotICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDAuNTsKLSAgICAgICAg
ICAgIGN0eC5saW5lVG8oeCwgeSk7Ci0gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdmlld1By
b3BlcnRpZXMuX2ZpbGxTdHlsZTsKLSAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2Jh
KDEwMCwgMTAwLCAxMDAsIDAuOCkiOwotICAgICAgICAgICAgY3R4LmZpbGwoKTsKLSAgICAgICAg
ICAgIGN0eC5zdHJva2UoKTsKLSAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKLQotICAgICAg
ICAgICAgcGFpbnRQZXJjZW50QW5kTGFiZWwoY2hpbGQuc2l6ZSAvIHRvdGFsLCB2aWV3UHJvcGVy
dGllcy5fZGVzY3JpcHRpb24sIGN1cnJlbnRBbmdsZSArIGFuZ2xlU3BhbiAvIDIpOwotCi0gICAg
ICAgICAgICBjdXJyZW50QW5nbGUgKz0gYW5nbGVTcGFuOwotICAgICAgICB9Ci0gICAgfSwKLQot
ICAgIF9jbGVhcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBjdHggPSB0aGlzLl9jYW52YXMu
Z2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjdHguY2FudmFz
LndpZHRoLCBjdHguY2FudmFzLmhlaWdodCk7Ci0gICAgfSwKLQotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLlZpZXcucHJvdG90eXBlCi19Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9CiAgKi8KIFdlYkluc3BlY3Rvci5OYXRpdmVNZW1v
cnlCYXJDaGFydCA9IGZ1bmN0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwppbmRleCAyZWMyOGZhZWVjOTczOGU1YWE4
NzBiY2JmMzY5OTZjMzI1NWZjMTI0Li43Njc4M2IwNGNmNWIyMTc2NzY4Yzg1ZGVlZWMyOTA5ZDNm
MTEzMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Q
cm9maWxlc1BhbmVsLmpzCkBAIC0xMzY3LDYgKzEzNjcsNyBAQCBpbXBvcnRTY3JpcHQoIkhlYXBT
bmFwc2hvdExvYWRlci5qcyIpOwogaW1wb3J0U2NyaXB0KCJIZWFwU25hcHNob3RQcm94eS5qcyIp
OwogaW1wb3J0U2NyaXB0KCJIZWFwU25hcHNob3RWaWV3LmpzIik7CiBpbXBvcnRTY3JpcHQoIkhl
YXBTbmFwc2hvdFdvcmtlckRpc3BhdGNoZXIuanMiKTsKK2ltcG9ydFNjcmlwdCgiTmF0aXZlSGVh
cEdyYXBoLmpzIik7CiBpbXBvcnRTY3JpcHQoIk5hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcyIp
OwogaW1wb3J0U2NyaXB0KCJQcm9maWxlTGF1bmNoZXJWaWV3LmpzIik7CiBpbXBvcnRTY3JpcHQo
IlRvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNGMwYzEyZDcxMjE0ZGM4ZTBlZGQxYTgx
NDcyY2Y3ODEzMjBhMGQ5Yy4uZTQ0MjJkZmE0MGJmMDhlNmUzMzFmZGRlOWUzZWMzYmQ5YzJlODcy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpA
QCAtMTA2LDYgKzEwNiw3IEBACiAgICAgPGZpbGU+TWVtb3J5U3RhdGlzdGljcy5qczwvZmlsZT4K
ICAgICA8ZmlsZT5NZXRyaWNzU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+TmF0aXZl
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczwvZmlsZT4KKyAgICA8ZmlsZT5OYXRpdmVIZWFwR3Jh
cGguanM8L2ZpbGU+CiAgICAgPGZpbGU+TmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPk5hdmlnYXRvck92ZXJsYXlDb250cm9sbGVyLmpzPC9maWxlPgogICAgIDxm
aWxlPk5hdmlnYXRvclZpZXcuanM8L2ZpbGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180322</attachid>
            <date>2012-12-20 04:26:46 -0800</date>
            <delta_ts>2012-12-20 04:33:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105524-20121220162401.patch</filename>
            <type>text/plain</type>
            <size>28233</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhYTM0NWU5OGE0ZmUz
M2IyYWI4YjM1NDRkNzg2YmFiYjAyZjZkMy4uZGJiYzM1NzE3MzAyNGQ5NWRkNWFlOTEwY2ZkNDdl
OGMxNmEyYTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTEyLTIwICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4dHJhY3QgbmF0aXZlIGhlYXAgZ3JhcGggcmVwcmVzZW50YXRpb24gaW50byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVkIG5hdGl2ZSBoZWFwIGdyYXBoIHBhcnNlciBpbnRvIE5hdGl2ZUhlYXBHcmFwaC5qcywg
cmVuYW1lZCBOYXRpdmVIZWFwR3JhcGhOb2RlIHRvIE5hdGl2ZUhlYXBHcmFwaC5Ob2RlCisgICAg
ICAgIGFuZCBOYXRpdmVIZWFwR3JhcGhFZGdlIHRvIE5hdGl2ZUhlYXBHcmFwaC5FZGdlCisgICAg
ICAgIFJlbW92ZWQgdW51c2VkIHBpZSBjaGFydCB2aWV3LgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3Ry
aWJ1dGlvbik6IGZpeGVkIG9wdGlvbmFsIHBhcmFtZXRlciBoYW5kbGluZworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1v
cnlEaXN0cmlidXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5w
eToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qczogQWRk
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGgucHJvdG90eXBlLnJvb3ROb2Rlcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZS5fY2FsY3VsYXRlTm9kZUVk
Z2VJbmRleGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGgucHJvdG90
eXBlLl9hZGREdW1teU5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFw
aC5FZGdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguRWRnZS5wcm90
b3R5cGUudHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLkVkZ2Uu
cHJvdG90eXBlLm5hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5F
ZGdlLnByb3RvdHlwZS50YXJnZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBH
cmFwaC5FZGdlLnByb3RvdHlwZS5fZ2V0U3RyaW5nRmllbGQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
Lk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS5pZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBlLnR5cGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS5zaXplKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZS5wcm90b3R5cGUuY2xhc3NOYW1lKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZS5wcm90b3R5cGUubmFtZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBlLmhh
c1JlZmVyZW5jZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBo
Lk5vZGUucHJvdG90eXBlLnJlZmVyZW5jZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
TmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBlLm91dGdvaW5nRWRnZXMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS50YXJnZXRPZkVkZ2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS50
YXJnZXRzT2ZBbGxFZGdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBo
Lk5vZGUucHJvdG90eXBlLl9maXJzdEVkZ2VQb2lzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBlLl9hZnRlckxhc3RFZGdlUG9zaXRpb24p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS5f
Z2V0U3RyaW5nRmllbGQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5O
b2RlLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9O
YXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYzoKKwogMjAxMi0xMi0yMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBCdWlsZCBmaXggZm9yIFdpbkNFIGFmdGVyIHIxMzc1MzQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMmNiMzBkOGJlMmI2YmY3NzZjMjE1ZjA3MzQwM2UwYTQ0NTUzNmQ1YS4uMjUz
ZGRjNDNhMGM3NDc4OGZkNTgzMDI3MTQ4NDA4ODUwMjhmZDAzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNTMyMiw2ICs1MzIyLDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdFByb3h5LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hl
YXBTbmFwc2hvdFZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVIZWFwR3JhcGguanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1Byb2ZpbGVEYXRhR3JpZFRyZWUuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCA0Mjk1MTFjZjE4N2Q1OGE0
ZjAwOWYyN2UzYTMzNzg1OTE1OWQ4NzI5Li41YjZlZjQ1NzNhZmQ0MGRiZTZmOWM3ZWY3MmM1NDky
OGQyNjlhN2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JN
ZW1vcnlBZ2VudC5jcHAKQEAgLTUzOSw3ICs1MzksNyBAQCBzdGF0aWMgdm9pZCBhZGRQbGF0Zm9y
bUNvbXBvbmVudHNJbmZvKFBhc3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmxvY2tzPiBjaGlsZHJl
bgogdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlv
bihFcnJvclN0cmluZyosIGNvbnN0IGJvb2wqIHJlcG9ydEdyYXBoLCBSZWZQdHI8SW5zcGVjdG9y
TWVtb3J5QmxvY2s+JiBwcm9jZXNzTWVtb3J5LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZ3Jh
cGgpCiB7CiAgICAgT3duUHRyPEhlYXBHcmFwaFNlcmlhbGl6ZXI+IGdyYXBoU2VyaWFsaXplcjsK
LSAgICBpZiAocmVwb3J0R3JhcGgpCisgICAgaWYgKHJlcG9ydEdyYXBoICYmICpyZXBvcnRHcmFw
aCkKICAgICAgICAgZ3JhcGhTZXJpYWxpemVyID0gYWRvcHRQdHIobmV3IEhlYXBHcmFwaFNlcmlh
bGl6ZXIoKSk7CiAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnQoZ3JhcGhTZXJpYWxpemVyLmdldCgpKTsKICAgICBtX2luc3BlY3Rv
ckNsaWVudC0+Z2V0QWxsb2NhdGVkT2JqZWN0cyhtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQu
YWxsb2NhdGVkT2JqZWN0cygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9jb21waWxlLWZyb250LWVuZC5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxl
LWZyb250LWVuZC5weQppbmRleCA1YjFhMGYyM2JlNzg1ODJkM2YyYTI0MDc4MDdmYmM4NTFlNWJl
YWQ3Li4wMGY1NTU2NDRhMDI2ODRkYjU1ZGNlNTAzZTBkZDQ2OTI2NDg3N2Y1IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CkBAIC0zMzAsNiArMzMw
LDcgQEAgbW9kdWxlcyA9IFsKICAgICAgICAgICAgICJIZWFwU25hcHNob3RWaWV3LmpzIiwKICAg
ICAgICAgICAgICJIZWFwU25hcHNob3RXb3JrZXIuanMiLAogICAgICAgICAgICAgIkhlYXBTbmFw
c2hvdFdvcmtlckRpc3BhdGNoZXIuanMiLAorICAgICAgICAgICAgIk5hdGl2ZUhlYXBHcmFwaC5q
cyIsCiAgICAgICAgICAgICAiTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzIiwKICAgICAgICAg
ICAgICJQcm9maWxlRGF0YUdyaWRUcmVlLmpzIiwKICAgICAgICAgICAgICJQcm9maWxlc1BhbmVs
LmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0
aXZlSGVhcEdyYXBoLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRp
dmVIZWFwR3JhcGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmYxY2U4ZDA3NTk3NTE0YTA5NGU3MzIzZDM2MmU5
Zjk5ZDEyZjJkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvTmF0aXZlSGVhcEdyYXBoLmpzCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisvKioKKyAqIEBj
b25zdHJ1Y3RvcgorICovCitXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoID0gZnVuY3Rpb24o
cmF3R3JhcGgpCit7CisgICAgdGhpcy5fcmF3R3JhcGggPSByYXdHcmFwaDsKKworICAgIHRoaXMu
X25vZGVGaWVsZENvdW50ID0gNTsKKyAgICB0aGlzLl9ub2RlVHlwZU9mZnNldCA9IDA7CisgICAg
dGhpcy5fbm9kZVNpemVPZmZzZXQgPSAxOworICAgIHRoaXMuX25vZGVDbGFzc05hbWVPZmZzZXQg
PSAyOworICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0ID0gMzsKKyAgICB0aGlzLl9ub2RlRWRnZUNv
dW50T2Zmc2V0ID0gNDsKKyAgICB0aGlzLl9ub2RlRmlyc3RFZGdlT2Zmc2V0ID0gdGhpcy5fbm9k
ZUVkZ2VDb3VudE9mZnNldDsKKworICAgIHRoaXMuX2VkZ2VGaWVsZENvdW50ID0gMzsKKyAgICB0
aGlzLl9lZGdlVHlwZU9mZnNldCA9IDA7CisgICAgdGhpcy5fZWRnZVRhcmdldE9mZnNldCA9IDE7
CisgICAgdGhpcy5fZWRnZU5hbWVPZmZzZXQgPSAyOworCisgICAgdGhpcy5fbm9kZUNvdW50ID0g
cmF3R3JhcGgubm9kZXMubGVuZ3RoIC8gdGhpcy5fbm9kZUZpZWxkQ291bnQ7CisgICAgdGhpcy5f
bm9kZXMgPSByYXdHcmFwaC5ub2RlczsKKyAgICB0aGlzLl9lZGdlcyA9IHJhd0dyYXBoLmVkZ2Vz
OworICAgIHRoaXMuX3N0cmluZ3MgPSByYXdHcmFwaC5zdHJpbmdzOworCisgICAgdGhpcy5fY2Fs
Y3VsYXRlTm9kZUVkZ2VJbmRleGVzKCk7Cit9CisKK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3Jh
cGgucHJvdG90eXBlID0geworICAgIHJvb3ROb2RlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIG5vZGVIYXNJbmNvbWluZ0VkZ2VzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5fbm9kZUNv
dW50KTsKKyAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZWRnZXM7CisgICAgICAgIHZhciBlZGdl
c0xlbmd0aCA9IGVkZ2VzLmxlbmd0aDsKKyAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhp
cy5fZWRnZUZpZWxkQ291bnQ7CisgICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX25v
ZGVGaWVsZENvdW50OworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fZWRnZVRhcmdldE9mZnNl
dDsgaSA8IGVkZ2VzTGVuZ3RoOyBpICs9IGVkZ2VGaWVsZENvdW50KSB7CisgICAgICAgICAgICB2
YXIgdGFyZ2V0SW5kZXggPSBlZGdlc1tpXTsKKyAgICAgICAgICAgIG5vZGVIYXNJbmNvbWluZ0Vk
Z2VzW3RhcmdldEluZGV4XSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJvb3RzID0gW107
CisgICAgICAgIHZhciBub2RlQ291bnQgPSBub2RlSGFzSW5jb21pbmdFZGdlcy5sZW5ndGg7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghbm9kZUhhc0luY29taW5nRWRnZXNbaV0pCisgICAgICAgICAgICAgICAgcm9vdHMucHVz
aChuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlKHRoaXMsIGkgKiBub2RlRmll
bGRDb3VudCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByb290czsKKyAgICB9LAorCisg
ICAgX2NhbGN1bGF0ZU5vZGVFZGdlSW5kZXhlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dmFyIG5vZGVzID0gdGhpcy5fbm9kZXM7CisgICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRo
aXMuX25vZGVGaWVsZENvdW50OworICAgICAgICB2YXIgbm9kZUxlbmd0aCA9IG5vZGVzLmxlbmd0
aDsKKyAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQ7IGkgPCBub2RlTGVuZ3RoOyBpICs9IG5vZGVGaWVs
ZENvdW50KSB7CisgICAgICAgICAgICB2YXIgY291bnQgPSBub2Rlc1tpXTsKKyAgICAgICAgICAg
IG5vZGVzW2ldID0gZmlyc3RFZGdlSW5kZXg7CisgICAgICAgICAgICBmaXJzdEVkZ2VJbmRleCAr
PSBjb3VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9hZGREdW1teU5vZGUoKTsKKyAgICB9
LAorCisgICAgX2FkZER1bW15Tm9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGZp
cnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fbm9kZXMubGVuZ3RoICsgdGhpcy5fbm9kZUZpcnN0RWRn
ZU9mZnNldDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9ub2RlRmllbGRDb3Vu
dDsgaSsrKQorICAgICAgICAgICAgdGhpcy5fbm9kZXMucHVzaCgwKTsKKyAgICAgICAgdGhpcy5f
bm9kZXNbZmlyc3RFZGdlUG9zaXRpb25dID0gdGhpcy5fZWRnZXMubGVuZ3RoOworICAgIH0KK30K
KworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0aXZl
SGVhcEdyYXBofSBncmFwaAorICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCisgKi8KK1dlYklu
c3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguRWRnZSA9IGZ1bmN0aW9uKGdyYXBoLCBwb3NpdGlvbikK
K3sKKyAgICB0aGlzLl9ncmFwaCA9IGdyYXBoOworICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRp
b247Cit9CisKK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguRWRnZS5wcm90b3R5cGUgPSB7
CisgICAgdHlwZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0
cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9lZGdlVHlwZU9mZnNldCk7CisgICAgfSwKKworICAgIG5h
bWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVs
ZCh0aGlzLl9ncmFwaC5fZWRnZU5hbWVPZmZzZXQpOworICAgIH0sCisKKyAgICB0YXJnZXQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlZGdlcyA9IHRoaXMuX2dyYXBoLl9lZGdlczsK
KyAgICAgICAgdmFyIHRhcmdldFBvc2l0aW9uID0gZWRnZXNbdGhpcy5fcG9zaXRpb24gKyB0aGlz
Ll9ncmFwaC5fZWRnZVRhcmdldE9mZnNldF0gKiB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7
CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlKHRo
aXMuX2dyYXBoLCB0YXJnZXRQb3NpdGlvbik7CisgICAgfSwKKworICAgIF9nZXRTdHJpbmdGaWVs
ZDogZnVuY3Rpb24ob2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGVJbmRleCA9IHRoaXMu
X2dyYXBoLl9lZGdlc1t0aGlzLl9wb3NpdGlvbiArIG9mZnNldF07CisgICAgICAgIHJldHVybiB0
aGlzLl9ncmFwaC5fcmF3R3JhcGguc3RyaW5nc1t0eXBlSW5kZXhdOworICAgIH0sCisKKyAgICB0
b1N0cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJFZGdlIyIgKyB0aGlz
Ll9wb3NpdGlvbiArICIgLSIgKyB0aGlzLm5hbWUoKSArICItPiAiICsgdGhpcy50YXJnZXQoKTsK
KyAgICB9CisKK30KKworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtXZWJJbnNw
ZWN0b3IuTmF0aXZlSGVhcEdyYXBofSBncmFwaAorICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9u
CisgKi8KK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZSA9IGZ1bmN0aW9uKGdyYXBo
LCBwb3NpdGlvbikKK3sKKyAgICB0aGlzLl9ncmFwaCA9IGdyYXBoOworICAgIHRoaXMuX3Bvc2l0
aW9uID0gcG9zaXRpb247Cit9CisKK1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZS5w
cm90b3R5cGUgPSB7CisgICAgaWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9wb3NpdGlvbiAvIHRoaXMuX2dyYXBoLl9ub2RlRmllbGRDb3VudDsKKyAgICB9LAorCisg
ICAgdHlwZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmlu
Z0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlVHlwZU9mZnNldCk7CisgICAgfSwKKworICAgIHNpemU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fbm9kZXNbdGhp
cy5fcG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZVNpemVPZmZzZXRdOworICAgIH0sCisKKyAg
ICBjbGFzc05hbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRT
dHJpbmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZUNsYXNzTmFtZU9mZnNldCk7CisgICAgfSwKKwor
ICAgIG5hbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJp
bmdGaWVsZCh0aGlzLl9ncmFwaC5fbm9kZU5hbWVPZmZzZXQpOworICAgIH0sCisKKyAgICBoYXNS
ZWZlcmVuY2VkTm9kZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9h
ZnRlckxhc3RFZGdlUG9zaXRpb24oKSA+IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7CisgICAg
fSwKKworICAgIHJlZmVyZW5jZWROb2RlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOworICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9n
cmFwaC5fbm9kZXM7CisgICAgICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9l
ZGdlRmllbGRDb3VudDsKKyAgICAgICAgdmFyIG5vZGVGaWVsZENvdW50ID0gdGhpcy5fZ3JhcGgu
X25vZGVGaWVsZENvdW50OworCisgICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlvbiA9IHRoaXMu
X2ZpcnN0RWRnZVBvaXN0aW9uKCk7CisgICAgICAgIHZhciBhZnRlckxhc3RFZGdlUG9zaXRpb24g
PSB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24oKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtd
OworICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RFZGdlUG9zaXRpb24gKyB0aGlzLl9ncmFwaC5f
ZWRnZVRhcmdldE9mZnNldDsgaSA8IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmll
bGRDb3VudCkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZl
SGVhcEdyYXBoLk5vZGUodGhpcy5fZ3JhcGgsIGVkZ2VzW2ldICogbm9kZUZpZWxkQ291bnQpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgb3V0Z29pbmdFZGdlczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOwor
ICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7
CisKKyAgICAgICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9pc3Rp
b24oKTsKKyAgICAgICAgdmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVyTGFz
dEVkZ2VQb3NpdGlvbigpOworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAo
dmFyIGkgPSBmaXJzdEVkZ2VQb3NpdGlvbjsgaSA8IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSAr
PSBlZGdlRmllbGRDb3VudCkKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNwZWN0
b3IuTmF0aXZlSGVhcEdyYXBoLkVkZ2UodGhpcy5fZ3JhcGgsIGkpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9LAorCisgICAgdGFyZ2V0T2ZFZGdlOiBmdW5jdGlvbihlZGdlTmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnRhcmdldHNPZkFsbEVkZ2VzKGVkZ2VOYW1lKVsw
XTsKKyAgICB9LAorCisgICAgdGFyZ2V0c09mQWxsRWRnZXM6IGZ1bmN0aW9uKGVkZ2VOYW1lKQor
ICAgIHsKKyAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOworICAgICAgICB2
YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7CisKKyAgICAg
ICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9pc3Rpb24oKTsKKyAg
ICAgICAgdmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3Np
dGlvbigpOworCisgICAgICAgIHZhciBlZGdlID0gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFw
R3JhcGguRWRnZSh0aGlzLl9ncmFwaCwgZmlyc3RFZGdlUG9zaXRpb24pCisgICAgICAgIHZhciBy
ZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uOyBpIDwg
YWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KSB7CisgICAgICAgICAg
ICBlZGdlLl9wb3NpdGlvbiA9IGk7CisgICAgICAgICAgICBpZiAoZWRnZS5uYW1lKCkgPT09IGVk
Z2VOYW1lKQorICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVkZ2UudGFyZ2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9maXJzdEVkZ2VQ
b2lzdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9u
b2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9ub2RlRmlyc3RFZGdlT2Zmc2V0XSAq
IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKKyAgICB9LAorCisgICAgX2FmdGVyTGFzdEVk
Z2VQb3NpdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBo
Ll9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9ub2RlRmllbGRDb3VudCArIHRo
aXMuX2dyYXBoLl9ub2RlRmlyc3RFZGdlT2Zmc2V0XSAqIHRoaXMuX2dyYXBoLl9lZGdlRmllbGRD
b3VudDsKKyAgICB9LAorCisgICAgX2dldFN0cmluZ0ZpZWxkOiBmdW5jdGlvbihvZmZzZXQpCisg
ICAgeworICAgICAgICB2YXIgdHlwZUluZGV4ID0gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bv
c2l0aW9uICsgb2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9yYXdHcmFwaC5z
dHJpbmdzW3R5cGVJbmRleF07CisgICAgfSwKKworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gIk5vZGUjIiArIHRoaXMuaWQoKSArICIgIiArIHRoaXMubmFt
ZSgpICsgIigiICsgdGhpcy5jbGFzc05hbWUoKSArICIpIjsKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZU1lbW9yeVNuYXBzaG90
Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5
U25hcHNob3RWaWV3LmpzCmluZGV4IDdhZmU4ZTJiNWY0MWMxMjgzMDY3ZGY1ZGY4ZjRiYWY1YjU3
ZGE0OWEuLjdlMmRmMGJjNGZhZTcxMjQwYWI1ZmVhZDI4OWQxZTM5Mzg3NzNjODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVtb3J5U25hcHNo
b3RWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZl
TWVtb3J5U25hcHNob3RWaWV3LmpzCkBAIC0zMjYsMjM4ICszMjYsNiBAQCBXZWJJbnNwZWN0b3Iu
TmF0aXZlU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IK
LSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaH0gZ3JhcGgKLSAqIEBwYXJh
bSB7bnVtYmVyfSBwb3NpdGlvbgotICovCi1XZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRWRn
ZSA9IGZ1bmN0aW9uKGdyYXBoLCBwb3NpdGlvbikKLXsKLSAgICB0aGlzLl9ncmFwaCA9IGdyYXBo
OwotICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRp
dmVIZWFwR3JhcGhFZGdlLnByb3RvdHlwZSA9IHsKLSAgICB0eXBlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX2VkZ2VU
eXBlT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgbmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9lZGdlTmFtZU9mZnNl
dCk7Ci0gICAgfSwKLQotICAgIHRhcmdldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOwotICAgICAgICB2YXIgdGFyZ2V0UG9zaXRpb24g
PSBlZGdlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9lZGdlVGFyZ2V0T2Zmc2V0XSAq
IHRoaXMuX2dyYXBoLl9ub2RlRmllbGRDb3VudDsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZSh0aGlzLl9ncmFwaCwgdGFyZ2V0UG9zaXRpb24pOwot
ICAgIH0sCi0KLSAgICBfZ2V0U3RyaW5nRmllbGQ6IGZ1bmN0aW9uKG9mZnNldCkKLSAgICB7Ci0g
ICAgICAgIHZhciB0eXBlSW5kZXggPSB0aGlzLl9ncmFwaC5fZWRnZXNbdGhpcy5fcG9zaXRpb24g
KyBvZmZzZXRdOwotICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGguX3Jhd0dyYXBoLnN0cmluZ3Nb
dHlwZUluZGV4XTsKLSAgICB9LAotCi0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAiRWRnZSMiICsgdGhpcy5fcG9zaXRpb24gKyAiIC0iICsgdGhpcy5uYW1l
KCkgKyAiLT4gIiArIHRoaXMudGFyZ2V0KCk7Ci0gICAgfQotCi19Ci0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaH0gZ3JhcGgK
LSAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbgotICovCi1XZWJJbnNwZWN0b3IuTmF0aXZlSGVh
cEdyYXBoTm9kZSA9IGZ1bmN0aW9uKGdyYXBoLCBwb3NpdGlvbikKLXsKLSAgICB0aGlzLl9ncmFw
aCA9IGdyYXBoOwotICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlLnByb3RvdHlwZSA9IHsKLSAgICBpZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uIC8gdGhpcy5fZ3JhcGguX25v
ZGVGaWVsZENvdW50OwotICAgIH0sCi0KLSAgICB0eXBlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVUeXBlT2Zm
c2V0KTsKLSAgICB9LAotCi0gICAgc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9ub2Rl
U2l6ZU9mZnNldF07Ci0gICAgfSwKLQotICAgIGNsYXNzTmFtZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlQ2xh
c3NOYW1lT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgbmFtZTogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlTmFtZU9m
ZnNldCk7Ci0gICAgfSwKLQotICAgIGhhc1JlZmVyZW5jZWROb2RlczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbigpID4gdGhpcy5f
Zmlyc3RFZGdlUG9pc3Rpb24oKTsKLSAgICB9LAotCi0gICAgcmVmZXJlbmNlZE5vZGVzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7Ci0g
ICAgICAgIHZhciBub2RlcyA9IHRoaXMuX2dyYXBoLl9ub2RlczsKLSAgICAgICAgdmFyIGVkZ2VG
aWVsZENvdW50ID0gdGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OwotICAgICAgICB2YXIgbm9k
ZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7Ci0KLSAgICAgICAgdmFy
IGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9pc3Rpb24oKTsKLSAgICAgICAg
dmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbigp
OwotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEVk
Z2VQb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9lZGdlVGFyZ2V0T2Zmc2V0OyBpIDwgYWZ0ZXJMYXN0
RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KQotICAgICAgICAgICAgcmVzdWx0LnB1
c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlKHRoaXMuX2dyYXBoLCBlZGdl
c1tpXSAqIG5vZGVGaWVsZENvdW50KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwK
LQotICAgIG91dGdvaW5nRWRnZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBlZGdl
cyA9IHRoaXMuX2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhp
cy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OwotCi0gICAgICAgIHZhciBmaXJzdEVkZ2VQb3NpdGlv
biA9IHRoaXMuX2ZpcnN0RWRnZVBvaXN0aW9uKCk7Ci0gICAgICAgIHZhciBhZnRlckxhc3RFZGdl
UG9zaXRpb24gPSB0aGlzLl9hZnRlckxhc3RFZGdlUG9zaXRpb24oKTsKLSAgICAgICAgdmFyIHJl
c3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RFZGdlUG9zaXRpb247IGkgPCBh
ZnRlckxhc3RFZGdlUG9zaXRpb247IGkgKz0gZWRnZUZpZWxkQ291bnQpCi0gICAgICAgICAgICBy
ZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UodGhpcy5fZ3Jh
cGgsIGkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgdGFyZ2V0T2ZF
ZGdlOiBmdW5jdGlvbihlZGdlTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnRhcmdl
dHNPZkFsbEVkZ2VzKGVkZ2VOYW1lKVswXTsKLSAgICB9LAotCi0gICAgdGFyZ2V0c09mQWxsRWRn
ZXM6IGZ1bmN0aW9uKGVkZ2VOYW1lKQotICAgIHsKLSAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5f
Z3JhcGguX2VkZ2VzOwotICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5f
ZWRnZUZpZWxkQ291bnQ7Ci0KLSAgICAgICAgdmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5f
Zmlyc3RFZGdlUG9pc3Rpb24oKTsKLSAgICAgICAgdmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9
IHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbigpOwotCi0gICAgICAgIHZhciBlZGdlID0gbmV3
IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhFZGdlKHRoaXMuX2dyYXBoLCBmaXJzdEVkZ2VQ
b3NpdGlvbikKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0g
Zmlyc3RFZGdlUG9zaXRpb247IGkgPCBhZnRlckxhc3RFZGdlUG9zaXRpb247IGkgKz0gZWRnZUZp
ZWxkQ291bnQpIHsKLSAgICAgICAgICAgIGVkZ2UuX3Bvc2l0aW9uID0gaTsKLSAgICAgICAgICAg
IGlmIChlZGdlLm5hbWUoKSA9PT0gZWRnZU5hbWUpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnB1
c2goZWRnZS50YXJnZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9LAotCi0gICAgX2ZpcnN0RWRnZVBvaXN0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGgu
X25vZGVGaXJzdEVkZ2VPZmZzZXRdICogdGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OwotICAg
IH0sCi0KLSAgICBfYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3Jh
cGguX25vZGVGaWVsZENvdW50ICsgdGhpcy5fZ3JhcGguX25vZGVGaXJzdEVkZ2VPZmZzZXRdICog
dGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OwotICAgIH0sCi0KLSAgICBfZ2V0U3RyaW5nRmll
bGQ6IGZ1bmN0aW9uKG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHZhciB0eXBlSW5kZXggPSB0aGlz
Ll9ncmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyBvZmZzZXRdOwotICAgICAgICByZXR1cm4g
dGhpcy5fZ3JhcGguX3Jhd0dyYXBoLnN0cmluZ3NbdHlwZUluZGV4XTsKLSAgICB9LAotCi0gICAg
dG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiTm9kZSMiICsgdGhp
cy5pZCgpICsgIiAiICsgdGhpcy5uYW1lKCkgKyAiKCIgKyB0aGlzLmNsYXNzTmFtZSgpICsgIiki
OwotICAgIH0KLX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3Iu
TmF0aXZlSGVhcEdyYXBoID0gZnVuY3Rpb24ocmF3R3JhcGgpCi17Ci0gICAgdGhpcy5fcmF3R3Jh
cGggPSByYXdHcmFwaDsKLQotICAgIHRoaXMuX25vZGVGaWVsZENvdW50ID0gNTsKLSAgICB0aGlz
Ll9ub2RlVHlwZU9mZnNldCA9IDA7Ci0gICAgdGhpcy5fbm9kZVNpemVPZmZzZXQgPSAxOwotICAg
IHRoaXMuX25vZGVDbGFzc05hbWVPZmZzZXQgPSAyOwotICAgIHRoaXMuX25vZGVOYW1lT2Zmc2V0
ID0gMzsKLSAgICB0aGlzLl9ub2RlRWRnZUNvdW50T2Zmc2V0ID0gNDsKLSAgICB0aGlzLl9ub2Rl
Rmlyc3RFZGdlT2Zmc2V0ID0gdGhpcy5fbm9kZUVkZ2VDb3VudE9mZnNldDsKLQotICAgIHRoaXMu
X2VkZ2VGaWVsZENvdW50ID0gMzsKLSAgICB0aGlzLl9lZGdlVHlwZU9mZnNldCA9IDA7Ci0gICAg
dGhpcy5fZWRnZVRhcmdldE9mZnNldCA9IDE7Ci0gICAgdGhpcy5fZWRnZU5hbWVPZmZzZXQgPSAy
OwotCi0gICAgdGhpcy5fbm9kZUNvdW50ID0gcmF3R3JhcGgubm9kZXMubGVuZ3RoIC8gdGhpcy5f
bm9kZUZpZWxkQ291bnQ7Ci0gICAgdGhpcy5fbm9kZXMgPSByYXdHcmFwaC5ub2RlczsKLSAgICB0
aGlzLl9lZGdlcyA9IHJhd0dyYXBoLmVkZ2VzOwotICAgIHRoaXMuX3N0cmluZ3MgPSByYXdHcmFw
aC5zdHJpbmdzOwotCi0gICAgdGhpcy5fY2FsY3VsYXRlTm9kZUVkZ2VJbmRleGVzKCk7Ci19Ci0K
LVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGgucHJvdG90eXBlID0gewotICAgIHJvb3ROb2Rl
czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIG5vZGVIYXNJbmNvbWluZ0VkZ2VzID0g
bmV3IFVpbnQ4QXJyYXkodGhpcy5fbm9kZUNvdW50KTsKLSAgICAgICAgdmFyIGVkZ2VzID0gdGhp
cy5fZWRnZXM7Ci0gICAgICAgIHZhciBlZGdlc0xlbmd0aCA9IGVkZ2VzLmxlbmd0aDsKLSAgICAg
ICAgdmFyIGVkZ2VGaWVsZENvdW50ID0gdGhpcy5fZWRnZUZpZWxkQ291bnQ7Ci0gICAgICAgIHZh
ciBub2RlRmllbGRDb3VudCA9IHRoaXMuX25vZGVGaWVsZENvdW50OwotICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5fZWRnZVRhcmdldE9mZnNldDsgaSA8IGVkZ2VzTGVuZ3RoOyBpICs9IGVkZ2VG
aWVsZENvdW50KSB7Ci0gICAgICAgICAgICB2YXIgdGFyZ2V0SW5kZXggPSBlZGdlc1tpXTsKLSAg
ICAgICAgICAgIG5vZGVIYXNJbmNvbWluZ0VkZ2VzW3RhcmdldEluZGV4XSA9IDE7Ci0gICAgICAg
IH0KLSAgICAgICAgdmFyIHJvb3RzID0gW107Ci0gICAgICAgIHZhciBub2RlQ291bnQgPSBub2Rl
SGFzSW5jb21pbmdFZGdlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9k
ZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmICghbm9kZUhhc0luY29taW5nRWRnZXNbaV0p
Ci0gICAgICAgICAgICAgICAgcm9vdHMucHVzaChuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBH
cmFwaE5vZGUodGhpcywgaSAqIG5vZGVGaWVsZENvdW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJvb3RzOwotICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlTm9kZUVkZ2VJbmRleGVzOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKLSAgICAg
ICAgdmFyIG5vZGVGaWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgICAgIHZh
ciBub2RlTGVuZ3RoID0gbm9kZXMubGVuZ3RoOwotICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXgg
PSAwOwotICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fbm9kZUVkZ2VDb3VudE9mZnNldDsgaSA8
IG5vZGVMZW5ndGg7IGkgKz0gbm9kZUZpZWxkQ291bnQpIHsKLSAgICAgICAgICAgIHZhciBjb3Vu
dCA9IG5vZGVzW2ldOwotICAgICAgICAgICAgbm9kZXNbaV0gPSBmaXJzdEVkZ2VJbmRleDsKLSAg
ICAgICAgICAgIGZpcnN0RWRnZUluZGV4ICs9IGNvdW50OwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX2FkZER1bW15Tm9kZSgpOwotICAgIH0sCi0KLSAgICBfYWRkRHVtbXlOb2RlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9ub2Rlcy5s
ZW5ndGggKyB0aGlzLl9ub2RlRmlyc3RFZGdlT2Zmc2V0OwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX25vZGVGaWVsZENvdW50OyBpKyspCi0gICAgICAgICAgICB0aGlzLl9ub2Rl
cy5wdXNoKDApOwotICAgICAgICB0aGlzLl9ub2Rlc1tmaXJzdEVkZ2VQb3NpdGlvbl0gPSB0aGlz
Ll9lZGdlcy5sZW5ndGg7Ci0gICAgfQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9yCiAgKiBA
ZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLkRhdGFHcmlkfQogICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
TmF0aXZlSGVhcEdyYXBofSBuYXRpdmVIZWFwR3JhcGgKICAqLwpAQCAtNjA5LDcgKzM3Nyw3IEBA
IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhEYXRhR3JpZFJvb3QucHJvdG90eXBlID0gewog
LyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWRO
b2RlfQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZX0gbm9kZQor
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGV9IG5vZGUKICAqLwog
V2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaERhdGFHcmlkTm9kZSA9IGZ1bmN0aW9uKG5vZGUp
CiB7CkBAIC04MjYsMTM4ICs1OTQsNiBAQCBXZWJJbnNwZWN0b3IuTWVtb3J5QmxvY2tWaWV3UHJv
cGVydGllcy5fZm9yTWVtb3J5QmxvY2sgPSBmdW5jdGlvbihtZW1vcnlCbG9jaykKIC8qKgogICog
QGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9Ci0gKiBAcGFyYW0g
e01lbW9yeUFnZW50Lk1lbW9yeUJsb2NrfSBtZW1vcnlTbmFwc2hvdAotICovCi1XZWJJbnNwZWN0
b3IuTmF0aXZlTWVtb3J5UGllQ2hhcnQgPSBmdW5jdGlvbihtZW1vcnlTbmFwc2hvdCkKLXsKLSAg
ICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotICAgIHRoaXMuX21lbW9yeVNuYXBzaG90
ID0gbWVtb3J5U25hcHNob3Q7Ci0gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm1lbW9yeS1waWUt
Y2hhcnQtY29udGFpbmVyIik7Ci0gICAgdGhpcy5fbWVtb3J5QmxvY2tMaXN0ID0gdGhpcy5lbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAibWVtb3J5LWJsb2Nrcy1saXN0Iik7Ci0KLSAgICB0aGlz
Ll9jYW52YXNDb250YWluZXIgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJtZW1v
cnktcGllLWNoYXJ0Iik7Ci0gICAgdGhpcy5fY2FudmFzID0gdGhpcy5fY2FudmFzQ29udGFpbmVy
LmNyZWF0ZUNoaWxkKCJjYW52YXMiKTsKLSAgICB0aGlzLl9hZGRCbG9ja0xhYmVscyhtZW1vcnlT
bmFwc2hvdCwgdHJ1ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQaWVDaGFydC5w
cm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQG92ZXJyaWRlCi0gICAgICovCi0gICAgb25S
ZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNpemUoKTsKLSAg
ICAgICAgdGhpcy5fcGFpbnQoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNpemU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciB3aWR0aCA9IHRoaXMuX2NhbnZhc0NvbnRhaW5lci5jbGll
bnRXaWR0aCAtIDU7Ci0gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9jYW52YXNDb250YWluZXIu
Y2xpZW50SGVpZ2h0IC0gNTsKLSAgICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gd2lkdGg7Ci0g
ICAgICAgIHRoaXMuX2NhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfSwKLQotICAgIF9hZGRC
bG9ja0xhYmVsczogZnVuY3Rpb24obWVtb3J5QmxvY2ssIGluY2x1ZGVDaGlsZHJlbikKLSAgICB7
Ci0gICAgICAgIHZhciB2aWV3UHJvcGVydGllcyA9IFdlYkluc3BlY3Rvci5NZW1vcnlCbG9ja1Zp
ZXdQcm9wZXJ0aWVzLl9mb3JNZW1vcnlCbG9jayhtZW1vcnlCbG9jayk7Ci0gICAgICAgIHZhciB0
aXRsZSA9IHZpZXdQcm9wZXJ0aWVzLl9kZXNjcmlwdGlvbiArICI6ICIgKyBOdW1iZXIuYnl0ZXNU
b1N0cmluZyhtZW1vcnlCbG9jay5zaXplKTsKLQotICAgICAgICB2YXIgc3dhdGNoRWxlbWVudCA9
IHRoaXMuX21lbW9yeUJsb2NrTGlzdC5jcmVhdGVDaGlsZCgiZGl2IiwgIml0ZW0iKTsKLSAgICAg
ICAgc3dhdGNoRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgInN3YXRjaCIpLnN0eWxlLmJhY2tn
cm91bmRDb2xvciA9IHZpZXdQcm9wZXJ0aWVzLl9maWxsU3R5bGU7Ci0gICAgICAgIHN3YXRjaEVs
ZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAidGl0bGUiKS50ZXh0Q29udGVudCA9IHRpdGxlOwot
Ci0gICAgICAgIGlmICghbWVtb3J5QmxvY2suY2hpbGRyZW4gfHwgIWluY2x1ZGVDaGlsZHJlbikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZW1vcnlC
bG9jay5jaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHRoaXMuX2FkZEJsb2NrTGFi
ZWxzKG1lbW9yeUJsb2NrLmNoaWxkcmVuW2ldLCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIF9wYWlu
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXIoKTsKLSAgICAgICAgdmFy
IHdpZHRoID0gdGhpcy5fY2FudmFzLndpZHRoOwotICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5f
Y2FudmFzLmhlaWdodDsKLQotICAgICAgICB2YXIgeCA9IHdpZHRoIC8gMjsKLSAgICAgICAgdmFy
IHkgPSBoZWlnaHQgLyAyOwotICAgICAgICB2YXIgcmFkaXVzID0gMjAwOwotCi0gICAgICAgIHZh
ciBjdHggPSB0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgY3R4LmJlZ2lu
UGF0aCgpOwotICAgICAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgMCwgTWF0aC5QSSoyLCBmYWxz
ZSk7Ci0gICAgICAgIGN0eC5saW5lV2lkdGggPSAxOwotICAgICAgICBjdHguc3Ryb2tlU3R5bGUg
PSAicmdiYSgxMzAsIDEzMCwgMTMwLCAwLjgpIjsKLSAgICAgICAgY3R4LnN0cm9rZSgpOwotICAg
ICAgICBjdHguY2xvc2VQYXRoKCk7Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRBbmdsZSA9IDA7Ci0g
ICAgICAgIHZhciBtZW1vcnlCbG9jayA9IHRoaXMuX21lbW9yeVNuYXBzaG90OwotCi0gICAgICAg
IGZ1bmN0aW9uIHBhaW50UGVyY2VudEFuZExhYmVsKGZyYWN0aW9uLCB0aXRsZSwgbWlkQW5nbGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGN0
eC5mb250ID0gIjEzcHggQXJpYWwiOwotICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2Jh
KDEwLCAxMCwgMTAsIDAuOCkiOwotCi0gICAgICAgICAgICB2YXIgdGV4dFggPSB4ICsgKHJhZGl1
cyArIDEwKSAqIE1hdGguY29zKG1pZEFuZ2xlKTsKLSAgICAgICAgICAgIHZhciB0ZXh0WSA9IHkg
KyAocmFkaXVzICsgMTApICogTWF0aC5zaW4obWlkQW5nbGUpOwotICAgICAgICAgICAgdmFyIHJl
bGF0aXZlT2Zmc2V0ID0gLU1hdGguY29zKG1pZEFuZ2xlKSAvIE1hdGguc2luKE1hdGguUEkgLyAx
Mik7Ci0gICAgICAgICAgICByZWxhdGl2ZU9mZnNldCA9IE51bWJlci5jb25zdHJhaW4ocmVsYXRp
dmVPZmZzZXQsIC0xLCAxKTsKLSAgICAgICAgICAgIHZhciBtZXRyaWNzID0gY3R4Lm1lYXN1cmVU
ZXh0KHRpdGxlKTsKLSAgICAgICAgICAgIHRleHRYIC09IG1ldHJpY3Mud2lkdGggKiAocmVsYXRp
dmVPZmZzZXQgKyAxKSAvIDI7Ci0gICAgICAgICAgICB0ZXh0WSArPSA1OwotICAgICAgICAgICAg
Y3R4LmZpbGxUZXh0KHRpdGxlLCB0ZXh0WCwgdGV4dFkpOwotCi0gICAgICAgICAgICAvLyBEbyBu
b3QgcHJpbnQgcGVyY2VudGFnZSBpZiB0aGUgc2VjdG9yIGlzIHRvbyBuYXJyb3cuCi0gICAgICAg
ICAgICBpZiAoZnJhY3Rpb24gPiAwLjAzKSB7Ci0gICAgICAgICAgICAgICAgdGV4dFggPSB4ICsg
cmFkaXVzICogTWF0aC5jb3MobWlkQW5nbGUpIC8gMjsKLSAgICAgICAgICAgICAgICB0ZXh0WSA9
IHkgKyByYWRpdXMgKiBNYXRoLnNpbihtaWRBbmdsZSkgLyAyOwotICAgICAgICAgICAgICAgIGN0
eC5maWxsVGV4dCgoMTAwICogZnJhY3Rpb24pLnRvRml4ZWQoMCkgKyAiJSIsIHRleHRYIC0gOCwg
dGV4dFkgKyA1KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtZW1vcnlCbG9jay5jaGlsZHJlbikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHRvdGFsID0gbWVtb3J5QmxvY2suc2l6ZTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZW1vcnlCbG9jay5jaGlsZHJlbi5sZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgdmFyIGNoaWxkID0gbWVtb3J5QmxvY2suY2hpbGRyZW5baV07Ci0g
ICAgICAgICAgICBpZiAoIWNoaWxkLnNpemUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB2YXIgdmlld1Byb3BlcnRpZXMgPSBXZWJJbnNwZWN0b3IuTWVtb3J5QmxvY2tW
aWV3UHJvcGVydGllcy5fZm9yTWVtb3J5QmxvY2soY2hpbGQpOwotICAgICAgICAgICAgdmFyIGFu
Z2xlU3BhbiA9IE1hdGguUEkgKiAyICogKGNoaWxkLnNpemUgLyB0b3RhbCk7Ci0gICAgICAgICAg
ICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpOwotICAgICAg
ICAgICAgY3R4LmxpbmVUbyh4ICsgcmFkaXVzICogTWF0aC5jb3MoY3VycmVudEFuZ2xlKSwgeSAr
IHJhZGl1cyAqIE1hdGguc2luKGN1cnJlbnRBbmdsZSkpOwotICAgICAgICAgICAgY3R4LmFyYyh4
LCB5LCByYWRpdXMsIGN1cnJlbnRBbmdsZSwgY3VycmVudEFuZ2xlICsgYW5nbGVTcGFuLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMC41OwotICAgICAgICAgICAgY3R4Lmxp
bmVUbyh4LCB5KTsKLSAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB2aWV3UHJvcGVydGllcy5f
ZmlsbFN0eWxlOwotICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gInJnYmEoMTAwLCAxMDAs
IDEwMCwgMC44KSI7Ci0gICAgICAgICAgICBjdHguZmlsbCgpOwotICAgICAgICAgICAgY3R4LnN0
cm9rZSgpOwotICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwotCi0gICAgICAgICAgICBwYWlu
dFBlcmNlbnRBbmRMYWJlbChjaGlsZC5zaXplIC8gdG90YWwsIHZpZXdQcm9wZXJ0aWVzLl9kZXNj
cmlwdGlvbiwgY3VycmVudEFuZ2xlICsgYW5nbGVTcGFuIC8gMik7Ci0KLSAgICAgICAgICAgIGN1
cnJlbnRBbmdsZSArPSBhbmdsZVNwYW47Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2NsZWFy
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGN0eCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0
KCIyZCIpOwotICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0
eC5jYW52YXMuaGVpZ2h0KTsKLSAgICB9LAotCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
Vmlldy5wcm90b3R5cGUKLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBleHRlbmRzIHtX
ZWJJbnNwZWN0b3IuVmlld30KICAqLwogV2ViSW5zcGVjdG9yLk5hdGl2ZU1lbW9yeUJhckNoYXJ0
ID0gZnVuY3Rpb24oKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmluZGV4IDJlYzI4ZmFlZWM5NzM4ZTVhYTg3MGJjYmYzNjk5
NmMzMjU1ZmMxMjQuLjc2NzgzYjA0Y2Y1YjIxNzY3NjhjODVkZWVlYzI5MDlkM2YxMTMxZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5l
bC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFu
ZWwuanMKQEAgLTEzNjcsNiArMTM2Nyw3IEBAIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90TG9h
ZGVyLmpzIik7CiBpbXBvcnRTY3JpcHQoIkhlYXBTbmFwc2hvdFByb3h5LmpzIik7CiBpbXBvcnRT
Y3JpcHQoIkhlYXBTbmFwc2hvdFZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90
V29ya2VyRGlzcGF0Y2hlci5qcyIpOworaW1wb3J0U2NyaXB0KCJOYXRpdmVIZWFwR3JhcGguanMi
KTsKIGltcG9ydFNjcmlwdCgiTmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzIik7CiBpbXBvcnRT
Y3JpcHQoIlByb2ZpbGVMYXVuY2hlclZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiVG9wRG93blBy
b2ZpbGVEYXRhR3JpZFRyZWUuanMiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYwppbmRleCA0YzBjMTJkNzEyMTRkYzhlMGVkZDFhODE0NzJjZjc4MTMy
MGEwZDljLi5lNDQyMmRmYTQwYmYwOGU2ZTMzMWZkZGU5ZTNlYzNiZDljMmU4NzI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0xMDYsNiAr
MTA2LDcgQEAKICAgICA8ZmlsZT5NZW1vcnlTdGF0aXN0aWNzLmpzPC9maWxlPgogICAgIDxmaWxl
Pk1ldHJpY3NTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5OYXRpdmVCcmVha3BvaW50
c1NpZGViYXJQYW5lLmpzPC9maWxlPgorICAgIDxmaWxlPk5hdGl2ZUhlYXBHcmFwaC5qczwvZmls
ZT4KICAgICA8ZmlsZT5OYXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZp
bGU+TmF2aWdhdG9yT3ZlcmxheUNvbnRyb2xsZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+TmF2aWdh
dG9yVmlldy5qczwvZmlsZT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180323</attachid>
            <date>2012-12-20 04:33:11 -0800</date>
            <delta_ts>2012-12-20 04:45:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105524-20121220163026.patch</filename>
            <type>text/plain</type>
            <size>28823</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhYTM0NWU5OGE0ZmUz
M2IyYWI4YjM1NDRkNzg2YmFiYjAyZjZkMy4uMTE0OGUxNDFjYmVmMDg0MTE4NTE1NDkwODZlODBm
NWUxM2FjZjFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTEyLTIwICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGV4dHJhY3QgbmF0aXZlIGhlYXAgZ3JhcGggcmVwcmVzZW50YXRpb24gaW50byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVkIG5hdGl2ZSBoZWFwIGdyYXBoIHBhcnNlciBpbnRvIE5hdGl2ZUhlYXBHcmFwaC5qcywg
cmVuYW1lZCBOYXRpdmVIZWFwR3JhcGhOb2RlIHRvIE5hdGl2ZUhlYXBHcmFwaC5Ob2RlCisgICAg
ICAgIGFuZCBOYXRpdmVIZWFwR3JhcGhFZGdlIHRvIE5hdGl2ZUhlYXBHcmFwaC5FZGdlCisgICAg
ICAgIFJlbW92ZWQgdW51c2VkIHBpZSBjaGFydCB2aWV3LgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6Z2V0UHJvY2Vzc01lbW9yeURpc3RyaWJ1dGlvbik6IGZpeGVk
IG9wdGlvbmFsIHBhcmFtZXRlciBoYW5kbGluZworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0cmlidXRpb24p
OgorICAgICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qczogQWRkZWQuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRp
dmVIZWFwR3JhcGgucHJvdG90eXBlLnJvb3ROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
TmF0aXZlSGVhcEdyYXBoLnByb3RvdHlwZS5fY2FsY3VsYXRlTm9kZUVkZ2VJbmRleGVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGgucHJvdG90eXBlLl9hZGREdW1teU5v
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguRWRnZS5wcm90b3R5cGUudHlwZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLkVkZ2UucHJvdG90eXBlLm5hbWUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlLnByb3RvdHlwZS50
YXJnZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlLnByb3Rv
dHlwZS5fZ2V0U3RyaW5nRmllbGQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBH
cmFwaC5FZGdlLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBoLk5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFw
aC5Ob2RlLnByb3RvdHlwZS5pZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdy
YXBoLk5vZGUucHJvdG90eXBlLnR5cGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhl
YXBHcmFwaC5Ob2RlLnByb3RvdHlwZS5zaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5OYXRp
dmVIZWFwR3JhcGguTm9kZS5wcm90b3R5cGUuY2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZS5wcm90b3R5cGUubmFtZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBlLmhhc1JlZmVyZW5jZWROb2Rl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBl
LnJlZmVyZW5jZWROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBo
Lk5vZGUucHJvdG90eXBlLm91dGdvaW5nRWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5h
dGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS50YXJnZXRPZkVkZ2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS50YXJnZXRzT2ZBbGxFZGdl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5vZGUucHJvdG90eXBl
Ll9maXJzdEVkZ2VQb2lzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdy
YXBoLk5vZGUucHJvdG90eXBlLl9hZnRlckxhc3RFZGdlUG9zaXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS5fZ2V0U3RyaW5nRmllbGQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZS50
b1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlTbmFw
c2hvdFZpZXcuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVs
LmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKwogMjAxMi0x
Mi0yMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBC
dWlsZCBmaXggZm9yIFdpbkNFIGFmdGVyIHIxMzc1MzQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmNi
MzBkOGJlMmI2YmY3NzZjMjE1ZjA3MzQwM2UwYTQ0NTUzNmQ1YS4uMjUzZGRjNDNhMGM3NDc4OGZk
NTgzMDI3MTQ4NDA4ODUwMjhmZDAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTMyMiw2ICs1MzIy
LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5
LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90V29ya2Vy
RGlzcGF0Y2hlci5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVI
ZWFwR3JhcGguanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvTmF0aXZlTWVt
b3J5U25hcHNob3RWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1By
b2ZpbGVEYXRhR3JpZFRyZWUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
UHJvZmlsZXNQYW5lbC5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDFiNzM1ZDllYzVlOGVjNjdjOGU4ODAxOWJmOWU4ODE2ZmM3ZTRmZDku
LjJmOTYxNjUzZWI1OTMwZTMwODg3ZWQ5ODgzZmM0ZDdhYTc1NTE3Y2IgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC03Njc1Myw2ICs3Njc1Mywx
MCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxOYXRpdmVIZWFwR3JhcGguanMiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXE5hdGl2ZU1lbW9yeVNuYXBzaG90Vmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCmlu
ZGV4IDQyOTUxMWNmMTg3ZDU4YTRmMDA5ZjI3ZTNhMzM3ODU5MTU5ZDg3MjkuLjViNmVmNDU3M2Fm
ZDQwZGJlNmY5YzdlZjcyYzU0OTI4ZDI2OWE3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtNTM5LDcgKzUzOSw3IEBAIHN0
YXRpYyB2b2lkIGFkZFBsYXRmb3JtQ29tcG9uZW50c0luZm8oUGFzc1JlZlB0cjxJbnNwZWN0b3JN
ZW1vcnlCbG9ja3M+IGNoaWxkcmVuCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9j
ZXNzTWVtb3J5RGlzdHJpYnV0aW9uKEVycm9yU3RyaW5nKiwgY29uc3QgYm9vbCogcmVwb3J0R3Jh
cGgsIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCbG9jaz4mIHByb2Nlc3NNZW1vcnksIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBncmFwaCkKIHsKICAgICBPd25QdHI8SGVhcEdyYXBoU2VyaWFsaXpl
cj4gZ3JhcGhTZXJpYWxpemVyOwotICAgIGlmIChyZXBvcnRHcmFwaCkKKyAgICBpZiAocmVwb3J0
R3JhcGggJiYgKnJlcG9ydEdyYXBoKQogICAgICAgICBncmFwaFNlcmlhbGl6ZXIgPSBhZG9wdFB0
cihuZXcgSGVhcEdyYXBoU2VyaWFsaXplcigpKTsKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25D
bGllbnRJbXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudChncmFwaFNlcmlhbGl6ZXIuZ2V0
KCkpOwogICAgIG1faW5zcGVjdG9yQ2xpZW50LT5nZXRBbGxvY2F0ZWRPYmplY3RzKG1lbW9yeUlu
c3RydW1lbnRhdGlvbkNsaWVudC5hbGxvY2F0ZWRPYmplY3RzKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CmluZGV4IDViMWEwZjIzYmU3ODU4MmQz
ZjJhMjQwNzgwN2ZiYzg1MWU1YmVhZDcuLjAwZjU1NTY0NGEwMjY4NGRiNTVkY2U1MDNlMGRkNDY5
MjY0ODc3ZjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZy
b250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1l
bmQucHkKQEAgLTMzMCw2ICszMzAsNyBAQCBtb2R1bGVzID0gWwogICAgICAgICAgICAgIkhlYXBT
bmFwc2hvdFZpZXcuanMiLAogICAgICAgICAgICAgIkhlYXBTbmFwc2hvdFdvcmtlci5qcyIsCiAg
ICAgICAgICAgICAiSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIsCisgICAgICAgICAg
ICAiTmF0aXZlSGVhcEdyYXBoLmpzIiwKICAgICAgICAgICAgICJOYXRpdmVNZW1vcnlTbmFwc2hv
dFZpZXcuanMiLAogICAgICAgICAgICAgIlByb2ZpbGVEYXRhR3JpZFRyZWUuanMiLAogICAgICAg
ICAgICAgIlByb2ZpbGVzUGFuZWwuanMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9OYXRpdmVIZWFwR3JhcGguanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL05hdGl2ZUhlYXBHcmFwaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjFjZThkMDc1
OTc1MTRhMDk0ZTczMjNkMzYyZTlmOTlkMTJmMmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9OYXRpdmVIZWFwR3JhcGguanMKQEAgLTAsMCAr
MSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK1dlYkluc3BlY3Rvci5OYXRpdmVI
ZWFwR3JhcGggPSBmdW5jdGlvbihyYXdHcmFwaCkKK3sKKyAgICB0aGlzLl9yYXdHcmFwaCA9IHJh
d0dyYXBoOworCisgICAgdGhpcy5fbm9kZUZpZWxkQ291bnQgPSA1OworICAgIHRoaXMuX25vZGVU
eXBlT2Zmc2V0ID0gMDsKKyAgICB0aGlzLl9ub2RlU2l6ZU9mZnNldCA9IDE7CisgICAgdGhpcy5f
bm9kZUNsYXNzTmFtZU9mZnNldCA9IDI7CisgICAgdGhpcy5fbm9kZU5hbWVPZmZzZXQgPSAzOwor
ICAgIHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQgPSA0OworICAgIHRoaXMuX25vZGVGaXJzdEVk
Z2VPZmZzZXQgPSB0aGlzLl9ub2RlRWRnZUNvdW50T2Zmc2V0OworCisgICAgdGhpcy5fZWRnZUZp
ZWxkQ291bnQgPSAzOworICAgIHRoaXMuX2VkZ2VUeXBlT2Zmc2V0ID0gMDsKKyAgICB0aGlzLl9l
ZGdlVGFyZ2V0T2Zmc2V0ID0gMTsKKyAgICB0aGlzLl9lZGdlTmFtZU9mZnNldCA9IDI7CisKKyAg
ICB0aGlzLl9ub2RlQ291bnQgPSByYXdHcmFwaC5ub2Rlcy5sZW5ndGggLyB0aGlzLl9ub2RlRmll
bGRDb3VudDsKKyAgICB0aGlzLl9ub2RlcyA9IHJhd0dyYXBoLm5vZGVzOworICAgIHRoaXMuX2Vk
Z2VzID0gcmF3R3JhcGguZWRnZXM7CisgICAgdGhpcy5fc3RyaW5ncyA9IHJhd0dyYXBoLnN0cmlu
Z3M7CisKKyAgICB0aGlzLl9jYWxjdWxhdGVOb2RlRWRnZUluZGV4ZXMoKTsKK30KKworV2ViSW5z
cGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5wcm90b3R5cGUgPSB7CisgICAgcm9vdE5vZGVzOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgbm9kZUhhc0luY29taW5nRWRnZXMgPSBuZXcgVWlu
dDhBcnJheSh0aGlzLl9ub2RlQ291bnQpOworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9lZGdl
czsKKyAgICAgICAgdmFyIGVkZ2VzTGVuZ3RoID0gZWRnZXMubGVuZ3RoOworICAgICAgICB2YXIg
ZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9lZGdlRmllbGRDb3VudDsKKyAgICAgICAgdmFyIG5vZGVG
aWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxkQ291bnQ7CisgICAgICAgIGZvciAodmFyIGkgPSB0
aGlzLl9lZGdlVGFyZ2V0T2Zmc2V0OyBpIDwgZWRnZXNMZW5ndGg7IGkgKz0gZWRnZUZpZWxkQ291
bnQpIHsKKyAgICAgICAgICAgIHZhciB0YXJnZXRJbmRleCA9IGVkZ2VzW2ldOworICAgICAgICAg
ICAgbm9kZUhhc0luY29taW5nRWRnZXNbdGFyZ2V0SW5kZXhdID0gMTsKKyAgICAgICAgfQorICAg
ICAgICB2YXIgcm9vdHMgPSBbXTsKKyAgICAgICAgdmFyIG5vZGVDb3VudCA9IG5vZGVIYXNJbmNv
bWluZ0VkZ2VzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7
IGkrKykgeworICAgICAgICAgICAgaWYgKCFub2RlSGFzSW5jb21pbmdFZGdlc1tpXSkKKyAgICAg
ICAgICAgICAgICByb290cy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoLk5v
ZGUodGhpcywgaSAqIG5vZGVGaWVsZENvdW50KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJvb3RzOworICAgIH0sCisKKyAgICBfY2FsY3VsYXRlTm9kZUVkZ2VJbmRleGVzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLl9ub2RlczsKKyAgICAgICAgdmFy
IG5vZGVGaWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxkQ291bnQ7CisgICAgICAgIHZhciBub2Rl
TGVuZ3RoID0gbm9kZXMubGVuZ3RoOworICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXggPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fbm9kZUVkZ2VDb3VudE9mZnNldDsgaSA8IG5vZGVM
ZW5ndGg7IGkgKz0gbm9kZUZpZWxkQ291bnQpIHsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IG5v
ZGVzW2ldOworICAgICAgICAgICAgbm9kZXNbaV0gPSBmaXJzdEVkZ2VJbmRleDsKKyAgICAgICAg
ICAgIGZpcnN0RWRnZUluZGV4ICs9IGNvdW50OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Fk
ZER1bW15Tm9kZSgpOworICAgIH0sCisKKyAgICBfYWRkRHVtbXlOb2RlOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9ub2Rlcy5sZW5ndGgg
KyB0aGlzLl9ub2RlRmlyc3RFZGdlT2Zmc2V0OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX25vZGVGaWVsZENvdW50OyBpKyspCisgICAgICAgICAgICB0aGlzLl9ub2Rlcy5wdXNo
KDApOworICAgICAgICB0aGlzLl9ub2Rlc1tmaXJzdEVkZ2VQb3NpdGlvbl0gPSB0aGlzLl9lZGdl
cy5sZW5ndGg7CisgICAgfQorfQorCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IGdyYXBoCisgKiBAcGFyYW0ge251bWJlcn0g
cG9zaXRpb24KKyAqLworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlID0gZnVuY3Rp
b24oZ3JhcGgsIHBvc2l0aW9uKQoreworICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7CisgICAgdGhp
cy5fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFw
aC5FZGdlLnByb3RvdHlwZSA9IHsKKyAgICB0eXBlOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX2VkZ2VUeXBlT2Zmc2V0
KTsKKyAgICB9LAorCisgICAgbmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9lZGdlTmFtZU9mZnNldCk7CisgICAg
fSwKKworICAgIHRhcmdldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGVkZ2VzID0g
dGhpcy5fZ3JhcGguX2VkZ2VzOworICAgICAgICB2YXIgdGFyZ2V0UG9zaXRpb24gPSBlZGdlc1t0
aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9lZGdlVGFyZ2V0T2Zmc2V0XSAqIHRoaXMuX2dy
YXBoLl9ub2RlRmllbGRDb3VudDsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBoLk5vZGUodGhpcy5fZ3JhcGgsIHRhcmdldFBvc2l0aW9uKTsKKyAgICB9LAor
CisgICAgX2dldFN0cmluZ0ZpZWxkOiBmdW5jdGlvbihvZmZzZXQpCisgICAgeworICAgICAgICB2
YXIgdHlwZUluZGV4ID0gdGhpcy5fZ3JhcGguX2VkZ2VzW3RoaXMuX3Bvc2l0aW9uICsgb2Zmc2V0
XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoLl9yYXdHcmFwaC5zdHJpbmdzW3R5cGVJbmRl
eF07CisgICAgfSwKKworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gIkVkZ2UjIiArIHRoaXMuX3Bvc2l0aW9uICsgIiAtIiArIHRoaXMubmFtZSgpICsgIi0+
ICIgKyB0aGlzLnRhcmdldCgpOworICAgIH0KKworfQorCisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IGdyYXBoCisgKiBAcGFy
YW0ge251bWJlcn0gcG9zaXRpb24KKyAqLworV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5O
b2RlID0gZnVuY3Rpb24oZ3JhcGgsIHBvc2l0aW9uKQoreworICAgIHRoaXMuX2dyYXBoID0gZ3Jh
cGg7CisgICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKworV2ViSW5zcGVjdG9yLk5h
dGl2ZUhlYXBHcmFwaC5Ob2RlLnByb3RvdHlwZSA9IHsKKyAgICBpZDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uIC8gdGhpcy5fZ3JhcGguX25vZGVGaWVs
ZENvdW50OworICAgIH0sCisKKyAgICB0eXBlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5fZ3JhcGguX25vZGVUeXBlT2Zmc2V0KTsK
KyAgICB9LAorCisgICAgc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIHRoaXMuX2dyYXBoLl9ub2RlU2l6ZU9m
ZnNldF07CisgICAgfSwKKworICAgIGNsYXNzTmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlQ2xhc3NOYW1l
T2Zmc2V0KTsKKyAgICB9LAorCisgICAgbmFtZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2dldFN0cmluZ0ZpZWxkKHRoaXMuX2dyYXBoLl9ub2RlTmFtZU9mZnNldCk7
CisgICAgfSwKKworICAgIGhhc1JlZmVyZW5jZWROb2RlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbigpID4gdGhpcy5fZmlyc3RF
ZGdlUG9pc3Rpb24oKTsKKyAgICB9LAorCisgICAgcmVmZXJlbmNlZE5vZGVzOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7CisgICAgICAg
IHZhciBub2RlcyA9IHRoaXMuX2dyYXBoLl9ub2RlczsKKyAgICAgICAgdmFyIGVkZ2VGaWVsZENv
dW50ID0gdGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OworICAgICAgICB2YXIgbm9kZUZpZWxk
Q291bnQgPSB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7CisKKyAgICAgICAgdmFyIGZpcnN0
RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9pc3Rpb24oKTsKKyAgICAgICAgdmFyIGFm
dGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlvbigpOworICAg
ICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEVkZ2VQb3Np
dGlvbiArIHRoaXMuX2dyYXBoLl9lZGdlVGFyZ2V0T2Zmc2V0OyBpIDwgYWZ0ZXJMYXN0RWRnZVBv
c2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KQorICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3
IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguTm9kZSh0aGlzLl9ncmFwaCwgZWRnZXNbaV0g
KiBub2RlRmllbGRDb3VudCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAg
ICBvdXRnb2luZ0VkZ2VzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0
aGlzLl9ncmFwaC5fZWRnZXM7CisgICAgICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2dy
YXBoLl9lZGdlRmllbGRDb3VudDsKKworICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0
aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOworICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRnZVBvc2l0
aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7CisgICAgICAgIHZhciByZXN1bHQg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uOyBpIDwgYWZ0ZXJM
YXN0RWRnZVBvc2l0aW9uOyBpICs9IGVkZ2VGaWVsZENvdW50KQorICAgICAgICAgICAgcmVzdWx0
LnB1c2gobmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGguRWRnZSh0aGlzLl9ncmFwaCwg
aSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICB0YXJnZXRPZkVkZ2U6
IGZ1bmN0aW9uKGVkZ2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0c09m
QWxsRWRnZXMoZWRnZU5hbWUpWzBdOworICAgIH0sCisKKyAgICB0YXJnZXRzT2ZBbGxFZGdlczog
ZnVuY3Rpb24oZWRnZU5hbWUpCisgICAgeworICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFw
aC5fZWRnZXM7CisgICAgICAgIHZhciBlZGdlRmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9lZGdl
RmllbGRDb3VudDsKKworICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9maXJz
dEVkZ2VQb2lzdGlvbigpOworICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uID0gdGhp
cy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7CisKKyAgICAgICAgdmFyIGVkZ2UgPSBuZXcgV2Vi
SW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5FZGdlKHRoaXMuX2dyYXBoLCBmaXJzdEVkZ2VQb3Np
dGlvbikKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gZmly
c3RFZGdlUG9zaXRpb247IGkgPCBhZnRlckxhc3RFZGdlUG9zaXRpb247IGkgKz0gZWRnZUZpZWxk
Q291bnQpIHsKKyAgICAgICAgICAgIGVkZ2UuX3Bvc2l0aW9uID0gaTsKKyAgICAgICAgICAgIGlm
IChlZGdlLm5hbWUoKSA9PT0gZWRnZU5hbWUpCisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2go
ZWRnZS50YXJnZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
LAorCisgICAgX2ZpcnN0RWRnZVBvaXN0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGguX25v
ZGVGaXJzdEVkZ2VPZmZzZXRdICogdGhpcy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OworICAgIH0s
CisKKyAgICBfYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGgu
X25vZGVGaWVsZENvdW50ICsgdGhpcy5fZ3JhcGguX25vZGVGaXJzdEVkZ2VPZmZzZXRdICogdGhp
cy5fZ3JhcGguX2VkZ2VGaWVsZENvdW50OworICAgIH0sCisKKyAgICBfZ2V0U3RyaW5nRmllbGQ6
IGZ1bmN0aW9uKG9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlSW5kZXggPSB0aGlzLl9n
cmFwaC5fbm9kZXNbdGhpcy5fcG9zaXRpb24gKyBvZmZzZXRdOworICAgICAgICByZXR1cm4gdGhp
cy5fZ3JhcGguX3Jhd0dyYXBoLnN0cmluZ3NbdHlwZUluZGV4XTsKKyAgICB9LAorCisgICAgdG9T
dHJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiTm9kZSMiICsgdGhpcy5p
ZCgpICsgIiAiICsgdGhpcy5uYW1lKCkgKyAiKCIgKyB0aGlzLmNsYXNzTmFtZSgpICsgIikiOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
TmF0aXZlTWVtb3J5U25hcHNob3RWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9OYXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanMKaW5kZXggN2FmZThlMmI1ZjQxYzEy
ODMwNjdkZjVkZjhmNGJhZjViNTdkYTQ5YS4uN2UyZGYwYmM0ZmFlNzEyNDBhYjVmZWFkMjg5ZDFl
MzkzODc3M2M4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9OYXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9OYXRpdmVNZW1vcnlTbmFwc2hvdFZpZXcuanMKQEAgLTMyNiwyMzggKzMy
Niw2IEBAIFdlYkluc3BlY3Rvci5OYXRpdmVTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogCiAv
KioKICAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdy
YXBofSBncmFwaAotICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCi0gKi8KLVdlYkluc3BlY3Rv
ci5OYXRpdmVIZWFwR3JhcGhFZGdlID0gZnVuY3Rpb24oZ3JhcGgsIHBvc2l0aW9uKQotewotICAg
IHRoaXMuX2dyYXBoID0gZ3JhcGg7Ci0gICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjsKLX0K
LQotV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UucHJvdG90eXBlID0gewotICAgIHR5
cGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVs
ZCh0aGlzLl9ncmFwaC5fZWRnZVR5cGVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBuYW1lOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhpcy5f
Z3JhcGguX2VkZ2VOYW1lT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgdGFyZ2V0OiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7Ci0gICAgICAg
IHZhciB0YXJnZXRQb3NpdGlvbiA9IGVkZ2VzW3RoaXMuX3Bvc2l0aW9uICsgdGhpcy5fZ3JhcGgu
X2VkZ2VUYXJnZXRPZmZzZXRdICogdGhpcy5fZ3JhcGguX25vZGVGaWVsZENvdW50OwotICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlKHRoaXMuX2dyYXBo
LCB0YXJnZXRQb3NpdGlvbik7Ci0gICAgfSwKLQotICAgIF9nZXRTdHJpbmdGaWVsZDogZnVuY3Rp
b24ob2Zmc2V0KQotICAgIHsKLSAgICAgICAgdmFyIHR5cGVJbmRleCA9IHRoaXMuX2dyYXBoLl9l
ZGdlc1t0aGlzLl9wb3NpdGlvbiArIG9mZnNldF07Ci0gICAgICAgIHJldHVybiB0aGlzLl9ncmFw
aC5fcmF3R3JhcGguc3RyaW5nc1t0eXBlSW5kZXhdOwotICAgIH0sCi0KLSAgICB0b1N0cmluZzog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJFZGdlIyIgKyB0aGlzLl9wb3NpdGlv
biArICIgLSIgKyB0aGlzLm5hbWUoKSArICItPiAiICsgdGhpcy50YXJnZXQoKTsKLSAgICB9Ci0K
LX0KLQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTmF0
aXZlSGVhcEdyYXBofSBncmFwaAotICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uCi0gKi8KLVdl
Ykluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGhOb2RlID0gZnVuY3Rpb24oZ3JhcGgsIHBvc2l0aW9u
KQotewotICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7Ci0gICAgdGhpcy5fcG9zaXRpb24gPSBwb3Np
dGlvbjsKLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5vZGUucHJvdG90eXBlID0g
ewotICAgIGlkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRp
b24gLyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQ7Ci0gICAgfSwKLQotICAgIHR5cGU6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9nZXRTdHJpbmdGaWVsZCh0aGlz
Ll9ncmFwaC5fbm9kZVR5cGVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBzaXplOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGguX25vZGVzW3RoaXMuX3Bvc2l0aW9u
ICsgdGhpcy5fZ3JhcGguX25vZGVTaXplT2Zmc2V0XTsKLSAgICB9LAotCi0gICAgY2xhc3NOYW1l
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQo
dGhpcy5fZ3JhcGguX25vZGVDbGFzc05hbWVPZmZzZXQpOwotICAgIH0sCi0KLSAgICBuYW1lOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U3RyaW5nRmllbGQodGhp
cy5fZ3JhcGguX25vZGVOYW1lT2Zmc2V0KTsKLSAgICB9LAotCi0gICAgaGFzUmVmZXJlbmNlZE5v
ZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJMYXN0RWRn
ZVBvc2l0aW9uKCkgPiB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwotICAgIH0sCi0KLSAgICBy
ZWZlcmVuY2VkTm9kZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBlZGdlcyA9IHRo
aXMuX2dyYXBoLl9lZGdlczsKLSAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5fZ3JhcGguX25vZGVz
OwotICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291
bnQ7Ci0gICAgICAgIHZhciBub2RlRmllbGRDb3VudCA9IHRoaXMuX2dyYXBoLl9ub2RlRmllbGRD
b3VudDsKLQotICAgICAgICB2YXIgZmlyc3RFZGdlUG9zaXRpb24gPSB0aGlzLl9maXJzdEVkZ2VQ
b2lzdGlvbigpOwotICAgICAgICB2YXIgYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uID0gdGhpcy5fYWZ0
ZXJMYXN0RWRnZVBvc2l0aW9uKCk7Ci0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IGZpcnN0RWRnZVBvc2l0aW9uICsgdGhpcy5fZ3JhcGguX2VkZ2VUYXJnZXRP
ZmZzZXQ7IGkgPCBhZnRlckxhc3RFZGdlUG9zaXRpb247IGkgKz0gZWRnZUZpZWxkQ291bnQpCi0g
ICAgICAgICAgICByZXN1bHQucHVzaChuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaE5v
ZGUodGhpcy5fZ3JhcGgsIGVkZ2VzW2ldICogbm9kZUZpZWxkQ291bnQpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgb3V0Z29pbmdFZGdlczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGVkZ2VzID0gdGhpcy5fZ3JhcGguX2VkZ2VzOwotICAgICAgICB2YXIg
ZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7Ci0KLSAgICAgICAg
dmFyIGZpcnN0RWRnZVBvc2l0aW9uID0gdGhpcy5fZmlyc3RFZGdlUG9pc3Rpb24oKTsKLSAgICAg
ICAgdmFyIGFmdGVyTGFzdEVkZ2VQb3NpdGlvbiA9IHRoaXMuX2FmdGVyTGFzdEVkZ2VQb3NpdGlv
bigpOwotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSBmaXJz
dEVkZ2VQb3NpdGlvbjsgaSA8IGFmdGVyTGFzdEVkZ2VQb3NpdGlvbjsgaSArPSBlZGdlRmllbGRD
b3VudCkKLSAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuTmF0aXZlSGVh
cEdyYXBoRWRnZSh0aGlzLl9ncmFwaCwgaSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0sCi0KLSAgICB0YXJnZXRPZkVkZ2U6IGZ1bmN0aW9uKGVkZ2VOYW1lKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMudGFyZ2V0c09mQWxsRWRnZXMoZWRnZU5hbWUpWzBdOwotICAgIH0sCi0K
LSAgICB0YXJnZXRzT2ZBbGxFZGdlczogZnVuY3Rpb24oZWRnZU5hbWUpCi0gICAgewotICAgICAg
ICB2YXIgZWRnZXMgPSB0aGlzLl9ncmFwaC5fZWRnZXM7Ci0gICAgICAgIHZhciBlZGdlRmllbGRD
b3VudCA9IHRoaXMuX2dyYXBoLl9lZGdlRmllbGRDb3VudDsKLQotICAgICAgICB2YXIgZmlyc3RF
ZGdlUG9zaXRpb24gPSB0aGlzLl9maXJzdEVkZ2VQb2lzdGlvbigpOwotICAgICAgICB2YXIgYWZ0
ZXJMYXN0RWRnZVBvc2l0aW9uID0gdGhpcy5fYWZ0ZXJMYXN0RWRnZVBvc2l0aW9uKCk7Ci0KLSAg
ICAgICAgdmFyIGVkZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaEVkZ2UodGhp
cy5fZ3JhcGgsIGZpcnN0RWRnZVBvc2l0aW9uKQotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0g
ICAgICAgIGZvciAodmFyIGkgPSBmaXJzdEVkZ2VQb3NpdGlvbjsgaSA8IGFmdGVyTGFzdEVkZ2VQ
b3NpdGlvbjsgaSArPSBlZGdlRmllbGRDb3VudCkgewotICAgICAgICAgICAgZWRnZS5fcG9zaXRp
b24gPSBpOwotICAgICAgICAgICAgaWYgKGVkZ2UubmFtZSgpID09PSBlZGdlTmFtZSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQucHVzaChlZGdlLnRhcmdldCgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfZmlyc3RFZGdlUG9pc3Rpb246IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fbm9kZXNbdGhpcy5fcG9z
aXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpcnN0RWRnZU9mZnNldF0gKiB0aGlzLl9ncmFwaC5f
ZWRnZUZpZWxkQ291bnQ7Ci0gICAgfSwKLQotICAgIF9hZnRlckxhc3RFZGdlUG9zaXRpb246IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fbm9kZXNbdGhpcy5f
cG9zaXRpb24gKyB0aGlzLl9ncmFwaC5fbm9kZUZpZWxkQ291bnQgKyB0aGlzLl9ncmFwaC5fbm9k
ZUZpcnN0RWRnZU9mZnNldF0gKiB0aGlzLl9ncmFwaC5fZWRnZUZpZWxkQ291bnQ7Ci0gICAgfSwK
LQotICAgIF9nZXRTdHJpbmdGaWVsZDogZnVuY3Rpb24ob2Zmc2V0KQotICAgIHsKLSAgICAgICAg
dmFyIHR5cGVJbmRleCA9IHRoaXMuX2dyYXBoLl9ub2Rlc1t0aGlzLl9wb3NpdGlvbiArIG9mZnNl
dF07Ci0gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaC5fcmF3R3JhcGguc3RyaW5nc1t0eXBlSW5k
ZXhdOwotICAgIH0sCi0KLSAgICB0b1N0cmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICJOb2RlIyIgKyB0aGlzLmlkKCkgKyAiICIgKyB0aGlzLm5hbWUoKSArICIoIiArIHRo
aXMuY2xhc3NOYW1lKCkgKyAiKSI7Ci0gICAgfQotfQotCi0KLS8qKgotICogQGNvbnN0cnVjdG9y
Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGggPSBmdW5jdGlvbihyYXdHcmFwaCkK
LXsKLSAgICB0aGlzLl9yYXdHcmFwaCA9IHJhd0dyYXBoOwotCi0gICAgdGhpcy5fbm9kZUZpZWxk
Q291bnQgPSA1OwotICAgIHRoaXMuX25vZGVUeXBlT2Zmc2V0ID0gMDsKLSAgICB0aGlzLl9ub2Rl
U2l6ZU9mZnNldCA9IDE7Ci0gICAgdGhpcy5fbm9kZUNsYXNzTmFtZU9mZnNldCA9IDI7Ci0gICAg
dGhpcy5fbm9kZU5hbWVPZmZzZXQgPSAzOwotICAgIHRoaXMuX25vZGVFZGdlQ291bnRPZmZzZXQg
PSA0OwotICAgIHRoaXMuX25vZGVGaXJzdEVkZ2VPZmZzZXQgPSB0aGlzLl9ub2RlRWRnZUNvdW50
T2Zmc2V0OwotCi0gICAgdGhpcy5fZWRnZUZpZWxkQ291bnQgPSAzOwotICAgIHRoaXMuX2VkZ2VU
eXBlT2Zmc2V0ID0gMDsKLSAgICB0aGlzLl9lZGdlVGFyZ2V0T2Zmc2V0ID0gMTsKLSAgICB0aGlz
Ll9lZGdlTmFtZU9mZnNldCA9IDI7Ci0KLSAgICB0aGlzLl9ub2RlQ291bnQgPSByYXdHcmFwaC5u
b2Rlcy5sZW5ndGggLyB0aGlzLl9ub2RlRmllbGRDb3VudDsKLSAgICB0aGlzLl9ub2RlcyA9IHJh
d0dyYXBoLm5vZGVzOwotICAgIHRoaXMuX2VkZ2VzID0gcmF3R3JhcGguZWRnZXM7Ci0gICAgdGhp
cy5fc3RyaW5ncyA9IHJhd0dyYXBoLnN0cmluZ3M7Ci0KLSAgICB0aGlzLl9jYWxjdWxhdGVOb2Rl
RWRnZUluZGV4ZXMoKTsKLX0KLQotV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaC5wcm90b3R5
cGUgPSB7Ci0gICAgcm9vdE5vZGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgbm9k
ZUhhc0luY29taW5nRWRnZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLl9ub2RlQ291bnQpOwotICAg
ICAgICB2YXIgZWRnZXMgPSB0aGlzLl9lZGdlczsKLSAgICAgICAgdmFyIGVkZ2VzTGVuZ3RoID0g
ZWRnZXMubGVuZ3RoOwotICAgICAgICB2YXIgZWRnZUZpZWxkQ291bnQgPSB0aGlzLl9lZGdlRmll
bGRDb3VudDsKLSAgICAgICAgdmFyIG5vZGVGaWVsZENvdW50ID0gdGhpcy5fbm9kZUZpZWxkQ291
bnQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9lZGdlVGFyZ2V0T2Zmc2V0OyBpIDwgZWRn
ZXNMZW5ndGg7IGkgKz0gZWRnZUZpZWxkQ291bnQpIHsKLSAgICAgICAgICAgIHZhciB0YXJnZXRJ
bmRleCA9IGVkZ2VzW2ldOwotICAgICAgICAgICAgbm9kZUhhc0luY29taW5nRWRnZXNbdGFyZ2V0
SW5kZXhdID0gMTsKLSAgICAgICAgfQotICAgICAgICB2YXIgcm9vdHMgPSBbXTsKLSAgICAgICAg
dmFyIG5vZGVDb3VudCA9IG5vZGVIYXNJbmNvbWluZ0VkZ2VzLmxlbmd0aDsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBub2RlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKCFub2Rl
SGFzSW5jb21pbmdFZGdlc1tpXSkKLSAgICAgICAgICAgICAgICByb290cy5wdXNoKG5ldyBXZWJJ
bnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoTm9kZSh0aGlzLCBpICogbm9kZUZpZWxkQ291bnQpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcm9vdHM7Ci0gICAgfSwKLQotICAgIF9jYWxjdWxh
dGVOb2RlRWRnZUluZGV4ZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBub2RlcyA9
IHRoaXMuX25vZGVzOwotICAgICAgICB2YXIgbm9kZUZpZWxkQ291bnQgPSB0aGlzLl9ub2RlRmll
bGRDb3VudDsKLSAgICAgICAgdmFyIG5vZGVMZW5ndGggPSBub2Rlcy5sZW5ndGg7Ci0gICAgICAg
IHZhciBmaXJzdEVkZ2VJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9ub2Rl
RWRnZUNvdW50T2Zmc2V0OyBpIDwgbm9kZUxlbmd0aDsgaSArPSBub2RlRmllbGRDb3VudCkgewot
ICAgICAgICAgICAgdmFyIGNvdW50ID0gbm9kZXNbaV07Ci0gICAgICAgICAgICBub2Rlc1tpXSA9
IGZpcnN0RWRnZUluZGV4OwotICAgICAgICAgICAgZmlyc3RFZGdlSW5kZXggKz0gY291bnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgdGhpcy5fYWRkRHVtbXlOb2RlKCk7Ci0gICAgfSwKLQotICAgIF9h
ZGREdW1teU5vZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBmaXJzdEVkZ2VQb3Np
dGlvbiA9IHRoaXMuX25vZGVzLmxlbmd0aCArIHRoaXMuX25vZGVGaXJzdEVkZ2VPZmZzZXQ7Ci0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbm9kZUZpZWxkQ291bnQ7IGkrKykKLSAg
ICAgICAgICAgIHRoaXMuX25vZGVzLnB1c2goMCk7Ci0gICAgICAgIHRoaXMuX25vZGVzW2ZpcnN0
RWRnZVBvc2l0aW9uXSA9IHRoaXMuX2VkZ2VzLmxlbmd0aDsKLSAgICB9Ci19Ci0KLQotLyoqCi0g
KiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuRGF0YUdyaWR9CiAgKiBA
cGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3JhcGh9IG5hdGl2ZUhlYXBHcmFwaAogICov
CkBAIC02MDksNyArMzc3LDcgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUhlYXBHcmFwaERhdGFHcmlk
Um9vdC5wcm90b3R5cGUgPSB7CiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5EYXRhR3JpZE5vZGV9Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVI
ZWFwR3JhcGhOb2RlfSBub2RlCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OYXRpdmVIZWFwR3Jh
cGguTm9kZX0gbm9kZQogICovCiBXZWJJbnNwZWN0b3IuTmF0aXZlSGVhcEdyYXBoRGF0YUdyaWRO
b2RlID0gZnVuY3Rpb24obm9kZSkKIHsKQEAgLTgyNiwxMzggKzU5NCw2IEBAIFdlYkluc3BlY3Rv
ci5NZW1vcnlCbG9ja1ZpZXdQcm9wZXJ0aWVzLl9mb3JNZW1vcnlCbG9jayA9IGZ1bmN0aW9uKG1l
bW9yeUJsb2NrKQogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRzIHtXZWJJbnNwZWN0
b3IuVmlld30KLSAqIEBwYXJhbSB7TWVtb3J5QWdlbnQuTWVtb3J5QmxvY2t9IG1lbW9yeVNuYXBz
aG90Ci0gKi8KLVdlYkluc3BlY3Rvci5OYXRpdmVNZW1vcnlQaWVDaGFydCA9IGZ1bmN0aW9uKG1l
bW9yeVNuYXBzaG90KQotewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0gICAg
dGhpcy5fbWVtb3J5U25hcHNob3QgPSBtZW1vcnlTbmFwc2hvdDsKLSAgICB0aGlzLmVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5
bGVDbGFzcygibWVtb3J5LXBpZS1jaGFydC1jb250YWluZXIiKTsKLSAgICB0aGlzLl9tZW1vcnlC
bG9ja0xpc3QgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJtZW1vcnktYmxvY2tz
LWxpc3QiKTsKLQotICAgIHRoaXMuX2NhbnZhc0NvbnRhaW5lciA9IHRoaXMuZWxlbWVudC5jcmVh
dGVDaGlsZCgiZGl2IiwgIm1lbW9yeS1waWUtY2hhcnQiKTsKLSAgICB0aGlzLl9jYW52YXMgPSB0
aGlzLl9jYW52YXNDb250YWluZXIuY3JlYXRlQ2hpbGQoImNhbnZhcyIpOwotICAgIHRoaXMuX2Fk
ZEJsb2NrTGFiZWxzKG1lbW9yeVNuYXBzaG90LCB0cnVlKTsKLX0KLQotV2ViSW5zcGVjdG9yLk5h
dGl2ZU1lbW9yeVBpZUNoYXJ0LnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAb3ZlcnJp
ZGUKLSAgICAgKi8KLSAgICBvblJlc2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhp
cy5fdXBkYXRlU2l6ZSgpOwotICAgICAgICB0aGlzLl9wYWludCgpOwotICAgIH0sCi0KLSAgICBf
dXBkYXRlU2l6ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5f
Y2FudmFzQ29udGFpbmVyLmNsaWVudFdpZHRoIC0gNTsKLSAgICAgICAgdmFyIGhlaWdodCA9IHRo
aXMuX2NhbnZhc0NvbnRhaW5lci5jbGllbnRIZWlnaHQgLSA1OwotICAgICAgICB0aGlzLl9jYW52
YXMud2lkdGggPSB3aWR0aDsKLSAgICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IGhlaWdodDsK
LSAgICB9LAotCi0gICAgX2FkZEJsb2NrTGFiZWxzOiBmdW5jdGlvbihtZW1vcnlCbG9jaywgaW5j
bHVkZUNoaWxkcmVuKQotICAgIHsKLSAgICAgICAgdmFyIHZpZXdQcm9wZXJ0aWVzID0gV2ViSW5z
cGVjdG9yLk1lbW9yeUJsb2NrVmlld1Byb3BlcnRpZXMuX2Zvck1lbW9yeUJsb2NrKG1lbW9yeUJs
b2NrKTsKLSAgICAgICAgdmFyIHRpdGxlID0gdmlld1Byb3BlcnRpZXMuX2Rlc2NyaXB0aW9uICsg
IjogIiArIE51bWJlci5ieXRlc1RvU3RyaW5nKG1lbW9yeUJsb2NrLnNpemUpOwotCi0gICAgICAg
IHZhciBzd2F0Y2hFbGVtZW50ID0gdGhpcy5fbWVtb3J5QmxvY2tMaXN0LmNyZWF0ZUNoaWxkKCJk
aXYiLCAiaXRlbSIpOwotICAgICAgICBzd2F0Y2hFbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAi
c3dhdGNoIikuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmlld1Byb3BlcnRpZXMuX2ZpbGxTdHls
ZTsKLSAgICAgICAgc3dhdGNoRWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIsICJ0aXRsZSIpLnRl
eHRDb250ZW50ID0gdGl0bGU7Ci0KLSAgICAgICAgaWYgKCFtZW1vcnlCbG9jay5jaGlsZHJlbiB8
fCAhaW5jbHVkZUNoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG1lbW9yeUJsb2NrLmNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgICAgICAg
ICAgdGhpcy5fYWRkQmxvY2tMYWJlbHMobWVtb3J5QmxvY2suY2hpbGRyZW5baV0sIGZhbHNlKTsK
LSAgICB9LAotCi0gICAgX3BhaW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9j
bGVhcigpOwotICAgICAgICB2YXIgd2lkdGggPSB0aGlzLl9jYW52YXMud2lkdGg7Ci0gICAgICAg
IHZhciBoZWlnaHQgPSB0aGlzLl9jYW52YXMuaGVpZ2h0OwotCi0gICAgICAgIHZhciB4ID0gd2lk
dGggLyAyOwotICAgICAgICB2YXIgeSA9IGhlaWdodCAvIDI7Ci0gICAgICAgIHZhciByYWRpdXMg
PSAyMDA7Ci0KLSAgICAgICAgdmFyIGN0eCA9IHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCIyZCIp
OwotICAgICAgICBjdHguYmVnaW5QYXRoKCk7Ci0gICAgICAgIGN0eC5hcmMoeCwgeSwgcmFkaXVz
LCAwLCBNYXRoLlBJKjIsIGZhbHNlKTsKLSAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7Ci0gICAg
ICAgIGN0eC5zdHJva2VTdHlsZSA9ICJyZ2JhKDEzMCwgMTMwLCAxMzAsIDAuOCkiOwotICAgICAg
ICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKLQotICAgICAgICB2YXIg
Y3VycmVudEFuZ2xlID0gMDsKLSAgICAgICAgdmFyIG1lbW9yeUJsb2NrID0gdGhpcy5fbWVtb3J5
U25hcHNob3Q7Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFpbnRQZXJjZW50QW5kTGFiZWwoZnJhY3Rp
b24sIHRpdGxlLCBtaWRBbmdsZSkKLSAgICAgICAgewotICAgICAgICAgICAgY3R4LmJlZ2luUGF0
aCgpOwotICAgICAgICAgICAgY3R4LmZvbnQgPSAiMTNweCBBcmlhbCI7Ci0gICAgICAgICAgICBj
dHguZmlsbFN0eWxlID0gInJnYmEoMTAsIDEwLCAxMCwgMC44KSI7Ci0KLSAgICAgICAgICAgIHZh
ciB0ZXh0WCA9IHggKyAocmFkaXVzICsgMTApICogTWF0aC5jb3MobWlkQW5nbGUpOwotICAgICAg
ICAgICAgdmFyIHRleHRZID0geSArIChyYWRpdXMgKyAxMCkgKiBNYXRoLnNpbihtaWRBbmdsZSk7
Ci0gICAgICAgICAgICB2YXIgcmVsYXRpdmVPZmZzZXQgPSAtTWF0aC5jb3MobWlkQW5nbGUpIC8g
TWF0aC5zaW4oTWF0aC5QSSAvIDEyKTsKLSAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ID0gTnVt
YmVyLmNvbnN0cmFpbihyZWxhdGl2ZU9mZnNldCwgLTEsIDEpOwotICAgICAgICAgICAgdmFyIG1l
dHJpY3MgPSBjdHgubWVhc3VyZVRleHQodGl0bGUpOwotICAgICAgICAgICAgdGV4dFggLT0gbWV0
cmljcy53aWR0aCAqIChyZWxhdGl2ZU9mZnNldCArIDEpIC8gMjsKLSAgICAgICAgICAgIHRleHRZ
ICs9IDU7Ci0gICAgICAgICAgICBjdHguZmlsbFRleHQodGl0bGUsIHRleHRYLCB0ZXh0WSk7Ci0K
LSAgICAgICAgICAgIC8vIERvIG5vdCBwcmludCBwZXJjZW50YWdlIGlmIHRoZSBzZWN0b3IgaXMg
dG9vIG5hcnJvdy4KLSAgICAgICAgICAgIGlmIChmcmFjdGlvbiA+IDAuMDMpIHsKLSAgICAgICAg
ICAgICAgICB0ZXh0WCA9IHggKyByYWRpdXMgKiBNYXRoLmNvcyhtaWRBbmdsZSkgLyAyOwotICAg
ICAgICAgICAgICAgIHRleHRZID0geSArIHJhZGl1cyAqIE1hdGguc2luKG1pZEFuZ2xlKSAvIDI7
Ci0gICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCgxMDAgKiBmcmFjdGlvbikudG9GaXhlZCgw
KSArICIlIiwgdGV4dFggLSA4LCB0ZXh0WSArIDUpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBjdHguY2xvc2VQYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1lbW9yeUJs
b2NrLmNoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdG90YWwgPSBt
ZW1vcnlCbG9jay5zaXplOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lbW9yeUJsb2Nr
LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgY2hpbGQgPSBtZW1vcnlC
bG9jay5jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIGlmICghY2hpbGQuc2l6ZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZhciB2aWV3UHJvcGVydGllcyA9IFdlYklu
c3BlY3Rvci5NZW1vcnlCbG9ja1ZpZXdQcm9wZXJ0aWVzLl9mb3JNZW1vcnlCbG9jayhjaGlsZCk7
Ci0gICAgICAgICAgICB2YXIgYW5nbGVTcGFuID0gTWF0aC5QSSAqIDIgKiAoY2hpbGQuc2l6ZSAv
IHRvdGFsKTsKLSAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgIGN0eC5t
b3ZlVG8oeCwgeSk7Ci0gICAgICAgICAgICBjdHgubGluZVRvKHggKyByYWRpdXMgKiBNYXRoLmNv
cyhjdXJyZW50QW5nbGUpLCB5ICsgcmFkaXVzICogTWF0aC5zaW4oY3VycmVudEFuZ2xlKSk7Ci0g
ICAgICAgICAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgY3VycmVudEFuZ2xlLCBjdXJyZW50QW5n
bGUgKyBhbmdsZVNwYW4sIGZhbHNlKTsKLSAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAwLjU7
Ci0gICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpOwotICAgICAgICAgICAgY3R4LmZpbGxTdHls
ZSA9IHZpZXdQcm9wZXJ0aWVzLl9maWxsU3R5bGU7Ci0gICAgICAgICAgICBjdHguc3Ryb2tlU3R5
bGUgPSAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjgpIjsKLSAgICAgICAgICAgIGN0eC5maWxsKCk7
Ci0gICAgICAgICAgICBjdHguc3Ryb2tlKCk7Ci0gICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7
Ci0KLSAgICAgICAgICAgIHBhaW50UGVyY2VudEFuZExhYmVsKGNoaWxkLnNpemUgLyB0b3RhbCwg
dmlld1Byb3BlcnRpZXMuX2Rlc2NyaXB0aW9uLCBjdXJyZW50QW5nbGUgKyBhbmdsZVNwYW4gLyAy
KTsKLQotICAgICAgICAgICAgY3VycmVudEFuZ2xlICs9IGFuZ2xlU3BhbjsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICBfY2xlYXI6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgY3R4ID0gdGhp
cy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwg
Y3R4LmNhbnZhcy53aWR0aCwgY3R4LmNhbnZhcy5oZWlnaHQpOwotICAgIH0sCi0KLSAgICBfX3By
b3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQotfQotCi0vKioKLSAqIEBjb25zdHJ1
Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5WaWV3fQogICovCiBXZWJJbnNwZWN0b3Iu
TmF0aXZlTWVtb3J5QmFyQ2hhcnQgPSBmdW5jdGlvbigpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKaW5kZXggMmVjMjhmYWVl
Yzk3MzhlNWFhODcwYmNiZjM2OTk2YzMyNTVmYzEyNC4uNzY3ODNiMDRjZjViMjE3Njc2OGM4NWRl
ZWVjMjkwOWQzZjExMzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtMTM2Nyw2ICsxMzY3LDcgQEAgaW1wb3J0U2Ny
aXB0KCJIZWFwU25hcHNob3RMb2FkZXIuanMiKTsKIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90
UHJveHkuanMiKTsKIGltcG9ydFNjcmlwdCgiSGVhcFNuYXBzaG90Vmlldy5qcyIpOwogaW1wb3J0
U2NyaXB0KCJIZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIik7CitpbXBvcnRTY3JpcHQo
Ik5hdGl2ZUhlYXBHcmFwaC5qcyIpOwogaW1wb3J0U2NyaXB0KCJOYXRpdmVNZW1vcnlTbmFwc2hv
dFZpZXcuanMiKTsKIGltcG9ydFNjcmlwdCgiUHJvZmlsZUxhdW5jaGVyVmlldy5qcyIpOwogaW1w
b3J0U2NyaXB0KCJUb3BEb3duUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IDRjMGMxMmQ3MTIxNGRj
OGUwZWRkMWE4MTQ3MmNmNzgxMzIwYTBkOWMuLmU0NDIyZGZhNDBiZjA4ZTZlMzMxZmRkZTllM2Vj
M2JkOWMyZTg3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMKQEAgLTEwNiw2ICsxMDYsNyBAQAogICAgIDxmaWxlPk1lbW9yeVN0YXRpc3RpY3Mu
anM8L2ZpbGU+CiAgICAgPGZpbGU+TWV0cmljc1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxm
aWxlPk5hdGl2ZUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM8L2ZpbGU+CisgICAgPGZpbGU+TmF0
aXZlSGVhcEdyYXBoLmpzPC9maWxlPgogICAgIDxmaWxlPk5hdGl2ZU1lbW9yeVNuYXBzaG90Vmll
dy5qczwvZmlsZT4KICAgICA8ZmlsZT5OYXZpZ2F0b3JPdmVybGF5Q29udHJvbGxlci5qczwvZmls
ZT4KICAgICA8ZmlsZT5OYXZpZ2F0b3JWaWV3LmpzPC9maWxlPgo=
</data>
<flag name="review"
          id="197550"
          type_id="1"
          status="+"
          setter="apavlov"
    />
    <flag name="commit-queue"
          id="197551"
          type_id="3"
          status="+"
          setter="apavlov"
    />
          </attachment>
      

    </bug>

</bugzilla>