<?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>34391</bug_id>
          
          <creation_ts>2010-01-31 03:30:33 -0800</creation_ts>
          <short_desc>Web Inspector: Introduce DivBasedTextViewer.</short_desc>
          <delta_ts>2010-01-31 08:37:21 -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="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>186181</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-31 03:30:33 -0800</bug_when>
    <thetext>I am trying out a hybrid approach in source rendering. I thought it would be slow, but given that we do no real editing yet, it seems to work just fine. It will anyway be dead slow on debugging gmail scripts (where we create XXK line divs), but other than that it should be Ok.

Some highlights:
- It inherits from TextEditor and conforms to its API
- It re-uses TextEditor&apos;s code (and canvas) to render decorations such as program counter, breakpoints and messages
- It uses same TextEditorModel and highlighter
- It uses same code for line number rendering

The difference is that DivBasedTextViewer creates a div-per line and instantly adds all of them to the editor&apos;s sheet. This creates a non-highlighted text that has proper scrollers, browser-based selection, etc. We maintain original scroller handlers and hence when user scrolls to a dirty region, paintLines is being called. Instead of painting lines on the canvas, this viewer replaces them with their highlighted versions using same highlighter logic. As a result, when user opens a source view, he gets a nice highlighted text (highlight is only created for visible area). Then if he scrolls to the middle of the large file, highlighter creates markup attributes on the text model in the background (same control flow as canvas-based). When highlighting data for the visible area is ready, it gets &apos;repainted&apos;, i.e. replaced with highlighted spans.

Seems to be much more efficient than what we&apos;ve had before and allows us to evolve both versions (canvas and span-based) in parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186182</commentid>
    <comment_count>1</comment_count>
      <attachid>47789</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-31 03:40:03 -0800</bug_when>
    <thetext>Created attachment 47789
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186183</commentid>
    <comment_count>2</comment_count>
      <attachid>47790</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-31 03:42:19 -0800</bug_when>
    <thetext>Created attachment 47790
[PATCH] Same with less typos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186193</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-01-31 07:33:59 -0800</bug_when>
    <thetext>This approch is exactly what I was thinking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186196</commentid>
    <comment_count>4</comment_count>
      <attachid>47790</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-01-31 07:47:24 -0800</bug_when>
    <thetext>Comment on attachment 47790
[PATCH] Same with less typos.

