<?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>138346</bug_id>
          
          <creation_ts>2014-11-03 19:55:43 -0800</creation_ts>
          <short_desc>Simple line layout: Abstract out content iteration and text handling in general.</short_desc>
          <delta_ts>2014-11-04 19:47:44 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045963</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-11-03 19:55:43 -0800</bug_when>
    <thetext>This is in preparation to support multiple render elements in simple line layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045967</commentid>
    <comment_count>1</comment_count>
      <attachid>240904</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-03 20:10:11 -0800</bug_when>
    <thetext>Created attachment 240904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045969</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-11-03 20:14:57 -0800</bug_when>
    <thetext>I am not too happy about the RenderFlowContentIterator name. The class does a lot more than just iterating.
Alternatively we could move some of the (non-iterating)class functions back to static inline and pass the RenderFlowContentIterator object around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046054</commentid>
    <comment_count>3</comment_count>
      <attachid>240904</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-04 06:03:59 -0800</bug_when>
    <thetext>Comment on attachment 240904
Patch

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

Looks like right direction.

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:216
&gt; +template &lt;typename CharacterType&gt; class RenderFlowContentIterator {

I think we usually put template arguments to a line of their own for classes.

ContentIterator? FlowIterator? 

Actually this class doesn&apos;t really feel like an iterator at all. If I understand correctly it doesn&apos;t hold the current position and doesn&apos;t change state during traversal. Maybe it should? Or maybe it should just be named differently (FlowContents or similar perhaps)?

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:225
&gt; +    unsigned findNextBreakablePosition(unsigned position)

I think this is logically const too though LazyLineBreakIterator interface currently requires non-const call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046056</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-04 06:07:02 -0800</bug_when>
    <thetext>LazyLineBreakIterator itself is poorly named. It looks more like a sort of iterator cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046215</commentid>
    <comment_count>5</comment_count>
      <attachid>240960</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-04 15:22:50 -0800</bug_when>
    <thetext>Created attachment 240960
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046232</commentid>
    <comment_count>6</comment_count>
      <attachid>240960</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-04 15:41:47 -0800</bug_when>
    <thetext>Comment on attachment 240960
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:444
&gt; +    const Style&amp; style = contentIterator.style();

Could use auto&amp;

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:551
&gt; +    const Style style = contentIterator.style();

This can be reference: auto&amp;

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:678
&gt; +    FlowContentIterator&lt;CharacterType&gt; contentIterator = FlowContentIterator&lt;CharacterType&gt;(flow);

This could use auto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046233</commentid>
    <comment_count>7</comment_count>
      <attachid>240960</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-04 15:44:32 -0800</bug_when>
    <thetext>Comment on attachment 240960
Patch

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

&gt;&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:678
&gt;&gt; +    FlowContentIterator&lt;CharacterType&gt; contentIterator = FlowContentIterator&lt;CharacterType&gt;(flow);
&gt; 
&gt; This could use auto

Actually this could just be FlowContentIterator&lt;CharacterType&gt; contentIterator(flow)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046246</commentid>
    <comment_count>8</comment_count>
      <attachid>240974</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-04 16:03:52 -0800</bug_when>
    <thetext>Created attachment 240974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046355</commentid>
    <comment_count>9</comment_count>
      <attachid>240974</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-04 19:47:40 -0800</bug_when>
    <thetext>Comment on attachment 240974
Patch

Clearing flags on attachment: 240974

Committed r175601: &lt;http://trac.webkit.org/changeset/175601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046356</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-04 19:47:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240904</attachid>
            <date>2014-11-03 20:10:11 -0800</date>
            <delta_ts>2014-11-04 15:22:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>19447</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwOWE3MjZiLi5iNzYwMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTQtMTEtMDMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAg
ICBTaW1wbGUgbGluZSBsYXlvdXQ6IEFic3RyYWN0IG91dCBjb250ZW50IGl0ZXJhdGlvbiBhbmQg
dGV4dCBoYW5kbGluZyBpbiBnZW5lcmFsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgY2xhc3MgdGhhdCBjYW4gYWN0IGFzIHRoZSBwcmltYXJ5
IGl0ZXJhdG9yL2ZyYWdtZW50IGhhbmRsaW5nIGludGVyZmFjZSB0byB0aGUgbGluZSBwYXJzZXIu
CisgICAgICAgIFRoaXMgaGVscHMgYWRkaW5nIHN1cHBvcnQgbXVsdGlwbGUgcmVuZGVyZXIgZWxl
bWVudHMgd2l0aG91dCBjaGFuZ2luZyB0aGUgcGFyc2VyIGxvZ2ljLiAgIAorCisgICAgICAgIENv
dmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSZW5kZXJG
bG93Q29udGVudEl0ZXJhdG9yOjpSZW5kZXJGbG93Q29udGVudEl0ZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJlbmRlckZsb3dDb250ZW50SXRlcmF0b3I6OmZp
bmROZXh0QnJlYWthYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6UmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjo6ZmluZE5leHROb25XaGl0ZXNwYWNlUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UmVuZGVyRmxvd0Nv
bnRlbnRJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJlbmRlckZsb3dDb250ZW50SXRlcmF0b3I6OmlzTmV3bGluZUNoYXJhY3Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSZW5kZXJGbG93Q29udGVudEl0ZXJh
dG9yOjplbmRPZkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
UmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjo6c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6Y29tcHV0ZUxpbmVMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0Ojppbml0aWFsaXplTmV3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdtZW50VG9GaXRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6Om5leHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGVMaW5lUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVMaW5lTGF5b3V0OjpjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZVRleHRSdW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0Ojpza2lwV2hpdGVzcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0Ojp0ZXh0V2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6aW5pdGlhbGl6ZUxpbmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6dXBkYXRlTGluZUNvbnN0cmFpbnMpOiBEZWxldGVk
LgorCiAyMDE0LTEwLTMxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBDbGVhbnVwIGxpbmUgaW5pdGlhbGl6YXRpb24gYW5kIGxp
bmUgY2xvc2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
LmNwcAppbmRleCA3ZTE1YzhjLi42MzA0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC0yMTMsMzUgKzIxMyw3MyBAQCBzdHJ1Y3QgU3R5
bGUgewogICAgIHVuc2lnbmVkIHRhYldpZHRoOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNraXBXaGl0ZXNwYWNlKGNvbnN0
IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBi
b29sIHByZXNlcnZlTmV3bGluZSwgdW5zaWduZWQmIHNwYWNlQ291bnQpCi17Ci0gICAgc3BhY2VD
b3VudCA9IDA7Ci0gICAgZm9yICg7IG9mZnNldCA8IGxlbmd0aDsgKytvZmZzZXQpIHsKLSAgICAg
ICAgYm9vbCBpc1NwYWNlID0gdGV4dFtvZmZzZXRdID09ICcgJzsKLSAgICAgICAgaWYgKCEoaXNT
cGFjZSB8fCB0ZXh0W29mZnNldF0gPT0gJ1x0JyB8fCAoIXByZXNlcnZlTmV3bGluZSAmJiB0ZXh0
W29mZnNldF0gPT0gJ1xuJykpKQotICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKLSAgICAgICAg
aWYgKGlzU3BhY2UpCi0gICAgICAgICAgICArK3NwYWNlQ291bnQ7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4gY2xhc3MgUmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvciB7CitwdWJs
aWM6CisgICAgUmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cm
IGZsb3cpCisgICAgICAgIDogbV9mbG93KGZsb3cpCisgICAgICAgICwgbV9zdHlsZShmbG93LnN0
eWxlKCkpCisgICAgICAgICwgbV9saW5lQnJlYWtJdGVyYXRvcihkb3duY2FzdDxSZW5kZXJUZXh0
PigqZmxvdy5maXJzdENoaWxkKCkpLnRleHQoKSwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQorICAg
IHsKICAgICB9Ci0gICAgcmV0dXJuIGxlbmd0aDsKLX0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+Ci1zdGF0aWMgZmxvYXQgdGV4dFdpZHRoKGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlclRleHQsIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIHRleHRMZW5ndGgs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24sIGNvbnN0IFN0eWxl
JiBzdHlsZSkKLXsKLSAgICBpZiAoc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAoIWZyb20g
JiYgdG8gPT0gdGV4dExlbmd0aCkpCi0gICAgICAgIHJldHVybiByZW5kZXJUZXh0LndpZHRoKGZy
b20sIHRvIC0gZnJvbSwgc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICB1bnNpZ25lZCBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9u
KQorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb248Q2hhcmFjdGVyVHlw
ZSwgZmFsc2U+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0cmluZy5jaGFyYWN0ZXJzPENoYXJhY3Rl
clR5cGU+KCksIHN0cmluZy5sZW5ndGgoKSwgcG9zaXRpb24pOworICAgIH0KIAotICAgIFRleHRS
dW4gcnVuKHRleHQgKyBmcm9tLCB0byAtIGZyb20pOwotICAgIHJ1bi5zZXRYUG9zKHhQb3NpdGlv
bik7Ci0gICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4dExlbmd0aCAtIGZyb20pOwotICAg
IHJ1bi5zZXRUYWJTaXplKCEhc3R5bGUudGFiV2lkdGgsIHN0eWxlLnRhYldpZHRoKTsKKyAgICB1
bnNpZ25lZCBmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkJiBzcGFjZUNvdW50KSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9
IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCA9IHN0
cmluZy5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CisgICAgICAgIHNwYWNlQ291bnQgPSAw
OworICAgICAgICBmb3IgKDsgb2Zmc2V0IDwgbGVuZ3RoOyArK29mZnNldCkgeworICAgICAgICAg
ICAgYm9vbCBpc1NwYWNlID0gdGV4dFtvZmZzZXRdID09ICcgJzsKKyAgICAgICAgICAgIGlmICgh
KGlzU3BhY2UgfHwgdGV4dFtvZmZzZXRdID09ICdcdCcgfHwgKCFtX3N0eWxlLnByZXNlcnZlTmV3
bGluZSAmJiB0ZXh0W29mZnNldF0gPT0gJ1xuJykpKQorICAgICAgICAgICAgICAgIHJldHVybiBv
ZmZzZXQ7CisgICAgICAgICAgICBpZiAoaXNTcGFjZSkKKyAgICAgICAgICAgICAgICArK3NwYWNl
Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CiAKLSAgICBB
U1NFUlQocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOworICAgIGZsb2F0
IHRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBj
b25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0b3Iu
c3RyaW5nKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAoIWZyb20gJiYgdG8gPT0g
bGVuZ3RoKSkgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJUZXh0PigqbV9mbG93LmZpcnN0Q2hpbGQoKSk7CisgICAgICAgICAgICByZXR1
cm4gcmVuZGVyZXIud2lkdGgoZnJvbSwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlv
biwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICBUZXh0UnVuIHJ1bihz
dHJpbmcuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAg
ICAgICAgcnVuLnNldFhQb3MoeFBvc2l0aW9uKTsKKyAgICAgICAgcnVuLnNldENoYXJhY3RlcnNM
ZW5ndGgobGVuZ3RoIC0gZnJvbSk7CisgICAgICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHlsZS50
YWJXaWR0aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVy
c0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBtX3N0eWxlLmZvbnQu
d2lkdGgocnVuKTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3bGluZUNoYXJhY3Rlcih1bnNpZ25l
ZCBwb3NpdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xpbmVCcmVha0l0ZXJh
dG9yLnN0cmluZygpLmxlbmd0aCgpID4gcG9zaXRpb24pOworICAgICAgICByZXR1cm4gbV9saW5l
QnJlYWtJdGVyYXRvci5zdHJpbmcoKS5hdChwb3NpdGlvbikgPT0gJ1xuJzsKKyAgICB9CisKKyAg
ICBib29sIGVuZE9mQ29udGVudCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBwb3NpdGlvbiA+PSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpLmxlbmd0
aCgpOworICAgIH0KKworICAgIGNvbnN0IFN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGU7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fZmxvdzsK
KyAgICBTdHlsZSBtX3N0eWxlOworICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVh
a0l0ZXJhdG9yOworfTsKIAotICAgIHJldHVybiBzdHlsZS5mb250LndpZHRoKHJ1bik7Ci19CiAK
IHN0YXRpYyBmbG9hdCBjb21wdXRlTGluZUxlZnQoRVRleHRBbGlnbiB0ZXh0QWxpZ24sIGZsb2F0
IGF2YWlsYWJsZVdpZHRoLCBmbG9hdCBjb21taXR0ZWRXaWR0aCwgZmxvYXQgbG9naWNhbExlZnRP
ZmZzZXQpCiB7CkBAIC0yNjAsNiArMjk4LDcgQEAgc3RhdGljIGZsb2F0IGNvbXB1dGVMaW5lTGVm
dChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGZsb2F0IGMKICAg
ICBjYXNlIFdFQktJVF9DRU5URVI6CiAgICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8Zmxv
YXQ+KHJlbWFpbmluZ1dpZHRoIC8gMiwgMCk7CiAgICAgY2FzZSBKVVNUSUZZOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMzk3LDggKzQzNiw5IEBAIHN0cnVjdCBMaW5lU3RhdGUgewogfTsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdm9pZCByZW1vdmVU
cmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9y
JiBsaW5lUnVucywgY29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0
LCB1bnNpZ25lZCB0ZXh0TGVuZ3RoKQordm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGlu
ZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgUmVu
ZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yKQog
eworICAgIGNvbnN0IFN0eWxlJiBzdHlsZSA9IGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpOwogICAg
IGJvb2wgcHJlV3JhcCA9IHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNw
YWNlOwogICAgIC8vIFRyYWlsaW5nIHdoaXRlc3BhY2UgZ2V0cyByZW1vdmVkIHdoZW4gd2UgZWl0
aGVyIGNvbGxhcHNlIHdoaXRlc3BhY2Ugb3IgcHJlLXdyYXAgaXMgcHJlc2VudC4KICAgICBpZiAo
IShzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgfHwgcHJlV3JhcCkpIHsKQEAgLTQzNCwxMiArNDc0
LDEyIEBAIHN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxp
bmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpCiAgICAgfQogCiAgICAgLy8gSWYgd2Ugc2tp
cHBlZCBhbnkgd2hpdGVzcGFjZSBhbmQgbm93IHRoZSBsaW5lIGVuZCBpcyBhICJwcmVzZXJ2ZWQi
IG5ld2xpbmUsIHNraXAgdGhlIG5ld2xpbmUgdG9vIGFzIHdlIGFyZSB3cmFwcGluZyB0aGUgbGlu
ZSBoZXJlIGFscmVhZHkuCi0gICAgaWYgKGxhc3RQb3NpdGlvbiAhPSBsaW5lU3RhdGUucG9zaXRp
b24gJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGxpbmVTdGF0ZS5wb3NpdGlvbiA8IHRleHRM
ZW5ndGggJiYgdGV4dFtsaW5lU3RhdGUucG9zaXRpb25dID09ICdcbicpCisgICAgaWYgKGxhc3RQ
b3NpdGlvbiAhPSBsaW5lU3RhdGUucG9zaXRpb24gJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lICYm
IGNvbnRlbnRJdGVyYXRvci5pc05ld2xpbmVDaGFyYWN0ZXIobGluZVN0YXRlLnBvc2l0aW9uKSkK
ICAgICAgICAgKytsaW5lU3RhdGUucG9zaXRpb247CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBD
aGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU5ld0xpbmUoTGluZVN0YXRlJiBs
aW5lU3RhdGUsIGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwg
dW5zaWduZWQgdGV4dExlbmd0aCwgdW5zaWduZWQgbGluZVN0YXJ0UnVuSW5kZXgpCit2b2lkIGlu
aXRpYWxpemVOZXdMaW5lKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBjb25zdCBSZW5kZXJGbG93Q29u
dGVudEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBjb250ZW50SXRlcmF0b3IsIHVuc2lnbmVkIGxp
bmVTdGFydFJ1bkluZGV4KQogewogICAgIGxpbmVTdGF0ZS5saW5lU3RhcnRSdW5JbmRleCA9IGxp
bmVTdGFydFJ1bkluZGV4OwogICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGlmIGNvbGxh
cHNpbmcgd2hpdGVzcGFjZSwgdW5sZXNzIHRoZXJlJ3MgYW4gdW5jb21taXR0ZWQgZnJhZ21lbnQg
cHVzaGVkIGZyb20gdGhlIHByZXZpb3VzIGxpbmUuCkBAIC00NTEsMTQgKzQ5MSwxMyBAQCBzdGF0
aWMgdm9pZCBpbml0aWFsaXplTmV3TGluZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgY29uc3QgU3R5
bGUmIHN0eWxlLCBjb25zdCBDaAogICAgICAgICAgICAgbGluZVN0YXRlLmp1bXBUbyhsaW5lU3Rh
dGUub3ZlZmxvd2VkRnJhZ21lbnQuc3RhcnQsIDApOyAvLyBTdGFydCBvdmVyIHdpdGggdGhpcyBm
cmFnbWVudC4KICAgICB9IGVsc2UgewogICAgICAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsK
LSAgICAgICAgbGluZVN0YXRlLmp1bXBUbyhzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgPyBza2lw
V2hpdGVzcGFjZSh0ZXh0LCBsaW5lU3RhdGUucG9zaXRpb24sIHRleHRMZW5ndGgsIHN0eWxlLnBy
ZXNlcnZlTmV3bGluZSwgc3BhY2VDb3VudCkgOiBsaW5lU3RhdGUucG9zaXRpb24sIDApOworICAg
ICAgICBsaW5lU3RhdGUuanVtcFRvKGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpLmNvbGxhcHNlV2hp
dGVzcGFjZSA/IGNvbnRlbnRJdGVyYXRvci5maW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihs
aW5lU3RhdGUucG9zaXRpb24sIHNwYWNlQ291bnQpIDogbGluZVN0YXRlLnBvc2l0aW9uLCAwKTsK
ICAgICB9CiAgICAgbGluZVN0YXRlLm92ZWZsb3dlZEZyYWdtZW50ID0gVGV4dEZyYWdtZW50KCk7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIFRleHRGcmFn
bWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0
LCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBrZWVwQXRMZWFzdE9uZUNoYXJhY3RlciwgY29u
c3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHRl
eHQsIHVuc2lnbmVkIHRleHRMZW5ndGgsIGNvbnN0IFN0eWxlJiBzdHlsZSkKK1RleHRGcmFnbWVu
dCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LCBm
bG9hdCBhdmFpbGFibGVXaWR0aCwgYm9vbCBrZWVwQXRMZWFzdE9uZUNoYXJhY3RlciwgY29uc3Qg
UmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9y
KQogewogICAgIC8vIEZhc3QgcGF0aCBmb3Igc2luZ2xlIGNoYXIgZnJhZ21lbnRzLgogICAgIGlm
IChmcmFnbWVudFRvU3BsaXQuc3RhcnQgKyAxID09IGZyYWdtZW50VG9TcGxpdC5lbmQpIHsKQEAg
LTQ3Nyw3ICs1MTYsNyBAQCBzdGF0aWMgVGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExp
bmUoVGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0CiAgICAgZmxvYXQgd2lkdGgg
PSAwOwogICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxl
ID0gKGxlZnQgKyByaWdodCkgLyAyOwotICAgICAgICB3aWR0aCA9IHRleHRXaWR0aCh0ZXh0UmVu
ZGVyZXIsIHRleHQsIHRleHRMZW5ndGgsIGZyYWdtZW50VG9TcGxpdC5zdGFydCwgbWlkZGxlICsg
MSwgMCwgc3R5bGUpOworICAgICAgICB3aWR0aCA9IGNvbnRlbnRJdGVyYXRvci50ZXh0V2lkdGgo
ZnJhZ21lbnRUb1NwbGl0LnN0YXJ0LCBtaWRkbGUgKyAxLCAwKTsKICAgICAgICAgaWYgKGF2YWls
YWJsZVdpZHRoID4gd2lkdGgpCiAgICAgICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsKICAgICAg
ICAgZWxzZSBpZiAoYXZhaWxhYmxlV2lkdGggPCB3aWR0aCkKQEAgLTQ5Miw3ICs1MzEsNyBAQCBz
dGF0aWMgVGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50JiBm
cmFnbWVudFRvU3BsaXQsIGZsb2F0CiAgICAgICAgICsrcmlnaHQ7CiAgICAgVGV4dEZyYWdtZW50
IGZyYWdtZW50Rm9yTmV4dExpbmUoZnJhZ21lbnRUb1NwbGl0KTsKICAgICBmcmFnbWVudFRvU3Bs
aXQuZW5kID0gcmlnaHQ7Ci0gICAgZnJhZ21lbnRUb1NwbGl0LndpZHRoID0gZnJhZ21lbnRUb1Nw
bGl0LmlzRW1wdHkoKSA/IDAgOiB0ZXh0V2lkdGgodGV4dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0TGVu
Z3RoLCBmcmFnbWVudFRvU3BsaXQuc3RhcnQsIHJpZ2h0LCAwLCBzdHlsZSk7CisgICAgZnJhZ21l
bnRUb1NwbGl0LndpZHRoID0gZnJhZ21lbnRUb1NwbGl0LmlzRW1wdHkoKSA/IDAgOiBjb250ZW50
SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCwgcmlnaHQsIDApOwogCiAg
ICAgZnJhZ21lbnRGb3JOZXh0TGluZS5zdGFydCA9IGZyYWdtZW50VG9TcGxpdC5lbmQ7CiAgICAg
ZnJhZ21lbnRGb3JOZXh0TGluZS53aWR0aCAtPSBmcmFnbWVudFRvU3BsaXQud2lkdGg7CkBAIC01
MDAsMTkgKzUzOSwxOSBAQCBzdGF0aWMgVGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExp
bmUoVGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIFRleHRGcmFnbWVudCBuZXh0RnJhZ21lbnQo
dW5zaWduZWQgcHJldmlvdXNGcmFnbWVudEVuZCwgTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5l
QnJlYWtJdGVyYXRvciwgY29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiB0
ZXh0LCB1bnNpZ25lZCB0ZXh0TGVuZ3RoLAotICAgIGZsb2F0IHhQb3NpdGlvbiwgY29uc3QgUmVu
ZGVyVGV4dCYgdGV4dFJlbmRlcmVyKQorVGV4dEZyYWdtZW50IG5leHRGcmFnbWVudCh1bnNpZ25l
ZCBwcmV2aW91c0ZyYWdtZW50RW5kLCBSZW5kZXJGbG93Q29udGVudEl0ZXJhdG9yPENoYXJhY3Rl
clR5cGU+JiBjb250ZW50SXRlcmF0b3IsIGZsb2F0IHhQb3NpdGlvbikKIHsKICAgICAvLyBBIGZy
YWdtZW50IGNhbiBoYXZlCiAgICAgLy8gMS4gbmV3IGxpbmUgY2hhcmFjdGVyIHdoZW4gcHJlc2Vy
dmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNwYWNlKSBvcgogICAgIC8v
IDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5nbGUp
IG9yCiAgICAgLy8gMy4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4KKyAgICBjb25zdCBTdHls
ZSBzdHlsZSA9IGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpOwogICAgIFRleHRGcmFnbWVudCBmcmFn
bWVudDsKLSAgICBmcmFnbWVudC5tdXN0QnJlYWsgPSBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYg
dGV4dFtwcmV2aW91c0ZyYWdtZW50RW5kXSA9PSAnXG4nOworICAgIGZyYWdtZW50Lm11c3RCcmVh
ayA9IHN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjb250ZW50SXRlcmF0b3IuaXNOZXdsaW5lQ2hh
cmFjdGVyKHByZXZpb3VzRnJhZ21lbnRFbmQpOwogICAgIHVuc2lnbmVkIHNwYWNlQ291bnQgPSAw
OwogICAgIHVuc2lnbmVkIHdoaXRlc3BhY2VFbmQgPSBwcmV2aW91c0ZyYWdtZW50RW5kOwogICAg
IGlmICghZnJhZ21lbnQubXVzdEJyZWFrKQotICAgICAgICB3aGl0ZXNwYWNlRW5kID0gc2tpcFdo
aXRlc3BhY2UodGV4dCwgcHJldmlvdXNGcmFnbWVudEVuZCwgdGV4dExlbmd0aCwgc3R5bGUucHJl
c2VydmVOZXdsaW5lLCBzcGFjZUNvdW50KTsKKyAgICAgICAgd2hpdGVzcGFjZUVuZCA9IGNvbnRl
bnRJdGVyYXRvci5maW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihwcmV2aW91c0ZyYWdtZW50
RW5kLCBzcGFjZUNvdW50KTsKICAgICBmcmFnbWVudC5pc1doaXRlc3BhY2VPbmx5ID0gcHJldmlv
dXNGcmFnbWVudEVuZCA8IHdoaXRlc3BhY2VFbmQ7CiAgICAgZnJhZ21lbnQuc3RhcnQgPSBwcmV2
aW91c0ZyYWdtZW50RW5kOwogICAgIGlmIChmcmFnbWVudC5pc1doaXRlc3BhY2VPbmx5KQpAQCAt
NTIwLDcgKzU1OSw3IEBAIHN0YXRpYyBUZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50KHVuc2lnbmVk
IHByZXZpb3VzRnJhZ21lbnRFbmQsIExhenlMaW5lQnJlYWtJdGVyCiAgICAgZWxzZSBpZiAoZnJh
Z21lbnQubXVzdEJyZWFrKQogICAgICAgICBmcmFnbWVudC5lbmQgPSBmcmFnbWVudC5zdGFydCAr
IDE7CiAgICAgZWxzZQotICAgICAgICBmcmFnbWVudC5lbmQgPSBuZXh0QnJlYWthYmxlUG9zaXRp
b248Q2hhcmFjdGVyVHlwZSwgZmFsc2U+KGxpbmVCcmVha0l0ZXJhdG9yLCB0ZXh0LCB0ZXh0TGVu
Z3RoLCBwcmV2aW91c0ZyYWdtZW50RW5kICsgMSk7CisgICAgICAgIGZyYWdtZW50LmVuZCA9IGNv
bnRlbnRJdGVyYXRvci5maW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHByZXZpb3VzRnJhZ21lbnRF
bmQgKyAxKTsKICAgICBib29sIG11bHRpcGxlID0gZnJhZ21lbnQuc3RhcnQgKyAxIDwgZnJhZ21l
bnQuZW5kOwogICAgIGZyYWdtZW50LmlzQ29sbGFwc2VkV2hpdGVzcGFjZSA9IG11bHRpcGxlICYm
IGZyYWdtZW50LmlzV2hpdGVzcGFjZU9ubHkgJiYgc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwog
ICAgIC8vIE5vbi1jb2xsYXBzZWQgd2hpdGVzcGFjZSBvciBqdXN0IHBsYWluIHdvcmRzIHdoZW4g
ImJyZWFrIHdvcmQgb24gb3ZlcmZsb3ciIGlzIG9uIGNhbiB3cmFwLgpAQCAtNTM1LDE4ICs1NzQs
MTggQEAgc3RhdGljIFRleHRGcmFnbWVudCBuZXh0RnJhZ21lbnQodW5zaWduZWQgcHJldmlvdXNG
cmFnbWVudEVuZCwgTGF6eUxpbmVCcmVha0l0ZXIKICAgICBlbHNlIGlmIChmcmFnbWVudExlbmd0
aCA9PSBzcGFjZUNvdW50KSAvLyBTcGFjZSBvbmx5LgogICAgICAgICBmcmFnbWVudC53aWR0aCA9
IHN0eWxlLnNwYWNlV2lkdGggKiBzcGFjZUNvdW50OwogICAgIGVsc2UKLSAgICAgICAgZnJhZ21l
bnQud2lkdGggPSB0ZXh0V2lkdGgodGV4dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBmcmFn
bWVudC5zdGFydCwgZnJhZ21lbnQuZW5kLCB4UG9zaXRpb24sIHN0eWxlKTsKKyAgICAgICAgZnJh
Z21lbnQud2lkdGggPSBjb250ZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBm
cmFnbWVudC5lbmQsIHhQb3NpdGlvbik7CiAgICAgcmV0dXJuIGZyYWdtZW50OwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0
YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgTGF6eUxpbmVCcmVh
a0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBD
aGFyYWN0ZXJUeXBlKiB0ZXh0LAotICAgIHVuc2lnbmVkIHRleHRMZW5ndGgsIGNvbnN0IFJlbmRl
clRleHQmIHRleHRSZW5kZXJlcikKK2Jvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5l
U3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgUmVuZGVyRmxvd0NvbnRlbnRJdGVy
YXRvcjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yKQogeworICAgIGNvbnN0IFN0eWxl
JiBzdHlsZSA9IGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpOwogICAgIGJvb2wgbGluZUNhbkJlV3Jh
cHBlZCA9IHN0eWxlLndyYXBMaW5lcyB8fCBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93OwotICAg
IHdoaWxlIChsaW5lU3RhdGUucG9zaXRpb24gPCB0ZXh0TGVuZ3RoKSB7CisgICAgd2hpbGUgKCFj
b250ZW50SXRlcmF0b3IuZW5kT2ZDb250ZW50KGxpbmVTdGF0ZS5wb3NpdGlvbikpIHsKICAgICAg
ICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50LiBTdGFydCBmcm9tIHRoZSBlbmQgb2Yg
dGhlIHByZXZpb3VzIGZyYWdtZW50IC1jdXJyZW50IGxpbmUgZW5kLgotICAgICAgICBUZXh0RnJh
Z21lbnQgZnJhZ21lbnQgPSBuZXh0RnJhZ21lbnQobGluZVN0YXRlLnBvc2l0aW9uLCBsaW5lQnJl
YWtJdGVyYXRvciwgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgsIGxpbmVTdGF0ZS53aWR0aCgpLCB0
ZXh0UmVuZGVyZXIpOworICAgICAgICBUZXh0RnJhZ21lbnQgZnJhZ21lbnQgPSBuZXh0RnJhZ21l
bnQobGluZVN0YXRlLnBvc2l0aW9uLCBjb250ZW50SXRlcmF0b3IsIGxpbmVTdGF0ZS53aWR0aCgp
KTsKICAgICAgICAgaWYgKChsaW5lQ2FuQmVXcmFwcGVkICYmICFsaW5lU3RhdGUuZml0cyhmcmFn
bWVudC53aWR0aCkpIHx8IGZyYWdtZW50Lm11c3RCcmVhaykgewogICAgICAgICAgICAgLy8gT3Zl
cmZsb3cgd3JhcHBpbmcgYmVoYXZpb3VyOgogICAgICAgICAgICAgLy8gMS4gTmV3bGluZSBjaGFy
YWN0ZXI6IHdyYXBzIHRoZSBsaW5lIHVubGVzcyBpdCdzIHRyZWF0ZWQgYXMgd2hpdGVzcGFjZS4K
QEAgLTU2OCw3ICs2MDcsNyBAQCBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0
YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIExhenlMaW5lQgogICAgICAgICAgICAg
fSBlbHNlIGlmIChmcmFnbWVudC5pc1doaXRlc3BhY2VPbmx5IHx8ICgoaXNGaXJzdEZyYWdtZW50
ICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGluZXMpKSB7IC8v
ICFzdHlsZS53cmFwTGluZXM6IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikK
ICAgICAgICAgICAgICAgICAvLyBXaGl0ZXNwYWNlIGNvbGxhcHNlIGlzIG9mZiBvciBub24td2hp
dGVzcGFjZSBjb250ZW50LiBzcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClmcmFnbWVudCAt
PiB0aGlzIGxpbmVTdGF0ZSwgb3ZlZmxvd2VkRnJhZ21lbnQgLT4gbmV4dCBsaW5lLgogICAgICAg
ICAgICAgICAgIC8vIFdoZW4gdGhpcyBpcyB0aGUgb25seSAoZmlyc3QpIGZyYWdtZW50LCB0aGUg
Zmlyc3QgY2hhcmFjdGVyIHN0YXlzIG9uIHRoZSBsaW5lLCBldmVuIGlmIGl0IGRvZXMgbm90IGZp
dC4KLSAgICAgICAgICAgICAgICBsaW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZy
YWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lU3RhdGUuYXZhaWxhYmxlV2lkdGggLSBsaW5l
U3RhdGUud2lkdGgoKSwgaXNGaXJzdEZyYWdtZW50LCB0ZXh0UmVuZGVyZXIsIHRleHQsIHRleHRM
ZW5ndGgsIHN0eWxlKTsKKyAgICAgICAgICAgICAgICBsaW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21l
bnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lU3RhdGUuYXZhaWxhYmxl
V2lkdGggLSBsaW5lU3RhdGUud2lkdGgoKSwgaXNGaXJzdEZyYWdtZW50LCBjb250ZW50SXRlcmF0
b3IpOwogICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnQuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnRzIGNhbiBnZXQgcHVzaGVkIGVudGly
ZWx5IHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGF0ZS5hZGRV
bmNvbW1pdHRlZChmcmFnbWVudCk7CkBAIC01OTMsMjAgKzYzMiwxOSBAQCBib29sIGNyZWF0ZUxp
bmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMs
IExhenlMaW5lQgogICAgICAgICAgICAgbGluZVN0YXRlLmFkZFVuY29tbWl0dGVkKGZyYWdtZW50
KTsKICAgICB9CiAgICAgbGluZVN0YXRlLmNvbW1pdEFuZENyZWF0ZVJ1bihsaW5lUnVucyk7Ci0g
ICAgcmV0dXJuIGxpbmVTdGF0ZS5wb3NpdGlvbiA+PSB0ZXh0TGVuZ3RoICYmIGxpbmVTdGF0ZS5v
dmVmbG93ZWRGcmFnbWVudC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGNvbnRlbnRJdGVyYXRvci5l
bmRPZkNvbnRlbnQobGluZVN0YXRlLnBvc2l0aW9uKSAmJiBsaW5lU3RhdGUub3ZlZmxvd2VkRnJh
Z21lbnQuaXNFbXB0eSgpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5l
U3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgdW5zaWduZWQmIGxpbmVDb3VudCwK
LSAgICBjb25zdCBTdHlsZSYgc3R5bGUsIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2ln
bmVkIHRleHRMZW5ndGgpCit2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0
YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgdW5zaWduZWQmIGxp
bmVDb3VudCwgY29uc3QgUmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYg
Y29udGVudEl0ZXJhdG9yKQogewogICAgIGlmIChsaW5lU3RhdGUubGluZVN0YXJ0UnVuSW5kZXgg
PT0gbGluZVJ1bnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobGluZVJ1
bnMuc2l6ZSgpKTsKLSAgICByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UobGluZVN0YXRlLCBsaW5l
UnVucywgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgpOworICAgIHJlbW92ZVRyYWlsaW5nV2hpdGVz
cGFjZShsaW5lU3RhdGUsIGxpbmVSdW5zLCBjb250ZW50SXRlcmF0b3IpOwogICAgIC8vIEFkanVz
dCBydW5zJyBwb3NpdGlvbiBieSB0YWtpbmcgbGluZSdzIGFsaWdubWVudCBpbnRvIGFjY291bnQu
Ci0gICAgaWYgKGZsb2F0IGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChzdHlsZS50
ZXh0QWxpZ24sIGxpbmVTdGF0ZS5hdmFpbGFibGVXaWR0aCwgbGluZVN0YXRlLmNvbW1pdHRlZFdp
ZHRoLCBsaW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpKSB7CisgICAgaWYgKGZsb2F0IGxpbmVM
b2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChjb250ZW50SXRlcmF0b3Iuc3R5bGUoKS50ZXh0
QWxpZ24sIGxpbmVTdGF0ZS5hdmFpbGFibGVXaWR0aCwgbGluZVN0YXRlLmNvbW1pdHRlZFdpZHRo
LCBsaW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGxpbmVTdGF0ZS5saW5lU3RhcnRSdW5JbmRleDsgaSA8IGxpbmVSdW5zLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBsaW5lUnVuc1tpXS5sb2dpY2FsTGVmdCArPSBsaW5lTG9naWNhbExl
ZnQ7CiAgICAgICAgICAgICBsaW5lUnVuc1tpXS5sb2dpY2FsUmlnaHQgKz0gbGluZUxvZ2ljYWxM
ZWZ0OwpAQCAtNjI4LDM5ICs2NjYsMzUgQEAgc3RhdGljIHZvaWQgdXBkYXRlTGluZUNvbnN0cmFp
bnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBmbG9hdCYgYXZhaWxhYmxlV2kKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIGNyZWF0ZVRleHRSdW5zKExh
eW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCYgbGluZUNvdW50LCBSZW5kZXJCbG9ja0Zs
b3cmIGZsb3csIFJlbmRlclRleHQmIHRleHRSZW5kZXJlcikKK3ZvaWQgY3JlYXRlVGV4dFJ1bnMo
TGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWduZWQm
IGxpbmVDb3VudCkKIHsKLSAgICBjb25zdCBTdHlsZSBzdHlsZShmbG93LnN0eWxlKCkpOwotICAg
IGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQgPSB0ZXh0UmVuZGVyZXIudGV4dCgpLT5jaGFyYWN0
ZXJzPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgY29uc3QgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRl
eHRSZW5kZXJlci50ZXh0TGVuZ3RoKCk7CiAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5n
QmVmb3JlID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7CiAgICAgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwotICAgIExhenlMaW5lQnJlYWtJ
dGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0UmVuZGVyZXIudGV4dCgpLCBmbG93LnN0eWxl
KCkubG9jYWxlKCkpOwogICAgIExpbmVTdGF0ZSBsaW5lU3RhdGU7CiAgICAgYm9vbCBpc0VuZE9m
Q29udGVudCA9IGZhbHNlOworICAgIFJlbmRlckZsb3dDb250ZW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4gY29udGVudEl0ZXJhdG9yID0gUmVuZGVyRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0
ZXJUeXBlPihmbG93KTsKIAogICAgIGRvIHsKICAgICAgICAgZmxvdy5zZXRMb2dpY2FsSGVpZ2h0
KGxpbmVIZWlnaHQgKiBsaW5lQ291bnQgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsKICAgICAg
ICAgdXBkYXRlTGluZUNvbnN0cmFpbnMoZmxvdywgbGluZVN0YXRlLmF2YWlsYWJsZVdpZHRoLCBs
aW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpOwotICAgICAgICBpbml0aWFsaXplTmV3TGluZShs
aW5lU3RhdGUsIHN0eWxlLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBydW5zLnNpemUoKSk7Ci0gICAgICAg
IGlzRW5kT2ZDb250ZW50ID0gY3JlYXRlTGluZVJ1bnMobGluZVN0YXRlLCBydW5zLCBsaW5lQnJl
YWtJdGVyYXRvciwgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgsIHRleHRSZW5kZXJlcik7Ci0gICAg
ICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZVN0YXRlLCBydW5zLCBsaW5lQ291
bnQsIHN0eWxlLCB0ZXh0LCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgaW5pdGlhbGl6ZU5ld0xpbmUo
bGluZVN0YXRlLCBjb250ZW50SXRlcmF0b3IsIHJ1bnMuc2l6ZSgpKTsKKyAgICAgICAgaXNFbmRP
ZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lU3RhdGUsIHJ1bnMsIGNvbnRlbnRJdGVyYXRv
cik7CisgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZVN0YXRlLCBydW5z
LCBsaW5lQ291bnQsIGNvbnRlbnRJdGVyYXRvcik7CiAgICAgfSB3aGlsZSAoIWlzRW5kT2ZDb250
ZW50KTsKICAgICBBU1NFUlQoIWxpbmVTdGF0ZS51bmNvbW1pdHRlZFdpZHRoKTsKIH0KIAogc3Rk
Ojp1bmlxdWVfcHRyPExheW91dD4gY3JlYXRlKFJlbmRlckJsb2NrRmxvdyYgZmxvdykKIHsKLSAg
ICBMYXlvdXQ6OlJ1blZlY3RvciBydW5zOwogICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9IDA7Ci0K
KyAgICBMYXlvdXQ6OlJ1blZlY3RvciBydW5zOwogICAgIFJlbmRlclRleHQmIHRleHRSZW5kZXJl
ciA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpmbG93LmZpcnN0Q2hpbGQoKSk7CiAgICAgQVNTRVJU
KCF0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCkpOwogCiAgICAgaWYgKHRleHRSZW5kZXJlci5p
czhCaXQoKSkKLSAgICAgICAgY3JlYXRlVGV4dFJ1bnM8TENoYXI+KHJ1bnMsIGxpbmVDb3VudCwg
ZmxvdywgdGV4dFJlbmRlcmVyKTsKKyAgICAgICAgY3JlYXRlVGV4dFJ1bnM8TENoYXI+KHJ1bnMs
IGZsb3csIGxpbmVDb3VudCk7CiAgICAgZWxzZQotICAgICAgICBjcmVhdGVUZXh0UnVuczxVQ2hh
cj4ocnVucywgbGluZUNvdW50LCBmbG93LCB0ZXh0UmVuZGVyZXIpOworICAgICAgICBjcmVhdGVU
ZXh0UnVuczxVQ2hhcj4ocnVucywgZmxvdywgbGluZUNvdW50KTsKIAogICAgIHRleHRSZW5kZXJl
ci5jbGVhck5lZWRzTGF5b3V0KCk7CiAgICAgcmV0dXJuIExheW91dDo6Y3JlYXRlKHJ1bnMsIGxp
bmVDb3VudCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240960</attachid>
            <date>2014-11-04 15:22:50 -0800</date>
            <delta_ts>2014-11-04 16:03:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138346-20141104152300.patch</filename>
            <type>text/plain</type>
            <size>20611</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MjU2N2NiYzEwOGE0
MjI5NmYyNzc5ODU3ZTkzNDhjMGY4NzE1Ny4uNmJlNWQ2ZGNiY2E4ODc3MTkyOGViZjgyMjYyOWRh
Y2NhYmJhZDUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDE0LTExLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBBYnN0cmFjdCBvdXQgY29udGVudCBpdGVyYXRpb24gYW5kIHRleHQgaGFuZGxpbmcgaW4gZ2Vu
ZXJhbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
ODM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIGNsYXNzIHRoYXQgY2FuIGFjdCBhcyB0aGUgcHJpbWFyeSBpdGVyYXRvci9mcmFnbWVudCBo
YW5kbGluZyBpbnRlcmZhY2UgdG8gdGhlIGxpbmUgcGFyc2VyLgorICAgICAgICBUaGlzIGhlbHBz
IGFkZGluZyBzdXBwb3J0IG11bHRpcGxlIHJlbmRlcmVyIGVsZW1lbnRzIHdpdGhvdXQgY2hhbmdp
bmcgdGhlIHBhcnNlciBsb2dpYy4KKyAgICAgICAgQ3VycmVudGx5IGl0IG9wZXJhdGVzIHN0cmlj
dGx5IG9uIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgUmVuZGVyQmxvY2tGbG93LiAgCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZs
b3dDb250ZW50SXRlcmF0b3I6OkZsb3dDb250ZW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRJdGVyYXRvcjo6ZmluZE5leHRCcmVha2Fi
bGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudEl0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRJdGVyYXRv
cjo6aXNOZXdsaW5lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50SXRlcmF0b3I6OmlzRW5kT2ZDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50SXRlcmF0b3I6OnN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVMaW5lTGVmdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpyZW1vdmVUcmFpbGluZ1doaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6aW5pdGlhbGl6ZU5l
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c3BsaXRGcmFnbWVu
dFRvRml0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpuZXh0RnJh
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGluZVJ1
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5kaW5n
QW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVh
dGVUZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c2tpcFdoaXRlc3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6dGV4dFdpZHRoKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oOgorCisyMDE0
LTExLTA0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAgV2luZG93
cyBidWlsZCBmaXggYWZ0ZXIgcjE3NTU2NS4KIAogICAgICAgICBNU1ZDIHJlcXVpcmVzIGRlZmF1
bHQgYyd0b3IgZXZlbiBpZiBpdCdzIG5ldmVyIGNhbGxlZC4gLTAgbGVuZ3RoIGFycmF5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4IDAyOGQ2
MzdmYmM3Yzg3ZTE4YWQ3Y2YwY2ViNjk3NTU2NzRiZTBlOWYuLmRiNzA2ZDA4M2NhYzllMzhhOTMy
Y2ZiYTg1MmMyZTNiNTIyMzY4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHAKQEAgLTIxNCwzNCArMjE0LDczIEBAIHN0cnVjdCBTdHlsZSB7CiB9
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgc2tpcFdoaXRlc3BhY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgcHJlc2VydmVOZXdsaW5lLCB1bnNpZ25lZCYg
c3BhY2VDb3VudCkKLXsKLSAgICBzcGFjZUNvdW50ID0gMDsKLSAgICBmb3IgKDsgb2Zmc2V0IDwg
bGVuZ3RoOyArK29mZnNldCkgewotICAgICAgICBib29sIGlzU3BhY2UgPSB0ZXh0W29mZnNldF0g
PT0gJyAnOwotICAgICAgICBpZiAoIShpc1NwYWNlIHx8IHRleHRbb2Zmc2V0XSA9PSAnXHQnIHx8
ICghcHJlc2VydmVOZXdsaW5lICYmIHRleHRbb2Zmc2V0XSA9PSAnXG4nKSkpCi0gICAgICAgICAg
ICByZXR1cm4gb2Zmc2V0OwotICAgICAgICBpZiAoaXNTcGFjZSkKLSAgICAgICAgICAgICsrc3Bh
Y2VDb3VudDsKK2NsYXNzIEZsb3dDb250ZW50SXRlcmF0b3IgeworcHVibGljOgorICAgIEZsb3dD
b250ZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQorICAgICAgICA6IG1f
ZmxvdyhmbG93KQorICAgICAgICAsIG1fc3R5bGUoZmxvdy5zdHlsZSgpKQorICAgICAgICAsIG1f
bGluZUJyZWFrSXRlcmF0b3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZsb3cuZmlyc3RDaGlsZCgp
KS50ZXh0KCksIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKKyAgICB7CiAgICAgfQotICAgIHJldHVy
biBsZW5ndGg7Ci19CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGZsb2F0IHRleHRXaWR0aChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0LCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCB0ZXh0TGVuZ3RoLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgZmxvYXQgeFBvc2l0aW9uLCBjb25zdCBTdHlsZSYgc3R5bGUpCi17Ci0gICAgaWYg
KHN0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkgfHwgKCFmcm9tICYmIHRvID09IHRleHRMZW5ndGgp
KQotICAgICAgICByZXR1cm4gcmVuZGVyVGV4dC53aWR0aChmcm9tLCB0byAtIGZyb20sIHN0eWxl
LmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgdW5zaWduZWQgZmluZE5l
eHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIFN0
cmluZyBzdHJpbmcgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpOworICAgICAgICByZXR1
cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPENoYXJhY3RlclR5cGUsIGZhbHNlPihtX2xpbmVCcmVh
a0l0ZXJhdG9yLCBzdHJpbmcuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpLCBzdHJpbmcubGVu
Z3RoKCksIHBvc2l0aW9uKTsKKyAgICB9CiAKLSAgICBUZXh0UnVuIHJ1bih0ZXh0ICsgZnJvbSwg
dG8gLSBmcm9tKTsKLSAgICBydW4uc2V0WFBvcyh4UG9zaXRpb24pOwotICAgIHJ1bi5zZXRDaGFy
YWN0ZXJzTGVuZ3RoKHRleHRMZW5ndGggLSBmcm9tKTsKLSAgICBydW4uc2V0VGFiU2l6ZSghIXN0
eWxlLnRhYldpZHRoLCBzdHlsZS50YWJXaWR0aCk7CisgICAgdW5zaWduZWQgZmluZE5leHROb25X
aGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50
KSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0
b3Iuc3RyaW5nKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsK
KyAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCA9IHN0cmluZy5jaGFyYWN0ZXJzPENo
YXJhY3RlclR5cGU+KCk7CisgICAgICAgIHNwYWNlQ291bnQgPSAwOworICAgICAgICBmb3IgKDsg
cG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGJvb2wgaXNTcGFj
ZSA9IHRleHRbcG9zaXRpb25dID09ICcgJzsKKyAgICAgICAgICAgIGlmICghKGlzU3BhY2UgfHwg
dGV4dFtwb3NpdGlvbl0gPT0gJ1x0JyB8fCAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHRl
eHRbcG9zaXRpb25dID09ICdcbicpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247
CisgICAgICAgICAgICBpZiAoaXNTcGFjZSkKKyAgICAgICAgICAgICAgICArK3NwYWNlQ291bnQ7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CiAKLSAgICBBU1NFUlQo
cnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOworICAgIGZsb2F0IHRleHRX
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5n
KCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAoIWZyb20gJiYgdG8gPT0gbGVuZ3Ro
KSkgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIgPSBkb3duY2FzdDxS
ZW5kZXJUZXh0PigqbV9mbG93LmZpcnN0Q2hpbGQoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXIud2lkdGgoZnJvbSwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICBUZXh0UnVuIHJ1bihzdHJpbmcu
Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICAgICAg
cnVuLnNldFhQb3MoeFBvc2l0aW9uKTsKKyAgICAgICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgo
bGVuZ3RoIC0gZnJvbSk7CisgICAgICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHlsZS50YWJXaWR0
aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVyc0xlbmd0
aCgpID49IHJ1bi5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBtX3N0eWxlLmZvbnQud2lkdGgo
cnVuKTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3bGluZUNoYXJhY3Rlcih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xpbmVCcmVha0l0ZXJhdG9yLnN0
cmluZygpLmxlbmd0aCgpID4gcG9zaXRpb24pOworICAgICAgICByZXR1cm4gbV9saW5lQnJlYWtJ
dGVyYXRvci5zdHJpbmcoKS5hdChwb3NpdGlvbikgPT0gJ1xuJzsKKyAgICB9CisKKyAgICBib29s
IGlzRW5kT2ZDb250ZW50KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHBvc2l0aW9uID49IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkubGVuZ3RoKCk7
CisgICAgfQorCisgICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgbV9mbG93OworICAg
IFN0eWxlIG1fc3R5bGU7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRl
cmF0b3I7Cit9OwogCi0gICAgcmV0dXJuIHN0eWxlLmZvbnQud2lkdGgocnVuKTsKLX0KIAogc3Rh
dGljIGZsb2F0IGNvbXB1dGVMaW5lTGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZh
aWxhYmxlV2lkdGgsIGZsb2F0IGNvbW1pdHRlZFdpZHRoLCBmbG9hdCBsb2dpY2FsTGVmdE9mZnNl
dCkKIHsKQEAgLTI2MCw2ICsyOTksNyBAQCBzdGF0aWMgZmxvYXQgY29tcHV0ZUxpbmVMZWZ0KEVU
ZXh0QWxpZ24gdGV4dEFsaWduLCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgYwogICAgIGNh
c2UgV0VCS0lUX0NFTlRFUjoKICAgICAgICAgcmV0dXJuIGxlZnQgKyBzdGQ6Om1heDxmbG9hdD4o
cmVtYWluaW5nV2lkdGggLyAyLCAwKTsKICAgICBjYXNlIEpVU1RJRlk6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yNzUsNyArMzE1LDggQEAgc3RydWN0IFRleHRGcmFnbWVudCB7CiAgICAg
ICAgICwgaXNCcmVha2FibGUoZmFsc2UpCiAgICAgICAgICwgbXVzdEJyZWFrKGZhbHNlKQogICAg
ICAgICAsIHdpZHRoKDApCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIFRleHRGcmFnbWVu
dCh1bnNpZ25lZCB0ZXh0U3RhcnQsIHVuc2lnbmVkIHRleHRFbmQsIGZsb2F0IHRleHRXaWR0aCwg
Ym9vbCBpc1doaXRlc3BhY2VPbmx5KQogICAgICAgICA6IHN0YXJ0KHRleHRTdGFydCkKQEAgLTI4
NSw3ICszMjYsOCBAQCBzdHJ1Y3QgVGV4dEZyYWdtZW50IHsKICAgICAgICAgLCBpc0JyZWFrYWJs
ZShmYWxzZSkKICAgICAgICAgLCBtdXN0QnJlYWsoZmFsc2UpCiAgICAgICAgICwgd2lkdGgodGV4
dFdpZHRoKQotICAgIHsgfQorICAgIHsKKyAgICB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dAogICAgIHsKQEAgLTM5Nyw4ICs0MzksOSBAQCBzdHJ1Y3QgTGluZVN0YXRlIHsKIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxp
bmdXaGl0ZXNwYWNlKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGlu
ZVJ1bnMsIGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5z
aWduZWQgdGV4dExlbmd0aCkKK3ZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0
ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250
ZW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGNvbnRlbnRJdGVyYXRvcikKIHsKKyAgICBjb25z
dCBTdHlsZSYgc3R5bGUgPSBjb250ZW50SXRlcmF0b3Iuc3R5bGUoKTsKICAgICBib29sIHByZVdy
YXAgPSBzdHlsZS53cmFwTGluZXMgJiYgIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAv
LyBUcmFpbGluZyB3aGl0ZXNwYWNlIGdldHMgcmVtb3ZlZCB3aGVuIHdlIGVpdGhlciBjb2xsYXBz
ZSB3aGl0ZXNwYWNlIG9yIHByZS13cmFwIGlzIHByZXNlbnQuCiAgICAgaWYgKCEoc3R5bGUuY29s
bGFwc2VXaGl0ZXNwYWNlIHx8IHByZVdyYXApKSB7CkBAIC00MzQsMTIgKzQ3NywxMiBAQCBzdGF0
aWMgdm9pZCByZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExh
eW91dDo6UnVuVmVjdG9yJiBsaQogICAgIH0KIAogICAgIC8vIElmIHdlIHNraXBwZWQgYW55IHdo
aXRlc3BhY2UgYW5kIG5vdyB0aGUgbGluZSBlbmQgaXMgYSAicHJlc2VydmVkIiBuZXdsaW5lLCBz
a2lwIHRoZSBuZXdsaW5lIHRvbyBhcyB3ZSBhcmUgd3JhcHBpbmcgdGhlIGxpbmUgaGVyZSBhbHJl
YWR5LgotICAgIGlmIChsYXN0UG9zaXRpb24gIT0gbGluZVN0YXRlLnBvc2l0aW9uICYmIHN0eWxl
LnByZXNlcnZlTmV3bGluZSAmJiBsaW5lU3RhdGUucG9zaXRpb24gPCB0ZXh0TGVuZ3RoICYmIHRl
eHRbbGluZVN0YXRlLnBvc2l0aW9uXSA9PSAnXG4nKQorICAgIGlmIChsYXN0UG9zaXRpb24gIT0g
bGluZVN0YXRlLnBvc2l0aW9uICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBjb250ZW50SXRl
cmF0b3IuaXNOZXdsaW5lQ2hhcmFjdGVyKGxpbmVTdGF0ZS5wb3NpdGlvbikpCiAgICAgICAgICsr
bGluZVN0YXRlLnBvc2l0aW9uOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBj
b25zdCBTdHlsZSYgc3R5bGUsIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIHRl
eHRMZW5ndGgsIHVuc2lnbmVkIGxpbmVTdGFydFJ1bkluZGV4KQordm9pZCBpbml0aWFsaXplTmV3
TGluZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgY29uc3QgRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFy
YWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yLCB1bnNpZ25lZCBsaW5lU3RhcnRSdW5JbmRleCkK
IHsKICAgICBsaW5lU3RhdGUubGluZVN0YXJ0UnVuSW5kZXggPSBsaW5lU3RhcnRSdW5JbmRleDsK
ICAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBpZiBjb2xsYXBzaW5nIHdoaXRlc3BhY2Us
IHVubGVzcyB0aGVyZSdzIGFuIHVuY29tbWl0dGVkIGZyYWdtZW50IHB1c2hlZCBmcm9tIHRoZSBw
cmV2aW91cyBsaW5lLgpAQCAtNDUxLDE0ICs0OTQsMTMgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZU5ld0xpbmUoTGluZVN0YXRlJiBsaW5lU3RhdGUsIGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3Qg
Q2gKICAgICAgICAgICAgIGxpbmVTdGF0ZS5qdW1wVG8obGluZVN0YXRlLm92ZWZsb3dlZEZyYWdt
ZW50LnN0YXJ0LCAwKTsgLy8gU3RhcnQgb3ZlciB3aXRoIHRoaXMgZnJhZ21lbnQuCiAgICAgfSBl
bHNlIHsKICAgICAgICAgdW5zaWduZWQgc3BhY2VDb3VudCA9IDA7Ci0gICAgICAgIGxpbmVTdGF0
ZS5qdW1wVG8oc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlID8gc2tpcFdoaXRlc3BhY2UodGV4dCwg
bGluZVN0YXRlLnBvc2l0aW9uLCB0ZXh0TGVuZ3RoLCBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUsIHNw
YWNlQ291bnQpIDogbGluZVN0YXRlLnBvc2l0aW9uLCAwKTsKKyAgICAgICAgbGluZVN0YXRlLmp1
bXBUbyhjb250ZW50SXRlcmF0b3Iuc3R5bGUoKS5jb2xsYXBzZVdoaXRlc3BhY2UgPyBjb250ZW50
SXRlcmF0b3IuZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24obGluZVN0YXRlLnBvc2l0aW9u
LCBzcGFjZUNvdW50KSA6IGxpbmVTdGF0ZS5wb3NpdGlvbiwgMCk7CiAgICAgfQogICAgIGxpbmVT
dGF0ZS5vdmVmbG93ZWRGcmFnbWVudCA9IFRleHRGcmFnbWVudCgpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVu
dFRvRml0TGluZShUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwgZmxvYXQgYXZhaWxhYmxl
V2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0IFJlbmRlclRleHQmIHRl
eHRSZW5kZXJlciwKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCB0ZXh0
TGVuZ3RoLCBjb25zdCBTdHlsZSYgc3R5bGUpCitUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVudFRv
Rml0TGluZShUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwgZmxvYXQgYXZhaWxhYmxlV2lk
dGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0IEZsb3dDb250ZW50SXRlcmF0
b3I8Q2hhcmFjdGVyVHlwZT4mIGNvbnRlbnRJdGVyYXRvcikKIHsKICAgICAvLyBGYXN0IHBhdGgg
Zm9yIHNpbmdsZSBjaGFyIGZyYWdtZW50cy4KICAgICBpZiAoZnJhZ21lbnRUb1NwbGl0LnN0YXJ0
ICsgMSA9PSBmcmFnbWVudFRvU3BsaXQuZW5kKSB7CkBAIC00NzcsNyArNTE5LDcgQEAgc3RhdGlj
IFRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21l
bnRUb1NwbGl0LCBmbG9hdAogICAgIGZsb2F0IHdpZHRoID0gMDsKICAgICB3aGlsZSAobGVmdCA8
IHJpZ2h0KSB7CiAgICAgICAgIHVuc2lnbmVkIG1pZGRsZSA9IChsZWZ0ICsgcmlnaHQpIC8gMjsK
LSAgICAgICAgd2lkdGggPSB0ZXh0V2lkdGgodGV4dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0TGVuZ3Ro
LCBmcmFnbWVudFRvU3BsaXQuc3RhcnQsIG1pZGRsZSArIDEsIDAsIHN0eWxlKTsKKyAgICAgICAg
d2lkdGggPSBjb250ZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdtZW50VG9TcGxpdC5zdGFydCwg
bWlkZGxlICsgMSwgMCk7CiAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0aCA+IHdpZHRoKQogICAg
ICAgICAgICAgbGVmdCA9IG1pZGRsZSArIDE7CiAgICAgICAgIGVsc2UgaWYgKGF2YWlsYWJsZVdp
ZHRoIDwgd2lkdGgpCkBAIC00OTIsNyArNTM0LDcgQEAgc3RhdGljIFRleHRGcmFnbWVudCBzcGxp
dEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LCBmbG9hdAog
ICAgICAgICArK3JpZ2h0OwogICAgIFRleHRGcmFnbWVudCBmcmFnbWVudEZvck5leHRMaW5lKGZy
YWdtZW50VG9TcGxpdCk7CiAgICAgZnJhZ21lbnRUb1NwbGl0LmVuZCA9IHJpZ2h0OwotICAgIGZy
YWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdtZW50VG9TcGxpdC5pc0VtcHR5KCkgPyAwIDogdGV4
dFdpZHRoKHRleHRSZW5kZXJlciwgdGV4dCwgdGV4dExlbmd0aCwgZnJhZ21lbnRUb1NwbGl0LnN0
YXJ0LCByaWdodCwgMCwgc3R5bGUpOworICAgIGZyYWdtZW50VG9TcGxpdC53aWR0aCA9IGZyYWdt
ZW50VG9TcGxpdC5pc0VtcHR5KCkgPyAwIDogY29udGVudEl0ZXJhdG9yLnRleHRXaWR0aChmcmFn
bWVudFRvU3BsaXQuc3RhcnQsIHJpZ2h0LCAwKTsKIAogICAgIGZyYWdtZW50Rm9yTmV4dExpbmUu
c3RhcnQgPSBmcmFnbWVudFRvU3BsaXQuZW5kOwogICAgIGZyYWdtZW50Rm9yTmV4dExpbmUud2lk
dGggLT0gZnJhZ21lbnRUb1NwbGl0LndpZHRoOwpAQCAtNTAwLDE5ICs1NDIsMTkgQEAgc3RhdGlj
IFRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21l
bnRUb1NwbGl0LCBmbG9hdAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyBUZXh0RnJhZ21lbnQgbmV4dEZyYWdtZW50KHVuc2lnbmVkIHByZXZpb3VzRnJhZ21l
bnRFbmQsIExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGluZUJyZWFrSXRlcmF0b3IsIGNvbnN0IFN0
eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgdGV4dExlbmd0
aCwKLSAgICBmbG9hdCB4UG9zaXRpb24sIGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlcikK
K1RleHRGcmFnbWVudCBuZXh0RnJhZ21lbnQodW5zaWduZWQgcHJldmlvdXNGcmFnbWVudEVuZCwg
Rmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yLCBmbG9h
dCB4UG9zaXRpb24pCiB7CiAgICAgLy8gQSBmcmFnbWVudCBjYW4gaGF2ZQogICAgIC8vIDEuIG5l
dyBsaW5lIGNoYXJhY3RlciB3aGVuIHByZXNlcnZlTmV3bGluZSBpcyBvbiAobm90IGNvbnNpZGVy
ZWQgYXMgd2hpdGVzcGFjZSkgb3IKICAgICAvLyAyLiB3aGl0ZXNwYWNlIChjb2xsYXNwZWQsIG5v
bi1jb2xsYXBzZWQgbXVsdGkgb3Igc2luZ2xlKSBvcgogICAgIC8vIDMuIG5vbi13aGl0ZXNwYWNl
IGNoYXJhY3RlcnMuCisgICAgY29uc3QgU3R5bGUgc3R5bGUgPSBjb250ZW50SXRlcmF0b3Iuc3R5
bGUoKTsKICAgICBUZXh0RnJhZ21lbnQgZnJhZ21lbnQ7Ci0gICAgZnJhZ21lbnQubXVzdEJyZWFr
ID0gc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHRleHRbcHJldmlvdXNGcmFnbWVudEVuZF0gPT0g
J1xuJzsKKyAgICBmcmFnbWVudC5tdXN0QnJlYWsgPSBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYg
Y29udGVudEl0ZXJhdG9yLmlzTmV3bGluZUNoYXJhY3RlcihwcmV2aW91c0ZyYWdtZW50RW5kKTsK
ICAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsKICAgICB1bnNpZ25lZCB3aGl0ZXNwYWNlRW5k
ID0gcHJldmlvdXNGcmFnbWVudEVuZDsKICAgICBpZiAoIWZyYWdtZW50Lm11c3RCcmVhaykKLSAg
ICAgICAgd2hpdGVzcGFjZUVuZCA9IHNraXBXaGl0ZXNwYWNlKHRleHQsIHByZXZpb3VzRnJhZ21l
bnRFbmQsIHRleHRMZW5ndGgsIHN0eWxlLnByZXNlcnZlTmV3bGluZSwgc3BhY2VDb3VudCk7Cisg
ICAgICAgIHdoaXRlc3BhY2VFbmQgPSBjb250ZW50SXRlcmF0b3IuZmluZE5leHROb25XaGl0ZXNw
YWNlUG9zaXRpb24ocHJldmlvdXNGcmFnbWVudEVuZCwgc3BhY2VDb3VudCk7CiAgICAgZnJhZ21l
bnQuaXNXaGl0ZXNwYWNlT25seSA9IHByZXZpb3VzRnJhZ21lbnRFbmQgPCB3aGl0ZXNwYWNlRW5k
OwogICAgIGZyYWdtZW50LnN0YXJ0ID0gcHJldmlvdXNGcmFnbWVudEVuZDsKICAgICBpZiAoZnJh
Z21lbnQuaXNXaGl0ZXNwYWNlT25seSkKQEAgLTUyMCw3ICs1NjIsNyBAQCBzdGF0aWMgVGV4dEZy
YWdtZW50IG5leHRGcmFnbWVudCh1bnNpZ25lZCBwcmV2aW91c0ZyYWdtZW50RW5kLCBMYXp5TGlu
ZUJyZWFrSXRlcgogICAgIGVsc2UgaWYgKGZyYWdtZW50Lm11c3RCcmVhaykKICAgICAgICAgZnJh
Z21lbnQuZW5kID0gZnJhZ21lbnQuc3RhcnQgKyAxOwogICAgIGVsc2UKLSAgICAgICAgZnJhZ21l
bnQuZW5kID0gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPENoYXJhY3RlclR5cGUsIGZhbHNlPihsaW5l
QnJlYWtJdGVyYXRvciwgdGV4dCwgdGV4dExlbmd0aCwgcHJldmlvdXNGcmFnbWVudEVuZCArIDEp
OworICAgICAgICBmcmFnbWVudC5lbmQgPSBjb250ZW50SXRlcmF0b3IuZmluZE5leHRCcmVha2Fi
bGVQb3NpdGlvbihwcmV2aW91c0ZyYWdtZW50RW5kICsgMSk7CiAgICAgYm9vbCBtdWx0aXBsZSA9
IGZyYWdtZW50LnN0YXJ0ICsgMSA8IGZyYWdtZW50LmVuZDsKICAgICBmcmFnbWVudC5pc0NvbGxh
cHNlZFdoaXRlc3BhY2UgPSBtdWx0aXBsZSAmJiBmcmFnbWVudC5pc1doaXRlc3BhY2VPbmx5ICYm
IHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKICAgICAvLyBOb24tY29sbGFwc2VkIHdoaXRlc3Bh
Y2Ugb3IganVzdCBwbGFpbiB3b3JkcyB3aGVuICJicmVhayB3b3JkIG9uIG92ZXJmbG93IiBpcyBv
biBjYW4gd3JhcC4KQEAgLTUzNSwxOCArNTc3LDE4IEBAIHN0YXRpYyBUZXh0RnJhZ21lbnQgbmV4
dEZyYWdtZW50KHVuc2lnbmVkIHByZXZpb3VzRnJhZ21lbnRFbmQsIExhenlMaW5lQnJlYWtJdGVy
CiAgICAgZWxzZSBpZiAoZnJhZ21lbnRMZW5ndGggPT0gc3BhY2VDb3VudCkgLy8gU3BhY2Ugb25s
eS4KICAgICAgICAgZnJhZ21lbnQud2lkdGggPSBzdHlsZS5zcGFjZVdpZHRoICogc3BhY2VDb3Vu
dDsKICAgICBlbHNlCi0gICAgICAgIGZyYWdtZW50LndpZHRoID0gdGV4dFdpZHRoKHRleHRSZW5k
ZXJlciwgdGV4dCwgdGV4dExlbmd0aCwgZnJhZ21lbnQuc3RhcnQsIGZyYWdtZW50LmVuZCwgeFBv
c2l0aW9uLCBzdHlsZSk7CisgICAgICAgIGZyYWdtZW50LndpZHRoID0gY29udGVudEl0ZXJhdG9y
LnRleHRXaWR0aChmcmFnbWVudC5zdGFydCwgZnJhZ21lbnQuZW5kLCB4UG9zaXRpb24pOwogICAg
IHJldHVybiBmcmFnbWVudDsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1ib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZl
Y3RvciYgbGluZVJ1bnMsIExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGluZUJyZWFrSXRlcmF0b3Is
IGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwKLSAgICB1bnNp
Z25lZCB0ZXh0TGVuZ3RoLCBjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIpCitib29sIGNy
ZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGlu
ZVJ1bnMsIEZsb3dDb250ZW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGNvbnRlbnRJdGVyYXRv
cikKIHsKKyAgICBjb25zdCBTdHlsZSYgc3R5bGUgPSBjb250ZW50SXRlcmF0b3Iuc3R5bGUoKTsK
ICAgICBib29sIGxpbmVDYW5CZVdyYXBwZWQgPSBzdHlsZS53cmFwTGluZXMgfHwgc3R5bGUuYnJl
YWtXb3JkT25PdmVyZmxvdzsKLSAgICB3aGlsZSAobGluZVN0YXRlLnBvc2l0aW9uIDwgdGV4dExl
bmd0aCkgeworICAgIHdoaWxlICghY29udGVudEl0ZXJhdG9yLmlzRW5kT2ZDb250ZW50KGxpbmVT
dGF0ZS5wb3NpdGlvbikpIHsKICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50
LiBTdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGZyYWdtZW50IC1jdXJyZW50IGxp
bmUgZW5kLgotICAgICAgICBUZXh0RnJhZ21lbnQgZnJhZ21lbnQgPSBuZXh0RnJhZ21lbnQobGlu
ZVN0YXRlLnBvc2l0aW9uLCBsaW5lQnJlYWtJdGVyYXRvciwgc3R5bGUsIHRleHQsIHRleHRMZW5n
dGgsIGxpbmVTdGF0ZS53aWR0aCgpLCB0ZXh0UmVuZGVyZXIpOworICAgICAgICBUZXh0RnJhZ21l
bnQgZnJhZ21lbnQgPSBuZXh0RnJhZ21lbnQobGluZVN0YXRlLnBvc2l0aW9uLCBjb250ZW50SXRl
cmF0b3IsIGxpbmVTdGF0ZS53aWR0aCgpKTsKICAgICAgICAgaWYgKChsaW5lQ2FuQmVXcmFwcGVk
ICYmICFsaW5lU3RhdGUuZml0cyhmcmFnbWVudC53aWR0aCkpIHx8IGZyYWdtZW50Lm11c3RCcmVh
aykgewogICAgICAgICAgICAgLy8gT3ZlcmZsb3cgd3JhcHBpbmcgYmVoYXZpb3VyOgogICAgICAg
ICAgICAgLy8gMS4gTmV3bGluZSBjaGFyYWN0ZXI6IHdyYXBzIHRoZSBsaW5lIHVubGVzcyBpdCdz
IHRyZWF0ZWQgYXMgd2hpdGVzcGFjZS4KQEAgLTU2OCw3ICs2MTAsNyBAQCBib29sIGNyZWF0ZUxp
bmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMs
IExhenlMaW5lQgogICAgICAgICAgICAgfSBlbHNlIGlmIChmcmFnbWVudC5pc1doaXRlc3BhY2VP
bmx5IHx8ICgoaXNGaXJzdEZyYWdtZW50ICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8
ICFzdHlsZS53cmFwTGluZXMpKSB7IC8vICFzdHlsZS53cmFwTGluZXM6IGJ1ZzEzODEwMihwcmVz
ZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKICAgICAgICAgICAgICAgICAvLyBXaGl0ZXNwYWNlIGNv
bGxhcHNlIGlzIG9mZiBvciBub24td2hpdGVzcGFjZSBjb250ZW50LiBzcGxpdCB0aGUgZnJhZ21l
bnQ7IChtb2RpZmllZClmcmFnbWVudCAtPiB0aGlzIGxpbmVTdGF0ZSwgb3ZlZmxvd2VkRnJhZ21l
bnQgLT4gbmV4dCBsaW5lLgogICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBpcyB0aGUgb25s
eSAoZmlyc3QpIGZyYWdtZW50LCB0aGUgZmlyc3QgY2hhcmFjdGVyIHN0YXlzIG9uIHRoZSBsaW5l
LCBldmVuIGlmIGl0IGRvZXMgbm90IGZpdC4KLSAgICAgICAgICAgICAgICBsaW5lU3RhdGUub3Zl
Zmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lU3Rh
dGUuYXZhaWxhYmxlV2lkdGggLSBsaW5lU3RhdGUud2lkdGgoKSwgaXNGaXJzdEZyYWdtZW50LCB0
ZXh0UmVuZGVyZXIsIHRleHQsIHRleHRMZW5ndGgsIHN0eWxlKTsKKyAgICAgICAgICAgICAgICBs
aW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21lbnQgPSBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdt
ZW50LCBsaW5lU3RhdGUuYXZhaWxhYmxlV2lkdGggLSBsaW5lU3RhdGUud2lkdGgoKSwgaXNGaXJz
dEZyYWdtZW50LCBjb250ZW50SXRlcmF0b3IpOwogICAgICAgICAgICAgICAgIGlmICghZnJhZ21l
bnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21l
bnRzIGNhbiBnZXQgcHVzaGVkIGVudGlyZWx5IHRvIHRoZSBuZXh0IGxpbmUuCiAgICAgICAgICAg
ICAgICAgICAgIGxpbmVTdGF0ZS5hZGRVbmNvbW1pdHRlZChmcmFnbWVudCk7CkBAIC01OTMsMjAg
KzYzNSwxOSBAQCBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlv
dXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIExhenlMaW5lQgogICAgICAgICAgICAgbGluZVN0YXRl
LmFkZFVuY29tbWl0dGVkKGZyYWdtZW50KTsKICAgICB9CiAgICAgbGluZVN0YXRlLmNvbW1pdEFu
ZENyZWF0ZVJ1bihsaW5lUnVucyk7Ci0gICAgcmV0dXJuIGxpbmVTdGF0ZS5wb3NpdGlvbiA+PSB0
ZXh0TGVuZ3RoICYmIGxpbmVTdGF0ZS5vdmVmbG93ZWRGcmFnbWVudC5pc0VtcHR5KCk7CisgICAg
cmV0dXJuIGNvbnRlbnRJdGVyYXRvci5pc0VuZE9mQ29udGVudChsaW5lU3RhdGUucG9zaXRpb24p
ICYmIGxpbmVTdGF0ZS5vdmVmbG93ZWRGcmFnbWVudC5pc0VtcHR5KCk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5k
QWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVS
dW5zLCB1bnNpZ25lZCYgbGluZUNvdW50LAotICAgIGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgdGV4dExlbmd0aCkKK3ZvaWQgY2xvc2VMaW5l
RW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0
b3ImIGxpbmVSdW5zLCB1bnNpZ25lZCYgbGluZUNvdW50LCBjb25zdCBGbG93Q29udGVudEl0ZXJh
dG9yPENoYXJhY3RlclR5cGU+JiBjb250ZW50SXRlcmF0b3IpCiB7CiAgICAgaWYgKGxpbmVTdGF0
ZS5saW5lU3RhcnRSdW5JbmRleCA9PSBsaW5lUnVucy5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEFTU0VSVChsaW5lUnVucy5zaXplKCkpOwotICAgIHJlbW92ZVRyYWlsaW5nV2hpdGVz
cGFjZShsaW5lU3RhdGUsIGxpbmVSdW5zLCBzdHlsZSwgdGV4dCwgdGV4dExlbmd0aCk7CisgICAg
cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKGxpbmVTdGF0ZSwgbGluZVJ1bnMsIGNvbnRlbnRJdGVy
YXRvcik7CiAgICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxp
Z25tZW50IGludG8gYWNjb3VudC4KLSAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0gY29t
cHV0ZUxpbmVMZWZ0KHN0eWxlLnRleHRBbGlnbiwgbGluZVN0YXRlLmF2YWlsYWJsZVdpZHRoLCBs
aW5lU3RhdGUuY29tbWl0dGVkV2lkdGgsIGxpbmVTdGF0ZS5sb2dpY2FsTGVmdE9mZnNldCkpIHsK
KyAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0gY29tcHV0ZUxpbmVMZWZ0KGNvbnRlbnRJ
dGVyYXRvci5zdHlsZSgpLnRleHRBbGlnbiwgbGluZVN0YXRlLmF2YWlsYWJsZVdpZHRoLCBsaW5l
U3RhdGUuY29tbWl0dGVkV2lkdGgsIGxpbmVTdGF0ZS5sb2dpY2FsTGVmdE9mZnNldCkpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGluZVN0YXRlLmxpbmVTdGFydFJ1bkluZGV4OyBpIDwg
bGluZVJ1bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGxpbmVSdW5zW2ldLmxvZ2ljYWxM
ZWZ0ICs9IGxpbmVMb2dpY2FsTGVmdDsKICAgICAgICAgICAgIGxpbmVSdW5zW2ldLmxvZ2ljYWxS
aWdodCArPSBsaW5lTG9naWNhbExlZnQ7CkBAIC02MjgsMzkgKzY2OSwzNSBAQCBzdGF0aWMgdm9p
ZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGZsb2F0
JiBhdmFpbGFibGVXaQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZv
aWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIHVuc2lnbmVkJiBsaW5l
Q291bnQsIFJlbmRlckJsb2NrRmxvdyYgZmxvdywgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyKQor
dm9pZCBjcmVhdGVUZXh0UnVucyhMYXlvdXQ6OlJ1blZlY3RvciYgcnVucywgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCB1bnNpZ25lZCYgbGluZUNvdW50KQogewotICAgIGNvbnN0IFN0eWxlIHN0eWxl
KGZsb3cuc3R5bGUoKSk7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCA9IHRleHRSZW5k
ZXJlci50ZXh0KCktPmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBjb25zdCB1bnNp
Z25lZCB0ZXh0TGVuZ3RoID0gdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKTsKICAgICBMYXlvdXRV
bml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUgPSBmbG93LmJvcmRlckFuZFBhZGRpbmdCZWZvcmUo
KTsKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7
Ci0gICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGxpbmVCcmVha0l0ZXJhdG9yKHRleHRSZW5kZXJl
ci50ZXh0KCksIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSk7CiAgICAgTGluZVN0YXRlIGxpbmVTdGF0
ZTsKICAgICBib29sIGlzRW5kT2ZDb250ZW50ID0gZmFsc2U7CisgICAgRmxvd0NvbnRlbnRJdGVy
YXRvcjxDaGFyYWN0ZXJUeXBlPiBjb250ZW50SXRlcmF0b3IgPSBGbG93Q29udGVudEl0ZXJhdG9y
PENoYXJhY3RlclR5cGU+KGZsb3cpOwogCiAgICAgZG8gewogICAgICAgICBmbG93LnNldExvZ2lj
YWxIZWlnaHQobGluZUhlaWdodCAqIGxpbmVDb3VudCArIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUp
OwogICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lU3RhdGUuYXZhaWxhYmxl
V2lkdGgsIGxpbmVTdGF0ZS5sb2dpY2FsTGVmdE9mZnNldCk7Ci0gICAgICAgIGluaXRpYWxpemVO
ZXdMaW5lKGxpbmVTdGF0ZSwgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgsIHJ1bnMuc2l6ZSgpKTsK
LSAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lU3RhdGUsIHJ1bnMs
IGxpbmVCcmVha0l0ZXJhdG9yLCBzdHlsZSwgdGV4dCwgdGV4dExlbmd0aCwgdGV4dFJlbmRlcmVy
KTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lU3RhdGUsIHJ1bnMs
IGxpbmVDb3VudCwgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgpOworICAgICAgICBpbml0aWFsaXpl
TmV3TGluZShsaW5lU3RhdGUsIGNvbnRlbnRJdGVyYXRvciwgcnVucy5zaXplKCkpOworICAgICAg
ICBpc0VuZE9mQ29udGVudCA9IGNyZWF0ZUxpbmVSdW5zKGxpbmVTdGF0ZSwgcnVucywgY29udGVu
dEl0ZXJhdG9yKTsKKyAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lU3Rh
dGUsIHJ1bnMsIGxpbmVDb3VudCwgY29udGVudEl0ZXJhdG9yKTsKICAgICB9IHdoaWxlICghaXNF
bmRPZkNvbnRlbnQpOwogICAgIEFTU0VSVCghbGluZVN0YXRlLnVuY29tbWl0dGVkV2lkdGgpOwog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0PiBjcmVhdGUoUmVuZGVyQmxvY2tGbG93JiBmbG93
KQogewotICAgIExheW91dDo6UnVuVmVjdG9yIHJ1bnM7CiAgICAgdW5zaWduZWQgbGluZUNvdW50
ID0gMDsKLQorICAgIExheW91dDo6UnVuVmVjdG9yIHJ1bnM7CiAgICAgUmVuZGVyVGV4dCYgdGV4
dFJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZsb3cuZmlyc3RDaGlsZCgpKTsKICAg
ICBBU1NFUlQoIXRleHRSZW5kZXJlci5maXJzdFRleHRCb3goKSk7CiAKICAgICBpZiAodGV4dFJl
bmRlcmVyLmlzOEJpdCgpKQotICAgICAgICBjcmVhdGVUZXh0UnVuczxMQ2hhcj4ocnVucywgbGlu
ZUNvdW50LCBmbG93LCB0ZXh0UmVuZGVyZXIpOworICAgICAgICBjcmVhdGVUZXh0UnVuczxMQ2hh
cj4ocnVucywgZmxvdywgbGluZUNvdW50KTsKICAgICBlbHNlCi0gICAgICAgIGNyZWF0ZVRleHRS
dW5zPFVDaGFyPihydW5zLCBsaW5lQ291bnQsIGZsb3csIHRleHRSZW5kZXJlcik7CisgICAgICAg
IGNyZWF0ZVRleHRSdW5zPFVDaGFyPihydW5zLCBmbG93LCBsaW5lQ291bnQpOwogCiAgICAgdGV4
dFJlbmRlcmVyLmNsZWFyTmVlZHNMYXlvdXQoKTsKICAgICByZXR1cm4gTGF5b3V0OjpjcmVhdGUo
cnVucywgbGluZUNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dC5oCmluZGV4IGRmYmIwMTk3ZDE0NDhlNTA5ZDExMjZhYjdmMTNhYzc0MWRkNzk5OTMuLjY2
OTgwMDBmZDg4ZWI1YzNkZTAwZjBjMzRhNjMwMGM4MmQyNGMyZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaApAQCAtNDMsNyArNDMsOSBAQCBuYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7CiBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmKTsKIAogc3RydWN0IFJ1biB7CisjaWYgQ09NUElMRVIoTVNWQykKICAgICBSdW4oKSB7IH0K
KyNlbmRpZgogICAgIFJ1bih1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCBsb2dp
Y2FsTGVmdCwgZmxvYXQgbG9naWNhbFJpZ2h0LCBib29sIGlzRW5kT2ZMaW5lKQogICAgICAgICA6
IHN0YXJ0KHN0YXJ0KQogICAgICAgICAsIGVuZChlbmQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240974</attachid>
            <date>2014-11-04 16:03:52 -0800</date>
            <delta_ts>2014-11-04 19:47:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138346-20141104160402.patch</filename>
            <type>text/plain</type>
            <size>20609</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE0MjU2N2NiYzEwOGE0
MjI5NmYyNzc5ODU3ZTkzNDhjMGY4NzE1Ny4uNzEzNGVkZDRmMTViM2Q2NWUyYzk4NTQ4NjQ1OGE1
ZjAxN2NhNTY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDE0LTExLTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBBYnN0cmFjdCBvdXQgY29udGVudCBpdGVyYXRpb24gYW5kIHRleHQgaGFuZGxpbmcgaW4gZ2Vu
ZXJhbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
ODM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEFk
ZCBhIGNsYXNzIHRoYXQgY2FuIGFjdCBhcyB0aGUgcHJpbWFyeSBpdGVyYXRvci9mcmFnbWVudCBo
YW5kbGluZyBpbnRlcmZhY2UgdG8gdGhlIGxpbmUgcGFyc2VyLgorICAgICAgICBUaGlzIGhlbHBz
IGFkZGluZyBzdXBwb3J0IG11bHRpcGxlIHJlbmRlcmVyIGVsZW1lbnRzIHdpdGhvdXQgY2hhbmdp
bmcgdGhlIHBhcnNlciBsb2dpYy4KKyAgICAgICAgQ3VycmVudGx5IGl0IG9wZXJhdGVzIHN0cmlj
dGx5IG9uIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgUmVuZGVyQmxvY2tGbG93LiAgCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZs
b3dDb250ZW50SXRlcmF0b3I6OkZsb3dDb250ZW50SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRJdGVyYXRvcjo6ZmluZE5leHRCcmVha2Fi
bGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29u
dGVudEl0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRJdGVyYXRv
cjo6aXNOZXdsaW5lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50SXRlcmF0b3I6OmlzRW5kT2ZDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50SXRlcmF0b3I6OnN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVMaW5lTGVmdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnQ6OlRleHRGcmFnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpyZW1vdmVUcmFpbGluZ1doaXRl
c3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6aW5pdGlhbGl6ZU5l
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c3BsaXRGcmFnbWVu
dFRvRml0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpuZXh0RnJh
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGluZVJ1
bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5kaW5n
QW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVh
dGVUZXh0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6c2tpcFdoaXRlc3BhY2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6dGV4dFdpZHRoKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oOgorCisyMDE0
LTExLTA0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAgV2luZG93
cyBidWlsZCBmaXggYWZ0ZXIgcjE3NTU2NS4KIAogICAgICAgICBNU1ZDIHJlcXVpcmVzIGRlZmF1
bHQgYyd0b3IgZXZlbiBpZiBpdCdzIG5ldmVyIGNhbGxlZC4gLTAgbGVuZ3RoIGFycmF5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4IDAyOGQ2
MzdmYmM3Yzg3ZTE4YWQ3Y2YwY2ViNjk3NTU2NzRiZTBlOWYuLmY1ZDg0Y2I5ZmZlZDc0ODRjYThh
NWU1NTZlNDJmM2IxMjNjNDQxYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5jcHAKQEAgLTIxNCwzNCArMjE0LDczIEBAIHN0cnVjdCBTdHlsZSB7CiB9
OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgc2tpcFdoaXRlc3BhY2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgcHJlc2VydmVOZXdsaW5lLCB1bnNpZ25lZCYg
c3BhY2VDb3VudCkKLXsKLSAgICBzcGFjZUNvdW50ID0gMDsKLSAgICBmb3IgKDsgb2Zmc2V0IDwg
bGVuZ3RoOyArK29mZnNldCkgewotICAgICAgICBib29sIGlzU3BhY2UgPSB0ZXh0W29mZnNldF0g
PT0gJyAnOwotICAgICAgICBpZiAoIShpc1NwYWNlIHx8IHRleHRbb2Zmc2V0XSA9PSAnXHQnIHx8
ICghcHJlc2VydmVOZXdsaW5lICYmIHRleHRbb2Zmc2V0XSA9PSAnXG4nKSkpCi0gICAgICAgICAg
ICByZXR1cm4gb2Zmc2V0OwotICAgICAgICBpZiAoaXNTcGFjZSkKLSAgICAgICAgICAgICsrc3Bh
Y2VDb3VudDsKK2NsYXNzIEZsb3dDb250ZW50SXRlcmF0b3IgeworcHVibGljOgorICAgIEZsb3dD
b250ZW50SXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQorICAgICAgICA6IG1f
ZmxvdyhmbG93KQorICAgICAgICAsIG1fc3R5bGUoZmxvdy5zdHlsZSgpKQorICAgICAgICAsIG1f
bGluZUJyZWFrSXRlcmF0b3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmZsb3cuZmlyc3RDaGlsZCgp
KS50ZXh0KCksIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKKyAgICB7CiAgICAgfQotICAgIHJldHVy
biBsZW5ndGg7Ci19CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGlj
IGZsb2F0IHRleHRXaWR0aChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0LCBjb25zdCBDaGFy
YWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCB0ZXh0TGVuZ3RoLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgZmxvYXQgeFBvc2l0aW9uLCBjb25zdCBTdHlsZSYgc3R5bGUpCi17Ci0gICAgaWYg
KHN0eWxlLmZvbnQuaXNGaXhlZFBpdGNoKCkgfHwgKCFmcm9tICYmIHRvID09IHRleHRMZW5ndGgp
KQotICAgICAgICByZXR1cm4gcmVuZGVyVGV4dC53aWR0aChmcm9tLCB0byAtIGZyb20sIHN0eWxl
LmZvbnQsIHhQb3NpdGlvbiwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgdW5zaWduZWQgZmluZE5l
eHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIFN0
cmluZyBzdHJpbmcgPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpOworICAgICAgICByZXR1
cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uPENoYXJhY3RlclR5cGUsIGZhbHNlPihtX2xpbmVCcmVh
a0l0ZXJhdG9yLCBzdHJpbmcuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpLCBzdHJpbmcubGVu
Z3RoKCksIHBvc2l0aW9uKTsKKyAgICB9CiAKLSAgICBUZXh0UnVuIHJ1bih0ZXh0ICsgZnJvbSwg
dG8gLSBmcm9tKTsKLSAgICBydW4uc2V0WFBvcyh4UG9zaXRpb24pOwotICAgIHJ1bi5zZXRDaGFy
YWN0ZXJzTGVuZ3RoKHRleHRMZW5ndGggLSBmcm9tKTsKLSAgICBydW4uc2V0VGFiU2l6ZSghIXN0
eWxlLnRhYldpZHRoLCBzdHlsZS50YWJXaWR0aCk7CisgICAgdW5zaWduZWQgZmluZE5leHROb25X
aGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50
KSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0
b3Iuc3RyaW5nKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsK
KyAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCA9IHN0cmluZy5jaGFyYWN0ZXJzPENo
YXJhY3RlclR5cGU+KCk7CisgICAgICAgIHNwYWNlQ291bnQgPSAwOworICAgICAgICBmb3IgKDsg
cG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGJvb2wgaXNTcGFj
ZSA9IHRleHRbcG9zaXRpb25dID09ICcgJzsKKyAgICAgICAgICAgIGlmICghKGlzU3BhY2UgfHwg
dGV4dFtwb3NpdGlvbl0gPT0gJ1x0JyB8fCAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIHRl
eHRbcG9zaXRpb25dID09ICdcbicpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247
CisgICAgICAgICAgICBpZiAoaXNTcGFjZSkKKyAgICAgICAgICAgICAgICArK3NwYWNlQ291bnQ7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CiAKLSAgICBBU1NFUlQo
cnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOworICAgIGZsb2F0IHRleHRX
aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAor
ICAgIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5n
KCk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAg
aWYgKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSB8fCAoIWZyb20gJiYgdG8gPT0gbGVuZ3Ro
KSkgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIgPSBkb3duY2FzdDxS
ZW5kZXJUZXh0PigqbV9mbG93LmZpcnN0Q2hpbGQoKSk7CisgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyZXIud2lkdGgoZnJvbSwgdG8gLSBmcm9tLCBtX3N0eWxlLmZvbnQsIHhQb3NpdGlvbiwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICBUZXh0UnVuIHJ1bihzdHJpbmcu
Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICAgICAg
cnVuLnNldFhQb3MoeFBvc2l0aW9uKTsKKyAgICAgICAgcnVuLnNldENoYXJhY3RlcnNMZW5ndGgo
bGVuZ3RoIC0gZnJvbSk7CisgICAgICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHlsZS50YWJXaWR0
aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVyc0xlbmd0
aCgpID49IHJ1bi5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBtX3N0eWxlLmZvbnQud2lkdGgo
cnVuKTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3bGluZUNoYXJhY3Rlcih1bnNpZ25lZCBwb3Np
dGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xpbmVCcmVha0l0ZXJhdG9yLnN0
cmluZygpLmxlbmd0aCgpID4gcG9zaXRpb24pOworICAgICAgICByZXR1cm4gbV9saW5lQnJlYWtJ
dGVyYXRvci5zdHJpbmcoKS5hdChwb3NpdGlvbikgPT0gJ1xuJzsKKyAgICB9CisKKyAgICBib29s
IGlzRW5kT2ZDb250ZW50KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHBvc2l0aW9uID49IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkubGVuZ3RoKCk7
CisgICAgfQorCisgICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgbV9mbG93OworICAg
IFN0eWxlIG1fc3R5bGU7CisgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIG1fbGluZUJyZWFrSXRl
cmF0b3I7Cit9OwogCi0gICAgcmV0dXJuIHN0eWxlLmZvbnQud2lkdGgocnVuKTsKLX0KIAogc3Rh
dGljIGZsb2F0IGNvbXB1dGVMaW5lTGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZh
aWxhYmxlV2lkdGgsIGZsb2F0IGNvbW1pdHRlZFdpZHRoLCBmbG9hdCBsb2dpY2FsTGVmdE9mZnNl
dCkKIHsKQEAgLTI2MCw2ICsyOTksNyBAQCBzdGF0aWMgZmxvYXQgY29tcHV0ZUxpbmVMZWZ0KEVU
ZXh0QWxpZ24gdGV4dEFsaWduLCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgYwogICAgIGNh
c2UgV0VCS0lUX0NFTlRFUjoKICAgICAgICAgcmV0dXJuIGxlZnQgKyBzdGQ6Om1heDxmbG9hdD4o
cmVtYWluaW5nV2lkdGggLyAyLCAwKTsKICAgICBjYXNlIEpVU1RJRlk6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yNzUsNyArMzE1LDggQEAgc3RydWN0IFRleHRGcmFnbWVudCB7CiAgICAg
ICAgICwgaXNCcmVha2FibGUoZmFsc2UpCiAgICAgICAgICwgbXVzdEJyZWFrKGZhbHNlKQogICAg
ICAgICAsIHdpZHRoKDApCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIFRleHRGcmFnbWVu
dCh1bnNpZ25lZCB0ZXh0U3RhcnQsIHVuc2lnbmVkIHRleHRFbmQsIGZsb2F0IHRleHRXaWR0aCwg
Ym9vbCBpc1doaXRlc3BhY2VPbmx5KQogICAgICAgICA6IHN0YXJ0KHRleHRTdGFydCkKQEAgLTI4
NSw3ICszMjYsOCBAQCBzdHJ1Y3QgVGV4dEZyYWdtZW50IHsKICAgICAgICAgLCBpc0JyZWFrYWJs
ZShmYWxzZSkKICAgICAgICAgLCBtdXN0QnJlYWsoZmFsc2UpCiAgICAgICAgICwgd2lkdGgodGV4
dFdpZHRoKQotICAgIHsgfQorICAgIHsKKyAgICB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dAogICAgIHsKQEAgLTM5Nyw4ICs0MzksOSBAQCBzdHJ1Y3QgTGluZVN0YXRlIHsKIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIHZvaWQgcmVtb3ZlVHJhaWxp
bmdXaGl0ZXNwYWNlKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGlu
ZVJ1bnMsIGNvbnN0IFN0eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5z
aWduZWQgdGV4dExlbmd0aCkKK3ZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKExpbmVTdGF0
ZSYgbGluZVN0YXRlLCBMYXlvdXQ6OlJ1blZlY3RvciYgbGluZVJ1bnMsIGNvbnN0IEZsb3dDb250
ZW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4mIGNvbnRlbnRJdGVyYXRvcikKIHsKKyAgICBjb25z
dCBhdXRvJiBzdHlsZSA9IGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpOwogICAgIGJvb2wgcHJlV3Jh
cCA9IHN0eWxlLndyYXBMaW5lcyAmJiAhc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwogICAgIC8v
IFRyYWlsaW5nIHdoaXRlc3BhY2UgZ2V0cyByZW1vdmVkIHdoZW4gd2UgZWl0aGVyIGNvbGxhcHNl
IHdoaXRlc3BhY2Ugb3IgcHJlLXdyYXAgaXMgcHJlc2VudC4KICAgICBpZiAoIShzdHlsZS5jb2xs
YXBzZVdoaXRlc3BhY2UgfHwgcHJlV3JhcCkpIHsKQEAgLTQzNCwxMiArNDc3LDEyIEBAIHN0YXRp
YyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5
b3V0OjpSdW5WZWN0b3ImIGxpCiAgICAgfQogCiAgICAgLy8gSWYgd2Ugc2tpcHBlZCBhbnkgd2hp
dGVzcGFjZSBhbmQgbm93IHRoZSBsaW5lIGVuZCBpcyBhICJwcmVzZXJ2ZWQiIG5ld2xpbmUsIHNr
aXAgdGhlIG5ld2xpbmUgdG9vIGFzIHdlIGFyZSB3cmFwcGluZyB0aGUgbGluZSBoZXJlIGFscmVh
ZHkuCi0gICAgaWYgKGxhc3RQb3NpdGlvbiAhPSBsaW5lU3RhdGUucG9zaXRpb24gJiYgc3R5bGUu
cHJlc2VydmVOZXdsaW5lICYmIGxpbmVTdGF0ZS5wb3NpdGlvbiA8IHRleHRMZW5ndGggJiYgdGV4
dFtsaW5lU3RhdGUucG9zaXRpb25dID09ICdcbicpCisgICAgaWYgKGxhc3RQb3NpdGlvbiAhPSBs
aW5lU3RhdGUucG9zaXRpb24gJiYgc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNvbnRlbnRJdGVy
YXRvci5pc05ld2xpbmVDaGFyYWN0ZXIobGluZVN0YXRlLnBvc2l0aW9uKSkKICAgICAgICAgKyts
aW5lU3RhdGUucG9zaXRpb247CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU5ld0xpbmUoTGluZVN0YXRlJiBsaW5lU3RhdGUsIGNv
bnN0IFN0eWxlJiBzdHlsZSwgY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgdGV4
dExlbmd0aCwgdW5zaWduZWQgbGluZVN0YXJ0UnVuSW5kZXgpCit2b2lkIGluaXRpYWxpemVOZXdM
aW5lKExpbmVTdGF0ZSYgbGluZVN0YXRlLCBjb25zdCBGbG93Q29udGVudEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+JiBjb250ZW50SXRlcmF0b3IsIHVuc2lnbmVkIGxpbmVTdGFydFJ1bkluZGV4KQog
ewogICAgIGxpbmVTdGF0ZS5saW5lU3RhcnRSdW5JbmRleCA9IGxpbmVTdGFydFJ1bkluZGV4Owog
ICAgIC8vIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlIGlmIGNvbGxhcHNpbmcgd2hpdGVzcGFjZSwg
dW5sZXNzIHRoZXJlJ3MgYW4gdW5jb21taXR0ZWQgZnJhZ21lbnQgcHVzaGVkIGZyb20gdGhlIHBy
ZXZpb3VzIGxpbmUuCkBAIC00NTEsMTQgKzQ5NCwxMyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
TmV3TGluZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgY29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBD
aAogICAgICAgICAgICAgbGluZVN0YXRlLmp1bXBUbyhsaW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21l
bnQuc3RhcnQsIDApOyAvLyBTdGFydCBvdmVyIHdpdGggdGhpcyBmcmFnbWVudC4KICAgICB9IGVs
c2UgewogICAgICAgICB1bnNpZ25lZCBzcGFjZUNvdW50ID0gMDsKLSAgICAgICAgbGluZVN0YXRl
Lmp1bXBUbyhzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgPyBza2lwV2hpdGVzcGFjZSh0ZXh0LCBs
aW5lU3RhdGUucG9zaXRpb24sIHRleHRMZW5ndGgsIHN0eWxlLnByZXNlcnZlTmV3bGluZSwgc3Bh
Y2VDb3VudCkgOiBsaW5lU3RhdGUucG9zaXRpb24sIDApOworICAgICAgICBsaW5lU3RhdGUuanVt
cFRvKGNvbnRlbnRJdGVyYXRvci5zdHlsZSgpLmNvbGxhcHNlV2hpdGVzcGFjZSA/IGNvbnRlbnRJ
dGVyYXRvci5maW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihsaW5lU3RhdGUucG9zaXRpb24s
IHNwYWNlQ291bnQpIDogbGluZVN0YXRlLnBvc2l0aW9uLCAwKTsKICAgICB9CiAgICAgbGluZVN0
YXRlLm92ZWZsb3dlZEZyYWdtZW50ID0gVGV4dEZyYWdtZW50KCk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIFRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50
VG9GaXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LCBmbG9hdCBhdmFpbGFibGVX
aWR0aCwgYm9vbCBrZWVwQXRMZWFzdE9uZUNoYXJhY3RlciwgY29uc3QgUmVuZGVyVGV4dCYgdGV4
dFJlbmRlcmVyLAotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIHRleHRM
ZW5ndGgsIGNvbnN0IFN0eWxlJiBzdHlsZSkKK1RleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9G
aXRMaW5lKFRleHRGcmFnbWVudCYgZnJhZ21lbnRUb1NwbGl0LCBmbG9hdCBhdmFpbGFibGVXaWR0
aCwgYm9vbCBrZWVwQXRMZWFzdE9uZUNoYXJhY3RlciwgY29uc3QgRmxvd0NvbnRlbnRJdGVyYXRv
cjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yKQogewogICAgIC8vIEZhc3QgcGF0aCBm
b3Igc2luZ2xlIGNoYXIgZnJhZ21lbnRzLgogICAgIGlmIChmcmFnbWVudFRvU3BsaXQuc3RhcnQg
KyAxID09IGZyYWdtZW50VG9TcGxpdC5lbmQpIHsKQEAgLTQ3Nyw3ICs1MTksNyBAQCBzdGF0aWMg
VGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50JiBmcmFnbWVu
dFRvU3BsaXQsIGZsb2F0CiAgICAgZmxvYXQgd2lkdGggPSAwOwogICAgIHdoaWxlIChsZWZ0IDwg
cmlnaHQpIHsKICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOwot
ICAgICAgICB3aWR0aCA9IHRleHRXaWR0aCh0ZXh0UmVuZGVyZXIsIHRleHQsIHRleHRMZW5ndGgs
IGZyYWdtZW50VG9TcGxpdC5zdGFydCwgbWlkZGxlICsgMSwgMCwgc3R5bGUpOworICAgICAgICB3
aWR0aCA9IGNvbnRlbnRJdGVyYXRvci50ZXh0V2lkdGgoZnJhZ21lbnRUb1NwbGl0LnN0YXJ0LCBt
aWRkbGUgKyAxLCAwKTsKICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoID4gd2lkdGgpCiAgICAg
ICAgICAgICBsZWZ0ID0gbWlkZGxlICsgMTsKICAgICAgICAgZWxzZSBpZiAoYXZhaWxhYmxlV2lk
dGggPCB3aWR0aCkKQEAgLTQ5Miw3ICs1MzQsNyBAQCBzdGF0aWMgVGV4dEZyYWdtZW50IHNwbGl0
RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0CiAg
ICAgICAgICsrcmlnaHQ7CiAgICAgVGV4dEZyYWdtZW50IGZyYWdtZW50Rm9yTmV4dExpbmUoZnJh
Z21lbnRUb1NwbGl0KTsKICAgICBmcmFnbWVudFRvU3BsaXQuZW5kID0gcmlnaHQ7Ci0gICAgZnJh
Z21lbnRUb1NwbGl0LndpZHRoID0gZnJhZ21lbnRUb1NwbGl0LmlzRW1wdHkoKSA/IDAgOiB0ZXh0
V2lkdGgodGV4dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBmcmFnbWVudFRvU3BsaXQuc3Rh
cnQsIHJpZ2h0LCAwLCBzdHlsZSk7CisgICAgZnJhZ21lbnRUb1NwbGl0LndpZHRoID0gZnJhZ21l
bnRUb1NwbGl0LmlzRW1wdHkoKSA/IDAgOiBjb250ZW50SXRlcmF0b3IudGV4dFdpZHRoKGZyYWdt
ZW50VG9TcGxpdC5zdGFydCwgcmlnaHQsIDApOwogCiAgICAgZnJhZ21lbnRGb3JOZXh0TGluZS5z
dGFydCA9IGZyYWdtZW50VG9TcGxpdC5lbmQ7CiAgICAgZnJhZ21lbnRGb3JOZXh0TGluZS53aWR0
aCAtPSBmcmFnbWVudFRvU3BsaXQud2lkdGg7CkBAIC01MDAsMTkgKzU0MiwxOSBAQCBzdGF0aWMg
VGV4dEZyYWdtZW50IHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoVGV4dEZyYWdtZW50JiBmcmFnbWVu
dFRvU3BsaXQsIGZsb2F0CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIFRleHRGcmFnbWVudCBuZXh0RnJhZ21lbnQodW5zaWduZWQgcHJldmlvdXNGcmFnbWVu
dEVuZCwgTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgU3R5
bGUmIHN0eWxlLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCB0ZXh0TGVuZ3Ro
LAotICAgIGZsb2F0IHhQb3NpdGlvbiwgY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyKQor
VGV4dEZyYWdtZW50IG5leHRGcmFnbWVudCh1bnNpZ25lZCBwcmV2aW91c0ZyYWdtZW50RW5kLCBG
bG93Q29udGVudEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBjb250ZW50SXRlcmF0b3IsIGZsb2F0
IHhQb3NpdGlvbikKIHsKICAgICAvLyBBIGZyYWdtZW50IGNhbiBoYXZlCiAgICAgLy8gMS4gbmV3
IGxpbmUgY2hhcmFjdGVyIHdoZW4gcHJlc2VydmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJl
ZCBhcyB3aGl0ZXNwYWNlKSBvcgogICAgIC8vIDIuIHdoaXRlc3BhY2UgKGNvbGxhc3BlZCwgbm9u
LWNvbGxhcHNlZCBtdWx0aSBvciBzaW5nbGUpIG9yCiAgICAgLy8gMy4gbm9uLXdoaXRlc3BhY2Ug
Y2hhcmFjdGVycy4KKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGNvbnRlbnRJdGVyYXRvci5zdHls
ZSgpOwogICAgIFRleHRGcmFnbWVudCBmcmFnbWVudDsKLSAgICBmcmFnbWVudC5tdXN0QnJlYWsg
PSBzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgdGV4dFtwcmV2aW91c0ZyYWdtZW50RW5kXSA9PSAn
XG4nOworICAgIGZyYWdtZW50Lm11c3RCcmVhayA9IHN0eWxlLnByZXNlcnZlTmV3bGluZSAmJiBj
b250ZW50SXRlcmF0b3IuaXNOZXdsaW5lQ2hhcmFjdGVyKHByZXZpb3VzRnJhZ21lbnRFbmQpOwog
ICAgIHVuc2lnbmVkIHNwYWNlQ291bnQgPSAwOwogICAgIHVuc2lnbmVkIHdoaXRlc3BhY2VFbmQg
PSBwcmV2aW91c0ZyYWdtZW50RW5kOwogICAgIGlmICghZnJhZ21lbnQubXVzdEJyZWFrKQotICAg
ICAgICB3aGl0ZXNwYWNlRW5kID0gc2tpcFdoaXRlc3BhY2UodGV4dCwgcHJldmlvdXNGcmFnbWVu
dEVuZCwgdGV4dExlbmd0aCwgc3R5bGUucHJlc2VydmVOZXdsaW5lLCBzcGFjZUNvdW50KTsKKyAg
ICAgICAgd2hpdGVzcGFjZUVuZCA9IGNvbnRlbnRJdGVyYXRvci5maW5kTmV4dE5vbldoaXRlc3Bh
Y2VQb3NpdGlvbihwcmV2aW91c0ZyYWdtZW50RW5kLCBzcGFjZUNvdW50KTsKICAgICBmcmFnbWVu
dC5pc1doaXRlc3BhY2VPbmx5ID0gcHJldmlvdXNGcmFnbWVudEVuZCA8IHdoaXRlc3BhY2VFbmQ7
CiAgICAgZnJhZ21lbnQuc3RhcnQgPSBwcmV2aW91c0ZyYWdtZW50RW5kOwogICAgIGlmIChmcmFn
bWVudC5pc1doaXRlc3BhY2VPbmx5KQpAQCAtNTIwLDcgKzU2Miw3IEBAIHN0YXRpYyBUZXh0RnJh
Z21lbnQgbmV4dEZyYWdtZW50KHVuc2lnbmVkIHByZXZpb3VzRnJhZ21lbnRFbmQsIExhenlMaW5l
QnJlYWtJdGVyCiAgICAgZWxzZSBpZiAoZnJhZ21lbnQubXVzdEJyZWFrKQogICAgICAgICBmcmFn
bWVudC5lbmQgPSBmcmFnbWVudC5zdGFydCArIDE7CiAgICAgZWxzZQotICAgICAgICBmcmFnbWVu
dC5lbmQgPSBuZXh0QnJlYWthYmxlUG9zaXRpb248Q2hhcmFjdGVyVHlwZSwgZmFsc2U+KGxpbmVC
cmVha0l0ZXJhdG9yLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBwcmV2aW91c0ZyYWdtZW50RW5kICsgMSk7
CisgICAgICAgIGZyYWdtZW50LmVuZCA9IGNvbnRlbnRJdGVyYXRvci5maW5kTmV4dEJyZWFrYWJs
ZVBvc2l0aW9uKHByZXZpb3VzRnJhZ21lbnRFbmQgKyAxKTsKICAgICBib29sIG11bHRpcGxlID0g
ZnJhZ21lbnQuc3RhcnQgKyAxIDwgZnJhZ21lbnQuZW5kOwogICAgIGZyYWdtZW50LmlzQ29sbGFw
c2VkV2hpdGVzcGFjZSA9IG11bHRpcGxlICYmIGZyYWdtZW50LmlzV2hpdGVzcGFjZU9ubHkgJiYg
c3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwogICAgIC8vIE5vbi1jb2xsYXBzZWQgd2hpdGVzcGFj
ZSBvciBqdXN0IHBsYWluIHdvcmRzIHdoZW4gImJyZWFrIHdvcmQgb24gb3ZlcmZsb3ciIGlzIG9u
IGNhbiB3cmFwLgpAQCAtNTM1LDE4ICs1NzcsMTggQEAgc3RhdGljIFRleHRGcmFnbWVudCBuZXh0
RnJhZ21lbnQodW5zaWduZWQgcHJldmlvdXNGcmFnbWVudEVuZCwgTGF6eUxpbmVCcmVha0l0ZXIK
ICAgICBlbHNlIGlmIChmcmFnbWVudExlbmd0aCA9PSBzcGFjZUNvdW50KSAvLyBTcGFjZSBvbmx5
LgogICAgICAgICBmcmFnbWVudC53aWR0aCA9IHN0eWxlLnNwYWNlV2lkdGggKiBzcGFjZUNvdW50
OwogICAgIGVsc2UKLSAgICAgICAgZnJhZ21lbnQud2lkdGggPSB0ZXh0V2lkdGgodGV4dFJlbmRl
cmVyLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBmcmFnbWVudC5zdGFydCwgZnJhZ21lbnQuZW5kLCB4UG9z
aXRpb24sIHN0eWxlKTsKKyAgICAgICAgZnJhZ21lbnQud2lkdGggPSBjb250ZW50SXRlcmF0b3Iu
dGV4dFdpZHRoKGZyYWdtZW50LnN0YXJ0LCBmcmFnbWVudC5lbmQsIHhQb3NpdGlvbik7CiAgICAg
cmV0dXJuIGZyYWdtZW50OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
LWJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVj
dG9yJiBsaW5lUnVucywgTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwg
Y29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LAotICAgIHVuc2ln
bmVkIHRleHRMZW5ndGgsIGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlcikKK2Jvb2wgY3Jl
YXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5l
UnVucywgRmxvd0NvbnRlbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9y
KQogeworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gY29udGVudEl0ZXJhdG9yLnN0eWxlKCk7CiAg
ICAgYm9vbCBsaW5lQ2FuQmVXcmFwcGVkID0gc3R5bGUud3JhcExpbmVzIHx8IHN0eWxlLmJyZWFr
V29yZE9uT3ZlcmZsb3c7Ci0gICAgd2hpbGUgKGxpbmVTdGF0ZS5wb3NpdGlvbiA8IHRleHRMZW5n
dGgpIHsKKyAgICB3aGlsZSAoIWNvbnRlbnRJdGVyYXRvci5pc0VuZE9mQ29udGVudChsaW5lU3Rh
dGUucG9zaXRpb24pKSB7CiAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgdGV4dCBmcmFnbWVudC4g
U3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBmcmFnbWVudCAtY3VycmVudCBsaW5l
IGVuZC4KLSAgICAgICAgVGV4dEZyYWdtZW50IGZyYWdtZW50ID0gbmV4dEZyYWdtZW50KGxpbmVT
dGF0ZS5wb3NpdGlvbiwgbGluZUJyZWFrSXRlcmF0b3IsIHN0eWxlLCB0ZXh0LCB0ZXh0TGVuZ3Ro
LCBsaW5lU3RhdGUud2lkdGgoKSwgdGV4dFJlbmRlcmVyKTsKKyAgICAgICAgVGV4dEZyYWdtZW50
IGZyYWdtZW50ID0gbmV4dEZyYWdtZW50KGxpbmVTdGF0ZS5wb3NpdGlvbiwgY29udGVudEl0ZXJh
dG9yLCBsaW5lU3RhdGUud2lkdGgoKSk7CiAgICAgICAgIGlmICgobGluZUNhbkJlV3JhcHBlZCAm
JiAhbGluZVN0YXRlLmZpdHMoZnJhZ21lbnQud2lkdGgpKSB8fCBmcmFnbWVudC5tdXN0QnJlYWsp
IHsKICAgICAgICAgICAgIC8vIE92ZXJmbG93IHdyYXBwaW5nIGJlaGF2aW91cjoKICAgICAgICAg
ICAgIC8vIDEuIE5ld2xpbmUgY2hhcmFjdGVyOiB3cmFwcyB0aGUgbGluZSB1bmxlc3MgaXQncyB0
cmVhdGVkIGFzIHdoaXRlc3BhY2UuCkBAIC01NjgsNyArNjEwLDcgQEAgYm9vbCBjcmVhdGVMaW5l
UnVucyhMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBM
YXp5TGluZUIKICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJhZ21lbnQuaXNXaGl0ZXNwYWNlT25s
eSB8fCAoKGlzRmlyc3RGcmFnbWVudCAmJiBzdHlsZS5icmVha1dvcmRPbk92ZXJmbG93KSB8fCAh
c3R5bGUud3JhcExpbmVzKSkgeyAvLyAhc3R5bGUud3JhcExpbmVzOiBidWcxMzgxMDIocHJlc2Vy
dmUgZXhpc3RpbmcgYmVoYXZpb3IpCiAgICAgICAgICAgICAgICAgLy8gV2hpdGVzcGFjZSBjb2xs
YXBzZSBpcyBvZmYgb3Igbm9uLXdoaXRlc3BhY2UgY29udGVudC4gc3BsaXQgdGhlIGZyYWdtZW50
OyAobW9kaWZpZWQpZnJhZ21lbnQgLT4gdGhpcyBsaW5lU3RhdGUsIG92ZWZsb3dlZEZyYWdtZW50
IC0+IG5leHQgbGluZS4KICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgaXMgdGhlIG9ubHkg
KGZpcnN0KSBmcmFnbWVudCwgdGhlIGZpcnN0IGNoYXJhY3RlciBzdGF5cyBvbiB0aGUgbGluZSwg
ZXZlbiBpZiBpdCBkb2VzIG5vdCBmaXQuCi0gICAgICAgICAgICAgICAgbGluZVN0YXRlLm92ZWZs
b3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVudCwgbGluZVN0YXRl
LmF2YWlsYWJsZVdpZHRoIC0gbGluZVN0YXRlLndpZHRoKCksIGlzRmlyc3RGcmFnbWVudCwgdGV4
dFJlbmRlcmVyLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBzdHlsZSk7CisgICAgICAgICAgICAgICAgbGlu
ZVN0YXRlLm92ZWZsb3dlZEZyYWdtZW50ID0gc3BsaXRGcmFnbWVudFRvRml0TGluZShmcmFnbWVu
dCwgbGluZVN0YXRlLmF2YWlsYWJsZVdpZHRoIC0gbGluZVN0YXRlLndpZHRoKCksIGlzRmlyc3RG
cmFnbWVudCwgY29udGVudEl0ZXJhdG9yKTsKICAgICAgICAgICAgICAgICBpZiAoIWZyYWdtZW50
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXaGl0ZXNwYWNlIGZyYWdtZW50
cyBjYW4gZ2V0IHB1c2hlZCBlbnRpcmVseSB0byB0aGUgbmV4dCBsaW5lLgogICAgICAgICAgICAg
ICAgICAgICBsaW5lU3RhdGUuYWRkVW5jb21taXR0ZWQoZnJhZ21lbnQpOwpAQCAtNTkzLDIwICs2
MzUsMTkgQEAgYm9vbCBjcmVhdGVMaW5lUnVucyhMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0
OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBMYXp5TGluZUIKICAgICAgICAgICAgIGxpbmVTdGF0ZS5h
ZGRVbmNvbW1pdHRlZChmcmFnbWVudCk7CiAgICAgfQogICAgIGxpbmVTdGF0ZS5jb21taXRBbmRD
cmVhdGVSdW4obGluZVJ1bnMpOwotICAgIHJldHVybiBsaW5lU3RhdGUucG9zaXRpb24gPj0gdGV4
dExlbmd0aCAmJiBsaW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21lbnQuaXNFbXB0eSgpOworICAgIHJl
dHVybiBjb250ZW50SXRlcmF0b3IuaXNFbmRPZkNvbnRlbnQobGluZVN0YXRlLnBvc2l0aW9uKSAm
JiBsaW5lU3RhdGUub3ZlZmxvd2VkRnJhZ21lbnQuaXNFbXB0eSgpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFk
anVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVu
cywgdW5zaWduZWQmIGxpbmVDb3VudCwKLSAgICBjb25zdCBTdHlsZSYgc3R5bGUsIGNvbnN0IENo
YXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIHRleHRMZW5ndGgpCit2b2lkIGNsb3NlTGluZUVu
ZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lU3RhdGUsIExheW91dDo6UnVuVmVjdG9y
JiBsaW5lUnVucywgdW5zaWduZWQmIGxpbmVDb3VudCwgY29uc3QgRmxvd0NvbnRlbnRJdGVyYXRv
cjxDaGFyYWN0ZXJUeXBlPiYgY29udGVudEl0ZXJhdG9yKQogewogICAgIGlmIChsaW5lU3RhdGUu
bGluZVN0YXJ0UnVuSW5kZXggPT0gbGluZVJ1bnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBBU1NFUlQobGluZVJ1bnMuc2l6ZSgpKTsKLSAgICByZW1vdmVUcmFpbGluZ1doaXRlc3Bh
Y2UobGluZVN0YXRlLCBsaW5lUnVucywgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgpOworICAgIHJl
bW92ZVRyYWlsaW5nV2hpdGVzcGFjZShsaW5lU3RhdGUsIGxpbmVSdW5zLCBjb250ZW50SXRlcmF0
b3IpOwogICAgIC8vIEFkanVzdCBydW5zJyBwb3NpdGlvbiBieSB0YWtpbmcgbGluZSdzIGFsaWdu
bWVudCBpbnRvIGFjY291bnQuCi0gICAgaWYgKGZsb2F0IGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1
dGVMaW5lTGVmdChzdHlsZS50ZXh0QWxpZ24sIGxpbmVTdGF0ZS5hdmFpbGFibGVXaWR0aCwgbGlu
ZVN0YXRlLmNvbW1pdHRlZFdpZHRoLCBsaW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpKSB7Cisg
ICAgaWYgKGZsb2F0IGxpbmVMb2dpY2FsTGVmdCA9IGNvbXB1dGVMaW5lTGVmdChjb250ZW50SXRl
cmF0b3Iuc3R5bGUoKS50ZXh0QWxpZ24sIGxpbmVTdGF0ZS5hdmFpbGFibGVXaWR0aCwgbGluZVN0
YXRlLmNvbW1pdHRlZFdpZHRoLCBsaW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpKSB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGxpbmVTdGF0ZS5saW5lU3RhcnRSdW5JbmRleDsgaSA8IGxp
bmVSdW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBsaW5lUnVuc1tpXS5sb2dpY2FsTGVm
dCArPSBsaW5lTG9naWNhbExlZnQ7CiAgICAgICAgICAgICBsaW5lUnVuc1tpXS5sb2dpY2FsUmln
aHQgKz0gbGluZUxvZ2ljYWxMZWZ0OwpAQCAtNjI4LDM5ICs2NjksMzUgQEAgc3RhdGljIHZvaWQg
dXBkYXRlTGluZUNvbnN0cmFpbnMoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBmbG9hdCYg
YXZhaWxhYmxlV2kKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lk
IGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCYgbGluZUNv
dW50LCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIFJlbmRlclRleHQmIHRleHRSZW5kZXJlcikKK3Zv
aWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgdW5zaWduZWQmIGxpbmVDb3VudCkKIHsKLSAgICBjb25zdCBTdHlsZSBzdHlsZShm
bG93LnN0eWxlKCkpOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQgPSB0ZXh0UmVuZGVy
ZXIudGV4dCgpLT5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgdGV4dExlbmd0aCA9IHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCk7CiAgICAgTGF5b3V0VW5p
dCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlID0gZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7
CiAgICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21GbG93KGZsb3cpOwot
ICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBsaW5lQnJlYWtJdGVyYXRvcih0ZXh0UmVuZGVyZXIu
dGV4dCgpLCBmbG93LnN0eWxlKCkubG9jYWxlKCkpOwogICAgIExpbmVTdGF0ZSBsaW5lU3RhdGU7
CiAgICAgYm9vbCBpc0VuZE9mQ29udGVudCA9IGZhbHNlOworICAgIEZsb3dDb250ZW50SXRlcmF0
b3I8Q2hhcmFjdGVyVHlwZT4gY29udGVudEl0ZXJhdG9yID0gRmxvd0NvbnRlbnRJdGVyYXRvcjxD
aGFyYWN0ZXJUeXBlPihmbG93KTsKIAogICAgIGRvIHsKICAgICAgICAgZmxvdy5zZXRMb2dpY2Fs
SGVpZ2h0KGxpbmVIZWlnaHQgKiBsaW5lQ291bnQgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsK
ICAgICAgICAgdXBkYXRlTGluZUNvbnN0cmFpbnMoZmxvdywgbGluZVN0YXRlLmF2YWlsYWJsZVdp
ZHRoLCBsaW5lU3RhdGUubG9naWNhbExlZnRPZmZzZXQpOwotICAgICAgICBpbml0aWFsaXplTmV3
TGluZShsaW5lU3RhdGUsIHN0eWxlLCB0ZXh0LCB0ZXh0TGVuZ3RoLCBydW5zLnNpemUoKSk7Ci0g
ICAgICAgIGlzRW5kT2ZDb250ZW50ID0gY3JlYXRlTGluZVJ1bnMobGluZVN0YXRlLCBydW5zLCBs
aW5lQnJlYWtJdGVyYXRvciwgc3R5bGUsIHRleHQsIHRleHRMZW5ndGgsIHRleHRSZW5kZXJlcik7
Ci0gICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZVN0YXRlLCBydW5zLCBs
aW5lQ291bnQsIHN0eWxlLCB0ZXh0LCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgaW5pdGlhbGl6ZU5l
d0xpbmUobGluZVN0YXRlLCBjb250ZW50SXRlcmF0b3IsIHJ1bnMuc2l6ZSgpKTsKKyAgICAgICAg
aXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lU3RhdGUsIHJ1bnMsIGNvbnRlbnRJ
dGVyYXRvcik7CisgICAgICAgIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMobGluZVN0YXRl
LCBydW5zLCBsaW5lQ291bnQsIGNvbnRlbnRJdGVyYXRvcik7CiAgICAgfSB3aGlsZSAoIWlzRW5k
T2ZDb250ZW50KTsKICAgICBBU1NFUlQoIWxpbmVTdGF0ZS51bmNvbW1pdHRlZFdpZHRoKTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPExheW91dD4gY3JlYXRlKFJlbmRlckJsb2NrRmxvdyYgZmxvdykK
IHsKLSAgICBMYXlvdXQ6OlJ1blZlY3RvciBydW5zOwogICAgIHVuc2lnbmVkIGxpbmVDb3VudCA9
IDA7Ci0KKyAgICBMYXlvdXQ6OlJ1blZlY3RvciBydW5zOwogICAgIFJlbmRlclRleHQmIHRleHRS
ZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpmbG93LmZpcnN0Q2hpbGQoKSk7CiAgICAg
QVNTRVJUKCF0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCkpOwogCiAgICAgaWYgKHRleHRSZW5k
ZXJlci5pczhCaXQoKSkKLSAgICAgICAgY3JlYXRlVGV4dFJ1bnM8TENoYXI+KHJ1bnMsIGxpbmVD
b3VudCwgZmxvdywgdGV4dFJlbmRlcmVyKTsKKyAgICAgICAgY3JlYXRlVGV4dFJ1bnM8TENoYXI+
KHJ1bnMsIGZsb3csIGxpbmVDb3VudCk7CiAgICAgZWxzZQotICAgICAgICBjcmVhdGVUZXh0UnVu
czxVQ2hhcj4ocnVucywgbGluZUNvdW50LCBmbG93LCB0ZXh0UmVuZGVyZXIpOworICAgICAgICBj
cmVhdGVUZXh0UnVuczxVQ2hhcj4ocnVucywgZmxvdywgbGluZUNvdW50KTsKIAogICAgIHRleHRS
ZW5kZXJlci5jbGVhck5lZWRzTGF5b3V0KCk7CiAgICAgcmV0dXJuIExheW91dDo6Y3JlYXRlKHJ1
bnMsIGxpbmVDb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXQuaAppbmRleCBkZmJiMDE5N2QxNDQ4ZTUwOWQxMTI2YWI3ZjEzYWM3NDFkZDc5OTkzLi42Njk4
MDAwZmQ4OGViNWMzZGUwMGYwYzM0YTYzMDBjODJkMjRjMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmgKQEAgLTQzLDcgKzQzLDkgQEAgbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewogYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93
Jik7CiAKIHN0cnVjdCBSdW4geworI2lmIENPTVBJTEVSKE1TVkMpCiAgICAgUnVuKCkgeyB9Cisj
ZW5kaWYKICAgICBSdW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgbG9naWNh
bExlZnQsIGZsb2F0IGxvZ2ljYWxSaWdodCwgYm9vbCBpc0VuZE9mTGluZSkKICAgICAgICAgOiBz
dGFydChzdGFydCkKICAgICAgICAgLCBlbmQoZW5kKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>