&gt; +WebInspector.DivBasedTextViewer = function(textModel, platform)
&gt; +{
&gt; +    WebInspector.TextEditor.call(this, textModel, platform);

I&apos;m not fond of &quot;DivBasedTextViewer&quot; as a class name. What about &quot;NativeTextViewer&quot;, &quot;SimpleTextViewer&quot; or &quot;ClassicTextViewer&quot;? Or, not great but, &quot;DOMBasedTextViewer&quot;.

&gt; +    useCanvasBasedEditor: true

Should be false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186197</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-31 07:51:09 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 47790 [details])
&gt; &gt; +WebInspector.DivBasedTextViewer = function(textModel, platform)
&gt; &gt; +{
&gt; &gt; +    WebInspector.TextEditor.call(this, textModel, platform);
&gt; 
&gt; I&apos;m not fond of &quot;DivBasedTextViewer&quot; as a class name. What about
&gt; &quot;NativeTextViewer&quot;, &quot;SimpleTextViewer&quot; or &quot;ClassicTextViewer&quot;? Or, not great
&gt; but, &quot;DOMBasedTextViewer&quot;.
&gt; 

Lets try NativeTextViewer.

&gt; &gt; +    useCanvasBasedEditor: true
&gt; 
&gt; Should be false?

Not until I fix todos mentioned in the changelog. But that should not take long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186199</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-01-31 07:52:45 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; I am trying out a hybrid approach in source rendering. I thought it would be
&gt; slow, but given that we do no real editing yet, it seems to work just fine. It
&gt; will anyway be dead slow on debugging gmail scripts (where we create XXK line
&gt; divs), but other than that it should be Ok.

Couldn&apos;t we also avoid appending all the line divs and insert spacers until those lines need painted?

I justt things like select all would not work then.

That reminds me, I think you need to add the &quot;-webkit-user-select: text&quot; style to the top level element for the viewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186200</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-01-31 07:53:19 -0800</bug_when>
    <thetext>&quot;I guess things like select all would not work then.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186203</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-31 08:37:21 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	A	WebCore/inspector/front-end/NativeTextViewer.js
	M	WebCore/inspector/front-end/Settings.js
	M	WebCore/inspector/front-end/SourceFrame.js
	M	WebCore/inspector/front-end/TextEditor.js
	M	WebCore/inspector/front-end/TextEditorHighlighter.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.css
	M	WebCore/inspector/front-end/inspector.html
	M	WebCore/inspector/front-end/textEditor.css
Committed r54110</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47789</attachid>
            <date>2010-01-31 03:40:03 -0800</date>
            <delta_ts>2010-01-31 03:42:19 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>text_viewer</filename>
            <type>text/plain</type>
            <size>30604</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODgxMDAzZi4uMzg5ZTc1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMC0wMS0zMSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnRyb2R1Y2UgRGl2QmFzZWRUZXh0
Vmlld2VyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGhhbmRsZXMgcmVuZGVyaW5nIGhpZ2hsaWdo
dGVkIHRleHQsIHVzaW5nIGJyb3dzZXIncworICAgICAgICBzZWxlY3Rpb24vZHJhZy9kcm9wL2Ns
aWNrIGxvZ2ljLiBCcmVha3BvaW50IGRlY29yYXRpb25zIGFuZAorICAgICAgICBwcm9ncmFtIGNv
dW50ZXIgaXMgd29ya2luZy4KKworICAgICAgICBUb2RvOiBsaW5lIG51bWJlcnMgYXJlIHBhaW50
ZWQgJ3VuZGVyJyB0aGUgdGV4dCB3aG5lIHNjcm9sbGluZworICAgICAgICBob3Jpem9udGFsbHks
IGNvbmRpdGlvbmFsIGJyZWFrcG9pbnRzIHBvcHVwIGFuZCBtZXNzYWdlIGJ1YmJsZXMKKyAgICAg
ICAgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MzkxCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9EaXZCYXNlZFRleHRWaWV3ZXIuanM6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGl2
QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fdGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUxpbmVEaXZzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIucHJvdG90eXBlLl91cGRhdGVQ
cmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIu
cHJvdG90eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZp
ZXdlci5wcm90b3R5cGUuX3JlZ2lzdGVyTW91c2VMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5
cGUuX3JlZ2lzdGVyQ2xpcGJvYXJkTGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
aXZCYXNlZFRleHRWaWV3ZXIucHJvdG90eXBlLl9wYWludFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fcG9zaXRpb25EaXZEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIucHJvdG90
eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdl
ci5wcm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNl
ZFRleHRWaWV3ZXIucHJvdG90eXBlLl9jYXJldEZvck1vdXNlRXZlbnQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fY3JlYXRlU3Bh
bik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2l6ZVRvRml0Q29udGVudEhlaWdodCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVFZGl0b3JJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9h
ZGRNZXNzYWdlVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5yZXNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXREaXZEZWNvcmF0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVnaXN0ZXJNb3VzZUxpc3RlbmVy
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlZ2lzdGVy
S2V5Ym9hcmRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlLl9yZWdpc3RlckNsaXBib2FyZExpc3RlbmVycyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yLnByb3RvdHlwZS5fdGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlUHJlZmVycmVk
U2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmVzaXpl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcGFpbnRMaW5l
c0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5
cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5
cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3Rv
dHlwZS5fY2FyZXRGb3JNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZS5fY2hhbmdlRm9udCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZS5fbGV4KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzOgor
CiAyMDEwLTAxLTI5ICBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zd2FsZC5idWRkZW5oYWdlbkBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDhiZmFj
NTEuLjBiNDVkNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNjg3LDYgKzM2ODcsNyBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvRGl2QmFzZWRUZXh0Vmlld2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0RPTUFnZW50LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TVN0b3JhZ2UuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFn
ZUl0ZW1zVmlldy5qcycsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBj
ODNjODc0Li5jN2M3MTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTQyNzQ4LDYgKzQyNzQ4LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERpdkJhc2VkVGV4dFZp
ZXdlci5qcyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUFnZW50LmpzIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RpdkJh
c2VkVGV4dFZpZXdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EaXZCYXNlZFRl
eHRWaWV3ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1YzQ2OQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EaXZCYXNlZFRl
eHRWaWV3ZXIuanMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmll
d2VyID0gZnVuY3Rpb24odGV4dE1vZGVsLCBwbGF0Zm9ybSkKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5jYWxsKHRoaXMsIHRleHRNb2RlbCwgcGxhdGZvcm0pOworICAgIHRoaXMuX3No
ZWV0LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOworICAgIHRoaXMuX3NoZWV0LnRhYkluZGV4ID0g
MDsKKyAgICB0aGlzLl9jYW52YXMuc3R5bGUuekluZGV4ID0gMDsKKyAgICB0aGlzLl9jcmVhdGVM
aW5lRGl2cygpOworfQorCitXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKKyAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dE1vZGVsIGxpc3RlbmVyCisgICAgX3RleHRD
aGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpCisg
ICAgeworICAgICAgICB0aGlzLl9jcmVhdGVMaW5lRGl2cygpOworICAgICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkLmNhbGwodGhpcywgb2xkUmFuZ2Us
IG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUxpbmVE
aXZzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hp
bGQodGhpcy5fc2hlZXQpOworICAgICAgICB0aGlzLl9zaGVldC5yZW1vdmVDaGlsZHJlbigpOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgICAgICBsaW5lRGl2LmNsYXNzTmFtZSA9ICJkaXYtdGV4dC1lZGl0b3It
bGluZSI7CisgICAgICAgICAgICBsaW5lRGl2LnRleHRDb250ZW50ID0gdGhpcy5fdGV4dE1vZGVs
LmxpbmUoaSk7CisgICAgICAgICAgICB0aGlzLl9zaGVldC5hcHBlbmRDaGlsZChsaW5lRGl2KTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fc2hl
ZXQpOworICAgIH0sCisKKyAgICBfdXBkYXRlUHJlZmVycmVkU2l6ZTogZnVuY3Rpb24oc3RhcnRM
aW5lLCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgLy8gUHJlZmVycmVkIHNpemUgaXMgYXV0b21h
dGljYWxseSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBsaW5lIGRpdnMuCisgICAgICAgIC8vIE9u
bHkgaGFuZGxlIGxpbmUgbnVtYmVycyBoZXJlLgorICAgICAgICAKKyAgICAgICAgdGhpcy5zZXRD
b2FsZXNjaW5nVXBkYXRlKHRydWUpOworICAgICAgICB2YXIgbmV3TGluZU51bWJlckRpZ2l0cyA9
IHRoaXMuX2RlY2ltYWxEaWdpdHModGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpOworICAgICAg
ICB0aGlzLl9saW5lTnVtYmVyV2lkdGggPSAobmV3TGluZU51bWJlckRpZ2l0cyArIDIpICogdGhp
cy5fZGlnaXRXaWR0aDsKKworICAgICAgICB0aGlzLl9zaGVldC5zdHlsZS5wYWRkaW5nTGVmdCA9
IHRoaXMuX3RleHRXaWR0aCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCArICJweCI7CisKKyAgICAg
ICAgdGhpcy5fbGluZU51bWJlckRpZ2l0cyA9IG5ld0xpbmVOdW1iZXJEaWdpdHM7CisgICAgICAg
IHRoaXMucmVwYWludEFsbCgpOworCisgICAgICAgIC8vIENoYW5nZXMgdG8gc2l6ZSBjYW4gY2hh
bmdlIHRoZSBjbGllbnQgYXJlYSAoc2Nyb2xsZXJzIGNhbiBhcHBlYXIvZGlzYXBwZWFyKQorICAg
ICAgICB0aGlzLnJlc2l6ZSgpOworICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFs
c2UpOworICAgIH0sCisKKyAgICBfc2Nyb2xsOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAg
Ly8gRG8gaW5zdGFudCByZXBhaW50IHNvIHRoYXQgb2Zmc2V0IG9mIGNhbnZhcyB3YXMgaW4gc3lu
YyB3aXRoIHRoZSBzaGVldC4KKyAgICAgICAgdGhpcy5fcmVwYWludE9uU2Nyb2xsKCk7CisgICAg
fSwKKworICAgIF9yZWdpc3Rlck1vdXNlTGlzdGVuZXJzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3Vz
ZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJLZXlib2Fy
ZExpc3RlbmVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gTm9vcCAtIGxldCBicm93
c2VyIHRha2UgY2FyZSBvZiB0aGlzLgorICAgIH0sCisKKyAgICBfcmVnaXN0ZXJDbGlwYm9hcmRM
aXN0ZW5lcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIE5vb3AgLSBsZXQgYnJvd3Nl
ciB0YWtlIGNhcmUgb2YgdGhpcy4KKyAgICB9LAorCisgICAgX3BhaW50U2VsZWN0aW9uOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICAvLyBOb29wIC0gbGV0IGJyb3dzZXIgdGFrZSBjYXJlIG9m
IHRoaXMuCisgICAgfSwKKworICAgIF9wb3NpdGlvbkRpdkRlY29yYXRpb246IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIC8vIERpdiBkZWNvcmF0aW9ucyBoYXZlIGZpeGVkIHBvc2l0aW9ucyBp
biBvdXIgY2FzZS4KKyAgICB9LAorCisgICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKKyAgICB7
CisgICAgICAgIGlmIChlLm9mZnNldFggKyBlLnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fbGlu
ZU51bWJlcldpZHRoICYmIHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKGUuYnV0dG9uID09PSAyIHx8ICh0aGlzLl9pc01hYyAmJiBl
LmN0cmxLZXkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBsb2NhdGlvbiA9
IHRoaXMuX2NhcmV0Rm9yTW91c2VFdmVudChlKTsKKyAgICAgICAgdGhpcy5fbGluZU51bWJlckRl
Y29yYXRvci5tb3VzZURvd24obG9jYXRpb24ubGluZSwgZSk7CisgICAgfSwKKworICAgIF9jb250
ZXh0TWVudTogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIC8vIE92ZXJyaWRlIGVkaXRvcidz
IGltcGxlbWVudGF0aW9uIHRvIGFkZCB0aGUgbGluZSdzIG9mZnNldHMuCisgICAgICAgIGlmIChl
Lm9mZnNldFggKyBlLnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fbGluZU51bWJlcldpZHRoICYm
IHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fY2FyZXRGb3JNb3VzZUV2ZW50KGUpOworICAgICAgICB0
aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yLmNvbnRleHRNZW51KGxvY2F0aW9uLmxpbmUsIGUpOwor
ICAgIH0sCisKKyAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQorICAgIHsKKyAg
ICAgICAgLy8gT3ZlcnJpZGUgZWRpdG9yJ3MgaW1wbGVtZW50YXRpb24gdG8gYWRkIHRoZSBsaW5l
J3Mgb2Zmc2V0cy4KKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9v
ZmZzZXRUb0xpbmUoZS5vZmZzZXRZICsgZS50YXJnZXQub2Zmc2V0VG9wKSAtIDEpOworICAgICAg
ICB2YXIgb2Zmc2V0ID0gZS5vZmZzZXRYICsgZS50YXJnZXQub2Zmc2V0TGVmdCArIHRoaXMuX3Nj
cm9sbExlZnQgLSB0aGlzLl9saW5lTnVtYmVyV2lkdGg7CisgICAgICAgIHJldHVybiB7IGxpbmU6
IGxpbmVOdW1iZXIsIGNvbHVtbjogdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIG9m
ZnNldCkgfTsKKyAgICB9LAorCisgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZU51bWJlciwg
bGluZU9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBkaXZIaWdobGlnaHRlZCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1oaWdobGlnaHRlZCIpOworICAg
ICAgICBpZiAoZGl2SGlnaGxpZ2h0ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGhpZ2hsaWdodGVyU3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHRlci1zdGF0ZSIpOworICAgICAgICBpZiAoIWhpZ2hsaWdodGVyU3Rh
dGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9zaGVl
dC5jaGlsZHJlbltsaW5lTnVtYmVyXTsKKyAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OworCisgICAgICAgIHZhciBwbGFpblRleHRTdGFydCA9IC0xOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IGxpbmUubGVuZ3RoOykgeworICAgICAgICAgICAgaWYgKGogPiAxMDAwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGlzIHRvbyBsb25nIC0gZG8gbm90IHdhc3RlIGN5
Y2xlcyBvbiBtaW5pZmllZCBqcyBoaWdobGlnaHRpbmcuCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0ZXJT
dGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJpYnV0ZXNbal07CisgICAgICAgICAgICBpZiAo
IWF0dHJpYnV0ZSB8fCAhYXR0cmlidXRlLnN0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBs
YWluVGV4dFN0YXJ0ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQg
PSBqOworICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUuc3Vic3Ry
aW5nKHBsYWluVGV4dFN0YXJ0LCBqKSkpOworICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRT
dGFydCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNwYW4obGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0
ZS5sZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKSk7CisgICAgICAgICAgICAgICAgaiArPSBh
dHRyaWJ1dGUubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChw
bGFpblRleHRTdGFydCAhPT0gLTEpCisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5l
Lmxlbmd0aCkpKTsKKworICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJkaXYtaGlnaGxpZ2h0ZWQiLCB0cnVlKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZVNw
YW46IGZ1bmN0aW9uKGNvbnRlbnQsIGNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIHZhciBzcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBzcGFuLmNsYXNzTmFt
ZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKKyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAg
IH0KK30KKworV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDg1YWVjZDUuLjE4MzgwNjggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAgLTM4LDcgKzM4LDggQEAgdmFyIFByZWZl
cmVuY2VzID0gewogICAgIHN0eWxlUnVsZXNFeHBhbmRlZFN0YXRlOiB7fSwKICAgICBzaG93TWlz
c2luZ0xvY2FsaXplZFN0cmluZ3M6IGZhbHNlLAogICAgIHNhbXBsaW5nQ1BVUHJvZmlsZXI6IGZh
bHNlLAotICAgIHNob3dDb2xvck5pY2tuYW1lczogdHJ1ZQorICAgIHNob3dDb2xvck5pY2tuYW1l
czogdHJ1ZSwKKyAgICB1c2VDYW52YXNCYXNlZEVkaXRvcjogdHJ1ZQogfQogCiBXZWJJbnNwZWN0
b3IucG9wdWxhdGVGcm9udGVuZFNldHRpbmdzID0gZnVuY3Rpb24oc2V0dGluZ3NTdHJpbmcpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggZmY4MjNjZC4u
N2QwNmI0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZy
YW1lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpA
QCAtMTE0LDEzICsxMTQsMTMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKICAgICAgICAgdGhpcy5fbWVzc2Fn
ZUJ1YmJsZXMgPSB7fTsKICAgICAgICAgaWYgKHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRo
aXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5fZWRpdG9y
LnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAgfSwKIAogICAgIHNpemVUb0Zp
dENvbnRlbnRIZWlnaHQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9lZGl0
b3IpCi0gICAgICAgICAgICB0aGlzLl9lZGl0b3IucGFja0FuZFJlcGFpbnRBbGwoKTsKKyAgICAg
ICAgICAgIHRoaXMuX2VkaXRvci5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOwogICAg
IH0sCiAKICAgICBzZXRDb250ZW50OiBmdW5jdGlvbihtaW1lVHlwZSwgY29udGVudCkKQEAgLTEz
Niw3ICsxMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIXRoaXMuX3Zpc2libGUgfHwgIXRoaXMuX2xvYWRlZCB8fCB0aGlzLl9lZGl0b3Ip
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fZWRpdG9yID0gbmV3IFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yKHRoaXMuX3RleHRNb2RlbCwgV2ViSW5zcGVjdG9yLnBsYXRmb3Jt
KTsKKyAgICAgICAgdmFyIGVkaXRvckNvbnN0cnVjdG9yID0gUHJlZmVyZW5jZXMudXNlQ2FudmFz
QmFzZWRFZGl0b3IgPyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA6IFdlYkluc3BlY3Rvci5EaXZC
YXNlZFRleHRWaWV3ZXI7CisgICAgICAgIHRoaXMuX2VkaXRvciA9IG5ldyBlZGl0b3JDb25zdHJ1
Y3Rvcih0aGlzLl90ZXh0TW9kZWwsIFdlYkluc3BlY3Rvci5wbGF0Zm9ybSk7CiAgICAgICAgIHRo
aXMuX2VkaXRvci5saW5lTnVtYmVyRGVjb3JhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TGluZU51bWJlckRlY29yYXRvcih0aGlzLCB0aGlzLl9lZGl0b3IudGV4dE1vZGVsKTsKICAg
ICAgICAgdGhpcy5fZWRpdG9yLmxpbmVEZWNvcmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1
dGlvbkxpbmVEZWNvcmF0b3IodGhpcyk7CiAgICAgICAgIHRoaXMuX2VkaXRvci5yZWFkT25seSA9
IHRydWU7CkBAIC0xNTAsOCArMTUxLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlKCk7
CiAKICAgICAgICAgdGhpcy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAg
ICAgIHRoaXMuX2VkaXRvci51cGRhdGVDYW52YXNTaXplKCk7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICB0aGlzLl9lZGl0b3IucmVzaXplKCk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvci5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOwogCiAg
ICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lKQogICAgICAgICAgICAgdGhpcy5yZXZlYWxM
aW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmUpOwpAQCAtMjcyLDcgKzI3Myw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cm93TWVzc2FnZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChyb3dNZXNzYWdlc1tp
XS5pc0VxdWFsKG1zZywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRN
ZXNzYWdlUmVwZWF0Q291bnQocm93TWVzc2FnZXNbaV0sIG1zZy5yZXBlYXREZWx0YSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fZWRpdG9yLnBhY2tBbmRSZXBhaW50QWxsKCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDQsNyAr
MzA1LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICBtc2cuX3Jlc291cmNlTWVzc2FnZUxpbmVFbGVtZW50ID0gbWVzc2FnZUxpbmVFbGVtZW50Owog
Ci0gICAgICAgIHRoaXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICB0aGlz
Ll9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKICAgICB9LAogCiAgICAg
X2FkZEV4aXN0aW5nQnJlYWtwb2ludHNUb1NvdXJjZTogZnVuY3Rpb24oKQpAQCAtNDYxLDcgKzQ2
Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgcmVzaXpl
OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAgICAgICAg
ICAgdGhpcy5fZWRpdG9yLnVwZGF0ZUNhbnZhc1NpemUoKTsKKyAgICAgICAgICAgIHRoaXMuX2Vk
aXRvci5yZXNpemUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRFZGl0b3IuanMKaW5kZXggNTU1NDM2NS4uZDIzMDU4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKQEAgLTM2LDcgKzM2LDYgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtKQogCiAgICAgdGhpcy5lbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciI7Ci0gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDsK
IAogICAgIHRoaXMuX2NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwog
ICAgIHRoaXMuX2NhbnZhcy5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY2FudmFzIjsKQEAgLTQ0
LDEwICs0MywxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHRleHRNb2Rl
bCwgcGxhdGZvcm0pCiAKICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gInRleHQtZWRpdG9y
LWNvbnRhaW5lciI7CisgICAgdGhpcy5fY29udGFpbmVyLnRhYkluZGV4ID0gMDsKICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKIAogICAgIHRoaXMuX3NoZWV0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fc2hlZXQuY2xhc3NO
YW1lID0gInRleHQtZWRpdG9yLXNoZWV0IjsKICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hp
bGQodGhpcy5fc2hlZXQpOwogCiAgICAgdmFyIGN1cnNvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKQEAgLTU2LDIwICs1NSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0pCiAgICAgdGhpcy5fY3Vyc29yID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0Q3Vyc29yKGN1cnNvckVsZW1lbnQpOwogCiAgICAgdGhpcy5f
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIs
IHRoaXMuX21vdXNlVXAuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3NoZWV0LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gICAgdGhpcy5fc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5f
bW91c2VNb3ZlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9zaGVldC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX21vdXNlT3V0LmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHRoaXMuX2RibENsaWNr
LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJj
b250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2tleURvd24uYmlu
ZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0
SW5wdXQiLCB0aGlzLl90ZXh0SW5wdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHki
LCB0aGlzLl9jb3B5LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhpcy5fY3V0LmJp
bmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVm
b3JlcGFzdGUiLCB0aGlzLl9iZWZvcmVQYXN0ZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgdGhpcy5fcGFzdGUuYmluZCh0aGlz
KSwgZmFsc2UpOworCisgICAgdGhpcy5fcmVnaXN0ZXJNb3VzZUxpc3RlbmVycygpOworICAgIHRo
aXMuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0ZW5lcnMoKTsKKyAgICB0aGlzLl9yZWdpc3RlckNsaXBi
b2FyZExpc3RlbmVycygpOwogCiAgICAgdGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uID0gMDsKICAg
ICB0aGlzLl9zY3JvbGxMZWZ0ID0gMDsKQEAgLTE2MCw3ICsxNTAsMzIgQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNl
dEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iLCBkaXZEZWNvcmF0aW9uKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucGFja0FuZFJlcGFpbnRBbGwoKTsKKyAgICAgICAg
dGhpcy5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOworICAgIH0sCisKKyAgICBfcmVn
aXN0ZXJNb3VzZUxpc3RlbmVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hl
ZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuX21vdXNlVXAuYmluZCh0aGlzKSwg
ZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24i
LCB0aGlzLl9tb3VzZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVl
dC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlz
KSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91
dCIsIHRoaXMuX21vdXNlT3V0LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAgICAgdGhpcy5fc2hl
ZXQuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9kYmxDbGljay5iaW5kKHRoaXMp
LCBmYWxzZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIHRoaXMuX2tleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlz
Ll9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5fdGV4dElucHV0
LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyQ2xpcGJvYXJkTGlz
dGVuZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZl
bnRMaXN0ZW5lcigiYmVmb3JlY29weSIsIHRoaXMuX2JlZm9yZUNvcHkuYmluZCh0aGlzKSwgZmFs
c2UpOworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRo
aXMuX2NvcHkuYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRk
RXZlbnRMaXN0ZW5lcigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZh
bHNlKTsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRo
aXMuX2N1dC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRF
dmVudExpc3RlbmVyKCJiZWZvcmVwYXN0ZSIsIHRoaXMuX2JlZm9yZVBhc3RlLmJpbmQodGhpcyks
IGZhbHNlKTsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInBhc3Rl
IiwgdGhpcy5fcGFzdGUuYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIH0sCiAKICAgICBfb2Zmc2V0
VG9MaW5lOiBmdW5jdGlvbihvZmZzZXQpCkBAIC0yMTEsNyArMjI2LDggQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dExpbmVI
ZWlnaHQ7CiAgICAgfSwKIAotICAgIHJldmVhbDogZnVuY3Rpb24obGluZSwgY29sdW1uKSB7Cisg
ICAgcmV2ZWFsOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCisgICAgewogICAgICAgICB2YXIgbWF4
U2Nyb2xsVG9wID0gdGhpcy5fbGluZVRvT2Zmc2V0KGxpbmUpOwogICAgICAgICB2YXIgbWluU2Ny
b2xsVG9wID0gbWF4U2Nyb2xsVG9wICsgdGhpcy5fbGluZUhlaWdodChsaW5lKSAtIHRoaXMuX2Nh
bnZhcy5oZWlnaHQ7CiAgICAgICAgIGlmICh0aGlzLl9zY3JvbGxUb3AgPiBtYXhTY3JvbGxUb3Ap
CkBAIC0yNDIsNyArMjU4LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KG5ld1Jhbmdl
LnN0YXJ0TGluZSwgbGFzdFZpc2libGVMaW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMu
X3VwZGF0ZVNpemUobmV3UmFuZ2Uuc3RhcnRMaW5lLCBNYXRoLm1heChuZXdSYW5nZS5lbmRMaW5l
LCBvbGRSYW5nZS5lbmRMaW5lKSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVByZWZlcnJlZFNpemUo
bmV3UmFuZ2Uuc3RhcnRMaW5lLCBNYXRoLm1heChuZXdSYW5nZS5lbmRMaW5lLCBvbGRSYW5nZS5l
bmRMaW5lKSk7CiAgICAgICAgIGlmIChvbGRSYW5nZS5saW5lc0NvdW50ICE9PSBuZXdSYW5nZS5s
aW5lc0NvdW50KSB7CiAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIG9mZnNldCBjYWNoZS4KICAg
ICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVuZ3RoID0gb2xkUmFuZ2Uuc3RhcnRM
aW5lICsgMTsKQEAgLTI3NSwxNiArMjkxLDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fcGFpbnQoKTsKICAgICB9LAogCi0gICAgcGFja0Fu
ZFJlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAgICByZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWlu
dDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBkYXRlKHRy
dWUpOwogICAgICAgICB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlID0gWzBdOwotICAgICAgICB0aGlz
Ll91cGRhdGVTaXplKDAsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlUHJlZmVycmVkU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7CiAg
ICAgICAgIHRoaXMucmVwYWludEFsbCgpOwogICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRh
dGUoZmFsc2UpOwogICAgIH0sCiAKLSAgICBfdXBkYXRlU2l6ZTogZnVuY3Rpb24oc3RhcnRMaW5l
LCBlbmRMaW5lKQorICAgIF91cGRhdGVQcmVmZXJyZWRTaXplOiBmdW5jdGlvbihzdGFydExpbmUs
IGVuZExpbmUpCiAgICAgewogICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7
CiAgICAgICAgIHZhciBndWFyZGVkRW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50LCBlbmRMaW5lICsgMSk7CkBAIC0zMjQsMTEgKzM0MCwxMSBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGFu
Z2VzIHRvIHNpemUgY2FuIGNoYW5nZSB0aGUgY2xpZW50IGFyZWEgKHNjcm9sbGVycyBjYW4gYXBw
ZWFyL2Rpc2FwcGVhcikKLSAgICAgICAgdGhpcy51cGRhdGVDYW52YXNTaXplKCk7CisgICAgICAg
IHRoaXMucmVzaXplKCk7CiAgICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7
CiAgICAgfSwKIAotICAgIHVwZGF0ZUNhbnZhc1NpemU6IGZ1bmN0aW9uKCkKKyAgICByZXNpemU6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jYW52YXMud2lkdGggIT09IHRo
aXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCB8fCB0aGlzLl9jYW52YXMuaGVpZ2h0ICE9PSB0aGlz
Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0KSB7CiAgICAgICAgICAgICB0aGlzLl9jYW52YXMud2lk
dGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGg7CkBAIC00MjYsNyArNDQyLDYgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHZhciBp
ID0gZmlyc3RMaW5lOyBpIDwgbGFzdExpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0g
dGhpcy5fbGluZVRvT2Zmc2V0KGkpIC0gdGhpcy5fc2Nyb2xsVG9wOwogCiAgICAgICAgICAgICBp
ZiAodGhpcy5fbGluZURlY29yYXRvcikKQEAgLTQzNiw0OCArNDUxLDU0IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChkaXZEZWNvcmF0aW9u
KQogICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGl2RGVjb3JhdGlvbihpLCBkaXZEZWNv
cmF0aW9uLCB0cnVlKTsKIAotICAgICAgICAgICAgaWYgKCF0aGlzLl9oaWdobGlnaHRpbmdFbmFi
bGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMCwwLDAp
IjsKLSAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQobGluZSwgdGhpcy5fbGluZU51
bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCwgbGluZU9mZnNldCArIHRoaXMuX3RleHRMaW5l
SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShpLCBsaW5lT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdHgucmVzdG9yZSgpOworICAgIH0sCisKKyAgICBfcGFpbnRMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBsaW5lT2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCF0aGlzLl9oaWdobGln
aHRpbmdFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gInJnYigw
LDAsMCkiOworICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxUZXh0KGxpbmUsIHRoaXMuX2xpbmVO
dW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExlZnQsIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGlu
ZUhlaWdodCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGxpbmUubGVuZ3RoID4gMTAwMCkgewotICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlv
bjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZpc2libGUgYXJlYS4KLSAg
ICAgICAgICAgICAgICB2YXIgZmlyc3RDb2x1bW4gPSB0aGlzLl9jb2x1bW5Gb3JPZmZzZXQoaSwg
dGhpcy5fc2Nyb2xsTGVmdCk7Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RDb2x1bW4gPSB0aGlz
Ll9jb2x1bW5Gb3JPZmZzZXQoaSwgdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2NhbnZhcy53aWR0
aCk7CisgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEwMDApIHsKKyAgICAgICAgICAgIC8vIE9w
dGltaXphdGlvbjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZpc2libGUg
YXJlYS4KKyAgICAgICAgICAgIHZhciBmaXJzdENvbHVtbiA9IHRoaXMuX2NvbHVtbkZvck9mZnNl
dChsaW5lTnVtYmVyLCB0aGlzLl9zY3JvbGxMZWZ0KTsKKyAgICAgICAgICAgIHZhciBsYXN0Q29s
dW1uID0gdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIHRoaXMuX3Njcm9sbExlZnQg
KyB0aGlzLl9jYW52YXMud2lkdGgpOworICAgICAgICB9CisgICAgICAgIHZhciBoaWdobGlnaHRl
clN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxp
Z2h0ZXItc3RhdGUiKTsKKyAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7CisgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7CisgICAgICAgICAgICB2YXIgYXR0
cmlidXRlID0gaGlnaGxpZ2h0ZXJTdGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJpYnV0ZXNb
al07CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGZpcnN0Q29sdW1uICYmIGogKyBhdHRy
aWJ1dGUubGVuZ3RoIDwgZmlyc3RDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBqICs9IGF0dHJp
YnV0ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRy
aWJ1dGUoaSwgImhpZ2hsaWdodGVyLXN0YXRlIik7Ci0gICAgICAgICAgICB2YXIgcGxhaW5UZXh0
U3RhcnQgPSAtMTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGhpZ2hsaWdodGVyU3RhdGUgJiYg
aGlnaGxpZ2h0ZXJTdGF0ZS5hdHRyaWJ1dGVzW2pdOwotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGUgJiYgZmlyc3RDb2x1bW4gJiYgaiArIGF0dHJpYnV0ZS5sZW5ndGggPCBmaXJzdENvbHVt
bikgewotICAgICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlICYmIGxhc3RDb2x1bW4gJiYgaiA+IGxhc3RDb2x1bW4pCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFh
dHRyaWJ1dGUuc3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0
ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKLSAg
ICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0
U3RhcnQsIGopLCB0aGlzLl9saW5lTnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhp
cy5fY29sdW1uVG9PZmZzZXQoaSwgcGxhaW5UZXh0U3RhcnQpLCBsaW5lT2Zmc2V0ICsgdGhpcy5f
dGV4dExpbmVIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQg
PSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFN0eWxlID0gYXR0cmlidXRlLnN0eWxlOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9jdHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCB0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhpcy5fY29sdW1uVG9P
ZmZzZXQoaSwgaiksIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGUgJiYgbGFzdENvbHVtbiAmJiBqID4gbGFzdENvbHVtbikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUuc3R5bGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQorICAgICAgICAgICAg
ICAgICAgICBwbGFpblRleHRTdGFydCA9IGo7CisgICAgICAgICAgICAgICAgaisrOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCww
KSI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBwbGFpblRleHRTdGFydCks
IGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7CisgICAgICAgICAgICAgICAgICAg
IHBsYWluVGV4dFN0YXJ0ID0gLTE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgICAg
IHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxUZXh0KGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBqKSwgdGhpcy5f
bGluZU51bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2NvbHVtblRvT2Zmc2V0
KGksIHBsYWluVGV4dFN0YXJ0KSwgbGluZU9mZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gYXR0cmlidXRlLnN0eWxlOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmluZyhqLCBqICsg
YXR0cmlidXRlLmxlbmd0aCksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExl
ZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBqKSwgbGluZU9mZnNldCArIHRo
aXMuX3RleHRMaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5n
dGg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fY3R4LnJlc3RvcmUo
KTsKKyAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgeworICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMCwwLDApIjsKKyAgICAgICAgICAgIHRoaXMuX2N0eC5m
aWxsVGV4dChsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVt
YmVyLCBwbGFpblRleHRTdGFydCksIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7
CisgICAgICAgIH0KICAgICB9LAogCiAgICAgcGFpbnRMaW5lTnVtYmVyczogZnVuY3Rpb24oKQpA
QCAtNTczLDcgKzU5NCw2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIGlmIChlLm9mZnNldFggPCB0aGlzLl9saW5lTnVtYmVyV2lkdGggJiYg
dGhpcy5fbGluZU51bWJlckRlY29yYXRvcikgewogICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0g
dGhpcy5fY2FyZXRGb3JNb3VzZUV2ZW50KGUpOwotICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2Nh
dGlvbi5saW5lOwogICAgICAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IuY29u
dGV4dE1lbnUobG9jYXRpb24ubGluZSwgZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IGVsc2UgewpAQCAtNTkwLDcgKzYxMCw2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQogICAg
IHsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9vZmZzZXRUb0xp
bmUoZS5vZmZzZXRZKSAtIDEpOwotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIpOwogICAgICAgICB2YXIgb2Zmc2V0ID0gZS5vZmZzZXRYICsgdGhpcy5f
c2Nyb2xsTGVmdCAtIHRoaXMuX2xpbmVOdW1iZXJXaWR0aDsKICAgICAgICAgcmV0dXJuIHsgbGlu
ZTogbGluZU51bWJlciwgY29sdW1uOiB0aGlzLl9jb2x1bW5Gb3JPZmZzZXQobGluZU51bWJlciwg
b2Zmc2V0KSB9OwogICAgIH0sCkBAIC0xMDcyLDcgKzEwOTEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICBfY2hhbmdlRm9udDogZnVuY3Rpb24oc2Fuc1Nl
cmlmLCBmb250U2l6ZSkgewogICAgICAgICB0aGlzLl9pbml0Rm9udChzYW5zU2VyaWYsIGZvbnRT
aXplKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVByZWZlcnJlZFNpemUoMCwgdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQpOwogICAgICAgICB0aGlzLnJlcGFpbnRBbGwoKTsKICAgICB9LAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdo
dGVyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRl
ci5qcwppbmRleCA4MDk3MzAyLi45YTdhMDUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMKQEAgLTE4OCw3ICsxODgsNyBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICB2YXIgbmV3Q29sdW1uID0gdGhpcy5fdG9rZW5pemVyLm5leHRUb2tlbihjb2x1bW4p
OwogICAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLl90b2tlbml6ZXIudG9rZW5UeXBl
OwogICAgICAgICAgICAgIGlmICh0b2tlblR5cGUpCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZXNbY29sdW1uXSA9IHsgbGVuZ3RoOiBuZXdDb2x1bW4gLSBjb2x1bW4sIHN0eWxlOiB0aGlzLl9z
dHlsZXNbdG9rZW5UeXBlXSB9OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2NvbHVtbl0g
PSB7IGxlbmd0aDogbmV3Q29sdW1uIC0gY29sdW1uLCB0b2tlblR5cGU6IHRva2VuVHlwZSwgc3R5
bGU6IHRoaXMuX3N0eWxlc1t0b2tlblR5cGVdIH07CiAgICAgICAgICAgICAgY29sdW1uID0gbmV3
Q29sdW1uOwogICAgICAgICAgfSB3aGlsZSAoY29sdW1uIDwgbGluZS5sZW5ndGgpCiAgICAgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCAxZDM3ZDM2Li5hZjE1ZGQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtMjAsNiArMjAsNyBA
QAogICAgIDxmaWxlPkRhdGFiYXNlUXVlcnlWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFi
YXNlVGFibGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgorICAg
IDxmaWxlPkRpdkJhc2VkVGV4dFZpZXdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01BZ2VudC5q
czwvZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVN0
b3JhZ2VJdGVtc1ZpZXcuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWwKaW5kZXggMWUyMDgyYy4uODA4NzdkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtOTcsNiArOTcsNyBAQCBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JNb2RlbC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGV4dEVk
aXRvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJEaXZCYXNlZFRleHRWaWV3ZXIuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZVRva2VuaXplci5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291
cmNlQ1NTVG9rZW5pemVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTb3VyY2VIVE1MVG9rZW5pemVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcwppbmRleCA1ZWJmZTVmLi42M2Q2NGFk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVkaXRvci5jc3MK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzCkBAIC00NCw2
ICs0NCwxMSBAQAogICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogfQogCisuZGl2LXRleHQtZWRp
dG9yLWxpbmUgeworICAgIGhlaWdodDogMTRweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQor
CiAud2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUgewogICAgIC13ZWJraXQtYm94LXNoYWRvdzog
YmxhY2sgMHB4IDJweCA1cHg7CiAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA5cHg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47790</attachid>
            <date>2010-01-31 03:42:19 -0800</date>
            <delta_ts>2010-01-31 07:47:23 -0800</delta_ts>
            <desc>[PATCH] Same with less typos.</desc>
            <filename>text_viewer</filename>
            <type>text/plain</type>
            <size>30604</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODgxMDAzZi4uMjA2YTY1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMC0wMS0zMSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnRyb2R1Y2UgRGl2QmFzZWRUZXh0
Vmlld2VyLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGhhbmRsZXMgcmVuZGVyaW5nIGhpZ2hsaWdo
dGVkIHRleHQsIHVzaW5nIGJyb3dzZXIncworICAgICAgICBzZWxlY3Rpb24vZHJhZy9kcm9wL2Ns
aWNrIGxvZ2ljLiBCcmVha3BvaW50IGRlY29yYXRpb25zIGFuZAorICAgICAgICBwcm9ncmFtIGNv
dW50ZXIgaXMgd29ya2luZy4KKworICAgICAgICBUb2RvOiBsaW5lIG51bWJlcnMgYXJlIHBhaW50
ZWQgJ3VuZGVyJyB0aGUgdGV4dCB3aGVuIHNjcm9sbGluZworICAgICAgICBob3Jpem9udGFsbHks
IGNvbmRpdGlvbmFsIGJyZWFrcG9pbnRzIHBvcHVwIGFuZCBtZXNzYWdlIGJ1YmJsZXMKKyAgICAg
ICAgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MzkxCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9EaXZCYXNlZFRleHRWaWV3ZXIuanM6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGl2
QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fdGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX2NyZWF0ZUxpbmVEaXZzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIucHJvdG90eXBlLl91cGRhdGVQ
cmVmZXJyZWRTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIu
cHJvdG90eXBlLl9zY3JvbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZp
ZXdlci5wcm90b3R5cGUuX3JlZ2lzdGVyTW91c2VMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0
ZW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5
cGUuX3JlZ2lzdGVyQ2xpcGJvYXJkTGlzdGVuZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
aXZCYXNlZFRleHRWaWV3ZXIucHJvdG90eXBlLl9wYWludFNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fcG9zaXRpb25EaXZEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNlZFRleHRWaWV3ZXIucHJvdG90
eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdl
ci5wcm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EaXZCYXNl
ZFRleHRWaWV3ZXIucHJvdG90eXBlLl9jYXJldEZvck1vdXNlRXZlbnQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlwZS5fY3JlYXRlU3Bh
bik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5jbGVhck1lc3NhZ2VzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2l6ZVRvRml0Q29udGVudEhlaWdodCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVFZGl0b3JJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9h
ZGRNZXNzYWdlVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5yZXNpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zZXREaXZEZWNvcmF0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcmVnaXN0ZXJNb3VzZUxpc3RlbmVy
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3JlZ2lzdGVy
S2V5Ym9hcmRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJv
dG90eXBlLl9yZWdpc3RlckNsaXBib2FyZExpc3RlbmVycyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmV2ZWFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yLnByb3RvdHlwZS5fdGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlUHJlZmVycmVk
U2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucmVzaXpl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fcGFpbnRMaW5l
c0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5
cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5
cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3Rv
dHlwZS5fY2FyZXRGb3JNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZS5fY2hhbmdlRm9udCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZS5fbGV4KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzOgor
CiAyMDEwLTAxLTI5ICBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zd2FsZC5idWRkZW5oYWdlbkBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDhiZmFj
NTEuLjBiNDVkNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNjg3LDYgKzM2ODcsNyBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvRGl2QmFzZWRUZXh0Vmlld2VyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0RPTUFnZW50LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TVN0b3JhZ2UuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFn
ZUl0ZW1zVmlldy5qcycsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBj
ODNjODc0Li5jN2M3MTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTQyNzQ4LDYgKzQyNzQ4LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERpdkJhc2VkVGV4dFZp
ZXdlci5qcyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTUFnZW50LmpzIg0KIAkJCQkJPg0KIAkJ
CQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RpdkJh
c2VkVGV4dFZpZXdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EaXZCYXNlZFRl
eHRWaWV3ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1YzQ2OQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EaXZCYXNlZFRl
eHRWaWV3ZXIuanMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmll
d2VyID0gZnVuY3Rpb24odGV4dE1vZGVsLCBwbGF0Zm9ybSkKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5jYWxsKHRoaXMsIHRleHRNb2RlbCwgcGxhdGZvcm0pOworICAgIHRoaXMuX3No
ZWV0LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOworICAgIHRoaXMuX3NoZWV0LnRhYkluZGV4ID0g
MDsKKyAgICB0aGlzLl9jYW52YXMuc3R5bGUuekluZGV4ID0gMDsKKyAgICB0aGlzLl9jcmVhdGVM
aW5lRGl2cygpOworfQorCitXZWJJbnNwZWN0b3IuRGl2QmFzZWRUZXh0Vmlld2VyLnByb3RvdHlw
ZSA9IHsKKyAgICAvLyBXZWJJbnNwZWN0b3IuVGV4dE1vZGVsIGxpc3RlbmVyCisgICAgX3RleHRD
aGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpCisg
ICAgeworICAgICAgICB0aGlzLl9jcmVhdGVMaW5lRGl2cygpOworICAgICAgICBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkLmNhbGwodGhpcywgb2xkUmFuZ2Us
IG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUxpbmVE
aXZzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hp
bGQodGhpcy5fc2hlZXQpOworICAgICAgICB0aGlzLl9zaGVldC5yZW1vdmVDaGlsZHJlbigpOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciBsaW5lRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
ZGl2Iik7CisgICAgICAgICAgICBsaW5lRGl2LmNsYXNzTmFtZSA9ICJkaXYtdGV4dC1lZGl0b3It
bGluZSI7CisgICAgICAgICAgICBsaW5lRGl2LnRleHRDb250ZW50ID0gdGhpcy5fdGV4dE1vZGVs
LmxpbmUoaSk7CisgICAgICAgICAgICB0aGlzLl9zaGVldC5hcHBlbmRDaGlsZChsaW5lRGl2KTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fc2hl
ZXQpOworICAgIH0sCisKKyAgICBfdXBkYXRlUHJlZmVycmVkU2l6ZTogZnVuY3Rpb24oc3RhcnRM
aW5lLCBlbmRMaW5lKQorICAgIHsKKyAgICAgICAgLy8gUHJlZmVycmVkIHNpemUgaXMgYXV0b21h
dGljYWxseSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBsaW5lIGRpdnMuCisgICAgICAgIC8vIE9u
bHkgaGFuZGxlIGxpbmUgbnVtYmVycyBoZXJlLgorICAgICAgICAKKyAgICAgICAgdGhpcy5zZXRD
b2FsZXNjaW5nVXBkYXRlKHRydWUpOworICAgICAgICB2YXIgbmV3TGluZU51bWJlckRpZ2l0cyA9
IHRoaXMuX2RlY2ltYWxEaWdpdHModGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpOworICAgICAg
ICB0aGlzLl9saW5lTnVtYmVyV2lkdGggPSAobmV3TGluZU51bWJlckRpZ2l0cyArIDIpICogdGhp
cy5fZGlnaXRXaWR0aDsKKworICAgICAgICB0aGlzLl9zaGVldC5zdHlsZS5wYWRkaW5nTGVmdCA9
IHRoaXMuX3RleHRXaWR0aCArIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCArICJweCI7CisKKyAgICAg
ICAgdGhpcy5fbGluZU51bWJlckRpZ2l0cyA9IG5ld0xpbmVOdW1iZXJEaWdpdHM7CisgICAgICAg
IHRoaXMucmVwYWludEFsbCgpOworCisgICAgICAgIC8vIENoYW5nZXMgdG8gc2l6ZSBjYW4gY2hh
bmdlIHRoZSBjbGllbnQgYXJlYSAoc2Nyb2xsZXJzIGNhbiBhcHBlYXIvZGlzYXBwZWFyKQorICAg
ICAgICB0aGlzLnJlc2l6ZSgpOworICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUoZmFs
c2UpOworICAgIH0sCisKKyAgICBfc2Nyb2xsOiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAg
Ly8gRG8gaW5zdGFudCByZXBhaW50IHNvIHRoYXQgb2Zmc2V0IG9mIGNhbnZhcyB3YXMgaW4gc3lu
YyB3aXRoIHRoZSBzaGVldC4KKyAgICAgICAgdGhpcy5fcmVwYWludE9uU2Nyb2xsKCk7CisgICAg
fSwKKworICAgIF9yZWdpc3Rlck1vdXNlTGlzdGVuZXJzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9tb3Vz
ZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJLZXlib2Fy
ZExpc3RlbmVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gTm9vcCAtIGxldCBicm93
c2VyIHRha2UgY2FyZSBvZiB0aGlzLgorICAgIH0sCisKKyAgICBfcmVnaXN0ZXJDbGlwYm9hcmRM
aXN0ZW5lcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIE5vb3AgLSBsZXQgYnJvd3Nl
ciB0YWtlIGNhcmUgb2YgdGhpcy4KKyAgICB9LAorCisgICAgX3BhaW50U2VsZWN0aW9uOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICAvLyBOb29wIC0gbGV0IGJyb3dzZXIgdGFrZSBjYXJlIG9m
IHRoaXMuCisgICAgfSwKKworICAgIF9wb3NpdGlvbkRpdkRlY29yYXRpb246IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIC8vIERpdiBkZWNvcmF0aW9ucyBoYXZlIGZpeGVkIHBvc2l0aW9ucyBp
biBvdXIgY2FzZS4KKyAgICB9LAorCisgICAgX21vdXNlRG93bjogZnVuY3Rpb24oZSkKKyAgICB7
CisgICAgICAgIGlmIChlLm9mZnNldFggKyBlLnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fbGlu
ZU51bWJlcldpZHRoICYmIHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKGUuYnV0dG9uID09PSAyIHx8ICh0aGlzLl9pc01hYyAmJiBl
LmN0cmxLZXkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBsb2NhdGlvbiA9
IHRoaXMuX2NhcmV0Rm9yTW91c2VFdmVudChlKTsKKyAgICAgICAgdGhpcy5fbGluZU51bWJlckRl
Y29yYXRvci5tb3VzZURvd24obG9jYXRpb24ubGluZSwgZSk7CisgICAgfSwKKworICAgIF9jb250
ZXh0TWVudTogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIC8vIE92ZXJyaWRlIGVkaXRvcidz
IGltcGxlbWVudGF0aW9uIHRvIGFkZCB0aGUgbGluZSdzIG9mZnNldHMuCisgICAgICAgIGlmIChl
Lm9mZnNldFggKyBlLnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fbGluZU51bWJlcldpZHRoICYm
IHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fY2FyZXRGb3JNb3VzZUV2ZW50KGUpOworICAgICAgICB0
aGlzLl9saW5lTnVtYmVyRGVjb3JhdG9yLmNvbnRleHRNZW51KGxvY2F0aW9uLmxpbmUsIGUpOwor
ICAgIH0sCisKKyAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQorICAgIHsKKyAg
ICAgICAgLy8gT3ZlcnJpZGUgZWRpdG9yJ3MgaW1wbGVtZW50YXRpb24gdG8gYWRkIHRoZSBsaW5l
J3Mgb2Zmc2V0cy4KKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9v
ZmZzZXRUb0xpbmUoZS5vZmZzZXRZICsgZS50YXJnZXQub2Zmc2V0VG9wKSAtIDEpOworICAgICAg
ICB2YXIgb2Zmc2V0ID0gZS5vZmZzZXRYICsgZS50YXJnZXQub2Zmc2V0TGVmdCArIHRoaXMuX3Nj
cm9sbExlZnQgLSB0aGlzLl9saW5lTnVtYmVyV2lkdGg7CisgICAgICAgIHJldHVybiB7IGxpbmU6
IGxpbmVOdW1iZXIsIGNvbHVtbjogdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIG9m
ZnNldCkgfTsKKyAgICB9LAorCisgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGluZU51bWJlciwg
bGluZU9mZnNldCkKKyAgICB7CisgICAgICAgIHZhciBkaXZIaWdobGlnaHRlZCA9IHRoaXMuX3Rl
eHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImRpdi1oaWdobGlnaHRlZCIpOworICAg
ICAgICBpZiAoZGl2SGlnaGxpZ2h0ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGhpZ2hsaWdodGVyU3RhdGUgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHRlci1zdGF0ZSIpOworICAgICAgICBpZiAoIWhpZ2hsaWdodGVyU3Rh
dGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9zaGVl
dC5jaGlsZHJlbltsaW5lTnVtYmVyXTsKKyAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OworCisgICAgICAgIHZhciBwbGFpblRleHRTdGFydCA9IC0xOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IGxpbmUubGVuZ3RoOykgeworICAgICAgICAgICAgaWYgKGogPiAxMDAwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGlzIHRvbyBsb25nIC0gZG8gbm90IHdhc3RlIGN5
Y2xlcyBvbiBtaW5pZmllZCBqcyBoaWdobGlnaHRpbmcuCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gaGlnaGxpZ2h0ZXJT
dGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJpYnV0ZXNbal07CisgICAgICAgICAgICBpZiAo
IWF0dHJpYnV0ZSB8fCAhYXR0cmlidXRlLnN0eWxlKSB7CisgICAgICAgICAgICAgICAgaWYgKHBs
YWluVGV4dFN0YXJ0ID09PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQg
PSBqOworICAgICAgICAgICAgICAgIGorKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUuc3Vic3Ry
aW5nKHBsYWluVGV4dFN0YXJ0LCBqKSkpOworICAgICAgICAgICAgICAgICAgICBwbGFpblRleHRT
dGFydCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2NyZWF0ZVNwYW4obGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0
ZS5sZW5ndGgpLCBhdHRyaWJ1dGUudG9rZW5UeXBlKSk7CisgICAgICAgICAgICAgICAgaiArPSBh
dHRyaWJ1dGUubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChw
bGFpblRleHRTdGFydCAhPT0gLTEpCisgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBsaW5l
Lmxlbmd0aCkpKTsKKworICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJkaXYtaGlnaGxpZ2h0ZWQiLCB0cnVlKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZVNw
YW46IGZ1bmN0aW9uKGNvbnRlbnQsIGNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIHZhciBzcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBzcGFuLmNsYXNzTmFt
ZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKKyAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7CisgICAgICAgIHJldHVybiBzcGFuOworICAg
IH0KK30KKworV2ViSW5zcGVjdG9yLkRpdkJhc2VkVGV4dFZpZXdlci5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDg1YWVjZDUuLjE4MzgwNjggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKQEAgLTM4LDcgKzM4LDggQEAgdmFyIFByZWZl
cmVuY2VzID0gewogICAgIHN0eWxlUnVsZXNFeHBhbmRlZFN0YXRlOiB7fSwKICAgICBzaG93TWlz
c2luZ0xvY2FsaXplZFN0cmluZ3M6IGZhbHNlLAogICAgIHNhbXBsaW5nQ1BVUHJvZmlsZXI6IGZh
bHNlLAotICAgIHNob3dDb2xvck5pY2tuYW1lczogdHJ1ZQorICAgIHNob3dDb2xvck5pY2tuYW1l
czogdHJ1ZSwKKyAgICB1c2VDYW52YXNCYXNlZEVkaXRvcjogdHJ1ZQogfQogCiBXZWJJbnNwZWN0
b3IucG9wdWxhdGVGcm9udGVuZFNldHRpbmdzID0gZnVuY3Rpb24oc2V0dGluZ3NTdHJpbmcpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggZmY4MjNjZC4u
N2QwNmI0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZy
YW1lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpA
QCAtMTE0LDEzICsxMTQsMTMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsKICAgICAgICAgdGhpcy5fbWVzc2Fn
ZUJ1YmJsZXMgPSB7fTsKICAgICAgICAgaWYgKHRoaXMuX2VkaXRvcikKLSAgICAgICAgICAgIHRo
aXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5fZWRpdG9y
LnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAgfSwKIAogICAgIHNpemVUb0Zp
dENvbnRlbnRIZWlnaHQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9lZGl0
b3IpCi0gICAgICAgICAgICB0aGlzLl9lZGl0b3IucGFja0FuZFJlcGFpbnRBbGwoKTsKKyAgICAg
ICAgICAgIHRoaXMuX2VkaXRvci5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOwogICAg
IH0sCiAKICAgICBzZXRDb250ZW50OiBmdW5jdGlvbihtaW1lVHlwZSwgY29udGVudCkKQEAgLTEz
Niw3ICsxMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIXRoaXMuX3Zpc2libGUgfHwgIXRoaXMuX2xvYWRlZCB8fCB0aGlzLl9lZGl0b3Ip
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhpcy5fZWRpdG9yID0gbmV3IFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yKHRoaXMuX3RleHRNb2RlbCwgV2ViSW5zcGVjdG9yLnBsYXRmb3Jt
KTsKKyAgICAgICAgdmFyIGVkaXRvckNvbnN0cnVjdG9yID0gUHJlZmVyZW5jZXMudXNlQ2FudmFz
QmFzZWRFZGl0b3IgPyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA6IFdlYkluc3BlY3Rvci5EaXZC
YXNlZFRleHRWaWV3ZXI7CisgICAgICAgIHRoaXMuX2VkaXRvciA9IG5ldyBlZGl0b3JDb25zdHJ1
Y3Rvcih0aGlzLl90ZXh0TW9kZWwsIFdlYkluc3BlY3Rvci5wbGF0Zm9ybSk7CiAgICAgICAgIHRo
aXMuX2VkaXRvci5saW5lTnVtYmVyRGVjb3JhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TGluZU51bWJlckRlY29yYXRvcih0aGlzLCB0aGlzLl9lZGl0b3IudGV4dE1vZGVsKTsKICAg
ICAgICAgdGhpcy5fZWRpdG9yLmxpbmVEZWNvcmF0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1
dGlvbkxpbmVEZWNvcmF0b3IodGhpcyk7CiAgICAgICAgIHRoaXMuX2VkaXRvci5yZWFkT25seSA9
IHRydWU7CkBAIC0xNTAsOCArMTUxLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlKCk7
CiAKICAgICAgICAgdGhpcy5fZWRpdG9yLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7Ci0gICAg
ICAgIHRoaXMuX2VkaXRvci51cGRhdGVDYW52YXNTaXplKCk7Ci0gICAgICAgIHRoaXMuX2VkaXRv
ci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICB0aGlzLl9lZGl0b3IucmVzaXplKCk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvci5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOwogCiAg
ICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lKQogICAgICAgICAgICAgdGhpcy5yZXZlYWxM
aW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmUpOwpAQCAtMjcyLDcgKzI3Myw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cm93TWVzc2FnZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChyb3dNZXNzYWdlc1tp
XS5pc0VxdWFsKG1zZywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRN
ZXNzYWdlUmVwZWF0Q291bnQocm93TWVzc2FnZXNbaV0sIG1zZy5yZXBlYXREZWx0YSk7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5fZWRpdG9yLnBhY2tBbmRSZXBhaW50QWxsKCk7CisgICAgICAgICAg
ICAgICAgdGhpcy5fZWRpdG9yLnJldmFsaWRhdGVEZWNvcmF0aW9uc0FuZFBhaW50KCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDQsNyAr
MzA1LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICBtc2cuX3Jlc291cmNlTWVzc2FnZUxpbmVFbGVtZW50ID0gbWVzc2FnZUxpbmVFbGVtZW50Owog
Ci0gICAgICAgIHRoaXMuX2VkaXRvci5wYWNrQW5kUmVwYWludEFsbCgpOworICAgICAgICB0aGlz
Ll9lZGl0b3IucmV2YWxpZGF0ZURlY29yYXRpb25zQW5kUGFpbnQoKTsKICAgICB9LAogCiAgICAg
X2FkZEV4aXN0aW5nQnJlYWtwb2ludHNUb1NvdXJjZTogZnVuY3Rpb24oKQpAQCAtNDYxLDcgKzQ2
Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgcmVzaXpl
OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZWRpdG9yKQotICAgICAgICAg
ICAgdGhpcy5fZWRpdG9yLnVwZGF0ZUNhbnZhc1NpemUoKTsKKyAgICAgICAgICAgIHRoaXMuX2Vk
aXRvci5yZXNpemUoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRFZGl0b3IuanMKaW5kZXggNTU1NDM2NS4uZDIzMDU4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRFZGl0b3IuanMKQEAgLTM2LDcgKzM2LDYgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IgPSBmdW5jdGlvbih0ZXh0TW9kZWwsIHBsYXRmb3JtKQogCiAgICAgdGhpcy5lbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTmFtZSA9ICJ0ZXh0LWVkaXRvciI7Ci0gICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0gMDsK
IAogICAgIHRoaXMuX2NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwog
ICAgIHRoaXMuX2NhbnZhcy5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY2FudmFzIjsKQEAgLTQ0
LDEwICs0MywxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHRleHRNb2Rl
bCwgcGxhdGZvcm0pCiAKICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gInRleHQtZWRpdG9y
LWNvbnRhaW5lciI7CisgICAgdGhpcy5fY29udGFpbmVyLnRhYkluZGV4ID0gMDsKICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKIAogICAgIHRoaXMuX3NoZWV0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5fc2hlZXQuY2xhc3NO
YW1lID0gInRleHQtZWRpdG9yLXNoZWV0IjsKICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hp
bGQodGhpcy5fc2hlZXQpOwogCiAgICAgdmFyIGN1cnNvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKQEAgLTU2LDIwICs1NSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvciA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgcGxhdGZvcm0pCiAgICAgdGhpcy5fY3Vyc29yID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0Q3Vyc29yKGN1cnNvckVsZW1lbnQpOwogCiAgICAgdGhpcy5f
Y29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIs
IHRoaXMuX21vdXNlVXAuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3NoZWV0LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bi5iaW5kKHRoaXMpLCBmYWxz
ZSk7Ci0gICAgdGhpcy5fc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5f
bW91c2VNb3ZlLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9zaGVldC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX21vdXNlT3V0LmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJkYmxjbGljayIsIHRoaXMuX2RibENsaWNr
LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJj
b250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2tleURvd24uYmlu
ZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0
SW5wdXQiLCB0aGlzLl90ZXh0SW5wdXQuYmluZCh0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVjb3B5IiwgdGhpcy5fYmVmb3JlQ29weS5iaW5k
KHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvcHki
LCB0aGlzLl9jb3B5LmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhpcy5fY3V0LmJp
bmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVm
b3JlcGFzdGUiLCB0aGlzLl9iZWZvcmVQYXN0ZS5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBhc3RlIiwgdGhpcy5fcGFzdGUuYmluZCh0aGlz
KSwgZmFsc2UpOworCisgICAgdGhpcy5fcmVnaXN0ZXJNb3VzZUxpc3RlbmVycygpOworICAgIHRo
aXMuX3JlZ2lzdGVyS2V5Ym9hcmRMaXN0ZW5lcnMoKTsKKyAgICB0aGlzLl9yZWdpc3RlckNsaXBi
b2FyZExpc3RlbmVycygpOwogCiAgICAgdGhpcy5fZGVzaXJlZENhcmV0Q29sdW1uID0gMDsKICAg
ICB0aGlzLl9zY3JvbGxMZWZ0ID0gMDsKQEAgLTE2MCw3ICsxNTAsMzIgQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNl
dEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiZGl2LWRlY29yYXRpb24iLCBkaXZEZWNvcmF0aW9uKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHRoaXMucGFja0FuZFJlcGFpbnRBbGwoKTsKKyAgICAgICAg
dGhpcy5yZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWludCgpOworICAgIH0sCisKKyAgICBfcmVn
aXN0ZXJNb3VzZUxpc3RlbmVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hl
ZXQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuX21vdXNlVXAuYmluZCh0aGlzKSwg
ZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24i
LCB0aGlzLl9tb3VzZURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVl
dC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlz
KSwgZmFsc2UpOworICAgICAgICB0aGlzLl9zaGVldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91
dCIsIHRoaXMuX21vdXNlT3V0LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAgICAgdGhpcy5fc2hl
ZXQuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLCB0aGlzLl9kYmxDbGljay5iaW5kKHRoaXMp
LCBmYWxzZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlcktleWJvYXJkTGlzdGVuZXJzOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIHRoaXMuX2tleURvd24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlz
Ll9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5fdGV4dElucHV0
LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyQ2xpcGJvYXJkTGlz
dGVuZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZl
bnRMaXN0ZW5lcigiYmVmb3JlY29weSIsIHRoaXMuX2JlZm9yZUNvcHkuYmluZCh0aGlzKSwgZmFs
c2UpOworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29weSIsIHRo
aXMuX2NvcHkuYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLl9jb250YWluZXIuYWRk
RXZlbnRMaXN0ZW5lcigiYmVmb3JlY3V0IiwgdGhpcy5fYmVmb3JlQ3V0LmJpbmQodGhpcyksIGZh
bHNlKTsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRo
aXMuX2N1dC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRF
dmVudExpc3RlbmVyKCJiZWZvcmVwYXN0ZSIsIHRoaXMuX2JlZm9yZVBhc3RlLmJpbmQodGhpcyks
IGZhbHNlKTsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInBhc3Rl
IiwgdGhpcy5fcGFzdGUuYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIH0sCiAKICAgICBfb2Zmc2V0
VG9MaW5lOiBmdW5jdGlvbihvZmZzZXQpCkBAIC0yMTEsNyArMjI2LDggQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fdGV4dExpbmVI
ZWlnaHQ7CiAgICAgfSwKIAotICAgIHJldmVhbDogZnVuY3Rpb24obGluZSwgY29sdW1uKSB7Cisg
ICAgcmV2ZWFsOiBmdW5jdGlvbihsaW5lLCBjb2x1bW4pCisgICAgewogICAgICAgICB2YXIgbWF4
U2Nyb2xsVG9wID0gdGhpcy5fbGluZVRvT2Zmc2V0KGxpbmUpOwogICAgICAgICB2YXIgbWluU2Ny
b2xsVG9wID0gbWF4U2Nyb2xsVG9wICsgdGhpcy5fbGluZUhlaWdodChsaW5lKSAtIHRoaXMuX2Nh
bnZhcy5oZWlnaHQ7CiAgICAgICAgIGlmICh0aGlzLl9zY3JvbGxUb3AgPiBtYXhTY3JvbGxUb3Ap
CkBAIC0yNDIsNyArMjU4LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KG5ld1Jhbmdl
LnN0YXJ0TGluZSwgbGFzdFZpc2libGVMaW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMu
X3VwZGF0ZVNpemUobmV3UmFuZ2Uuc3RhcnRMaW5lLCBNYXRoLm1heChuZXdSYW5nZS5lbmRMaW5l
LCBvbGRSYW5nZS5lbmRMaW5lKSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVByZWZlcnJlZFNpemUo
bmV3UmFuZ2Uuc3RhcnRMaW5lLCBNYXRoLm1heChuZXdSYW5nZS5lbmRMaW5lLCBvbGRSYW5nZS5l
bmRMaW5lKSk7CiAgICAgICAgIGlmIChvbGRSYW5nZS5saW5lc0NvdW50ICE9PSBuZXdSYW5nZS5s
aW5lc0NvdW50KSB7CiAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIG9mZnNldCBjYWNoZS4KICAg
ICAgICAgICAgIHRoaXMuX2xpbmVPZmZzZXRzQ2FjaGUubGVuZ3RoID0gb2xkUmFuZ2Uuc3RhcnRM
aW5lICsgMTsKQEAgLTI3NSwxNiArMjkxLDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fcGFpbnQoKTsKICAgICB9LAogCi0gICAgcGFja0Fu
ZFJlcGFpbnRBbGw6IGZ1bmN0aW9uKCkKKyAgICByZXZhbGlkYXRlRGVjb3JhdGlvbnNBbmRQYWlu
dDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5zZXRDb2FsZXNjaW5nVXBkYXRlKHRy
dWUpOwogICAgICAgICB0aGlzLl9saW5lT2Zmc2V0c0NhY2hlID0gWzBdOwotICAgICAgICB0aGlz
Ll91cGRhdGVTaXplKDAsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlUHJlZmVycmVkU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7CiAg
ICAgICAgIHRoaXMucmVwYWludEFsbCgpOwogICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRh
dGUoZmFsc2UpOwogICAgIH0sCiAKLSAgICBfdXBkYXRlU2l6ZTogZnVuY3Rpb24oc3RhcnRMaW5l
LCBlbmRMaW5lKQorICAgIF91cGRhdGVQcmVmZXJyZWRTaXplOiBmdW5jdGlvbihzdGFydExpbmUs
IGVuZExpbmUpCiAgICAgewogICAgICAgICB0aGlzLnNldENvYWxlc2NpbmdVcGRhdGUodHJ1ZSk7
CiAgICAgICAgIHZhciBndWFyZGVkRW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5s
aW5lc0NvdW50LCBlbmRMaW5lICsgMSk7CkBAIC0zMjQsMTEgKzM0MCwxMSBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGFu
Z2VzIHRvIHNpemUgY2FuIGNoYW5nZSB0aGUgY2xpZW50IGFyZWEgKHNjcm9sbGVycyBjYW4gYXBw
ZWFyL2Rpc2FwcGVhcikKLSAgICAgICAgdGhpcy51cGRhdGVDYW52YXNTaXplKCk7CisgICAgICAg
IHRoaXMucmVzaXplKCk7CiAgICAgICAgIHRoaXMuc2V0Q29hbGVzY2luZ1VwZGF0ZShmYWxzZSk7
CiAgICAgfSwKIAotICAgIHVwZGF0ZUNhbnZhc1NpemU6IGZ1bmN0aW9uKCkKKyAgICByZXNpemU6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jYW52YXMud2lkdGggIT09IHRo
aXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aCB8fCB0aGlzLl9jYW52YXMuaGVpZ2h0ICE9PSB0aGlz
Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0KSB7CiAgICAgICAgICAgICB0aGlzLl9jYW52YXMud2lk
dGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGg7CkBAIC00MjYsNyArNDQyLDYgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKICAgICAgICAgfQogICAgICAgICBmb3IgKHZhciBp
ID0gZmlyc3RMaW5lOyBpIDwgbGFzdExpbmU7ICsraSkgewotICAgICAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0g
dGhpcy5fbGluZVRvT2Zmc2V0KGkpIC0gdGhpcy5fc2Nyb2xsVG9wOwogCiAgICAgICAgICAgICBp
ZiAodGhpcy5fbGluZURlY29yYXRvcikKQEAgLTQzNiw0OCArNDUxLDU0IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChkaXZEZWNvcmF0aW9u
KQogICAgICAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGl2RGVjb3JhdGlvbihpLCBkaXZEZWNv
cmF0aW9uLCB0cnVlKTsKIAotICAgICAgICAgICAgaWYgKCF0aGlzLl9oaWdobGlnaHRpbmdFbmFi
bGVkKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMCwwLDAp
IjsKLSAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQobGluZSwgdGhpcy5fbGluZU51
bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCwgbGluZU9mZnNldCArIHRoaXMuX3RleHRMaW5l
SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShpLCBsaW5lT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9jdHgucmVzdG9yZSgpOworICAgIH0sCisKKyAgICBfcGFpbnRMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBsaW5lT2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGxpbmUgPSB0aGlz
Ll90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKCF0aGlzLl9oaWdobGln
aHRpbmdFbmFibGVkKSB7CisgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gInJnYigw
LDAsMCkiOworICAgICAgICAgICAgdGhpcy5fY3R4LmZpbGxUZXh0KGxpbmUsIHRoaXMuX2xpbmVO
dW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExlZnQsIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGlu
ZUhlaWdodCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGxpbmUubGVuZ3RoID4gMTAwMCkgewotICAgICAgICAgICAgICAgIC8vIE9wdGltaXphdGlv
bjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZpc2libGUgYXJlYS4KLSAg
ICAgICAgICAgICAgICB2YXIgZmlyc3RDb2x1bW4gPSB0aGlzLl9jb2x1bW5Gb3JPZmZzZXQoaSwg
dGhpcy5fc2Nyb2xsTGVmdCk7Ci0gICAgICAgICAgICAgICAgdmFyIGxhc3RDb2x1bW4gPSB0aGlz
Ll9jb2x1bW5Gb3JPZmZzZXQoaSwgdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2NhbnZhcy53aWR0
aCk7CisgICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDEwMDApIHsKKyAgICAgICAgICAgIC8vIE9w
dGltaXphdGlvbjogbm8gbmVlZCB0byBwYWludCBkZWNvcmF0aW9ucyBvdXRzaWRlIHZpc2libGUg
YXJlYS4KKyAgICAgICAgICAgIHZhciBmaXJzdENvbHVtbiA9IHRoaXMuX2NvbHVtbkZvck9mZnNl
dChsaW5lTnVtYmVyLCB0aGlzLl9zY3JvbGxMZWZ0KTsKKyAgICAgICAgICAgIHZhciBsYXN0Q29s
dW1uID0gdGhpcy5fY29sdW1uRm9yT2Zmc2V0KGxpbmVOdW1iZXIsIHRoaXMuX3Njcm9sbExlZnQg
KyB0aGlzLl9jYW52YXMud2lkdGgpOworICAgICAgICB9CisgICAgICAgIHZhciBoaWdobGlnaHRl
clN0YXRlID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxp
Z2h0ZXItc3RhdGUiKTsKKyAgICAgICAgdmFyIHBsYWluVGV4dFN0YXJ0ID0gLTE7CisgICAgICAg
IGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7KSB7CisgICAgICAgICAgICB2YXIgYXR0
cmlidXRlID0gaGlnaGxpZ2h0ZXJTdGF0ZSAmJiBoaWdobGlnaHRlclN0YXRlLmF0dHJpYnV0ZXNb
al07CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlICYmIGZpcnN0Q29sdW1uICYmIGogKyBhdHRy
aWJ1dGUubGVuZ3RoIDwgZmlyc3RDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBqICs9IGF0dHJp
YnV0ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB2YXIgaGlnaGxpZ2h0ZXJTdGF0ZSA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRy
aWJ1dGUoaSwgImhpZ2hsaWdodGVyLXN0YXRlIik7Ci0gICAgICAgICAgICB2YXIgcGxhaW5UZXh0
U3RhcnQgPSAtMTsKLSAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IGhpZ2hsaWdodGVyU3RhdGUgJiYg
aGlnaGxpZ2h0ZXJTdGF0ZS5hdHRyaWJ1dGVzW2pdOwotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGUgJiYgZmlyc3RDb2x1bW4gJiYgaiArIGF0dHJpYnV0ZS5sZW5ndGggPCBmaXJzdENvbHVt
bikgewotICAgICAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5ndGg7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlICYmIGxhc3RDb2x1bW4gJiYgaiA+IGxhc3RDb2x1bW4pCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFh
dHRyaWJ1dGUuc3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0
ID09PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dFN0YXJ0ID0gajsKLSAg
ICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwbGFpblRleHRTdGFydCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcocGxhaW5UZXh0
U3RhcnQsIGopLCB0aGlzLl9saW5lTnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhp
cy5fY29sdW1uVG9PZmZzZXQoaSwgcGxhaW5UZXh0U3RhcnQpLCBsaW5lT2Zmc2V0ICsgdGhpcy5f
dGV4dExpbmVIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5UZXh0U3RhcnQg
PSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9j
dHguZmlsbFN0eWxlID0gYXR0cmlidXRlLnN0eWxlOwotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9jdHguZmlsbFRleHQobGluZS5zdWJzdHJpbmcoaiwgaiArIGF0dHJpYnV0ZS5sZW5ndGgpLCB0
aGlzLl9saW5lTnVtYmVyV2lkdGggLSB0aGlzLl9zY3JvbGxMZWZ0ICsgdGhpcy5fY29sdW1uVG9P
ZmZzZXQoaSwgaiksIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGogKz0gYXR0cmlidXRlLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGUgJiYgbGFzdENvbHVtbiAmJiBqID4gbGFzdENvbHVtbikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGlmICghYXR0cmlidXRlIHx8ICFhdHRyaWJ1dGUuc3R5bGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgPT09IC0xKQorICAgICAgICAgICAg
ICAgICAgICBwbGFpblRleHRTdGFydCA9IGo7CisgICAgICAgICAgICAgICAgaisrOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0U3RhcnQgIT09IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCww
KSI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmlu
ZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9s
bExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBwbGFpblRleHRTdGFydCks
IGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7CisgICAgICAgICAgICAgICAgICAg
IHBsYWluVGV4dFN0YXJ0ID0gLTE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgewotICAgICAgICAgICAgICAg
IHRoaXMuX2N0eC5maWxsU3R5bGUgPSAicmdiKDAsMCwwKSI7Ci0gICAgICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxUZXh0KGxpbmUuc3Vic3RyaW5nKHBsYWluVGV4dFN0YXJ0LCBqKSwgdGhpcy5f
bGluZU51bWJlcldpZHRoIC0gdGhpcy5fc2Nyb2xsTGVmdCArIHRoaXMuX2NvbHVtblRvT2Zmc2V0
KGksIHBsYWluVGV4dFN0YXJ0KSwgbGluZU9mZnNldCArIHRoaXMuX3RleHRMaW5lSGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICB0aGlzLl9jdHguZmlsbFN0eWxlID0gYXR0cmlidXRlLnN0eWxlOwor
ICAgICAgICAgICAgICAgIHRoaXMuX2N0eC5maWxsVGV4dChsaW5lLnN1YnN0cmluZyhqLCBqICsg
YXR0cmlidXRlLmxlbmd0aCksIHRoaXMuX2xpbmVOdW1iZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExl
ZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVtYmVyLCBqKSwgbGluZU9mZnNldCArIHRo
aXMuX3RleHRMaW5lSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBqICs9IGF0dHJpYnV0ZS5sZW5n
dGg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fY3R4LnJlc3RvcmUo
KTsKKyAgICAgICAgaWYgKHBsYWluVGV4dFN0YXJ0ICE9PSAtMSkgeworICAgICAgICAgICAgdGhp
cy5fY3R4LmZpbGxTdHlsZSA9ICJyZ2IoMCwwLDApIjsKKyAgICAgICAgICAgIHRoaXMuX2N0eC5m
aWxsVGV4dChsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgaiksIHRoaXMuX2xpbmVOdW1i
ZXJXaWR0aCAtIHRoaXMuX3Njcm9sbExlZnQgKyB0aGlzLl9jb2x1bW5Ub09mZnNldChsaW5lTnVt
YmVyLCBwbGFpblRleHRTdGFydCksIGxpbmVPZmZzZXQgKyB0aGlzLl90ZXh0TGluZUhlaWdodCk7
CisgICAgICAgIH0KICAgICB9LAogCiAgICAgcGFpbnRMaW5lTnVtYmVyczogZnVuY3Rpb24oKQpA
QCAtNTczLDcgKzU5NCw2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgICAgIGlmIChlLm9mZnNldFggPCB0aGlzLl9saW5lTnVtYmVyV2lkdGggJiYg
dGhpcy5fbGluZU51bWJlckRlY29yYXRvcikgewogICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0g
dGhpcy5fY2FyZXRGb3JNb3VzZUV2ZW50KGUpOwotICAgICAgICAgICAgdmFyIGxpbmUgPSBsb2Nh
dGlvbi5saW5lOwogICAgICAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJEZWNvcmF0b3IuY29u
dGV4dE1lbnUobG9jYXRpb24ubGluZSwgZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IGVsc2UgewpAQCAtNTkwLDcgKzYxMCw2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICBfY2FyZXRGb3JNb3VzZUV2ZW50OiBmdW5jdGlvbihlKQogICAg
IHsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBNYXRoLm1heCgwLCB0aGlzLl9vZmZzZXRUb0xp
bmUoZS5vZmZzZXRZKSAtIDEpOwotICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIpOwogICAgICAgICB2YXIgb2Zmc2V0ID0gZS5vZmZzZXRYICsgdGhpcy5f
c2Nyb2xsTGVmdCAtIHRoaXMuX2xpbmVOdW1iZXJXaWR0aDsKICAgICAgICAgcmV0dXJuIHsgbGlu
ZTogbGluZU51bWJlciwgY29sdW1uOiB0aGlzLl9jb2x1bW5Gb3JPZmZzZXQobGluZU51bWJlciwg
b2Zmc2V0KSB9OwogICAgIH0sCkBAIC0xMDcyLDcgKzEwOTEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICBfY2hhbmdlRm9udDogZnVuY3Rpb24oc2Fuc1Nl
cmlmLCBmb250U2l6ZSkgewogICAgICAgICB0aGlzLl9pbml0Rm9udChzYW5zU2VyaWYsIGZvbnRT
aXplKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlU2l6ZSgwLCB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVByZWZlcnJlZFNpemUoMCwgdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQpOwogICAgICAgICB0aGlzLnJlcGFpbnRBbGwoKTsKICAgICB9LAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdo
dGVyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRFZGl0b3JIaWdobGlnaHRl
ci5qcwppbmRleCA4MDk3MzAyLi45YTdhMDUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0RWRpdG9ySGlnaGxpZ2h0ZXIuanMKQEAgLTE4OCw3ICsxODgsNyBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICB2YXIgbmV3Q29sdW1uID0gdGhpcy5fdG9rZW5pemVyLm5leHRUb2tlbihjb2x1bW4p
OwogICAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLl90b2tlbml6ZXIudG9rZW5UeXBl
OwogICAgICAgICAgICAgIGlmICh0b2tlblR5cGUpCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZXNbY29sdW1uXSA9IHsgbGVuZ3RoOiBuZXdDb2x1bW4gLSBjb2x1bW4sIHN0eWxlOiB0aGlzLl9z
dHlsZXNbdG9rZW5UeXBlXSB9OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW2NvbHVtbl0g
PSB7IGxlbmd0aDogbmV3Q29sdW1uIC0gY29sdW1uLCB0b2tlblR5cGU6IHRva2VuVHlwZSwgc3R5
bGU6IHRoaXMuX3N0eWxlc1t0b2tlblR5cGVdIH07CiAgICAgICAgICAgICAgY29sdW1uID0gbmV3
Q29sdW1uOwogICAgICAgICAgfSB3aGlsZSAoY29sdW1uIDwgbGluZS5sZW5ndGgpCiAgICAgfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCAxZDM3ZDM2Li5hZjE1ZGQ2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtMjAsNiArMjAsNyBA
QAogICAgIDxmaWxlPkRhdGFiYXNlUXVlcnlWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFi
YXNlVGFibGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgorICAg
IDxmaWxlPkRpdkJhc2VkVGV4dFZpZXdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01BZ2VudC5q
czwvZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTVN0
b3JhZ2VJdGVtc1ZpZXcuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWwKaW5kZXggMWUyMDgyYy4uODA4NzdkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtOTcsNiArOTcsNyBAQCBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JNb2RlbC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVGV4dEVk
aXRvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iVGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJEaXZCYXNlZFRleHRWaWV3ZXIuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZVRva2VuaXplci5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291
cmNlQ1NTVG9rZW5pemVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTb3VyY2VIVE1MVG9rZW5pemVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC90ZXh0RWRpdG9yLmNzcwppbmRleCA1ZWJmZTVmLi42M2Q2NGFk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdGV4dEVkaXRvci5jc3MK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RleHRFZGl0b3IuY3NzCkBAIC00NCw2
ICs0NCwxMSBAQAogICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogfQogCisuZGl2LXRleHQtZWRp
dG9yLWxpbmUgeworICAgIGhlaWdodDogMTRweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQor
CiAud2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUgewogICAgIC13ZWJraXQtYm94LXNoYWRvdzog
YmxhY2sgMHB4IDJweCA1cHg7CiAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA5cHg7Cg==
</data>
<flag name="review"
          id="30329"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>